gnome-commander r2327 - in trunk: . src
- From: epiotr svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-commander r2327 - in trunk: . src
- Date: Mon, 1 Dec 2008 18:23:49 +0000 (UTC)
Author: epiotr
Date: Mon Dec 1 18:23:48 2008
New Revision: 2327
URL: http://svn.gnome.org/viewvc/gnome-commander?rev=2327&view=rev
Log:
advrename: 'Profiles...' button for loading saved settings
Modified:
trunk/ChangeLog
trunk/src/gnome-cmd-advrename-dialog.cc
trunk/src/gnome-cmd-advrename-dialog.h
Modified: trunk/src/gnome-cmd-advrename-dialog.cc
==============================================================================
--- trunk/src/gnome-cmd-advrename-dialog.cc (original)
+++ trunk/src/gnome-cmd-advrename-dialog.cc Mon Dec 1 18:23:48 2008
@@ -71,9 +71,9 @@
GtkWidget *files_view;
- enum {DIR_MENU, FILE_MENU, COUNTER_MENU, DATE_MENU, METATAG_MENU, NUM_MENUS};
+ enum {DIR_MENU, FILE_MENU, COUNTER_MENU, DATE_MENU, METATAG_MENU, PROFILE_MENU, NUM_MENUS};
- GtkWidget *menu[NUM_MENUS];
+ GtkWidget *menu_button[NUM_MENUS];
static GtkItemFactoryEntry dir_items[];
static GtkItemFactoryEntry name_items[];
@@ -87,13 +87,16 @@
static gchar *translate_menu (const gchar *path, gpointer data);
- GtkWidget *create_placeholder_menu(int menu_type);
- GtkWidget *create_button_with_menu(gchar *label_text, int menu_type);
+ GtkWidget *create_placeholder_menu(int menu_type, GnomeCmdData::AdvrenameConfig *cfg);
+ GtkWidget *create_button_with_menu(gchar *label_text, int menu_type, GnomeCmdData::AdvrenameConfig *cfg=NULL);
void insert_tag(const gchar *text);
static void insert_text_tag(GnomeCmdAdvrenameDialog::Private *priv, guint n, GtkWidget *widget);
static void insert_num_tag(GnomeCmdAdvrenameDialog::Private *priv, guint tag, GtkWidget *widget);
+ static void manage_profiles(GnomeCmdAdvrenameDialog::Private *priv, guint unused, GtkWidget *menu);
+ static void load_profile(GnomeCmdAdvrenameDialog::Private *priv, guint profile_idx, GtkWidget *menu);
+
void files_view_popup_menu (GtkWidget *treeview, GnomeCmdAdvrenameDialog *dialog, GdkEventButton *event=NULL);
static void on_template_entry_changed(GtkEntry *entry, GnomeCmdAdvrenameDialog *dialog);
@@ -363,6 +366,7 @@
inline GnomeCmdAdvrenameDialog::Private::Private()
{
+ memset(menu_button, 0, sizeof(menu_button));
convert_case = gcmd_convert_unchanged;
trim_blanks = gcmd_convert_strip;
template_has_counters = FALSE;
@@ -380,7 +384,7 @@
}
-inline GtkWidget *GnomeCmdAdvrenameDialog::Private::create_placeholder_menu(int menu_type)
+inline GtkWidget *GnomeCmdAdvrenameDialog::Private::create_placeholder_menu(int menu_type, GnomeCmdData::AdvrenameConfig *cfg)
{
static guint items_size[] = {G_N_ELEMENTS(dir_items),
G_N_ELEMENTS(name_items),
@@ -438,30 +442,75 @@
return gtk_item_factory_get_widget (ifac, "<main>");
}
+ case PROFILE_MENU:
+ {
+ guint items_size = cfg->profiles.empty() ? 1 : cfg->profiles.size()+3;
+ GtkItemFactoryEntry *items = g_try_new0 (GtkItemFactoryEntry, items_size);
+ GtkItemFactoryEntry *i = items;
+
+ g_return_val_if_fail (items!=NULL, NULL);
+
+ i->path = g_strdup (_("/_Save Profile As..."));
+ i->callback = (GtkItemFactoryCallback) manage_profiles;
+ i->callback_action = TRUE;
+ i->item_type = "<StockItem>";
+ i->extra_data = GTK_STOCK_SAVE_AS;
+ ++i;
+
+ if (!cfg->profiles.empty())
+ {
+ i->path = g_strdup (_("/_Manage Profiles..."));
+ i->callback = (GtkItemFactoryCallback) manage_profiles;
+ i->item_type = "<StockItem>";
+ i->extra_data = GTK_STOCK_EDIT;
+ ++i;
+
+ i->path = g_strdup ("/");
+ i->item_type = "<Separator>";
+ ++i;
+
+ for (vector<GnomeCmdData::AdvrenameConfig::Profile>::const_iterator p=cfg->profiles.begin(); p!=cfg->profiles.end(); ++p, ++i)
+ {
+ i->path = g_strconcat ("/", p->name.c_str(), NULL);
+ i->callback = (GtkItemFactoryCallback) load_profile;
+ i->callback_action = (i-items)-3;
+ i->item_type = "<StockItem>";
+ i->extra_data = GTK_STOCK_REVERT_TO_SAVED;
+ }
+ }
+
+ GtkItemFactory *ifac = gtk_item_factory_new (GTK_TYPE_MENU, "<main>", NULL);
+
+ gtk_item_factory_create_items (ifac, items_size, items, this);
+
+ for (guint i=0; i<items_size; ++i)
+ g_free (items[i].path);
+
+ g_free (items);
+
+ return gtk_item_factory_get_widget (ifac, "<main>");
+ }
+
default:
return NULL;
}
}
-inline GtkWidget *GnomeCmdAdvrenameDialog::Private::create_button_with_menu(gchar *label_text, int menu_type)
+inline GtkWidget *GnomeCmdAdvrenameDialog::Private::create_button_with_menu(gchar *label_text, int menu_type, GnomeCmdData::AdvrenameConfig *cfg)
{
- GtkWidget *arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
- GtkWidget *label = gtk_label_new (label_text);
+ GtkWidget *button = gtk_button_new ();
GtkWidget *hbox = gtk_hbox_new (FALSE, 3);
- gtk_box_pack_start(GTK_BOX (hbox), label, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX (hbox), arrow, FALSE, FALSE, 0);
-
- GtkWidget *button = gtk_button_new ();
gtk_container_add (GTK_CONTAINER (button), hbox);
- menu[menu_type] = create_placeholder_menu(menu_type);
+ gtk_box_pack_start (GTK_BOX (hbox), gtk_label_new (label_text), TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE), FALSE, FALSE, 0);
gtk_widget_set_events (button, GDK_BUTTON_PRESS_MASK);
- g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK (on_menu_button_clicked), menu[menu_type]);
+ g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (on_menu_button_clicked), create_placeholder_menu(menu_type, cfg));
- gtk_widget_show_all(button);
+ menu_button[menu_type] = button;
return button;
}
@@ -523,6 +572,36 @@
}
+void GnomeCmdAdvrenameDialog::Private::manage_profiles(GnomeCmdAdvrenameDialog::Private *priv, guint new_profile, GtkWidget *menu)
+{
+}
+
+
+void GnomeCmdAdvrenameDialog::Private::load_profile(GnomeCmdAdvrenameDialog::Private *priv, guint profile_idx, GtkWidget *menu)
+{
+ GtkWidget *dialog = gtk_widget_get_ancestor (priv->menu_button[PROFILE_MENU], GNOME_CMD_TYPE_ADVRENAME_DIALOG);
+
+ g_return_if_fail (dialog!=NULL);
+
+ GnomeCmdData::AdvrenameConfig &cfg = GNOME_CMD_ADVRENAME_DIALOG(dialog)->defaults;
+
+ g_return_if_fail (profile_idx<cfg.profiles.size());
+
+ GnomeCmdData::AdvrenameConfig::Profile &p = cfg.profiles[profile_idx];
+
+ gtk_entry_set_text (GTK_ENTRY (priv->template_entry), p.template_string.empty() ? "$N" : p.template_string.c_str());
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->counter_start_spin), p.counter_start);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->counter_step_spin), p.counter_step);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->counter_digits_spin), p.counter_width);
+
+ on_regex_remove_all_btn_clicked (NULL, GNOME_CMD_ADVRENAME_DIALOG(dialog));
+ cfg.fill_regex_model(p);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->case_combo), 0);
+ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->trim_combo), 3);
+}
+
+
void GnomeCmdAdvrenameDialog::Private::on_menu_button_clicked(GtkButton *widget, GtkWidget *menu)
{
GdkEventButton *event = (GdkEventButton *) gtk_get_current_event();
@@ -963,6 +1042,9 @@
g_signal_stop_emission_by_name (dialog, "response");
break;
+ case GCMD_RESPONSE_PROFILES:
+ break;
+
case GCMD_RESPONSE_RESET:
gtk_entry_set_text (GTK_ENTRY (dialog->priv->template_entry), "$N");
gtk_spin_button_set_value (GTK_SPIN_BUTTON (dialog->priv->counter_start_spin), 1);
@@ -1226,15 +1308,6 @@
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->priv->files_view));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
}
-
- gtk_dialog_add_buttons (*dialog,
- GTK_STOCK_HELP, GTK_RESPONSE_HELP,
- _("Reset"), GnomeCmdAdvrenameDialog::GCMD_RESPONSE_RESET,
- GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
- GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
- NULL);
-
- gtk_dialog_set_default_response (*dialog, GTK_RESPONSE_APPLY);
}
@@ -1437,6 +1510,19 @@
{
gtk_window_set_default_size (*this, defaults.width, defaults.height);
+ gtk_dialog_add_action_widget (*this,
+ priv->create_button_with_menu (_("Profiles..."), Private::PROFILE_MENU, &cfg),
+ GCMD_RESPONSE_PROFILES);
+
+ gtk_dialog_add_buttons (*this,
+ GTK_STOCK_HELP, GTK_RESPONSE_HELP,
+ _("Reset"), GCMD_RESPONSE_RESET,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+ GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
+ NULL);
+
+ gtk_dialog_set_default_response (*this, GTK_RESPONSE_APPLY);
+
// Template
for (GList *i=defaults.templates.ents; i; i=i->next)
gtk_combo_box_append_text (GTK_COMBO_BOX (priv->template_combo), (const gchar *) i->data);
Modified: trunk/src/gnome-cmd-advrename-dialog.h
==============================================================================
--- trunk/src/gnome-cmd-advrename-dialog.h (original)
+++ trunk/src/gnome-cmd-advrename-dialog.h Mon Dec 1 18:23:48 2008
@@ -53,7 +53,7 @@
void *operator new (size_t size) { return g_object_new (GNOME_CMD_TYPE_ADVRENAME_DIALOG, NULL); }
void operator delete (void *p) { g_free (p); }
- enum {GCMD_RESPONSE_RESET=123};
+ enum {GCMD_RESPONSE_PROFILES=123, GCMD_RESPONSE_RESET};
enum {COL_REGEX, COL_MALFORMED_REGEX, COL_PATTERN, COL_REPLACE, COL_MATCH_CASE, NUM_REGEX_COLS};
enum {COL_FILE, COL_NAME, COL_NEW_NAME, COL_SIZE, COL_DATE, COL_RENAME_FAILED, NUM_FILE_COLS};
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]