<property name="homogeneous">True</property>
</packing>
</child>
+ <child>
+ <object class="GtkToolButton" id="queue_save">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Save Queue</property>
+ <property name="icon_name">document-save-as</property>
+ <property name="tooltip_text" translatable="yes">Save the current queue of encode jobs to a file.
+This file may be reloaded at a later time to edit your jobs and re-encode.</property>
+ <signal name="clicked" handler="queue_save_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_open">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Load Queue File</property>
+ <property name="icon_name">document-open</property>
+ <property name="tooltip_text" translatable="yes">Load a previously saved queue file.</property>
+ <signal name="clicked" handler="queue_open_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<object class="GtkFileFilter" id="SourceFilterVOB"/>
<object class="GtkFileFilter" id="SourceFilterVideo"/>
<object class="GtkFileFilter" id="SourceFilterWMV"/>
+ <object class="GtkFileFilter" id="QueueFilterAll"/>
+ <object class="GtkFileFilter" id="QueueFilterXML"/>
<object class="GtkLabel" id="SubBurnedLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
+ <child>
+ <object class="GtkToolButton" id="queue_save">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Save Queue</property>
+ <property name="icon_name">document-save-as</property>
+ <property name="tooltip_text" translatable="yes">Save the current queue of encode jobs to a file.
+This file may be reloaded at a later time to edit your jobs and re-encode.</property>
+ <signal name="clicked" handler="queue_save_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_open">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Load Queue File</property>
+ <property name="icon_name">document-open</property>
+ <property name="tooltip_text" translatable="yes">Load a previously saved queue file.</property>
+ <signal name="clicked" handler="queue_open_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
+ <child>
+ <object class="GtkToolButton" id="queue_save">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Save Queue</property>
+ <property name="icon_name">document-save-as</property>
+ <property name="tooltip_text" translatable="yes">Save the current queue of encode jobs to a file.
+This file may be reloaded at a later time to edit your jobs and re-encode.</property>
+ <signal name="clicked" handler="queue_save_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkToolButton" id="queue_open">
+ <property name="visible">True</property>
+ <property name="sensitive">True</property>
+ <property name="can_focus">False</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="is_important">True</property>
+ <property name="label" translatable="yes">Load Queue File</property>
+ <property name="icon_name">document-open</property>
+ <property name="tooltip_text" translatable="yes">Load a previously saved queue file.</property>
+ <signal name="clicked" handler="queue_open_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
#include "presets.h"
#include "audiohandler.h"
#include "ghb-dvd.h"
+#include "plist.h"
+
+void ghb_queue_buttons_grey(signal_user_data_t *ud);
G_MODULE_EXPORT void
queue_list_selection_changed_cb(GtkTreeSelection *selection, signal_user_data_t *ud)
}
}
+static void
+save_queue_file(signal_user_data_t *ud)
+{
+ int ii, count;
+ GValue *queue = ghb_value_dup(ud->queue);
+
+ count = ghb_array_len(queue);
+ for (ii = 0; ii < count; ii++)
+ {
+ GValue *settings = ghb_array_get_nth(ud->queue, ii);
+ if (settings == NULL)
+ continue;
+ ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
+ }
+
+ GtkWidget *dialog;
+ GtkWindow *hb_window;
+
+ hb_window = GTK_WINDOW(GHB_WIDGET(ud->builder, "hb_window"));
+ dialog = gtk_file_chooser_dialog_new("Queue Destination",
+ hb_window,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GHB_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GHB_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), "queue.xml");
+ if (gtk_dialog_run(GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT)
+ {
+ ghb_value_free(queue);
+ gtk_widget_destroy(dialog);
+ return;
+ }
+
+ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
+ gtk_widget_destroy(dialog);
+
+ FILE *file = g_fopen(filename, "w");
+ if (file != NULL)
+ {
+ ghb_plist_write(file, queue);
+ fclose(file);
+ }
+ g_free (filename);
+ ghb_value_free(queue);
+}
+
+static void
+open_queue_file(signal_user_data_t *ud)
+{
+ GtkWidget *dialog;
+ GtkWindow *hb_window;
+
+ hb_window = GTK_WINDOW(GHB_WIDGET(ud->builder, "hb_window"));
+ dialog = gtk_file_chooser_dialog_new("Queue Destination",
+ hb_window,
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GHB_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GHB_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ // Add filters
+ GtkFileFilter *filter;
+ GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog);
+ filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "QueueFilterAll"));
+ gtk_file_filter_set_name(filter, _("All"));
+ gtk_file_filter_add_pattern(filter, "*");
+ gtk_file_chooser_add_filter(chooser, filter);
+ filter = GTK_FILE_FILTER(GHB_OBJECT(ud->builder, "QueueFilterXML"));
+ gtk_file_filter_set_name(filter, "XML");
+ gtk_file_filter_add_pattern(filter, "*.xml");
+ gtk_file_filter_add_pattern(filter, "*.XML");
+ gtk_file_filter_add_pattern(filter, "*.plist");
+ gtk_file_filter_add_pattern(filter, "*.PLIST");
+ gtk_file_chooser_add_filter(chooser, filter);
+
+ if (gtk_dialog_run(GTK_DIALOG (dialog)) != GTK_RESPONSE_ACCEPT)
+ {
+ gtk_widget_destroy(dialog);
+ return;
+ }
+
+ GValue *queue;
+ char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog));
+ gtk_widget_destroy(dialog);
+
+ if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
+ {
+ queue = ghb_plist_parse_file(filename);
+ if (queue != NULL)
+ {
+ int ii, count;
+ count = ghb_array_len(queue);
+ for (ii = 0; ii < count; ii++)
+ {
+ GValue *settings = ghb_array_get_nth(queue, ii);
+ ghb_array_remove(queue, ii);
+ ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
+ ghb_settings_set_int(settings, "job_unique_id", 0);
+
+ if (ud->queue == NULL)
+ ud->queue = ghb_array_value_new(32);
+ ghb_array_append(ud->queue, settings);
+ add_to_queue_list(ud, settings, NULL);
+ }
+ ghb_queue_buttons_grey(ud);
+ ghb_save_queue(ud->queue);
+ ghb_value_free(queue);
+ }
+ }
+ g_free (filename);
+}
+
+G_MODULE_EXPORT void
+queue_save_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ save_queue_file(ud);
+}
+
+G_MODULE_EXPORT void
+queue_open_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
+{
+ open_queue_file(ud);
+}
+
G_MODULE_EXPORT void
queue_reload_all_clicked_cb(GtkWidget *widget, signal_user_data_t *ud)
{
ghb_update_all_status(ud, GHB_QUEUE_PENDING);
+ ghb_save_queue(ud->queue);
+ ghb_update_pending(ud);
}
G_MODULE_EXPORT void
add_to_queue_list(ud, settings, NULL);
ghb_save_queue(ud->queue);
ghb_update_pending(ud);
+ ghb_queue_buttons_grey(ud);
return TRUE;
}
paused = queue_state & GHB_STATE_PAUSED;
+ widget = GHB_WIDGET(ud->builder, "queue_save");
+ gtk_widget_set_sensitive(widget, !!queue_count);
widget = GHB_WIDGET(ud->builder, "queue_add");
gtk_widget_set_sensitive(widget, show_start);
widget = GHB_WIDGET(ud->builder, "queue_add_menu");