summaryrefslogtreecommitdiff
path: root/src/pmview/colorlist.h
blob: 8f8a43109599fe409ded9df56ce0f36766cccac9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * Copyright (c) 1997 Silicon Graphics, Inc.  All Rights Reserved.
 * Copyright (c) 2009 Aconex.  All Rights Reserved.
 * 
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */
#ifndef _COLORLIST_H_
#define _COLORLIST_H_

#include "metriclist.h"
#include <QStringList>

struct ColorSpec;

typedef QList<ColorSpec *> ColorsList;

class ColorList
{
private:

    QStringList	_names;
    ColorsList	_colors;

public:

    virtual ~ColorList();

    ColorList();

    int numLists() const
	{ return _colors.size(); }

    const ColorSpec *list(const char *name);

    bool add(const char *name, const char *color = NULL);
    bool add(const char *name, float red, float green, float blue);

    // Add colors
    bool addColor(const char *color);
    bool addColor(float red, float blue, float green);

    // Add scaled colors
    bool addColor(const char *color, double max);
    bool addColor(float red, float green, float blue, double max);

    static bool findColor(const char *color, float &r, float &g, float &b);

    friend QTextStream& operator<<(QTextStream& os, ColorList const& rhs);

private:
    bool findColor(const char *color);

    ColorList(ColorList const &);
    ColorList const& operator=(ColorList const &);
    // Never defined
};

struct ColorSpec
{
    bool		_scale;
    SbColorList		_list;
    QList<double>	_max;

    ColorSpec(bool scale) : _scale(scale) {}
};

extern ColorList	theColorLists;

#endif /* _COLORLIST_H_ */