[nautilus-actions] Refactoring: update NactTreeModel class



commit aa443eafab04d7566ef5fc470d1259ad24f7bdad
Author: Pierre Wieser <pwieser trychlos org>
Date:   Wed Feb 17 22:19:59 2010 +0100

    Refactoring: update NactTreeModel class

 ChangeLog                      |    6 ++++
 src/api/na-object-api.h        |    1 +
 src/api/na-object-item.h       |    1 +
 src/core/na-object-item.c      |   42 ++++++++++++++++++++++++++++
 src/nact/nact-tree-model-dnd.c |   59 +++++++++++++++++++---------------------
 src/nact/nact-tree-model.c     |   22 +++++++++------
 6 files changed, 91 insertions(+), 40 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 163f155..486184a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2009-02-17 Pierre Wieser <pwieser trychlos org>
 
+	* src/api/na-object-api.h:
+	* src/api/na-object-item.h:
+	* src/core/na-object-item.c:
+	* src/nact/nact-tree-model-dnd.c:
+	* src/nact/nact-tree-model.c: Update NactTreeModel class.
+
 	* src/api/na-core-utils.h:
 	* src/api/na-object-api.h:
 	* src/api/na-object-profile.h:
diff --git a/src/api/na-object-api.h b/src/api/na-object-api.h
index b795d1b..2cd17d7 100644
--- a/src/api/na-object-api.h
+++ b/src/api/na-object-api.h
@@ -115,6 +115,7 @@ G_BEGIN_DECLS
 #define na_object_get_position( obj, child )			na_object_item_get_position( NA_OBJECT_ITEM( obj ), NA_OBJECT_ID( child ))
 #define na_object_append_item( obj, child )				na_object_item_append_item( NA_OBJECT_ITEM( obj ), NA_OBJECT_ID( child ))
 #define na_object_insert_at( obj, child, pos )			na_object_item_insert_at( NA_OBJECT_ITEM( obj ), NA_OBJECT_ID( child ), ( pos ))
+#define na_object_insert_item( obj, child, sibling )	na_object_item_insert_item( NA_OBJECT_ITEM( obj ), NA_OBJECT( child ), ( NAObject * )( sibling ))
 #define na_object_remove_item( obj, child )				na_object_item_remove_item( NA_OBJECT_ITEM( obj ), NA_OBJECT_ID( child ))
 
 #define na_object_build_items_slist( obj )				na_object_item_build_items_slist( NA_OBJECT_ITEM( obj ))
