OSDN Git Service

LinGui: gtk 2.12 compatibility fixes
[handbrake-jp/handbrake-jp-git.git] / gtk / src / queuehandler.c
index 22b2c25..fbe7cce 100644 (file)
@@ -456,6 +456,24 @@ add_to_queue_list(signal_user_data_t *ud, GValue *settings, GtkTreeIter *piter)
                                def   ? " (Default)":""
                        );
                }
+               else
+               {
+                       gint offset;
+                       gchar *filename, *basename, *code;
+
+                       offset = ghb_settings_get_int(settings, "SrtOffset");
+                       filename = ghb_settings_get_string(settings, "SrtFile");
+                       basename = g_path_get_basename(filename);
+                       code = ghb_settings_get_string(settings, "SrtCodeset");
+                       g_string_append_printf(str,
+                               "<small> %s (%s), %s, Offset (ms) %d%s</small>",
+                               track, code, basename, offset,
+                               def   ? " (Default)":""
+                       );
+                       g_free(filename);
+                       g_free(basename);
+                       g_free(code);
+               }
                if (ii < count-1)
                        g_string_append_printf(str, "\n");
                g_free(track);
@@ -596,6 +614,8 @@ validate_settings(signal_user_data_t *ud)
                g_free(destdir);
                return FALSE;
        }
+#if !defined(_WIN32)
+       // This doesn't work properly on windows
        if (g_access(destdir, R_OK|W_OK) != 0)
        {
                message = g_strdup_printf(
@@ -608,6 +628,7 @@ validate_settings(signal_user_data_t *ud)
                g_free(destdir);
                return FALSE;
        }
+#endif
        GFile *gfile;
        GFileInfo *info;
        guint64 size;
@@ -716,6 +737,7 @@ queue_add(signal_user_data_t *ud)
        ghb_array_append(ud->queue, settings);
        add_to_queue_list(ud, settings, NULL);
        ghb_save_queue(ud->queue);
+       ghb_update_pending(ud);
 
        return TRUE;
 }
@@ -780,6 +802,7 @@ queue_remove_clicked_cb(GtkWidget *widget, gchar *path, signal_user_data_t *ud)
        {       
                gtk_tree_path_free (treepath);
        }
+       ghb_update_pending(ud);
 }
 
 static gint
@@ -994,34 +1017,156 @@ queue_drag_cb(
 }
 
 void
-ghb_queue_buttons_grey(signal_user_data_t *ud, gboolean working)
+ghb_queue_buttons_grey(signal_user_data_t *ud)
 {
        GtkWidget *widget;
        GtkAction *action;
        gint queue_count;
        gint titleindex;
-       gboolean title_ok;
+       gint queue_state, scan_state;
+       gboolean show_start, show_stop, paused;
 
        queue_count = ghb_array_len(ud->queue);
        titleindex = ghb_settings_combo_int(ud->settings, "title");
-       title_ok = (titleindex >= 0);
+
+       queue_state = ghb_get_queue_state();
+       scan_state = ghb_get_scan_state();
+
+       show_stop = queue_state & 
+                               (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING);
+       show_start = !(scan_state & GHB_STATE_SCANNING) && 
+                                       (titleindex >= 0 || queue_count > 0);
+
+
+       paused = queue_state & GHB_STATE_PAUSED;
 
        widget = GHB_WIDGET (ud->builder, "queue_start1");
-       gtk_widget_set_sensitive (widget, !working && (title_ok || queue_count));
+       if (show_stop)
+       {
+               gtk_widget_set_sensitive (widget, TRUE);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-stop");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Stop");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Stop Encoding");
+       }
+       else
+       {
+               gtk_widget_set_sensitive (widget, show_start);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Start");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Start Encoding");
+       }
        widget = GHB_WIDGET (ud->builder, "queue_start2");
-       gtk_widget_set_sensitive (widget, !working && (title_ok || queue_count));
-       action = GHB_ACTION (ud->builder, "queue_start_menu");
-       gtk_action_set_sensitive (action, !working && (title_ok || queue_count));
+       if (show_stop)
+       {
+               gtk_widget_set_sensitive (widget, TRUE);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-stop");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Stop");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Stop Encoding");
+       }
+       else
+       {
+               gtk_widget_set_sensitive (widget, show_start);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Start");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Start Encoding");
+       }
        widget = GHB_WIDGET (ud->builder, "queue_pause1");
-       gtk_widget_set_sensitive (widget, working);
+       if (paused)
+       {
+               gtk_widget_set_sensitive (widget, show_stop);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Resume");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Resume Encoding");
+       }
+       else
+       {
+               gtk_widget_set_sensitive (widget, show_stop);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-pause");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Pause");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Pause Encoding");
+       }
        widget = GHB_WIDGET (ud->builder, "queue_pause2");
