[easytag] Improve access to the scanner dialogue, bug 699122



commit c8216e3c2a7366ca3819ecec342879498de0ebf2
Author: David King <amigadave amigadave com>
Date:   Sun Apr 28 18:44:25 2013 +0100

    Improve access to the scanner dialogue, bug 699122
    
    Convert the scanner mode actions to radio actions. Add a toggle action
    for showing the scanner dialogue.

 src/bar.c        |   29 +++++++++++++++++----
 src/bar.h        |    3 +-
 src/easytag.c    |   27 +++++++++++++++++--
 src/easytag.h    |    3 ++
 src/scan.c       |   73 +++++++++++++++++++++++++++++++++++++----------------
 src/scan.h       |    4 +--
 src/ui_manager.h |    9 +++---
 7 files changed, 108 insertions(+), 40 deletions(-)
---
diff --git a/src/bar.c b/src/bar.c
index e6d18a6..da1f9e7 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -194,9 +194,8 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
         { AM_PREV,               GTK_STOCK_GO_BACK,          _("_Previous File"),             "Page_Up",     
      _("Previous file"),             G_CALLBACK(Action_Select_Prev_File) },
         { AM_NEXT,               GTK_STOCK_GO_FORWARD,       _("_Next File"),                 "Page_Down",   
      _("Next file"),                 G_CALLBACK(Action_Select_Next_File) },
         { AM_LAST,               GTK_STOCK_GOTO_LAST,        _("_Last File"),                 
"<Control>End",      _("Last file"),                 G_CALLBACK(Action_Select_Last_File) },
-        // XXX GTK1 version uses Ctrl+C for scanner, this doesnt work in GTK1 as its copy! in gtk2, 
behaviour is different
-        // and binding Ctrl+C effectively stops the user copying text..
-        { AM_SCAN,               "document-properties",             _("S_can Files…"),              NULL,    
            _("Scan files"),              G_CALLBACK(Action_Scan_Selected_Files) },
+        { AM_SCAN_FILES, GTK_STOCK_APPLY, _("S_can Files"), NULL,
+          _("Scan selected files"), G_CALLBACK (Action_Scan_Selected_Files) },
         { AM_REMOVE,             GTK_STOCK_CLEAR,            _("_Remove Tags"),             "<Control>R",    
    _("Remove tags"),             G_CALLBACK(Action_Remove_Selected_Tags) },
         { AM_UNDO,               GTK_STOCK_UNDO,             _("_Undo Last Files Changes"), "<Control>Z",    
    _("Undo last Files changes"), G_CALLBACK(Action_Undo_Selected_Files) },
         { AM_REDO,               GTK_STOCK_REDO,             _("R_edo Last Files Changes"), 
"<Shift><Control>Z", _("Redo last files changes"), G_CALLBACK(Action_Redo_Selected_File) },
@@ -221,9 +220,6 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
         { AM_INITIALIZE_TREE,          GTK_STOCK_REFRESH,      _("_Refresh Tree"),                 
"<Control><Shift>R", _("_Refresh tree"),                 G_CALLBACK(Browser_Tree_Rebuild) },
 
         { MENU_SCANNER,              NULL,                  _("S_canner"),                          NULL,    
     NULL,                                 NULL },
-        { AM_SCANNER_FILL_TAG,       "document-properties",        _("_Fill Tags…"),                  NULL,  
       _("Fill tags"),                 G_CALLBACK(Scan_Use_Fill_Tag_Scanner) },
