This one's for oofus: optionally show solo mute status (FEATURE FREEZE my ass!)
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / stateful_button.h
1 /*
2     Copyright (C) 2005 Paul Davis
3
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.
8
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.
13
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.
17
18     $Id$
19 */
20
21 #ifndef __pbd_gtkmm_abutton_h__
22 #define __pbd_gtkmm_abutton_h__
23
24 #include <vector>
25
26 #include <gtkmm/togglebutton.h>
27
28 namespace Gtkmm2ext {
29
30 class StateButton 
31 {
32    public:
33         StateButton();
34         virtual ~StateButton() {}
35
36         void set_colors (const std::vector<Gdk::Color>& colors);
37         void set_visual_state (int);
38         int  get_visual_state () { return visual_state; }
39         void set_self_managed (bool yn) { _self_managed = yn; }
40
41   protected:
42         std::vector<Gdk::Color> colors;
43         int  visual_state;
44         Gdk::Color saved_bg;
45         bool have_saved_bg;
46         bool _self_managed;
47
48         virtual void bg_modify (Gtk::StateType, Gdk::Color) = 0;
49 };
50
51
52 class StatefulToggleButton : public StateButton, public Gtk::ToggleButton
53 {
54    public:
55         StatefulToggleButton() {}
56         explicit StatefulToggleButton(const std::string &label) : Gtk::ToggleButton (label) {}
57         ~StatefulToggleButton() {}
58
59   protected:
60         void on_realize ();
61         void on_toggled ();
62
63         void bg_modify (Gtk::StateType state, Gdk::Color col) { 
64                 modify_bg (state, col);
65         }
66 };
67
68 class StatefulButton : public StateButton, public Gtk::Button
69 {
70    public:
71         StatefulButton() {}
72         explicit StatefulButton(const std::string &label) : Gtk::Button (label) {}
73         virtual ~StatefulButton() {}
74
75   protected:
76         void on_realize ();
77
78         void bg_modify (Gtk::StateType state, Gdk::Color col) { 
79                 modify_bg (state, col);
80         }
81 };
82
83 };
84
85 #endif