diff src/layout_util.c @ 380:5afe77bb563a

Introduce a new struct ViewDir to handle directory views common data. Specific data is now in ViewDirInfoList and ViewDirInfoTree. Type of directory view can be specified with enum DirViewType. This is saved to rc file as layout.dir_view_type, which replace layout.view_as_tree. Code was modified to reflect these changes. This is a first to move to merge common code of view_dir_list.c and view_dir_tree.c and ease the introduction of new types of directory view.
author zas_
date Wed, 16 Apr 2008 14:45:22 +0000
parents 63380ea3e65d
children c4080362d619
line wrap: on
line diff
--- a/src/layout_util.c	Tue Apr 15 21:49:28 2008 +0000
+++ b/src/layout_util.c	Wed Apr 16 14:45:22 2008 +0000
@@ -37,6 +37,7 @@
 #include "ui_menu.h"
 #include "ui_misc.h"
 #include "ui_tabcomp.h"
+#include "view_dir.h"
 
 #include <gdk/gdkkeysyms.h> /* for keyboard values */
 
@@ -91,9 +92,9 @@
 			return TRUE;
 			}
 		}
-	if (lw->vdt && GTK_WIDGET_HAS_FOCUS(lw->vdt->treeview) &&
+	if (lw->vd && lw->dir_view_type == DIRVIEW_TREE && GTK_WIDGET_HAS_FOCUS(lw->vd->view) &&
 	    !layout_key_match(event->keyval) &&
-	    gtk_widget_event(lw->vdt->treeview, (GdkEvent *)event))
+	    gtk_widget_event(lw->vd->view, (GdkEvent *)event))
 		{
 		return TRUE;
 		}
@@ -562,16 +563,16 @@
 	if (lw->full_screen)
 		layout_image_full_screen_stop(lw);
 
-	layout_views_set(lw, lw->tree_view, (gtk_radio_action_get_current_value(action) == 1));
+	layout_views_set(lw, lw->dir_view_type, (gtk_radio_action_get_current_value(action) == 1));
 }
 
-static void layout_menu_tree_cb(GtkToggleAction *action, gpointer data)
+static void layout_menu_view_dir_as_cb(GtkRadioAction *action, GtkRadioAction *current, gpointer data)
 {
 	LayoutWindow *lw = data;
 	if (lw->full_screen)
 		layout_image_full_screen_stop(lw);
 
-	layout_views_set(lw, gtk_toggle_action_get_active(action), lw->icon_view);
+	layout_views_set(lw, (DirViewType) gtk_radio_action_get_current_value(action), lw->icon_view);
 }
 
 static void layout_menu_view_in_new_window_cb(GtkAction *action, gpointer data)
@@ -1051,6 +1052,7 @@
   { "SelectMenu",	NULL,		N_("_Select") },
   { "AdjustMenu",	NULL,		N_("_Adjust") },
   { "ViewMenu",		NULL,		N_("_View") },
+  { "DirMenu",          NULL,           N_("_View Directory as") },
   { "ZoomMenu",		NULL,		N_("_Zoom") },
   { "SplitMenu",	NULL,		N_("_Split") },
   { "HelpMenu",		NULL,		N_("_Help") },
@@ -1133,7 +1135,6 @@
 static GtkToggleActionEntry menu_toggle_entries[] = {
   { "Thumbnails",	NULL,		N_("_Thumbnails"),	"T",		NULL,	CB(layout_menu_thumb_cb) },
   { "ShowMarks",        NULL,		N_("Show _Marks"),	"M",		NULL,	CB(layout_menu_marks_cb) },  
-  { "FolderTree",	NULL,		N_("Tr_ee"),		"<control>T",	NULL,	CB(layout_menu_tree_cb) },
   { "FloatTools",	NULL,		N_("_Float file list"),	"L",		NULL,	CB(layout_menu_float_cb) },
   { "HideToolbar",	NULL,		N_("Hide tool_bar"),	NULL,		NULL,	CB(layout_menu_toolbar_cb) },
   { "SBarKeywords",	NULL,		N_("_Keywords"),	"<control>K",	NULL,	CB(layout_menu_bar_info_cb) },
@@ -1155,6 +1156,7 @@
   { "SplitSingle",	NULL,		N_("Single"),		"Y",		NULL,	SPLIT_NONE }
 };
 
+
 #undef CB
 
 static const char *menu_ui_description =
@@ -1252,7 +1254,11 @@
 "      <menuitem action='ViewList'/>"
 "      <menuitem action='ViewIcons'/>"
 "      <separator/>"
-"      <menuitem action='FolderTree'/>"
+"      <menu action='DirMenu'>"
+"        <menuitem action='FolderList'/>"
+"        <menuitem action='FolderTree'/>"
+"      </menu>"
+"      <separator/>"
 "      <menuitem action='ImageOverlay'/>"
 "      <menuitem action='HistogramChan'/>"
 "      <menuitem action='HistogramLog'/>"
@@ -1373,6 +1379,9 @@
 	gtk_action_group_add_radio_actions(lw->action_group,
 					   menu_split_radio_entries, G_N_ELEMENTS(menu_split_radio_entries),
 					   0, G_CALLBACK(layout_menu_split_cb), lw);
+	gtk_action_group_add_radio_actions(lw->action_group,
+					   menu_view_dir_radio_entries, G_N_ELEMENTS(menu_view_dir_radio_entries),
+					   0, G_CALLBACK(layout_menu_view_dir_as_cb), lw);
 
 	lw->ui_manager = gtk_ui_manager_new();
 	gtk_ui_manager_set_add_tearoffs(lw->ui_manager, TRUE);
@@ -1534,7 +1543,7 @@
 	if (!lw->action_group) return;
 
 	action = gtk_action_group_get_action(lw->action_group, "FolderTree");
-	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->tree_view);
+	gtk_radio_action_set_current_value(GTK_RADIO_ACTION(action), lw->dir_view_type);
 
 	action = gtk_action_group_get_action(lw->action_group, "ViewIcons");
 	gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(action), lw->icon_view);