-        { AM_SCANNER_RENAME_FILE,    "document-properties",        _("_Rename Files and Directories…"), 
NULL,         _("Rename files and directories"),G_CALLBACK(Scan_Use_Rename_File_Scanner) },
-        { AM_SCANNER_PROCESS_FIELDS, "document-properties",        _("_Process Fields…"),             NULL,  
       _("Process Fields"),           G_CALLBACK(Scan_Use_Process_Fields_Scanner) },
 
         { MENU_MISC,                NULL,                   _("_Miscellaneous"),                             
NULL,         NULL,                                 NULL },
         { AM_SEARCH_FILE,           GTK_STOCK_FIND,         _("Find _Files…"),               "<Control>F", 
_("Find files"),               G_CALLBACK(Open_Search_File_Window) },
@@ -270,6 +266,9 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
                     */
         { AM_BROWSER_HIDDEN_DIR, NULL,                   _("Show Hidden Directories"),                       
  NULL, _("Show hidden directories"),                         G_CALLBACK(Browser_Tree_Rebuild),     
BROWSE_HIDDEN_DIR },
 #endif /* !G_OS_WIN32 */
+        { AM_SCANNER_SHOW, "document-properties", _("_Show Scanner"), NULL,
+          _("Show scanner"), G_CALLBACK (et_scan_show),
+          OPEN_SCANNER_WINDOW_ON_STARTUP },
     };
 
     GtkRadioActionEntry view_mode_entries[] =
@@ -281,16 +280,30 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
           _("View by artist and album"), 1 }
     };
 
+    GtkRadioActionEntry scanner_mode_entries[] =
+    {
+        { AM_SCANNER_FILL_TAG, "document-properties", _("_Fill Tags…"), NULL,
+          _("Fill tags"), SCANNER_FILL_TAG },
+        { AM_SCANNER_RENAME_FILE, "document-properties",
+          _("_Rename Files and Directories…"), NULL,
+          _("Rename files and directories"), SCANNER_RENAME_FILE },
+        { AM_SCANNER_PROCESS_FIELDS, "document-properties",
+          _("_Process Fields…"), NULL, _("Process Fields"),
+          SCANNER_PROCESS_FIELDS }
+    };
+
     GError *error = NULL;
     guint num_menu_entries;
     guint num_toggle_entries;
     guint n_view_mode_entries;
+    guint n_scanner_mode_entries;
     guint i;
 
     /* Calculate number of items into the menu */
     num_menu_entries = G_N_ELEMENTS(ActionEntries);
     num_toggle_entries = G_N_ELEMENTS(ToggleActionEntries);
     n_view_mode_entries = G_N_ELEMENTS (view_mode_entries);
+    n_scanner_mode_entries = G_N_ELEMENTS (scanner_mode_entries);
 
     /* Populate quarks list with the entries */
     for(i = 0; i < num_menu_entries; i++)
@@ -316,6 +329,10 @@ void Create_UI (GtkWidget **ppmenubar, GtkWidget **pptoolbar)
     gtk_action_group_add_radio_actions (ActionGroup, view_mode_entries,
                                         n_view_mode_entries, 0,
                                         Action_Select_Browser_Style, NULL);
+    gtk_action_group_add_radio_actions (ActionGroup, scanner_mode_entries,
+                                        n_scanner_mode_entries, 0,
+                                        G_CALLBACK (et_on_action_select_scan_mode),
+                                        NULL);
 
     UIManager = gtk_ui_manager_new();
     if (!gtk_ui_manager_add_ui_from_string(UIManager, ui_xml, -1, &error))
diff --git a/src/bar.h b/src/bar.h
index db5def3..115fe21 100644
--- a/src/bar.h
+++ b/src/bar.h
@@ -56,7 +56,7 @@ GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
 #define AM_NEXT                     "NextFile"
 #define AM_FIRST                    "FirstFile"
 #define AM_LAST                     "LastFile"
-#define AM_SCAN                     "ScanFile"
+#define AM_SCAN_FILES "ScanFiles"
 #define AM_REMOVE                   "RemoveTag"
 #define AM_UNDO                     "UndoFile"
 #define AM_REDO                     "RedoFile"
@@ -89,6 +89,7 @@ GtkWidget *CheckMenuItemBrowseHiddenDirMainMenu;
 #define AM_SCANNER_FILL_TAG         "FillTag"
 #define AM_SCANNER_RENAME_FILE      "RenameFile"
 #define AM_SCANNER_PROCESS_FIELDS   "ProcessFields"
