[easytag/wip/application-window: 5/70] Move scan dialog to EtScanDialog object
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/application-window: 5/70] Move scan dialog to EtScanDialog object
- Date: Fri, 1 Aug 2014 08:17:21 +0000 (UTC)
commit 7f7ca695778ad3854b3944c268fef242fa1cac91
Author: David King <amigadave amigadave com>
Date: Sun Dec 29 23:15:26 2013 +0000
Move scan dialog to EtScanDialog object
TODO | 4 -
src/application_window.c | 101 ++-
src/application_window.h | 4 +
src/bar.c | 12 +-
src/browser.c | 1 -
src/cddb_dialog.c | 23 +-
src/easytag.c | 159 +--
src/easytag.h | 2 +-
src/load_files_dialog.c | 16 +-
src/misc.c | 2 -
src/playlist_dialog.c | 2 +-
src/preferences_dialog.c | 2 +-
src/scan.h | 4 +
src/scan_dialog.c | 3192 ++++++++++++++++++++++++----------------------
src/scan_dialog.h | 75 +-
src/search_dialog.c | 2 +-
src/setting.c | 19 +-
src/setting.h | 3 -
18 files changed, 1867 insertions(+), 1756 deletions(-)
---
diff --git a/TODO b/TODO
index e6b67ea..0b6d1c9 100644
--- a/TODO
+++ b/TODO
@@ -4,16 +4,12 @@ TODO List
General tidying
---------------
-* Convert user guide to help in Mallard
-* Avoid using GdkWindow all over the place
-** Drop the window moving and size restoring code
* Use PNG icons and drop the XPM ones
* Use GProxyResolver for proxy settings
* Port configuration settings to use GSettings
* Port file I/O to use GFile from GIO
** Additionally, make I/O asynchronous
** Always use the GLib encoding for filenames (convert for display)
-* Instantiate windows on first use, not at startup
* GObjectification
* Avoid using gtk_events_pending(), use asynchronous operations instead
diff --git a/src/application_window.c b/src/application_window.c
index 11d21ec..dc50fad 100644
--- a/src/application_window.c
+++ b/src/application_window.c
@@ -53,6 +53,7 @@ struct _EtApplicationWindowPrivate
GtkWidget *load_files_dialog;
GtkWidget *playlist_dialog;
GtkWidget *preferences_dialog;
+ GtkWidget *scan_dialog;
GtkWidget *search_dialog;
/* Tag area labels. */
@@ -162,9 +163,13 @@ Convert_Letter_Uppercase (GtkWidget *entry)
static void
Convert_First_Letters_Uppercase (GtkWidget *entry)
{
- gchar *string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+ EtScanDialog *dialog;
+ gchar *string;
+
+ string = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry)));
+ dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW (MainWindow)));
- Scan_Process_Fields_First_Letters_Uppercase (&string);
+ Scan_Process_Fields_First_Letters_Uppercase (dialog, &string);
gtk_entry_set_text (GTK_ENTRY (entry), string);
g_free (string);
}
@@ -1651,6 +1656,7 @@ et_application_window_finalize (GObject *object)
g_clear_object (&priv->load_files_dialog);
g_clear_object (&priv->playlist_dialog);
g_clear_object (&priv->preferences_dialog);
+ g_clear_object (&priv->scan_dialog);
g_clear_object (&priv->search_dialog);
G_OBJECT_CLASS (et_application_window_parent_class)->finalize (object);
@@ -1673,6 +1679,7 @@ et_application_window_init (EtApplicationWindow *self)
priv->load_files_dialog = NULL;
priv->playlist_dialog = NULL;
priv->preferences_dialog = NULL;
+ priv->scan_dialog = NULL;
priv->search_dialog = NULL;
window = GTK_WINDOW (self);
@@ -1993,6 +2000,96 @@ et_application_window_search_cddb_for_selection (G_GNUC_UNUSED GtkAction *action
et_cddb_dialog_search_from_selection (ET_CDDB_DIALOG (priv->cddb_dialog));
}
+GtkWidget *
+et_application_window_get_scan_dialog (EtApplicationWindow *self)
+{
+ EtApplicationWindowPrivate *priv;
+
+ g_return_val_if_fail (self != NULL, NULL);
+
+ priv = et_application_window_get_instance_private (self);
+
+ return priv->scan_dialog;
+}
+
+void
+et_application_window_show_scan_dialog (GtkAction *action, gpointer user_data)
+{
+ EtApplicationWindowPrivate *priv;
+ gboolean active;
+ EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+ priv = et_application_window_get_instance_private (self);
+ active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+ if (!active)
+ {
+ if (priv->scan_dialog)
+ {
+ gtk_widget_hide (priv->scan_dialog);
+ }
+ else
+ {
+ return;
+ }
+ }
+ else
+ {
+ if (priv->scan_dialog)
+ {
+ gtk_widget_show (priv->scan_dialog);
+ }
+ else
+ {
+ priv->scan_dialog = GTK_WIDGET (et_scan_dialog_new ());
+ gtk_widget_show (priv->scan_dialog);
+ }
+ }
+}
+
+/*
+ * Action when Scan button is pressed
+ */
+void
+et_application_window_scan_selected_files (G_GNUC_UNUSED GtkAction *action,
+ gpointer user_data)
+{
+ EtApplicationWindowPrivate *priv;
+ EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+
+ priv = et_application_window_get_instance_private (self);
+
+ et_scan_dialog_scan_selected_files (ET_SCAN_DIALOG (priv->scan_dialog));
+}
+
+/*
+ * 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)
+{
+ EtApplicationWindowPrivate *priv;
+ EtApplicationWindow *self = ET_APPLICATION_WINDOW (user_data);
+ gint active_value;
+
+ priv = et_application_window_get_instance_private (self);
+
+ active_value = gtk_radio_action_get_current_value (action);
+
+ if (SCANNER_TYPE != active_value)
+ {
+ SCANNER_TYPE = active_value;
+ }
+
+ et_scan_dialog_open (ET_SCAN_DIALOG (priv->scan_dialog), SCANNER_TYPE);
+}
+
/*
* Disable (FALSE) / Enable (TRUE) all user widgets in the tag area
*/
diff --git a/src/application_window.h b/src/application_window.h
index e5b5545..aaf9583 100644
--- a/src/application_window.h
+++ b/src/application_window.h
@@ -63,6 +63,10 @@ void et_application_window_show_preferences_dialog_scanner (GtkAction *action, g
GtkWidget * et_application_window_get_cddb_dialog (EtApplicationWindow *self);
void et_application_window_show_cddb_dialog (GtkAction *action, gpointer user_data);
void et_application_window_search_cddb_for_selection (GtkAction *action, gpointer user_data);
+GtkWidget * et_application_window_get_scan_dialog (EtApplicationWindow *self);
+void et_application_window_show_scan_dialog (GtkAction *action, gpointer user_data);
+void et_application_window_scan_selected_files (GtkAction *action, gpointer user_data);
+void et_on_action_select_scan_mode (GtkRadioAction *action, GtkRadioAction *current, gpointer user_data);
void et_application_window_hide_log_area (EtApplicationWindow *self);
void et_application_window_show_log_area (EtApplicationWindow *self);
diff --git a/src/bar.c b/src/bar.c
index af14e09..c9f1f51 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -224,7 +224,8 @@ Create_UI (GtkWindow *window, GtkWidget **ppmenubar, GtkWidget **pptoolbar)
{ AM_LAST, GTK_STOCK_GOTO_LAST, _("_Last File"), "<Primary>End",
_("Last file"), G_CALLBACK (Action_Select_Last_File) },
{ AM_SCAN_FILES, GTK_STOCK_APPLY, _("S_can Files"), NULL,
- _("Scan selected files"), G_CALLBACK (Action_Scan_Selected_Files) },
+ _("Scan selected files"),
+ G_CALLBACK (et_application_window_scan_selected_files) },
{ AM_REMOVE, GTK_STOCK_CLEAR, _("_Remove Tags"), "<Primary>E",
_("Remove tags"), G_CALLBACK (Action_Remove_Selected_Tags) },
{ AM_UNDO, GTK_STOCK_UNDO, _("_Undo Last Files Changes"), "<Primary>Z",
@@ -353,7 +354,8 @@ Create_UI (GtkWindow *window, 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),
+ _("Show scanner"),
+ G_CALLBACK (et_application_window_show_scan_dialog),
OPEN_SCANNER_WINDOW_ON_STARTUP },
};
@@ -369,13 +371,13 @@ Create_UI (GtkWindow *window, GtkWidget **ppmenubar, GtkWidget **pptoolbar)
GtkRadioActionEntry scanner_mode_entries[] =
{
{ AM_SCANNER_FILL_TAG, "document-properties", _("_Fill Tags…"), NULL,
- _("Fill tags"), SCANNER_FILL_TAG },
+ _("Fill tags"), ET_SCAN_TYPE_FILL_TAG },
{ AM_SCANNER_RENAME_FILE, "document-properties",
_("_Rename Files and Directories…"), NULL,
- _("Rename files and directories"), SCANNER_RENAME_FILE },
+ _("Rename files and directories"), ET_SCAN_TYPE_RENAME_FILE },
{ AM_SCANNER_PROCESS_FIELDS, "document-properties",
_("_Process Fields…"), NULL, _("Process Fields"),
- SCANNER_PROCESS_FIELDS }
+ ET_SCAN_TYPE_PROCESS_FIELDS }
};
GError *error = NULL;
diff --git a/src/browser.c b/src/browser.c
index eb06cd0..849255e 100644
--- a/src/browser.c
+++ b/src/browser.c
@@ -1,4 +1,3 @@
-/* browser.c - 2000/04/28 */
/*
* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
* Copyright (C) 2000-2003 Jerome Couderc <easytag gmail com>
diff --git a/src/cddb_dialog.c b/src/cddb_dialog.c
index 9f33a21..d0e050a 100644
--- a/src/cddb_dialog.c
+++ b/src/cddb_dialog.c
@@ -39,6 +39,7 @@
#include <errno.h>
#include "gtk2_compat.h"
+#include "application_window.h"
#include "cddb_dialog.h"
#include "easytag.h"
#include "et_core.h"
@@ -2648,9 +2649,16 @@ Cddb_Set_Track_Infos_To_File_List (EtCDDBDialog *self)
ET_Manage_Changes_Of_File_Data(*etfile,FileName,FileTag);
/* Then run current scanner if requested. */
- if (ScannerWindow && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
{
- Scan_Select_Mode_And_Run_Scanner (*etfile);
+ EtScanDialog *dialog;
+
+ dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW
(MainWindow)));
+
+ if (dialog)
+ {
+ Scan_Select_Mode_And_Run_Scanner (dialog, *etfile);
+ }
}
}
else if (cddbtrackalbum && file_iterlist && file_iterlist->data)
@@ -2738,9 +2746,16 @@ Cddb_Set_Track_Infos_To_File_List (EtCDDBDialog *self)
ET_Manage_Changes_Of_File_Data(etfile,FileName,FileTag);
/* Then run current scanner if requested. */
- if (ScannerWindow && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->run_scanner_toggle)))
{
- Scan_Select_Mode_And_Run_Scanner (etfile);
+ EtScanDialog *dialog;
+
+ dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW
(MainWindow)));
+
+ if (dialog)
+ {
+ Scan_Select_Mode_And_Run_Scanner (dialog, etfile);
+ }
}
}
diff --git a/src/easytag.c b/src/easytag.c
index 61a9938..4a0d777 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -39,6 +39,7 @@
#include "gtk2_compat.h"
#include "easytag.h"
#include "application.h"
+#include "application_window.h"
#include "browser.h"
#include "log.h"
#include "misc.h"
@@ -46,7 +47,6 @@
#include "cddb_dialog.h"
#include "preferences_dialog.h"
#include "setting.h"
-#include "scan.h"
#include "scan_dialog.h"
#include "mpeg_header.h"
#include "id3_tag.h"
@@ -86,7 +86,6 @@ static gint SF_ButtonPressed_Delete_File;
/**************
* Prototypes *
**************/
-static void Disable_Command_Buttons (void);
static gboolean Write_File_Tag (ET_File *ETFile, gboolean hide_msgbox);
static gint Save_File (ET_File *ETFile, gboolean multiple_files,
gboolean force_saving_files);
@@ -135,7 +134,6 @@ common_init (GApplication *application)
Main_Stop_Button_Pressed = FALSE;
Init_Custom_Icons();
Init_Mouse_Cursor();
- Init_ScannerWindow();
BrowserEntryModel = NULL;
TrackEntryComboModel = NULL;
GenreComboModel = NULL;
@@ -538,8 +536,7 @@ void Action_Select_First_File (void)
}
Update_Command_Buttons_Sensivity();
- Scan_Rename_File_Generate_Preview();
- Scan_Fill_Tag_Generate_Preview();
+ et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
if (SET_FOCUS_TO_FIRST_TAG_FIELD)
gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
@@ -572,8 +569,7 @@ void Action_Select_Prev_File (void)
// gdk_beep(); // Warm the user
Update_Command_Buttons_Sensivity();
- Scan_Rename_File_Generate_Preview();
- Scan_Fill_Tag_Generate_Preview();
+ et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
if (SET_FOCUS_TO_FIRST_TAG_FIELD)
gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
@@ -606,8 +602,7 @@ void Action_Select_Next_File (void)
// gdk_beep(); // Warm the user
Update_Command_Buttons_Sensivity();
- Scan_Rename_File_Generate_Preview();
- Scan_Fill_Tag_Generate_Preview();
+ et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
if (SET_FOCUS_TO_FIRST_TAG_FIELD)
gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
@@ -637,8 +632,7 @@ void Action_Select_Last_File (void)
}
Update_Command_Buttons_Sensivity();
- Scan_Rename_File_Generate_Preview();
- Scan_Fill_Tag_Generate_Preview();
+ et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
if (SET_FOCUS_TO_FIRST_TAG_FIELD)
gtk_widget_grab_focus(GTK_WIDGET(TitleEntry));
@@ -662,89 +656,9 @@ void Action_Select_Nth_File_By_Etfile (ET_File *ETFile)
ET_Display_File_Data_To_UI(ETFile);
Update_Command_Buttons_Sensivity();
- Scan_Rename_File_Generate_Preview();
- Scan_Fill_Tag_Generate_Preview();
+ et_scan_dialog_update_previews (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
}
-
-/*
- * Action when Scan button is pressed
- */
-void Action_Scan_Selected_Files (void)
-{
- gint progress_bar_index;
- gint selectcount;
- gchar progress_bar_text[30];
- double fraction;
- GList *selfilelist = NULL;
- GList *l;
- ET_File *etfile;
- GtkTreeSelection *selection;
-
- g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
- BrowserList != NULL);
-
- /* Check if scanner window is opened */
- if (!ScannerWindow)
- {
- Open_ScannerWindow(SCANNER_TYPE);
- Statusbar_Message(_("Select Mode and Mask, and redo the same action"),TRUE);
- return;
- }
-
- /* Save the current displayed data */
- ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
-
- /* Initialize status bar */
- selectcount =
gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)));
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0);
- progress_bar_index = 0;
- g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
- /* Set to unsensitive all command buttons (except Quit button) */
- Disable_Command_Buttons();
-
- progress_bar_index = 0;
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
- selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- for (l = selfilelist; l != NULL; l = g_list_next (l))
- {
- etfile = Browser_List_Get_ETFile_From_Path (l->data);
-
- // Run the current scanner
- Scan_Select_Mode_And_Run_Scanner(etfile);
-
- fraction = (++progress_bar_index) / (double) selectcount;
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
- g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
-
- /* Needed to refresh status bar */
- while (gtk_events_pending())
- gtk_main_iteration();
- }
-
- g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
-
- // Refresh the whole list (faster than file by file) to show changes
- Browser_List_Refresh_Whole_List();
-
- /* Display the current file */
- ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
-
- /* To update state of command buttons */
- Update_Command_Buttons_Sensivity();
-
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
- gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
- Statusbar_Message(_("All tags have been scanned"),TRUE);
-}
-
-
-
/*
* Action when Remove button is pressed
*/
@@ -1938,31 +1852,6 @@ Action_Select_Browser_Style (void)
}
/*
- * 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);
-}
-
-
-/*
* Scans the specified directory: and load files into a list.
* If the path doesn't exist, we free the previous loaded list of files.
*/
@@ -2358,12 +2247,15 @@ ui_widget_set_sensitive (const gchar *menu, const gchar *action, gboolean sensit
* Update_Command_Buttons_Sensivity: Set to sensitive/unsensitive the state of each button into
* the commands area and menu items in function of state of the "main list".
*/
-void Update_Command_Buttons_Sensivity (void)
+void
+Update_Command_Buttons_Sensivity (void)
{
EtApplicationWindow *window;
+ GtkDialog *dialog;
GtkAction *uiaction;
window = ET_APPLICATION_WINDOW (MainWindow);
+ dialog = GTK_DIALOG (et_application_window_get_scan_dialog (window));
if (!ETCore->ETFileDisplayedList)
{
@@ -2378,10 +2270,10 @@ void Update_Command_Buttons_Sensivity (void)
g_object_set(uiaction, "sensitive", FALSE, NULL);
/* Scanner Window */
- if (ScannerWindow)
+ if (dialog)
{
- gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
- GTK_RESPONSE_APPLY, FALSE);
+ gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+ FALSE);
}
/* Menu commands */
@@ -2459,10 +2351,10 @@ void Update_Command_Buttons_Sensivity (void)
g_object_set(uiaction, "sensitive", FALSE, NULL);
/* Scanner Window */
- if (ScannerWindow)
+ if (dialog)
{
- gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
- GTK_RESPONSE_APPLY, TRUE);
+ gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY,
+ TRUE);
}
/* Commands into menu */
@@ -2602,14 +2494,17 @@ void Update_Command_Buttons_Sensivity (void)
/*
* Just to disable buttons when we are saving files (do not disable Quit button)
*/
-static void
+void
Disable_Command_Buttons (void)
{
+ GtkDialog *dialog;
+
+ dialog = GTK_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW (MainWindow)));
+
/* Scanner Window */
- if (ScannerWindow)
+ if (dialog)
{
- gtk_dialog_set_response_sensitive (GTK_DIALOG (ScannerWindow),
- GTK_RESPONSE_APPLY, FALSE);
+ gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_APPLY, FALSE);
}
/* "File" menu commands */
@@ -2650,9 +2545,13 @@ Init_Load_Default_Dir (void)
ET_Core_Free();
ET_Core_Initialize();
- // Open the scanner window
+ /* FIXME: Open the scanner window. */
+ /*
if (OPEN_SCANNER_WINDOW_ON_STARTUP)
- Open_ScannerWindow(SCANNER_TYPE); // Open the last selected scanner
+ {
+ et_application_window_show_scan_dialog (ET_APPLICATION_WINDOW (MainWindow));
+ }
+ */
if (INIT_DIRECTORY)
{
diff --git a/src/easytag.h b/src/easytag.h
index 79bbd81..7322871 100644
--- a/src/easytag.h
+++ b/src/easytag.h
@@ -101,6 +101,7 @@ gboolean ReadingDirectory;
/**************
* Prototypes *
**************/
+void Disable_Command_Buttons (void);
void et_on_action_select_all (void);
void et_on_action_unselect_all (void);
void Action_Invert_Files_Selection (void);
@@ -111,7 +112,6 @@ void Action_Select_Last_File (void);
void Action_Select_Nth_File_By_Position (gulong num_item);
void Action_Select_Nth_File_By_Etfile (ET_File *ETFile);
-void Action_Scan_Selected_Files (void);
void Action_Remove_Selected_Tags (void);
gint Action_Undo_Selected_Files (void);
gint Action_Redo_Selected_File (void);
diff --git a/src/load_files_dialog.c b/src/load_files_dialog.c
index e42bf7f..7bb9110 100644
--- a/src/load_files_dialog.c
+++ b/src/load_files_dialog.c
@@ -23,6 +23,7 @@
#include <gdk/gdkkeysyms.h>
#include <glib/gi18n.h>
+#include "application_window.h"
#include "bar.h"
#include "browser.h"
#include "charset.h"
@@ -136,9 +137,18 @@ Load_Filename_Set_Filenames (EtLoadFilesDialog *self)
g_free(filename_new_utf8);
- // Then run current scanner if asked...
- if (ScannerWindow &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->load_file_run_scanner)) )
- Scan_Select_Mode_And_Run_Scanner(ETFile);
+ /* Then run current scanner if requested. */
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->load_file_run_scanner)))
+ {
+ EtScanDialog *dialog;
+
+ dialog = ET_SCAN_DIALOG (et_application_window_get_scan_dialog (ET_APPLICATION_WINDOW
(MainWindow)));
+
+ if (dialog)
+ {
+ Scan_Select_Mode_And_Run_Scanner (dialog, ETFile);
+ }
+ }
}
g_free(list_text);
}
diff --git a/src/misc.c b/src/misc.c
index ba5beb8..5c7ab71 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -34,8 +34,6 @@
#include "setting.h"
#include "bar.h"
#include "preferences_dialog.h"
-#include "scan.h"
-#include "scan_dialog.h"
#include "genres.h"
#include "log.h"
#include "charset.h"
diff --git a/src/playlist_dialog.c b/src/playlist_dialog.c
index 7949b0e..137f718 100644
--- a/src/playlist_dialog.c
+++ b/src/playlist_dialog.c
@@ -446,7 +446,7 @@ write_button_clicked (EtPlaylistDialog *self)
}
if (RFS_CONVERT_SPACE_INTO_UNDERSCORE)
{
- Scan_Convert_Space_Into_Underscore(playlist_basename_utf8);
+ Scan_Convert_Space_Into_Underscore (playlist_basename_utf8);
}
if (RFS_REMOVE_SPACES)
{
diff --git a/src/preferences_dialog.c b/src/preferences_dialog.c
index d9ddc56..fdc2181 100644
--- a/src/preferences_dialog.c
+++ b/src/preferences_dialog.c
@@ -35,7 +35,7 @@
#include "setting.h"
#include "bar.h"
#include "misc.h"
-#include "scan.h"
+#include "scan_dialog.h"
#include "easytag.h"
#include "browser.h"
#include "cddb_dialog.h"
diff --git a/src/scan.h b/src/scan.h
index 8c54686..e8a8e05 100644
--- a/src/scan.h
+++ b/src/scan.h
@@ -21,6 +21,8 @@
#include <glib.h>
+G_BEGIN_DECLS
+
void Scan_Convert_Underscore_Into_Space (gchar *string);
void Scan_Convert_P20_Into_Space (gchar *string);
void Scan_Convert_Space_Into_Underscore (gchar *string);
@@ -32,4 +34,6 @@ gchar* Scan_Process_Fields_All_Uppercase (const gchar *string);
gchar* Scan_Process_Fields_All_Downcase (const gchar *string);
gchar* Scan_Process_Fields_Letter_Uppercase (const gchar *string);
+G_END_DECLS
+
#endif /* !ET_SCAN_H_ */
diff --git a/src/scan_dialog.c b/src/scan_dialog.c
index da21231..2c52844 100644
--- a/src/scan_dialog.c
+++ b/src/scan_dialog.c
@@ -1,4 +1,3 @@
-/* scan.c - 2000/06/16 */
/*
* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
* Copyright (C) 2000-2003 Jerome Couderc <easytag gmail com>
@@ -18,7 +17,9 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include <config.h>
+#include "config.h"
+
+#include "scan_dialog.h"
#include <gtk/gtk.h>
#include <string.h>
@@ -27,12 +28,11 @@
#include <config.h>
#include <glib/gi18n.h>
-#include "scan_dialog.h"
-
+#include "application_window.h"
#include "gtk2_compat.h"
-#include "scan.h"
#include "easytag.h"
#include "preferences_dialog.h"
+#include "scan.h"
#include "setting.h"
#include "id3_tag.h"
#include "bar.h"
@@ -43,71 +43,65 @@
#include "crc32.h"
#include "charset.h"
+/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
+G_DEFINE_TYPE (EtScanDialog, et_scan_dialog, GTK_TYPE_DIALOG)
+
+#define et_scan_dialog_get_instance_private(dialog) (dialog->priv)
-#define step(a,b) (b-a)+1
-
-
-/****************
- * Declarations *
- ****************/
-static GtkWidget *ScanTagMaskCombo = NULL;
-static GtkWidget *RenameFileMaskCombo = NULL;
-static GtkWidget *ScannerOptionCombo = NULL;
-static GtkWidget *RenameFilePrefixPathButton = NULL;
-
-static GtkWidget *ScanTagFrame;
-static GtkWidget *RenameFileFrame;
-static GtkWidget *ProcessFieldsFrame;
-static GtkWidget *FillTagPreviewLabel = NULL;
-static GtkWidget *RenameFilePreviewLabel = NULL;
-
-static GtkListStore *RenameFileListModel;
-static GtkListStore *ScanTagListModel;
-
-static GtkWidget *ProcessFileNameField;
-static GtkWidget *ProcessTitleField;
-static GtkWidget *ProcessArtistField;
-static GtkWidget *ProcessAlbumArtistField;
-static GtkWidget *ProcessAlbumField;
-static GtkWidget *ProcessGenreField;
-static GtkWidget *ProcessCommentField;
-static GtkWidget *ProcessComposerField;
-static GtkWidget *ProcessOrigArtistField;
-static GtkWidget *ProcessCopyrightField;
-static GtkWidget *ProcessURLField;
-static GtkWidget *ProcessEncodedByField;
-static GtkWidget *ProcessFieldsConvertIntoSpace = NULL;
-static GtkWidget *ProcessFieldsConvertSpace = NULL;
-static GtkWidget *ProcessFieldsConvert = NULL;
-static GtkWidget *ProcessFieldsConvertLabelTo;
-static GtkWidget *ProcessFieldsConvertTo = NULL;
-static GtkWidget *ProcessFieldsConvertFrom = NULL;
-static GtkWidget *ProcessFieldsAllUppercase = NULL;
-static GtkWidget *ProcessFieldsAllDowncase = NULL;
-static GtkWidget *ProcessFieldsFirstLetterUppercase = NULL;
-static GtkWidget *ProcessFieldsFirstLettersUppercase = NULL;
-static GtkWidget *ProcessFieldsDetectRomanNumerals = NULL;
-static GtkWidget *ProcessFieldsRemoveSpace = NULL;
-static GtkWidget *ProcessFieldsInsertSpace = NULL;
-static GtkWidget *ProcessFieldsOnlyOneSpace = NULL;
-
-static GtkWidget *LegendFrame = NULL;
-static GtkWidget *LegendButton = NULL;
-
-static GtkWidget *MaskEditorButton = NULL;
-static GtkWidget *MaskEditorFrame = NULL;
-static GtkWidget *MaskEditorVBox;
-static GtkWidget *MaskEditorHBox;
-static GtkWidget *MaskEditorScrollWindow;
-static GtkWidget *MaskEditorList;
-static GtkWidget *MaskEditorEntry;
-static GtkWidget *MaskEditorNewButton;
-static GtkWidget *MaskEditorCopyButton;
-static GtkWidget *MaskEditorAddButton;
-static GtkWidget *MaskEditorRemoveButton;
-static GtkWidget *MaskEditorUpButton;
-static GtkWidget *MaskEditorDownButton;
-static GtkWidget *MaskEditorSaveButton;
+struct _EtScanDialogPrivate
+{
+ GtkListStore *rename_masks_model;
+ GtkListStore *scan_tag_masks_model;
+
+ GtkWidget *mask_editor_entry;
+ GtkWidget *mask_editor_view;
+
+ GtkWidget *type_combo;
+ GtkWidget *scan_tag_mask_combo;
+ GtkWidget *rename_file_mask_combo;
+
+ GtkWidget *scan_tag_frame;
+ GtkWidget *rename_file_frame;
+ GtkWidget *process_fields_frame;
+ GtkWidget *legend_frame;
+ GtkWidget *mask_editor_frame;
+
+ GtkWidget *legend_toggle;
+ GtkWidget *mask_editor_toggle;
+ GtkWidget *process_filename_toggle;
+ GtkWidget *process_title_toggle;
+ GtkWidget *process_artist_toggle;
+ GtkWidget *process_album_artist_toggle;
+ GtkWidget *process_album_toggle;
+ GtkWidget *process_genre_toggle;
+ GtkWidget *process_comment_toggle;
+ GtkWidget *process_composer_toggle;
+ GtkWidget *process_original_artist_toggle;
+ GtkWidget *process_copyright_toggle;
+ GtkWidget *process_url_toggle;
+ GtkWidget *process_encoded_by_toggle;
+
+ GtkWidget *process_convert_to_space_toggle;
+ GtkWidget *process_convert_to_underscores_toggle;
+ GtkWidget *process_convert_toggle;
+ GtkWidget *process_convert_label;
+
+ GtkWidget *process_all_uppercase_toggle;
+ GtkWidget *process_all_lowercase_toggle;
+ GtkWidget *process_first_uppercase_toggle;
+ GtkWidget *process_first_style_uppercase_toggle;
+ GtkWidget *process_roman_numerals_check;
+
+ GtkWidget *process_remove_space_toggle;
+ GtkWidget *process_insert_space_toggle;
+ GtkWidget *process_insert_one_space_toggle;
+
+ GtkWidget *process_convert_to_entry;
+ GtkWidget *process_convert_from_entry;
+
+ GtkWidget *fill_tag_preview_label;
+ GtkWidget *rename_file_preview_label;
+};
static const guint BOX_SPACING = 6;
@@ -222,52 +216,16 @@ struct _Scan_Mask_Item
/**************
* Prototypes *
**************/
-static void Scan_Tag_With_Mask (ET_File *ETFile);
-static void ScannerWindow_Quit (void);
-static void Scan_Toggle_Legend_Button (void);
-static void Scan_Toggle_Mask_Editor_Button (void);
static void Scan_Option_Button (void);
static void entry_check_scan_tag_mask (GtkEntry *entry, gpointer user_data);
static GList *Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask);
-static void Scan_Rename_File_Prefix_Path (void);
static void Scan_Free_File_Rename_List (GList *list);
static void Scan_Free_File_Fill_Tag_List (GList *list);
static gchar **Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag,
gchar code);
-static void Scan_Process_Fields_Functions (gchar **string);
-
-static gint Scan_Word_Is_Roman_Numeral (const gchar *text);
-
-static void Process_Fields_Convert_Check_Button_Toggled (GtkWidget *object);
-static void Process_Fields_First_Letters_Check_Button_Toggled (GtkWidget *object);
-static void Select_Fields_Invert_Selection (void);
-static void Select_Fields_Select_Unselect_All (void);
-static void Select_Fields_Set_Sensitive (void);
-
-static void Mask_Editor_List_Row_Selected (GtkTreeSelection* selection,
- gpointer data);
-static void Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel,
- GtkTreeIter *rowIter);
-static void Mask_Editor_List_New (void);
-static void Mask_Editor_List_Duplicate (void);
-static void Mask_Editor_List_Add (void);
-static void Mask_Editor_List_Remove (void);
-static void Mask_Editor_List_Move_Up (void);
-static void Mask_Editor_List_Move_Down (void);
-static void Mask_Editor_List_Save_Button (void);
-static void Mask_Editor_Entry_Changed (void);
-static gboolean Mask_Editor_List_Key_Press (GtkWidget *widget,
- GdkEvent *event);
-
-static void Mask_Editor_Clean_Up_Masks_List (void);
-
-static void Scanner_Option_Menu_Activate_Item (GtkWidget *widget, gpointer data);
-
-static void Scan_Convert_Character (gchar **string);
static GList *Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask);
-static void Scan_Set_Scanner_Window_Init_Position (void);
static void et_scan_on_response (GtkDialog *dialog, gint response_id,
gpointer user_data);
@@ -277,20 +235,14 @@ static void et_scan_on_response (GtkDialog *dialog, gint response_id,
* Functions *
*************/
-void Init_ScannerWindow (void)
-{
- ScannerWindow = NULL;
- ScannerOptionCombo= NULL;
-}
-
-
/*
* Uses the filename and path to fill tag information
* Note: mask and source are read from the right to the left
*/
static void
-Scan_Tag_With_Mask (ET_File *ETFile)
+Scan_Tag_With_Mask (EtScanDialog *self, ET_File *ETFile)
{
+ EtScanDialogPrivate *priv;
GList *fill_tag_list = NULL;
GList *l;
gchar **dest = NULL;
@@ -298,10 +250,11 @@ Scan_Tag_With_Mask (ET_File *ETFile)
gchar *filename_utf8;
File_Tag *FileTag;
- g_return_if_fail (ScannerWindow != NULL && ScanTagMaskCombo != NULL);
g_return_if_fail (ETFile != NULL);
- mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
+ priv = et_scan_dialog_get_instance_private (self);
+
+ mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))));
if (!mask) return;
// Create a new File_Tag item
@@ -562,19 +515,22 @@ Scan_Generate_New_Tag_From_Mask (ET_File *ETFile, gchar *mask)
return fill_tag_list;
}
-void Scan_Fill_Tag_Generate_Preview (void)
+static void
+Scan_Fill_Tag_Generate_Preview (EtScanDialog *self)
{
+ EtScanDialogPrivate *priv;
gchar *mask = NULL;
gchar *preview_text = NULL;
GList *fill_tag_list = NULL;
GList *l;
+ priv = et_scan_dialog_get_instance_private (self);
+
if (!ETCore->ETFileDisplayedList
- || !ScannerWindow || !RenameFileMaskCombo || !FillTagPreviewLabel
- || gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_FILL_TAG)
+ || gtk_combo_box_get_active (GTK_COMBO_BOX (priv->type_combo)) != ET_SCAN_TYPE_FILL_TAG)
return;
- mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
+ mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))));
if (!mask)
return;
@@ -600,25 +556,80 @@ void Scan_Fill_Tag_Generate_Preview (void)
Scan_Free_File_Fill_Tag_List(fill_tag_list);
- if (GTK_IS_LABEL(FillTagPreviewLabel))
+ if (GTK_IS_LABEL(priv->fill_tag_preview_label))
+ {
+ if (preview_text)
+ {
+ //gtk_label_set_text(GTK_LABEL(priv->fill_tag_preview_label),preview_text);
+ gtk_label_set_markup(GTK_LABEL(priv->fill_tag_preview_label),preview_text);
+ } else
+ {
+ gtk_label_set_text(GTK_LABEL(priv->fill_tag_preview_label),"");
+ }
+
+ /* Force the window to be redrawn. */
+ gtk_widget_queue_resize (GTK_WIDGET (self));
+ }
+
+ g_free(mask);
+ g_free(preview_text);
+}
+
+static void
+Scan_Rename_File_Generate_Preview (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ gchar *preview_text = NULL;
+ gchar *mask = NULL;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (!ETCore->ETFileDisplayed
+ || !priv->rename_file_mask_combo || !priv->rename_file_preview_label)
+ return;
+
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo)) != ET_SCAN_TYPE_RENAME_FILE)
+ return;
+
+ mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))));
+ if (!mask)
+ return;
+
+ preview_text = Scan_Generate_New_Filename_From_Mask(ETCore->ETFileDisplayed,mask,FALSE);
+
+ if (GTK_IS_LABEL(priv->rename_file_preview_label))
{
if (preview_text)
{
- //gtk_label_set_text(GTK_LABEL(FillTagPreviewLabel),preview_text);
- gtk_label_set_markup(GTK_LABEL(FillTagPreviewLabel),preview_text);
+ //gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),preview_text);
+ gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings
containing characters like '&'
+ gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
+ gtk_label_set_markup(GTK_LABEL(priv->rename_file_preview_label),str);
+ g_free(tmp_string);
+ g_free(str);
} else
{
- gtk_label_set_text(GTK_LABEL(FillTagPreviewLabel),"");
+ gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),"");
}
- // Force the window to be redrawed
- gtk_widget_queue_resize(ScannerWindow);
+ /* Force the window to be redrawn. */
+ gtk_widget_queue_resize (GTK_WIDGET (self));
}
g_free(mask);
g_free(preview_text);
}
+
+void
+et_scan_dialog_update_previews (EtScanDialog *self)
+{
+ g_return_if_fail (ET_SCAN_DIALOG (self));
+
+ Scan_Fill_Tag_Generate_Preview (self);
+ Scan_Rename_File_Generate_Preview (self);
+}
+
static void
Scan_Free_File_Fill_Tag_List (GList *list)
{
@@ -649,18 +660,20 @@ Scan_Free_File_Fill_Tag_List (GList *list)
* Note1: a mask code may be used severals times...
*/
static void
-Scan_Rename_File_With_Mask (ET_File *ETFile)
+Scan_Rename_File_With_Mask (EtScanDialog *self, ET_File *ETFile)
{
+ EtScanDialogPrivate *priv;
gchar *filename_generated_utf8 = NULL;
gchar *filename_generated = NULL;
gchar *filename_new_utf8 = NULL;
gchar *mask = NULL;
File_Name *FileName;
- g_return_if_fail (ScannerWindow != NULL || RenameFileMaskCombo != NULL ||
- ETFile != NULL);
+ g_return_if_fail (ETFile != NULL);
+
+ priv = et_scan_dialog_get_instance_private (self);
- mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
+ mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))));
if (!mask) return;
// Note : if the first character is '/', we have a path with the filename,
@@ -681,7 +694,7 @@ Scan_Rename_File_With_Mask (ET_File *ETFile)
if (!filename_generated)
{
GtkWidget *msgdialog;
- msgdialog = gtk_message_dialog_new(GTK_WINDOW(ScannerWindow),
+ msgdialog = gtk_message_dialog_new (GTK_WINDOW (self),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
@@ -937,48 +950,6 @@ gchar *Scan_Generate_New_Filename_From_Mask (ET_File *ETFile, gchar *mask, gbool
return filename_new_utf8; // in UTF-8!
}
-void Scan_Rename_File_Generate_Preview (void)
-{
- gchar *preview_text = NULL;
- gchar *mask = NULL;
-
- if (!ETCore->ETFileDisplayed
- || !ScannerWindow || !RenameFileMaskCombo || !RenameFilePreviewLabel)
- return;
-
- if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) != SCANNER_RENAME_FILE)
- return;
-
- mask = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
- if (!mask)
- return;
-
- preview_text = Scan_Generate_New_Filename_From_Mask(ETCore->ETFileDisplayed,mask,FALSE);
-
- if (GTK_IS_LABEL(RenameFilePreviewLabel))
- {
- if (preview_text)
- {
- //gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),preview_text);
- gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings
containing characters like '&'
- gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
- gtk_label_set_markup(GTK_LABEL(RenameFilePreviewLabel),str);
- g_free(tmp_string);
- g_free(str);
- } else
- {
- gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),"");
- }
-
- // Force the window to be redrawed
- gtk_widget_queue_resize(ScannerWindow);
- }
-
- g_free(mask);
- g_free(preview_text);
-}
-
-
static void
Scan_Free_File_Rename_List (GList *list)
{
@@ -1000,8 +971,9 @@ Scan_Free_File_Rename_List (GList *list)
* Adds the current path of the file to the mask on the "Rename File Scanner" entry
*/
static void
-Scan_Rename_File_Prefix_Path (void)
+Scan_Rename_File_Prefix_Path (EtScanDialog *self)
{
+ EtScanDialogPrivate *priv;
gint pos;
gchar *path_tmp;
const gchar *combo_text = NULL;
@@ -1016,12 +988,13 @@ Scan_Rename_File_Prefix_Path (void)
}
filename_utf8_cur = ((File_Name *)ETFile->FileNameCur->data)->value_utf8;
+ priv = et_scan_dialog_get_instance_private (self);
// The path to prefix
path_utf8_cur = g_path_get_dirname(filename_utf8_cur);
// The current text in the combobox
- combo_text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))));
+ combo_text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo))));
/*if (!g_utf8_validate(combo_text, -1, NULL))
{
combo_tmp = convert_to_utf8(combo_text);
@@ -1043,7 +1016,7 @@ Scan_Rename_File_Prefix_Path (void)
path_tmp = g_strconcat(path_utf8_cur,G_DIR_SEPARATOR_S,NULL);
}
pos = 0;
- gtk_editable_insert_text(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))),path_tmp, -1,
&pos);
+
gtk_editable_insert_text(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo))),path_tmp, -1,
&pos);
g_free(path_tmp);
}
@@ -1073,7 +1046,7 @@ void Scan_Rename_Directory_Generate_Preview (void)
{
if (preview_text)
{
- //gtk_label_set_text(GTK_LABEL(RenameFilePreviewLabel),preview_text);
+ //gtk_label_set_text(GTK_LABEL(priv->rename_file_preview_label),preview_text);
gchar *tmp_string = g_markup_printf_escaped("%s",preview_text); // To avoid problem with strings
containing characters like '&'
gchar *str = g_strdup_printf("<i>%s</i>",tmp_string);
gtk_label_set_markup(GTK_LABEL(RenameDirectoryPreviewLabel),str);
@@ -1098,14 +1071,132 @@ gchar *Scan_Generate_New_Directory_Name_From_Mask (ET_File *ETFile, gchar *mask,
}
+/*
+ * Replace something with something else ;)
+ * Here use Regular Expression, to search and replace.
+ */
+static void
+Scan_Convert_Character (EtScanDialog *self, gchar **string)
+{
+ EtScanDialogPrivate *priv;
+ gchar *from;
+ gchar *to;
+ GRegex *regex;
+ GError *regex_error = NULL;
+ gchar *new_string;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ from = gtk_editable_get_chars (GTK_EDITABLE (priv->process_convert_from_entry), 0,
+ -1);
+ to = gtk_editable_get_chars (GTK_EDITABLE (priv->process_convert_to_entry), 0, -1);
+
+ regex = g_regex_new (from, 0, 0, ®ex_error);
+ if (regex_error != NULL)
+ {
+ goto handle_error;
+ }
+
+ new_string = g_regex_replace (regex, *string, -1, 0, to, 0, ®ex_error);
+ if (regex_error != NULL)
+ {
+ g_free (new_string);
+ g_regex_unref (regex);
+ goto handle_error;
+ }
+
+ /* Success. */
+ g_regex_unref (regex);
+ g_free (*string);
+ *string = new_string;
+
+out:
+ g_free (from);
+ g_free (to);
+ return;
+
+handle_error:
+ Log_Print (LOG_ERROR, _("Error while processing fields: %s"),
+ regex_error->message);
+
+ g_error_free (regex_error);
+
+ goto out;
+}
+
+static void
+Scan_Process_Fields_Functions (EtScanDialog *self, gchar **string)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_to_space_toggle)))
+ {
+ Scan_Convert_Underscore_Into_Space(*string);
+ Scan_Convert_P20_Into_Space(*string);
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_to_underscores_toggle)))
+ Scan_Convert_Space_Into_Underscore (*string);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_space_toggle)))
+ {
+ gchar *res;
+ res = Scan_Process_Fields_Insert_Space (*string);
+ g_free (*string);
+ *string = res;
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_one_space_toggle)))
+ Scan_Process_Fields_Keep_One_Space(*string);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_toggle)))
+ Scan_Convert_Character (self, string);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_uppercase_toggle)))
+ {
+ gchar *res;
+ res = Scan_Process_Fields_All_Uppercase (*string);
+ g_free (*string);
+ *string = res;
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_lowercase_toggle)))
+ {
+ gchar *res;
+ res = Scan_Process_Fields_All_Downcase (*string);
+ g_free (*string);
+ *string = res;
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_uppercase_toggle)))
+ {
+ gchar *res;
+ res = Scan_Process_Fields_Letter_Uppercase (*string);
+ g_free (*string);
+ *string = res;
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_style_uppercase_toggle)))
+ {
+ Scan_Process_Fields_First_Letters_Uppercase (self, string);
+ }
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_remove_space_toggle)))
+ Scan_Process_Fields_Remove_Space(*string);
+
+}
+
/*****************************
* Scanner To Process Fields *
*****************************/
/* See also functions : Convert_P20_And_Undescore_Into_Spaces, ... in easytag.c */
static void
-Scan_Process_Fields (ET_File *ETFile)
+Scan_Process_Fields (EtScanDialog *self, ET_File *ETFile)
{
+ EtScanDialogPrivate *priv;
File_Name *FileName = NULL;
File_Tag *FileTag = NULL;
File_Name *st_filename;
@@ -1113,7 +1204,9 @@ Scan_Process_Fields (ET_File *ETFile)
gchar *filename_utf8;
gchar *string;
- g_return_if_fail (ScannerWindow != NULL || ETFile != NULL);
+ g_return_if_fail (ETFile != NULL);
+
+ priv = et_scan_dialog_get_instance_private (self);
st_filename = (File_Name *)ETFile->FileNameNew->data;
st_filetag = (File_Tag *)ETFile->FileTag->data;
@@ -1121,7 +1214,7 @@ Scan_Process_Fields (ET_File *ETFile)
/* Process the filename */
if (st_filename != NULL)
{
- if (st_filename->value_utf8 && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField)))
+ if (st_filename->value_utf8 &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle)))
{
gchar *string_utf8;
gchar *pos;
@@ -1135,7 +1228,7 @@ Scan_Process_Fields (ET_File *ETFile)
// Remove the extension to set it to lower case (to avoid problem with undo)
if ((pos=strrchr(string,'.'))!=NULL) *pos = 0;
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
string_utf8 = ET_File_Name_Generate(ETFile,string);
ET_Set_Filename_File_Name_Item(FileName,string_utf8,NULL);
@@ -1148,7 +1241,7 @@ Scan_Process_Fields (ET_File *ETFile)
if (st_filetag != NULL)
{
// Title field
- if (st_filetag->title && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField)))
+ if (st_filetag->title && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle)))
{
if (!FileTag)
{
@@ -1158,7 +1251,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->title);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->title,string);
@@ -1166,7 +1259,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Artist field
- if (st_filetag->artist && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField)))
+ if (st_filetag->artist &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle)))
{
if (!FileTag)
{
@@ -1176,7 +1269,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->artist);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->artist,string);
@@ -1184,7 +1277,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Album Artist field
- if (st_filetag->album_artist &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField)))
+ if (st_filetag->album_artist &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle)))
{
if (!FileTag)
{
@@ -1194,14 +1287,14 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->album_artist);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->album_artist,string);
g_free(string);
}
// Album field
- if (st_filetag->album && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField)))
+ if (st_filetag->album && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle)))
{
if (!FileTag)
{
@@ -1211,7 +1304,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->album);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->album,string);
@@ -1219,7 +1312,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Genre field
- if (st_filetag->genre && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField)))
+ if (st_filetag->genre && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle)))
{
if (!FileTag)
{
@@ -1229,7 +1322,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->genre);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->genre,string);
@@ -1237,7 +1330,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Comment field
- if (st_filetag->comment && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField)))
+ if (st_filetag->comment &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle)))
{
if (!FileTag)
{
@@ -1247,7 +1340,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->comment);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->comment,string);
@@ -1255,7 +1348,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Composer field
- if (st_filetag->composer && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField)))
+ if (st_filetag->composer &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle)))
{
if (!FileTag)
{
@@ -1265,7 +1358,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->composer);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->composer,string);
@@ -1273,7 +1366,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Original artist field
- if (st_filetag->orig_artist &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField)))
+ if (st_filetag->orig_artist &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle)))
{
if (!FileTag)
{
@@ -1283,7 +1376,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->orig_artist);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->orig_artist,string);
@@ -1291,7 +1384,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// Copyright field
- if (st_filetag->copyright && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField)))
+ if (st_filetag->copyright &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle)))
{
if (!FileTag)
{
@@ -1301,7 +1394,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->copyright);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->copyright,string);
@@ -1309,7 +1402,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// URL field
- if (st_filetag->url && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField)))
+ if (st_filetag->url && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle)))
{
if (!FileTag)
{
@@ -1319,7 +1412,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->url);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->url,string);
@@ -1327,7 +1420,7 @@ Scan_Process_Fields (ET_File *ETFile)
}
// 'Encoded by' field
- if (st_filetag->encoded_by && gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)))
+ if (st_filetag->encoded_by &&
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle)))
{
if (!FileTag)
{
@@ -1337,7 +1430,7 @@ Scan_Process_Fields (ET_File *ETFile)
string = g_strdup(st_filetag->encoded_by);
- Scan_Process_Fields_Functions(&string);
+ Scan_Process_Fields_Functions (self, &string);
ET_Set_Field_File_Tag_Item(&FileTag->encoded_by,string);
@@ -1355,65 +1448,79 @@ Scan_Process_Fields (ET_File *ETFile)
}
-
-static void
-Scan_Process_Fields_Functions (gchar **string)
+static gint
+Scan_Word_Is_Roman_Numeral (EtScanDialog *self, const gchar *text)
{
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace)))
- {
- Scan_Convert_Underscore_Into_Space(*string);
- Scan_Convert_P20_Into_Space(*string);
- }
+ EtScanDialogPrivate *priv;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace)))
- Scan_Convert_Space_Into_Underscore (*string);
+ /* No need for caseless strchr. */
+ static const gchar romans[] = "MmDdCcLlXxVvIi";
+
+ gsize next_allowed = 0;
+ gsize prev = 0;
+ gsize count = 0;
+ const gchar *i;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace)))
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->process_roman_numerals_check)))
{
- gchar *res;
- res = Scan_Process_Fields_Insert_Space (*string);
- g_free (*string);
- *string = res;
+ return 0;
}
+
+ for (i = text; *i; i++)
+ {
+ const char *s = strchr (romans, *i);
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace)))
- Scan_Process_Fields_Keep_One_Space(*string);
+ if (s)
+ {
+ gsize c = (s - romans) / 2;
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert)))
- Scan_Convert_Character(string);
+ if (c < next_allowed)
+ {
+ return 0;
+ }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllUppercase)))
- {
- gchar *res;
- res = Scan_Process_Fields_All_Uppercase (*string);
- g_free (*string);
- *string = res;
- }
+ if (c < prev)
+ {
+ /* After subtraction, no more subtracted chars allowed. */
+ next_allowed = prev + 1;
+ }
+ else if (c == prev)
+ {
+ /* Allow indefinite repetition for m; three for c, x and i; and
+ * none for d, l and v. */
+ if ((c && ++count > 3) || (c & 1))
+ {
+ return 0;
+ }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllDowncase)))
- {
- gchar *res;
- res = Scan_Process_Fields_All_Downcase (*string);
- g_free (*string);
- *string = res;
- }
+ /* No more subtraction. */
+ next_allowed = c;
+ }
+ else if (c && !(c & 1))
+ {
+ /* For first occurrence of c, x and i, allow "subtraction" from
+ * 10 and 5 times self, reset counting. */
+ next_allowed = c - 2;
+ count = 1;
+ }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLetterUppercase)))
- {
- gchar *res;
- res = Scan_Process_Fields_Letter_Uppercase (*string);
- g_free (*string);
- *string = res;
- }
+ prev = c;
+ }
+ else
+ {
+ if (g_unichar_isalnum (g_utf8_get_char (i)))
+ {
+ return 0;
+ }
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase)))
- {
- Scan_Process_Fields_First_Letters_Uppercase (string);
+ break;
+ }
}
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace)))
- Scan_Process_Fields_Remove_Space(*string);
-
+ /* Return length of found Roman numeral. */
+ return i - text;
}
/*
@@ -1421,7 +1528,7 @@ Scan_Process_Fields_Functions (gchar **string)
* No needed to reallocate
*/
void
-Scan_Process_Fields_First_Letters_Uppercase (gchar **str)
+Scan_Process_Fields_First_Letters_Uppercase (EtScanDialog *self, gchar **str)
{
/**** DANIEL TEST *****
gchar *iter;
@@ -1492,13 +1599,13 @@ Scan_Process_Fields_First_Letters_Uppercase (gchar **str)
Log_Print(LOG_ERROR,"Scan_Process_Fields_First_Letters_Uppercase: Not a valid utf8! quiting");
return;
}
- // Removes trailing whitespace
+ /* Removes trailing whitespace. */
string = g_strchomp(string);
temp = string;
- // If the word is a roman numeral, capitalize all of it
- if ((len = Scan_Word_Is_Roman_Numeral(temp)))
+ /* If the word is a roman numeral, capitalize all of it. */
+ if ((len = Scan_Word_Is_Roman_Numeral (self, temp)))
{
gchar *tmp = g_utf8_strup (temp, len);
strncpy (string, tmp, len);
@@ -1538,7 +1645,7 @@ Scan_Process_Fields_First_Letters_Uppercase (gchar **str)
word = word+1;
// If the word is a roman numeral, capitalize all of it
- if ((len = Scan_Word_Is_Roman_Numeral(word)))
+ if ((len = Scan_Word_Is_Roman_Numeral (self, word)))
{
gchar *tmp = g_utf8_strup (word, len);
strncpy (word, tmp, len);
@@ -1588,188 +1695,839 @@ Scan_Process_Fields_First_Letters_Uppercase (gchar **str)
}
/*
- * Replace something with something else ;)
- * Here use Regular Expression, to search and replace.
+ * Return the field of a 'File_Tag' structure corresponding to the mask code
+ */
+static gchar
+**Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code)
+{
+ switch (code)
+ {
+ case 't': /* Title */
+ return &FileTag->title;
+ case 'a': /* Artist */
+ return &FileTag->artist;
+ case 'b': /* Album */
+ return &FileTag->album;
+ case 'd': /* Disc Number */
+ return &FileTag->disc_number;
+ case 'x': /* Total number of discs. */
+ return &FileTag->disc_total;
+ case 'y': /* Year */
+ return &FileTag->year;
+ case 'n': /* Track */
+ return &FileTag->track;
+ case 'l': /* Track Total */
+ return &FileTag->track_total;
+ case 'g': /* Genre */
+ return &FileTag->genre;
+ case 'c': /* Comment */
+ return &FileTag->comment;
+ case 'p': /* Composer */
+ return &FileTag->composer;
+ case 'o': /* Orig. Artist */
+ return &FileTag->orig_artist;
+ case 'r': /* Copyright */
+ return &FileTag->copyright;
+ case 'u': /* URL */
+ return &FileTag->url;
+ case 'e': /* Encoded by */
+ return &FileTag->encoded_by;
+ case 'z': /* Album Artist */
+ return &FileTag->album_artist;
+ case 'i': /* Ignored */
+ return NULL;
+ default:
+ Log_Print(LOG_ERROR,"Scanner: Invalid code '%%%c' found!",code);
+ return NULL;
+ }
+}
+
+
+
+/******************
+ * Scanner Window *
+ ******************/
+/*
+ * Function when you select an item of the option menu
*/
static void
-Scan_Convert_Character (gchar **string)
+Scanner_Option_Menu_Activate_Item (EtScanDialog *self, GtkWidget *combo)
{
- gchar *from;
- gchar *to;
- GRegex *regex;
- GError *regex_error = NULL;
- gchar *new_string;
+ EtScanDialogPrivate *priv;
+ GtkRadioAction *radio_action;
- from = gtk_editable_get_chars (GTK_EDITABLE (ProcessFieldsConvertFrom), 0,
- -1);
- to = gtk_editable_get_chars (GTK_EDITABLE (ProcessFieldsConvertTo), 0, -1);
+ priv = et_scan_dialog_get_instance_private (self);
- regex = g_regex_new (from, 0, 0, ®ex_error);
- if (regex_error != NULL)
- {
- goto handle_error;
- }
+ radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (UIManager,
+ "/MenuBar/ViewMenu/ScannerMenu/FillTag"));
+ SCANNER_TYPE = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+ gtk_radio_action_set_current_value (radio_action, SCANNER_TYPE);
- new_string = g_regex_replace (regex, *string, -1, 0, to, 0, ®ex_error);
- if (regex_error != NULL)
+ switch (SCANNER_TYPE)
{
- g_free (new_string);
- g_regex_unref (regex);
- goto handle_error;
- }
+ case ET_SCAN_TYPE_FILL_TAG:
+ gtk_widget_show(priv->mask_editor_toggle);
+ gtk_widget_show(priv->legend_toggle);
+ gtk_widget_show(priv->scan_tag_frame);
+ gtk_widget_hide(priv->rename_file_frame);
+ gtk_widget_hide(priv->process_fields_frame);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view),
GTK_TREE_MODEL(priv->scan_tag_masks_model));
+ Scan_Fill_Tag_Generate_Preview (self);
+ g_signal_emit_by_name(G_OBJECT(priv->legend_toggle),"toggled"); /* To hide or show legend
frame */
+ g_signal_emit_by_name(G_OBJECT(priv->mask_editor_toggle),"toggled"); /* To hide or show mask
editor frame */
+ break;
- /* Success. */
- g_regex_unref (regex);
- g_free (*string);
- *string = new_string;
+ case ET_SCAN_TYPE_RENAME_FILE:
+ gtk_widget_show(priv->mask_editor_toggle);
+ gtk_widget_show(priv->legend_toggle);
+ gtk_widget_hide(priv->scan_tag_frame);
+ gtk_widget_show(priv->rename_file_frame);
+ gtk_widget_hide(priv->process_fields_frame);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view),
GTK_TREE_MODEL(priv->rename_masks_model));
+ Scan_Rename_File_Generate_Preview (self);
+ g_signal_emit_by_name(G_OBJECT(priv->legend_toggle),"toggled"); /* To hide or show legend
frame */
+ g_signal_emit_by_name(G_OBJECT(priv->mask_editor_toggle),"toggled"); /* To hide or show mask
editor frame */
+ break;
-out:
- g_free (from);
- g_free (to);
- return;
+ case ET_SCAN_TYPE_PROCESS_FIELDS:
+ gtk_widget_hide(priv->mask_editor_toggle);
+ gtk_widget_hide(priv->legend_toggle);
+ gtk_widget_hide(priv->scan_tag_frame);
+ gtk_widget_hide(priv->rename_file_frame);
+ gtk_widget_show_all(priv->process_fields_frame);
+ // Hide directly the frames to don't change state of the buttons!
+ gtk_widget_hide(priv->legend_frame);
+ gtk_widget_hide(priv->mask_editor_frame);
-handle_error:
- Log_Print (LOG_ERROR, _("Error while processing fields: %s"),
- regex_error->message);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view), NULL);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+}
- g_error_free (regex_error);
+void
+et_scan_dialog_open (EtScanDialog *self, EtScanType scanner_type)
+{
+ EtScanDialogPrivate *priv;
- goto out;
+ g_return_if_fail (ET_SCAN_DIALOG (self));
+ g_return_if_fail (scanner_type >= ET_SCAN_TYPE_FILL_TAG
+ && scanner_type <= ET_SCAN_TYPE_PROCESS_FIELDS);
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->type_combo), scanner_type);
}
-static gint
-Scan_Word_Is_Roman_Numeral (const gchar *text)
+static void
+Mask_Editor_List_Add (EtScanDialog *self)
{
- /* No need for caseless strchr. */
- static const gchar romans[] = "MmDdCcLlXxVvIi";
+ EtScanDialogPrivate *priv;
+ gint i = 0;
+ GtkTreeModel *treemodel;
+ gchar *temp;
- gsize next_allowed = 0;
- gsize prev = 0;
- gsize count = 0;
+ priv = et_scan_dialog_get_instance_private (self);
- const gchar *i;
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
- if (!ScannerWindow || !ProcessFieldsDetectRomanNumerals
- || !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (ProcessFieldsDetectRomanNumerals)))
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo)) == ET_SCAN_TYPE_FILL_TAG)
{
- return 0;
+ while(Scan_Masks[i])
+ {
+ /*if (!g_utf8_validate(Scan_Masks[i], -1, NULL))
+ temp = convert_to_utf8(Scan_Masks[i]);
+ else
+ temp = g_strdup(Scan_Masks[i]);*/
+ temp = Try_To_Validate_Utf8_String(Scan_Masks[i]);
+
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
+ NULL, G_MAXINT,
+ MASK_EDITOR_TEXT, temp, -1);
+ g_free(temp);
+ i++;
+ }
+ } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo)) == ET_SCAN_TYPE_RENAME_FILE)
+ {
+ while(Rename_File_Masks[i])
+ {
+ /*if (!g_utf8_validate(Rename_File_Masks[i], -1, NULL))
+ temp = convert_to_utf8(Rename_File_Masks[i]);
+ else
+ temp = g_strdup(Rename_File_Masks[i]);*/
+ temp = Try_To_Validate_Utf8_String(Rename_File_Masks[i]);
+
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
+ NULL, G_MAXINT,
+ MASK_EDITOR_TEXT, temp, -1);
+ g_free(temp);
+ i++;
+ }
}
+}
- for (i = text; *i; i++)
+/*
+ * Clean up the currently displayed masks lists, ready for saving
+ */
+static void
+Mask_Editor_Clean_Up_Masks_List (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ gchar *text = NULL;
+ gchar *text1 = NULL;
+ GtkTreeIter currentIter;
+ GtkTreeIter itercopy;
+ GtkTreeModel *treemodel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+ /* Remove blank and duplicate items */
+ if (gtk_tree_model_get_iter_first(treemodel, ¤tIter))
{
- const char *s = strchr (romans, *i);
- if (s)
+ while(TRUE)
{
- gsize c = (s - romans) / 2;
+ gtk_tree_model_get(treemodel, ¤tIter, MASK_EDITOR_TEXT, &text, -1);
- if (c < next_allowed)
+ /* Check for blank entry */
+ if (text && g_utf8_strlen(text, -1) == 0)
{
- return 0;
+ g_free(text);
+
+ if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), ¤tIter))
+ break; /* No following entries */
+ else
+ continue; /* Go on to next entry, which the remove function already moved onto for us */
}
- if (c < prev)
+ /* Check for duplicate entries */
+ itercopy = currentIter;
+ if (!gtk_tree_model_iter_next(treemodel, &itercopy))
{
- /* After subtraction, no more subtracted chars allowed. */
- next_allowed = prev + 1;
+ g_free(text);
+ break;
}
- else if (c == prev)
+
+ while(TRUE)
{
- /* Allow indefinite repetition for m; three for c, x and i; and
- * none for d, l and v. */
- if ((c && ++count > 3) || (c & 1))
+ gtk_tree_model_get(treemodel, &itercopy, MASK_EDITOR_TEXT, &text1, -1);
+ if (text1 && g_utf8_collate(text,text1) == 0)
{
- return 0;
+ g_free(text1);
+
+ if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &itercopy))
+ break; /* No following entries */
+ else
+ continue; /* Go on to next entry, which the remove function already set iter to for
us */
+
}
+ g_free(text1);
+ if (!gtk_tree_model_iter_next(treemodel, &itercopy))
+ break;
+ }
- /* No more subtraction. */
- next_allowed = c;
+ g_free(text);
+
+ if (!gtk_tree_model_iter_next(treemodel, ¤tIter))
+ break;
+ }
+ }
+}
+
+/*
+ * Save the currently displayed mask list in the mask editor
+ */
+static void
+Mask_Editor_List_Save_Button (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ Mask_Editor_Clean_Up_Masks_List (self);
+
+ if (gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo)) == ET_SCAN_TYPE_FILL_TAG)
+ {
+ Save_Scan_Tag_Masks_List(priv->scan_tag_masks_model, MASK_EDITOR_TEXT);
+ } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo)) == ET_SCAN_TYPE_RENAME_FILE)
+ {
+ Save_Rename_File_Masks_List(priv->rename_masks_model, MASK_EDITOR_TEXT);
+ }
+}
+
+static void
+on_hide (EtScanDialog *self)
+{
+ 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);
+ }
+
+}
+
+static void
+Select_Fields_Select_Unselect_All (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ static gboolean state = TRUE;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle),state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle), state);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle), state);
+ state = !state;
+}
+
+static void
+Process_Fields_First_Letters_Check_Button_Toggled (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ gtk_widget_set_sensitive (GTK_WIDGET (priv->process_roman_numerals_check),
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(priv->process_first_style_uppercase_toggle)));
+}
+
+/*
+ * Set sensitive state of the processing check boxes : if no one is selected => all disabled
+ */
+static void
+Select_Fields_Set_Sensitive (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle))
+ || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle)))
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_space_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_underscores_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_label), TRUE);
+ // Activate the two entries only if the check box is activated, else keep them disabled
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_toggle)))
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_entry), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_from_entry), TRUE);
+ }
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_uppercase_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_lowercase_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_uppercase_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_style_uppercase_toggle),TRUE);
+ Process_Fields_First_Letters_Check_Button_Toggled (self);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_remove_space_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_space_toggle), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_one_space_toggle), TRUE);
+ }else
+ {
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_space_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_underscores_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_to_entry), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_label), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_convert_from_entry), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_uppercase_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_all_lowercase_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_uppercase_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_first_style_uppercase_toggle),FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_roman_numerals_check), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_remove_space_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_space_toggle), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(priv->process_insert_one_space_toggle), FALSE);
+ }
+}
+
+/*
+ * Small buttons of Process Fields scanner
+ */
+static void
+Select_Fields_Invert_Selection (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle),
+ !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle)));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle),
+
!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle)));
+}
+
+static void
+Scan_Toggle_Legend_Button (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->legend_toggle)))
+ {
+ gtk_widget_show_all (priv->legend_frame);
+ }
+ else
+ {
+ gtk_widget_hide (priv->legend_frame);
+ }
+}
+
+static void
+Scan_Toggle_Mask_Editor_Button (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GtkTreeModel *treemodel;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mask_editor_toggle)))
+ {
+ gtk_widget_show_all(priv->mask_editor_frame);
+
+ // Select first row in list
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+ if (gtk_tree_model_get_iter_first(treemodel, &iter))
+ {
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_select_iter(selection, &iter);
+ }
+
+ // Update status of the icon box cause prev instruction show it for all cases
+ g_signal_emit_by_name(G_OBJECT(priv->mask_editor_entry),"changed");
+ }else
+ {
+ gtk_widget_hide(priv->mask_editor_frame);
+ }
+}
+
+/*
+ * Update the Mask List with the new value of the entry box
+ */
+static void
+Mask_Editor_Entry_Changed (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GtkTreeSelection *selection;
+ GtkTreePath *firstSelected;
+ GtkTreeModel *treemodel;
+ GList *selectedRows;
+ GtkTreeIter row;
+ const gchar* text;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+ selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+ if (!selectedRows)
+ {
+ return;
+ }
+
+ firstSelected = (GtkTreePath *)g_list_first(selectedRows)->data;
+ text = gtk_entry_get_text(GTK_ENTRY(priv->mask_editor_entry));
+
+ if (gtk_tree_model_get_iter (treemodel, &row, firstSelected))
+ {
+ gtk_list_store_set(GTK_LIST_STORE(treemodel), &row, MASK_EDITOR_TEXT, text, -1);
+ }
+
+ g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Callback from the mask edit list
+ * Previously known as Mask_Editor_List_Select_Row
+ */
+static void
+Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GList *selectedRows;
+ gchar *text = NULL;
+ GtkTreePath *lastSelected;
+ GtkTreeIter lastFile;
+ GtkTreeModel *treemodel;
+ gboolean valid;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+ /* We must block the function, else the previous selected row will be modified */
+ g_signal_handlers_block_by_func(G_OBJECT(priv->mask_editor_entry),
+ G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+
+ selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+ /*
+ * At some point, we might get called when no rows are selected?
+ */
+ if (!selectedRows)
+ {
+ g_signal_handlers_unblock_by_func(G_OBJECT(priv->mask_editor_entry),
+ G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+ return;
+ }
+
+ /* Get the text of the last selected row */
+ lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data;
+
+ valid= gtk_tree_model_get_iter(treemodel, &lastFile, lastSelected);
+ if (valid)
+ {
+ gtk_tree_model_get(treemodel, &lastFile, MASK_EDITOR_TEXT, &text, -1);
+
+ if (text)
+ {
+ gtk_entry_set_text(GTK_ENTRY(priv->mask_editor_entry),text);
+ g_free(text);
+ }
+ }
+
+ g_signal_handlers_unblock_by_func(G_OBJECT(priv->mask_editor_entry),
+ G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+
+ g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Remove the selected rows from the mask editor list
+ */
+static void
+Mask_Editor_List_Remove (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GtkTreeModel *treemodel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+ if (gtk_tree_selection_count_selected_rows(selection) == 0) {
+ Log_Print(LOG_ERROR,_("Remove: No row selected"));
+ return;
+ }
+
+ if (!gtk_tree_model_get_iter_first(treemodel, &iter))
+ return;
+
+ while (TRUE)
+ {
+ if (gtk_tree_selection_iter_is_selected(selection, &iter))
+ {
+ if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &iter))
+ {
+ break;
}
- else if (c && !(c & 1))
+ } else
+ {
+ if (!gtk_tree_model_iter_next(treemodel, &iter))
{
- /* For first occurrence of c, x and i, allow "subtraction" from
- * 10 and 5 times self, reset counting. */
- next_allowed = c - 2;
- count = 1;
+ break;
}
-
- prev = c;
}
- else
+ }
+}
+
+/*
+ * Actions when the a key is pressed into the masks editor clist
+ */
+static gboolean
+Mask_Editor_List_Key_Press (GtkWidget *widget,
+ GdkEvent *event,
+ EtScanDialog *self)
+{
+ if (event && event->type == GDK_KEY_PRESS) {
+ GdkEventKey *kevent = (GdkEventKey *)event;
+
+ switch(kevent->keyval)
{
- if (g_unichar_isalnum (g_utf8_get_char (i)))
+ case GDK_KEY_Delete:
+ Mask_Editor_List_Remove (self);
+ break;
+/* case GDK_KEY_Up:
+ Mask_Editor_Clist_Move_Up();
+ break;
+ case GDK_KEY_Down:
+ Mask_Editor_Clist_Move_Down();
+ break;
+*/ }
+ }
+ return TRUE;
+}
+
+/*
+ * Add a new mask to the list
+ */
+static void
+Mask_Editor_List_New (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ gchar *text;
+ GtkTreeIter iter;
+ GtkTreeSelection *selection;
+ GtkTreeModel *treemodel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ text = _("New_mask");
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+ gtk_list_store_insert(GTK_LIST_STORE(treemodel), &iter, 0);
+ gtk_list_store_set(GTK_LIST_STORE(treemodel), &iter, MASK_EDITOR_TEXT, text, -1);
+
+ gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_select_iter(selection, &iter);
+}
+
+/*
+ * Move all selected rows up one place in the mask list
+ */
+static void
+Mask_Editor_List_Move_Up (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GtkTreeSelection *selection;
+ GList *selectedRows;
+ GList *l;
+ GtkTreeIter currentFile;
+ GtkTreeIter nextFile;
+ GtkTreePath *currentPath;
+ GtkTreeModel *treemodel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+ selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+ if (!selectedRows)
+ {
+ Log_Print(LOG_ERROR,_("Move Up: No row selected"));
+ return;
+ }
+
+ for (l = selectedRows; l != NULL; l = g_list_next (l))
+ {
+ currentPath = (GtkTreePath *)l->data;
+ if (gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath))
+ {
+ /* Find the entry above the node... */
+ if (gtk_tree_path_prev(currentPath))
{
- return 0;
+ /* ...and if it exists, swap the two rows by iter */
+ gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
+ gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile);
}
+ }
+ }
- break;
+ g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+}
+
+/*
+ * Move all selected rows down one place in the mask list
+ */
+static void
+Mask_Editor_List_Move_Down (EtScanDialog *self)
+{
+ EtScanDialogPrivate *priv;
+ GtkTreeSelection *selection;
+ GList *selectedRows;
+ GList *l;
+ GtkTreeIter currentFile;
+ GtkTreeIter nextFile;
+ GtkTreePath *currentPath;
+ GtkTreeModel *treemodel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+ selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+
+ if (!selectedRows)
+ {
+ Log_Print(LOG_ERROR,_("Move Down: No row selected"));
+ return;
+ }
+
+ for (l = selectedRows; l != NULL; l = g_list_next (l))
+ {
+ currentPath = (GtkTreePath *)l->data;
+
+ if (gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath))
+ {
+ /* Find the entry below the node and swap the two nodes by iter */
+ gtk_tree_path_next(currentPath);
+ if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
+ gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile);
}
}
- /* Return length of found Roman numeral. */
- return i - text;
+ g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
}
+/*
+ * Set a row visible in the mask editor list (by scrolling the list)
+ */
+static void
+Mask_Editor_List_Set_Row_Visible (GtkTreeView *view,
+ GtkTreeModel *treeModel,
+ GtkTreeIter *rowIter)
+{
+ /*
+ * TODO: Make this only scroll to the row if it is not visible
+ * (like in easytag GTK1)
+ * See function gtk_tree_view_get_visible_rect() ??
+ */
+ GtkTreePath *rowPath;
+
+ g_return_if_fail (treeModel != NULL);
+
+ rowPath = gtk_tree_model_get_path (treeModel, rowIter);
+ gtk_tree_view_scroll_to_cell (view, rowPath, NULL, FALSE, 0, 0);
+ gtk_tree_path_free (rowPath);
+}
/*
- * Return the field of a 'File_Tag' structure corresponding to the mask code
+ * Duplicate a mask on the list
*/
-static gchar
-**Scan_Return_File_Tag_Field_From_Mask_Code (File_Tag *FileTag, gchar code)
+static void
+Mask_Editor_List_Duplicate (EtScanDialog *self)
{
- switch (code)
+ EtScanDialogPrivate *priv;
+ gchar *text = NULL;
+ GList *selectedRows;
+ GList *l;
+ GList *toInsert = NULL;
+ GtkTreeSelection *selection;
+ GtkTreeIter rowIter;
+ GtkTreeModel *treeModel;
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view));
+ selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+ treeModel = gtk_tree_view_get_model(GTK_TREE_VIEW(priv->mask_editor_view));
+
+ if (!selectedRows)
{
- case 't': /* Title */
- return &FileTag->title;
- case 'a': /* Artist */
- return &FileTag->artist;
- case 'b': /* Album */
- return &FileTag->album;
- case 'd': /* Disc Number */
- return &FileTag->disc_number;
- case 'x': /* Total number of discs. */
- return &FileTag->disc_total;
- case 'y': /* Year */
- return &FileTag->year;
- case 'n': /* Track */
- return &FileTag->track;
- case 'l': /* Track Total */
- return &FileTag->track_total;
- case 'g': /* Genre */
- return &FileTag->genre;
- case 'c': /* Comment */
- return &FileTag->comment;
- case 'p': /* Composer */
- return &FileTag->composer;
- case 'o': /* Orig. Artist */
- return &FileTag->orig_artist;
- case 'r': /* Copyright */
- return &FileTag->copyright;
- case 'u': /* URL */
- return &FileTag->url;
- case 'e': /* Encoded by */
- return &FileTag->encoded_by;
- case 'z': /* Album Artist */
- return &FileTag->album_artist;
- case 'i': /* Ignored */
- return NULL;
- default:
- Log_Print(LOG_ERROR,"Scanner: Invalid code '%%%c' found!",code);
- return NULL;
+ Log_Print(LOG_ERROR,_("Copy: No row selected"));
+ return;
+ }
+
+ /* Loop through selected rows, duplicating them into a GList
+ * We cannot directly insert because the paths in selectedRows
+ * get out of date after an insertion */
+ for (l = selectedRows; l != NULL; l = g_list_next (l))
+ {
+ if (gtk_tree_model_get_iter (treeModel, &rowIter,
+ (GtkTreePath*)l->data))
+ {
+ gtk_tree_model_get(treeModel, &rowIter, MASK_EDITOR_TEXT, &text, -1);
+ toInsert = g_list_prepend (toInsert, text);
+ }
+ }
+
+ for (l = toInsert; l != NULL; l = g_list_next (l))
+ {
+ gtk_list_store_insert_with_values (GTK_LIST_STORE(treeModel), &rowIter,
+ 0, MASK_EDITOR_TEXT,
+ (gchar *)l->data, -1);
+ }
+
+ /* Set focus to the last inserted line. */
+ if (toInsert)
+ {
+ Mask_Editor_List_Set_Row_Visible (GTK_TREE_VIEW (priv->mask_editor_view),
+ treeModel, &rowIter);
}
+
+ /* Free data no longer needed */
+ g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+ g_list_free_full (toInsert, (GDestroyNotify)g_free);
}
+static void
+Process_Fields_Convert_Check_Button_Toggled (EtScanDialog *self, GtkWidget *object)
+{
+ EtScanDialogPrivate *priv;
+
+ priv = et_scan_dialog_get_instance_private (self);
+ gtk_widget_set_sensitive (priv->process_convert_to_entry,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(priv->process_convert_toggle)));
+ gtk_widget_set_sensitive (priv->process_convert_from_entry,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(priv->process_convert_toggle)));
+}
-/******************
- * Scanner Window *
- ******************/
-void Open_ScannerWindow (gint scanner_type)
+static void
+create_scan_dialog (EtScanDialog *self)
{
+ EtScanDialogPrivate *priv;
GtkWidget *scan_button;
GtkWidget *ScanVBox;
- GtkWidget *HBox1, *HBox2, *HBox4, *VBox, *hbox, *vbox;
+ GtkWidget *HBox1, *HBox2, *HBox4, *VBox, *hbox, *mask_hbox, *vbox;
GtkWidget *Table;
+ GtkWidget *scrolled_window;
GtkWidget *Label;
GtkWidget *Button;
GIcon *new_folder;
@@ -1780,53 +2538,37 @@ void Open_ScannerWindow (gint scanner_type)
GtkWidget *radio_space_none;
GtkTreeViewColumn * column;
GtkCellRenderer *renderer;
- GtkToggleAction *toggle_action;
-
- /* Check if already opened */
- if (ScannerWindow)
- {
- //gdk_window_show(ScannerWindow->window);
- gtk_window_present(GTK_WINDOW(ScannerWindow));
- if (ScannerOptionCombo)
- {
- gtk_combo_box_set_active(GTK_COMBO_BOX(ScannerOptionCombo), scanner_type);
- }
- return;
- }
- if ( scanner_type < SCANNER_FILL_TAG
- || scanner_type > SCANNER_PROCESS_FIELDS)
- scanner_type = SCANNER_FILL_TAG;
+ priv = et_scan_dialog_get_instance_private (self);
/* The window */
- ScannerWindow = gtk_dialog_new_with_buttons (_("Tag and Filename Scan"),
- GTK_WINDOW (MainWindow),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_STOCK_CLOSE,
- GTK_RESPONSE_CLOSE, NULL);
+ gtk_window_set_title (GTK_WINDOW (self), _("Tag and Filename Scan"));
+ gtk_window_set_transient_for (GTK_WINDOW (self), GTK_WINDOW (MainWindow));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
+ gtk_dialog_add_buttons (GTK_DIALOG (self), GTK_STOCK_CLOSE,
+ GTK_RESPONSE_CLOSE, NULL);
/* 'Scan selected files' button */
scan_button = gtk_button_new_from_stock (GTK_STOCK_APPLY);
/* TODO: Set related action to match AM_SCAN_FILES. */
gtk_button_set_label (GTK_BUTTON (scan_button), _("Scan Files"));
gtk_widget_set_can_default (scan_button, TRUE);
- gtk_dialog_add_action_widget (GTK_DIALOG (ScannerWindow), scan_button,
+ gtk_dialog_add_action_widget (GTK_DIALOG (self), scan_button,
GTK_RESPONSE_APPLY);
- gtk_dialog_set_default_response (GTK_DIALOG (ScannerWindow),
- GTK_RESPONSE_APPLY);
+ gtk_dialog_set_default_response (GTK_DIALOG (self), GTK_RESPONSE_APPLY);
gtk_widget_show (scan_button);
gtk_widget_set_tooltip_text (scan_button, _("Scan selected files"));
/* The response signal handles close, scan and the delete event. */
- g_signal_connect (G_OBJECT (ScannerWindow), "response",
- G_CALLBACK (et_scan_on_response), NULL);
-
- /* The init position is defined below, because the scanner window must be
- * shown before it can be moved. */
+ g_signal_connect (self, "response", G_CALLBACK (et_scan_on_response),
+ NULL);
+ g_signal_connect (self, "hide", G_CALLBACK (on_hide), NULL);
+ g_signal_connect (self, "delete-event",
+ G_CALLBACK (gtk_widget_hide_on_delete), NULL);
/* The main vbox */
- ScanVBox = gtk_dialog_get_content_area (GTK_DIALOG (ScannerWindow));
- gtk_container_set_border_width (GTK_CONTAINER (ScannerWindow), 6);
+ ScanVBox = gtk_dialog_get_content_area (GTK_DIALOG (self));
+ gtk_container_set_border_width (GTK_CONTAINER (self), 6);
gtk_box_set_spacing (GTK_BOX (ScanVBox), 12);
/*
@@ -1839,26 +2581,28 @@ void Open_ScannerWindow (gint scanner_type)
Label = gtk_label_new(_("Scanner:"));
gtk_box_pack_start(GTK_BOX(HBox1),Label,FALSE,FALSE,0);
- ScannerOptionCombo = gtk_combo_box_text_new();
- gtk_box_pack_start(GTK_BOX (HBox1), ScannerOptionCombo, TRUE, TRUE, 2);
- gtk_widget_set_size_request(ScannerOptionCombo, 160, -1);
+ priv->type_combo = gtk_combo_box_text_new();
+ gtk_box_pack_start(GTK_BOX (HBox1), priv->type_combo, TRUE, TRUE, 2);
+ gtk_widget_set_size_request(priv->type_combo, 160, -1);
/* Option for Tag */
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
- _(Scanner_Option_Menu_Items[SCANNER_FILL_TAG]));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->type_combo),
+ _(Scanner_Option_Menu_Items[ET_SCAN_TYPE_FILL_TAG]));
/* Option for FileName */
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
- _(Scanner_Option_Menu_Items[SCANNER_RENAME_FILE]));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->type_combo),
+ _(Scanner_Option_Menu_Items[ET_SCAN_TYPE_RENAME_FILE]));
/* Option for ProcessFields */
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(ScannerOptionCombo),
- _(Scanner_Option_Menu_Items[SCANNER_PROCESS_FIELDS]));
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(priv->type_combo),
+ _(Scanner_Option_Menu_Items[ET_SCAN_TYPE_PROCESS_FIELDS]));
/* Selection of the item made at the end of the function. */
- gtk_widget_set_tooltip_text (ScannerOptionCombo,
+ gtk_widget_set_tooltip_text (priv->type_combo,
_("Select the type of scanner to use"));
- g_signal_connect(G_OBJECT(ScannerOptionCombo), "changed", G_CALLBACK(Scanner_Option_Menu_Activate_Item),
NULL);
+ g_signal_connect_swapped (priv->type_combo, "changed",
+ G_CALLBACK (Scanner_Option_Menu_Activate_Item),
+ self);
/* Options button */
Button = gtk_button_new();
@@ -1870,159 +2614,168 @@ void Open_ScannerWindow (gint scanner_type)
g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Scan_Option_Button),NULL);
/* Mask Editor button */
- MaskEditorButton = gtk_toggle_button_new();
+ priv->mask_editor_toggle = gtk_toggle_button_new();
Icon = gtk_image_new_from_stock("easytag-mask", GTK_ICON_SIZE_BUTTON);
- gtk_container_add(GTK_CONTAINER(MaskEditorButton),Icon);
- gtk_box_pack_start(GTK_BOX(HBox1),MaskEditorButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorButton,_("Show / Hide Masks Editor"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(MaskEditorButton),SCAN_MASK_EDITOR_BUTTON);
- g_signal_connect(G_OBJECT(MaskEditorButton),"toggled",G_CALLBACK(Scan_Toggle_Mask_Editor_Button),NULL);
+ gtk_container_add(GTK_CONTAINER(priv->mask_editor_toggle),Icon);
+ gtk_box_pack_start(GTK_BOX(HBox1),priv->mask_editor_toggle,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(priv->mask_editor_toggle),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(priv->mask_editor_toggle,_("Show / Hide Masks Editor"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->mask_editor_toggle),SCAN_MASK_EDITOR_BUTTON);
+ g_signal_connect_swapped (priv->mask_editor_toggle, "toggled",
+ G_CALLBACK (Scan_Toggle_Mask_Editor_Button),
+ self);
/* Legend button */
- LegendButton = gtk_toggle_button_new();
+ priv->legend_toggle = gtk_toggle_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_HELP, GTK_ICON_SIZE_BUTTON);
- gtk_container_add(GTK_CONTAINER(LegendButton),Icon);
- gtk_box_pack_start(GTK_BOX(HBox1),LegendButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(LegendButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(LegendButton,_("Show / Hide Legend"));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(LegendButton),SCAN_LEGEND_BUTTON);
- g_signal_connect(G_OBJECT(LegendButton),"toggled",G_CALLBACK(Scan_Toggle_Legend_Button),NULL);
+ gtk_container_add(GTK_CONTAINER(priv->legend_toggle),Icon);
+ gtk_box_pack_start(GTK_BOX(HBox1),priv->legend_toggle,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(priv->legend_toggle),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(priv->legend_toggle,_("Show / Hide Legend"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->legend_toggle),SCAN_LEGEND_BUTTON);
+ g_signal_connect_swapped (priv->legend_toggle, "toggled",
+ G_CALLBACK (Scan_Toggle_Legend_Button),
+ self);
/*
* Frame for Scan Tag
*/
- ScanTagFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[0]));
- gtk_box_pack_start(GTK_BOX(ScanVBox),ScanTagFrame,FALSE,FALSE,0);
+ priv->scan_tag_frame = gtk_frame_new (_(Scanner_Option_Menu_Items[0]));
+ gtk_box_pack_start(GTK_BOX(ScanVBox),priv->scan_tag_frame,FALSE,FALSE,0);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
- gtk_container_add(GTK_CONTAINER(ScanTagFrame),vbox);
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
- gtk_widget_show(vbox);
+ gtk_container_add (GTK_CONTAINER (priv->scan_tag_frame), vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
+ gtk_widget_show (vbox);
/* The combo box + Status icon */
HBox2 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
gtk_box_pack_start(GTK_BOX(vbox),HBox2,TRUE,TRUE,0);
// Set up list model which is used both by the combobox and the editor
- ScanTagListModel = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
+ priv->scan_tag_masks_model = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
// The combo box to select the mask to apply
- ScanTagMaskCombo = gtk_combo_box_new_with_entry();
- gtk_combo_box_set_model(GTK_COMBO_BOX(ScanTagMaskCombo), GTK_TREE_MODEL(ScanTagListModel));
- g_object_unref (ScanTagListModel);
- gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(ScanTagMaskCombo), MASK_EDITOR_TEXT);
+ priv->scan_tag_mask_combo = gtk_combo_box_new_with_entry();
+ gtk_combo_box_set_model(GTK_COMBO_BOX(priv->scan_tag_mask_combo),
GTK_TREE_MODEL(priv->scan_tag_masks_model));
+ g_object_unref (priv->scan_tag_masks_model);
+ gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(priv->scan_tag_mask_combo), MASK_EDITOR_TEXT);
- gtk_box_pack_start(GTK_BOX(HBox2),ScanTagMaskCombo,TRUE,TRUE,2);
- gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),
+ gtk_box_pack_start(GTK_BOX(HBox2),priv->scan_tag_mask_combo,TRUE,TRUE,2);
+ gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))),
_("Select or type in a mask using codes (see Legend) to parse "
"filename and path. Used to fill in tag fields"));
- // Signal to generate preview (preview of the new tag values)
- g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),"changed",
- G_CALLBACK(Scan_Fill_Tag_Generate_Preview),NULL);
+ /* Signal to generate preview (preview of the new tag values). */
+ g_signal_connect_swapped (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo))),
+ "changed",
+ G_CALLBACK (Scan_Fill_Tag_Generate_Preview),
+ self);
// Load masks into the combobox from a file
- Load_Scan_Tag_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT, Scan_Masks);
+ Load_Scan_Tag_Masks_List(priv->scan_tag_masks_model, MASK_EDITOR_TEXT, Scan_Masks);
if (SCAN_TAG_DEFAULT_MASK)
{
- Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK);
- gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo))), SCAN_TAG_DEFAULT_MASK);
+ Add_String_To_Combo_List(priv->scan_tag_masks_model, SCAN_TAG_DEFAULT_MASK);
+ gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo))),
SCAN_TAG_DEFAULT_MASK);
}else
{
- gtk_combo_box_set_active(GTK_COMBO_BOX(ScanTagMaskCombo), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(priv->scan_tag_mask_combo), 0);
}
// Mask status icon
// Signal connection to check if mask is correct into the mask entry
- g_signal_connect (gtk_bin_get_child (GTK_BIN (ScanTagMaskCombo)),
+ g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->scan_tag_mask_combo)),
"changed", G_CALLBACK (entry_check_scan_tag_mask),
NULL);
- // Preview label
- FillTagPreviewLabel = gtk_label_new (_("Fill tag preview"));
- gtk_label_set_line_wrap(GTK_LABEL(FillTagPreviewLabel),TRUE);
- gtk_widget_show(FillTagPreviewLabel);
- gtk_box_pack_start(GTK_BOX(vbox),FillTagPreviewLabel,TRUE,TRUE,0);
+ /* Preview label. */
+ priv->fill_tag_preview_label = gtk_label_new (_("Fill tag preview"));
+ gtk_label_set_line_wrap(GTK_LABEL(priv->fill_tag_preview_label),TRUE);
+ gtk_widget_show(priv->fill_tag_preview_label);
+ gtk_box_pack_start(GTK_BOX(vbox),priv->fill_tag_preview_label,TRUE,TRUE,0);
/*
* Frame for Rename File
*/
- RenameFileFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[1]));
- gtk_box_pack_start(GTK_BOX(ScanVBox),RenameFileFrame,FALSE,FALSE,0);
+ priv->rename_file_frame = gtk_frame_new (_(Scanner_Option_Menu_Items[1]));
+ gtk_box_pack_start(GTK_BOX(ScanVBox),priv->rename_file_frame,FALSE,FALSE,0);
- vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,4);
- gtk_container_add(GTK_CONTAINER(RenameFileFrame),vbox);
- gtk_container_set_border_width(GTK_CONTAINER(vbox), 4);
- gtk_widget_show(vbox);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
+ gtk_container_add (GTK_CONTAINER (priv->rename_file_frame), vbox);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), BOX_SPACING);
+ gtk_widget_show (vbox);
/* The button to prefix path + combo box + Status icon */
HBox4 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
gtk_box_pack_start(GTK_BOX(vbox),HBox4,TRUE,TRUE,0);
// Button to prefix path
- RenameFilePrefixPathButton = gtk_button_new();
+ Button = gtk_button_new();
new_folder = g_themed_icon_new ("folder-new");
/* TODO: On Win32, GTK_ICON_SIZE_BUTTON enlarges the combobox. */
Icon = gtk_image_new_from_gicon (new_folder, GTK_ICON_SIZE_MENU);
g_object_unref (new_folder);
- gtk_container_add(GTK_CONTAINER(RenameFilePrefixPathButton),Icon);
- gtk_box_pack_start(GTK_BOX(HBox4),RenameFilePrefixPathButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(RenameFilePrefixPathButton),GTK_RELIEF_NONE);
-
g_signal_connect(G_OBJECT(RenameFilePrefixPathButton),"clicked",G_CALLBACK(Scan_Rename_File_Prefix_Path),NULL);
- gtk_widget_set_tooltip_text(RenameFilePrefixPathButton,_("Prefix mask with current path"));
+ gtk_container_add (GTK_CONTAINER (Button), Icon);
+ gtk_box_pack_start (GTK_BOX (HBox4), Button, FALSE, FALSE, 0);
+ gtk_button_set_relief (GTK_BUTTON (Button), GTK_RELIEF_NONE);
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Scan_Rename_File_Prefix_Path), self);
+ gtk_widget_set_tooltip_text (Button, _("Prefix mask with current path"));
// Set up list model which is used both by the combobox and the editor
- RenameFileListModel = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
+ priv->rename_masks_model = gtk_list_store_new(MASK_EDITOR_COUNT, G_TYPE_STRING);
// The combo box to select the mask to apply
- RenameFileMaskCombo = gtk_combo_box_new_with_entry();
- gtk_combo_box_set_model(GTK_COMBO_BOX(RenameFileMaskCombo), GTK_TREE_MODEL(RenameFileListModel));
- g_object_unref (RenameFileListModel);
- gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(RenameFileMaskCombo), MASK_EDITOR_TEXT);
+ priv->rename_file_mask_combo = gtk_combo_box_new_with_entry();
+ gtk_combo_box_set_model(GTK_COMBO_BOX(priv->rename_file_mask_combo),
GTK_TREE_MODEL(priv->rename_masks_model));
+ g_object_unref (priv->rename_masks_model);
+ gtk_combo_box_set_entry_text_column(GTK_COMBO_BOX(priv->rename_file_mask_combo), MASK_EDITOR_TEXT);
- gtk_box_pack_start(GTK_BOX(HBox4),RenameFileMaskCombo,TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(HBox4),priv->rename_file_mask_combo,TRUE,TRUE,2);
gtk_container_set_border_width(GTK_CONTAINER(HBox4), 2);
- gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),
+
gtk_widget_set_tooltip_text(GTK_WIDGET(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))),
_("Select or type in a mask using codes (see Legend) to parse tag fields. "
"Used to rename the file.\nUse / to make directories. If the first character "
"is /, it's a absolute path, otherwise is relative to the old path."));
// Signal to generate preview (preview of the new filename)
- g_signal_connect_swapped(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),"changed",
- G_CALLBACK(Scan_Rename_File_Generate_Preview),NULL);
+ g_signal_connect_swapped (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo))),
+ "changed",
+ G_CALLBACK (Scan_Rename_File_Generate_Preview),
+ self);
// Load masks into the combobox from a file
- Load_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT, Rename_File_Masks);
+ Load_Rename_File_Masks_List(priv->rename_masks_model, MASK_EDITOR_TEXT, Rename_File_Masks);
if (RENAME_FILE_DEFAULT_MASK)
{
- Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK);
- gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo))),
RENAME_FILE_DEFAULT_MASK);
+ Add_String_To_Combo_List(priv->rename_masks_model, RENAME_FILE_DEFAULT_MASK);
+ gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo))),
RENAME_FILE_DEFAULT_MASK);
}else
{
- gtk_combo_box_set_active(GTK_COMBO_BOX(RenameFileMaskCombo), 0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(priv->rename_file_mask_combo), 0);
}
// Mask status icon
// Signal connection to check if mask is correct into the mask entry
- g_signal_connect (gtk_bin_get_child (GTK_BIN (RenameFileMaskCombo)),
+ g_signal_connect (gtk_bin_get_child (GTK_BIN (priv->rename_file_mask_combo)),
"changed", G_CALLBACK (entry_check_rename_file_mask),
NULL);
/* Preview label */
- RenameFilePreviewLabel = gtk_label_new (_("Rename file preview"));
- gtk_label_set_line_wrap(GTK_LABEL(RenameFilePreviewLabel),TRUE);
- gtk_widget_show(RenameFilePreviewLabel);
- gtk_box_pack_start(GTK_BOX(vbox),RenameFilePreviewLabel,TRUE,TRUE,0);
+ priv->rename_file_preview_label = gtk_label_new (_("Rename file preview"));
+ gtk_label_set_line_wrap(GTK_LABEL(priv->rename_file_preview_label),TRUE);
+ gtk_widget_show(priv->rename_file_preview_label);
+ gtk_box_pack_start(GTK_BOX(vbox),priv->rename_file_preview_label,TRUE,TRUE,0);
/*
* Frame for Processing Fields
*/
- ProcessFieldsFrame = gtk_frame_new (_(Scanner_Option_Menu_Items[2]));
- gtk_box_pack_start(GTK_BOX(ScanVBox),ProcessFieldsFrame,FALSE,FALSE,0);
+ priv->process_fields_frame = gtk_frame_new (_(Scanner_Option_Menu_Items[2]));
+ gtk_box_pack_start(GTK_BOX(ScanVBox),priv->process_fields_frame,FALSE,FALSE,0);
VBox = gtk_box_new (GTK_ORIENTATION_VERTICAL, BOX_SPACING);
- gtk_container_add(GTK_CONTAINER(ProcessFieldsFrame),VBox);
- gtk_container_set_border_width(GTK_CONTAINER(VBox), 4);
- gtk_widget_show(VBox);
+ gtk_container_add (GTK_CONTAINER (priv->process_fields_frame), VBox);
+ gtk_container_set_border_width (GTK_CONTAINER (VBox), BOX_SPACING);
+ gtk_widget_show (VBox);
/* Group: select entry fields to process */
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
@@ -2034,88 +2787,94 @@ void Open_ScannerWindow (gint scanner_type)
"fields which can be processed. Select "
"those which interest you"));
// Advice for Translators: set the first letter of filename translated
- ProcessFileNameField = gtk_toggle_button_new_with_label( _("F"));
- gtk_widget_set_tooltip_text (ProcessFileNameField,
+ priv->process_filename_toggle = gtk_toggle_button_new_with_label( _("F"));
+ gtk_widget_set_tooltip_text (priv->process_filename_toggle,
_("Process filename field"));
// Advice for Translators: set the first letter of title translated
- ProcessTitleField = gtk_toggle_button_new_with_label( _("T"));
- gtk_widget_set_tooltip_text(ProcessTitleField, _("Process title field"));
+ priv->process_title_toggle = gtk_toggle_button_new_with_label( _("T"));
+ gtk_widget_set_tooltip_text(priv->process_title_toggle, _("Process title field"));
// Advice for Translators: set the first letter of artist translated
- ProcessArtistField = gtk_toggle_button_new_with_label( _("Ar"));
- gtk_widget_set_tooltip_text(ProcessArtistField, _("Process file artist field"));
+ priv->process_artist_toggle = gtk_toggle_button_new_with_label( _("Ar"));
+ gtk_widget_set_tooltip_text(priv->process_artist_toggle, _("Process file artist field"));
// Advice for Translators: set the first letter of album artist translated
- ProcessAlbumArtistField = gtk_toggle_button_new_with_label(_("AA"));
- gtk_widget_set_tooltip_text(ProcessAlbumArtistField, _("Process album artist field"));
+ priv->process_album_artist_toggle = gtk_toggle_button_new_with_label(_("AA"));
+ gtk_widget_set_tooltip_text(priv->process_album_artist_toggle, _("Process album artist field"));
// Advice for Translators: set the first letter of album translated
- ProcessAlbumField = gtk_toggle_button_new_with_label( _("Al"));
- gtk_widget_set_tooltip_text(ProcessAlbumField, _("Process album field"));
+ priv->process_album_toggle = gtk_toggle_button_new_with_label( _("Al"));
+ gtk_widget_set_tooltip_text(priv->process_album_toggle, _("Process album field"));
// Advice for Translators: set the first letter of genre translated
- ProcessGenreField = gtk_toggle_button_new_with_label( _("G"));
- gtk_widget_set_tooltip_text(ProcessGenreField, _("Process genre field"));
+ priv->process_genre_toggle = gtk_toggle_button_new_with_label( _("G"));
+ gtk_widget_set_tooltip_text(priv->process_genre_toggle, _("Process genre field"));
// Advice for Translators: set the first letter of comment translated
- ProcessCommentField = gtk_toggle_button_new_with_label( _("Cm"));
- gtk_widget_set_tooltip_text(ProcessCommentField, _("Process comment field"));
+ priv->process_comment_toggle = gtk_toggle_button_new_with_label( _("Cm"));
+ gtk_widget_set_tooltip_text(priv->process_comment_toggle, _("Process comment field"));
// Advice for Translators: set the first letter of composer translated
- ProcessComposerField = gtk_toggle_button_new_with_label( _("Cp"));
- gtk_widget_set_tooltip_text(ProcessComposerField, _("Process composer field"));
+ priv->process_composer_toggle = gtk_toggle_button_new_with_label( _("Cp"));
+ gtk_widget_set_tooltip_text(priv->process_composer_toggle, _("Process composer field"));
// Advice for Translators: set the first letter of orig artist translated
- ProcessOrigArtistField = gtk_toggle_button_new_with_label( _("O"));
- gtk_widget_set_tooltip_text(ProcessOrigArtistField, _("Process original artist field"));
+ priv->process_original_artist_toggle = gtk_toggle_button_new_with_label( _("O"));
+ gtk_widget_set_tooltip_text(priv->process_original_artist_toggle, _("Process original artist
field"));
// Advice for Translators: set the first letter of copyright translated
- ProcessCopyrightField = gtk_toggle_button_new_with_label( _("Cr"));
- gtk_widget_set_tooltip_text(ProcessCopyrightField, _("Process copyright field"));
+ priv->process_copyright_toggle = gtk_toggle_button_new_with_label( _("Cr"));
+ gtk_widget_set_tooltip_text(priv->process_copyright_toggle, _("Process copyright field"));
// Advice for Translators: set the first letter of URL translated
- ProcessURLField = gtk_toggle_button_new_with_label( _("U"));
- gtk_widget_set_tooltip_text(ProcessURLField, _("Process URL field"));
+ priv->process_url_toggle = gtk_toggle_button_new_with_label( _("U"));
+ gtk_widget_set_tooltip_text(priv->process_url_toggle, _("Process URL field"));
// Advice for Translators: set the first letter of encoder name translated
- ProcessEncodedByField = gtk_toggle_button_new_with_label( _("E"));
- gtk_widget_set_tooltip_text(ProcessEncodedByField, _("Process encoder name field"));
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFileNameField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessTitleField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessArtistField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessAlbumArtistField,TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessAlbumField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessGenreField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessCommentField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessComposerField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessOrigArtistField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessCopyrightField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessURLField, TRUE,TRUE,2);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessEncodedByField, TRUE,TRUE,2);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField), PROCESS_FILENAME_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField), PROCESS_TITLE_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField), PROCESS_ARTIST_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),PROCESS_ALBUM_ARTIST_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField), PROCESS_ALBUM_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField), PROCESS_GENRE_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField), PROCESS_COMMENT_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField), PROCESS_COMPOSER_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField), PROCESS_ORIG_ARTIST_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField), PROCESS_COPYRIGHT_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField), PROCESS_URL_FIELD);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField), PROCESS_ENCODED_BY_FIELD);
- g_signal_connect(G_OBJECT(ProcessFileNameField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessTitleField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessArtistField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
-
g_signal_connect(G_OBJECT(ProcessAlbumArtistField),"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessAlbumField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessGenreField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessCommentField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessComposerField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessOrigArtistField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessCopyrightField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessURLField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
- g_signal_connect(G_OBJECT(ProcessEncodedByField),
"toggled",G_CALLBACK(Select_Fields_Set_Sensitive),NULL);
+ priv->process_encoded_by_toggle = gtk_toggle_button_new_with_label( _("E"));
+ gtk_widget_set_tooltip_text(priv->process_encoded_by_toggle, _("Process encoder name field"));
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_filename_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_title_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_artist_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_album_artist_toggle,TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_album_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_genre_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_comment_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_composer_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_original_artist_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_copyright_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_url_toggle, TRUE,TRUE,2);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_encoded_by_toggle, TRUE,TRUE,2);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle), PROCESS_FILENAME_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle), PROCESS_TITLE_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle), PROCESS_ARTIST_FIELD);
+
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle),PROCESS_ALBUM_ARTIST_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle), PROCESS_ALBUM_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle), PROCESS_GENRE_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle), PROCESS_COMMENT_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle), PROCESS_COMPOSER_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle),
PROCESS_ORIG_ARTIST_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle),
PROCESS_COPYRIGHT_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle), PROCESS_URL_FIELD);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle),
PROCESS_ENCODED_BY_FIELD);
+ g_signal_connect_swapped (priv->process_filename_toggle, "toggled",
+ G_CALLBACK (Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_title_toggle, "toggled",
+ G_CALLBACK (Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_artist_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_album_artist_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_album_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_genre_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_comment_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_composer_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_original_artist_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_copyright_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
+ g_signal_connect_swapped (priv->process_url_toggle, "toggled", G_CALLBACK (Select_Fields_Set_Sensitive),
self);
+ g_signal_connect_swapped (priv->process_encoded_by_toggle, "toggled", G_CALLBACK
(Select_Fields_Set_Sensitive), self);
/* The small buttons */
Button = gtk_button_new();
- g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Select_Fields_Invert_Selection),NULL);
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Select_Fields_Invert_Selection),
+ self);
gtk_box_pack_end (GTK_BOX(hbox), Button, FALSE, FALSE, 0);
Icon = gtk_image_new_from_stock ("easytag-invert-selection",
GTK_ICON_SIZE_BUTTON);
gtk_container_add(GTK_CONTAINER(Button),Icon);
gtk_widget_set_tooltip_text (Button, _("Invert selection"));
Button = gtk_button_new();
- g_signal_connect(G_OBJECT(Button),"clicked",G_CALLBACK(Select_Fields_Select_Unselect_All),NULL);
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Select_Fields_Select_Unselect_All),
+ self);
gtk_box_pack_end (GTK_BOX(hbox), Button, FALSE, FALSE, 0);
Icon = gtk_image_new_from_icon_name ("edit-select-all",
GTK_ICON_SIZE_BUTTON);
@@ -2125,46 +2884,51 @@ void Open_ScannerWindow (gint scanner_type)
/* Group: character conversion */
group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
- ProcessFieldsConvertIntoSpace = gtk_radio_button_new_with_label_from_widget (NULL, _("Convert '_' and
'%20' to spaces"));
- ProcessFieldsConvertSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsConvertIntoSpace),
+ priv->process_convert_to_space_toggle = gtk_radio_button_new_with_label_from_widget (NULL, _("Convert
'_' and '%20' to spaces"));
+ priv->process_convert_to_underscores_toggle = gtk_radio_button_new_with_label_from_widget
(GTK_RADIO_BUTTON (priv->process_convert_to_space_toggle),
_("Convert ' ' to '_'"));
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsConvertIntoSpace, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_convert_to_space_toggle, FALSE,
FALSE, 0);
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsConvertSpace, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_convert_to_underscores_toggle, FALSE,
FALSE, 0);
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
gtk_box_pack_start (GTK_BOX (group), hbox, FALSE, FALSE, 0);
- ProcessFieldsConvert = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsConvertIntoSpace),
+ priv->process_convert_toggle = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_convert_to_space_toggle),
_("Convert:"));
- ProcessFieldsConvertTo = gtk_entry_new();
- ProcessFieldsConvertLabelTo = gtk_label_new(_("to: ")); // A "space" at the end to allow another
translation for "to :" (needed in French!)
- ProcessFieldsConvertFrom = gtk_entry_new();
- //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertTo), 1); // Now, it isn't limited to one
character
- //gtk_entry_set_max_length(GTK_ENTRY(ProcessFieldsConvertFrom), 1);
- gtk_widget_set_size_request(ProcessFieldsConvertTo,120,-1);
- gtk_widget_set_size_request(ProcessFieldsConvertFrom,120,-1);
- process_fields_convert_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsConvertIntoSpace),
+ priv->process_convert_to_entry = gtk_entry_new();
+ /* FIXME Use translation context. A "space" at the end to allow another
+ * translation for "to :" (needed in French!) */
+ priv->process_convert_label = gtk_label_new (_("to: "));
+ priv->process_convert_from_entry = gtk_entry_new();
+ //gtk_entry_set_max_length(GTK_ENTRY(priv->process_convert_to_entry), 1); // Now, it isn't limited to
one character
+ //gtk_entry_set_max_length(GTK_ENTRY(priv->process_convert_from_entry), 1);
+ gtk_widget_set_size_request(priv->process_convert_to_entry,120,-1);
+ gtk_widget_set_size_request(priv->process_convert_from_entry,120,-1);
+ process_fields_convert_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_convert_to_space_toggle),
_("Do not convert"));
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvert, FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertFrom, FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertLabelTo,FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsConvertTo, FALSE,FALSE,0);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_convert_toggle, FALSE,FALSE,0);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_convert_from_entry, FALSE,FALSE,0);
+ gtk_box_pack_start (GTK_BOX (hbox), priv->process_convert_label, FALSE,
+ FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_convert_to_entry, FALSE,FALSE,0);
gtk_box_pack_start (GTK_BOX (group), process_fields_convert_none, FALSE,
FALSE, 0);
if (PROCESS_FIELDS_CONVERT_FROM)
- gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertFrom),PROCESS_FIELDS_CONVERT_FROM);
+ gtk_entry_set_text(GTK_ENTRY(priv->process_convert_from_entry),PROCESS_FIELDS_CONVERT_FROM);
if (PROCESS_FIELDS_CONVERT_TO)
- gtk_entry_set_text(GTK_ENTRY(ProcessFieldsConvertTo),PROCESS_FIELDS_CONVERT_TO);
+ gtk_entry_set_text(GTK_ENTRY(priv->process_convert_to_entry),PROCESS_FIELDS_CONVERT_TO);
/* Toggled signals */
- g_signal_connect(G_OBJECT(ProcessFieldsConvert),
"toggled",G_CALLBACK(Process_Fields_Convert_Check_Button_Toggled),NULL);
+ g_signal_connect_swapped (priv->process_convert_toggle, "toggled",
+ G_CALLBACK (Process_Fields_Convert_Check_Button_Toggled),
+ self);
/* Set check buttons to init value */
if (PF_CONVERT_INTO_SPACE || PF_CONVERT_SPACE || PF_CONVERT)
{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvertIntoSpace),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_convert_to_space_toggle),
PF_CONVERT_INTO_SPACE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvertSpace),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_convert_to_underscores_toggle),
PF_CONVERT_SPACE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsConvert),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_convert_toggle),
PF_CONVERT);
}
else
@@ -2173,13 +2937,13 @@ void Open_ScannerWindow (gint scanner_type)
TRUE);
}
/* Tooltips */
- gtk_widget_set_tooltip_text(ProcessFieldsConvertIntoSpace,
+ gtk_widget_set_tooltip_text(priv->process_convert_to_space_toggle,
_("The underscore character or the string '%20' are replaced by one space. "
"Example, before: 'Text%20In%20An_Entry', after: 'Text In An Entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsConvertSpace,
+ gtk_widget_set_tooltip_text(priv->process_convert_to_underscores_toggle,
_("The space character is replaced by one underscore character. "
"Example, before: 'Text In An Entry', after: 'Text_In_An_Entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsConvert,
+ gtk_widget_set_tooltip_text(priv->process_convert_toggle,
_("Replace a string by another one. Note that the search is case sensitive."));
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);
@@ -2187,90 +2951,96 @@ void Open_ScannerWindow (gint scanner_type)
/* Group: capitalize, ... */
group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
- ProcessFieldsAllUppercase = gtk_radio_button_new_with_label_from_widget (NULL, _("Capitalize all"));
- ProcessFieldsAllDowncase = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsAllUppercase),
+ priv->process_all_uppercase_toggle = gtk_radio_button_new_with_label_from_widget (NULL, _("Capitalize
all"));
+ priv->process_all_lowercase_toggle = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_all_uppercase_toggle),
_("Lowercase all"));
- ProcessFieldsFirstLetterUppercase = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsAllUppercase),
+ priv->process_first_uppercase_toggle = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_all_uppercase_toggle),
_("Capitalize first
letter"));
- ProcessFieldsFirstLettersUppercase = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsAllUppercase),
+ priv->process_first_style_uppercase_toggle = gtk_radio_button_new_with_label_from_widget
(GTK_RADIO_BUTTON (priv->process_all_uppercase_toggle),
_("Capitalize the
first letter of each word"));
- ProcessFieldsDetectRomanNumerals = gtk_check_button_new_with_label(_("Detect Roman numerals"));
- process_fields_case_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsAllUppercase),
+ priv->process_roman_numerals_check = gtk_check_button_new_with_label(_("Detect Roman numerals"));
+ process_fields_case_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_all_uppercase_toggle),
_("Do not change
capitalization"));
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsAllUppercase, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_all_uppercase_toggle, FALSE,
FALSE, 0);
- gtk_box_pack_start (GTK_BOX (group),ProcessFieldsAllDowncase, FALSE, FALSE,
+ gtk_box_pack_start (GTK_BOX (group),priv->process_all_lowercase_toggle, FALSE, FALSE,
0);
- gtk_box_pack_start (GTK_BOX (group),ProcessFieldsFirstLetterUppercase,
+ gtk_box_pack_start (GTK_BOX (group),priv->process_first_uppercase_toggle,
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (group), hbox, FALSE, FALSE, 0);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsFirstLettersUppercase,FALSE,FALSE,0);
- gtk_box_pack_start(GTK_BOX(hbox),ProcessFieldsDetectRomanNumerals,FALSE,FALSE,0);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_first_style_uppercase_toggle,FALSE,FALSE,0);
+ gtk_box_pack_start(GTK_BOX(hbox),priv->process_roman_numerals_check,FALSE,FALSE,0);
gtk_box_pack_start (GTK_BOX (group), process_fields_case_none, FALSE,
FALSE, 0);
/* Toggled signals */
-
g_signal_connect(G_OBJECT(ProcessFieldsFirstLettersUppercase),"toggled",G_CALLBACK(Process_Fields_First_Letters_Check_Button_Toggled),NULL);
+ g_signal_connect_swapped (priv->process_first_style_uppercase_toggle,
+ "toggled",
+ G_CALLBACK (Process_Fields_First_Letters_Check_Button_Toggled),
+ self);
/* Set check buttons to init value */
if (PF_CONVERT_ALL_UPPERCASE || PF_CONVERT_ALL_DOWNCASE
|| PF_CONVERT_FIRST_LETTER_UPPERCASE
|| PF_CONVERT_FIRST_LETTERS_UPPERCASE)
{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsAllUppercase),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_all_uppercase_toggle),
PF_CONVERT_ALL_UPPERCASE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsAllDowncase),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_all_lowercase_toggle),
PF_CONVERT_ALL_DOWNCASE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsFirstLetterUppercase),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_first_uppercase_toggle),
PF_CONVERT_FIRST_LETTER_UPPERCASE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsFirstLettersUppercase),
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_first_style_uppercase_toggle),
PF_CONVERT_FIRST_LETTERS_UPPERCASE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsDetectRomanNumerals),
- PF_DETECT_ROMAN_NUMERALS);
}
else
{
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (process_fields_case_none),
TRUE);
}
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_roman_numerals_check),
+ PF_DETECT_ROMAN_NUMERALS);
/* Tooltips */
- gtk_widget_set_tooltip_text(ProcessFieldsAllUppercase,
+ gtk_widget_set_tooltip_text(priv->process_all_uppercase_toggle,
_("Convert all words in all fields to upper case. "
"Example, before: 'Text IN AN entry', after: 'TEXT IN AN ENTRY'."));
- gtk_widget_set_tooltip_text(ProcessFieldsAllDowncase,
+ gtk_widget_set_tooltip_text(priv->process_all_lowercase_toggle,
_("Convert all words in all fields to lower case. "
"Example, before: 'TEXT IN an entry', after: 'text in an entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsFirstLetterUppercase,
+ gtk_widget_set_tooltip_text(priv->process_first_uppercase_toggle,
_("Convert the initial of the first word in all fields to upper case. "
"Example, before: 'text IN An ENTRY', after: 'Text in an entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsFirstLettersUppercase,
+ gtk_widget_set_tooltip_text(priv->process_first_style_uppercase_toggle,
_("Convert the initial of each word in all fields to upper case. "
"Example, before: 'Text in an ENTRY', after: 'Text In An Entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsDetectRomanNumerals,
+ gtk_widget_set_tooltip_text(priv->process_roman_numerals_check,
_("Force to convert to upper case the Roman numerals. "
"Example, before: 'ix. text in an entry', after: 'IX. Text In An Entry'."));
/* Group: insert/remove spaces */
group = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_box_pack_start (GTK_BOX (VBox), group, FALSE, FALSE, 0);
- ProcessFieldsRemoveSpace = gtk_radio_button_new_with_label_from_widget (NULL, _("Remove spaces"));
- ProcessFieldsInsertSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsRemoveSpace),
+ priv->process_remove_space_toggle = gtk_radio_button_new_with_label_from_widget (NULL, _("Remove
spaces"));
+ priv->process_insert_space_toggle = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_remove_space_toggle),
_("Insert a space before
uppercase letters"));
- ProcessFieldsOnlyOneSpace = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsRemoveSpace),
+ priv->process_insert_one_space_toggle = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_remove_space_toggle),
_("Remove duplicate spaces and
underscores"));
- radio_space_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(ProcessFieldsRemoveSpace),
+ radio_space_none = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
(priv->process_remove_space_toggle),
_("Do not change word separators"));
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsRemoveSpace, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_remove_space_toggle, FALSE,
FALSE, 0);
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsInsertSpace, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_insert_space_toggle, FALSE,
FALSE, 0);
- gtk_box_pack_start (GTK_BOX (group), ProcessFieldsOnlyOneSpace, FALSE,
+ gtk_box_pack_start (GTK_BOX (group), priv->process_insert_one_space_toggle, FALSE,
FALSE, 0);
gtk_box_pack_start (GTK_BOX (group), radio_space_none, FALSE, FALSE, 0);
/* Set check buttons to init value */
if (PF_REMOVE_SPACE || PF_INSERT_SPACE || PF_ONLY_ONE_SPACE)
{
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsRemoveSpace),PF_REMOVE_SPACE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsInsertSpace),PF_INSERT_SPACE);
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ProcessFieldsOnlyOneSpace),PF_ONLY_ONE_SPACE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_remove_space_toggle),
+ PF_REMOVE_SPACE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_insert_space_toggle),
+ PF_INSERT_SPACE);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->process_insert_one_space_toggle),
+ PF_ONLY_ONE_SPACE);
}
else
{
@@ -2278,25 +3048,25 @@ void Open_ScannerWindow (gint scanner_type)
TRUE);
}
/* Tooltips */
- gtk_widget_set_tooltip_text(ProcessFieldsRemoveSpace,
+ gtk_widget_set_tooltip_text(priv->process_remove_space_toggle,
_("All spaces between words are removed. "
"Example, before: 'Text In An Entry', after: 'TextInAnEntry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsInsertSpace,
+ gtk_widget_set_tooltip_text(priv->process_insert_space_toggle,
_("A space is inserted before each upper case letter. "
"Example, before: 'TextInAnEntry', after: 'Text In An Entry'."));
- gtk_widget_set_tooltip_text(ProcessFieldsOnlyOneSpace,
+ gtk_widget_set_tooltip_text(priv->process_insert_one_space_toggle,
_("Duplicate spaces and underscores are removed. "
"Example, before: 'Text__In__An Entry', after: 'Text_In_An Entry'."));
- Select_Fields_Set_Sensitive();
+ Select_Fields_Set_Sensitive (self);
/*
* Frame to display codes legend
*/
- LegendFrame = gtk_frame_new (_("Legend"));
- gtk_box_pack_start(GTK_BOX(ScanVBox),LegendFrame,FALSE,FALSE,0);
+ priv->legend_frame = gtk_frame_new (_("Legend"));
+ gtk_box_pack_start(GTK_BOX(ScanVBox),priv->legend_frame,FALSE,FALSE,0);
/* Legend labels */
Table = et_grid_new (3, 6);
- gtk_container_add(GTK_CONTAINER(LegendFrame),Table);
+ gtk_container_add(GTK_CONTAINER(priv->legend_frame),Table);
gtk_container_set_border_width(GTK_CONTAINER(Table),4);
Label = gtk_label_new(_("%a: artist"));
et_grid_attach_margins (GTK_GRID (Table), Label, 0, 0, 1, 1, 6, 0);
@@ -2353,317 +3123,236 @@ void Open_ScannerWindow (gint scanner_type)
/*
* Masks Editor
*/
- MaskEditorFrame = gtk_frame_new (_("Mask Editor"));
- gtk_box_pack_start(GTK_BOX(ScanVBox),MaskEditorFrame,FALSE,FALSE,0);
- MaskEditorHBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,4);
- gtk_container_add(GTK_CONTAINER(MaskEditorFrame),MaskEditorHBox);
- gtk_container_set_border_width(GTK_CONTAINER(MaskEditorHBox), 4);
+ priv->mask_editor_frame = gtk_frame_new (_("Mask Editor"));
+ gtk_box_pack_start(GTK_BOX(ScanVBox),priv->mask_editor_frame,FALSE,FALSE,0);
+ mask_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, BOX_SPACING);
+ gtk_container_add (GTK_CONTAINER (priv->mask_editor_frame), mask_hbox);
+ gtk_container_set_border_width (GTK_CONTAINER (mask_hbox), BOX_SPACING);
/* The editor part */
- MaskEditorVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
- gtk_box_pack_start(GTK_BOX(MaskEditorHBox),MaskEditorVBox,TRUE,TRUE,0);
- MaskEditorScrollWindow = gtk_scrolled_window_new(NULL,NULL);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorScrollWindow,TRUE,TRUE,0);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(MaskEditorScrollWindow),
+ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2);
+ gtk_box_pack_start(GTK_BOX(mask_hbox),vbox,TRUE,TRUE,0);
+ scrolled_window = gtk_scrolled_window_new(NULL,NULL);
+ gtk_box_pack_start(GTK_BOX(vbox),scrolled_window,TRUE,TRUE,0);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC);
- gtk_widget_set_size_request(GTK_WIDGET(MaskEditorScrollWindow), -1, 101);
+ gtk_widget_set_size_request(GTK_WIDGET(scrolled_window), -1, 101);
/* The list */
- MaskEditorList = gtk_tree_view_new();
- gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(ScanTagListModel));
+ priv->mask_editor_view = gtk_tree_view_new();
+ gtk_tree_view_set_model(GTK_TREE_VIEW(priv->mask_editor_view),
GTK_TREE_MODEL(priv->scan_tag_masks_model));
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes(NULL,
renderer, "text", MASK_EDITOR_TEXT, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(MaskEditorList), column);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(MaskEditorList), FALSE);
- gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList)),
+ gtk_tree_view_append_column(GTK_TREE_VIEW(priv->mask_editor_view), column);
+ gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(priv->mask_editor_view), FALSE);
+ gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->mask_editor_view)),
GTK_SELECTION_MULTIPLE);
- gtk_tree_view_set_reorderable(GTK_TREE_VIEW(MaskEditorList), TRUE);
- gtk_container_add(GTK_CONTAINER(MaskEditorScrollWindow), MaskEditorList);
- g_signal_connect_after(G_OBJECT(gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList))),
- "changed", G_CALLBACK(Mask_Editor_List_Row_Selected), NULL);
- g_signal_connect(G_OBJECT(MaskEditorList), "key-press-event",
- G_CALLBACK(Mask_Editor_List_Key_Press), NULL);
+ gtk_tree_view_set_reorderable(GTK_TREE_VIEW(priv->mask_editor_view), TRUE);
+ gtk_container_add(GTK_CONTAINER(scrolled_window), priv->mask_editor_view);
+ g_signal_connect_after (gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->mask_editor_view)),
+ "changed",
+ G_CALLBACK (Mask_Editor_List_Row_Selected), self);
+ g_signal_connect (priv->mask_editor_view, "key-press-event",
+ G_CALLBACK (Mask_Editor_List_Key_Press), self);
/* The entry */
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,2);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),hbox,FALSE,FALSE,0);
- MaskEditorEntry = gtk_entry_new();
- gtk_box_pack_start(GTK_BOX(hbox),MaskEditorEntry,TRUE,TRUE,2);
- g_signal_connect(G_OBJECT(MaskEditorEntry),"changed",
- G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
+ gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,0);
+ priv->mask_editor_entry = gtk_entry_new();
+ gtk_box_pack_start(GTK_BOX(hbox),priv->mask_editor_entry,TRUE,TRUE,2);
+ g_signal_connect_swapped (priv->mask_editor_entry, "changed",
+ G_CALLBACK (Mask_Editor_Entry_Changed), self);
// Mask status icon
// Signal connection to check if mask is correct into the mask entry
- g_signal_connect (MaskEditorEntry,"changed",
+ g_signal_connect (priv->mask_editor_entry,"changed",
G_CALLBACK (entry_check_scan_tag_mask), NULL);
/* The buttons part */
- MaskEditorVBox = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
- gtk_box_pack_start(GTK_BOX(MaskEditorHBox),MaskEditorVBox,FALSE,FALSE,0);
+ vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+ gtk_box_pack_start (GTK_BOX (mask_hbox), vbox, FALSE, FALSE, 0);
/* New mask button */
- MaskEditorNewButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorNewButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorNewButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorNewButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorNewButton,_("Create New Mask"));
- g_signal_connect(G_OBJECT(MaskEditorNewButton),"clicked",
- G_CALLBACK(Mask_Editor_List_New),NULL);
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Create New Mask"));
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Mask_Editor_List_New), self);
/* Move up mask button */
- MaskEditorUpButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_GO_UP, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorUpButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorUpButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorUpButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorUpButton,_("Move Up this Mask"));
- g_signal_connect(G_OBJECT(MaskEditorUpButton),"clicked",
- G_CALLBACK(Mask_Editor_List_Move_Up),NULL);
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Move Up this Mask"));
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Mask_Editor_List_Move_Up), self);
/* Move down mask button */
- MaskEditorDownButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorDownButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorDownButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorDownButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorDownButton,_("Move Down this Mask"));
- g_signal_connect(G_OBJECT(MaskEditorDownButton),"clicked",
- G_CALLBACK(Mask_Editor_List_Move_Down),NULL);
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Move Down this Mask"));
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Mask_Editor_List_Move_Down), self);
/* Copy mask button */
- MaskEditorCopyButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorCopyButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorCopyButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorCopyButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorCopyButton,_("Duplicate Mask"));
- g_signal_connect(G_OBJECT(MaskEditorCopyButton),"clicked",
- G_CALLBACK(Mask_Editor_List_Duplicate),NULL);
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Duplicate Mask"));
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Mask_Editor_List_Duplicate), self);
/* Add mask button */
- MaskEditorAddButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorAddButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorAddButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorAddButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorAddButton,_("Add Default Masks"));
- g_signal_connect(G_OBJECT(MaskEditorAddButton),"clicked",
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Add Default Masks"));
+ g_signal_connect(G_OBJECT(Button),"clicked",
G_CALLBACK(Mask_Editor_List_Add),NULL);
/* Remove mask button */
- MaskEditorRemoveButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_REMOVE, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorRemoveButton),Icon);
- gtk_box_pack_start(GTK_BOX(MaskEditorVBox),MaskEditorRemoveButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorRemoveButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorRemoveButton,_("Remove Mask"));
- g_signal_connect(G_OBJECT(MaskEditorRemoveButton),"clicked",
- G_CALLBACK(Mask_Editor_List_Remove),NULL);
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_start(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Remove Mask"));
+ g_signal_connect_swapped (Button, "clicked",
+ G_CALLBACK (Mask_Editor_List_Remove), self);
/* Save mask button */
- MaskEditorSaveButton = gtk_button_new();
+ Button = gtk_button_new();
Icon = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_SMALL_TOOLBAR);
- gtk_container_add(GTK_CONTAINER(MaskEditorSaveButton),Icon);
- gtk_box_pack_end(GTK_BOX(MaskEditorVBox),MaskEditorSaveButton,FALSE,FALSE,0);
- gtk_button_set_relief(GTK_BUTTON(MaskEditorSaveButton),GTK_RELIEF_NONE);
- gtk_widget_set_tooltip_text(MaskEditorSaveButton,_("Save Masks"));
- g_signal_connect(G_OBJECT(MaskEditorSaveButton),"clicked",
+ gtk_container_add(GTK_CONTAINER(Button),Icon);
+ gtk_box_pack_end(GTK_BOX(vbox),Button,FALSE,FALSE,0);
+ gtk_button_set_relief(GTK_BUTTON(Button),GTK_RELIEF_NONE);
+ gtk_widget_set_tooltip_text(Button,_("Save Masks"));
+ g_signal_connect(G_OBJECT(Button),"clicked",
G_CALLBACK(Mask_Editor_List_Save_Button),NULL);
- gtk_widget_show(ScanVBox);
- gtk_widget_show_all(HBox1);
- gtk_widget_show_all(HBox2);
- gtk_widget_show_all(HBox4);
- gtk_widget_show(ScannerWindow);
-
- /* Init position of the scanner window */
- Scan_Set_Scanner_Window_Init_Position();
-
/* To initialize the mask status icon and visibility */
- g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))),"changed");
- g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))),"changed");
- g_signal_emit_by_name(G_OBJECT(MaskEditorEntry),"changed");
- g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled"); /* To hide legend frame */
- g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled"); /* To hide mask editor frame */
- g_signal_emit_by_name(G_OBJECT(ProcessFieldsConvert),"toggled");/* To enable / disable entries */
- g_signal_emit_by_name(G_OBJECT(ProcessFieldsDetectRomanNumerals),"toggled");/* To enable / disable
entries */
-
- // 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);
- }
+
g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))),"changed");
+
g_signal_emit_by_name(G_OBJECT(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->rename_file_mask_combo)))),"changed");
+ g_signal_emit_by_name (priv->mask_editor_entry, "changed");
+ g_signal_emit_by_name(G_OBJECT(priv->legend_toggle),"toggled"); /* To hide legend frame */
+ g_signal_emit_by_name(G_OBJECT(priv->mask_editor_toggle),"toggled"); /* To hide mask editor frame */
+ g_signal_emit_by_name(G_OBJECT(priv->process_convert_toggle),"toggled");/* To enable / disable entries */
+ g_signal_emit_by_name(G_OBJECT(priv->process_roman_numerals_check),"toggled");/* To enable / disable
entries */
+
+ gtk_widget_show_all (ScanVBox);
+
+ /* Activate the current menu in the option menu. */
+ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->type_combo),
+ SCANNER_TYPE);
}
/*
* Select the scanner to run for the current ETFile
*/
-void Scan_Select_Mode_And_Run_Scanner (ET_File *ETFile)
-{
- g_return_if_fail (ScannerWindow != NULL || ETFile != NULL);
-
- if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
- {
- /* Run Scanner Type: Scan Tag */
- Scan_Tag_With_Mask(ETFile);
- } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
- {
- /* Run Scanner Type: Rename File */
- Scan_Rename_File_With_Mask(ETFile);
- } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_PROCESS_FIELDS)
- {
- /* Run Scanner Type: Process Fields */
- Scan_Process_Fields(ETFile);
- }
-}
-
-/*
- * 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)
-{
- gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
-
- if (active)
- {
- if (!ScannerWindow)
- {
- Open_ScannerWindow (SCANNER_TYPE);
- }
- else
- {
- gtk_window_present (GTK_WINDOW (ScannerWindow));
- }
- }
- else
- {
- ScannerWindow_Quit ();
- }
-}
-
-
-/* Callback from Open_ScannerWindow */
-static void
-ScannerWindow_Quit (void)
+Scan_Select_Mode_And_Run_Scanner (EtScanDialog *self, ET_File *ETFile)
{
- GtkToggleAction *toggle_action;
+ EtScanDialogPrivate *priv;
+ EtScanType mode;
- toggle_action = GTK_TOGGLE_ACTION (gtk_ui_manager_get_action (UIManager,
- "/ToolBar/ShowScanner"));
+ g_return_if_fail (ET_SCAN_DIALOG (self));
+ g_return_if_fail (ETFile != NULL);
- if (gtk_toggle_action_get_active (toggle_action))
- {
- gtk_toggle_action_set_active (toggle_action, FALSE);
- }
+ priv = et_scan_dialog_get_instance_private (self);
+ mode = gtk_combo_box_get_active (GTK_COMBO_BOX (priv->type_combo));
- if (ScannerWindow)
+ switch (mode)
{
- ScannerWindow_Apply_Changes();
-
- gtk_widget_destroy(ScannerWindow);
- ScannerWindow = NULL;
- ScannerOptionCombo= NULL;
-
- // To avoid crashs after tests
- ScanTagMaskCombo = NULL;
- RenameFileMaskCombo = NULL;
- MaskEditorEntry = NULL;
- LegendFrame = NULL;
- ProcessFieldsConvertIntoSpace = NULL;
- ProcessFieldsConvertSpace = NULL;
- FillTagPreviewLabel = NULL;
- RenameFilePreviewLabel = NULL;
+ case ET_SCAN_TYPE_FILL_TAG:
+ Scan_Tag_With_Mask (self, ETFile);
+ break;
+ case ET_SCAN_TYPE_RENAME_FILE:
+ Scan_Rename_File_With_Mask (self, ETFile);
+ break;
+ case ET_SCAN_TYPE_PROCESS_FIELDS:
+ Scan_Process_Fields (self, ETFile);
+ break;
+ default:
+ g_assert_not_reached ();
}
}
-
/*
* For the configuration file...
*/
-void ScannerWindow_Apply_Changes (void)
+void
+et_scan_dialog_apply_changes (EtScanDialog *self)
{
- if (ScannerWindow)
- {
- gint x, y;//, width, height;
- GdkWindow *window;
-
- window = gtk_widget_get_window(ScannerWindow);
-
- if ( window && gdk_window_is_visible(window) &&
gdk_window_get_state(window)!=GDK_WINDOW_STATE_MAXIMIZED )
- {
- // Position and Origin of the scanner window
- gdk_window_get_root_origin(window,&x,&y);
- SCANNER_WINDOW_X = x;
- SCANNER_WINDOW_Y = y;
- //gdk_window_get_size(window,&width,&height);
- //SCANNER_WINDOW_WIDTH = width;
- //SCANNER_WINDOW_HEIGHT = height;
- }
-
- // The scanner selected
- SCANNER_TYPE = gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo));
-
- SCAN_MASK_EDITOR_BUTTON = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(MaskEditorButton));
- SCAN_LEGEND_BUTTON = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LegendButton));
-
- /* Group: select entries to process */
- PROCESS_FILENAME_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField));
- PROCESS_TITLE_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField));
- PROCESS_ARTIST_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField));
- PROCESS_ALBUM_ARTIST_FIELD= gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField));
- PROCESS_ALBUM_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField));
- PROCESS_GENRE_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField));
- PROCESS_COMMENT_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField));
- PROCESS_COMPOSER_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField));
- PROCESS_ORIG_ARTIST_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField));
- PROCESS_COPYRIGHT_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField));
- PROCESS_URL_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField));
- PROCESS_ENCODED_BY_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField));
-
- if (PROCESS_FIELDS_CONVERT_FROM) g_free(PROCESS_FIELDS_CONVERT_FROM);
- PROCESS_FIELDS_CONVERT_FROM = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertFrom)));
- if (PROCESS_FIELDS_CONVERT_TO) g_free(PROCESS_FIELDS_CONVERT_TO);
- PROCESS_FIELDS_CONVERT_TO = g_strdup(gtk_entry_get_text(GTK_ENTRY(ProcessFieldsConvertTo)));
-
- /* Group: convert one character */
- PF_CONVERT_INTO_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertIntoSpace));
- PF_CONVERT_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvertSpace));
- PF_CONVERT = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert));
-
- /* Group: capitalize */
- PF_CONVERT_ALL_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllUppercase));
- PF_CONVERT_ALL_DOWNCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsAllDowncase));
- PF_CONVERT_FIRST_LETTER_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLetterUppercase));
- PF_CONVERT_FIRST_LETTERS_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsFirstLettersUppercase));
- PF_DETECT_ROMAN_NUMERALS =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsDetectRomanNumerals));
-
- /* Group: remove/insert space */
- PF_REMOVE_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsRemoveSpace));
- PF_INSERT_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsInsertSpace));
- PF_ONLY_ONE_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsOnlyOneSpace));
-
- // Save default masks...
- if (SCAN_TAG_DEFAULT_MASK) g_free(SCAN_TAG_DEFAULT_MASK);
- SCAN_TAG_DEFAULT_MASK =
g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(ScanTagMaskCombo)))));
- Add_String_To_Combo_List(ScanTagListModel, SCAN_TAG_DEFAULT_MASK);
- Save_Rename_File_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT);
-
- if (RENAME_FILE_DEFAULT_MASK) g_free(RENAME_FILE_DEFAULT_MASK);
- RENAME_FILE_DEFAULT_MASK =
g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(RenameFileMaskCombo)))));
- Add_String_To_Combo_List(RenameFileListModel, RENAME_FILE_DEFAULT_MASK);
- Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT);
-
- }
+ EtScanDialogPrivate *priv;
+
+ g_return_if_fail (ET_SCAN_DIALOG (self));
+
+ priv = et_scan_dialog_get_instance_private (self);
+
+ /* The selected scanner type. */
+ SCANNER_TYPE = gtk_combo_box_get_active(GTK_COMBO_BOX(priv->type_combo));
+
+ SCAN_MASK_EDITOR_BUTTON = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->mask_editor_toggle));
+ SCAN_LEGEND_BUTTON = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->legend_toggle));
+
+ /* Group: select entries to process */
+ PROCESS_FILENAME_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_filename_toggle));
+ PROCESS_TITLE_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_title_toggle));
+ PROCESS_ARTIST_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_artist_toggle));
+ PROCESS_ALBUM_ARTIST_FIELD=
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_artist_toggle));
+ PROCESS_ALBUM_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_album_toggle));
+ PROCESS_GENRE_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_genre_toggle));
+ PROCESS_COMMENT_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_comment_toggle));
+ PROCESS_COMPOSER_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_composer_toggle));
+ PROCESS_ORIG_ARTIST_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_original_artist_toggle));
+ PROCESS_COPYRIGHT_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_copyright_toggle));
+ PROCESS_URL_FIELD = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_url_toggle));
+ PROCESS_ENCODED_BY_FIELD =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_encoded_by_toggle));
+
+ if (PROCESS_FIELDS_CONVERT_FROM) g_free(PROCESS_FIELDS_CONVERT_FROM);
+ PROCESS_FIELDS_CONVERT_FROM = g_strdup(gtk_entry_get_text(GTK_ENTRY(priv->process_convert_from_entry)));
+ if (PROCESS_FIELDS_CONVERT_TO) g_free(PROCESS_FIELDS_CONVERT_TO);
+ PROCESS_FIELDS_CONVERT_TO = g_strdup(gtk_entry_get_text(GTK_ENTRY(priv->process_convert_to_entry)));
+
+ /* Group: convert one character */
+ PF_CONVERT_INTO_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_to_space_toggle));
+ PF_CONVERT_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_to_underscores_toggle));
+ PF_CONVERT =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_convert_toggle));
+
+ /* Group: capitalize */
+ PF_CONVERT_ALL_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_uppercase_toggle));
+ PF_CONVERT_ALL_DOWNCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_all_lowercase_toggle));
+ PF_CONVERT_FIRST_LETTER_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_uppercase_toggle));
+ PF_CONVERT_FIRST_LETTERS_UPPERCASE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_first_style_uppercase_toggle));
+ PF_DETECT_ROMAN_NUMERALS =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_roman_numerals_check));
+
+ /* Group: remove/insert space */
+ PF_REMOVE_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_remove_space_toggle));
+ PF_INSERT_SPACE = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_space_toggle));
+ PF_ONLY_ONE_SPACE =
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->process_insert_one_space_toggle));
+
+ /* Save default masks. */
+ if (SCAN_TAG_DEFAULT_MASK) g_free(SCAN_TAG_DEFAULT_MASK);
+ SCAN_TAG_DEFAULT_MASK =
g_strdup(gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(priv->scan_tag_mask_combo)))));
+ Add_String_To_Combo_List(priv->scan_tag_masks_model, SCAN_TAG_DEFAULT_MASK);
+ Save_Rename_File_Masks_List(priv->scan_tag_masks_model, MASK_EDITOR_TEXT);
+
+ if (RENAME_FILE_DEFAULT_MASK) g_free(RENAME_FILE_DEFAULT_MASK);
+ RENAME_FILE_DEFAULT_MASK = g_strdup (gtk_entry_get_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN
(priv->rename_file_mask_combo)))));
+ Add_String_To_Combo_List(priv->rename_masks_model, RENAME_FILE_DEFAULT_MASK);
+ Save_Rename_File_Masks_List(priv->rename_masks_model, MASK_EDITOR_TEXT);
}
@@ -2671,8 +3360,8 @@ void ScannerWindow_Apply_Changes (void)
static void
Scan_Option_Button (void)
{
- Open_OptionsWindow();
- gtk_notebook_set_current_page(GTK_NOTEBOOK(OptionsNoteBook), OptionsNoteBook_Scanner_Page_Num);
+ et_application_window_show_preferences_dialog_scanner (NULL,
+ ET_APPLICATION_WINDOW (MainWindow));
}
@@ -2815,734 +3504,131 @@ entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data)
NULL);
}
-
-static void
-Scan_Toggle_Legend_Button (void)
-{
- g_return_if_fail (LegendButton != NULL || LegendFrame != NULL);
-
- if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(LegendButton)) )
- gtk_widget_show_all(LegendFrame);
- else
- gtk_widget_hide(LegendFrame);
-}
-
-
-static void
-Scan_Toggle_Mask_Editor_Button (void)
-{
- GtkTreeModel *treemodel;
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- g_return_if_fail (MaskEditorButton != NULL || MaskEditorFrame != NULL ||
- MaskEditorList != NULL);
-
- if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(MaskEditorButton)) )
- {
- gtk_widget_show_all(MaskEditorFrame);
-
- // Select first row in list
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
- if (gtk_tree_model_get_iter_first(treemodel, &iter))
- {
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- gtk_tree_selection_unselect_all(selection);
- gtk_tree_selection_select_iter(selection, &iter);
- }
-
- // Update status of the icon box cause prev instruction show it for all cases
- g_signal_emit_by_name(G_OBJECT(MaskEditorEntry),"changed");
- }else
- {
- gtk_widget_hide(MaskEditorFrame);
- }
-}
-
-
-
-static void
-Process_Fields_Convert_Check_Button_Toggled (GtkWidget *object)
-{
-
gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
-
gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
-}
-
-static void
-Process_Fields_First_Letters_Check_Button_Toggled (GtkWidget *object)
-{
-
gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsDetectRomanNumerals),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(object)));
-}
-
-
-/*
- * Small buttons of Process Fields scanner
- */
-static void
-Select_Fields_Invert_Selection (void)
-{
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField)));
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField),
- !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)));
-}
-
-static void
-Select_Fields_Select_Unselect_All (void)
-{
- static gboolean state = TRUE;
-
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessFileNameField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessTitleField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessArtistField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField),state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessAlbumField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessGenreField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCommentField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessComposerField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessURLField), state);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField), state);
- state = !state;
-}
-
-/*
- * Set sensitive state of the processing check boxes : if no one is selected => all disabled
- */
-static void
-Select_Fields_Set_Sensitive (void)
-{
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFileNameField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessTitleField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessArtistField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumArtistField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessAlbumField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessGenreField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCommentField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessComposerField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessOrigArtistField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessCopyrightField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessURLField))
- || gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessEncodedByField)))
- {
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertIntoSpace), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertSpace), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvert), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertLabelTo), TRUE);
- // Activate the two entries only if the check box is activated, else keep them disabled
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ProcessFieldsConvert)))
- {
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom), TRUE);
- }
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllUppercase), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllDowncase), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLetterUppercase), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLettersUppercase),TRUE);
- Process_Fields_First_Letters_Check_Button_Toggled (ProcessFieldsFirstLettersUppercase);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsRemoveSpace), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsInsertSpace), TRUE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsOnlyOneSpace), TRUE);
- }else
- {
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertIntoSpace), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertSpace), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvert), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertTo), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertLabelTo), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsConvertFrom), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllUppercase), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsAllDowncase), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLetterUppercase), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsFirstLettersUppercase),FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsDetectRomanNumerals), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsRemoveSpace), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsInsertSpace), FALSE);
- gtk_widget_set_sensitive(GTK_WIDGET(ProcessFieldsOnlyOneSpace), FALSE);
- }
-}
-
-/*
- * Callbacks from Mask Editor buttons
- */
-
-/*
- * Callback from the mask edit list
- * Previously known as Mask_Editor_List_Select_Row
- */
-static void
-Mask_Editor_List_Row_Selected (GtkTreeSelection* selection, gpointer data)
-{
- GList *selectedRows;
- gchar *text = NULL;
- GtkTreePath *lastSelected;
- GtkTreeIter lastFile;
- GtkTreeModel *treemodel;
- gboolean valid;
-
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
- /* We must block the function, else the previous selected row will be modified */
- g_signal_handlers_block_by_func(G_OBJECT(MaskEditorEntry),
- G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
-
- selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- /*
- * At some point, we might get called when no rows are selected?
- */
- if (!selectedRows)
- {
- g_signal_handlers_unblock_by_func(G_OBJECT(MaskEditorEntry),
- G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
- return;
- }
-
- /* Get the text of the last selected row */
- lastSelected = (GtkTreePath *)g_list_last(selectedRows)->data;
-
- valid= gtk_tree_model_get_iter(treemodel, &lastFile, lastSelected);
- if (valid)
- {
- gtk_tree_model_get(treemodel, &lastFile, MASK_EDITOR_TEXT, &text, -1);
-
- if (text)
- {
- gtk_entry_set_text(GTK_ENTRY(MaskEditorEntry),text);
- g_free(text);
- }
- }
-
- g_signal_handlers_unblock_by_func(G_OBJECT(MaskEditorEntry),
- G_CALLBACK(Mask_Editor_Entry_Changed),NULL);
-
- g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-
-/*
- * Add a new mask to the list
- */
-static void
-Mask_Editor_List_New (void)
-{
- gchar *text = _("New_mask");
- GtkTreeIter iter;
- GtkTreeSelection *selection;
- GtkTreeModel *treemodel;
-
- g_return_if_fail (MaskEditorList != NULL);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
- gtk_list_store_insert(GTK_LIST_STORE(treemodel), &iter, 0);
- gtk_list_store_set(GTK_LIST_STORE(treemodel), &iter, MASK_EDITOR_TEXT, text, -1);
-
- gtk_tree_selection_unselect_all(selection);
- gtk_tree_selection_select_iter(selection, &iter);
-}
-
-/*
- * Duplicate a mask on the list
- */
-static void
-Mask_Editor_List_Duplicate (void)
+void
+et_scan_dialog_scan_selected_files (EtScanDialog *self)
{
- gchar *text = NULL;
- GList *selectedRows;
+ gint progress_bar_index;
+ gint selectcount;
+ gchar progress_bar_text[30];
+ double fraction;
+ GList *selfilelist = NULL;
GList *l;
- GList *toInsert = NULL;
+ ET_File *etfile;
GtkTreeSelection *selection;
- GtkTreeIter rowIter;
- GtkTreeModel *treeModel;
-
- g_return_if_fail (MaskEditorList != NULL);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
- treeModel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
- if (!selectedRows)
- {
- Log_Print(LOG_ERROR,_("Copy: No row selected"));
- return;
- }
-
- /* Loop through selected rows, duplicating them into a GList
- * We cannot directly insert because the paths in selectedRows
- * get out of date after an insertion */
- for (l = selectedRows; l != NULL; l = g_list_next (l))
- {
- if (gtk_tree_model_get_iter (treeModel, &rowIter,
- (GtkTreePath*)l->data))
- {
- gtk_tree_model_get(treeModel, &rowIter, MASK_EDITOR_TEXT, &text, -1);
- toInsert = g_list_prepend (toInsert, text);
- }
- }
-
- for (l = toInsert; l != NULL; l = g_list_next (l))
- {
- gtk_list_store_insert_with_values (GTK_LIST_STORE(treeModel), &rowIter,
- 0, MASK_EDITOR_TEXT,
- (gchar *)l->data, -1);
- }
- // Set focus to the last inserted line
- if (toInsert)
- Mask_Editor_List_Set_Row_Visible(treeModel,&rowIter);
-
- /* Free data no longer needed */
- g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
- g_list_free_full (toInsert, (GDestroyNotify)g_free);
-}
-
-static void
-Mask_Editor_List_Add (void)
-{
- gint i = 0;
- GtkTreeModel *treemodel;
- gchar *temp;
-
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
- if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
- {
- while(Scan_Masks[i])
- {
- /*if (!g_utf8_validate(Scan_Masks[i], -1, NULL))
- temp = convert_to_utf8(Scan_Masks[i]);
- else
- temp = g_strdup(Scan_Masks[i]);*/
- temp = Try_To_Validate_Utf8_String(Scan_Masks[i]);
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
- NULL, G_MAXINT,
- MASK_EDITOR_TEXT, temp, -1);
- g_free(temp);
- i++;
- }
- } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
- {
- while(Rename_File_Masks[i])
- {
- /*if (!g_utf8_validate(Rename_File_Masks[i], -1, NULL))
- temp = convert_to_utf8(Rename_File_Masks[i]);
- else
- temp = g_strdup(Rename_File_Masks[i]);*/
- temp = Try_To_Validate_Utf8_String(Rename_File_Masks[i]);
-
- gtk_list_store_insert_with_values (GTK_LIST_STORE (treemodel),
- NULL, G_MAXINT,
- MASK_EDITOR_TEXT, temp, -1);
- g_free(temp);
- i++;
- }
- }
-}
+ g_return_if_fail (ETCore->ETFileDisplayedList != NULL ||
+ BrowserList != NULL);
-/*
- * Remove the selected rows from the mask editor list
- */
-static void
-Mask_Editor_List_Remove (void)
-{
- GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreeModel *treemodel;
+ /* Save the current displayed data */
+ ET_Save_File_Data_From_UI(ETCore->ETFileDisplayed);
- g_return_if_fail (MaskEditorList != NULL);
+ /* Initialize status bar */
+ selectcount =
gtk_tree_selection_count_selected_rows(gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList)));
+ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar),0);
+ progress_bar_index = 0;
+ g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
+ /* Set to unsensitive all command buttons (except Quit button) */
+ Disable_Command_Buttons();
- if (gtk_tree_selection_count_selected_rows(selection) == 0) {
- Log_Print(LOG_ERROR,_("Remove: No row selected"));
- return;
- }
+ progress_bar_index = 0;
- if (!gtk_tree_model_get_iter_first(treemodel, &iter))
- return;
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(BrowserList));
+ selfilelist = gtk_tree_selection_get_selected_rows(selection, NULL);
- while (TRUE)
+ for (l = selfilelist; l != NULL; l = g_list_next (l))
{
- if (gtk_tree_selection_iter_is_selected(selection, &iter))
- {
- if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &iter))
- {
- break;
- }
- } else
- {
- if (!gtk_tree_model_iter_next(treemodel, &iter))
- {
- break;
- }
- }
- }
-}
-
-/*
- * Move all selected rows up one place in the mask list
- */
-static void
-Mask_Editor_List_Move_Up (void)
-{
- GtkTreeSelection *selection;
- GList *selectedRows;
- GList *l;
- GtkTreeIter currentFile;
- GtkTreeIter nextFile;
- GtkTreePath *currentPath;
- GtkTreeModel *treemodel;
-
- g_return_if_fail (MaskEditorList != NULL);
+ etfile = Browser_List_Get_ETFile_From_Path (l->data);
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
- selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+ /* Run the current scanner. */
+ Scan_Select_Mode_And_Run_Scanner (self, etfile);
- if (!selectedRows)
- {
- Log_Print(LOG_ERROR,_("Move Up: No row selected"));
- return;
- }
+ fraction = (++progress_bar_index) / (double) selectcount;
+ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), fraction);
+ g_snprintf(progress_bar_text, 30, "%d/%d", progress_bar_index, selectcount);
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), progress_bar_text);
- for (l = selectedRows; l != NULL; l = g_list_next (l))
- {
- currentPath = (GtkTreePath *)l->data;
- if (gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath))
- {
- /* Find the entry above the node... */
- if (gtk_tree_path_prev(currentPath))
- {
- /* ...and if it exists, swap the two rows by iter */
- gtk_tree_model_get_iter(treemodel, &nextFile, currentPath);
- gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile);
- }
- }
+ /* Needed to refresh status bar */
+ while (gtk_events_pending())
+ gtk_main_iteration();
}
- g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
-}
-
-/*
- * Move all selected rows down one place in the mask list
- */
-static void
-Mask_Editor_List_Move_Down (void)
-{
- GtkTreeSelection *selection;
- GList *selectedRows;
- GList *l;
- GtkTreeIter currentFile;
- GtkTreeIter nextFile;
- GtkTreePath *currentPath;
- GtkTreeModel *treemodel;
-
- g_return_if_fail (MaskEditorList != NULL);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
- selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
+ g_list_free_full (selfilelist, (GDestroyNotify)gtk_tree_path_free);
- if (!selectedRows)
- {
- Log_Print(LOG_ERROR,_("Move Down: No row selected"));
- return;
- }
+ // Refresh the whole list (faster than file by file) to show changes
+ Browser_List_Refresh_Whole_List();
- for (l = selectedRows; l != NULL; l = g_list_next (l))
- {
- currentPath = (GtkTreePath *)l->data;
+ /* Display the current file */
+ ET_Display_File_Data_To_UI(ETCore->ETFileDisplayed);
- if (gtk_tree_model_get_iter(treemodel, ¤tFile, currentPath))
- {
- /* Find the entry below the node and swap the two nodes by iter */
- gtk_tree_path_next(currentPath);
- if (gtk_tree_model_get_iter(treemodel, &nextFile, currentPath))
- gtk_list_store_swap(GTK_LIST_STORE(treemodel), ¤tFile, &nextFile);
- }
- }
+ /* To update state of command buttons */
+ Update_Command_Buttons_Sensivity();
- g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(ProgressBar), "");
+ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(ProgressBar), 0);
+ Statusbar_Message(_("All tags have been scanned"),TRUE);
}
/*
- * Set a row visible in the mask editor list (by scrolling the list)
- */
-static void
-Mask_Editor_List_Set_Row_Visible (GtkTreeModel *treeModel, GtkTreeIter *rowIter)
-{
- /*
- * TODO: Make this only scroll to the row if it is not visible
- * (like in easytag GTK1)
- * See function gtk_tree_view_get_visible_rect() ??
- */
- GtkTreePath *rowPath;
-
- g_return_if_fail (treeModel != NULL);
-
- rowPath = gtk_tree_model_get_path(treeModel, rowIter);
- gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(MaskEditorList), rowPath, NULL, FALSE, 0, 0);
- gtk_tree_path_free(rowPath);
-}
-
-/*
- * Save the currently displayed mask list in the mask editor
+ * et_scan_on_response:
+ * @dialog: the scanner window
+ * @response_id: the #GtkResponseType corresponding to the dialog event
+ * @user_data: user data set when the signal was connected
+ *
+ * Handle the response signal of the scanner dialog.
*/
static void
-Mask_Editor_List_Save_Button (void)
+et_scan_on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
{
- Mask_Editor_Clean_Up_Masks_List();
-
- if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_FILL_TAG)
- {
- Save_Scan_Tag_Masks_List(ScanTagListModel, MASK_EDITOR_TEXT);
- } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(ScannerOptionCombo)) == SCANNER_RENAME_FILE)
+ switch (response_id)
{
- Save_Rename_File_Masks_List(RenameFileListModel, MASK_EDITOR_TEXT);
+ case GTK_RESPONSE_APPLY:
+ et_scan_dialog_scan_selected_files (ET_SCAN_DIALOG (dialog));
+ break;
+ case GTK_RESPONSE_CLOSE:
+ gtk_widget_hide (GTK_WIDGET (dialog));
+ break;
+ case GTK_RESPONSE_DELETE_EVENT:
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
}
}
-/*
- * Clean up the currently displayed masks lists, ready for saving
- */
static void
-Mask_Editor_Clean_Up_Masks_List (void)
+et_scan_dialog_finalize (GObject *object)
{
- gchar *text = NULL;
- gchar *text1 = NULL;
- GtkTreeIter currentIter;
- GtkTreeIter itercopy;
- GtkTreeModel *treemodel;
-
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
-
- /* Remove blank and duplicate items */
- if (gtk_tree_model_get_iter_first(treemodel, ¤tIter))
- {
-
- while(TRUE)
- {
- gtk_tree_model_get(treemodel, ¤tIter, MASK_EDITOR_TEXT, &text, -1);
-
- /* Check for blank entry */
- if (text && g_utf8_strlen(text, -1) == 0)
- {
- g_free(text);
-
- if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), ¤tIter))
- break; /* No following entries */
- else
- continue; /* Go on to next entry, which the remove function already moved onto for us */
- }
-
- /* Check for duplicate entries */
- itercopy = currentIter;
- if (!gtk_tree_model_iter_next(treemodel, &itercopy))
- {
- g_free(text);
- break;
- }
-
- while(TRUE)
- {
- gtk_tree_model_get(treemodel, &itercopy, MASK_EDITOR_TEXT, &text1, -1);
- if (text1 && g_utf8_collate(text,text1) == 0)
- {
- g_free(text1);
-
- if (!gtk_list_store_remove(GTK_LIST_STORE(treemodel), &itercopy))
- break; /* No following entries */
- else
- continue; /* Go on to next entry, which the remove function already set iter to for
us */
-
- }
- g_free(text1);
- if (!gtk_tree_model_iter_next(treemodel, &itercopy))
- break;
- }
-
- g_free(text);
-
- if (!gtk_tree_model_iter_next(treemodel, ¤tIter))
- break;
- }
- }
+ G_OBJECT_CLASS (et_scan_dialog_parent_class)->finalize (object);
}
-/*
- * Update the Mask List with the new value of the entry box
- */
static void
-Mask_Editor_Entry_Changed (void)
+et_scan_dialog_init (EtScanDialog *self)
{
- GtkTreeSelection *selection;
- GtkTreePath *firstSelected;
- GtkTreeModel *treemodel;
- GList *selectedRows;
- GtkTreeIter row;
- const gchar* text;
-
- g_return_if_fail (MaskEditorList != NULL);
-
- selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(MaskEditorList));
- treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(MaskEditorList));
- selectedRows = gtk_tree_selection_get_selected_rows(selection, NULL);
-
- if (!selectedRows)
- {
- return;
- }
-
- firstSelected = (GtkTreePath *)g_list_first(selectedRows)->data;
- text = gtk_entry_get_text(GTK_ENTRY(MaskEditorEntry));
-
- if (gtk_tree_model_get_iter (treemodel, &row, firstSelected))
- {
- gtk_list_store_set(GTK_LIST_STORE(treemodel), &row, MASK_EDITOR_TEXT, text, -1);
- }
+ self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ET_TYPE_SCAN_DIALOG,
+ EtScanDialogPrivate);
- g_list_free_full (selectedRows, (GDestroyNotify)gtk_tree_path_free);
+ create_scan_dialog (self);
}
-/*
- * Actions when the a key is pressed into the masks editor clist
- */
-static gboolean
-Mask_Editor_List_Key_Press (GtkWidget *widget, GdkEvent *event)
-{
- if (event && event->type == GDK_KEY_PRESS) {
- GdkEventKey *kevent = (GdkEventKey *)event;
-
- switch(kevent->keyval)
- {
- case GDK_KEY_Delete:
- Mask_Editor_List_Remove();
- break;
-/* case GDK_KEY_Up:
- Mask_Editor_Clist_Move_Up();
- break;
- case GDK_KEY_Down:
- Mask_Editor_Clist_Move_Down();
- break;
-*/ }
- }
- return TRUE;
-}
-
-/*
- * Function when you select an item of the option menu
- */
static void
-Scanner_Option_Menu_Activate_Item (GtkWidget *combo, gpointer data)
+et_scan_dialog_class_init (EtScanDialogClass *klass)
{
- GtkRadioAction *radio_action;
-
- radio_action = GTK_RADIO_ACTION (gtk_ui_manager_get_action (UIManager,
- "/MenuBar/ViewMenu/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);
- gtk_widget_show(LegendButton);
- gtk_widget_show(ScanTagFrame);
- gtk_widget_hide(RenameFileFrame);
- gtk_widget_hide(ProcessFieldsFrame);
- gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(ScanTagListModel));
- Scan_Fill_Tag_Generate_Preview();
- g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled"); /* To hide or show legend frame
*/
- g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled"); /* To hide or show mask editor
frame */
- break;
-
- case SCANNER_RENAME_FILE:
- gtk_widget_show(MaskEditorButton);
- gtk_widget_show(LegendButton);
- gtk_widget_hide(ScanTagFrame);
- gtk_widget_show(RenameFileFrame);
- gtk_widget_hide(ProcessFieldsFrame);
- gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), GTK_TREE_MODEL(RenameFileListModel));
- Scan_Rename_File_Generate_Preview();
- g_signal_emit_by_name(G_OBJECT(LegendButton),"toggled"); /* To hide or show legend frame
*/
- g_signal_emit_by_name(G_OBJECT(MaskEditorButton),"toggled"); /* To hide or show mask editor
frame */
- break;
-
- case SCANNER_PROCESS_FIELDS:
- gtk_widget_hide(MaskEditorButton);
- gtk_widget_hide(LegendButton);
- gtk_widget_hide(ScanTagFrame);
- gtk_widget_hide(RenameFileFrame);
- gtk_widget_show_all(ProcessFieldsFrame);
- // Hide directly the frames to don't change state of the buttons!
- gtk_widget_hide(LegendFrame);
- gtk_widget_hide(MaskEditorFrame);
+ G_OBJECT_CLASS (klass)->finalize = et_scan_dialog_finalize;
- gtk_tree_view_set_model(GTK_TREE_VIEW(MaskEditorList), NULL);
- break;
- }
+ g_type_class_add_private (klass, sizeof (EtScanDialogPrivate));
}
/*
- * Init the position of the scanner window
- */
-static void
-Scan_Set_Scanner_Window_Init_Position (void)
-{
- if (ScannerWindow && SET_SCANNER_WINDOW_POSITION)
- {
- gtk_widget_realize(ScannerWindow);
- gtk_window_move(GTK_WINDOW(ScannerWindow),SCANNER_WINDOW_X,SCANNER_WINDOW_Y);
- }
-}
-
-/*
- * et_scan_on_response:
- * @dialog: the scanner window
- * @response_id: the #GtkResponseType corresponding to the dialog event
- * @user_data: user data set when the signal was connected
+ * et_scan_dialog_new:
*
- * Handle the response signal of the scanner dialog.
+ * Create a new EtScanDialog instance.
+ *
+ * Returns: a new #EtScanDialog
*/
-static void
-et_scan_on_response (GtkDialog *dialog, gint response_id, gpointer user_data)
+EtScanDialog *
+et_scan_dialog_new (void)
{
- switch (response_id)
- {
- case GTK_RESPONSE_APPLY:
- Action_Scan_Selected_Files ();
- break;
- case GTK_RESPONSE_DELETE_EVENT:
- case GTK_RESPONSE_CLOSE:
- ScannerWindow_Quit ();
- break;
- default:
- g_assert_not_reached ();
- break;
- }
+ return g_object_new (ET_TYPE_SCAN_DIALOG, NULL);
}
diff --git a/src/scan_dialog.h b/src/scan_dialog.h
index 83ec928..626b91c 100644
--- a/src/scan_dialog.h
+++ b/src/scan_dialog.h
@@ -1,4 +1,3 @@
-/* scan.h - 2000/06/16 */
/*
* EasyTAG - Tag editor for MP3 and Ogg Vorbis files
* Copyright (C) 2000-2003 Jerome Couderc <easytag gmail com>
@@ -19,51 +18,67 @@
*/
-#ifndef __SCAN_H__
-#define __SCAN_H__
-
+#ifndef ET_SCAN_DIALOG_H_
+#define ET_SCAN_DIALOG_H_
#include "et_core.h"
-/****************
- * Declarations *
- ****************/
-GtkWidget *ScannerWindow;
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define ET_TYPE_SCAN_DIALOG (et_scan_dialog_get_type ())
+#define ET_SCAN_DIALOG(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), ET_TYPE_SCAN_DIALOG, EtScanDialog))
+typedef struct _EtScanDialog EtScanDialog;
+typedef struct _EtScanDialogClass EtScanDialogClass;
+typedef struct _EtScanDialogPrivate EtScanDialogPrivate;
-enum
+struct _EtScanDialog
{
- SCANNER_FILL_TAG = 0,
- SCANNER_RENAME_FILE,
- SCANNER_PROCESS_FIELDS
-}; // Add a new item : Min and Max values used in Open_ScannerWindow
+ /*< private >*/
+ GtkDialog parent_instance;
+ EtScanDialogPrivate *priv;
+};
-enum {
- MASK_EDITOR_TEXT,
- MASK_EDITOR_COUNT
+struct _EtScanDialogClass
+{
+ /*< private >*/
+ GtkDialogClass parent_class;
};
+/*
+ * The mode for the scanner window.
+ */
+typedef enum
+{
+ ET_SCAN_TYPE_FILL_TAG,
+ ET_SCAN_TYPE_RENAME_FILE,
+ ET_SCAN_TYPE_PROCESS_FIELDS
+} EtScanType;
+
+GType et_scan_dialog_get_type (void);
+EtScanDialog *et_scan_dialog_new (void);
+void et_scan_dialog_apply_changes (EtScanDialog *self);
+void et_scan_dialog_open (EtScanDialog *self, EtScanType scanner_type);
+void et_scan_dialog_scan_selected_files (EtScanDialog *self);
+void et_scan_dialog_update_previews (EtScanDialog *self);
+G_END_DECLS
-/**************
- * Prototypes *
- **************/
-void Scan_Select_Mode_And_Run_Scanner (ET_File *ETFile);
+enum {
+ MASK_EDITOR_TEXT,
+ MASK_EDITOR_COUNT
+};
+
+void Scan_Select_Mode_And_Run_Scanner (EtScanDialog *self, ET_File *ETFile);
gchar *Scan_Generate_New_Filename_From_Mask (ET_File *ETFile, gchar *mask, gboolean
no_dir_check_or_conversion);
gchar *Scan_Generate_New_Directory_Name_From_Mask (ET_File *ETFile, gchar *mask, gboolean
no_dir_check_or_conversion);
-void Scan_Rename_File_Generate_Preview (void);
-void Scan_Fill_Tag_Generate_Preview (void);
void Scan_Rename_Directory_Generate_Preview (void);
-void et_scan_show (GtkAction *action, gpointer user_data);
-
void entry_check_rename_file_mask (GtkEntry *entry, gpointer user_data);
-void Scan_Process_Fields_First_Letters_Uppercase (gchar **str);
-
-void Init_ScannerWindow (void);
-void Open_ScannerWindow (gint scanner_type);
-void ScannerWindow_Apply_Changes (void);
+void Scan_Process_Fields_First_Letters_Uppercase (EtScanDialog *self, gchar **str);
-#endif /* __SCAN_H__ */
+#endif /* ET_SCAN_DIALOG_H_ */
diff --git a/src/search_dialog.c b/src/search_dialog.c
index 49b5975..5bc55c6 100644
--- a/src/search_dialog.c
+++ b/src/search_dialog.c
@@ -30,7 +30,7 @@
#include "log.h"
#include "misc.h"
#include "picture.h"
-#include "scan.h"
+#include "scan_dialog.h"
#include "setting.h"
/* TODO: Use G_DEFINE_TYPE_WITH_PRIVATE. */
diff --git a/src/setting.c b/src/setting.c
index a9a5f29..a004491 100644
--- a/src/setting.c
+++ b/src/setting.c
@@ -192,9 +192,6 @@ static const tConfigVariable Config_Variables[] =
{"default_comment", CV_TYPE_STRING, &DEFAULT_COMMENT },
{"crc32_comment", CV_TYPE_BOOL, &SET_CRC32_COMMENT },
{"open_scanner_window_on_startup", CV_TYPE_BOOL, &OPEN_SCANNER_WINDOW_ON_STARTUP },
- {"set_scanner_window_position", CV_TYPE_BOOL, &SET_SCANNER_WINDOW_POSITION },
- {"scanner_window_x", CV_TYPE_INT, &SCANNER_WINDOW_X },
- {"scanner_window_y", CV_TYPE_INT, &SCANNER_WINDOW_Y },
{"confirm_before_exit", CV_TYPE_BOOL, &CONFIRM_BEFORE_EXIT },
{"confirm_write_tag", CV_TYPE_BOOL, &CONFIRM_WRITE_TAG },
@@ -422,7 +419,7 @@ void Init_Config_Variables (void)
/*
* Scanner
*/
- SCANNER_TYPE = SCANNER_FILL_TAG;
+ SCANNER_TYPE = ET_SCAN_TYPE_FILL_TAG;
SCAN_MASK_EDITOR_BUTTON = 0;
SCAN_LEGEND_BUTTON = 0;
FTS_CONVERT_UNDERSCORE_AND_P20_INTO_SPACE = 1;
@@ -435,9 +432,6 @@ void Init_Config_Variables (void)
DEFAULT_COMMENT = g_strdup("Tagged with EasyTAG");
SET_CRC32_COMMENT = 0;
OPEN_SCANNER_WINDOW_ON_STARTUP = 0;
- SET_SCANNER_WINDOW_POSITION = 1; // Set it to '0' if problem with some Windows Manager
- SCANNER_WINDOW_X = -1;
- SCANNER_WINDOW_Y = -1;
/*
* Confirmation
@@ -805,12 +799,6 @@ Apply_Changes_Of_Preferences_Window (void)
// FIX ME : commented as it reloads files...
//Browser_Tree_Rebuild(NULL);
}
-
- if (ScannerWindow)
- {
- gtk_window_set_transient_for (GTK_WINDOW (ScannerWindow),
- GTK_WINDOW (MainWindow));
- }
}
/*
@@ -829,8 +817,9 @@ Apply_Changes_Of_UI (void)
* Function also called when destroying the window. */
et_preferences_dialog_apply_changes (ET_PREFERENCES_DIALOG (et_application_window_get_preferences_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
- // Configuration of the scanner window (see scan.c) - Function also called when destroying the window
- ScannerWindow_Apply_Changes();
+ /* Configuration of the scanner window (see scan_dialog.c).
+ * Function also called when destroying the window. */
+ et_scan_dialog_apply_changes (ET_SCAN_DIALOG (et_application_window_get_scan_dialog
(ET_APPLICATION_WINDOW (MainWindow))));
/* Configuration of the cddb window (see cddb_dialog.c).
* Function also called when destroying the window. */
diff --git a/src/setting.h b/src/setting.h
index 6aa2b84..7d0e1f3 100644
--- a/src/setting.h
+++ b/src/setting.h
@@ -139,9 +139,6 @@ gint SET_DEFAULT_COMMENT;
gchar *DEFAULT_COMMENT;
gint SET_CRC32_COMMENT;
gint OPEN_SCANNER_WINDOW_ON_STARTUP;
-gint SET_SCANNER_WINDOW_POSITION;
-gint SCANNER_WINDOW_X;
-gint SCANNER_WINDOW_Y;
/* Confirmation */
gint CONFIRM_BEFORE_EXIT;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]