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