Adding some missing GPL headers - Alex
[terminatorX.git] / terminatorX / src / tX_extdial.cc
1 /*
2     terminatorX - realtime audio scratching software
3     Copyright (C) 1999-2003  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 */    
20
21 #include "tX_extdial.h"
22 #include "tX_seqpar.h"
23 #include <string.h>
24
25 #define WID_DYN TRUE, TRUE, 0
26 #define WID_FIX FALSE, FALSE, 0
27
28 GtkSignalFunc tX_extdial :: f_entry(GtkWidget *w, tX_extdial *ed)
29 {
30         strcpy(ed->sval, gtk_entry_get_text(GTK_ENTRY(ed->entry)));
31         ed->s2f();
32         gtk_adjustment_set_value(ed->adj, ed->fval);
33         return NULL;
34 }
35
36 GtkSignalFunc tX_extdial :: f_adjustment(GtkWidget *w, tX_extdial *ed)
37 {
38         ed->fval=ed->adj->value;
39         ed->f2s();
40         gtk_entry_set_text(GTK_ENTRY(ed->entry), ed->sval);
41         return NULL;    
42 }
43
44 tX_extdial :: tX_extdial(const char *l, GtkAdjustment *a, tX_seqpar * sp, bool text_below)
45 {
46         adj=a;
47         fval=adj->value;
48         f2s();
49         if (l) label=gtk_label_new(l);
50         dial=gtk_tx_dial_new(adj);
51         entry=gtk_entry_new();
52         gtk_entry_set_max_length(GTK_ENTRY(entry), 5);
53         gtk_entry_set_text(GTK_ENTRY(entry), sval);
54         ignore_adj=0;
55         
56         eventbox=gtk_event_box_new();           
57         mainbox=gtk_vbox_new(FALSE, text_below ? 5 : 0);
58         gtk_container_add(GTK_CONTAINER(eventbox), mainbox);
59         
60         subbox=gtk_hbox_new(TRUE, 0);
61         gtk_box_pack_start(GTK_BOX(subbox), dial, WID_FIX);
62         gtk_box_pack_start(GTK_BOX(mainbox), subbox, WID_FIX);
63         gtk_box_pack_start(GTK_BOX(text_below ? mainbox : subbox), entry, WID_DYN);
64         if (l) gtk_box_pack_start(GTK_BOX(mainbox), label, WID_FIX);
65         
66         if (l) gtk_widget_show(label);
67         gtk_widget_show(entry);
68         gtk_entry_set_width_chars(GTK_ENTRY(entry), 4);
69         gtk_widget_show(dial);
70         gtk_widget_show(subbox);
71         gtk_widget_show(mainbox);
72         gtk_widget_show(eventbox);
73         
74         g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(tX_extdial::f_entry), (void *) this);
75         g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(tX_extdial::f_adjustment), (void *) this);
76         
77         if (sp) {
78                 g_signal_connect(G_OBJECT(dial), "button_press_event", G_CALLBACK(tX_seqpar::tX_seqpar_press), sp);
79                 g_signal_connect(G_OBJECT(entry), "button_press_event", G_CALLBACK(tX_seqpar::tX_seqpar_press), sp);                    
80                 g_signal_connect(G_OBJECT(eventbox), "button_press_event", G_CALLBACK(tX_seqpar::tX_seqpar_press), sp);                 
81         }
82 }
83
84 tX_extdial :: ~tX_extdial()
85 {
86         gtk_object_destroy(GTK_OBJECT(adj));
87         gtk_widget_destroy(entry);
88         gtk_widget_destroy(label);
89         gtk_widget_destroy(dial);
90         gtk_widget_destroy(subbox);
91         gtk_widget_destroy(mainbox);
92         gtk_widget_destroy(eventbox);   
93 }