-       gtk_widget_set_sensitive (widget, working);
+       if (paused)
+       {
+               gtk_widget_set_sensitive (widget, show_stop);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-play");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Resume");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Resume Encoding");
+       }
+       else
+       {
+               gtk_widget_set_sensitive (widget, show_stop);
+               gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(widget), "hb-pause");
+               gtk_tool_button_set_label(GTK_TOOL_BUTTON(widget), "Pause");
+               gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(widget), "Pause Encoding");
+       }
+
+       action = GHB_ACTION (ud->builder, "queue_start_menu");
+       if (show_stop)
+       {
+               gtk_action_set_sensitive (action, TRUE);
+#if GTK_CHECK_VERSION(2, 16, 0)
+               gtk_action_set_icon_name(action, "hb-stop");
+               gtk_action_set_label(action, "S_top Queue");
+               gtk_action_set_tooltip(action, "Stop Encoding");
+#else
+               g_object_set_property(G_OBJECT(action), "icon-name", 
+                                                                                       ghb_string_value("hb-stop"));
+               g_object_set_property(G_OBJECT(action), "label",
+                                                                                       ghb_string_value("S_top Queue"));
+               g_object_set_property(G_OBJECT(action), "tooltip",
+                                                                                       ghb_string_value("Stop Encoding"));
+#endif
+       }
+       else
+       {
+               gtk_action_set_sensitive (action, show_start);
+#if GTK_CHECK_VERSION(2, 16, 0)
+               gtk_action_set_icon_name(action, "hb-play");
+               gtk_action_set_label(action, "_Start Queue");
+               gtk_action_set_tooltip(action, "Start Encoding");
+#else
+               g_object_set_property(G_OBJECT(action), "icon-name", 
+                                                                                       ghb_string_value("hb-play"));
+               g_object_set_property(G_OBJECT(action), "label",
+                                                                                       ghb_string_value("_Start Queue"));
+               g_object_set_property(G_OBJECT(action), "tooltip",
+                                                                                       ghb_string_value("Start Encoding"));
+#endif
+       }
        action = GHB_ACTION (ud->builder, "queue_pause_menu");
-       gtk_action_set_sensitive (action, working);
-       widget = GHB_WIDGET (ud->builder, "queue_stop");
-       gtk_widget_set_sensitive (widget, working);
-       action = GHB_ACTION (ud->builder, "queue_stop_menu");
-       gtk_action_set_sensitive (action, working);
+       if (paused)
+       {
+               gtk_action_set_sensitive (action, show_start);
+#if GTK_CHECK_VERSION(2, 16, 0)
+               gtk_action_set_icon_name(action, "hb-play");
+               gtk_action_set_label(action, "_Resume Queue");
+               gtk_action_set_tooltip(action, "Resume Encoding");
+#else
+               g_object_set_property(G_OBJECT(action), "icon-name", 
+                                                                               ghb_string_value("hb-play"));
+               g_object_set_property(G_OBJECT(action), "label",
+                                                                               ghb_string_value("_Resume Queue"));
+               g_object_set_property(G_OBJECT(action), "tooltip",
+                                                                               ghb_string_value("Resume Encoding"));
+#endif
+       }
+       else
+       {
+               gtk_action_set_sensitive (action, show_stop);
+#if GTK_CHECK_VERSION(2, 16, 0)
+               gtk_action_set_icon_name(action, "hb-pause");
+               gtk_action_set_label(action, "_Pause Queue");
+               gtk_action_set_tooltip(action, "Pause Encoding");
+#else
+               g_object_set_property(G_OBJECT(action), "icon-name", 
+                                                                               ghb_string_value("hb-pause"));
+               g_object_set_property(G_OBJECT(action), "label",
+                                                                               ghb_string_value("_Pause Queue"));
+               g_object_set_property(G_OBJECT(action), "tooltip",
+                                                                               ghb_string_value("Pause Encoding"));
+#endif
+       }
 }
 
 G_MODULE_EXPORT void
@@ -1048,6 +1193,14 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
        gint status;
        gint state;
 
+       state = ghb_get_queue_state();
+       if (state & (GHB_STATE_WORKING | GHB_STATE_SCANNING | GHB_STATE_MUXING))
+       {
+               ud->cancel_encode = TRUE;
+               ghb_cancel_encode(NULL);
+               return;
+       }
+
        count = ghb_array_len(ud->queue);
        for (ii = 0; ii < count; ii++)
        {
@@ -1067,7 +1220,6 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
                if (!queue_add(ud))
                        return;
        }
-       state = ghb_get_queue_state();
        if (state == GHB_STATE_IDLE)
        {
                // Add the first pending queue item and start
@@ -1076,13 +1228,6 @@ queue_start_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 }
 
 G_MODULE_EXPORT void
-queue_stop_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
-{
-       ud->cancel_encode = TRUE;
-       ghb_cancel_encode(NULL);
-}
-
-G_MODULE_EXPORT void
 queue_pause_clicked_cb(GtkWidget *xwidget, signal_user_data_t *ud)
 {
        ghb_pause_queue();
@@ -1146,7 +1291,7 @@ ghb_reload_queue(signal_user_data_t *ud)
                                ghb_settings_set_int(settings, "job_status", GHB_QUEUE_PENDING);
                                add_to_queue_list(ud, settings, NULL);
                        }
-                       ghb_queue_buttons_grey(ud, FALSE);
+                       ghb_queue_buttons_grey(ud);
                }
                else
                {