1 /*
2 * Copyright (c) Tony Bybell 1999-2008.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
8 */
9
10 #include <config.h>
11 #include <gtk/gtk.h>
12 #include "splay.h"
13
14 #if WAVE_USE_GTK2
15 #define set_winsize(w,x,y) gtk_window_set_default_size(GTK_WINDOW(w),(x),(y))
16 void create_toolbar(GtkWidget *table);
17 #else
18 #define set_winsize(w,x,y) gtk_widget_set_usize(GTK_WIDGET(w),(x),(y))
19 #endif
20
21 GtkWidget *notebook = NULL;
22
23 void bwmaketree(void);
24 void bwlogbox(char *title, int width, ds_Tree *t, int display_mode);
25 void setup_dnd(GtkWidget *wid);
26
27 static ds_Tree *selectedtree=NULL;
28
29 static int is_active=0;
30 GtkCTree *ctree_main=NULL;
31
select_row_callback(GtkWidget * widget,gint row,gint column,GdkEventButton * event,gpointer data)32 static void select_row_callback(GtkWidget *widget, gint row, gint column,
33 GdkEventButton *event, gpointer data)
34 {
35 (void)widget;
36 (void)column;
37 (void)event;
38 (void)data;
39
40 ds_Tree *t=(ds_Tree *)gtk_clist_get_row_data(GTK_CLIST(ctree_main), row);
41 selectedtree=t;
42
43 if(t->filename)
44 {
45 /*
46 printf("%s\n", t->fullname);
47 printf("%s -> '%s' %d-%d\n\n", t->item, t->filename, t->s_line, t->e_line);
48 */
49
50 bwlogbox(t->fullname, 640 + 8*8, t, 0);
51 }
52 else
53 {
54 /*
55 printf("%s\n", t->fullname);
56 printf("%s -> *MISSING*\n\n", t->item);
57 */
58 }
59 }
60
unselect_row_callback(GtkWidget * widget,gint row,gint column,GdkEventButton * event,gpointer data)61 static void unselect_row_callback(GtkWidget *widget, gint row, gint column,
62 GdkEventButton *event, gpointer data)
63 {
64 (void)widget;
65 (void)row;
66 (void)column;
67 (void)event;
68 (void)data;
69
70 /* ds_Tree *t=(ds_Tree *)gtk_clist_get_row_data(GTK_CLIST(ctree_main), row); */
71 selectedtree=NULL;
72 }
73
treebox_is_active(void)74 int treebox_is_active(void)
75 {
76 return(is_active);
77 }
78
79
80 /***************************************************************************/
81
82 static GtkWidget *window;
83 static GtkWidget *tree;
84 static GtkSignalFunc cleanup;
85
86
destroy_callback(GtkWidget * widget,GtkWidget * nothing)87 static void destroy_callback(GtkWidget *widget, GtkWidget *nothing)
88 {
89 (void)widget;
90 (void)nothing;
91
92 is_active=0;
93 gtk_widget_destroy(window);
94 gtk_main_quit();
95 }
96
97
98
99 /*
100 * mainline..
101 */
treebox(char * title,GtkSignalFunc func,GtkWidget * old_window)102 void treebox(char *title, GtkSignalFunc func, GtkWidget *old_window)
103 {
104 (void)old_window;
105
106 GtkWidget *scrolled_win;
107 GtkWidget *frame2;
108 GtkWidget *table;
109 GtkCList *clist;
110 #ifndef WAVE_USE_GTK2
111 GtkWidget *frameh;
112 GtkWidget *button5;
113 GtkWidget *hbox;
114 #endif
115
116 if(is_active)
117 {
118 gdk_window_raise(window->window);
119 return;
120 }
121
122 is_active=1;
123 cleanup=func;
124
125 /* create a new modal window */
126 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
127 gtk_window_set_title(GTK_WINDOW (window), title);
128 gtk_signal_connect(GTK_OBJECT (window), "delete_event",
129 (GtkSignalFunc) destroy_callback, NULL);
130 set_winsize(window, 640, 600);
131
132
133 table = gtk_table_new (256, 1, FALSE);
134 gtk_widget_show (table);
135
136 #ifndef WAVE_USE_GTK2
137 frame2 = gtk_frame_new (NULL);
138 gtk_widget_show(frame2);
139 #else
140 frame2 = gtk_hpaned_new();
141 gtk_widget_show(frame2);
142
143 notebook = gtk_notebook_new();
144 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
145 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), ~0);
146 gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook), ~0);
147 gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), ~0);
148 gtk_notebook_popup_enable(GTK_NOTEBOOK(notebook));
149
150 gtk_widget_show(notebook);
151 gtk_paned_pack2(GTK_PANED(frame2), notebook, TRUE, TRUE);
152 #endif
153
154 gtk_table_attach (GTK_TABLE (table), frame2, 0, 1, 0, 255,
155 GTK_FILL | GTK_EXPAND,
156 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 1, 1);
157
158 tree=gtk_ctree_new(1,0);
159 ctree_main=GTK_CTREE(tree);
160 gtk_clist_set_column_auto_resize (GTK_CLIST (tree), 0, TRUE);
161 gtk_widget_show(tree);
162
163 clist=GTK_CLIST(tree);
164 gtk_signal_connect_object (GTK_OBJECT (clist), "select_row",
165 GTK_SIGNAL_FUNC(select_row_callback),
166 NULL);
167 gtk_signal_connect_object (GTK_OBJECT (clist), "unselect_row",
168 GTK_SIGNAL_FUNC(unselect_row_callback),
169 NULL);
170
171 gtk_clist_freeze(clist);
172 gtk_clist_clear(clist);
173
174 bwmaketree();
175 gtk_clist_thaw(clist);
176 selectedtree=NULL;
177
178 scrolled_win = gtk_scrolled_window_new (NULL, NULL);
179 #ifndef WAVE_USE_GTK2
180 gtk_widget_set_usize( GTK_WIDGET (scrolled_win), -1, 300);
181 #else
182 gtk_widget_set_usize( GTK_WIDGET (scrolled_win), 150, 300);
183 #endif
184 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
185 GTK_POLICY_AUTOMATIC,
186 GTK_POLICY_AUTOMATIC);
187 gtk_widget_show(scrolled_win);
188 gtk_container_add (GTK_CONTAINER (scrolled_win), GTK_WIDGET (tree));
189
190 #ifndef WAVE_USE_GTK2
191 gtk_container_add (GTK_CONTAINER (frame2), scrolled_win);
192 #else
193 gtk_paned_pack1(GTK_PANED(frame2), scrolled_win, TRUE, TRUE);
194 #endif
195
196 #ifndef WAVE_USE_GTK2
197 frameh = gtk_frame_new (NULL);
198 gtk_container_border_width (GTK_CONTAINER (frameh), 3);
199 gtk_widget_show(frameh);
200 gtk_table_attach (GTK_TABLE (table), frameh, 0, 1, 255, 256,
201 GTK_FILL | GTK_EXPAND,
202 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 1, 1);
203
204
205 hbox = gtk_hbox_new (FALSE, 1);
206 gtk_widget_show (hbox);
207
208 button5 = gtk_button_new_with_label (" Exit ");
209 gtk_container_border_width (GTK_CONTAINER (button5), 3);
210 gtk_signal_connect_object (GTK_OBJECT (button5), "clicked",
211 GTK_SIGNAL_FUNC(destroy_callback),
212 GTK_OBJECT (window));
213 gtk_widget_show (button5);
214 gtk_box_pack_start (GTK_BOX (hbox), button5, TRUE, TRUE, 0);
215
216 gtk_container_add (GTK_CONTAINER (frameh), hbox);
217 #else
218 create_toolbar(table);
219 #endif
220
221 gtk_container_add (GTK_CONTAINER (window), table);
222
223 gtk_widget_show(window);
224 setup_dnd(window);
225 }
226
227