From 4f7a499c0cb098b7efdb81579c6748928d30e40f Mon Sep 17 00:00:00 2001 From: Thomas Leonard Date: Wed, 14 Jun 2000 11:59:15 +0000 Subject: [PATCH] r301: Added a new display style, 'Small, Full Info'. --- ROX-Filer/Help/Changes | 9 +- ROX-Filer/Help/TODO | 2 + ROX-Filer/src/Docs/Manual.lyx | 15 +++- ROX-Filer/src/Docs/Structs.dia | Bin 3160 -> 3162 bytes ROX-Filer/src/filer.c | 186 ++++++++++++++++++++++++++++++++--------- ROX-Filer/src/filer.h | 10 ++- ROX-Filer/src/menu.c | 17 +++- 7 files changed, 187 insertions(+), 52 deletions(-) rewrite ROX-Filer/src/Docs/Structs.dia (100%) diff --git a/ROX-Filer/Help/Changes b/ROX-Filer/Help/Changes index 1192a3eb..c8953381 100644 --- a/ROX-Filer/Help/Changes +++ b/ROX-Filer/Help/Changes @@ -2,6 +2,11 @@ A RISC OS-like filer for X by Thomas Leonard +14-Jun-2000 +~~~~~~~~~~~ +Fixed (hopefully) a problem where ImLib support failed on multi-depth +displays. + 06-Jun-2000 ~~~~~~~~~~~ Added the install.sh script for easier installation. @@ -167,8 +172,8 @@ Added support for mc's Virtual File System. New Window appears greyed out if Unique Windows is selected. Added 'Permissions' (chmod) feature. -10-Mar-20000 -~~~~~~~~~~~~ +10-Mar-2000 +~~~~~~~~~~~ Added Bernard Jungen's patch: - Dates are displayed in a more RISC OS like format. - (Scanning) is shown in the titlebar during scans. diff --git a/ROX-Filer/Help/TODO b/ROX-Filer/Help/TODO index 81698d10..c5b99899 100644 --- a/ROX-Filer/Help/TODO +++ b/ROX-Filer/Help/TODO @@ -8,6 +8,8 @@ someone sends patches!). BUGS +Make drag and drop work with gvim. + Rename box - use action window (currently doesn't work across file systems) GNOME toolbar diff --git a/ROX-Filer/src/Docs/Manual.lyx b/ROX-Filer/src/Docs/Manual.lyx index 781ff724..954e614a 100644 --- a/ROX-Filer/src/Docs/Manual.lyx +++ b/ROX-Filer/src/Docs/Manual.lyx @@ -1,4 +1,4 @@ -#This file was created by Wed Jun 7 10:53:24 2000 +#This file was created by Wed Jun 14 12:56:55 2000 #LyX 0.12 (C) 1995-1998 Matthias Ettrich and the LyX Team \lyxformat 2.15 \textclass article @@ -705,7 +705,7 @@ The display menu \layout Standard \added_space_top 0.3cm \added_space_bottom 0.3cm \align center \LyXTable multicol5 -11 2 0 0 -1 -1 -1 -1 +12 2 0 0 -1 -1 -1 -1 1 1 0 0 1 1 0 0 0 1 0 0 @@ -716,6 +716,7 @@ multicol5 0 1 0 0 0 1 0 0 0 1 0 0 +0 1 0 0 0 1 1 0 8 1 0 "" "" 2 1 1 "8cm" "" @@ -730,6 +731,8 @@ multicol5 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" +0 8 0 1 0 0 0 "" "" +0 8 0 1 0 0 0 "" "" 0 2 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" 0 8 0 1 0 0 0 "" "" @@ -760,11 +763,15 @@ dag \latex default \newline -Full Info +Large, Full Info \newline Entries are displayed with their icon, name, type, permissions, owner and size. \newline +Small, Full Info +\newline +As above, but with a smaller icon and all on one line. +\newline Sort by Name \newline Items are arranged by name. @@ -2817,7 +2824,7 @@ detach() \layout Standard \added_space_top 0.3cm \added_space_bottom 0.3cm \align center -\begin_inset Figure size 595 604 +\begin_inset Figure size 595 842 file Structs.eps width 3 100 flags 9 diff --git a/ROX-Filer/src/Docs/Structs.dia b/ROX-Filer/src/Docs/Structs.dia dissimilarity index 100% index 56397fe5e02fd09045fb0fc98da41795400cc986..cb8abbce78d204f08d6907a6efb34a97ac5e8bae 100644 GIT binary patch literal 3162 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 { - case FULL_INFO: + case LARGE_FULL_INFO: return MAX_ICON_WIDTH + 12 + MAX(item->details_width, item->name_width); + case SMALL_FULL_INFO: + return SMALL_ICON_WIDTH + item->name_width + + 12 + item->details_width; case SMALL_ICONS: w = MIN(item->name_width, o_small_truncate); return SMALL_ICON_WIDTH + 12 + w; @@ -456,7 +467,7 @@ static gboolean test_point_large(Collection *collection, return ABS(point_x - (width >> 1)) < x_limit; } -static gboolean test_point_full_info(Collection *collection, +static gboolean test_point_large_full(Collection *collection, int point_x, int point_y, CollectionItem *colitem, int width, int height) @@ -479,6 +490,24 @@ static gboolean test_point_full_info(Collection *collection, return FALSE; } +static gboolean test_point_small_full(Collection *collection, + int point_x, int point_y, + CollectionItem *colitem, + int width, int height) +{ + DirItem *item = (DirItem *) colitem->data; + MaskedPixmap *image = item->image; + int image_y = MAX(0, SMALL_ICON_HEIGHT - image->height); + int low_top = height + - fixed_font->descent - 2 - item_font->ascent; + int iwidth = MIN(SMALL_ICON_WIDTH, image->width); + + if (point_x < iwidth + 2) + return point_x > 2 && point_y > image_y; + + return point_y >= low_top; +} + static gboolean test_point_small(Collection *collection, int point_x, int point_y, CollectionItem *colitem, @@ -631,6 +660,7 @@ static void draw_large_icon(GtkWidget *widget, gdk_gc_set_clip_origin(gc, 0, 0); } +/* 'box' renders a background box if the string is also selected */ static void draw_string(GtkWidget *widget, GdkFont *font, char *string, @@ -638,7 +668,8 @@ static void draw_string(GtkWidget *widget, int y, int width, int area_width, - gboolean selected) + gboolean selected, + gboolean box) { int text_height = font->ascent + font->descent; GdkRectangle clip; @@ -646,7 +677,7 @@ static void draw_string(GtkWidget *widget, ? widget->style->fg_gc[GTK_STATE_SELECTED] : widget->style->fg_gc[GTK_STATE_NORMAL]; - if (selected) + if (selected && box) gtk_paint_flat_box(widget->style, widget->window, GTK_STATE_SELECTED, GTK_SHADOW_NONE, NULL, widget, "text", @@ -683,6 +714,32 @@ static void draw_string(GtkWidget *widget, } } +/* Render the details somewhere */ +static void draw_details(GtkWidget *widget, DirItem *item, int x, int y, + int width, gboolean selected, gboolean box) +{ + draw_string(widget, + fixed_font, + details(item), + x, y, + item->details_width, + width, + selected, box); + + if (item->lstat_errno) + return; + + /* Underline the effective permissions */ + gdk_draw_rectangle(widget->window, + widget->style->fg_gc[selected ? GTK_STATE_SELECTED + : GTK_STATE_NORMAL], + TRUE, + x - 1 + fixed_width * + (5 + 4 * applicable(item->uid, item->gid)), + y + fixed_font->descent - 1, + fixed_width * 3 + 1, 1); +} + /* Return a string (valid until next call) giving details * of this item. */ @@ -714,7 +771,7 @@ char *details(DirItem *item) return buf; } -static void draw_item_full_info(GtkWidget *widget, +static void draw_item_large_full(GtkWidget *widget, CollectionItem *colitem, GdkRectangle *area) { @@ -740,27 +797,52 @@ static void draw_item_full_info(GtkWidget *widget, low_text_y - item_font->descent - fixed_font->ascent, item->name_width, text_area_width, - selected); - draw_string(widget, - fixed_font, - details(item), - text_x, low_text_y, - item->details_width, - text_area_width, - selected); + selected, TRUE); - if (item->lstat_errno) - return; + draw_details(widget, item, text_x, low_text_y, + text_area_width, selected, TRUE); +} - /* Underline the effective permissions */ - gdk_draw_rectangle(widget->window, - selected ? widget->style->white_gc - : widget->style->black_gc, - TRUE, - text_x - 1 + fixed_width * - (5 + 4 * applicable(item->uid, item->gid)), - low_text_y + fixed_font->descent - 1, - fixed_width * 3 + 1, 1); +static void draw_item_small_full(GtkWidget *widget, + CollectionItem *colitem, + GdkRectangle *area) +{ + DirItem *item = (DirItem *) colitem->data; + int text_x = area->x + SMALL_ICON_WIDTH + 4; + int bottom = area->y + area->height; + int low_text_y = bottom - item_font->descent - 2; + gboolean selected = colitem->selected; + GdkRectangle pic_area; + int text_height = item_font->ascent + item_font->descent; + int fixed_height = fixed_font->ascent + fixed_font->descent; + int box_height = MAX(text_height, fixed_height) + 2; + + pic_area.x = area->x; + pic_area.y = area->y; + pic_area.width = SMALL_ICON_WIDTH; + pic_area.height = SMALL_ICON_HEIGHT; + + draw_small_icon(widget, &pic_area, item, selected); + + if (selected) + gtk_paint_flat_box(widget->style, widget->window, + GTK_STATE_SELECTED, GTK_SHADOW_NONE, + NULL, widget, "text", + text_x, bottom - 1 - box_height, + area->width - text_x - 1, + box_height); + draw_string(widget, + item_font, + item->leafname, + text_x, + low_text_y, + item->name_width, + area->width - (text_x - area->x), + selected, FALSE); + + text_x = area->width - item->details_width - 4 + area->x; + draw_details(widget, item, text_x, bottom - fixed_font->descent - 2, + item->details_width + 2, selected, FALSE); } static void draw_item_small(GtkWidget *widget, @@ -787,7 +869,7 @@ static void draw_item_small(GtkWidget *widget, low_text_y, item->name_width, area->width - (text_x - area->x), - selected); + selected, TRUE); } static void draw_item_large(GtkWidget *widget, @@ -811,7 +893,7 @@ static void draw_item_large(GtkWidget *widget, text_x, text_y, item->name_width, area->width, - selected); + selected, TRUE); } static void show_menu(Collection *collection, GdkEventButton *event, @@ -1479,7 +1561,8 @@ static void shrink_width(FilerWindow *filer_window) int width = MIN_ITEM_WIDTH; int this_width; DisplayStyle style = filer_window->display_style; - int text_height; + int text_height, fixed_height; + int height; text_height = item_font->ascent + item_font->descent; @@ -1491,11 +1574,25 @@ static void shrink_width(FilerWindow *filer_window) width = this_width; } - collection_set_item_size(filer_window->collection, - width, - style == FULL_INFO ? MAX_ICON_HEIGHT + 4 : - style == SMALL_ICONS ? MAX(text_height, SMALL_ICON_HEIGHT) + 4 - : text_height + MAX_ICON_HEIGHT + 8); + switch (style) + { + case LARGE_FULL_INFO: + height = MAX_ICON_HEIGHT + 4; + break; + case SMALL_FULL_INFO: + fixed_height = fixed_font->ascent + fixed_font->descent; + text_height = MAX(text_height, fixed_height); + /* No break */ + case SMALL_ICONS: + height = MAX(text_height, SMALL_ICON_HEIGHT) + 4; + break; + case LARGE_ICONS: + default: + height = text_height + MAX_ICON_HEIGHT + 8; + break; + } + + collection_set_item_size(filer_window->collection, width, height); } void filer_set_sort_fn(FilerWindow *filer_window, @@ -1527,13 +1624,17 @@ void filer_style_set(FilerWindow *filer_window, DisplayStyle style) switch (style) { + case SMALL_FULL_INFO: + collection_set_functions(filer_window->collection, + draw_item_small_full, test_point_small_full); + break; case SMALL_ICONS: collection_set_functions(filer_window->collection, draw_item_small, test_point_small); break; - case FULL_INFO: + case LARGE_FULL_INFO: collection_set_functions(filer_window->collection, - draw_item_full_info, test_point_full_info); + draw_item_large_full, test_point_large_full); break; default: collection_set_functions(filer_window->collection, @@ -2082,12 +2183,13 @@ static void save_options() option_write("filer_display_style", last_display_style == LARGE_ICONS ? "Large Icons" : last_display_style == SMALL_ICONS ? "Small Icons" : - "Full Info"); + last_display_style == SMALL_FULL_INFO ? "Small, Full Info" : + "Large, Full Info"); option_write("filer_sort_by", last_sort_fn == sort_by_name ? "Name" : last_sort_fn == sort_by_type ? "Type" : last_sort_fn == sort_by_date ? "Date" : - "Size"); + "Size"); option_write("filer_toolbar", o_toolbar == TOOLBAR_NONE ? "None" : o_toolbar == TOOLBAR_NORMAL ? "Normal" : o_toolbar == TOOLBAR_GNOME ? "GNOME" : @@ -2135,8 +2237,10 @@ static char *filer_display_style(char *data) last_display_style = LARGE_ICONS; else if (g_strcasecmp(data, "Small Icons") == 0) last_display_style = SMALL_ICONS; - else if (g_strcasecmp(data, "Full Info") == 0) - last_display_style = FULL_INFO; + else if (g_strcasecmp(data, "Large, Full Info") == 0) + last_display_style = LARGE_FULL_INFO; + else if (g_strcasecmp(data, "Small, Full Info") == 0) + last_display_style = SMALL_FULL_INFO; else return _("Unknown display style"); diff --git a/ROX-Filer/src/filer.h b/ROX-Filer/src/filer.h index 1ca77804..0a3e1a48 100644 --- a/ROX-Filer/src/filer.h +++ b/ROX-Filer/src/filer.h @@ -16,7 +16,14 @@ typedef struct _FilerWindow FilerWindow; typedef enum {PANEL_NO, PANEL_TOP, PANEL_BOTTOM} PanelType; -typedef enum {UNKNOWN_STYLE, LARGE_ICONS, SMALL_ICONS, FULL_INFO} DisplayStyle; + +typedef enum { + UNKNOWN_STYLE, + LARGE_ICONS, + SMALL_ICONS, + LARGE_FULL_INFO, + SMALL_FULL_INFO, +} DisplayStyle; typedef enum { @@ -48,6 +55,7 @@ struct _FilerWindow FilerFlags flags; PanelType panel_type; int (*sort_fn)(const void *a, const void *b); + DisplayStyle display_style; Directory *directory; diff --git a/ROX-Filer/src/menu.c b/ROX-Filer/src/menu.c index 260e31df..9a514cdf 100644 --- a/ROX-Filer/src/menu.c +++ b/ROX-Filer/src/menu.c @@ -77,7 +77,8 @@ static gint save_to_file(GtkSavebox *savebox, guchar *pathname); /* Note that for these callbacks none of the arguments are used. */ static void large(gpointer data, guint action, GtkWidget *widget); static void small(gpointer data, guint action, GtkWidget *widget); -static void full_info(gpointer data, guint action, GtkWidget *widget); +static void large_full_info(gpointer data, guint action, GtkWidget *widget); +static void small_full_info(gpointer data, guint action, GtkWidget *widget); static void sort_name(gpointer data, guint action, GtkWidget *widget); static void sort_type(gpointer data, guint action, GtkWidget *widget); @@ -161,7 +162,8 @@ static GtkItemFactoryEntry filer_menu_def[] = { {N_("Display"), NULL, NULL, 0, ""}, {">" N_("Large Icons"), NULL, large, 0, NULL}, {">" N_("Small Icons"), NULL, small, 0, NULL}, -{">" N_("Full Info"), NULL, full_info, 0, NULL}, +{">" N_("Large, Full Info"), NULL, large_full_info, 0, NULL}, +{">" N_("Small, Full Info"), NULL, small_full_info, 0, NULL}, {">", NULL, NULL, 0, ""}, {">" N_("Sort by Name"), NULL, sort_name, 0, NULL}, {">" N_("Sort by Type"), NULL, sort_type, 0, NULL}, @@ -574,11 +576,18 @@ static void small(gpointer data, guint action, GtkWidget *widget) filer_style_set(window_with_focus, SMALL_ICONS); } -static void full_info(gpointer data, guint action, GtkWidget *widget) +static void large_full_info(gpointer data, guint action, GtkWidget *widget) { g_return_if_fail(window_with_focus != NULL); - filer_style_set(window_with_focus, FULL_INFO); + filer_style_set(window_with_focus, LARGE_FULL_INFO); +} + +static void small_full_info(gpointer data, guint action, GtkWidget *widget) +{ + g_return_if_fail(window_with_focus != NULL); + + filer_style_set(window_with_focus, SMALL_FULL_INFO); } static void sort_name(gpointer data, guint action, GtkWidget *widget) -- 2.11.4.GIT