[nautilus-actions] NactAssistantImport: refactoring



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">&lt;b&gt;What should I do when importing an item whose ID already exists ?&lt;/b&gt;</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]