GUI improvments and fixes - Alex
[terminatorX.git] / src / tX_pbutton.cc
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2002  Alexander K├Ânig
4  
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9  
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14  
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  
19     File: tX_pbutton.cc
20  
21     Description: This implements the pixmaped buttons - based on
22                  gtk+ tutorial.
23
24 */
25
26 #include <gtk/gtk.h>
27 #include <stdio.h>
28 #include "tX_mastergui.h"
29 #include "tX_global.h"
30
31 #include "gui_icons/tx_audioengine.xpm"
32 #include "gui_icons/tx_power.xpm"
33 #include "gui_icons/tx_grab.xpm"
34 #include "gui_icons/tx_smaller_logo.xpm"
35 #include "gui_icons/tx_sequencer.xpm"
36 #include "gui_icons/tx_play.xpm"
37 #include "gui_icons/tx_stop.xpm"
38 #include "gui_icons/tx_record.xpm"
39 #include "gui_icons/tx_wave.xpm"
40 #include "gui_icons/tx_reload.xpm"
41 #include "gui_icons/tx_minimize.xpm"
42 #include "gui_icons/tX_fx_up.xpm"
43 #include "gui_icons/tX_fx_down.xpm"
44 #include "gui_icons/tX_fx_close.xpm"
45 #include "gui_icons/tX_minimize.xpm"
46 #include "gui_icons/tX_min_control.xpm"
47
48 gchar ** tx_icons[]={ tx_audioengine_xpm, tx_power_xpm, tx_grab_xpm, tx_smaller_logo_xpm,
49                       tx_sequencer_xpm, tx_play_xpm, tx_stop_xpm, tx_record_xpm, 
50                       tx_wave_xpm, tx_reload_xpm, tx_minimize_xpm,
51                       tX_fx_up_xpm, tX_fx_down_xpm, tX_fx_close_xpm, tX_minimize_xpm, tX_min_control_xpm };
52
53 GtkWidget *tx_pixmap_widget(int icon_id)
54 {
55     GtkWidget *pixmapwid;
56     GdkPixmap *pixmap;
57     GdkBitmap *mask;
58     GtkStyle *style;
59
60         // printf("id: %i, addr: %08x\n", icon_id, tx_icons[icon_id]);
61
62     /* Get the style of the button to get the
63      * background color. */
64     style = gtk_widget_get_style(main_window);
65
66     /* Now on to the xpm stuff */
67     pixmap = gdk_pixmap_create_from_xpm_d(main_window->window, &mask,
68                                          &style->bg[GTK_STATE_NORMAL],
69                                          (gchar **) tx_icons[icon_id]);
70     pixmapwid = gtk_pixmap_new (pixmap, mask);
71
72     return pixmapwid;
73 }
74
75 GtkWidget *tx_xpm_label_box(int icon_id, gchar *label_text, GtkWidget **labelwidget=NULL)
76 {
77     GtkWidget *box1;
78     GtkWidget *label;
79     GtkWidget *pixmapwid;
80
81     /* Create box for xpm and label */
82     box1 = gtk_hbox_new (FALSE, 0);
83     gtk_container_set_border_width (GTK_CONTAINER (box1), 2);
84
85
86     if (globals.button_type != BUTTON_TYPE_TEXT)
87     {
88             pixmapwid=tx_pixmap_widget(icon_id);
89             gtk_box_pack_start (GTK_BOX (box1), pixmapwid, FALSE, FALSE, 3);
90             gtk_widget_show(pixmapwid);
91     }
92
93     if ((globals.button_type != BUTTON_TYPE_ICON) || (labelwidget!=NULL))
94     {
95             label = gtk_label_new (label_text);
96             gtk_box_pack_start (GTK_BOX (box1), label, FALSE, FALSE, 3);
97             gtk_widget_show(label); 
98                 if (labelwidget!=NULL) {
99                         *labelwidget=label;
100                 }
101     }
102
103     return(box1);
104 }
105
106 //GtkWidget *tx_xpm_button_new(int icon_id, char *label, int toggle)
107 extern GtkWidget *tx_xpm_button_new(int icon_id, char *label, int toggle, GtkWidget **labelwidget=NULL)
108 {
109         GtkWidget *box;
110         GtkWidget *button;
111         
112         if (toggle) button=gtk_toggle_button_new();
113         else button=gtk_button_new();
114         
115         box=tx_xpm_label_box(icon_id, label, labelwidget);
116         gtk_widget_show(box);
117         gtk_container_add (GTK_CONTAINER (button), box);                
118         
119         return(button);
120 }
121