1 /******************************* LICENCE **************************************
2 * Any code in this file may be redistributed or modified under the terms of
3 * the GNU General Public Licence as published by the Free Software
4 * Foundation; version 2 of the licence.
5 ****************************** END LICENCE ***********************************/
6
7 /******************************************************************************
8 * Author:
9 * Andrew Smith, http://littlesvr.ca/misc/contactandrew.php
10 *
11 * Contributors:
12 *
13 ******************************************************************************/
14
15 #include <gtk/gtk.h>
16 #include <gdk/gdkkeysyms.h>
17 #include <libintl.h>
18
19 #include "isomaster.h"
20
21 /* the label that holds the value of the iso size */
22 GtkWidget* GBLisoSizeLbl;
23 /* icon for 'go back' for fs browser */
24 GtkWidget* GBLgoBackIcon;
25 /* icon for 'go back' for iso browser */
26 GtkWidget* GBLgoBackIcon2;
27 /* icon for 'new directory' for fs browser */
28 GtkWidget* GBLnewDirIcon;
29 /* icon for 'new directory' for iso browser */
30 GtkWidget* GBLnewDirIcon2;
31 /* 'add to iso' icon */
32 GtkWidget* GBLaddIcon;
33 /* 'extract from iso' icon */
34 GtkWidget* GBLextractIcon;
35 /* icon for 'delete' for iso browser */
36 GtkWidget* GBLdeleteIcon2;
37 /* list of all recently open ISOs (each can be NULL) */
38 GtkWidget* GBLrecentlyOpenWidgets[5];
39
40 extern GtkWidget* GBLmainWindow;
41 extern AppSettings GBLappSettings;
42 extern bool GBLisoPaneActive;
43 extern bool GBLisoChangesProbable;
44
buildMainToolbar(GtkWidget * boxToPackInto)45 void buildMainToolbar(GtkWidget* boxToPackInto)
46 {
47 GtkWidget* toolbar;
48
49 toolbar = gtk_toolbar_new();
50 gtk_box_pack_start(GTK_BOX(boxToPackInto), toolbar, FALSE, FALSE, 0);
51 gtk_widget_show(toolbar);
52
53 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
54 _("Go back"),
55 _("Go back up one directory on the filesystem"), "Private",
56 GBLgoBackIcon, G_CALLBACK(fsGoUpDirTreeCbk),
57 NULL);
58
59 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
60 _("New Directory"),
61 _("Create new directory on the filesystem"), "Private",
62 GBLnewDirIcon, G_CALLBACK(createDirCbk), (gpointer)1);
63 }
64
buildMenu(GtkWidget * boxToPackInto)65 void buildMenu(GtkWidget* boxToPackInto)
66 {
67 GtkWidget* menuBar;
68 GtkWidget* menu;
69 GtkWidget* menuItem;
70 GtkWidget* separator;
71 GtkWidget* icon;
72 GtkWidget* checkbox;
73 GtkWidget* rootMenu;
74 GtkAccelGroup* accelGroup;
75 guint accelKey;
76 GdkModifierType accelModifier;
77 GClosure *closure = NULL;
78 GtkWidget* submenu;
79 GtkWidget* rootSubmenu;
80 GtkWidget* submenu2;
81 GtkWidget* rootSubmenu2;
82
83 /* KEYBOARD accelerators */
84 accelGroup = gtk_accel_group_new();
85 gtk_window_add_accel_group(GTK_WINDOW(GBLmainWindow), accelGroup);
86
87 gtk_accelerator_parse("<Control>N", &accelKey, &accelModifier);
88 closure = g_cclosure_new(G_CALLBACK(newIsoCbk), NULL, NULL);
89 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
90 gtk_accel_map_add_entry("<ISOMaster>/File/New", accelKey, accelModifier);
91
92 gtk_accelerator_parse("<Control>O", &accelKey, &accelModifier);
93 closure = g_cclosure_new(G_CALLBACK(openIsoCbk), NULL, NULL);
94 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
95 gtk_accel_map_add_entry("<ISOMaster>/File/Open", accelKey, accelModifier);
96
97 gtk_accelerator_parse("<Control>S", &accelKey, &accelModifier);
98 closure = g_cclosure_new(G_CALLBACK(saveIsoCbk), NULL, NULL);
99 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
100 gtk_accel_map_add_entry("<ISOMaster>/File/Save", accelKey, accelModifier);
101
102 gtk_accelerator_parse("<Control>W", &accelKey, &accelModifier);
103 closure = g_cclosure_new(G_CALLBACK(closeMainWindowCbk), NULL, NULL);
104 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
105
106 gtk_accelerator_parse("<Control>Q", &accelKey, &accelModifier);
107 closure = g_cclosure_new(G_CALLBACK(closeMainWindowCbk), NULL, NULL);
108 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
109 gtk_accel_map_add_entry("<ISOMaster>/File/Quit", accelKey, accelModifier);
110
111 gtk_accelerator_parse("F1", &accelKey, &accelModifier);
112 closure = g_cclosure_new(G_CALLBACK(showHelpOverviewCbk), NULL, NULL);
113 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
114 gtk_accel_map_add_entry("<ISOMaster>/Help/Overview", accelKey, accelModifier);
115
116 gtk_accelerator_parse("F2", &accelKey, &accelModifier);
117 closure = g_cclosure_new(G_CALLBACK(renameSelectedBtnCbk), NULL, NULL);
118 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
119 gtk_accel_map_add_entry("<ISOMaster>/Contextmenu/Rename", accelKey, accelModifier);
120
121 gtk_accelerator_parse("F3", &accelKey, &accelModifier);
122 closure = g_cclosure_new(G_CALLBACK(viewSelectedBtnCbk), NULL, NULL);
123 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
124 gtk_accel_map_add_entry("<ISOMaster>/Contextmenu/View", accelKey, accelModifier);
125
126 gtk_accelerator_parse("F4", &accelKey, &accelModifier);
127 closure = g_cclosure_new(G_CALLBACK(editSelectedBtnCbk), NULL, NULL);
128 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
129 gtk_accel_map_add_entry("<ISOMaster>/Contextmenu/Edit", accelKey, accelModifier);
130
131 gtk_accelerator_parse("F5", &accelKey, &accelModifier);
132 closure = g_cclosure_new(G_CALLBACK(refreshBothViewsCbk), NULL, NULL);
133 gtk_accel_group_connect(accelGroup, accelKey, accelModifier, GTK_ACCEL_VISIBLE, closure);
134 gtk_accel_map_add_entry("<ISOMaster>/View/Refresh", accelKey, accelModifier);
135 /* END KEYBOARD accelerators */
136
137 menuBar = gtk_menu_bar_new();
138 gtk_box_pack_start(GTK_BOX(boxToPackInto), menuBar, FALSE, FALSE, 0);
139 gtk_widget_show(menuBar);
140
141 /* FILE menu */
142 rootMenu = gtk_menu_item_new_with_mnemonic(_("_File"));
143 gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), rootMenu);
144 gtk_widget_show(rootMenu);
145
146 menu = gtk_menu_new();
147 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootMenu), menu);
148 gtk_menu_set_accel_group(GTK_MENU(menu), accelGroup);
149
150 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_NEW, NULL);
151 //~ icon = gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_NEW);
152 //~ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), icon);
153 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
154 gtk_widget_show(menuItem);
155 g_signal_connect(G_OBJECT(menuItem), "activate",
156 G_CALLBACK(newIsoCbk), NULL);
157 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/File/New");
158
159 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, NULL);
160 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
161 gtk_widget_show(menuItem);
162 g_signal_connect(G_OBJECT(menuItem), "activate",
163 G_CALLBACK(openIsoCbk), NULL);
164 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/File/Open");
165
166 /* OPEN recent submenu */
167 rootSubmenu = gtk_image_menu_item_new_with_label(_("Open Recent"));
168 icon = gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_MENU);
169 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(rootSubmenu), icon);
170 gtk_menu_shell_append(GTK_MENU_SHELL(menu), rootSubmenu);
171 gtk_widget_show(rootSubmenu);
172
173 submenu = gtk_menu_new();
174 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootSubmenu), submenu);
175
176 for(int i = 0; i < 5; i++)
177 {
178 GBLrecentlyOpenWidgets[i] = gtk_menu_item_new_with_label("");
179 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), GBLrecentlyOpenWidgets[i]);
180 g_signal_connect(G_OBJECT(GBLrecentlyOpenWidgets[i]), "activate",
181 G_CALLBACK(openRecentIso), NULL);
182 if(GBLappSettings.recentlyOpen[i] != NULL)
183 {
184 gtk_label_set_text(GTK_LABEL(
185 gtk_bin_get_child(GTK_BIN(GBLrecentlyOpenWidgets[i]))),
186 GBLappSettings.recentlyOpen[i]);
187 gtk_widget_show(GBLrecentlyOpenWidgets[i]);
188 }
189 }
190 /* END OPEN recent submenu */
191
192 #ifdef ENABLE_SAVE_OVERWRITE
193 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, NULL);
194 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
195 gtk_widget_show(menuItem);
196 g_signal_connect(G_OBJECT(menuItem), "activate",
197 G_CALLBACK(saveOverwriteIsoCbk), NULL);
198 #endif
199
200 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, NULL);
201 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
202 gtk_widget_show(menuItem);
203 g_signal_connect(G_OBJECT(menuItem), "activate",
204 G_CALLBACK(saveIsoCbk), NULL);
205 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/File/Save");
206
207 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PROPERTIES, NULL);
208 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
209 gtk_widget_show(menuItem);
210 g_signal_connect(G_OBJECT(menuItem), "activate",
211 G_CALLBACK(buildImagePropertiesWindow), NULL);
212
213 separator = gtk_separator_menu_item_new();
214 gtk_menu_shell_append(GTK_MENU_SHELL(menu), separator);
215 gtk_widget_show(separator);
216
217 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
218 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
219 gtk_widget_show(menuItem);
220 g_signal_connect(G_OBJECT(menuItem), "activate",
221 G_CALLBACK(closeMainWindowCbk), NULL);
222 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/File/Quit");
223 /* END FILE menu */
224
225 /* VIEW menu */
226 rootMenu = gtk_menu_item_new_with_mnemonic(_("_View"));
227 gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), rootMenu);
228 gtk_widget_show(rootMenu);
229
230 menu = gtk_menu_new();
231 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootMenu), menu);
232 gtk_menu_set_accel_group(GTK_MENU(menu), accelGroup);
233
234 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_REFRESH, NULL);
235 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
236 gtk_widget_show(menuItem);
237 g_signal_connect(G_OBJECT(menuItem), "activate",
238 G_CALLBACK(refreshBothViewsCbk), NULL);
239 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/View/Refresh");
240
241 checkbox = gtk_check_menu_item_new_with_mnemonic(_("Show _hidden files"));
242 if(GBLappSettings.showHiddenFilesFs)
243 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), TRUE);
244 else
245 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), FALSE);
246 gtk_menu_shell_append(GTK_MENU_SHELL(menu), checkbox);
247 gtk_widget_show(checkbox);
248 g_signal_connect(G_OBJECT(checkbox), "activate",
249 G_CALLBACK(showHiddenCbk), NULL);
250
251 checkbox = gtk_check_menu_item_new_with_mnemonic(_("_Sort directories first"));
252 if(GBLappSettings.sortDirectoriesFirst)
253 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), TRUE);
254 else
255 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), FALSE);
256 gtk_menu_shell_append(GTK_MENU_SHELL(menu), checkbox);
257 gtk_widget_show(checkbox);
258 g_signal_connect(G_OBJECT(checkbox), "activate",
259 G_CALLBACK(sortDirsFirstCbk), NULL);
260
261 checkbox = gtk_check_menu_item_new_with_mnemonic(_("Sort is _case sensitive"));
262 if(GBLappSettings.caseSensitiveSort)
263 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), TRUE);
264 else
265 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(checkbox), FALSE);
266 gtk_menu_shell_append(GTK_MENU_SHELL(menu), checkbox);
267 gtk_widget_show(checkbox);
268 g_signal_connect(G_OBJECT(checkbox), "activate",
269 G_CALLBACK(caseSensitiveSortCbk), NULL);
270 /* END VIEW menu */
271
272 /* TOOLS menu */
273 rootMenu = gtk_menu_item_new_with_mnemonic(_("_Tools"));
274 gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), rootMenu);
275 gtk_widget_show(rootMenu);
276
277 menu = gtk_menu_new();
278 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootMenu), menu);
279
280 /* BOOT submenu */
281 rootSubmenu = gtk_menu_item_new_with_mnemonic(_("_Boot Record"));
282 gtk_menu_shell_append(GTK_MENU_SHELL(menu), rootSubmenu);
283 gtk_widget_show(rootSubmenu);
284
285 submenu = gtk_menu_new();
286 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootSubmenu), submenu);
287
288 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PROPERTIES, NULL);
289 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuItem);
290 gtk_widget_show(menuItem);
291 g_signal_connect(G_OBJECT(menuItem), "activate",
292 G_CALLBACK(showBootInfoCbk), NULL);
293
294 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, NULL);
295 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuItem);
296 gtk_widget_show(menuItem);
297 g_signal_connect(G_OBJECT(menuItem), "activate",
298 G_CALLBACK(extractBootRecordCbk), NULL);
299
300 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_DELETE, NULL);
301 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuItem);
302 gtk_widget_show(menuItem);
303 g_signal_connect(G_OBJECT(menuItem), "activate",
304 G_CALLBACK(deleteBootRecordCbk), NULL);
305
306 rootSubmenu2 = gtk_image_menu_item_new_from_stock(GTK_STOCK_ADD, NULL);
307 gtk_menu_shell_append(GTK_MENU_SHELL(submenu), rootSubmenu2);
308 gtk_widget_show(rootSubmenu2);
309
310 submenu2 = gtk_menu_new();
311 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootSubmenu2), submenu2);
312
313 menuItem = gtk_menu_item_new_with_label(_("Use selected file on image (no emulation)"));
314 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), menuItem);
315 gtk_widget_show(menuItem);
316 g_signal_connect(G_OBJECT(menuItem), "activate",
317 G_CALLBACK(setFileAsBootRecordCbk), NULL);
318
319 menuItem = gtk_menu_item_new_with_label(_("From file: no emulation"));
320 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), menuItem);
321 gtk_widget_show(menuItem);
322 g_signal_connect(G_OBJECT(menuItem), "activate",
323 G_CALLBACK(addBootRecordFromFileCbk), (gpointer)BOOT_MEDIA_NO_EMULATION);
324
325 menuItem = gtk_menu_item_new_with_label(_("From file: 1200KiB floppy"));
326 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), menuItem);
327 gtk_widget_show(menuItem);
328 g_signal_connect(G_OBJECT(menuItem), "activate",
329 G_CALLBACK(addBootRecordFromFileCbk), (gpointer)BOOT_MEDIA_1_2_FLOPPY);
330
331 menuItem = gtk_menu_item_new_with_label(_("From file: 1440KiB floppy"));
332 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), menuItem);
333 gtk_widget_show(menuItem);
334 g_signal_connect(G_OBJECT(menuItem), "activate",
335 G_CALLBACK(addBootRecordFromFileCbk), (gpointer)BOOT_MEDIA_1_44_FLOPPY);
336
337 menuItem = gtk_menu_item_new_with_label(_("From file: 2880KiB floppy"));
338 gtk_menu_shell_append(GTK_MENU_SHELL(submenu2), menuItem);
339 gtk_widget_show(menuItem);
340 g_signal_connect(G_OBJECT(menuItem), "activate",
341 G_CALLBACK(addBootRecordFromFileCbk), (gpointer)BOOT_MEDIA_2_88_FLOPPY);
342 /* END BOOT submenu */
343
344 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
345 menuItem = gtk_menu_item_new_with_mnemonic(_("_Options"));
346 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
347 gtk_widget_show(menuItem);
348 g_signal_connect(G_OBJECT(menuItem), "activate",
349 G_CALLBACK(showPreferencesWindowCbk), (gpointer)BOOT_MEDIA_1_44_FLOPPY);
350 /* END TOOLS menu */
351
352 /* HELP menu */
353 rootMenu = gtk_menu_item_new_with_mnemonic(_("_Help"));
354 gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), rootMenu);
355 gtk_widget_show(rootMenu);
356
357 menu = gtk_menu_new();
358 gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootMenu), menu);
359 gtk_menu_set_accel_group(GTK_MENU(menu), accelGroup);
360
361 icon = gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_MENU);
362 menuItem = gtk_image_menu_item_new_with_mnemonic(_("_Overview"));
363 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem), icon);
364 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
365 gtk_widget_show(menuItem);
366 g_signal_connect(G_OBJECT(menuItem), "activate",
367 G_CALLBACK(showHelpOverviewCbk), NULL);
368 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuItem), "<ISOMaster>/Help/Overview");
369
370 #if GTK_MINOR_VERSION >= 6
371 menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL);
372 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuItem);
373 gtk_widget_show(menuItem);
374 g_signal_connect(G_OBJECT(menuItem), "activate",
375 G_CALLBACK(showAboutWindowCbk), NULL);
376 #endif
377 /* END HELP menu */
378 }
379
buildMiddleToolbar(GtkWidget * boxToPackInto)380 void buildMiddleToolbar(GtkWidget* boxToPackInto)
381 {
382 GtkWidget* toolbar;
383 GtkWidget* sizeTitleLabel;
384
385 toolbar = gtk_toolbar_new();
386 gtk_box_pack_start(GTK_BOX(boxToPackInto), toolbar, FALSE, TRUE, 0);
387 gtk_widget_show(toolbar);
388
389 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
390 _("Go back"),
391 _("Go back up one directory on the ISO"), "Private",
392 GBLgoBackIcon2, G_CALLBACK(isoGoUpDirTreeCbk),
393 NULL);
394
395 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
396 _("New Directory"),
397 _("Create new directory on the ISO"), "Private",
398 GBLnewDirIcon2, G_CALLBACK(createDirCbk), (gpointer)0);
399
400 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
401 _("Add"), _("Add to the ISO"), "Private",
402 GBLaddIcon, G_CALLBACK(addToIsoCbk),
403 NULL);
404
405 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
406 _("Extract"), _("Extract from the ISO"), "Private",
407 GBLextractIcon, G_CALLBACK(extractFromIsoCbk),
408 NULL);
409
410 gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
411 _("Remove"), _("Delete from the ISO"), "Private",
412 GBLdeleteIcon2, G_CALLBACK(deleteFromIsoCbk),
413 NULL);
414
415 sizeTitleLabel = gtk_label_new(_(" Estimated ISO Size: "));
416 gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_WIDGET,
417 sizeTitleLabel, NULL, NULL, NULL, NULL, NULL, NULL);
418 gtk_widget_show(sizeTitleLabel);
419
420 GBLisoSizeLbl = gtk_label_new("");
421 gtk_toolbar_append_element(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_CHILD_WIDGET,
422 GBLisoSizeLbl, NULL, NULL, NULL, NULL, NULL, NULL);
423 gtk_widget_show(GBLisoSizeLbl);
424 }
425
caseSensitiveSortCbk(GtkButton * button,gpointer data)426 void caseSensitiveSortCbk(GtkButton *button, gpointer data)
427 {
428 GBLappSettings.caseSensitiveSort = !GBLappSettings.caseSensitiveSort;
429
430 refreshFsView();
431 if(GBLisoPaneActive)
432 refreshIsoView();
433 }
434
closeMainWindowCbk(GtkWidget * widget,GdkEvent * event)435 gboolean closeMainWindowCbk(GtkWidget *widget, GdkEvent *event)
436 {
437 if(GBLisoChangesProbable && !confirmCloseIso())
438 return TRUE;
439
440 writeSettings();
441
442 deleteTempFiles();
443
444 printf("Quitting\n");
445 gtk_main_quit();
446
447 /* the accelerator callback must return true */
448 return TRUE;
449 }
450
loadAppIcon(GdkPixbuf ** appIcon)451 void loadAppIcon(GdkPixbuf** appIcon)
452 {
453 /* the path ICONPATH is defined in the makefile
454 * if this fails i get NULL which is ok */
455 *appIcon = gdk_pixbuf_new_from_file(ICONPATH"/isomaster.png", NULL);
456 }
457
loadIcon(GtkWidget ** destIcon,const char * srcFile,int size)458 void loadIcon(GtkWidget** destIcon, const char* srcFile, int size)
459 {
460 GdkPixbuf* pixbuf;
461
462 pixbuf = gdk_pixbuf_new_from_file(srcFile, NULL);
463 if(pixbuf == NULL)
464 /* could not load icon but need one so replace it with 'unknown' from stock */
465 {
466 *destIcon = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_LARGE_TOOLBAR);
467 }
468 else
469 /* resize the icon loaded */
470 {
471 pixbuf = gdk_pixbuf_scale_simple(pixbuf, size, size, GDK_INTERP_HYPER);
472 *destIcon = gtk_image_new_from_pixbuf(pixbuf);
473 }
474 }
475
loadIcons(void)476 void loadIcons(void)
477 {
478 int size;
479
480 gtk_icon_size_lookup(GTK_ICON_SIZE_LARGE_TOOLBAR, &size, &size);
481
482 loadIcon(&GBLgoBackIcon, ICONPATH"/go-back-kearone.png", size);
483 loadIcon(&GBLgoBackIcon2, ICONPATH"/go-back-kearone.png", size);
484 loadIcon(&GBLnewDirIcon, ICONPATH"/folder-new-kearone.png", size);
485 loadIcon(&GBLnewDirIcon2, ICONPATH"/folder-new-kearone.png", size);
486 loadIcon(&GBLaddIcon, ICONPATH"/add2-kearone.png", size);
487 loadIcon(&GBLextractIcon, ICONPATH"/extract2-kearone.png", size);
488 loadIcon(&GBLdeleteIcon2, ICONPATH"/delete-kearone.png", size);
489 }
490
rejectDialogCbk(GtkWidget * widget,GdkEvent * event)491 void rejectDialogCbk(GtkWidget *widget, GdkEvent *event)
492 {
493 gtk_dialog_response(GTK_DIALOG(widget), GTK_RESPONSE_REJECT);
494 }
495
sortDirsFirstCbk(GtkButton * button,gpointer data)496 void sortDirsFirstCbk(GtkButton *button, gpointer data)
497 {
498 GBLappSettings.sortDirectoriesFirst = !GBLappSettings.sortDirectoriesFirst;
499
500 refreshFsView();
501 if(GBLisoPaneActive)
502 refreshIsoView();
503 }
504