Skip to content

Commit

Permalink
Introduce a new struct ViewDir to handle directory views common
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Laurent Monin committed Apr 16, 2008
1 parent 926c912 commit b90ce43
Show file tree
Hide file tree
Showing 16 changed files with 463 additions and 397 deletions.
2 changes: 2 additions & 0 deletions src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ geeqie_SOURCES = \
thumb_standard.h \
utilops.c \
utilops.h \
view_dir.c \
view_dir.h \
view_dir_list.c \
view_dir_list.h \
view_dir_tree.c \
Expand Down
2 changes: 1 addition & 1 deletion src/globals.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ ConfOptions *init_options(ConfOptions *options)
options->layout.style = 0;

options->layout.view_as_icons = FALSE;
options->layout.view_as_tree = FALSE;
options->layout.dir_view_type = DIRVIEW_LIST;

options->show_icon_names = TRUE;

Expand Down
52 changes: 15 additions & 37 deletions src/layout.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
#include "pixbuf-renderer.h"
#include "pixbuf_util.h"
#include "utilops.h"
#include "view_dir_list.h"
#include "view_dir_tree.h"
#include "view_dir.h"
#include "view_file_list.h"
#include "view_file_icon.h"
#include "ui_bookmark.h"
Expand Down Expand Up @@ -170,14 +169,7 @@ static void layout_path_entry_cb(const gchar *path, gpointer data)
g_free(buf);
}

static void layout_vdlist_select_cb(ViewDirList *vdl, const gchar *path, gpointer data)
{
LayoutWindow *lw = data;

layout_set_path(lw, path);
}

static void layout_vdtree_select_cb(ViewDirTree *vdt, const gchar *path, gpointer data)
static void layout_vd_select_cb(ViewDir *vd, const gchar *path, gpointer data)
{
LayoutWindow *lw = data;

Expand Down Expand Up @@ -209,22 +201,11 @@ static GtkWidget *layout_tool_setup(LayoutWindow *lw)
g_signal_connect(G_OBJECT(lw->path_entry->parent), "changed",
G_CALLBACK(layout_path_entry_changed_cb), lw);

if (lw->tree_view)
{
lw->vdt = vdtree_new(lw->path, TRUE);
vdtree_set_layout(lw->vdt, lw);
vdtree_set_select_func(lw->vdt, layout_vdtree_select_cb, lw);

lw->dir_view = lw->vdt->widget;
}
else
{
lw->vdl = vdlist_new(lw->path);
vdlist_set_layout(lw->vdl, lw);
vdlist_set_select_func(lw->vdl, layout_vdlist_select_cb, lw);
lw->vd = vd_new(lw->dir_view_type, lw->path);
vd_set_layout(lw->vd, lw);
vd_set_select_func(lw->vd, layout_vd_select_cb, lw);

lw->dir_view = lw->vdl->widget;
}
lw->dir_view = lw->vd->widget;

gtk_box_pack_start(GTK_BOX(box), lw->dir_view, TRUE, TRUE, 0);
gtk_widget_show(lw->dir_view);
Expand Down Expand Up @@ -949,8 +930,7 @@ static void layout_sync_path(LayoutWindow *lw)
lw->last_time = filetime(lw->path);

gtk_entry_set_text(GTK_ENTRY(lw->path_entry), lw->path);
if (lw->vdl) vdlist_set_path(lw->vdl, lw->path);
if (lw->vdt) vdtree_set_path(lw->vdt, lw->path);
vd_set_path(lw->vd, lw->path);

if (lw->vfl) vflist_set_path(lw->vfl, lw->path);
if (lw->vfi) vficon_set_path(lw->vfi, lw->path);
Expand Down Expand Up @@ -1024,8 +1004,7 @@ static void layout_refresh_lists(LayoutWindow *lw)
{
if (lw->path) lw->last_time = filetime(lw->path);

if (lw->vdl) vdlist_refresh(lw->vdl);
if (lw->vdt) vdtree_refresh(lw->vdt);
vd_refresh(lw->vd);

if (lw->vfl) vflist_refresh(lw->vfl);
if (lw->vfi) vficon_refresh(lw->vfi);
Expand Down Expand Up @@ -1163,23 +1142,23 @@ gint layout_geometry_get_dividers(LayoutWindow *lw, gint *h, gint *v)
return TRUE;
}

void layout_views_set(LayoutWindow *lw, gint tree, gint icons)
void layout_views_set(LayoutWindow *lw, DirViewType type, gint icons)
{
if (!layout_valid(&lw)) return;

if (lw->tree_view == tree && lw->icon_view == icons) return;
if (lw->dir_view_type == type && lw->icon_view == icons) return;

lw->tree_view = tree;
lw->dir_view_type = type;
lw->icon_view = icons;

layout_style_set(lw, -1, NULL);
}

gint layout_views_get(LayoutWindow *lw, gint *tree, gint *icons)
gint layout_views_get(LayoutWindow *lw, DirViewType *type, gint *icons)
{
if (!layout_valid(&lw)) return FALSE;

*tree = lw->tree_view;
*type = lw->dir_view_type;
*icons = lw->icon_view;

return TRUE;
Expand Down Expand Up @@ -1663,8 +1642,7 @@ void layout_style_set(LayoutWindow *lw, gint style, const gchar *order)
lw->thumb_button = NULL;
lw->path_entry = NULL;
lw->dir_view = NULL;
lw->vdl = NULL;
lw->vdt = NULL;
lw->vd = NULL;

lw->file_view = NULL;
lw->vfl = NULL;
Expand Down Expand Up @@ -1919,7 +1897,7 @@ LayoutWindow *layout_new_with_geometry(const gchar *path, gint popped, gint hidd

layout_config_parse(options->layout.style, options->layout.order,
&lw->dir_location, &lw->file_location, &lw->image_location);
lw->tree_view = options->layout.view_as_tree;
lw->dir_view_type = options->layout.dir_view_type;
lw->icon_view = options->layout.view_as_icons;

/* divider positions */
Expand Down
4 changes: 2 additions & 2 deletions src/layout.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ gint layout_sort_get(LayoutWindow *lw, SortType *type, gint *ascend);
gint layout_geometry_get(LayoutWindow *lw, gint *x, gint *y, gint *w, gint *h);
gint layout_geometry_get_dividers(LayoutWindow *lw, gint *h, gint *v);

void layout_views_set(LayoutWindow *lw, gint tree, gint icons);
gint layout_views_get(LayoutWindow *lw, gint *tree, gint *icons);
void layout_views_set(LayoutWindow *lw, DirViewType type, gint icons);
gint layout_views_get(LayoutWindow *lw, DirViewType *type, gint *icons);

void layout_status_update(LayoutWindow *lw, const gchar *text);

Expand Down
25 changes: 17 additions & 8 deletions src/layout_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */

Expand Down Expand Up @@ -91,9 +92,9 @@ gint layout_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
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;
}
Expand Down Expand Up @@ -562,16 +563,16 @@ static void layout_menu_list_cb(GtkRadioAction *action, GtkRadioAction *current,
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)
Expand Down Expand Up @@ -1051,6 +1052,7 @@ static GtkActionEntry menu_entries[] = {
{ "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") },
Expand Down Expand Up @@ -1133,7 +1135,6 @@ static GtkActionEntry menu_entries[] = {
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) },
Expand All @@ -1155,6 +1156,7 @@ static GtkRadioActionEntry menu_split_radio_entries[] = {
{ "SplitSingle", NULL, N_("Single"), "Y", NULL, SPLIT_NONE }
};


#undef CB

static const char *menu_ui_description =
Expand Down Expand Up @@ -1252,7 +1254,11 @@ static const char *menu_ui_description =
" <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'/>"
Expand Down Expand Up @@ -1373,6 +1379,9 @@ void layout_actions_setup(LayoutWindow *lw)
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);
Expand Down Expand Up @@ -1534,7 +1543,7 @@ static void layout_util_sync_views(LayoutWindow *lw)
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);
Expand Down
2 changes: 1 addition & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1237,7 +1237,7 @@ static void exit_program_final(void)

