OSDN Git Service

LinGui: when stopping an encode, give the user options similar to macui
authorjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Fri, 24 Jul 2009 21:57:35 +0000 (21:57 +0000)
committerjstebbins <jstebbins@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Fri, 24 Jul 2009 21:57:35 +0000 (21:57 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@2730 b64f7644-9d1e-0410-96f1-a4d463321fa5

gtk/src/callbacks.c
gtk/src/callbacks.h
gtk/src/queuehandler.c
gtk/src/settings.h

index 63257ee..0daa257 100644 (file)
@@ -284,7 +284,7 @@ on_quit1_activate(GtkMenuItem *quit, signal_user_data_t *ud)
        g_debug("on_quit1_activate ()");
        if (state & GHB_STATE_WORKING)
        {
-               if (ghb_cancel_encode("Closing HandBrake will terminate encoding.\n"))
+               if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
                {
                        ghb_hb_cleanup(FALSE);
                        prune_logs(ud);
@@ -1218,7 +1218,7 @@ window_delete_event_cb(GtkWidget *widget, GdkEvent *event, signal_user_data_t *u
        g_debug("window_delete_event_cb ()");
        if (state & GHB_STATE_WORKING)
        {
-               if (ghb_cancel_encode("Closing HandBrake will terminate encoding.\n"))
+               if (ghb_cancel_encode2(ud, "Closing HandBrake will terminate encoding.\n"))
                {
                        ghb_hb_cleanup(FALSE);
                        prune_logs(ud);
@@ -1905,8 +1905,48 @@ ghb_error_dialog(GtkMessageType type, const gchar *message, const gchar *cancel)
        gtk_widget_destroy (dialog);
 }
 
+void
+ghb_cancel_encode(signal_user_data_t *ud, const gchar *extra_msg)
+{
+       GtkWidget *dialog;
+       GtkResponseType response;
+       
+       if (extra_msg == NULL) extra_msg = "";
+       // Toss up a warning dialog
+       dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL,
+                               GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE,
+                               "%sYour movie will be lost if you don't continue encoding.",
+                               extra_msg);
+       gtk_dialog_add_buttons( GTK_DIALOG(dialog), 
+                                                  "Cancel Current and Stop", 1,
+                                                  "Cancel Current, Start Next", 2,
+                                                  "Finish Current, then Stop", 3,
+                                                  "Continue Encoding", 4,
+                                                  NULL);
+       response = gtk_dialog_run(GTK_DIALOG(dialog));
+       gtk_widget_destroy (dialog);
+       switch (response)
+       {
+               case 1:
+                       ghb_stop_queue();
+                       ud->cancel_encode = GHB_CANCEL_ALL;
+                       break;
+               case 2:
+                       ghb_stop_queue();
+                       ud->cancel_encode = GHB_CANCEL_CURRENT;
+                       break;
+               case 3:
+                       ud->cancel_encode = GHB_CANCEL_FINISH;
+                       break;
+               case 4:
+               default:
+                       ud->cancel_encode = GHB_CANCEL_NONE;
+                       break;
+       }
+}
+
 gboolean
-ghb_cancel_encode(const gchar *extra_msg)
+ghb_cancel_encode2(signal_user_data_t *ud, const gchar *extra_msg)
 {
        GtkWidget *dialog;
        GtkResponseType response;
@@ -1918,13 +1958,22 @@ ghb_cancel_encode(const gchar *extra_msg)
                                "%sYour movie will be lost if you don't continue encoding.",
                                extra_msg);
        gtk_dialog_add_buttons( GTK_DIALOG(dialog), 
-                                                  "Continue Encoding", GTK_RESPONSE_NO,
-                                                  "Stop Encoding", GTK_RESPONSE_YES, NULL);
+                                                  "Cancel Current and Stop", 1,
+                                                  "Continue Encoding", 4,
+                                                  NULL);
        response = gtk_dialog_run(GTK_DIALOG(dialog));
        gtk_widget_destroy (dialog);
-       if (response == GTK_RESPONSE_NO) return FALSE;
-       ghb_stop_queue();
-       return TRUE;
+       switch (response)
+       {
+               case 1:
+                       ghb_stop_queue();
+                       ud->cancel_encode = GHB_CANCEL_ALL;
+                       return TRUE;
+               case 4:
+               default:
+                       break;
+       }
+       return FALSE;
 }
 
 static void
@@ -2424,7 +2473,8 @@ ghb_backend_events(signal_user_data_t *ud)
                index = find_queue_job(ud->queue, status.queue.unique_id, &js);
                treeview = GTK_TREE_VIEW(GHB_WIDGET(ud->builder, "queue_list"));
                store = GTK_TREE_STORE(gtk_tree_view_get_model(treeview));
-               if (ud->cancel_encode)
+               if (ud->cancel_encode == GHB_CANCEL_ALL || 
+                       ud->cancel_encode == GHB_CANCEL_CURRENT)
                        status.queue.error = GHB_ERROR_CANCELED;
                switch( status.queue.error )
                {
@@ -2475,7 +2525,8 @@ ghb_backend_events(signal_user_data_t *ud)
                if (ud->job_activity_log)
                        g_io_channel_unref(ud->job_activity_log);
                ud->job_activity_log = NULL;
-               if (!ud->cancel_encode)
+               if (ud->cancel_encode != GHB_CANCEL_ALL &&
+                       ud->cancel_encode != GHB_CANCEL_FINISH)
                {
                        ud->current_job = ghb_start_next_job(ud, FALSE);
                }
@@ -2488,7 +2539,7 @@ ghb_backend_events(signal_user_data_t *ud)
                if (js)
                        ghb_settings_set_int(js, "job_status", qstatus);
                ghb_save_queue(ud->queue);
-               ud->cancel_encode = FALSE;
+               ud->cancel_encode = GHB_CANCEL_NONE;
 #if !GTK_CHECK_VERSION(2, 16, 0)
                GtkStatusIcon *si;
 
index c52bf55..4f0506f 100644 (file)
@@ -48,7 +48,8 @@ gboolean ghb_message_dialog(
 void ghb_error_dialog(
        GtkMessageType type, const gchar *message, const gchar *cancel);
 void ghb_init_dep_map(void);
-gboolean ghb_cancel_encode(const gchar *extra_msg);
+void ghb_cancel_encode(signal_user_data_t *ud, const gchar *extra_msg);
+gboolean ghb_cancel_encode2(signal_user_data_t *ud, const gchar *extra_msg);
 GValue* ghb_start_next_job(signal_user_data_t *ud, gboolean find_first);
 void ghb_check_dependency(signal_user_data_t *ud, GtkWidget *widget);
 void ghb_do_scan( signal_user_data_t *ud, const gchar *filename, 
index fe3f2db..8aca1f6 100644 (file)
@@ -783,7 +783,7 @@ queue_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
                if (status == GHB_QUEUE_RUNNING)
                {
                        // Ask if wants to stop encode.
-                       if (!ghb_cancel_encode(NULL))
+                       if (!ghb_cancel_encode2(ud, NULL))
                        {
                                return;
                        }
@@ -1196,8 +1196,8 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        state = ghb_get_queue_state();
        if (state & (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING))
        {
-               if (ghb_cancel_encode(NULL))
-                       ud->cancel_encode = TRUE;
+               ghb_cancel_encode(ud, "You are currently encoding.  "
+                                                               "What would you like to do?");
                return;
        }
 
@@ -1345,7 +1345,7 @@ queue_key_press_cb(
                if (status == GHB_QUEUE_RUNNING)
                {
                        // Ask if wants to stop encode.
-                       if (!ghb_cancel_encode(NULL))
+                       if (!ghb_cancel_encode2(ud, NULL))
                        {
                                return TRUE;
                        }
index e974c09..c499da5 100644 (file)
@@ -36,6 +36,14 @@ enum
        GHB_STATE_MUXING        = 0x40,
 };
 
+enum
+{
+       GHB_CANCEL_NONE,
+       GHB_CANCEL_ALL,
+       GHB_CANCEL_CURRENT,
+       GHB_CANCEL_FINISH
+};
+
 typedef struct preview_s preview_t;
 
 typedef struct
@@ -43,7 +51,7 @@ typedef struct
        gchar *current_dvd_device;
        gboolean debug;
        gboolean dont_clear_presets;
-       gboolean cancel_encode;
+       gint cancel_encode;
        GtkBuilder *builder;
        GValue *settings;
        GValue *queue;