+#define AM_SCANNER_SHOW "ShowScanner"
 #define AM_SEARCH_FILE              "SearchFile"
 #define AM_CDDB_SEARCH_FILE         "CDDBSearchFile"
 #define AM_CDDB_SEARCH              "CDDBSearch"
diff --git a/src/easytag.c b/src/easytag.c
index 7924131..8426acd 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -3532,8 +3532,29 @@ Action_Select_Browser_Style (void)
     Update_Command_Buttons_Sensivity();
 }
 
+/*
+ * et_on_action_select_scan_mode:
+ * @action: the action on which the signal was emitted
+ * @current: the member of the action group which has just been activated
+ * @user_data: user data set when the signal handler was connected
+ *
+ * Select the current scanner mode and open the scanner window.
+ */
+void
+et_on_action_select_scan_mode (GtkRadioAction *action, GtkRadioAction *current,
+                               gpointer user_data)
+{
+    gint active_value;
 
+    active_value = gtk_radio_action_get_current_value (action);
 
+    if (SCANNER_TYPE != active_value)
+    {
+        SCANNER_TYPE = active_value;
+    }
+
+    Open_ScannerWindow (SCANNER_TYPE);
+}
 
 
 /*
@@ -3949,7 +3970,7 @@ void Update_Command_Buttons_Sensivity (void)
         ui_widget_set_sensitive(MENU_FILE, AM_NEXT, FALSE);
         ui_widget_set_sensitive(MENU_FILE, AM_FIRST, FALSE);
         ui_widget_set_sensitive(MENU_FILE, AM_LAST, FALSE);
-        ui_widget_set_sensitive(MENU_FILE, AM_SCAN, FALSE);
+        ui_widget_set_sensitive (MENU_FILE, AM_SCAN_FILES, FALSE);
         ui_widget_set_sensitive(MENU_FILE, AM_REMOVE, FALSE);
         ui_widget_set_sensitive(MENU_FILE, AM_UNDO, FALSE);
         ui_widget_set_sensitive(MENU_FILE, AM_REDO, FALSE);
@@ -4020,7 +4041,7 @@ void Update_Command_Buttons_Sensivity (void)
         ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_BITRATE,TRUE);
         ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_ASCENDING_FILE_SAMPLERATE,TRUE);
         ui_widget_set_sensitive(MENU_SORT_PROP_PATH,AM_SORT_DESCENDING_FILE_SAMPLERATE,TRUE);
-        ui_widget_set_sensitive(MENU_FILE,AM_SCAN,TRUE);
+        ui_widget_set_sensitive (MENU_FILE, AM_SCAN_FILES, TRUE);
         ui_widget_set_sensitive(MENU_FILE,AM_REMOVE,TRUE);
         ui_widget_set_sensitive(MENU_MISC,AM_SEARCH_FILE,TRUE);
         ui_widget_set_sensitive(MENU_MISC,AM_FILENAME_FROM_TXT,TRUE);
@@ -4123,7 +4144,7 @@ Disable_Command_Buttons (void)
     ui_widget_set_sensitive(MENU_FILE,AM_PREV,FALSE);
     ui_widget_set_sensitive(MENU_FILE,AM_NEXT,FALSE);
     ui_widget_set_sensitive(MENU_FILE,AM_LAST,FALSE);
-    ui_widget_set_sensitive(MENU_FILE,AM_SCAN,FALSE);
+    ui_widget_set_sensitive (MENU_FILE, AM_SCAN_FILES, FALSE);
     ui_widget_set_sensitive(MENU_FILE,AM_REMOVE,FALSE);
     ui_widget_set_sensitive(MENU_FILE,AM_UNDO,FALSE);
     ui_widget_set_sensitive(MENU_FILE,AM_REDO,FALSE);
diff --git a/src/easytag.h b/src/easytag.h
index bec9164..840dae7 100644
--- a/src/easytag.h
+++ b/src/easytag.h
@@ -159,6 +159,9 @@ gint Save_All_Files_With_Answer         (gboolean force_saving_files);
 
 void Action_Main_Stop_Button_Pressed    (void);
 void Action_Select_Browser_Style        (void);
+void et_on_action_select_scan_mode (GtkRadioAction *action,
+                                    GtkRadioAction *current,
+                                    gpointer user_data);
 
 void Tag_Area_Display_Controls (ET_File *ETFile);
 
diff --git a/src/scan.c b/src/scan.c
index 1bf35c0..f3ab1af 100644
--- a/src/scan.c
+++ b/src/scan.c
@@ -2313,6 +2313,7 @@ void Open_ScannerWindow (gint scanner_type)
     GList *pf_cb_group3 = NULL;
     GtkTreeViewColumn * column;
     GtkCellRenderer *renderer;
+    GtkToggleAction *toggle_action;
 
     /* Check if already opened */
     if (ScannerWindow)