layout_geometry_get_dividers(NULL, &options->layout.main_window.hdivider_pos, &options->layout.main_window.vdivider_pos);

layout_views_get(NULL, &options->layout.view_as_tree, &options->layout.view_as_icons);
layout_views_get(NULL, &options->layout.dir_view_type, &options->layout.view_as_icons);

options->layout.show_thumbnails = layout_thumb_get(NULL);
layout_sort_get(NULL, &options->file_sort.method, &options->file_sort.ascending);
Expand Down
10 changes: 8 additions & 2 deletions src/rcfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,11 @@ static void read_int_option(FILE *f, gchar *option, gchar *label, gchar *value,
}
}

static void write_uint_option(SecureSaveInfo *ssi, gchar *label, guint n)
{
secure_fprintf(ssi, "%s: %u\n", label, n);
}

static void read_uint_option(FILE *f, gchar *option, gchar *label, gchar *value, guint *n)
{
if (n && strcasecmp(option, label) == 0)
Expand Down Expand Up @@ -280,6 +285,7 @@ void save_options(void)

#define WRITE_BOOL(_name_) write_bool_option(ssi, #_name_, options->_name_)
#define WRITE_INT(_name_) write_int_option(ssi, #_name_, options->_name_)
#define WRITE_UINT(_name_) write_uint_option(ssi, #_name_, options->_name_)
#define WRITE_INT_UNIT(_name_, _unit_) write_int_unit_option(ssi, #_name_, options->_name_, _unit_)
#define WRITE_CHAR(_name_) write_char_option(ssi, #_name_, options->_name_)
#define WRITE_COLOR(_name_) write_color_option(ssi, #_name_, &options->_name_)
Expand Down Expand Up @@ -335,7 +341,7 @@ void save_options(void)
WRITE_INT(layout.style);
WRITE_CHAR(layout.order);
WRITE_BOOL(layout.view_as_icons);
WRITE_BOOL(layout.view_as_tree);
WRITE_UINT(layout.dir_view_type);
WRITE_BOOL(layout.show_thumbnails);
WRITE_SEPARATOR();

Expand Down Expand Up @@ -619,7 +625,7 @@ void load_options(void)
READ_INT(layout.style);
READ_CHAR(layout.order);
READ_BOOL(layout.view_as_icons);
READ_BOOL(layout.view_as_tree);
READ_UINT(layout.dir_view_type);
READ_BOOL(layout.show_thumbnails);

/* window positions */
Expand Down
Loading

0 comments on commit b90ce43

Please sign in to comment.