8f136d91a8d22336499cdac0646c8736b30a2fe8
[gencolormap.git] / gui.hpp
1 /*
2  * Copyright (C) 2015 Computer Graphics Group, University of Siegen
3  * Written by Martin Lambers <martin.lambers@uni-siegen.de>
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy
6  * of this software and associated documentation files (the "Software"), to deal
7  * in the Software without restriction, including without limitation the rights
8  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9  * copies of the Software, and to permit persons to whom the Software is
10  * furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in
13  * all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  */
23
24 #ifndef GUI_HPP
25 #define GUI_HPP
26
27 #include <vector>
28
29 #include <QMainWindow>
30
31 class QLabel;
32 class QRadioButton;
33 class QSpinBox;
34 class QSlider;
35 class QDoubleSpinBox;
36
37
38 class CombinedSliderSpinBox : public QObject
39 {
40 Q_OBJECT
41 private:
42     bool _update_lock;
43 public:
44     float minval, maxval, step;
45     QSlider* slider;
46     QDoubleSpinBox* spinbox;
47
48     CombinedSliderSpinBox(float minval, float maxval, float step);
49     float value() const;
50     void setValue(float v);
51
52 private slots:
53     void slider_changed();
54     void spinbox_changed();
55
56 signals:
57     void valueChanged(float);
58 };
59
60 class GUI : public QMainWindow
61 {
62 Q_OBJECT
63
64 public:
65     GUI();
66     ~GUI();
67
68 private:
69     bool update_lock;
70     QRadioButton* type_seq_btn;
71     QRadioButton* type_div_btn;
72     QSpinBox* n_spinbox;
73     CombinedSliderSpinBox* hue_changer;
74     QLabel* divergence_label;
75     CombinedSliderSpinBox* divergence_changer;
76     QLabel* warmth_label;
77     CombinedSliderSpinBox* warmth_changer;
78     CombinedSliderSpinBox* contrast_changer;
79     CombinedSliderSpinBox* saturation_changer;
80     CombinedSliderSpinBox* brightness_changer;
81     QLabel* colormap_label;
82
83     void get_params(int& type, int& n, float& hue, float& divergence,
84             float& contrast, float& saturation, float& brightness,
85             float& warmth);
86     std::vector<unsigned char> get_map(int type, int n, float hue, float divergence,
87             float contrast, float saturation, float brightness,
88             float warmth);
89
90
91 private slots:
92     void update();
93
94     void file_export_png();
95     void file_export_csv();
96     void edit_reset();
97     void edit_copy_as_img();
98     void edit_copy_as_txt();
99     void help_about();
100 };
101
102 #endif