@@ -2392,7 +2393,7 @@ void Open_ScannerWindow (gint scanner_type)
     gtk_container_add(GTK_CONTAINER(SWScanButton),Icon);
     gtk_box_pack_start(GTK_BOX(HBox1),SWScanButton,FALSE,FALSE,0);
     gtk_button_set_relief(GTK_BUTTON(SWScanButton),GTK_RELIEF_NONE);
-    gtk_widget_set_tooltip_text(SWScanButton,_("Open scanner window / Scan selected files"));
+    gtk_widget_set_tooltip_text(SWScanButton,_("Scan selected files"));
     g_signal_connect(G_OBJECT(SWScanButton),"clicked",G_CALLBACK(Action_Scan_Selected_Files),NULL);
 
     /* Separator line */
@@ -3012,6 +3013,13 @@ void Open_ScannerWindow (gint scanner_type)
 
     // Activate the current menu in the option menu
     gtk_combo_box_set_active(GTK_COMBO_BOX(ScannerOptionCombo), scanner_type);
+
+    toggle_action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (UIManager,
+                                                                  "/ToolBar/ShowScanner"));
+    if (!gtk_toggle_action_get_active (toggle_action))
+    {
+        gtk_toggle_action_set_active (toggle_action, TRUE);
+    }
 }
 
 static gboolean
@@ -3054,29 +3062,33 @@ void Scan_Select_Mode_And_Run_Scanner (ET_File *ETFile)
     }
 }
 
-void Scan_Use_Fill_Tag_Scanner (void)
-{
-    if (!ScannerWindow || gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_FILL_TAG)
-        Open_ScannerWindow(SCANNER_FILL_TAG);
-    else
-        Action_Scan_Selected_Files();
-}
-
-
-void Scan_Use_Rename_File_Scanner (void)
+/*
+ * et_scan_show:
+ * @action: the #GtkToggleAction that was activated
+ * @user_data: user data set when the signal handler was connected
+ *
+ * Show the scanner window.
+ */
+void
+et_scan_show (GtkAction *action, gpointer user_data)
 {
-    if (!ScannerWindow || gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_RENAME_FILE)
-        Open_ScannerWindow(SCANNER_RENAME_FILE);
-    else
-        Action_Scan_Selected_Files();
-}
+    gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
 
-void Scan_Use_Process_Fields_Scanner (void)
-{
-    if (!ScannerWindow || gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != 
SCANNER_PROCESS_FIELDS)
-        Open_ScannerWindow(SCANNER_PROCESS_FIELDS);
+    if (active)
+    {
+        if (!ScannerWindow)
+        {
+            Open_ScannerWindow (SCANNER_TYPE);
+        }
+        else
+        {
+            gtk_window_present (GTK_WINDOW (ScannerWindow));
+        }
+    }
     else
-        Action_Scan_Selected_Files();
+    {
+        ScannerWindow_Quit ();
+    }
 }
 
 
