comparison src/gtkdebug.c @ 8953:0277908e367d

[gaim-migrate @ 9726] find and save buttons for the debug window from nosnilmot committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sun, 16 May 2004 17:44:37 +0000
parents 92cbf9713795
children 91856b52a391
comparison
equal deleted inserted replaced
8952:e3f4657fa555 8953:0277908e367d
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 */ 24 */
25 #include "gtkinternal.h" 25 #include "gtkinternal.h"
26 26
27 #include "prefs.h" 27 #include "prefs.h"
28 #include "request.h"
28 #include "util.h" 29 #include "util.h"
29 30
30 #include "gtkdebug.h" 31 #include "gtkdebug.h"
31 #include "gtkimhtml.h" 32 #include "gtkimhtml.h"
33 #include "gtkutils.h"
32 #include "stock.h" 34 #include "stock.h"
33 35
34 #include "ui.h" 36 #include "ui.h"
35 37
36 extern int opt_debug; 38 extern int opt_debug;
37 39
38 typedef struct 40 typedef struct
39 { 41 {
40 GtkWidget *window; 42 GtkWidget *window;
41 GtkWidget *text; 43 GtkWidget *text;
44 GtkWidget *find;
42 45
43 gboolean timestamps; 46 gboolean timestamps;
44 gboolean paused; 47 gboolean paused;
45 48
46 guint timestamps_handle; 49 guint timestamps_handle;
56 "#FF0000", /**< Fatal errors. */ 59 "#FF0000", /**< Fatal errors. */
57 }; 60 };
58 61
59 static DebugWindow *debug_win = NULL; 62 static DebugWindow *debug_win = NULL;
60 63
64 struct _find {
65 DebugWindow *window;
66 GtkWidget *entry;
67 };
68
61 static gint 69 static gint
62 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused) 70 debug_window_destroy(GtkWidget *w, GdkEvent *event, void *unused)
63 { 71 {
64 if (debug_win->timestamps_handle != 0) 72 if (debug_win->timestamps_handle != 0)
65 gaim_prefs_disconnect_callback(debug_win->timestamps_handle); 73 gaim_prefs_disconnect_callback(debug_win->timestamps_handle);
79 gaim_prefs_set_int("/gaim/gtk/debug/width", event->width); 87 gaim_prefs_set_int("/gaim/gtk/debug/width", event->width);
80 gaim_prefs_set_int("/gaim/gtk/debug/height", event->height); 88 gaim_prefs_set_int("/gaim/gtk/debug/height", event->height);
81 } 89 }
82 90
83 return FALSE; 91 return FALSE;
92 }
93
94 static void
95 do_find_cb(GtkWidget *widget, gint resp, struct _find *f)
96 {
97 switch (resp) {
98 case GTK_RESPONSE_OK:
99 gtk_imhtml_search_find(GTK_IMHTML(f->window->text),
100 gtk_entry_get_text(GTK_ENTRY(f->entry)));
101 break;
102
103 case GTK_RESPONSE_DELETE_EVENT:
104 case GTK_RESPONSE_CLOSE:
105 gtk_imhtml_search_clear(GTK_IMHTML(f->window->text));
106 gtk_widget_destroy(f->window->find);
107 f->window->find = NULL;
108 g_free(f);
109 break;
110 }
111 }
112
113 static void
114 find_cb(GtkWidget *w, DebugWindow *win)
115 {
116 GtkWidget *hbox, *img, *label;
117 struct _find *f;
118
119 if(win->find)
120 {
121 gtk_window_present(GTK_WINDOW(win->find));
122 return;
123 }
124
125 f = g_malloc(sizeof(struct _find));
126 f->window = win;
127 win->find = gtk_dialog_new_with_buttons(_("Find"),
128 GTK_WINDOW(win->window), GTK_DIALOG_DESTROY_WITH_PARENT,
129 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
130 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL);
131 gtk_dialog_set_default_response(GTK_DIALOG(win->find),
132 GTK_RESPONSE_OK);
133 g_signal_connect(G_OBJECT(win->find), "response",
134 G_CALLBACK(do_find_cb), f);
135
136 gtk_container_set_border_width(GTK_CONTAINER(win->find), 6);
137 gtk_window_set_resizable(GTK_WINDOW(win->find), FALSE);
138 gtk_dialog_set_has_separator(GTK_DIALOG(win->find), FALSE);
139 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(win->find)->vbox), 12);
140 gtk_container_set_border_width(
141 GTK_CONTAINER(GTK_DIALOG(win->find)->vbox), 6);
142
143 hbox = gtk_hbox_new(FALSE, 12);
144 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(win->find)->vbox),
145 hbox);
146 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION,
147 GTK_ICON_SIZE_DIALOG);
148 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
149
150 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
151 gtk_dialog_set_response_sensitive(GTK_DIALOG(win->find),
152 GTK_RESPONSE_OK, FALSE);
153
154 label = gtk_label_new(NULL);
155 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:"));
156 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
157
158 f->entry = gtk_entry_new();
159 gtk_entry_set_activates_default(GTK_ENTRY(f->entry), TRUE);
160 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(f->entry));
161 g_signal_connect(G_OBJECT(f->entry), "changed",
162 G_CALLBACK(gaim_gtk_set_sensitive_if_input),
163 win->find);
164 gtk_box_pack_start(GTK_BOX(hbox), f->entry, FALSE, FALSE, 0);
165
166 gtk_widget_show_all(win->find);
167 gtk_widget_grab_focus(f->entry);
168 }
169
170 static void
171 do_save_cb(GtkWidget *wid)
172 {
173 DebugWindow *win = NULL;
174 const char *filename;
175 char *tmp;
176 FILE *fp;
177
178 win = g_object_get_data(G_OBJECT(GTK_FILE_SELECTION(wid)->ok_button),
179 "gaim_debugwin");
180
181 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
182 gtk_widget_destroy(wid);
183
184 if (filename == NULL)
185 return;
186
187 if ((fp = fopen(filename, "w+")) == NULL)
188 return;
189
190 if (debug_win == NULL)
191 return;
192
193 tmp = gtk_imhtml_get_text(GTK_IMHTML(win->text), NULL, NULL);
194 fprintf(fp, "Gaim Debug log : %s\n", gaim_date_full());
195 fprintf(fp, "%s", tmp);
196 g_free(tmp);
197
198 fclose(fp);
199 }
200
201 static void
202 do_check_save_cb(GtkObject *obj, GtkWidget *wid)
203 {
204 const char *filename;
205
206 filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
207 if (gaim_gtk_check_if_dir(filename, GTK_FILE_SELECTION(wid)))
208 return;
209
210 if (g_file_test(filename, G_FILE_TEST_EXISTS))
211 {
212 gaim_request_yes_no(NULL, NULL, _("That file already exists"),
213 _("Would you like to overwrite it?"), 1, wid,
214 G_CALLBACK(do_save_cb), NULL);
215 }
216 else
217 do_save_cb(wid);
218 }
219
220 static void
221 save_cb(GtkWidget *w, DebugWindow *win)
222 {
223 char buf[BUF_LONG];
224 GtkWidget *window;
225
226 window = gtk_file_selection_new(_("Save Debug Log"));
227 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S "gaim-debug.log",
228 gaim_home_dir());
229 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
230 g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button),
231 "gaim_debugwin", win);
232 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button),
233 "clicked", G_CALLBACK(do_check_save_cb), window);
234 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button),
235 "clicked", G_CALLBACK(gtk_widget_destroy), (gpointer)window);
236
237 gtk_widget_show(window);
84 } 238 }
85 239
86 static void 240 static void
87 clear_cb(GtkWidget *w, DebugWindow *win) 241 clear_cb(GtkWidget *w, DebugWindow *win)
88 { 242 {
150 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), 304 gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar),
151 GTK_ICON_SIZE_SMALL_TOOLBAR); 305 GTK_ICON_SIZE_SMALL_TOOLBAR);
152 306
153 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); 307 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
154 308
155 #if 0
156 /* Find button */ 309 /* Find button */
157 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND, 310 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_FIND,
158 NULL, NULL, NULL, NULL, -1); 311 NULL, NULL, G_CALLBACK(find_cb), win, -1);
159 312
160 /* Save */ 313 /* Save */
161 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE, 314 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_SAVE,
162 NULL, NULL, NULL, NULL, -1); 315 NULL, NULL, G_CALLBACK(save_cb), win, -1);
163 #endif
164 316
165 /* Clear button */ 317 /* Clear button */
166 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR, 318 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_CLEAR,
167 NULL, NULL, G_CALLBACK(clear_cb), win, -1); 319 NULL, NULL, G_CALLBACK(clear_cb), win, -1);
168 320
179 button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), 331 button = gtk_toolbar_append_element(GTK_TOOLBAR(toolbar),
180 GTK_TOOLBAR_CHILD_TOGGLEBUTTON, 332 GTK_TOOLBAR_CHILD_TOGGLEBUTTON,
181 NULL, _("Timestamps"), NULL, NULL, 333 NULL, _("Timestamps"), NULL, NULL,
182 NULL, G_CALLBACK(timestamps_cb), 334 NULL, G_CALLBACK(timestamps_cb),
183 win); 335 win);
184 336
185 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), 337 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
186 gaim_prefs_get_bool("/gaim/gtk/debug/timestamps")); 338 gaim_prefs_get_bool("/gaim/gtk/debug/timestamps"));
187 339
188 win->timestamps_handle = 340 win->timestamps_handle =
189 gaim_prefs_connect_callback("/gaim/gtk/debug/timestamps", 341 gaim_prefs_connect_callback("/gaim/gtk/debug/timestamps",
190 timestamps_pref_cb, button); 342 timestamps_pref_cb, button);
191 } 343 }
192 344