From e54bf4399506ca6f9ab1aa5b44019eaef606e6e4 Mon Sep 17 00:00:00 2001 From: jmcmullan Date: Thu, 12 Apr 2012 04:06:08 +0000 Subject: [PATCH] System/Workbook: Add minimal View->All, View->Icons support Signed-off-by: Jason S. McMullan git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@44612 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/system/Workbook/wbwindow.c | 58 ++++++++++++++++++++++++++++--- workbench/system/Workbook/workbook_menu.h | 4 +-- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/workbench/system/Workbook/wbwindow.c b/workbench/system/Workbook/wbwindow.c index e104c5feec..88a21b64a8 100644 --- a/workbench/system/Workbook/wbwindow.c +++ b/workbench/system/Workbook/wbwindow.c @@ -52,6 +52,7 @@ struct wbWindow { Object *ScrollV; Object *Area; /* Virual area of icons */ Object *Set; /* Set of icons */ + APTR FilterHook; ULONG Flags; IPTR Tick; @@ -155,20 +156,52 @@ static BOOL wbMenuEnable(Class *cl, Object *obj, int id, BOOL onoff) return rc; } -AROS_UFH3(ULONG, wbIgnoreInfo_Hook, +AROS_UFH3(ULONG, wbFilterIcons_Hook, AROS_UFHA(struct Hook*, hook, A0), AROS_UFHA(struct ExAllData*, ead, A2), AROS_UFHA(LONG *, type, A1)) { + AROS_USERFUNC_INIT int i; + if (stricmp(ead->ed_Name, "disk.info") == 0) + return FALSE; + + i = strlen(ead->ed_Name); + if (i >= 5 && stricmp(&ead->ed_Name[i-5], ".info") == 0) { + ead->ed_Name[i-5] = 0; + return TRUE; + } + + if (stricmp(ead->ed_Name, ".backdrop") == 0) + return FALSE; + + return FALSE; + + AROS_USERFUNC_EXIT +} + +AROS_UFH3(ULONG, wbFilterAll_Hook, + AROS_UFHA(struct Hook*, hook, A0), + AROS_UFHA(struct ExAllData*, ead, A2), + AROS_UFHA(LONG *, type, A1)) +{ AROS_USERFUNC_INIT + int i; + + if (stricmp(ead->ed_Name, "disk.info") == 0) + return FALSE; + i = strlen(ead->ed_Name); - if (i >= 5 && stricmp(&ead->ed_Name[i-5], ".info") == 0) - return FALSE; + if (i >= 5 && stricmp(&ead->ed_Name[i-5], ".info") == 0) { + ead->ed_Name[i-5] = 0; + return TRUE; + } + if (stricmp(ead->ed_Name, ".backdrop") == 0) - return FALSE; + return FALSE; + return TRUE; AROS_USERFUNC_EXIT @@ -210,6 +243,10 @@ static void wbwiAppend(Class *cl, Object *obj, Object *iobj) /* Insert in Alpha order */ ForeachNode((struct List *)&my->IconList, tmp) { + if (wbwiIconCmp(cl, obj, tmp->wbwiObject, wbwi->wbwiObject) == 0) { + DisposeObject(iobj); + return; + } if (wbwiIconCmp(cl, obj, tmp->wbwiObject, wbwi->wbwiObject) < 0) break; pred = tmp; @@ -245,7 +282,9 @@ static void wbAddFiles(Class *cl, Object *obj) struct Hook hook; BOOL more = TRUE; - hook.h_Entry = (APTR)wbIgnoreInfo_Hook; + hook.h_Entry = my->FilterHook; + hook.h_SubEntry = NULL; + hook.h_Data = wb; eac->eac_MatchFunc = &hook; while (more) { @@ -456,6 +495,7 @@ static IPTR WBWindowNew(Class *cl, Object *obj, struct opSet *ops) my = INST_DATA(cl, obj); NEWLIST(&my->IconList); + my->FilterHook = wbFilterIcons_Hook; path = (CONST_STRPTR)GetTagData(WBWA_Path, (IPTR)NULL, ops->ops_AttrList); if (path == NULL) { @@ -823,6 +863,14 @@ static IPTR WBWindowMenuPick(Class *cl, Object *obj, struct wbwm_MenuPick *wbwmp UnLock(lock); } break; + case WBMENU_ID(WBMENU_WN__SHOW_ICONS): + my->FilterHook = wbFilterIcons_Hook; + wbRescan(cl, obj); + break; + case WBMENU_ID(WBMENU_WN__SHOW_ALL): + my->FilterHook = wbFilterAll_Hook; + wbRescan(cl, obj); + break; case WBMENU_ID(WBMENU_WB_SHELL): NewCLI(cl, obj); break; diff --git a/workbench/system/Workbook/workbook_menu.h b/workbench/system/Workbook/workbook_menu.h index 14df8eabe3..87b4b1b32a 100644 --- a/workbench/system/Workbook/workbook_menu.h +++ b/workbench/system/Workbook/workbook_menu.h @@ -44,8 +44,8 @@ #define WBMENU_WN__SNAP_WINDOW 40, "Window", 0, Broken 0, 0 #define WBMENU_WN__SNAP_ALL 41, "All", 0, Broken 0, 0 #define WBMENU_WN__SHOW "Show" -#define WBMENU_WN__SHOW_ICONS 45, "Only icons", "-", Broken CHECKIT|CHECKED, ~((1 << 0)) -#define WBMENU_WN__SHOW_ALL 46, "All files", "+", Broken CHECKIT, ~((1 << 1)) +#define WBMENU_WN__SHOW_ICONS 45, "Only icons", "-", CHECKIT|CHECKED, ~((1 << 0)) +#define WBMENU_WN__SHOW_ALL 46, "All files", "+", CHECKIT, ~((1 << 1)) #define WBMENU_WN__VIEW "View by" #define WBMENU_WN__VIEW_ICON 50, "Icon", "1", Broken CHECKIT|CHECKED, ~((1 << 0)) #define WBMENU_WN__VIEW_DETAILS 51, "Details", 0, Broken CHECKIT, ~((1 << 1)) -- 2.11.4.GIT