[gnome-commander/treeview] Coded custom treestore for sorting foldview from any properties of the directories



commit 1df92c275d48c171459b80b5d39ae6e779828820
Author: Guillaume Wardavoir <earlgrey free fr>
Date:   Fri Aug 13 00:08:06 2010 +0200

    Coded custom treestore for sorting foldview from any properties of the directories

 src/gnome-cmd-foldview-control.cc |   51 +++++++++++++++--------------
 src/gnome-cmd-foldview-gvfs.cc    |    3 +-
 src/gnome-cmd-foldview-gvfs.h     |    3 ++
 src/gnome-cmd-foldview-model.cc   |    3 +-
 src/gnome-cmd-foldview-private.h  |   64 +++++++++++++++++++++++++++++++++++--
 src/gnome-cmd-foldview-view.cc    |   44 ++++++++++++++++---------
 src/gnome-cmd-foldview.cc         |   11 +++---
 7 files changed, 129 insertions(+), 50 deletions(-)
---
diff --git a/src/gnome-cmd-foldview-control.cc b/src/gnome-cmd-foldview-control.cc
index 0dcc8f5..c994aab 100644
--- a/src/gnome-cmd-foldview-control.cc
+++ b/src/gnome-cmd-foldview-control.cc
@@ -8,7 +8,7 @@
 
 	C++
 
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 
@@ -121,7 +121,7 @@
 //=============================================================================
 GcmdGtkFoldview::View::ctx_menu GcmdGtkFoldview:: s_context_menu =
 {
-	NULL, (gint)2,
+	NULL, (gint)2,	
 	{
 		{
 			_("Directory"), (gint)3,
@@ -216,9 +216,9 @@ void GcmdGtkFoldview::control_context_menu_populate_add_section(
 		{
 			// connect with new ctx data
 			e->a_handle = g_signal_connect(
-				e->a_widget,
-				"activate",
-				e->a_desc.a_callback,
+				e->a_widget, 
+				"activate", 
+				e->a_desc.a_callback, 
 				(gpointer)ctxdata);
 		}
 
@@ -228,7 +228,7 @@ void GcmdGtkFoldview::control_context_menu_populate_add_section(
 }
 
 void GcmdGtkFoldview::Control_set_active_tab(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_set_active_tab(ctxdata->d_path_selected);
@@ -260,7 +260,7 @@ void GcmdGtkFoldview::control_set_active_tab(GtkTreePath *path)
 }
 
 void GcmdGtkFoldview::Control_open_new_tab(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_open_new_tab(ctxdata->d_path_selected);
@@ -293,7 +293,7 @@ void GcmdGtkFoldview::control_open_new_tab(GtkTreePath *path)
 }
 
 void GcmdGtkFoldview::Control_set_new_root(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_set_new_root(ctxdata);
@@ -348,7 +348,7 @@ GcmdGtkFoldview::eSyncState GcmdGtkFoldview::control_sync_check()
 }
 
 void GcmdGtkFoldview::Control_sync_update(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_sync_update(ctxdata);
@@ -360,7 +360,7 @@ void GcmdGtkFoldview::control_sync_update(GcmdGtkFoldview::View::ctx_menu_data *
 	GtkTreeIter		iter			= Model::s_iter_NULL;
 	//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 	//gwr_inf("control_sync_update");
-
+	
 	if ( control_sync_check() != SYNC_Y_LIST_Y )
 	{
 		//gwr_wng("control_sync_update:not SYNC_Y_LIST_Y:%03i", control_sync_check());
@@ -373,12 +373,12 @@ void GcmdGtkFoldview::control_sync_update(GcmdGtkFoldview::View::ctx_menu_data *
 	uri = model.iter_get_uri_new(&iter);
 	if ( uri == NULL )
 		return;
-
+	
 	control_gcmd_file_list_set_connection(a_synced_list, uri);
 }
 
 void GcmdGtkFoldview::Control_unsync_treeview(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_unsync_treeview();
@@ -414,7 +414,7 @@ void GcmdGtkFoldview::control_unsync_treeview()
 }
 
 void GcmdGtkFoldview::Control_sync_treeview(
-	GtkMenuItem				*menu_item,
+	GtkMenuItem				*menu_item, 
 	View::ctx_menu_data		*ctxdata)
 {
 	ctxdata->a_foldview->control_sync_treeview(ctxdata);
@@ -520,7 +520,7 @@ void GcmdGtkFoldview::control_iter_expand_callback_1(gvfs_async *ga)
 	gboolean							b					= FALSE;
 	//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 	gdk_threads_enter();														// _GDK_LOCK_
-
+	
 	foldview		= GcmdFoldview();
 
 	ls				= (gvfs_async_load_subdirs*)(ga->ad());
@@ -543,7 +543,7 @@ void GcmdGtkFoldview::control_iter_expand_callback_1(gvfs_async *ga)
 	for ( i = 0 ; i != count ; i++ )
 	{
 		file = ls->element(i);
-		CIE_INF("ciec_1:%s", file->name());
+		CIE_INF("ciec_1:%s", file->name());		
 
 		// determine icon number for the file element
 		GcmdGtkFoldview::View::eIcon	icon	= GcmdGtkFoldview::View::eIconUnknown;
@@ -577,7 +577,7 @@ void GcmdGtkFoldview::control_iter_expand_callback_1(gvfs_async *ga)
 		// NOTHING here ! Because the sort function mix all - iter or path !!!
 		//child_uri = foldview->model.iter_get_uri_new(child_iter);
 		//foldview->control_check_if_empty(child_iter);
-		//gnome_vfs_uri_unref(child_uri);
+		//gnome_vfs_uri_unref(child_uri);	
 	}
 
 	//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -639,7 +639,7 @@ GcmdGtkFoldview::control_iter_expand(
 	// new uri that will be destroyed at the end of GVFS callback
 	parent_uri = model.iter_get_uri_new(parent);
 
-	// string representing the GtkTreePath of the parent ; we dont use
+	// string representing the GtkTreePath of the parent ; we dont use 
 	// a GtkTreePath directly,since it is a GtkObject and maybe invalided
 	// when GVFS callback code will run. Neither use we any GtkTreeIter.
 	temp_path   = gtk_tree_model_get_path(model.treemodel(), parent);
@@ -680,7 +680,7 @@ void GcmdGtkFoldview::control_check_if_empty_callback_1(gvfs_async *ga)
 	GtkTreeIter							*parent_iter		= NULL;
 	//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 	gdk_threads_enter();														// _GDK_LOCK_
-
+	
 	foldview		= GcmdFoldview();
 
 	ls				= (gvfs_async_load_subdirs*)(ga->ad());
@@ -721,7 +721,7 @@ void GcmdGtkFoldview::control_check_if_empty_callback_1(gvfs_async *ga)
 	// delete user data
 	delete ga->cd();
 
-	gdk_threads_leave();
+	gdk_threads_leave();	
 
 }
 //  MULTITHREAD
@@ -755,7 +755,7 @@ void GcmdGtkFoldview::control_check_if_empty(GtkTreeIter *parent)
 	// new uri that will be destroyed at the end of GVFS callback
 	parent_uri = model.iter_get_uri_new(parent);
 
-	// string representing the GtkTreePath of the parent ; we dont use
+	// string representing the GtkTreePath of the parent ; we dont use 
 	// a GtkTreePath directly,since it is a GtkObject and maybe invalided
 	// when GVFS callback code will run. Neither use we any GtkTreeIter.
 	temp_path   = gtk_tree_model_get_path(model.treemodel(), parent);
@@ -837,13 +837,13 @@ void GcmdGtkFoldview::control_gcmd_file_list_set_connection(
 		// Avoid gcmd to call gtk_object_destroy on access-denied directories   // __GWR_TODO__
 		// and lost+found in GnomeCmdFileList::on_dir_list_failed(...)
 		//
-		// The problem is that gcmd cant handle correctly such directories
+		// The problem is that gcmd cant handle correctly such directories 
 		// when calling GnomeCmdFileList::set_connection,set_directory,
 		// goto_directory, ...I think you get the same result if you bookmark
 		// (manually) such a directory
 		//
-		// Since gcmd increase GnomeCmdFile->ref_cnt until infinite (!),
-		// I feel allowed to call gnome_cmd_dir_ref rather than
+		// Since gcmd increase GnomeCmdFile->ref_cnt until infinite (!), 
+		// I feel allowed to call gnome_cmd_dir_ref rather than 
 		// g_object_ref_sink :)
 		//g_object_ref_sink(gnomecmddir);
 		gnome_cmd_dir_ref(gnomecmddir);
@@ -885,7 +885,7 @@ void GcmdGtkFoldview::control_connection_combo_update()
 		// dont add connection if
 		// it is closed AND it is not a device AND it is not smb
 		if  (
-				!gnome_cmd_con_is_open (con)		&&
+				!gnome_cmd_con_is_open (con)		&& 
 				!GNOME_CMD_IS_CON_DEVICE (con)		&&
 				!GNOME_CMD_IS_CON_SMB (con)
 			)  continue;
@@ -903,3 +903,6 @@ void GcmdGtkFoldview::control_connection_combo_update()
 	else
 		combo->select_data(model.connection());
 }
+
+
+
diff --git a/src/gnome-cmd-foldview-gvfs.cc b/src/gnome-cmd-foldview-gvfs.cc
index 3eaa0c1..f8071a7 100644
--- a/src/gnome-cmd-foldview-gvfs.cc
+++ b/src/gnome-cmd-foldview-gvfs.cc
@@ -8,7 +8,7 @@
 
 	C++
 
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 
@@ -729,3 +729,4 @@ void GVFS_async_load_subdirectories(
 		GVFS_async_load_subdirectories_callback,
 		(gpointer)ga);
 }
+
diff --git a/src/gnome-cmd-foldview-gvfs.h b/src/gnome-cmd-foldview-gvfs.h
index 240f1ea..a8fcd4e 100644
--- a/src/gnome-cmd-foldview-gvfs.h
+++ b/src/gnome-cmd-foldview-gvfs.h
@@ -332,4 +332,7 @@ void			GVFS_async_load_subdirectories(
 					gint						max_result,
 					gboolean					follow_links);
 
+
+
+
 #endif //__GCMDGTKFOLDVIEW_GVFS_H__
diff --git a/src/gnome-cmd-foldview-model.cc b/src/gnome-cmd-foldview-model.cc
index f5381d2..f3af2a3 100644
--- a/src/gnome-cmd-foldview-model.cc
+++ b/src/gnome-cmd-foldview-model.cc
@@ -8,7 +8,7 @@
 
 	C++
 
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 
@@ -445,3 +445,4 @@ void GcmdGtkFoldview::Model::iter_remove_all()
 {
 	gtk_tree_store_clear(treestore());
 }
+
diff --git a/src/gnome-cmd-foldview-private.h b/src/gnome-cmd-foldview-private.h
index a38c830..661ab79 100644
--- a/src/gnome-cmd-foldview-private.h
+++ b/src/gnome-cmd-foldview-private.h
@@ -25,7 +25,7 @@
 /******************************************************************************
 
 	C++
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 	TODO GWR
@@ -49,9 +49,66 @@
 		Notification from filesystem ( very hard to do, we're really going
 		multithread ) -> gdk_threads_enter will be enough I think
 
+DONE	foldview correct position on show / hide ( cmdline, buttonbar, ... )
+
+DONE	(Finally) gcmd crashes when opening access-denied folder from treeview
+		in tab, after showing an alert
+
+DONE	Going crazy with correct theming of treeview with selectionned items,
+		focus between widgets,...
+
+
+DONE	combo connections at startup
+
+DONE	gtk_widget_set_sensitive on non-full-functional items of context menu
+
+DONE	Check index_ff on qstack_push()
+
+DONE	? mutex on handles : no, gvfs_async calls are queued
+		and since I use gdk_threads_enter/leave, there is no more
+		concurrency between gtk & gvfs
+
+DONE	why GVFS_qstack_ff / GVFS_qstack_size  is always n-2 / n ??? should be n / n
+		-> because t' affiches ff _avant_ update et qsize au lieu de qsize - 1,
+		stupid, ça fait un décalage de 2
+
+DONE	Comments cleanup
+
+DONE	Private logging for gvfs ops
+
+DONE	Cancel all async ops
+
+DONE	Big Bug in checking type of GnomeVFSFileInfo : GNOME_VFS_FILE_TYPE_...
+		are distinct values - it is not a bitfield, triple fuck, spended time
+		on that
+
 	---------------------------------------------------------------------------
 	TODO EPIOTR
 
+DONE	in src/gnome-cmd-foldview.h:
+        extern		gboolean			gnome_cmd_foldview_set_root_1(gchar *text);
+		...
+        extern		GtkWidget		*GcmdWidget();
+        'extern' is superfluous here, please remove it
+
+DONE	epiotr.10.07.16.gcmd-foldview
+DONE	ua
+
+		epiotr.10.07.22.kill-warnings
+DONE	epiotr.10.07.22.gtk_object_ref,unref
+
+DONE	epiotr.10.07.24.000? struct-gvfs_async_caller_data
+DONE	epiotr.10.07.24.000? struct-gvfs-async
+DONE	epiotr.10.07.24.000? struct-gvfs-async-load-subdirs
+DONE	epiotr.10.07.24.000? struct-gvfs-async-load-subdirs-subdirs
+
+
+DONE	* I've moved view_treeview() to gnome-cmd-user-actions.cc. I'm
+		sending you a patch for that.
+
+DONE	* after opening foldview, cmdline is moved from bottom to top -
+		that requires fixing
+
 		* foldview should respect global settings for case sensitive
 		sorting (gnome_cmd_data.case_sens_sort) and showing hidden dirs
 		(gnome_cmd_data.filter_settings.hidden)
@@ -782,7 +839,8 @@ struct GcmdGtkFoldviewClass
   void (* gcmdgtkfoldview) (GcmdGtkFoldview* fv);
 };
 
-GcmdGtkFoldview		*GcmdFoldview();
-GtkWidget			*GcmdWidget();
+extern		GcmdGtkFoldview		*GcmdFoldview();
+extern		GtkWidget			*GcmdWidget();
+
 
 #endif //__GCMDGTKFOLDVIEW_PRIVATE_H__
diff --git a/src/gnome-cmd-foldview-view.cc b/src/gnome-cmd-foldview-view.cc
index 9512a19..70c4fff 100644
--- a/src/gnome-cmd-foldview-view.cc
+++ b/src/gnome-cmd-foldview-view.cc
@@ -8,7 +8,7 @@
 
 	C++
 
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 
@@ -77,7 +77,7 @@ myfunc(
 
 	gtk_tree_model_get(model, iter, 1, &icon, -1);
 
-	g_object_set(renderer, "pixbuf", GcmdFoldview()->view.pixbuf( (GcmdGtkFoldview::View::eIcon) icon), NULL);
+	g_object_set(renderer, "pixbuf", GcmdFoldview()->view.pixbuf( (GcmdGtkFoldview::View::eIcon)icon), NULL);
 }
 
 //=============================================================================
@@ -160,7 +160,7 @@ void signal_cursor_changed(
 
 	GtkTreeIter			iter_selected   = GcmdGtkFoldview::Model::s_iter_NULL;
 	//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-	// gwr_inf("signal_cursor_changed");
+	//gwr_inf("signal_cursor_changed");
 
 	//  get path to currently selected iter
 	tree_sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_view));
@@ -169,13 +169,15 @@ void signal_cursor_changed(
 		gwr_err("View::signal_cursor_changed:gtk_tree_view_get_selection failed");
 	}
 
-	// Note: gtk_tree_selection_count_selected_rows() does not exist in gtk+-2.0, only in gtk+ >= v2.2 !
+	// Note: gtk_tree_selection_count_selected_rows() does not
+	//   exist in gtk+-2.0, only in gtk+ >= v2.2 !
 	tree_sel_card = gtk_tree_selection_count_selected_rows(tree_sel);
 
 	if ( tree_sel_card == 1 )
 	{
 		if ( gtk_tree_selection_get_selected( tree_sel, NULL, &iter_selected) )
 		{
+
 		}
 		else
 		{
@@ -210,11 +212,11 @@ gboolean GcmdGtkFoldview::View::create(GtkWidget *_this, GtkTreeModel *_treemode
 
 	gtk_object_set_data_full (GTK_OBJECT (foldview()), "con_combo", m_con_combo, (GtkDestroyNotify) g_object_unref);
 	gtk_widget_set_size_request (m_con_combo, 150, -1);
-	gtk_clist_set_row_height (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 20);
-	gtk_entry_set_editable (GTK_ENTRY (GNOME_CMD_COMBO (m_con_combo)->entry), FALSE);
-	gtk_clist_set_column_width (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 0, 20);
-	gtk_clist_set_column_width (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 1, 60);
-	GTK_WIDGET_UNSET_FLAGS (GNOME_CMD_COMBO (m_con_combo)->button, GTK_CAN_FOCUS);
+		gtk_clist_set_row_height (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 20);
+		gtk_entry_set_editable (GTK_ENTRY (GNOME_CMD_COMBO (m_con_combo)->entry), FALSE);
+		gtk_clist_set_column_width (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 0, 20);
+		gtk_clist_set_column_width (GTK_CLIST (GNOME_CMD_COMBO (m_con_combo)->list), 1, 60);
+		GTK_WIDGET_UNSET_FLAGS (GNOME_CMD_COMBO (m_con_combo)->button, GTK_CAN_FOCUS);
 
 	// create the free space on volume label
 	//m_vol_label = gtk_label_new ("* LABEL *");
@@ -352,10 +354,10 @@ gboolean GcmdGtkFoldview::View::create(GtkWidget *_this, GtkTreeModel *_treemode
 	gtk_box_pack_start(GTK_BOX(m_con_hbox), m_con_combo, FALSE, FALSE, 0);
 	//gtk_box_pack_start (GTK_BOX(m_con_hbox), m_vol_label, FALSE, FALSE, 0);
 
-	//gtk_box_pack_start (GTK_BOX (m_con_hbox), m_dir_indicator, FALSE, FALSE, 0);
-	//padding = create_hbox (*fs, FALSE, 6);
-	//gtk_box_pack_start (GTK_BOX (vbox), padding, FALSE, TRUE, 0);
-	//gtk_box_pack_start (GTK_BOX (padding), info_label, FALSE, TRUE, 6);
+		 //gtk_box_pack_start (GTK_BOX (m_con_hbox), m_dir_indicator, FALSE, FALSE, 0);
+		 //padding = create_hbox (*fs, FALSE, 6);
+		 //gtk_box_pack_start (GTK_BOX (vbox), padding, FALSE, TRUE, 0);
+		 //gtk_box_pack_start (GTK_BOX (padding), info_label, FALSE, TRUE, 6);
 
 	gtk_box_pack_start(GTK_BOX(foldview()), m_con_hbox, FALSE, FALSE, 0);
 	gtk_box_pack_start(GTK_BOX(foldview()), m_scrolledwindow, TRUE, TRUE, 0);
@@ -379,9 +381,9 @@ gboolean GcmdGtkFoldview::View::create(GtkWidget *_this, GtkTreeModel *_treemode
 	//fs->update_concombo_visibility();
 	gtk_widget_show(m_con_combo);
 	//gtk_widget_show(m_vol_label);
-	//gtk_widget_show(m_info_label);
-	//gtk_widget_show (m_dir_indicator);
-	//gtk_widget_show (fs->list_widget);
+		//gtk_widget_show(m_info_label);
+		//gtk_widget_show (m_dir_indicator);
+		//gtk_widget_show (fs->list_widget);
 	gtk_widget_show(m_treeview);
 
 	gtk_widget_show(m_scrolledwindow);
@@ -393,6 +395,7 @@ gboolean GcmdGtkFoldview::View::create(GtkWidget *_this, GtkTreeModel *_treemode
 
 void GcmdGtkFoldview::View::destroy()
 {
+
 }
 
 //=============================================================================
@@ -699,3 +702,12 @@ void GcmdGtkFoldview::View::update_style()
 	gtk_widget_set_style (GTK_WIDGET(treeview()), style_foldview);
 	((GnomeCmdCombo*)connection_combo())->update_style();
 }
+
+
+
+
+
+
+
+
+
diff --git a/src/gnome-cmd-foldview.cc b/src/gnome-cmd-foldview.cc
index a950a97..1bd57d6 100644
--- a/src/gnome-cmd-foldview.cc
+++ b/src/gnome-cmd-foldview.cc
@@ -8,7 +8,7 @@
 
 	C++
 
-	Contains variadic macros
+	Contain variadic macros
 
 	---------------------------------------------------------------------------
 
@@ -188,9 +188,9 @@ GcmdGtkFoldview::eFileAccess GcmdGtkFoldview::Access_from_permissions(
 }
 
 GcmdGtkFoldview::View::eIcon GcmdGtkFoldview::View::Icon_from_type_permissions(
-	GnomeVFSFileType		type,
+	GnomeVFSFileType		type, 
 	GnomeVFSFilePermissions permissions)
-{
+{  
 	eFileAccess	access  = eAccessUnknown;
 
 	access = Access_from_permissions(permissions);
@@ -199,9 +199,9 @@ GcmdGtkFoldview::View::eIcon GcmdGtkFoldview::View::Icon_from_type_permissions(
 }
 
 GcmdGtkFoldview::View::eIcon GcmdGtkFoldview::View::Icon_from_type_access(
-	GnomeVFSFileType				type,
+	GnomeVFSFileType				type, 
 	GcmdGtkFoldview::eFileAccess	access)
-{
+{  
 	if ( type == GNOME_VFS_FILE_TYPE_DIRECTORY )
 	{
 		switch ( access )
@@ -378,3 +378,4 @@ void
 gcmdgtkfoldview_clear (GcmdGtkFoldview *foldview)
 {
 }
+



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