@@ -3084,6 +3096,16 @@ void Scan_Use_Process_Fields_Scanner (void)
 static void
 ScannerWindow_Quit (void)
 {
+    GtkToggleAction *toggle_action;
+
+    toggle_action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (UIManager,
+                                                                  "/ToolBar/ShowScanner"));
+
+    if (gtk_toggle_action_get_active (toggle_action))
+    {
+        gtk_toggle_action_set_active (toggle_action, FALSE);
+    }
+
     if (ScannerWindow)
     {
         ScannerWindow_Apply_Changes();
@@ -4048,7 +4070,14 @@ Mask_Editor_List_Key_Press (GtkWidget *widget, GdkEvent *event)
 static void
 Scanner_Option_Menu_Activate_Item (GtkWidget *combo, gpointer data)
 {
-    switch (gtk_combo_box_get_active(GTK_COMBO_BOX(combo)))
+    GtkRadioAction *radio_action;
+
+    radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (UIManager,
+                                                                "/MenuBar/ScannerMenu/FillTag"));
+    SCANNER_TYPE = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+    gtk_radio_action_set_current_value (radio_action, SCANNER_TYPE);
+
+    switch (SCANNER_TYPE)
     {
         case SCANNER_FILL_TAG:
             gtk_widget_show(MaskEditorButton);
diff --git a/src/scan.h b/src/scan.h
index 9f6aa2b..d1cd119 100644
--- a/src/scan.h
+++ b/src/scan.h
@@ -57,9 +57,7 @@ void   Scan_Rename_File_Generate_Preview      (void);
 void   Scan_Fill_Tag_Generate_Preview         (void);
 void   Scan_Rename_Directory_Generate_Preview (void);
 
-void   Scan_Use_Fill_Tag_Scanner            (void);
-void   Scan_Use_Rename_File_Scanner         (void);
-void   Scan_Use_Process_Fields_Scanner      (void);
+void et_scan_show (GtkAction *action, gpointer user_data);
 
 gboolean Scan_Check_Rename_File_Mask (GtkWidget *widget_to_show_hide, GtkEntry *widget_source);
 
diff --git a/src/ui_manager.h b/src/ui_manager.h
index 65cd493..6601994 100644
--- a/src/ui_manager.h
+++ b/src/ui_manager.h
@@ -97,7 +97,6 @@ static const gchar *ui_xml =
 "      <menuitem action='LastFile' />"
 "      <separator />"
 
-"      <menuitem action='ScanFile' />"
 "      <menuitem action='RemoveTag' />"
 "      <menuitem action='UndoFile' />"
 "      <menuitem action='RedoFile' />"
@@ -147,6 +146,8 @@ static const gchar *ui_xml =
 "      <menuitem action='FillTag' />"
 "      <menuitem action='RenameFile' />"
 "      <menuitem action='ProcessFields' />"
+"      <separator />"
+"      <menuitem action='ShowScanner' />"
 "    </menu>"
 
 "    <menu action='MiscMenu'>"
@@ -180,7 +181,7 @@ static const gchar *ui_xml =
 "    <toolitem action='LastFile'/>"
 "    <separator />"
 
-"    <toolitem action='ScanFile'/>"
+"    <toolitem action='ShowScanner'/>"
 "    <toolitem action='RemoveTag'/>"
 "    <toolitem action='UndoFile'/>"
 "    <toolitem action='RedoFile'/>"
@@ -218,9 +219,7 @@ static const gchar *ui_xml =
 "    <menuitem action='RunAudio' />"
 "    <separator />"
 "    <menu action='ScannerSubpopup'>"
-"      <menuitem action='FillTag' />"
-"      <menuitem action='RenameFile' />"
-"      <menuitem action='ProcessFields' />"
+"      <menuitem action='ShowScanner' />"
 "    </menu>"
 "    <menuitem action='CDDBSearchFile' />"
 "    <menuitem action='SearchFile' />"


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]