37
38
Application& application = Application::get_current();
38
39
Configuration& configuration = application.get_configuration();
39
GeneralConfigurationSection& general_section = configuration.get_general_section();
40
40
Glade& glade = application.get_glade();
42
audio_stream_group = NULL;
43
subtitle_stream_group = NULL;
42
45
window_main = glade.get_widget("window_main");
46
vpaned_main = glade.get_widget("vpaned_main");
43
47
statusbar = glade.get_widget("statusbar");
44
vpaned_main = glade.get_widget("vpaned_main");
45
48
toolbar = glade.get_widget("handlebox_toolbar");
46
49
menubar = glade.get_widget("menubar");
47
event_dialog = glade.get_widget("event_dialog");
48
preferences_dialog = glade.get_widget("preferences_dialog");
49
scheduled_recording_dialog = glade.get_widget("scheduled_recording_dialog");
50
eventbox_video = glade.get_widget("eventbox_video");
51
scrolled_window_epg = glade.get_widget("scrolledwindow_epg");
50
dialog_program_details = glade.get_widget("dialog_program_details");
51
event_box_video = glade.get_widget("event_box_video");
53
epg_widget = new HtmlEpgWidget();
53
epg_widget = new GtkEpgWidget();
54
preferences_dialog = new PreferencesDialog();
55
scheduled_recording_dialog = new ScheduledRecordingDialog();
54
56
scheduled_recordings_dialog = new ScheduledRecordingsDialog();
58
search_bar = new SearchBar();
56
60
is_fullscreen = false;
58
62
gtk_window_set_title(GTK_WINDOW(window_main), APPLICATION_NAME);
60
64
g_signal_connect( G_OBJECT ( window_main ), "motion-notify-event", G_CALLBACK( on_window_main_motion_notify ), this );
61
65
g_signal_connect( G_OBJECT ( window_main ), "delete-event", G_CALLBACK ( on_window_main_delete ), this );
62
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_mute") ), "toggled", G_CALLBACK ( on_toolbutton_mute_toggled ), this );
63
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_record") ), "toggled", G_CALLBACK ( on_toolbutton_record_toggled ), this );
64
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_auto_surf") ), "toggled", G_CALLBACK ( on_toolbutton_auto_surf_toggled ), this );
65
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_broadcast") ), "toggled", G_CALLBACK ( on_toolbutton_broadcast_toggled ), this );
66
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_scheduled_recordings") ), "clicked", G_CALLBACK ( on_toolbutton_scheduled_recordings_clicked ), this );
67
g_signal_connect( G_OBJECT ( glade.get_widget("toolbutton_hide_controls") ), "clicked", G_CALLBACK ( on_toolbutton_hide_controls_clicked ), this );
68
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_file_quit") ), "activate", G_CALLBACK ( on_menu_item_file_quit_activate ), this );
69
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_view_fullscreen") ), "activate", G_CALLBACK ( on_menu_item_view_fullscreen_activate ), this );
70
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_view_preferences") ), "activate", G_CALLBACK ( on_menu_item_view_preferences_activate ), this );
71
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_view_video_controls") ), "activate", G_CALLBACK ( on_menu_item_view_video_controls_activate ), this );
72
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_help_contents") ), "activate", G_CALLBACK ( on_menu_item_help_contents_activate ), this );
73
g_signal_connect( G_OBJECT ( glade.get_widget("imagemenuitem_help_about") ), "activate", G_CALLBACK ( on_menu_item_help_about_activate ), this );
74
g_signal_connect( G_OBJECT ( eventbox_video ), "button_press_event", G_CALLBACK ( on_button_press ), this );
66
g_signal_connect( G_OBJECT ( window_main ), "key-press-event", G_CALLBACK( on_window_main_key_press_event ), this );
67
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_mute") ), "toggled", G_CALLBACK ( on_tool_button_mute_toggled ), this );
68
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_record") ), "toggled", G_CALLBACK ( on_tool_button_record_toggled ), this );
69
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_auto_surf") ), "toggled", G_CALLBACK ( on_tool_button_auto_surf_toggled ), this );
70
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_broadcast") ), "toggled", G_CALLBACK ( on_tool_button_broadcast_toggled ), this );
71
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_scheduled_recordings") ), "clicked", G_CALLBACK ( on_tool_button_scheduled_recordings_clicked ), this );
72
g_signal_connect( G_OBJECT ( glade.get_widget("tool_button_hide_controls") ), "clicked", G_CALLBACK ( on_tool_button_hide_controls_clicked ), this );
73
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_file_quit") ), "activate", G_CALLBACK ( on_menu_item_file_quit_activate ), this );
74
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_view_fullscreen") ), "activate", G_CALLBACK ( on_menu_item_view_fullscreen_activate ), this );
75
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_view_preferences") ), "activate", G_CALLBACK ( on_menu_item_view_preferences_activate ), this );
76
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_view_epg") ), "activate", G_CALLBACK ( on_menu_item_view_epg_activate ), this );
77
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_view_program_search") ), "activate", G_CALLBACK ( on_menu_item_view_program_search_activate ), this );
78
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_audio_mute") ), "toggled", G_CALLBACK ( on_menu_item_audio_mute_toggled ), this );
79
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_help_contents") ), "activate", G_CALLBACK ( on_menu_item_help_contents_activate ), this );
80
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_help_about") ), "activate", G_CALLBACK ( on_menu_item_help_about_activate ), this );
81
g_signal_connect( G_OBJECT ( event_box_video ), "button_press_event", G_CALLBACK ( on_window_main_button_press ), this );
76
83
g_signal_connect( G_OBJECT ( glade.get_widget("combo_box_record_type") ), "changed", G_CALLBACK ( on_combo_box_record_type_changed ), this );
77
84
g_signal_connect( G_OBJECT ( glade.get_widget("spinbutton_duration") ), "value-changed", G_CALLBACK ( on_spinbutton_duration_value_changed ), this );
86
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_audio_dual_language_disable") ), "toggled", G_CALLBACK ( on_menu_item_audio_dual_language_changed ), this );
87
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_audio_dual_language_left") ), "toggled", G_CALLBACK ( on_menu_item_audio_dual_language_changed ), this );
88
g_signal_connect( G_OBJECT ( glade.get_widget("menu_item_audio_dual_language_right") ), "toggled", G_CALLBACK ( on_menu_item_audio_dual_language_changed ), this );
79
Glib::ustring engine_type = general_section.get_value("engine_type");
80
Log::write(N_("Using '%s' engine"), engine_type.c_str());
90
GtkWidget* menu_item_subtitles_disabled = glade.get_widget("menu_item_subtitles_disabled");
91
g_signal_connect( G_OBJECT ( menu_item_subtitles_disabled ), "toggled", G_CALLBACK ( on_menu_item_subtitle_stream_toggled ), NULL );
93
String engine_type = configuration.get_string_value("engine_type");
94
Log::write(_("Using '%s' engine"), engine_type.c_str());
81
95
if (engine_type == "xine")
83
97
engine = new XineEngine();
147
182
gdk_cursor_unref(hidden_cursor);
148
183
hidden_cursor = NULL;
151
Application& application = Application::get_current();
152
NameValueConfigurationSection& general_section = application.get_configuration().get_general_section();
154
general_section.set_int_value("video_position", gtk_paned_get_position(GTK_PANED(vpaned_main)));
155
general_section.set_boolean_value("fullscreen", is_fullscreen);
156
general_section.set_boolean_value("show_controls", get_controls_visible());
157
general_section.set_boolean_value("show_epg", get_epg_visible());
186
if (search_bar != NULL)
161
gint x, y, width, height;
163
gtk_window_get_position(GTK_WINDOW(window_main), &x, &y);
164
gtk_window_get_size(GTK_WINDOW(window_main), &width, &height);
166
general_section.set_int_value("x", x);
167
general_section.set_int_value("y", y);
168
general_section.set_int_value("width", width);
169
general_section.set_int_value("height", height);
173
193
gboolean MainWindow::on_window_main_delete (GtkWindow* window_main, GdkEvent* event, MainWindow* main_window)
175
195
Application& application = Application::get_current();
176
NameValueConfigurationSection& general_section = application.get_configuration().get_general_section();
177
if (general_section.get_boolean_value("quit_on_close"))
196
Configuration& configuration = application.get_configuration();
198
gboolean quit_on_close = configuration.get_boolean_value("quit_on_close");
199
gboolean has_scheduled_recordings = application.get_recording_manager().has_scheduled_recordings();
201
if (quit_on_close && !has_scheduled_recordings)
179
203
application.quit();
273
303
void MainWindow::toggle_fullscreen()
275
show_fullscreen(!is_fullscreen);
307
was_maximised = gdk_window_get_state(window_main->window) & GDK_WINDOW_STATE_MAXIMIZED;
308
show_fullscreen(true);
309
show_controls(false);
314
show_fullscreen(false);
319
gtk_window_unmaximize(GTK_WINDOW(window_main));
278
void MainWindow::on_toolbutton_mute_toggled (GtkToggleToolButton *widget, MainWindow* main_window)
324
void MainWindow::on_tool_button_mute_toggled (GtkToggleToolButton *widget, MainWindow* main_window)
280
327
Application::get_current().mute(gtk_toggle_tool_button_get_active(widget));
283
void MainWindow::on_toolbutton_record_toggled (GtkToggleToolButton* widget, MainWindow* main_window)
285
Application::get_current().record(gtk_toggle_tool_button_get_active(widget));
288
void MainWindow::on_toolbutton_auto_surf_toggled (GtkToggleToolButton* widget, MainWindow* main_window)
331
void MainWindow::on_tool_button_record_toggled (GtkToggleToolButton* widget, MainWindow* main_window)
334
gboolean active = gtk_toggle_tool_button_get_active(widget);
335
Application& application = Application::get_current();
337
if (!active && application.is_scheduled_recording() && !application.is_shutting_down())
339
gint result = application.show_message_dialog(
340
_("You have stopped a scheduled recording. "\
341
"If you do not delete the scheduled recording then it will start again automatically. "\
342
"Would you like to delete this scheduled recording?"),
343
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO);
345
if (result == GTK_RESPONSE_YES)
347
application.remove_current_scheduled_recording();
351
Application::get_current().record(active);
355
void MainWindow::on_tool_button_auto_surf_toggled (GtkToggleToolButton* widget, MainWindow* main_window)
290
358
Application::get_current().auto_surf(gtk_toggle_tool_button_get_active(widget));
293
void MainWindow::on_toolbutton_broadcast_toggled (GtkToggleToolButton *widget, MainWindow* main_window)
362
void MainWindow::on_tool_button_broadcast_toggled (GtkToggleToolButton *widget, MainWindow* main_window)
295
365
Application::get_current().broadcast(gtk_toggle_tool_button_get_active(widget));
298
void MainWindow::on_toolbutton_scheduled_recordings_clicked(GtkToolButton *widget, MainWindow* main_window)
369
void MainWindow::on_tool_button_scheduled_recordings_clicked(GtkToolButton *widget, MainWindow* main_window)
300
372
main_window->show_scheduled_recordings_dialog();
303
void MainWindow::on_toolbutton_hide_controls_clicked(GtkToolButton *widget, MainWindow* main_window)
376
void MainWindow::on_tool_button_hide_controls_clicked(GtkToolButton *widget, MainWindow* main_window)
305
379
Application::get_current().hide_controls();
308
void MainWindow::on_audio_channel_value_changed (GtkSpinButton *widget, MainWindow* main_window)
310
Application::get_current().audio_channel(gtk_spin_button_get_value_as_int(widget));
313
void MainWindow::on_subtitle_channel_value_changed (GtkSpinButton *widget, MainWindow* main_window)
315
Application::get_current().subtitle_channel(gtk_spin_button_get_value_as_int(widget));
318
383
void MainWindow::on_menu_item_file_quit_activate (GtkMenuItem *widget, MainWindow* main_window)
320
386
Application::get_current().quit();
323
390
void MainWindow::on_menu_item_view_preferences_activate (GtkMenuItem* widget, MainWindow* main_window)
325
393
main_window->show_preferences_dialog();
328
397
void MainWindow::on_menu_item_view_fullscreen_activate (GtkMenuItem* widget, MainWindow* main_window)
330
400
main_window->toggle_fullscreen();
333
void MainWindow::on_menu_item_view_video_controls_activate (GtkMenuItem* widget, MainWindow* main_window)
335
main_window->toggle_controls();
404
void MainWindow::on_menu_item_view_epg_activate (GtkCheckMenuItem* widget, MainWindow* main_window)
407
main_window->show_epg(gtk_check_menu_item_get_active(widget));
411
void MainWindow::on_menu_item_view_program_search_activate (GtkMenuItem* widget, MainWindow* main_window)
414
main_window->show_search();
418
void MainWindow::on_menu_item_audio_stream_toggled(GtkCheckMenuItem *checkmenuitem, gpointer data)
421
if (gtk_check_menu_item_get_active(checkmenuitem))
423
gint audio_pid = *((gint *)data);
424
Log::write(_("Setting audio PID to %d"), audio_pid);
425
Application& application = Application::get_current();
426
application.get_video_channel().default_audio_pid = audio_pid;
427
application.restart_stream();
432
void MainWindow::on_menu_item_subtitle_stream_toggled(GtkCheckMenuItem *checkmenuitem, gpointer data)
435
if (gtk_check_menu_item_get_active(checkmenuitem))
437
gint subtitle_pid = 0;
441
subtitle_pid = *((gint *)data);
444
Log::write(_("Setting subtitle PID to %d"), subtitle_pid);
445
Application& application = Application::get_current();
446
application.get_video_channel().default_subtitle_pid = subtitle_pid;
447
application.restart_stream();
452
void MainWindow::on_menu_item_audio_mute_toggled(GtkCheckMenuItem *checkmenuitem, MainWindow* main_window)
455
Application::get_current().mute(gtk_check_menu_item_get_active(checkmenuitem));
338
459
void MainWindow::on_menu_item_help_contents_activate (GtkMenuItem* widget, MainWindow* main_window)
340
462
Application::get_current().show_help();
343
466
void MainWindow::on_menu_item_help_about_activate (GtkMenuItem* widget, MainWindow* main_window)
345
469
Application::get_current().show_about();
348
gboolean MainWindow::on_button_press(GtkWindow* widget, GdkEventButton *event, MainWindow* main_window)
473
gboolean MainWindow::on_window_main_key_press_event(GtkWidget* window_main, GdkEventKey* event, MainWindow* main_window)
476
if (main_window->search_bar->is_visible())
481
switch(event->keyval)
485
Application::get_current().toggle_auto_surf();
489
Application::get_current().toggle_broadcast();
493
Application::get_current().toggle_controls();
497
if ((event->state & GDK_CONTROL_MASK) != 0)
499
main_window->show_search();
503
Application::get_current().toggle_fullscreen();
508
Application::get_current().toggle_record();
512
Application::get_current().toggle_mute();
516
Application::get_current().hide_controls();
524
gboolean MainWindow::on_window_main_button_press(GtkWindow* widget, GdkEventButton *event, MainWindow* main_window)
350
527
Application& application = Application::get_current();
351
528
if (event->button == 1)
409
590
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_duration_text")), text.c_str());
412
void MainWindow::change_channel(Channel& channel)
594
void MainWindow::on_menu_item_audio_dual_language_changed(GtkCheckMenuItem* widget, MainWindow* main_window)
597
if (gtk_check_menu_item_get_active(widget))
599
GtkWidget* w = GTK_WIDGET(widget);
600
gint state = ENGINE_DUAL_LANGUAGE_DISABLE;
601
Glade& glade = Application::get_current().get_glade();
602
if (w == glade.get_widget("menu_item_audio_dual_language_left"))
604
state = ENGINE_DUAL_LANGUAGE_LEFT;
606
else if (w == glade.get_widget("menu_item_audio_dual_language_right"))
608
state = ENGINE_DUAL_LANGUAGE_RIGHT;
611
main_window->engine->set_dual_language_state(state);
616
void MainWindow::show_search()
622
void MainWindow::update_audio_stream_menu()
624
Application& application = Application::get_current();
625
Glade& glade = application.get_glade();
626
Channel& channel = application.get_video_channel();
628
GtkWidget* menuitem_audio_streams = glade.get_widget("menu_item_audio_streams");
629
GtkWidget* menu_widget = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem_audio_streams));
630
if (menu_widget != NULL)
632
audio_stream_group = NULL;
633
gtk_widget_destroy(menu_widget);
636
guint audio_pid_size = channel.audio_pids.size();
637
if (audio_pid_size > 0)
639
if (audio_pid_size > MAX_AUDIO_PIDS)
641
audio_pid_size = MAX_AUDIO_PIDS;
644
menu_widget = gtk_menu_new();
645
for (guint i = 0; i < audio_pid_size; i++)
647
guint audio_pid = channel.audio_pids[i];
648
audio_pids[i] = audio_pid;
649
String label = String::format(_("Audio Stream %d (PID %d)"), i + 1, audio_pid);
650
GtkWidget* menu_item = gtk_radio_menu_item_new_with_label(audio_stream_group, label.c_str());
651
audio_stream_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
652
gtk_menu_shell_append(GTK_MENU_SHELL(menu_widget), menu_item);
654
if (channel.default_audio_pid == audio_pid)
656
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), true);
659
g_signal_connect( G_OBJECT ( menu_item ), "toggled", G_CALLBACK ( on_menu_item_audio_stream_toggled ), &(audio_pids[i]) );
660
gtk_widget_show(menu_item);
662
gtk_widget_show(menu_widget);
664
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem_audio_streams), menu_widget);
668
void MainWindow::update_view_subtitle_menu()
670
Application& application = Application::get_current();
671
Glade& glade = application.get_glade();
672
Channel& channel = application.get_video_channel();
674
GtkWidget* menu_item_view_subtitles = glade.get_widget("menu_item_view_subtitles");
675
GtkWidget* menu_widget = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu_item_view_subtitles));
677
guint subtitle_pid_size = channel.subtitle_pids.size();
678
if (subtitle_pid_size > 0)
680
if (subtitle_pid_size > MAX_AUDIO_PIDS)
682
subtitle_pid_size = MAX_AUDIO_PIDS;
685
menu_widget = gtk_menu_new();
686
for (guint i = 0; i < subtitle_pid_size; i++)
688
guint subtitle_pid = channel.subtitle_pids[i];
689
subtitle_pids[i] = subtitle_pid;
690
String label = String::format(_("Subtitle Stream %d (PID %d)"), i + 1, subtitle_pid);
691
GtkWidget* menu_item = gtk_radio_menu_item_new_with_label(subtitle_stream_group, label.c_str());
692
subtitle_stream_group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
693
gtk_menu_shell_append(GTK_MENU_SHELL(menu_widget), menu_item);
695
if (channel.default_subtitle_pid == subtitle_pid)
697
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menu_item), true);
700
g_signal_connect( G_OBJECT ( menu_item ), "toggled", G_CALLBACK ( on_menu_item_subtitle_stream_toggled ), &(subtitle_pids[i]) );
701
gtk_widget_show(menu_item);
703
gtk_widget_show(menu_widget);
707
void MainWindow::channel_change_complete()
709
update_audio_stream_menu();
710
update_view_subtitle_menu();
713
void MainWindow::change_channel_start()
441
742
engine->mute(state);
444
GtkToggleToolButton* item = GTK_TOGGLE_TOOL_BUTTON(
445
Application::get_current().get_glade().get_widget("toolbutton_mute"));
446
if (gtk_toggle_tool_button_get_active(item) != state)
448
gtk_toggle_tool_button_set_active(item, state);
745
Glade& glade = Application::get_current().get_glade();
747
GtkToggleToolButton* tool_button_mute = GTK_TOGGLE_TOOL_BUTTON(glade.get_widget("tool_button_mute"));
748
if (gtk_toggle_tool_button_get_active(tool_button_mute) != state)
750
gtk_toggle_tool_button_set_active(tool_button_mute, state);
753
GtkCheckMenuItem* menu_item_audio_mute = GTK_CHECK_MENU_ITEM(glade.get_widget("menu_item_audio_mute"));
754
if (gtk_check_menu_item_get_active(menu_item_audio_mute) != state)
756
gtk_check_menu_item_set_active(menu_item_audio_mute, state);
452
760
void MainWindow::auto_surf(gboolean state)
454
GtkToggleToolButton* toolbutton_auto_surf = GTK_TOGGLE_TOOL_BUTTON(
455
Application::get_current().get_glade().get_widget("toolbutton_auto_surf"));
456
if (gtk_toggle_tool_button_get_active(toolbutton_auto_surf) != state)
762
GtkToggleToolButton* tool_button_auto_surf = GTK_TOGGLE_TOOL_BUTTON(
763
Application::get_current().get_glade().get_widget("tool_button_auto_surf"));
764
if (gtk_toggle_tool_button_get_active(tool_button_auto_surf) != state)
458
gtk_toggle_tool_button_set_active(toolbutton_auto_surf, state);
766
gtk_toggle_tool_button_set_active(tool_button_auto_surf, state);
462
770
void MainWindow::broadcast(gboolean state)
464
772
GtkToggleToolButton* item = GTK_TOGGLE_TOOL_BUTTON(
465
Application::get_current().get_glade().get_widget("toolbutton_broadcast"));
773
Application::get_current().get_glade().get_widget("tool_button_broadcast"));
466
774
if (gtk_toggle_tool_button_get_active(item) != state)
468
776
gtk_toggle_tool_button_set_active(item, state);
558
871
void MainWindow::show_scheduled_recordings_dialog()
873
gboolean fullscreen_workaround = Application::get_current().get_configuration().get_boolean_value("fullscreen_workaround");
874
gboolean was_fullscreen = get_is_fullscreen();
876
if (fullscreen_workaround && was_fullscreen)
879
show_fullscreen(false);
560
882
scheduled_recordings_dialog->show();
884
if (fullscreen_workaround && was_fullscreen)
886
show_fullscreen(true);
890
void MainWindow::show_scheduled_recording_dialog()
892
gboolean fullscreen_workaround = Application::get_current().get_configuration().get_boolean_value("fullscreen_workaround");
893
gboolean was_fullscreen = get_is_fullscreen();
895
if (fullscreen_workaround && was_fullscreen)
898
show_fullscreen(false);
901
scheduled_recording_dialog->show();
903
if (fullscreen_workaround && was_fullscreen)
905
show_fullscreen(true);
563
911
void MainWindow::show_scheduled_recording_dialog(ScheduledRecording& scheduled_recording)
566
Application& application = Application::get_current();
567
Glade& glade = application.get_glade();
569
GtkEntry* entry_description = GTK_ENTRY(glade.get_widget("entry_description"));
570
GtkComboBox* combo_box_channel = GTK_COMBO_BOX(glade.get_widget("combo_box_channel"));
571
GtkComboBox* combo_box_record_type = GTK_COMBO_BOX(glade.get_widget("combo_box_record_type"));
572
GtkComboBox* combo_box_start_day = GTK_COMBO_BOX(glade.get_widget("combo_box_start_day"));
573
GnomeDateEdit* date_edit_start_date = (GnomeDateEdit*)glade.get_widget("date_edit_start_date");
574
GtkSpinButton* spinbutton_start_time_hour = GTK_SPIN_BUTTON(glade.get_widget("spinbutton_start_time_hour"));
575
GtkSpinButton* spinbutton_start_time_minute = GTK_SPIN_BUTTON(glade.get_widget("spinbutton_start_time_minute"));
576
GtkSpinButton* spinbutton_duration = GTK_SPIN_BUTTON(glade.get_widget("spinbutton_duration"));
913
gboolean fullscreen_workaround = Application::get_current().get_configuration().get_boolean_value("fullscreen_workaround");
914
gboolean was_fullscreen = get_is_fullscreen();
579
GSList* iterator = application.get_channel_manager().get_channels();
580
while (iterator != NULL)
916
if (fullscreen_workaround && was_fullscreen)
582
Channel& channel = *(Channel*)iterator->data;
583
if (scheduled_recording.channel_name == channel.name)
585
gtk_combo_box_set_active(combo_box_channel, index);
588
iterator = g_slist_next(iterator);
919
show_fullscreen(false);
591
gtk_entry_set_text(entry_description, scheduled_recording.description.c_str());
592
gtk_combo_box_set_active(combo_box_record_type, scheduled_recording.type);
593
DateTime start_time(scheduled_recording.start_time, true);
595
gnome_date_edit_set_time(
596
date_edit_start_date,
597
scheduled_recording.type == RECORDING_TYPE_ONCE_OFF ? scheduled_recording.start_time : 0);
598
gtk_combo_box_set_active(combo_box_start_day, scheduled_recording.day_of_week);
600
gtk_spin_button_set_value(spinbutton_start_time_hour, start_time.get_hour());
601
gtk_spin_button_set_value(spinbutton_start_time_minute, start_time.get_minute());
602
gtk_spin_button_set_value(spinbutton_duration, scheduled_recording.duration / 60);
604
response = gtk_dialog_run(GTK_DIALOG(scheduled_recording_dialog));
606
gtk_widget_hide(GTK_WIDGET(scheduled_recording_dialog));
922
scheduled_recording_dialog->show(scheduled_recording);
924
if (fullscreen_workaround && was_fullscreen)
613
scheduled_recording.type = gtk_combo_box_get_active(combo_box_record_type);
614
int start_time_date = gnome_date_edit_get_time(date_edit_start_date) - (daylight * 60 * 60) + timezone;
616
start_time = start_time_date +
617
(int)(gtk_spin_button_get_value(spinbutton_start_time_hour) * 60 * 60 +
618
gtk_spin_button_get_value(spinbutton_start_time_minute) * 60);
620
day_of_week = gtk_combo_box_get_active(combo_box_start_day);
622
if (scheduled_recording.type == RECORDING_TYPE_NONE)
624
application.get_recording_manager().remove_scheduled_recording(scheduled_recording.description);
628
scheduled_recording.description = gtk_entry_get_text(entry_description);
629
scheduled_recording.channel_name = gtk_combo_box_get_active_text(combo_box_channel);
630
scheduled_recording.start_time = start_time;
631
scheduled_recording.day_of_week = day_of_week;
632
scheduled_recording.duration = (int)gtk_spin_button_get_value(spinbutton_duration) * 60;
633
application.get_recording_manager().save_scheduled_recording(scheduled_recording);
926
show_fullscreen(true);
640
void MainWindow::show_event_dialog (const EpgEvent& event)
932
void MainWindow::show_program_details_dialog (const EpgEvent& event)
642
934
int response = 0;
643
935
Application& application = Application::get_current();
644
936
Glade& glade = application.get_glade();
646
GeneralConfigurationSection& general_section = application.get_configuration().get_general_section();
648
Glib::ustring start_time = event.get_start_time_text();
649
Glib::ustring duration = event.get_duration_text();
651
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_event_title")), event.get_title().c_str());
652
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_event_description")), event.get_description().c_str());
653
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_event_start_time")), start_time.c_str());
654
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_event_duration")), duration.c_str());
656
response = gtk_dialog_run(GTK_DIALOG(event_dialog));
657
gtk_widget_hide(GTK_WIDGET(event_dialog));
938
Configuration& configuration = application.get_configuration();
940
String start_time = event.get_start_time_text();
941
String duration = event.get_duration_text();
943
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_program_title")), event.get_title().c_str());
944
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_program_description")), event.get_description().c_str());
945
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_program_start_time")), start_time.c_str());
946
gtk_label_set_text(GTK_LABEL(glade.get_widget("label_program_duration")), duration.c_str());
948
gboolean fullscreen_workaround = configuration.get_boolean_value("fullscreen_workaround");
949
gboolean was_fullscreen = get_is_fullscreen();
951
if (fullscreen_workaround && was_fullscreen)
954
show_fullscreen(false);
957
response = gtk_dialog_run(GTK_DIALOG(dialog_program_details));
958
gtk_widget_hide(GTK_WIDGET(dialog_program_details));
960
if (fullscreen_workaround && was_fullscreen)
962
show_fullscreen(true);
659
965
if (response == 1)
661
967
ScheduledRecording scheduled_recording;
664
int record_extra_before_seconds = general_section.get_int_value("record_extra_before") * 60;
665
int record_extra_after_seconds = general_section.get_int_value("record_extra_after") * 60;
969
int record_extra_before_seconds = configuration.get_int_value("record_extra_before") * 60;
970
int record_extra_after_seconds = configuration.get_int_value("record_extra_after") * 60;
667
972
scheduled_recording.description = event.get_title();
668
973
scheduled_recording.channel_name = event.get_channel().name;
669
974
scheduled_recording.type = RECORDING_TYPE_ONCE_OFF;
670
scheduled_recording.day_of_week = now.get_day_of_week();
671
975
scheduled_recording.start_time = event.get_start_time() - record_extra_before_seconds;
672
976
scheduled_recording.duration = event.get_duration() + record_extra_before_seconds + record_extra_after_seconds;