[nautilus-actions] NactAssistantImport: refactoring
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] NactAssistantImport: refactoring
- Date: Thu, 22 Dec 2011 00:06:48 +0000 (UTC)
commit a19ec4f6a8204c8d623a1aa11d82c8f8d3e6e25d
Author: Pierre Wieser <pwieser trychlos org>
Date: Mon Dec 19 06:51:25 2011 +0100
NactAssistantImport: refactoring
- File selection: enable to forward if at least one loadable file
- Import mode: replace the radio button group with a list view
- Confirm and Summary pages: fully review the layout.
ChangeLog | 9 +
src/nact/Makefile.am | 18 +-
src/nact/import-mode-ask.png | Bin 0 -> 4017 bytes
src/nact/import-mode-no-import.png | Bin 0 -> 3874 bytes
src/nact/import-mode-override.png | Bin 0 -> 4490 bytes
src/nact/import-mode-renumber.png | Bin 0 -> 3882 bytes
src/nact/nact-assistant-import.c | 634 ++++++++++++++++++++++-------------
src/nact/nact-assistant-import.ui | 340 ++++++++------------
8 files changed, 556 insertions(+), 445 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index cafdd48..70fe9a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2011-12-19 Pierre Wieser <pwieser trychlos org>
+ Review import assistant.
+ - File selection: enable to forward if at least one loadable file.
+ - Import mode: replace the radio button group with a list view.
+ - Confirm and Summary pages: fully review the layout.
+
+ * src/nact/Makefile.am:
+ * src/nact/nact-assistant-import.c:
+ * src/nact/nact-assistant-import.ui: Updated accordingly.
+
* src/nact/base-gtk-utils.c
(base_gtk_utils_get_pixbuf, base_gtk_utils_render): Fix typos in a comment.
diff --git a/src/nact/Makefile.am b/src/nact/Makefile.am
index 17e0cf2..8a212d8 100644
--- a/src/nact/Makefile.am
+++ b/src/nact/Makefile.am
@@ -160,9 +160,12 @@ nautilus_actions_config_tool_LDADD = \
$(NAUTILUS_ACTIONS_LIBS) \
$(NULL)
-pkgdata_DATA = \
+actions_files = \
nautilus-actions-config-tool.actions \
nautilus-actions-maintainer.actions \
+ $(NULL)
+
+ui_files = \
nact-add-capability.ui \
nact-add-scheme.ui \
nact-assistant-export.ui \
@@ -170,10 +173,23 @@ pkgdata_DATA = \
nact-icon-chooser.ui \
nact-preferences.ui \
nautilus-actions-config-tool.ui \
+ $(NULL)
+
+images_files = \
+ import-mode-ask.png \
+ import-mode-no-import.png \
+ import-mode-override.png \
+ import-mode-renumber.png \
locked.png \
transparent.png \
$(NULL)
+pkgdata_DATA = \
+ $(actions_files) \
+ $(ui_files) \
+ $(images_files) \
+ $(NULL)
+
@INTLTOOL_DESKTOP_RULE@
applications_in_files = nact.desktop.in
diff --git a/src/nact/import-mode-ask.png b/src/nact/import-mode-ask.png
new file mode 100644
index 0000000..0988652
Binary files /dev/null and b/src/nact/import-mode-ask.png differ
diff --git a/src/nact/import-mode-no-import.png b/src/nact/import-mode-no-import.png
new file mode 100644
index 0000000..dc3c8b9
Binary files /dev/null and b/src/nact/import-mode-no-import.png differ
diff --git a/src/nact/import-mode-override.png b/src/nact/import-mode-override.png
new file mode 100644
index 0000000..81af630
Binary files /dev/null and b/src/nact/import-mode-override.png differ
diff --git a/src/nact/import-mode-renumber.png b/src/nact/import-mode-renumber.png
new file mode 100644
index 0000000..39ccb82
Binary files /dev/null and b/src/nact/import-mode-renumber.png differ
diff --git a/src/nact/nact-assistant-import.c b/src/nact/nact-assistant-import.c
index fa145b9..858f04a 100644
--- a/src/nact/nact-assistant-import.c
+++ b/src/nact/nact-assistant-import.c
@@ -32,6 +32,7 @@
#include <config.h>
#endif
+#include <gdk/gdk.h>
#include <glib/gi18n.h>
#include <string.h>
@@ -54,10 +55,9 @@
* 0 Intro Introduction
* 1 Content Selection of the files
* 2 Content Duplicate management: what to do with duplicates ?
- * 2 Confirm Display the selected files before import
- * 3 Summary Import is done: summary of the done operations
+ * 3 Confirm Display the selected files before import
+ * 4 Summary Import is done: summary of the done operations
*/
-
enum {
ASSIST_PAGE_INTRO = 0,
ASSIST_PAGE_FILES_SELECTION,
@@ -66,6 +66,58 @@ enum {
ASSIST_PAGE_DONE
};
+/* column ordering in the duplicates treeview
+ */
+enum {
+ IMAGE_COLUMN = 0,
+ LABEL_COLUMN,
+ TOOLTIP_COLUMN,
+ MODE_COLUMN,
+ INDEX_COLUMN,
+ N_COLUMN
+};
+
+/* import modes
+ */
+typedef struct {
+ guint mode;
+ gchar *label;
+ gchar *tooltip;
+ gchar *image;
+}
+ ImportModeDefs;
+
+static ImportModeDefs st_import_modes[] = {
+ { IMPORTER_MODE_NO_IMPORT,
+ N_( "Do not import the item whose ID already exists" ),
+ N_( "This used to be the historical behavior.\n" \
+ "The selected file will be marked as \"NOT OK\" in the Summary page.\n" \
+ "The existing item will not be modified." ),
+ "import-mode-no-import.png"
+ },
+ { IMPORTER_MODE_RENUMBER,
+ N_( "Allocate a new identifier for the imported item" ),
+ N_( "The selected file will be imported with a slightly " \
+ "modified label indicating the renumbering.\n" \
+ "The existing item will not be modified." ),
+ "import-mode-renumber.png"
+ },
+ { IMPORTER_MODE_OVERRIDE,
+ N_( "Override the existing item" ),
+ N_( "The item found in the selected file will silently " \
+ "override the current one which has the same identifier.\n" \
+ "Be warned: this mode may be dangerous. " \
+ "You will not be prompted another time." ),
+ "import-mode-override.png"
+ },
+ { IMPORTER_MODE_ASK,
+ N_( "Ask me" ),
+ N_( "You will be asked each time an imported ID already exists." ),
+ "import-mode-ask.png"
+ },
+ { 0 }
+};
+
/* private class data
*/
struct _NactAssistantImportClassPrivate {
@@ -77,6 +129,9 @@ struct _NactAssistantImportClassPrivate {
struct _NactAssistantImportPrivate {
gboolean dispose_has_run;
GtkWidget *file_chooser;
+ GtkTreeView *duplicates_listview;
+ guint mode;
+ guint index_mode;
GList *results;
};
@@ -92,24 +147,30 @@ static void instance_init( GTypeInstance *instance, gpointer klass );
static void instance_dispose( GObject *application );
static void instance_finalize( GObject *application );
+static void on_base_initialize_gtk( NactAssistantImport *dialog );
+static void create_duplicates_treeview_model( NactAssistantImport *dialog );
static void on_base_initialize_base_window( NactAssistantImport *dialog );
static void runtime_init_intro( NactAssistantImport *window, GtkAssistant *assistant );
static void runtime_init_file_selector( NactAssistantImport *window, GtkAssistant *assistant );
static void on_file_selection_changed( GtkFileChooser *chooser, gpointer user_data );
-static gboolean has_readable_files( GSList *uris );
+static gboolean has_loadable_files( GSList *uris );
static void runtime_init_duplicates( NactAssistantImport *window, GtkAssistant *assistant );
-static void set_import_mode( GtkAssistant *assistant, gint mode );
+static void clear_duplicates_treeview( NactAssistantImport *window );
+static void populate_duplicates_treeview( NactAssistantImport *window );
+static void on_duplicates_selection_changed( GtkTreeSelection *selection, NactAssistantImport *window );
+static void select_import_mode( NactAssistantImport *window );
+static gboolean iter_on_model_for_select( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, NactAssistantImport *window );
static void assistant_prepare( BaseAssistant *window, GtkAssistant *assistant, GtkWidget *page );
static void prepare_confirm( NactAssistantImport *window, GtkAssistant *assistant, GtkWidget *page );
-static gint get_import_mode( NactAssistantImport *window );
-static gchar *add_import_mode( NactAssistantImport *window, const gchar *text );
static void assistant_apply( BaseAssistant *window, GtkAssistant *assistant );
static NAObjectItem *check_for_existence( const NAObjectItem *, NactMainWindow *window );
static void prepare_importdone( NactAssistantImport *window, GtkAssistant *assistant, GtkWidget *page );
static void free_results( GList *list );
static GtkWidget *find_widget_from_page( GtkWidget *page, const gchar *name );
+static GtkTreeView *get_duplicates_treeview_from_assistant_import( NactAssistantImport *window );
+static GtkTreeView *get_duplicates_treeview_from_page( GtkWidget *page );
GType
nact_assistant_import_get_type( void )
@@ -188,6 +249,9 @@ instance_init( GTypeInstance *instance, gpointer klass )
self->private->results = NULL;
base_window_signal_connect( BASE_WINDOW( instance ),
+ G_OBJECT( instance ), BASE_SIGNAL_INITIALIZE_GTK, G_CALLBACK( on_base_initialize_gtk ));
+
+ base_window_signal_connect( BASE_WINDOW( instance ),
G_OBJECT( instance ), BASE_SIGNAL_INITIALIZE_WINDOW, G_CALLBACK( on_base_initialize_base_window ));
self->private->dispose_has_run = FALSE;
@@ -208,6 +272,8 @@ instance_dispose( GObject *window )
self->private->dispose_has_run = TRUE;
+ clear_duplicates_treeview( self );
+
/* chain up to the parent class */
if( G_OBJECT_CLASS( st_parent_class )->dispose ){
G_OBJECT_CLASS( st_parent_class )->dispose( window );
@@ -268,6 +334,84 @@ nact_assistant_import_run( BaseWindow *main_window )
}
static void
+on_base_initialize_gtk( NactAssistantImport *dialog )
+{
+ static const gchar *thisfn = "nact_assistant_import_on_base_initialize_gtk";
+
+ g_return_if_fail( NACT_IS_ASSISTANT_IMPORT( dialog ));
+
+ if( !dialog->private->dispose_has_run ){
+ g_debug( "%s: dialog=%p", thisfn, ( void * ) dialog );
+
+#if !GTK_CHECK_VERSION( 3,0,0 )
+ guint width = 10;
+ GtkAssistant *assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( dialog )));
+ /* selecting files */
+ GtkWidget *page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_FILES_SELECTION );
+ GtkWidget *container = find_widget_from_page( page, "ImportFileChooser" );
+ g_object_set( G_OBJECT( container ), "border-width", width, NULL );
+ /* managing duplicates */
+ page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
+ container = find_widget_from_page( page, "p2-l2-vbox1" );
+ g_object_set( G_OBJECT( container ), "border-width", width, NULL );
+ /* summary */
+ page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_CONFIRM );
+ container = find_widget_from_page( page, "p3-l4-vbox1" );
+ g_object_set( G_OBJECT( container ), "border-width", width, NULL );
+ /* import is done */
+ page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DONE );
+ container = find_widget_from_page( page, "p4-l4-vbox1" );
+ g_object_set( G_OBJECT( container ), "border-width", width, NULL );
+#endif
+ }
+
+ create_duplicates_treeview_model( dialog );
+}
+
+static void
+create_duplicates_treeview_model( NactAssistantImport *dialog )
+{
+ static const gchar *thisfn = "nact_assistant_import_create_duplicates_treeview_model";
+ GtkListStore *model;
+ GtkTreeViewColumn *column;
+ GtkTreeSelection *selection;
+
+ g_return_if_fail( NACT_IS_ASSISTANT_IMPORT( dialog ));
+
+ if( !dialog->private->dispose_has_run ){
+ g_debug( "%s: dialog=%p", thisfn, ( void * ) dialog );
+ }
+
+ dialog->private->duplicates_listview = get_duplicates_treeview_from_assistant_import( dialog );
+ g_return_if_fail( GTK_IS_TREE_VIEW( dialog->private->duplicates_listview ));
+
+ model = gtk_list_store_new( N_COLUMN, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT );
+ gtk_tree_view_set_model( dialog->private->duplicates_listview, GTK_TREE_MODEL( model ));
+ g_object_unref( model );
+
+ /* create visible columns on the tree view
+ */
+ column = gtk_tree_view_column_new_with_attributes(
+ "image",
+ gtk_cell_renderer_pixbuf_new(),
+ "pixbuf", IMAGE_COLUMN,
+ NULL );
+ gtk_tree_view_append_column( dialog->private->duplicates_listview, column );
+
+ column = gtk_tree_view_column_new_with_attributes(
+ "label",
+ gtk_cell_renderer_text_new(),
+ "text", LABEL_COLUMN,
+ NULL );
+ gtk_tree_view_append_column( dialog->private->duplicates_listview, column );
+
+ g_object_set( G_OBJECT( dialog->private->duplicates_listview ), "tooltip-column", TOOLTIP_COLUMN, NULL );
+
+ selection = gtk_tree_view_get_selection( dialog->private->duplicates_listview );
+ gtk_tree_selection_set_mode( selection, GTK_SELECTION_BROWSE );
+}
+
+static void
on_base_initialize_base_window( NactAssistantImport *dialog )
{
static const gchar *thisfn = "nact_assistant_import_on_base_initialize_base_window";
@@ -334,9 +478,11 @@ runtime_init_file_selector( NactAssistantImport *window, GtkAssistant *assistant
"selection-changed",
G_CALLBACK( on_file_selection_changed ));
- gtk_assistant_set_page_complete( assistant, page, FALSE );
window->private->file_chooser = chooser;
+
+ gtk_assistant_set_page_complete( assistant, page, FALSE );
}
+
static void
on_file_selection_changed( GtkFileChooser *chooser, gpointer user_data )
{
@@ -354,7 +500,7 @@ on_file_selection_changed( GtkFileChooser *chooser, gpointer user_data )
if( pos == ASSIST_PAGE_FILES_SELECTION ){
uris = gtk_file_chooser_get_uris( chooser );
- enabled = has_readable_files( uris );
+ enabled = has_loadable_files( uris );
if( enabled ){
/*
@@ -379,108 +525,184 @@ on_file_selection_changed( GtkFileChooser *chooser, gpointer user_data )
}
/*
- * enable forward button if current selection has at least one readable file
+ * enable forward button if current selection has at least one loadable file
*/
static gboolean
-has_readable_files( GSList *uris )
+has_loadable_files( GSList *uris )
{
- static const gchar *thisfn = "nact_assistant_import_has_readable_files";
GSList *iuri;
- int readables = 0;
gchar *uri;
- GFile *file;
- GFileInfo *info;
- GFileType type;
- GError *error = NULL;
- gboolean readable;
+ int loadables = 0;
for( iuri = uris ; iuri ; iuri = iuri->next ){
-
uri = ( gchar * ) iuri->data;
- if( !strlen( uri )){
- continue;
- }
-
- file = g_file_new_for_uri( uri );
- info = g_file_query_info( file,
- G_FILE_ATTRIBUTE_ACCESS_CAN_READ "," G_FILE_ATTRIBUTE_STANDARD_TYPE,
- G_FILE_QUERY_INFO_NONE, NULL, &error );
- if( error ){
- g_warning( "%s: g_file_query_info error: %s", thisfn, error->message );
- g_error_free( error );
- g_object_unref( file );
- continue;
- }
-
- type = g_file_info_get_file_type( info );
- if( type != G_FILE_TYPE_REGULAR ){
- g_debug( "%s: %s is not a file", thisfn, uri );
- g_object_unref( info );
+ if( !strlen( uri )){
continue;
}
- readable = g_file_info_get_attribute_boolean( info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ );
- if( !readable ){
- g_debug( "%s: %s is not readable", thisfn, uri );
- g_object_unref( info );
- continue;
+ if( na_core_utils_file_is_loadable( uri )){
+ loadables += 1;
}
-
- readables += 1;
- g_object_unref( info );
}
- return( readables > 0 );
+ return( loadables > 0 );
}
static void
runtime_init_duplicates( NactAssistantImport *window, GtkAssistant *assistant )
{
static const gchar *thisfn = "nact_assistant_import_runtime_init_duplicates";
- GtkWidget *page;
guint mode;
+ GtkTreeSelection *selection;
+ GtkWidget *page;
+
+ g_return_if_fail( GTK_IS_TREE_VIEW( window->private->duplicates_listview ));
g_debug( "%s: window=%p, assistant=%p",
thisfn, ( void * ) window, ( void * ) assistant );
+ clear_duplicates_treeview( window );
+ populate_duplicates_treeview( window );
+
mode = na_iprefs_get_import_mode( NA_IPREFS_IMPORT_PREFERRED_MODE, NULL );
- set_import_mode( assistant, mode );
+ window->private->mode = mode;
+ select_import_mode( window );
+
+ /* monitors the selection */
+ selection = gtk_tree_view_get_selection( window->private->duplicates_listview );
+ base_window_signal_connect( BASE_WINDOW( window ),
+ G_OBJECT( selection ), "changed", G_CALLBACK( on_duplicates_selection_changed ));
page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
gtk_assistant_set_page_complete( assistant, page, TRUE );
}
static void
-set_import_mode( GtkAssistant *assistant, gint mode )
+clear_duplicates_treeview( NactAssistantImport *window )
{
- GtkWidget *page;
- GtkWidget *button;
+ static const gchar *thisfn = "nact_assistant_import_clear_duplicates_treeview";
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
- page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
- g_return_if_fail( GTK_IS_CONTAINER( page ));
+ g_return_if_fail( GTK_IS_TREE_VIEW( window->private->duplicates_listview ));
- switch( mode ){
- case IMPORTER_MODE_ASK:
- button = na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "AskButton" );
- break;
+ g_debug( "%s: window=%p", thisfn, ( void * ) window );
- case IMPORTER_MODE_RENUMBER:
- button = na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "RenumberButton" );
- break;
+ selection = gtk_tree_view_get_selection( window->private->duplicates_listview );
+ gtk_tree_selection_unselect_all( selection );
- case IMPORTER_MODE_OVERRIDE:
- button = na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "OverrideButton" );
- break;
+ model = gtk_tree_view_get_model( window->private->duplicates_listview );
+ gtk_list_store_clear( GTK_LIST_STORE( model ));
+}
- case IMPORTER_MODE_NO_IMPORT:
- default:
- button = na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "NoImportButton" );
- break;
+static void
+populate_duplicates_treeview( NactAssistantImport *window )
+{
+ static const gchar *thisfn = "nact_assistant_import_populate_duplicates_treeview";
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ guint i;
+ gchar *image_file;
+
+ gint width, height;
+ GdkPixbuf *pixbuf;
+
+ g_return_if_fail( GTK_IS_TREE_VIEW( window->private->duplicates_listview ));
+
+ g_debug( "%s: window=%p", thisfn, ( void * ) window );
+
+ model = gtk_tree_view_get_model( window->private->duplicates_listview );
+
+ if( !gtk_icon_size_lookup( GTK_ICON_SIZE_DIALOG, &width, &height )){
+ width = height = 48;
+ }
+
+ for( i=0 ; st_import_modes[i].mode ; ++i ){
+ image_file = g_strdup_printf( "%s/%s", PKGDATADIR, st_import_modes[i].image );
+ pixbuf = gdk_pixbuf_new_from_file_at_size( image_file, width, height, NULL );
+ gtk_list_store_append( GTK_LIST_STORE( model ), &iter );
+ gtk_list_store_set(
+ GTK_LIST_STORE( model ),
+ &iter,
+ IMAGE_COLUMN, pixbuf,
+ LABEL_COLUMN, st_import_modes[i].label,
+ TOOLTIP_COLUMN, st_import_modes[i].tooltip,
+ MODE_COLUMN, st_import_modes[i].mode,
+ INDEX_COLUMN, i,
+ -1 );
+ g_object_unref( pixbuf );
+ g_free( image_file );
+ }
+}
+
+/*
+ * handles the "changed" signal emitted on the GtkTreeSelection
+ */
+static void
+on_duplicates_selection_changed( GtkTreeSelection *selection, NactAssistantImport *window )
+{
+ static const gchar *thisfn = "nact_assistant_import_on_duplicates_selection_changed";
+ GList *selected_rows;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ guint mode;
+ guint index_mode;
+
+ g_return_if_fail( GTK_IS_TREE_VIEW( window->private->duplicates_listview ));
+
+ g_debug( "%s: selection=%p, window=%p", thisfn, ( void * ) selection, ( void * ) window );
+
+ selected_rows = gtk_tree_selection_get_selected_rows( selection, &model );
+
+ if( g_list_length( selected_rows ) == 1 ){
+ model = gtk_tree_view_get_model( window->private->duplicates_listview );
+ gtk_tree_model_get_iter( model, &iter, ( GtkTreePath * ) selected_rows->data );
+ gtk_tree_model_get( model, &iter, MODE_COLUMN, &mode, INDEX_COLUMN, &index_mode, -1 );
+ window->private->mode = mode;
+ window->private->index_mode = index_mode;
+ }
+
+ g_list_foreach( selected_rows, ( GFunc ) gtk_tree_path_free, NULL );
+ g_list_free( selected_rows );
+}
+
+/*
+ * initial selection of the default import mode
+ */
+static void
+select_import_mode( NactAssistantImport *window )
+{
+ GtkTreeModel *model;
+
+ g_return_if_fail( GTK_IS_TREE_VIEW( window->private->duplicates_listview ));
+
+ model = gtk_tree_view_get_model( window->private->duplicates_listview );
+ gtk_tree_model_foreach( model, ( GtkTreeModelForeachFunc ) iter_on_model_for_select, window );
+}
+
+/*
+ * walks through the rows of the model until the function returns %TRUE
+ */
+static gboolean
+iter_on_model_for_select( GtkTreeModel *model,
+ GtkTreePath *path, GtkTreeIter *iter, NactAssistantImport *window )
+{
+ gboolean stop;
+ guint mode;
+ guint index;
+ GtkTreeSelection *selection;
+
+ stop = FALSE;
+ gtk_tree_model_get( model, iter, MODE_COLUMN, &mode, INDEX_COLUMN, &index, -1 );
+ if( mode == window->private->mode ){
+ window->private->index_mode = index;
+ selection = gtk_tree_view_get_selection( window->private->duplicates_listview );
+ gtk_tree_selection_select_iter( selection, iter );
+ stop = TRUE;
}
- g_return_if_fail( GTK_IS_TOGGLE_BUTTON( button ));
- gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( button ), TRUE );
+ return( stop );
}
static void
@@ -514,126 +736,45 @@ prepare_confirm( NactAssistantImport *window, GtkAssistant *assistant, GtkWidget
static const gchar *thisfn = "nact_assistant_import_prepare_confirm";
gchar *text, *tmp;
GSList *uris, *is;
- GtkLabel *confirm_label;
+ GtkWidget *label;
g_debug( "%s: window=%p, assistant=%p, page=%p",
thisfn, ( void * ) window, ( void * ) assistant, ( void * ) page );
- /* i18n: the title of the confirm page of the import assistant */
- text = g_strdup( _( "About to import selected files:" ));
- tmp = g_strdup_printf( "<b>%s</b>\n\n", text );
- g_free( text );
- text = tmp;
-
+ /* adding list of uris to import
+ */
+ text = NULL;
uris = gtk_file_chooser_get_uris( GTK_FILE_CHOOSER( window->private->file_chooser ));
-
for( is = uris ; is ; is = is->next ){
- tmp = g_strdup_printf( "%s\t%s\n", text, ( gchar * ) is->data );
- g_free( text );
- text = tmp;
- }
-
- tmp = add_import_mode( window, text );
- g_free( text );
- text = tmp;
-
- confirm_label = GTK_LABEL( find_widget_from_page( page, "AssistantImportConfirmLabel" ));
- gtk_label_set_markup( confirm_label, text );
- g_free( text );
-
- gtk_assistant_set_page_complete( assistant, page, TRUE );
-}
-
-static gint
-get_import_mode( NactAssistantImport *window )
-{
- GtkAssistant *assistant;
- GtkWidget *page;
- GtkToggleButton *renumber_button;
- GtkToggleButton *override_button;
- GtkToggleButton *ask_button;
- gint mode;
+ g_debug( "%s: uri=%s", thisfn, ( const gchar * ) is->data );
- mode = IMPORTER_MODE_NO_IMPORT;
-
- assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
- g_return_val_if_fail( GTK_IS_ASSISTANT( assistant ), mode );
-
- page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
- g_return_val_if_fail( GTK_IS_CONTAINER( page ), mode );
-
- renumber_button = GTK_TOGGLE_BUTTON( find_widget_from_page( page, "RenumberButton" ));
- override_button = GTK_TOGGLE_BUTTON( find_widget_from_page( page, "OverrideButton" ));
- ask_button = GTK_TOGGLE_BUTTON( find_widget_from_page( page, "AskButton" ));
-
- if( gtk_toggle_button_get_active( renumber_button )){
- mode = IMPORTER_MODE_RENUMBER;
-
- } else if( gtk_toggle_button_get_active( override_button )){
- mode = IMPORTER_MODE_OVERRIDE;
-
- } else if( gtk_toggle_button_get_active( ask_button )){
- mode = IMPORTER_MODE_ASK;
- }
-
- return( mode );
-}
-
-static gchar *
-add_import_mode( NactAssistantImport *window, const gchar *text )
-{
- gint mode;
- GtkAssistant *assistant;
- GtkWidget *page;
- gchar *label1, *label2, *label3;
- gchar *result;
-
- mode = get_import_mode( window );
- label1 = NULL;
- label2 = NULL;
- result = NULL;
-
- assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
- g_return_val_if_fail( GTK_IS_ASSISTANT( assistant ), NULL );
-
- page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
- g_return_val_if_fail( GTK_IS_CONTAINER( page ), NULL );
-
- switch( mode ){
- case IMPORTER_MODE_NO_IMPORT:
- label1 = na_core_utils_str_remove_char( gtk_button_get_label( GTK_BUTTON( find_widget_from_page( page, "NoImportButton" ))), "_" );
- label2 = g_strdup( gtk_label_get_text( GTK_LABEL( find_widget_from_page( page, "NoImportLabel"))));
- break;
-
- case IMPORTER_MODE_RENUMBER:
- label1 = na_core_utils_str_remove_char( gtk_button_get_label( GTK_BUTTON( find_widget_from_page( page, "RenumberButton" ))), "_" );
- label2 = g_strdup( gtk_label_get_text( GTK_LABEL( find_widget_from_page( page, "RenumberLabel"))));
- break;
-
- case IMPORTER_MODE_OVERRIDE:
- label1 = na_core_utils_str_remove_char( gtk_button_get_label( GTK_BUTTON( find_widget_from_page( page, "OverrideButton" ))), "_" );
- label2 = g_strdup( gtk_label_get_text( GTK_LABEL( find_widget_from_page( page, "OverrideLabel"))));
- break;
-
- case IMPORTER_MODE_ASK:
- label1 = na_core_utils_str_remove_char( gtk_button_get_label( GTK_BUTTON( na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "AskButton" ))), "_" );
- label2 = g_strdup( gtk_label_get_text( GTK_LABEL( na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "AskLabel"))));
- break;
+ if( text ){
+ tmp = g_strdup_printf( "%s\n%s", text, ( const gchar * ) is->data );
+ g_free( text );
+ text = tmp;
- default:
- break;
+ } else {
+ text = g_strdup(( const gchar * ) is->data );
+ }
}
+ label = find_widget_from_page( page, "p3-ConfirmFilesList" );
+ g_return_if_fail( GTK_IS_LABEL( label ));
+ gtk_label_set_text( GTK_LABEL( label ), text );
+ g_free( text );
- if( label1 ){
- label3 = na_core_utils_str_add_prefix( "\t", label2 );
- g_free( label2 );
+ /* adding import mode
+ */
+ label = find_widget_from_page( page, "p3-ConfirmImportMode" );
+ g_return_if_fail( GTK_IS_LABEL( label ));
+ gtk_label_set_text( GTK_LABEL( label ), gettext( st_import_modes[window->private->index_mode].label ));
- result = g_strdup_printf( "%s\n<b>%s</b>\n\n%s", text, label1, label3 );
- g_free( label3 );
- g_free( label1 );
- }
+ /* adding import mode tooltip
+ */
+ label = find_widget_from_page( page, "p3-ConfirmImportTooltip" );
+ g_return_if_fail( GTK_IS_LABEL( label ));
+ gtk_label_set_text( GTK_LABEL( label ), gettext( st_import_modes[window->private->index_mode].tooltip ));
- return( result );
+ gtk_assistant_set_page_complete( assistant, page, TRUE );
}
/*
@@ -664,7 +805,7 @@ assistant_apply( BaseAssistant *wnd, GtkAssistant *assistant )
g_object_get( G_OBJECT( wnd ), BASE_PROP_PARENT, &main_window, NULL );
importer_parms.parent = base_window_get_gtk_toplevel( BASE_WINDOW( wnd ));
importer_parms.uris = gtk_file_chooser_get_uris( GTK_FILE_CHOOSER( window->private->file_chooser ));
- importer_parms.mode = get_import_mode( window );
+ importer_parms.mode = window->private->mode;
importer_parms.check_fn = ( NAIImporterCheckFn ) check_for_existence;
importer_parms.check_fn_data = main_window;
application = NACT_APPLICATION( base_window_get_application( main_window ));
@@ -717,99 +858,94 @@ check_for_existence( const NAObjectItem *item, NactMainWindow *window )
return( exists );
}
+/*
+ * summary page is a vbox inside of a scrolled window
+ * each line in this vbox is a GtkLabel
+ */
static void
prepare_importdone( NactAssistantImport *window, GtkAssistant *assistant, GtkWidget *page )
{
static const gchar *thisfn = "nact_assistant_import_prepare_importdone";
- gchar *text, *tmp, *text2;
- gchar *bname, *id, *label;
+ guint width;
+ GtkWidget *vbox;
+ GtkWidget *file_vbox, *file_uri, *file_report;
GList *is;
GSList *im;
NAImporterResult *result;
- GFile *file;
- guint mode;
- GtkTextView *summary_textview;
- GtkTextBuffer *summary_buffer;
- GtkTextTag *title_tag;
- GtkTextIter start, end;
- gint title_len;
+ gchar *text, *id, *item_label, *text2, *tmp;
g_debug( "%s: window=%p, assistant=%p, page=%p",
thisfn, ( void * ) window, ( void * ) assistant, ( void * ) page );
- /* i18n: result of the import assistant */
- text = g_strdup( _( "Selected files have been proceeded :" ));
- title_len = g_utf8_strlen( text, -1 );
- tmp = g_strdup_printf( "%s\n\n", text );
- g_free( text );
- text = tmp;
+ width = 15;
+ vbox = find_widget_from_page( page, "p4-SummaryVBox" );
+ g_return_if_fail( GTK_IS_BOX( vbox ));
+ /* for each uri
+ * - display the uri
+ * - display a brief import log
+ */
for( is = window->private->results ; is ; is = is->next ){
result = ( NAImporterResult * ) is->data;
+ g_debug( "%s: uri=%s", thisfn, result->uri );
+
+ /* display the uri
+ */
+#if GTK_CHECK_VERSION( 3,0,0 )
+ file_vbox = gtk_box_new( GTK_ORIENTATION_VERTICAL, 5 );
+#else
+ file_vbox = gtk_vbox_new( FALSE, 5 );
+#endif
+ gtk_box_pack_start( GTK_BOX( vbox ), file_vbox, FALSE, FALSE, 0 );
- file = g_file_new_for_uri( result->uri );
- bname = g_file_get_basename( file );
- g_object_unref( file );
- tmp = g_strdup_printf( "%s\t%s\n", text, bname );
- g_free( text );
- text = tmp;
- g_free( bname );
+ file_uri = gtk_label_new( result->uri );
+ g_object_set( G_OBJECT( file_uri ), "xalign", 0, NULL );
+ g_object_set( G_OBJECT( file_uri ), "xpad", width, NULL );
+ gtk_box_pack_start( GTK_BOX( file_vbox ), file_uri, FALSE, FALSE, 0 );
+ /* display the import log
+ */
if( result->imported ){
/* i18n: indicate that the file has been successfully imported */
- tmp = g_strdup_printf( "%s\t\t%s\n", text, _( "Import OK" ));
- g_free( text );
- text = tmp;
+ text = g_strdup( _( "Import OK" ));
id = na_object_get_id( result->imported );
- label = na_object_get_label( result->imported );
+ item_label = na_object_get_label( result->imported );
/* i18n: this is the globally unique identifier and the label of the newly imported action */
- text2 = g_strdup_printf( _( "Id.: %s\t%s" ), id, label);
- g_free( label );
+ text2 = g_strdup_printf( _( "Id.: %s\t%s" ), id, item_label);
+ g_free( item_label );
g_free( id );
- tmp = g_strdup_printf( "%s\t\t%s\n", text, text2 );
+ tmp = g_strdup_printf( "%s\n%s", text, text2 );
g_free( text );
+ g_free( text2 );
text = tmp;
} else {
/* i18n: indicate that the file was not imported */
- tmp = g_strdup_printf( "%s\t\t%s\n", text, _( "Not imported" ));
- g_free( text );
- text = tmp;
+ text = g_strdup( _( "Not imported" ));
}
- /* add messages if any */
+ /* add messages if any
+ */
for( im = result->messages ; im ; im = im->next ){
- tmp = g_strdup_printf( "%s\t\t%s\n", text, ( const char * ) im->data );
+ tmp = g_strdup_printf( "%s\n%s", text, ( const char * ) im->data );
g_free( text );
text = tmp;
}
- /* add a blank line between two actions */
- tmp = g_strdup_printf( "%s\n", text );
- g_free( text );
- text = tmp;
+ file_report = gtk_label_new( text );
+ gtk_label_set_line_wrap( GTK_LABEL( file_report ), TRUE );
+ gtk_label_set_line_wrap_mode( GTK_LABEL( file_report ), PANGO_WRAP_WORD );
+ g_object_set( G_OBJECT( file_report ), "xalign", 0, NULL );
+ g_object_set( G_OBJECT( file_report ), "xpad", 2*width, NULL );
+ gtk_box_pack_start( GTK_BOX( file_vbox ), file_report, FALSE, FALSE, 0 );
}
- summary_textview = GTK_TEXT_VIEW( na_gtk_utils_search_for_child_widget( GTK_CONTAINER( page ), "AssistantImportSummaryTextView" ));
- summary_buffer = gtk_text_view_get_buffer( summary_textview );
- gtk_text_buffer_set_text( summary_buffer, text, -1 );
- g_free( text );
-
- title_tag = gtk_text_buffer_create_tag( summary_buffer, "title",
- "weight", PANGO_WEIGHT_BOLD,
- NULL );
-
- gtk_text_buffer_get_iter_at_offset( summary_buffer, &start, 0 );
- gtk_text_buffer_get_iter_at_offset( summary_buffer, &end, title_len );
- gtk_text_buffer_apply_tag( summary_buffer, title_tag, &start, &end );
-
- g_object_unref( title_tag );
-
- mode = get_import_mode( window );
- na_iprefs_set_import_mode( NA_IPREFS_IMPORT_PREFERRED_MODE, mode );
-
- gtk_assistant_set_page_complete( assistant, page, TRUE );
g_object_set( G_OBJECT( window ), BASE_PROP_WARN_ON_ESCAPE, FALSE, NULL );
+ na_iprefs_set_import_mode( NA_IPREFS_IMPORT_PREFERRED_MODE, window->private->mode );
+ gtk_assistant_set_page_complete( assistant, page, TRUE );
+ /* gtk_widget_show_all( page ) is ok with Gtk 3, but not with Gtk 2 */
+ /* gtk_widget_show_all( vbox ) is not better with Gtk 2 */
+ gtk_widget_show_all( page );
}
static void
@@ -835,3 +971,29 @@ find_widget_from_page( GtkWidget *page, const gchar *name )
return( widget );
}
+
+static GtkTreeView *
+get_duplicates_treeview_from_assistant_import( NactAssistantImport *window )
+{
+ GtkAssistant *assistant;
+ GtkWidget *page;
+
+ g_return_val_if_fail( NACT_IS_ASSISTANT_IMPORT( window ), NULL );
+
+ assistant = GTK_ASSISTANT( base_window_get_gtk_toplevel( BASE_WINDOW( window )));
+ page = gtk_assistant_get_nth_page( assistant, ASSIST_PAGE_DUPLICATES );
+
+ return( get_duplicates_treeview_from_page( page ));
+}
+
+static GtkTreeView *
+get_duplicates_treeview_from_page( GtkWidget *page )
+{
+ GtkWidget *listview;
+
+ listview = find_widget_from_page( page, "AskTreeView" );
+
+ g_return_val_if_fail( GTK_IS_TREE_VIEW( listview ), NULL );
+
+ return( GTK_TREE_VIEW( listview ));
+}
diff --git a/src/nact/nact-assistant-import.ui b/src/nact/nact-assistant-import.ui
index 3b71563..ef020f0 100644
--- a/src/nact/nact-assistant-import.ui
+++ b/src/nact/nact-assistant-import.ui
@@ -3,15 +3,12 @@
<requires lib="gtk+" version="2.20"/>
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkAssistant" id="ImportAssistant">
- <property name="border_width">12</property>
+ <property name="border_width">10</property>
<property name="title" translatable="yes">Importing actions</property>
<property name="modal">True</property>
<property name="type_hint">dialog</property>
<child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkLabel" id="label3">
+ <object class="GtkLabel" id="p0-l1-label1">
<property name="visible">True</property>
<property name="label" translatable="yes">This assistant will guide you through the process of importing items, actions or menus.</property>
<property name="wrap">True</property>
@@ -21,7 +18,7 @@
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox34">
+ <object class="GtkVBox" id="p1-l1-vbox1">
<property name="visible">True</property>
<child>
<object class="GtkFileChooserWidget" id="ImportFileChooser">
@@ -32,32 +29,32 @@
<property name="select_multiple">True</property>
</object>
<packing>
- <property name="padding">10</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
- <property name="title" translatable="yes">Selecting what files to import</property>
+ <property name="title" translatable="yes">Selecting files to import</property>
+ <property name="page_type">content</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox35">
+ <object class="GtkVBox" id="p2-l1-vbox1">
<property name="visible">True</property>
- <property name="border_width">10</property>
- <property name="spacing">10</property>
<child>
- <object class="GtkVBox" id="vbox20">
+ <object class="GtkVBox" id="p2-l2-vbox1">
<property name="visible">True</property>
<property name="spacing">10</property>
<child>
- <object class="GtkLabel" id="label38">
+ <object class="GtkLabel" id="p2-l3-label1">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="ypad">10</property>
- <property name="label" translatable="yes"><b>What should I do when importing an item whose ID already exists ?</b></property>
+ <property name="label" translatable="yes">What should I do when importing an item whose ID already exists ?</property>
<property name="use_markup">True</property>
<property name="wrap">True</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ </attributes>
</object>
<packing>
<property name="expand">False</property>
@@ -65,201 +62,131 @@
</packing>
</child>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow7">
+ <object class="GtkTreeView" id="AskTreeView">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="hscrollbar_policy">automatic</property>
- <property name="vscrollbar_policy">automatic</property>
+ <property name="headers_visible">False</property>
+ <property name="rules_hint">True</property>
+ <property name="show_expanders">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="title" translatable="yes">Managing duplicates</property>
+ <property name="page_type">content</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="p3-l1-vbox1">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="p3-l2-scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">automatic</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <child>
+ <object class="GtkViewport" id="p3-l3-viewport1">
+ <property name="visible">True</property>
<child>
- <object class="GtkViewport" id="viewport1">
+ <object class="GtkVBox" id="p3-l4-vbox1">
<property name="visible">True</property>
+ <property name="spacing">10</property>
<child>
- <object class="GtkVBox" id="vbox21">
+ <object class="GtkVBox" id="p3-l5-vbox1">
<property name="visible">True</property>
<property name="spacing">10</property>
<child>
- <object class="GtkVBox" id="vbox22">
+ <object class="GtkLabel" id="p3-l6-label1">
<property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="NoImportButton">
- <property name="label" translatable="yes">Do _not import the item whose ID already exists</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox18">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="NoImportLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">16</property>
- <property name="label" translatable="yes">This used to be the historical behavior.
-The selected file will be marked as "NOT OK" in the Summary page.
-The existing item will not be modified.</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">About to import selected files:</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox23">
+ <object class="GtkLabel" id="p3-ConfirmFilesList">
<property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="RenumberButton">
- <property name="label" translatable="yes">A_llocate a new identifier for the imported item</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">NoImportButton</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox6">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="RenumberLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">16</property>
- <property name="label" translatable="yes">The selected file will be imported with a slightly modified label indicating the renumbering.
-The existing item will not be modified.</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="xpad">15</property>
+ <property name="label" translatable="yes"></property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkVBox" id="p3-l5-vbox2">
+ <property name="visible">True</property>
+ <property name="spacing">10</property>
<child>
- <object class="GtkVBox" id="vbox24">
+ <object class="GtkLabel" id="p3-l6-label2">
<property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="OverrideButton">
- <property name="label" translatable="yes">_Override the existing item</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">NoImportButton</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox7">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="OverrideLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">16</property>
- <property name="label" translatable="yes">The item found in the selected file will silently override the current one which has the same identifier.
-Be warned: this mode may be dangerous. You will not be prompted another time.</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">What should I do when importing an item whose ID already exists ?</property>
+ <property name="wrap">True</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
</object>
<packing>
- <property name="position">2</property>
+ <property name="position">0</property>
</packing>
</child>
<child>
- <object class="GtkVBox" id="vbox36">
+ <object class="GtkLabel" id="p3-ConfirmImportMode">
<property name="visible">True</property>
- <child>
- <object class="GtkRadioButton" id="AskButton">
- <property name="label" translatable="yes">_Ask me</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="use_underline">True</property>
- <property name="draw_indicator">True</property>
- <property name="group">NoImportButton</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkHBox" id="hbox8">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="AskLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">16</property>
- <property name="label" translatable="yes">You will be asked each time an imported ID already exists.</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="padding">4</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="position">1</property>
- </packing>
- </child>
+ <property name="xalign">0</property>
+ <property name="xpad">15</property>
+ <property name="label" translatable="yes"></property>
+ <property name="wrap">True</property>
</object>
<packing>
- <property name="position">3</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="p3-ConfirmImportTooltip">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">30</property>
+ <property name="label" translatable="yes"></property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="position">2</property>
</packing>
</child>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
</child>
</object>
</child>
</object>
- <packing>
- <property name="position">1</property>
- </packing>
</child>
</object>
<packing>
@@ -268,52 +195,52 @@ Be warned: this mode may be dangerous. You will not be prompted another time.</p
</child>
</object>
<packing>
- <property name="title" translatable="yes">Managing duplicates</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkVBox" id="vbox12">
- <property name="visible">True</property>
- <child>
- <object class="GtkLabel" id="AssistantImportConfirmLabel">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="xpad">20</property>
- <property name="wrap">True</property>
- </object>
- <packing>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <placeholder/>
- </child>
- </object>
- <packing>
<property name="page_type">confirm</property>
<property name="title" translatable="yes">Summary</property>
</packing>
</child>
<child>
- <placeholder/>
- </child>
- <child>
- <object class="GtkVBox" id="vbox13">
+ <object class="GtkVBox" id="p4-l1-vbox1">
<property name="visible">True</property>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow6">
+ <object class="GtkScrolledWindow" id="p4-l2-scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
- <object class="GtkTextView" id="AssistantImportSummaryTextView">
+ <object class="GtkViewport" id="p4-l3-viewport1">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">False</property>
+ <child>
+ <object class="GtkVBox" id="p4-l4-vbox1">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkVBox" id="p4-SummaryVBox">
+ <property name="visible">True</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <child>
+ <object class="GtkLabel" id="p4-l6-label1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Selected files have been proceeded:</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
</object>
</child>
</object>
@@ -321,9 +248,6 @@ Be warned: this mode may be dangerous. You will not be prompted another time.</p
<property name="position">0</property>
</packing>
</child>
- <child>
- <placeholder/>
- </child>
</object>
<packing>
<property name="page_type">summary</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]