79
gtk_sat_module_popup (GtkSatModule *module)
78
void gtk_sat_module_popup (GtkSatModule *module)
88
if ((module == NULL) || !IS_GTK_SAT_MODULE (module)) {
89
sat_log_log (SAT_LOG_LEVEL_BUG,
90
_("%s:%d: %s called with NULL parameter!"),
91
__FILE__, __LINE__, __FUNCTION__);
96
menu = gtk_menu_new ();
98
if (module->state == GTK_SAT_MOD_STATE_DOCKED) {
100
menuitem = gtk_image_menu_item_new_with_label (_("Detach module"));
101
buff = icon_file_name ("gpredict-notebook.png");
102
image = gtk_image_new_from_file (buff);
104
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
105
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
106
g_signal_connect (menuitem, "activate",
107
G_CALLBACK (docking_state_cb), module);
111
menuitem = gtk_image_menu_item_new_with_label (_("Attach module"));
112
buff = icon_file_name ("gpredict-notebook.png");
113
image = gtk_image_new_from_file (buff);
115
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
116
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
117
g_signal_connect (menuitem, "activate",
118
G_CALLBACK (docking_state_cb), module);
122
if (module->state == GTK_SAT_MOD_STATE_FULLSCREEN) {
124
menuitem = gtk_image_menu_item_new_with_label (_("Leave fullscreen"));
125
image = gtk_image_new_from_stock (GTK_STOCK_LEAVE_FULLSCREEN,
127
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
128
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
129
g_signal_connect (menuitem, "activate",
130
G_CALLBACK (screen_state_cb), module);
133
menuitem = gtk_image_menu_item_new_with_label (_("Fullscreen"));
134
image = gtk_image_new_from_stock (GTK_STOCK_FULLSCREEN,
136
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
137
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
138
g_signal_connect (menuitem, "activate",
139
G_CALLBACK (screen_state_cb), module);
143
menuitem = gtk_separator_menu_item_new ();
144
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
146
/* sky at a glance */
147
menuitem = gtk_image_menu_item_new_with_label (_("Sky at a glance"));
148
buff = icon_file_name ("gpredict-planner-small.png");
149
image = gtk_image_new_from_file (buff);
151
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
152
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
153
g_signal_connect (menuitem, "activate",
154
G_CALLBACK (sky_at_glance_cb), module);
157
menuitem = gtk_image_menu_item_new_with_label (_("Time Controller"));
158
buff = icon_file_name ("gpredict-clock-small.png");
159
image = gtk_image_new_from_file (buff);
161
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
162
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
163
g_signal_connect (menuitem, "activate", G_CALLBACK (tmgr_cb), module);
87
if ((module == NULL) || !IS_GTK_SAT_MODULE (module)) {
88
sat_log_log (SAT_LOG_LEVEL_BUG,
89
_("%s:%d: %s called with NULL parameter!"),
90
__FILE__, __LINE__, __FUNCTION__);
95
menu = gtk_menu_new ();
97
if (module->state == GTK_SAT_MOD_STATE_DOCKED) {
99
menuitem = gtk_image_menu_item_new_with_label (_("Detach module"));
100
buff = icon_file_name ("gpredict-notebook.png");
101
image = gtk_image_new_from_file (buff);
103
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
104
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
105
g_signal_connect (menuitem, "activate",
106
G_CALLBACK (docking_state_cb), module);
110
menuitem = gtk_image_menu_item_new_with_label (_("Attach module"));
111
buff = icon_file_name ("gpredict-notebook.png");
112
image = gtk_image_new_from_file (buff);
114
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
115
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
116
g_signal_connect (menuitem, "activate",
117
G_CALLBACK (docking_state_cb), module);
121
if (module->state == GTK_SAT_MOD_STATE_FULLSCREEN) {
123
menuitem = gtk_image_menu_item_new_with_label (_("Exit full screen"));
124
image = gtk_image_new_from_stock (GTK_STOCK_LEAVE_FULLSCREEN,
126
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
127
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
128
g_signal_connect (menuitem, "activate",
129
G_CALLBACK (screen_state_cb), module);
132
menuitem = gtk_image_menu_item_new_with_label (_("Full screen"));
133
image = gtk_image_new_from_stock (GTK_STOCK_FULLSCREEN,
135
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
136
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
137
g_signal_connect (menuitem, "activate",
138
G_CALLBACK (screen_state_cb), module);
142
menuitem = gtk_separator_menu_item_new ();
143
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
145
/* sky at a glance */
146
menuitem = gtk_image_menu_item_new_with_label (_("Sky at a glance"));
147
buff = icon_file_name ("gpredict-planner-small.png");
148
image = gtk_image_new_from_file (buff);
150
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
151
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
152
g_signal_connect (menuitem, "activate",
153
G_CALLBACK (sky_at_glance_cb), module);
156
menuitem = gtk_image_menu_item_new_with_label (_("Time Controller"));
157
buff = icon_file_name ("gpredict-clock-small.png");
158
image = gtk_image_new_from_file (buff);
160
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
161
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
162
g_signal_connect (menuitem, "activate", G_CALLBACK (tmgr_cb), module);
166
165
menuitem = gtk_separator_menu_item_new ();
183
182
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
184
183
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
185
184
g_signal_connect (menuitem, "activate", G_CALLBACK (rotctrl_cb), module);
188
menuitem = gtk_separator_menu_item_new ();
189
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
192
menuitem = gtk_image_menu_item_new_with_label (_("Configure"));
193
image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES,
195
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
196
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
197
g_signal_connect (menuitem, "activate",
198
G_CALLBACK (config_cb), module);
201
menuitem = gtk_image_menu_item_new_with_label (_("Clone..."));
202
image = gtk_image_new_from_stock (GTK_STOCK_COPY,
204
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
205
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
206
g_signal_connect (menuitem, "activate",
207
G_CALLBACK (clone_cb), module);
210
menuitem = gtk_separator_menu_item_new ();
211
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
214
menuitem = gtk_image_menu_item_new_with_label (_("Delete"));
215
image = gtk_image_new_from_stock (GTK_STOCK_DELETE,
217
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
218
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
219
g_signal_connect (menuitem, "activate",
220
G_CALLBACK (delete_cb), module);
223
menuitem = gtk_image_menu_item_new_with_label (_("Close"));
224
image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
226
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
227
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
228
g_signal_connect (menuitem, "activate",
229
G_CALLBACK (close_cb), module);
231
gtk_widget_show_all (menu);
233
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
234
0, gdk_event_get_time (NULL));
187
menuitem = gtk_separator_menu_item_new ();
188
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
191
menuitem = gtk_image_menu_item_new_with_label (_("Configure"));
192
image = gtk_image_new_from_stock (GTK_STOCK_PROPERTIES,
194
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
195
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
196
g_signal_connect (menuitem, "activate",
197
G_CALLBACK (config_cb), module);
200
menuitem = gtk_image_menu_item_new_with_label (_("Clone..."));
201
image = gtk_image_new_from_stock (GTK_STOCK_COPY,
203
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
204
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
205
g_signal_connect (menuitem, "activate",
206
G_CALLBACK (clone_cb), module);
209
menuitem = gtk_separator_menu_item_new ();
210
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
213
menuitem = gtk_image_menu_item_new_with_label (_("Delete"));
214
image = gtk_image_new_from_stock (GTK_STOCK_DELETE,
216
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
217
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
218
g_signal_connect (menuitem, "activate",
219
G_CALLBACK (delete_cb), module);
222
menuitem = gtk_image_menu_item_new_with_label (_("Close"));
223
image = gtk_image_new_from_stock (GTK_STOCK_CLOSE,
225
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
226
gtk_menu_shell_append (GTK_MENU_SHELL(menu), menuitem);
227
g_signal_connect (menuitem, "activate",
228
G_CALLBACK (close_cb), module);
230
gtk_widget_show_all (menu);
232
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
233
0, gdk_event_get_time (NULL));
279
277
* possibility to override this in the dialog window.
283
clone_cb (GtkWidget *menuitem, gpointer data)
280
static void clone_cb (GtkWidget *menuitem, gpointer data)
289
GtkTooltips *tooltips;
291
GtkSatModule *module = GTK_SAT_MODULE (data);
292
GtkSatModule *newmod;
293
gchar *source,*target;
294
gchar *icon; /* icon file name */
295
gchar *title; /* window title */
298
dialog = gtk_dialog_new_with_buttons (_("Clone Module"),
299
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (module))),
301
GTK_DIALOG_DESTROY_WITH_PARENT,
307
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
310
label = gtk_label_new (_("Name of new module:"));
311
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE, FALSE, 0);
314
entry = gtk_entry_new ();
315
gtk_entry_set_max_length (GTK_ENTRY (entry), 25);
316
gtk_entry_set_text (GTK_ENTRY (entry), module->name);
317
tooltips = gtk_tooltips_new ();
318
gtk_tooltips_set_tip (tooltips, entry,
319
_("Enter a short name for this module.\n"\
320
"Allowed characters: 0..9, a..z, A..Z, - and _"),
321
_("The name will be used to identify the module "\
322
"and it is also used a file name for saving the data."\
323
"Max length is 25 characters."));
325
/* attach changed signal so that we can enable OK button when
286
GtkTooltips *tooltips;
288
GtkSatModule *module = GTK_SAT_MODULE (data);
289
GtkSatModule *newmod;
290
gchar *source,*target;
291
gchar *icon; /* icon file name */
292
gchar *title; /* window title */
295
dialog = gtk_dialog_new_with_buttons (_("Clone Module"),
296
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (module))),
298
GTK_DIALOG_DESTROY_WITH_PARENT,
304
gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
307
label = gtk_label_new (_("Name of new module:"));
308
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), label, FALSE, FALSE, 0);
311
entry = gtk_entry_new ();
312
gtk_entry_set_max_length (GTK_ENTRY (entry), 25);
313
gtk_entry_set_text (GTK_ENTRY (entry), module->name);
314
tooltips = gtk_tooltips_new ();
315
gtk_tooltips_set_tip (tooltips, entry,
316
_("Enter a short name for this module.\n"\
317
"Allowed characters: 0..9, a..z, A..Z, - and _"),
318
_("The name will be used to identify the module "\
319
"and it is also used a file name for saving the data."\
320
"Max length is 25 characters."));
322
/* attach changed signal so that we can enable OK button when
326
323
a proper name has been entered
327
324
oh, btw. disable OK button to begin with....
329
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
332
g_signal_connect (entry, "changed", G_CALLBACK (name_changed), dialog);
333
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
334
entry, FALSE, FALSE, 0);
338
toggle = gtk_check_button_new_with_label (_("Open module when created"));
339
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE);
340
tooltips = gtk_tooltips_new ();
341
gtk_tooltips_set_tip (tooltips, toggle,
342
_("If checked, the new module will be opened "\
343
"after it has been created"),
345
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
346
toggle, FALSE, FALSE, 20);
349
gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
352
response = gtk_dialog_run (GTK_DIALOG (dialog));
356
case GTK_RESPONSE_OK:
357
sat_log_log (SAT_LOG_LEVEL_MSG,
358
_("%s:%d: Cloning %s => %s"),
359
__FILE__, __LINE__, module->name,
360
gtk_entry_get_text (GTK_ENTRY (entry)));
362
/* build full file names */
363
gchar *moddir = get_modules_dir ();
364
source = g_strconcat (moddir, G_DIR_SEPARATOR_S,
365
module->name, ".mod", NULL);
366
target = g_strconcat (moddir, G_DIR_SEPARATOR_S,
367
gtk_entry_get_text (GTK_ENTRY (entry)), ".mod", NULL);
371
if (gpredict_file_copy (source, target)) {
372
sat_log_log (SAT_LOG_LEVEL_ERROR,
373
_("%s:%d: Failed to clone %s."),
374
__FILE__, __LINE__, module->name);
377
sat_log_log (SAT_LOG_LEVEL_MSG,
378
_("%s:%d: Successfully cloned %s."),
379
__FILE__, __LINE__, module->name);
381
/* open module if requested */
382
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle))) {
384
newmod = GTK_SAT_MODULE (gtk_sat_module_new (target));
385
newmod->state = module->state;
387
if (newmod->state == GTK_SAT_MOD_STATE_DOCKED) {
389
/* add to module manager */
390
mod_mgr_add_module (GTK_WIDGET (newmod), TRUE);
392
/* try to reproduce divisions betwenn views */
393
switch (module->layout) {
395
case GTK_SAT_MOD_LAYOUT_2:
396
gtk_paned_set_position (GTK_PANED (newmod->vpaned),
397
gtk_paned_get_position (GTK_PANED (module->vpaned)));
400
case GTK_SAT_MOD_LAYOUT_3:
401
case GTK_SAT_MOD_LAYOUT_4:
402
gtk_paned_set_position (GTK_PANED (newmod->vpaned),
403
gtk_paned_get_position (GTK_PANED (module->vpaned)));
404
gtk_paned_set_position (GTK_PANED (newmod->hpaned),
405
gtk_paned_get_position (GTK_PANED (module->hpaned)));
415
/* add to module manager */
416
mod_mgr_add_module (GTK_WIDGET (newmod), FALSE);
419
newmod->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
420
gtk_window_set_title (GTK_WINDOW (newmod->win),
422
title = g_strconcat ("GPREDICT: ",
424
" (", newmod->qth->name, ")",
426
gtk_window_set_title (GTK_WINDOW (newmod->win), title);
429
/* use size of source module */
430
gtk_window_set_default_size (GTK_WINDOW (newmod->win),
431
GTK_WIDGET (module)->allocation.width,
432
GTK_WIDGET (module)->allocation.height);
434
g_signal_connect (G_OBJECT (newmod->win), "configure_event",
435
G_CALLBACK (module_window_config_cb), newmod);
437
/* add module to window */
438
gtk_container_add (GTK_CONTAINER (newmod->win),
439
GTK_WIDGET (newmod));
442
icon = icon_file_name ("gpredict-icon.png");
443
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
444
gtk_window_set_icon_from_file (GTK_WINDOW (newmod->win), icon, NULL);
449
gtk_widget_show_all (newmod->win);
326
gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog),
329
g_signal_connect (entry, "changed", G_CALLBACK (name_changed), dialog);
330
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
331
entry, FALSE, FALSE, 0);
335
toggle = gtk_check_button_new_with_label (_("Open module when created"));
336
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), TRUE);
337
tooltips = gtk_tooltips_new ();
338
gtk_tooltips_set_tip (tooltips, toggle,
339
_("If checked, the new module will be opened "\
340
"after it has been created"),
342
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
343
toggle, FALSE, FALSE, 20);
346
gtk_widget_show_all (GTK_DIALOG (dialog)->vbox);
349
response = gtk_dialog_run (GTK_DIALOG (dialog));
353
case GTK_RESPONSE_OK:
354
sat_log_log (SAT_LOG_LEVEL_MSG,
355
_("%s:%d: Cloning %s => %s"),
356
__FILE__, __LINE__, module->name,
357
gtk_entry_get_text (GTK_ENTRY (entry)));
359
/* build full file names */
360
gchar *moddir = get_modules_dir ();
361
source = g_strconcat (moddir, G_DIR_SEPARATOR_S,
362
module->name, ".mod", NULL);
363
target = g_strconcat (moddir, G_DIR_SEPARATOR_S,
364
gtk_entry_get_text (GTK_ENTRY (entry)), ".mod", NULL);
368
if (gpredict_file_copy (source, target)) {
369
sat_log_log (SAT_LOG_LEVEL_ERROR,
370
_("%s:%d: Failed to clone %s."),
371
__FILE__, __LINE__, module->name);
374
sat_log_log (SAT_LOG_LEVEL_MSG,
375
_("%s:%d: Successfully cloned %s."),
376
__FILE__, __LINE__, module->name);
378
/* open module if requested */
379
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle))) {
381
newmod = GTK_SAT_MODULE (gtk_sat_module_new (target));
382
newmod->state = module->state;
384
if (newmod->state == GTK_SAT_MOD_STATE_DOCKED) {
386
/* add to module manager */
387
mod_mgr_add_module (GTK_WIDGET (newmod), TRUE);
391
/* add to module manager */
392
mod_mgr_add_module (GTK_WIDGET (newmod), FALSE);
395
newmod->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
396
gtk_window_set_title (GTK_WINDOW (newmod->win),
398
title = g_strconcat ("GPREDICT: ",
400
" (", newmod->qth->name, ")",
402
gtk_window_set_title (GTK_WINDOW (newmod->win), title);
405
/* use size of source module */
406
gtk_window_set_default_size (GTK_WINDOW (newmod->win),
407
GTK_WIDGET (module)->allocation.width,
408
GTK_WIDGET (module)->allocation.height);
410
g_signal_connect (G_OBJECT (newmod->win), "configure_event",
411
G_CALLBACK (module_window_config_cb), newmod);
413
/* add module to window */
414
gtk_container_add (GTK_CONTAINER (newmod->win),
415
GTK_WIDGET (newmod));
418
icon = icon_file_name ("gpredict-icon.png");
419
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
420
gtk_window_set_icon_from_file (GTK_WINDOW (newmod->win), icon, NULL);
425
gtk_widget_show_all (newmod->win);
461
437
case GTK_RESPONSE_CANCEL:
462
sat_log_log (SAT_LOG_LEVEL_MSG,
463
_("%s:%d: Cloning cancelled by user."),
438
sat_log_log (SAT_LOG_LEVEL_MSG,
439
_("%s:%d: Cloning cancelled by user."),
468
sat_log_log (SAT_LOG_LEVEL_MSG,
469
_("%s:%d: Cloning interrupted."),
444
sat_log_log (SAT_LOG_LEVEL_MSG,
445
_("%s:%d: Cloning interrupted."),
474
gtk_widget_destroy (dialog);
450
gtk_widget_destroy (dialog);
487
463
* The text of the menu item will be changed corresponding to the
488
464
* action that has been performed.
491
docking_state_cb (GtkWidget *menuitem, gpointer data)
466
static void docking_state_cb (GtkWidget *menuitem, gpointer data)
493
GtkWidget *module = GTK_WIDGET (data);
495
gchar *icon; /* icon file name */
496
gchar *title; /* window title */
500
switch (GTK_SAT_MODULE (module)->state) {
502
case GTK_SAT_MOD_STATE_DOCKED:
468
GtkWidget *module = GTK_WIDGET (data);
470
gchar *icon; /* icon file name */
471
gchar *title; /* window title */
475
switch (GTK_SAT_MODULE (module)->state) {
477
case GTK_SAT_MOD_STATE_DOCKED:
504
479
/* get stored size; use size from main window if size not explicitly stoed */
505
480
if (g_key_file_has_key (GTK_SAT_MODULE (module)->cfgdata,
506
MOD_CFG_GLOBAL_SECTION,
481
MOD_CFG_GLOBAL_SECTION,
509
484
w = g_key_file_get_integer (GTK_SAT_MODULE (module)->cfgdata,
510
MOD_CFG_GLOBAL_SECTION,
485
MOD_CFG_GLOBAL_SECTION,
515
490
w = module->allocation.width;
517
492
if (g_key_file_has_key (GTK_SAT_MODULE (module)->cfgdata,
518
MOD_CFG_GLOBAL_SECTION,
493
MOD_CFG_GLOBAL_SECTION,
521
496
h = g_key_file_get_integer (GTK_SAT_MODULE (module)->cfgdata,
522
MOD_CFG_GLOBAL_SECTION,
497
MOD_CFG_GLOBAL_SECTION,
527
502
h = module->allocation.height;
530
/* increase reference count of module */
531
g_object_ref (module);
533
/* we don't need the positions */
534
GTK_SAT_MODULE (module)->vpanedpos = -1;
535
GTK_SAT_MODULE (module)->hpanedpos = -1;
537
/* undock from mod-mgr */
538
mod_mgr_undock_module (module);
541
GTK_SAT_MODULE (module)->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
542
title = g_strconcat ("GPREDICT: ",
543
GTK_SAT_MODULE (module)->name,
544
" (", GTK_SAT_MODULE (module)->qth->name, ")",
546
gtk_window_set_title (GTK_WINDOW (GTK_SAT_MODULE (module)->win), title);
548
gtk_window_set_default_size (GTK_WINDOW (GTK_SAT_MODULE (module)->win), w, h);
505
/* increase reference count of module */
506
g_object_ref (module);
508
/* we don't need the positions */
509
//GTK_SAT_MODULE (module)->vpanedpos = -1;
510
//GTK_SAT_MODULE (module)->hpanedpos = -1;
512
/* undock from mod-mgr */
513
mod_mgr_undock_module (module);
516
GTK_SAT_MODULE (module)->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
517
title = g_strconcat ("GPREDICT: ",
518
GTK_SAT_MODULE (module)->name,
519
" (", GTK_SAT_MODULE (module)->qth->name, ")",
521
gtk_window_set_title (GTK_WINDOW (GTK_SAT_MODULE (module)->win), title);
523
gtk_window_set_default_size (GTK_WINDOW (GTK_SAT_MODULE (module)->win), w, h);
549
524
g_signal_connect (G_OBJECT (GTK_SAT_MODULE (module)->win), "configure_event",
550
525
G_CALLBACK (module_window_config_cb), module);
553
icon = icon_file_name ("gpredict-icon.png");
554
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
555
gtk_window_set_icon_from_file (GTK_WINDOW (GTK_SAT_MODULE (module)->win), icon, NULL);
528
icon = icon_file_name ("gpredict-icon.png");
529
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
530
gtk_window_set_icon_from_file (GTK_WINDOW (GTK_SAT_MODULE (module)->win), icon, NULL);
559
534
/* move window to stored position if requested by configuration */
560
535
if (sat_cfg_get_bool (SAT_CFG_BOOL_MOD_WIN_POS) &&
561
536
g_key_file_has_key (GTK_SAT_MODULE (module)->cfgdata,
562
MOD_CFG_GLOBAL_SECTION,
537
MOD_CFG_GLOBAL_SECTION,
565
540
g_key_file_has_key (GTK_SAT_MODULE (module)->cfgdata,
566
MOD_CFG_GLOBAL_SECTION,
541
MOD_CFG_GLOBAL_SECTION,
570
545
gtk_window_move (GTK_WINDOW (GTK_SAT_MODULE (module)->win),
571
546
g_key_file_get_integer (GTK_SAT_MODULE (module)->cfgdata,
572
MOD_CFG_GLOBAL_SECTION,
573
MOD_CFG_WIN_POS_X, NULL),
547
MOD_CFG_GLOBAL_SECTION,
548
MOD_CFG_WIN_POS_X, NULL),
574
549
g_key_file_get_integer (GTK_SAT_MODULE (module)->cfgdata,
575
MOD_CFG_GLOBAL_SECTION,
550
MOD_CFG_GLOBAL_SECTION,
581
/* add module to window */
582
gtk_container_add (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
556
/* add module to window */
557
gtk_container_add (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
584
/* change internal state */
585
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_WINDOW;
559
/* change internal state */
560
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_WINDOW;
587
562
/* store new state in configuration */
588
563
g_key_file_set_integer (GTK_SAT_MODULE (module)->cfgdata,
589
MOD_CFG_GLOBAL_SECTION,
591
GTK_SAT_MOD_STATE_WINDOW);
593
/* decrease reference count of module */
594
g_object_unref (module);
597
gtk_widget_show_all (GTK_SAT_MODULE (module)->win);
564
MOD_CFG_GLOBAL_SECTION,
566
GTK_SAT_MOD_STATE_WINDOW);
568
/* decrease reference count of module */
569
g_object_unref (module);
572
gtk_widget_show_all (GTK_SAT_MODULE (module)->win);
599
/* reparent time manager window if visible */
600
if (GTK_SAT_MODULE (module)->tmgActive) {
601
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
602
GTK_WINDOW (GTK_SAT_MODULE (module)->win));
574
/* reparent time manager window if visible */
575
if (GTK_SAT_MODULE (module)->tmgActive) {
576
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
577
GTK_WINDOW (GTK_SAT_MODULE (module)->win));
607
582
case GTK_SAT_MOD_STATE_WINDOW:
608
583
case GTK_SAT_MOD_STATE_FULLSCREEN:
610
/* increase referene count */
611
g_object_ref (module);
613
/* store paned positions */
614
if (GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_2) {
615
GTK_SAT_MODULE (module)->vpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->vpaned));
617
else if ((GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_3) ||
618
(GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_4)) {
620
GTK_SAT_MODULE (module)->vpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->vpaned));
621
GTK_SAT_MODULE (module)->hpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->hpaned));
624
/* reparent time manager window if visible */
625
if (GTK_SAT_MODULE (module)->tmgActive) {
626
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
630
/* remove module from window, destroy window */
631
gtk_container_remove (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
632
gtk_widget_destroy (GTK_SAT_MODULE (module)->win);
633
GTK_SAT_MODULE (module)->win = NULL;
635
/* dock into mod-mgr */
636
mod_mgr_dock_module (module);
638
/* change internal state */
639
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_DOCKED;
585
/* increase referene count */
586
g_object_ref (module);
588
/* reparent time manager window if visible */
589
if (GTK_SAT_MODULE (module)->tmgActive) {
590
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
594
/* remove module from window, destroy window */
595
gtk_container_remove (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
596
gtk_widget_destroy (GTK_SAT_MODULE (module)->win);
597
GTK_SAT_MODULE (module)->win = NULL;
599
/* dock into mod-mgr */
600
mod_mgr_dock_module (module);
602
/* change internal state */
603
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_DOCKED;
641
605
/* store new state in configuration */
642
606
g_key_file_set_integer (GTK_SAT_MODULE (module)->cfgdata,
643
MOD_CFG_GLOBAL_SECTION,
645
GTK_SAT_MOD_STATE_DOCKED);
647
/* decrease reference count of module */
648
g_object_unref (module);
607
MOD_CFG_GLOBAL_SECTION,
609
GTK_SAT_MOD_STATE_DOCKED);
611
/* decrease reference count of module */
612
g_object_unref (module);
655
sat_log_log (SAT_LOG_LEVEL_BUG,
656
_("%s:%d: Unknown module state: %d"),
657
__FILE__, __LINE__, GTK_SAT_MODULE (module)->state);
619
sat_log_log (SAT_LOG_LEVEL_BUG,
620
_("%s:%d: Unknown module state: %d"),
621
__FILE__, __LINE__, GTK_SAT_MODULE (module)->state);
669
633
* This function is intended to toggle between FULLSCREEN
670
634
* and WINDOW state.
673
screen_state_cb (GtkWidget *menuitem, gpointer data)
636
static void screen_state_cb (GtkWidget *menuitem, gpointer data)
675
GtkWidget *module = GTK_WIDGET (data);
638
GtkWidget *module = GTK_WIDGET (data);
677
gchar *icon; /* icon file name */
678
gchar *title; /* window title */
681
switch (GTK_SAT_MODULE (module)->state) {
683
case GTK_SAT_MOD_STATE_DOCKED:
685
/* increase reference count of module */
686
g_object_ref (module);
688
/* we don't need the positions */
689
GTK_SAT_MODULE (module)->vpanedpos = -1;
690
GTK_SAT_MODULE (module)->hpanedpos = -1;
692
/* undock from mod-mgr */
693
mod_mgr_undock_module (module);
696
GTK_SAT_MODULE (module)->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
697
title = g_strconcat ("GPREDICT: ",
698
GTK_SAT_MODULE (module)->name,
699
" (", GTK_SAT_MODULE (module)->qth->name, ")",
701
gtk_window_set_title (GTK_WINDOW (GTK_SAT_MODULE (module)->win), title);
705
icon = icon_file_name ("gpredict-icon.png");
706
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
707
gtk_window_set_icon_from_file (GTK_WINDOW (GTK_SAT_MODULE (module)->win), icon, NULL);
711
/* add module to window */
712
gtk_container_add (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
714
/* change internal state */
715
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_FULLSCREEN;
717
/* decrease reference count of module */
718
g_object_unref (module);
720
gtk_window_fullscreen (GTK_WINDOW (GTK_SAT_MODULE (module)->win));
723
gtk_widget_show_all (GTK_SAT_MODULE (module)->win);
640
gchar *icon; /* icon file name */
641
gchar *title; /* window title */
644
switch (GTK_SAT_MODULE (module)->state) {
646
case GTK_SAT_MOD_STATE_DOCKED:
648
/* increase reference count of module */
649
g_object_ref (module);
651
/* undock from mod-mgr */
652
mod_mgr_undock_module (module);
655
GTK_SAT_MODULE (module)->win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
656
title = g_strconcat ("GPREDICT: ",
657
GTK_SAT_MODULE (module)->name,
658
" (", GTK_SAT_MODULE (module)->qth->name, ")",
660
gtk_window_set_title (GTK_WINDOW (GTK_SAT_MODULE (module)->win), title);
664
icon = icon_file_name ("gpredict-icon.png");
665
if (g_file_test (icon, G_FILE_TEST_EXISTS)) {
666
gtk_window_set_icon_from_file (GTK_WINDOW (GTK_SAT_MODULE (module)->win), icon, NULL);
670
/* add module to window */
671
gtk_container_add (GTK_CONTAINER (GTK_SAT_MODULE (module)->win), module);
673
/* change internal state */
674
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_FULLSCREEN;
676
/* decrease reference count of module */
677
g_object_unref (module);
679
gtk_window_fullscreen (GTK_WINDOW (GTK_SAT_MODULE (module)->win));
682
gtk_widget_show_all (GTK_SAT_MODULE (module)->win);
725
/* reparent time manager window if visible */
726
if (GTK_SAT_MODULE (module)->tmgActive) {
727
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
728
GTK_WINDOW (GTK_SAT_MODULE (module)->win));
684
/* reparent time manager window if visible */
685
if (GTK_SAT_MODULE (module)->tmgActive) {
686
gtk_window_set_transient_for (GTK_WINDOW (GTK_SAT_MODULE (module)->tmgWin),
687
GTK_WINDOW (GTK_SAT_MODULE (module)->win));
734
693
case GTK_SAT_MOD_STATE_WINDOW:
736
/* we don't need the positions */
737
GTK_SAT_MODULE (module)->vpanedpos = -1;
738
GTK_SAT_MODULE (module)->hpanedpos = -1;
740
/* change internal state */
741
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_FULLSCREEN;
742
gtk_window_fullscreen (GTK_WINDOW (GTK_SAT_MODULE (module)->win));
743
gtk_window_set_default_size (GTK_WINDOW (GTK_SAT_MODULE (module)->win), 800, 600);
694
/* change internal state */
695
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_FULLSCREEN;
696
gtk_window_fullscreen (GTK_WINDOW (GTK_SAT_MODULE (module)->win));
697
gtk_window_set_default_size (GTK_WINDOW (GTK_SAT_MODULE (module)->win), 800, 600);
748
702
case GTK_SAT_MOD_STATE_FULLSCREEN:
750
/* store paned positions */
751
if (GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_2) {
752
GTK_SAT_MODULE (module)->vpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->vpaned));
754
else if ((GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_3) ||
755
(GTK_SAT_MODULE (module)->layout == GTK_SAT_MOD_LAYOUT_4)) {
757
GTK_SAT_MODULE (module)->vpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->vpaned));
758
GTK_SAT_MODULE (module)->hpanedpos = gtk_paned_get_position (GTK_PANED (GTK_SAT_MODULE (module)->hpaned));
761
/* change internal state */
762
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_WINDOW;
703
/* change internal state */
704
GTK_SAT_MODULE (module)->state = GTK_SAT_MOD_STATE_WINDOW;
763
705
gtk_window_unfullscreen (GTK_WINDOW (GTK_SAT_MODULE (module)->win));
765
707
/* get stored size; use some standard size if not explicitly specified */
1038
970
* with gtk_sat_module_close_cb, which will close the current module,
1039
971
* whereafter the module file will be deleted from the disk.
1042
delete_cb (GtkWidget *menuitem, gpointer data)
973
static void delete_cb (GtkWidget *menuitem, gpointer data)
1048
moddir = get_modules_dir ();
1049
file = g_strconcat (moddir, G_DIR_SEPARATOR_S,
1050
GTK_SAT_MODULE (data)->name, ".mod", NULL);
1053
gtk_sat_module_close_cb (menuitem, data);
1056
/* ask user to confirm removal */
1057
dialog = gtk_message_dialog_new_with_markup
1058
(NULL, //GTK_WINDOW (parent),
1059
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
1060
GTK_MESSAGE_QUESTION,
1062
_("This operation will permanently delete\n<b>%s</b>\n"\
1063
"from the disk.\nDo you you want to proceed?"),
1066
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
1068
case GTK_RESPONSE_YES:
1070
if (g_remove (file)) {
1071
sat_log_log (SAT_LOG_LEVEL_ERROR,
1072
_("%s:%d: Failed to delete %s."),
1073
__FILE__, __LINE__, file);
1076
sat_log_log (SAT_LOG_LEVEL_ERROR,
1077
_("%s:%d: %s deleted permanently."),
1078
__FILE__, __LINE__, file);
979
moddir = get_modules_dir ();
980
file = g_strconcat (moddir, G_DIR_SEPARATOR_S,
981
GTK_SAT_MODULE (data)->name, ".mod", NULL);
984
gtk_sat_module_close_cb (menuitem, data);
987
/* ask user to confirm removal */
988
dialog = gtk_message_dialog_new_with_markup
989
(NULL, //GTK_WINDOW (parent),
990
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
991
GTK_MESSAGE_QUESTION,
993
_("This operation will permanently delete\n<b>%s</b>\n"\
994
"from the disk.\nDo you you want to proceed?"),
997
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
999
case GTK_RESPONSE_YES:
1001
if (g_remove (file)) {
1002
sat_log_log (SAT_LOG_LEVEL_ERROR,
1003
_("%s:%d: Failed to delete %s."),
1004
__FILE__, __LINE__, file);
1007
sat_log_log (SAT_LOG_LEVEL_ERROR,
1008
_("%s:%d: %s deleted permanently."),
1009
__FILE__, __LINE__, file);
1086
gtk_widget_destroy (dialog);
1017
gtk_widget_destroy (dialog);