2 Copyright (C) 2000-2007 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __ardour_gtk_color_manager_h__
21 #define __ardour_gtk_color_manager_h__
23 #include <gtkmm/treeview.h>
24 #include <gtkmm/treestore.h>
25 #include <gtkmm/scrolledwindow.h>
26 #include <gtkmm/colorselection.h>
27 #include <gtkmm/radiobutton.h>
28 #include <gtkmm/button.h>
29 #include <gtkmm/scale.h>
32 #include "canvas/types.h"
33 #include "canvas/canvas.h"
35 #include "ardour_window.h"
37 #include "ui_config.h"
39 namespace ArdourCanvas {
46 class ThemeManager : public ArdourWindow
52 int save (std::string path);
53 void setup_basic_color_display ();
54 void reset_canvas_colors();
56 void on_dark_theme_button_toggled ();
57 void on_light_theme_button_toggled ();
58 void on_flat_buttons_toggled ();
59 void on_blink_rec_arm_toggled ();
60 void on_region_color_toggled ();
61 void on_show_clip_toggled ();
62 void on_waveform_gradient_depth_change ();
63 void on_timeline_item_gradient_depth_change ();
64 void on_all_dialogs_toggled ();
65 void on_icon_set_changed ();
68 Gtk::Notebook notebook;
70 struct BasicColorDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
71 BasicColorDisplayModelColumns() {
78 Gtk::TreeModelColumn<std::string> name;
79 Gtk::TreeModelColumn<Gdk::Color> gdkcolor;
80 Gtk::TreeModelColumn<ColorVariable<ArdourCanvas::Color> *> pVar;
81 Gtk::TreeModelColumn<ArdourCanvas::Color> rgba;
84 BasicColorDisplayModelColumns basic_color_columns;
85 Gtk::TreeView basic_color_display;
86 Glib::RefPtr<Gtk::TreeStore> basic_color_list;
88 bool basic_color_button_press_event (GdkEventButton*);
90 Gtk::ColorSelectionDialog color_dialog;
91 sigc::connection color_dialog_connection;
93 Gtk::ScrolledWindow scroller;
94 Gtk::HBox theme_selection_hbox;
95 Gtk::RadioButton dark_button;
96 Gtk::RadioButton light_button;
97 Gtk::Button reset_button;
98 Gtk::CheckButton flat_buttons;
99 Gtk::CheckButton blink_rec_button;
100 Gtk::CheckButton region_color_button;
101 Gtk::CheckButton show_clipping_button;
102 Gtk::HScale waveform_gradient_depth;
103 Gtk::Label waveform_gradient_depth_label;
104 Gtk::HScale timeline_item_gradient_depth;
105 Gtk::Label timeline_item_gradient_depth_label;
106 Gtk::CheckButton all_dialogs;
107 Gtk::CheckButton gradient_waveforms;
108 Gtk::Label icon_set_label;
109 Gtk::ComboBoxText icon_set_dropdown;
111 /* handles response from color dialog when it used to
114 void basic_color_response (int, ColorVariable<ArdourCanvas::Color>*);
116 /* handls response from color dialog when it is used to
117 edit a derived color.
119 void palette_color_response (int, std::string);
121 Gtk::ScrolledWindow palette_scroller;
122 ArdourCanvas::GtkCanvasViewport palette_viewport;
123 ArdourCanvas::Container* palette_group;
125 /* these methods create and manage a canvas for use in either the
126 palette tab or in a separate dialog. Different behaviour is
127 accomplished by changing the event handler passed into the
128 allocation handler. We do it there because we have to rebuild
129 the canvas on allocation events, and during the rebuild, connect
130 each rectangle to the event handler.
132 the alternative is one event handler for the canvas and a map
133 of where each color rectangle is. nothing wrong with this
134 but the per-rect event setup is simpler and avoids building
135 and looking up the map information.
137 ArdourCanvas::Container* initialize_palette_canvas (ArdourCanvas::Canvas& canvas);
138 void build_palette_canvas (ArdourCanvas::Canvas&, ArdourCanvas::Container&, sigc::slot<bool,GdkEvent*,std::string> event_handler);
139 void palette_canvas_allocated (Gtk::Allocation& alloc, ArdourCanvas::Container* group, ArdourCanvas::Canvas* canvas, sigc::slot<bool,GdkEvent*,std::string> event_handler);
140 void palette_size_request (Gtk::Requisition*);
142 /* handles events from a palette canvas inside the palette (derived
145 bool palette_event (GdkEvent*, std::string name);
146 /* allows user to edit a named color (e.g. "color 3") after clicking
147 on it inside the palette tab.
149 void edit_palette_color (std::string);
151 struct ColorAliasModelColumns : public Gtk::TreeModel::ColumnRecord {
152 ColorAliasModelColumns() {
158 Gtk::TreeModelColumn<std::string> name;
159 Gtk::TreeModelColumn<std::string> alias;
160 Gtk::TreeModelColumn<Gdk::Color> color;
163 ColorAliasModelColumns alias_columns;
164 Gtk::TreeView alias_display;
165 Glib::RefPtr<Gtk::TreeStore> alias_list;
166 Gtk::ScrolledWindow alias_scroller;
168 bool alias_button_press_event (GdkEventButton*);
170 ArdourDialog* palette_window;
171 sigc::connection palette_response_connection;
173 void choose_color_from_palette (std::string const &target_name);
175 bool alias_palette_event (GdkEvent*, std::string, std::string);
176 void alias_palette_response (int, std::string, std::string);
178 void setup_aliases ();
179 void setup_palette ();
182 #endif /* __ardour_gtk_color_manager_h__ */