diff --git a/src/api/na-object-item.h b/src/api/na-object-item.h
index df8386a..38d5b8c 100644
--- a/src/api/na-object-item.h
+++ b/src/api/na-object-item.h
@@ -84,6 +84,7 @@ NAObjectId *na_object_item_get_item    ( const NAObjectItem *item, const gchar *
 gint        na_object_item_get_position( const NAObjectItem *item, const NAObjectId *child );
 void        na_object_item_append_item ( NAObjectItem *object, const NAObjectId *item );
 void        na_object_item_insert_at   ( NAObjectItem *object, const NAObjectId *item, gint pos );
+void        na_object_item_insert_item ( NAObjectItem *object, const NAObject *item, const NAObject *before );
 void        na_object_item_remove_item ( NAObjectItem *object, const NAObjectId *item );
 
 GSList     *na_object_item_build_items_slist( const NAObjectItem *item );
diff --git a/src/core/na-object-item.c b/src/core/na-object-item.c
index cc34752..a6ef836 100644
--- a/src/core/na-object-item.c
+++ b/src/core/na-object-item.c
@@ -493,6 +493,48 @@ na_object_item_insert_at( NAObjectItem *item, const NAObjectId *object, gint pos
 }
 
 /**
+ * na_object_item_insert_item:
+ * @item: the #NAObjectItem to which add the subitem.
+ * @object: a #NAObject to be inserted in the list of subitems.
+ * @before: the #NAObject before which the @object should be inserted.
+ *
+ * Inserts a new @object in the list of subitems of @item.
+ *
+ * Doesn't modify the reference count on @object.
+ */
+void
+na_object_item_insert_item( NAObjectItem *item, const NAObject *object, const NAObject *before )
+{
+	GList *childs;
+	GList *before_list;
+
+	g_return_if_fail( NA_IS_OBJECT_ITEM( item ));
+	g_return_if_fail( NA_IS_OBJECT( object ));
+	g_return_if_fail( !before || NA_IS_OBJECT( before ));
+
+	if( !item->private->dispose_has_run ){
+
+		childs = na_object_get_items( item );
+		if( !g_list_find( childs, ( gpointer ) object )){
+
+			before_list = NULL;
+
+			if( before ){
+				before_list = g_list_find( childs, ( gconstpointer ) before );
+			}
+
+			if( before_list ){
+				childs = g_list_insert_before( childs, before_list, ( gpointer ) object );
+			} else {
+				childs = g_list_prepend( childs, ( gpointer ) object );
+			}
+
+			na_object_set_items( item, childs );
+		}
+	}
+}
+
+/**
  * na_object_item_remove_item:
  * @item: the #NAObjectItem from which the subitem must be removed.
  * @object: a #NAObjectId-derived to be removed from the list of subitems.
diff --git a/src/nact/nact-tree-model-dnd.c b/src/nact/nact-tree-model-dnd.c
index b2b90a4..6b793c7 100644
--- a/src/nact/nact-tree-model-dnd.c
+++ b/src/nact/nact-tree-model-dnd.c
@@ -32,21 +32,24 @@
 #include <config.h>
 #endif
 
+#include <glib/gi18n.h>
+#include <string.h>
+
+#include <api/na-core-utils.h>
 #include <api/na-object-api.h>
 
-#include <runtime/na-iprefs.h>
-#include <runtime/na-utils.h>
+#include <core/na-importer.h>
 
 #include "nact-application.h"
 #include "nact-clipboard.h"
 #include "nact-iactions-list.h"
+#include "nact-iprefs.h"
 #include "nact-main-menubar.h"
 #include "nact-main-statusbar.h"
 #include "nact-main-window.h"
 #include "nact-tree-model.h"
 #include "nact-tree-model-dnd.h"
 #include "nact-tree-model-priv.h"
-#include "nact-xml-reader.h"
 
 /*
  * call once egg_tree_multi_drag_add_drag_support( treeview ) at init time (before gtk_main)
@@ -293,9 +296,9 @@ nact_tree_model_dnd_imulti_drag_source_drag_data_get( EggTreeMultiDragSource *dr
 
 			case NACT_XCHANGE_FORMAT_XDS:
 				folder = get_xds_atom_value( context );
-				dest_folder = na_utils_remove_last_level_from_path( folder );
+				dest_folder = g_path_get_dirname( folder );
 				g_free( folder );
-				is_writable = na_utils_is_writable_dir( dest_folder );
+				is_writable = na_core_utils_dir_is_writable( dest_folder );
 				gtk_selection_data_set( selection_data, selection_data->target, 8, ( guchar * )( is_writable ? "S" : "F" ), 1 );
 				if( is_writable ){
 					nact_clipboard_dnd_set( model->private->clipboard, info, rows, dest_folder, TRUE );
@@ -488,7 +491,7 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
 	static const gchar *thisfn = "nact_tree_model_inside_drag_and_drop";
 	gboolean drop_done;
 	NactApplication *application;
-	NAPivot *pivot;
+	NAUpdater *updater;
 	NactMainWindow *main_window;
 	NAObjectAction *parent;
 	gboolean copy_data;
@@ -503,7 +506,7 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
 	gboolean relabel;
 
 	application = NACT_APPLICATION( base_window_get_application( model->private->window ));
-	pivot = nact_application_get_pivot( application );
+	updater = nact_application_get_updater( application );
 	main_window = NACT_MAIN_WINDOW( base_application_get_main_window( BASE_APPLICATION( application )));
 
 	/*
@@ -531,7 +534,7 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
 					g_object_unref( current );
 
 					if( copy_data ){
-						inserted = na_object_duplicate( current );
+						inserted = ( NAObject * ) na_object_duplicate( current );
 						na_object_set_origin( inserted, NULL );
 						na_object_check_status( inserted );
 
@@ -542,7 +545,7 @@ drop_inside( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selecti
 						g_list_free( deletable );
 					}
 
-					relabel = nact_main_menubar_is_pasted_object_relabeled( inserted, pivot );
+					relabel = nact_main_menubar_is_pasted_object_relabeled( inserted, NA_PIVOT( updater ));
 					na_object_prepare_for_paste( inserted, relabel, copy_data, parent );
 					object_list = g_list_prepend( object_list, inserted );
 					g_debug( "%s: dropped=%s", thisfn, na_object_get_label( inserted ));
@@ -582,14 +585,12 @@ drop_inside_adjust_dest( NactTreeModel *model, GtkTreePath *dest, NAObjectAction
 	GtkTreePath *new_dest;
 	gboolean drop_ok;
 	NactApplication *application;
-	NAPivot *pivot;
 	NactMainWindow *main_window;
 	GtkTreeIter iter;
 	NAObject *current;
 	GtkTreePath *path;
 
 	application = NACT_APPLICATION( base_window_get_application( model->private->window ));
-	pivot = nact_application_get_pivot( application );
 	main_window = NACT_MAIN_WINDOW( base_application_get_main_window( BASE_APPLICATION( application )));
 
 	new_dest = gtk_tree_path_copy( dest );
@@ -747,15 +748,13 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
 	gboolean drop_done = FALSE;
 	GSList *uri_list, *is, *msg;
 	NactApplication *application;
-	NAPivot *pivot;
 	gint import_mode;
-	NAObjectAction *action;
+	NAObjectItem *item;
 	NactMainWindow *main_window;
 	GList *object_list;
 	GtkTreePath *new_dest;
 
 	application = NACT_APPLICATION( base_window_get_application( model->private->window ));
-	pivot = nact_application_get_pivot( application );
 	main_window = NACT_MAIN_WINDOW( base_application_get_main_window( BASE_APPLICATION( application )));
 
 	model->private->drag_has_profiles = FALSE;
@@ -764,14 +763,13 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
 		return( drop_done );
 	}
 
-	uri_list = g_slist_reverse( na_utils_lines_to_string_list(( const gchar * ) selection_data->data ));
-	import_mode = na_iprefs_get_import_mode( NA_IPREFS( pivot ), IPREFS_IMPORT_ACTIONS_IMPORT_MODE );
+	uri_list = g_slist_reverse( na_core_utils_slist_from_split(( const gchar * ) selection_data->data, "\n" ));
+	import_mode = nact_iprefs_get_import_mode( BASE_WINDOW( main_window ), IPREFS_IMPORT_ITEMS_IMPORT_MODE );
 
 	object_list = NULL;
 	for( is = uri_list ; is ; is = is->next ){
 
-		action = nact_xml_reader_import(
-				model->private->window,
+		item = na_importer_import(
 				object_list,
 				( const gchar * ) is->data,
 				import_mode,
@@ -783,25 +781,24 @@ drop_uri_list( NactTreeModel *model, GtkTreePath *dest, GtkSelectionData  *selec
 					main_window,
 					TREE_MODEL_STATUSBAR_CONTEXT,
 					msg->data );
-			na_utils_free_string_list( msg );
-
+			na_core_utils_slist_free( msg );
 		}
 
-		if( action ){
-			g_return_val_if_fail( NA_IS_OBJECT_ACTION( action ), FALSE );
-			object_list = g_list_prepend( object_list, action );
-			na_object_check_status( action );
-			na_object_dump( action );
+		if( item ){
+			g_return_val_if_fail( NA_IS_OBJECT_ITEM( item ), FALSE );
+			object_list = g_list_prepend( object_list, item );
+			na_object_check_status( item );
+			na_object_dump( item );
 			drop_done = TRUE;
 		}
 	}
 
 	nact_iactions_list_bis_insert_at_path( NACT_IACTIONS_LIST( main_window ), object_list, new_dest );
-	na_object_free_items_list( object_list );
+	na_object_unref_items( object_list );
 
 	gtk_tree_path_free( new_dest );
 	nact_tree_model_dump( model );
-	na_utils_free_string_list( uri_list );
+	na_core_utils_slist_free( uri_list );
 
 	return( drop_done );
 }
@@ -937,12 +934,12 @@ is_parent_accept_new_childs( NactTreeModel *model, GtkTreePath *path )
 	GtkTreeIter iter;
 	NAObjectItem *parent_item;
 	NactApplication *application;
-	NAPivot *pivot;
+	NAUpdater *updater;
 	NactMainWindow *main_window;
 
 	accept_ok = FALSE;
 	application = NACT_APPLICATION( base_window_get_application( model->private->window ));
-	pivot = nact_application_get_pivot( application );
+	updater = nact_application_get_updater( application );
 	main_window = NACT_MAIN_WINDOW( base_application_get_main_window( BASE_APPLICATION( application )));
 
 	/* inserting as a level zero item
@@ -950,7 +947,7 @@ is_parent_accept_new_childs( NactTreeModel *model, GtkTreePath *path )
 	 */
 	if( gtk_tree_path_get_depth( path ) == 1 ){
 
-		if( na_pivot_is_level_zero_writable( pivot )){
+		if( na_pivot_is_level_zero_writable( NA_PIVOT( updater ))){
 			accept_ok = TRUE;
 
 		} else {
@@ -964,7 +961,7 @@ is_parent_accept_new_childs( NactTreeModel *model, GtkTreePath *path )
 		parent_path = gtk_tree_path_copy( path );
 		if( gtk_tree_model_get_iter( GTK_TREE_MODEL( model ), &iter, parent_path )){
 			gtk_tree_model_get( GTK_TREE_MODEL( model ), &iter, IACTIONS_LIST_NAOBJECT_COLUMN, &parent_item, -1 );
-			if( na_pivot_is_item_writable( pivot, parent_item, NULL )){
+			if( na_updater_is_item_writable( updater, parent_item, NULL )){
 				accept_ok = TRUE;
 			}
 			g_object_unref( parent_item );
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index b357cbf..767ac99 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -32,12 +32,15 @@
 #include <config.h>
 #endif
 
+#include <string.h>
+
 #include <api/na-object-api.h>
 
-#include <runtime/na-iprefs.h>
+#include <core/na-iprefs.h>
 
 #include "nact-application.h"
 #include "nact-clipboard.h"
+#include "nact-gtk-utils.h"
 #include "nact-iactions-list.h"
 #include "nact-tree-model.h"
 #include "nact-tree-model-dnd.h"
@@ -282,7 +285,7 @@ tree_model_new( BaseWindow *window, GtkTreeView *treeview )
 	GtkTreeStore *ts_model;
 	NactTreeModel *model;
 	NactApplication *application;
-	NAPivot *pivot;
+	NAUpdater *updater;
 	gint order_mode;
 
 	g_debug( "%s: window=%p, treeview=%p", thisfn, ( void * ) window, ( void * ) treeview );
@@ -303,8 +306,8 @@ tree_model_new( BaseWindow *window, GtkTreeView *treeview )
 	/* initialize the sortable interface
 	 */
 	application = NACT_APPLICATION( base_window_get_application( window ));
-	pivot = nact_application_get_pivot( application );
-	order_mode = na_iprefs_get_order_mode( NA_IPREFS( pivot ));
+	updater = nact_application_get_updater( application );
+	order_mode = na_iprefs_get_order_mode( NA_IPREFS( updater ));
 	nact_tree_model_display_order_change( model, order_mode );
 
 	model->private->window = window;
@@ -595,7 +598,7 @@ nact_tree_model_fill( NactTreeModel *model, GList *items, gboolean only_actions)
 		gtk_tree_store_clear( ts_model );
 
 		for( it = items ; it ; it = it->next ){
-			duplicate = na_object_duplicate( it->data );
+			duplicate = ( NAObject * ) na_object_duplicate( it->data );
 			if( !only_actions ){
 				na_object_check_status( duplicate );
 			}
@@ -870,7 +873,8 @@ display_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *iter, con
 	g_free( label );
 
 	if( NA_IS_OBJECT_ITEM( object )){
-		GdkPixbuf *icon = na_object_item_get_pixbuf( NA_OBJECT_ITEM( object ));
+		gchar *icon_name = na_object_get_icon( object );
+		GdkPixbuf *icon = nact_gtk_utils_get_pixbuf( icon_name, GTK_ICON_SIZE_MENU );
 		gtk_tree_store_set( model, iter, IACTIONS_LIST_ICON_COLUMN, icon, -1 );
 	}
 }
@@ -918,7 +922,7 @@ fill_tree_store( GtkTreeStore *model, GtkTreeView *treeview,
 		if( !only_actions ){
 			append_item( model, treeview, parent, &iter, object );
 		}
-		subitems = na_object_get_items_list( object );
+		subitems = na_object_get_items( object );
 		for( it = subitems ; it ; it = it->next ){
 			fill_tree_store( model, treeview, it->data, only_actions, only_actions ? NULL : &iter );
 		}
@@ -930,7 +934,7 @@ fill_tree_store( GtkTreeStore *model, GtkTreeView *treeview,
 		if( only_actions ){
 			na_object_set_parent( object, NULL );
 		} else {
-			subitems = na_object_get_items_list( object );
+			subitems = na_object_get_items( object );
 			for( it = subitems ; it ; it = it->next ){
 				fill_tree_store( model, treeview, it->data, only_actions, &iter );
 			}
@@ -1167,7 +1171,7 @@ sort_actions_list( GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer
 	if( NA_IS_OBJECT_PROFILE( obj_a )){
 		ret = 0;
 	} else {
-		ret = na_pivot_sort_alpha_asc( obj_a, obj_b );
+		ret = na_object_sort_alpha_asc( obj_a, obj_b );
 	}
 
 	/*g_debug( "%s: ret=%d", thisfn, ret );*/



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