2 Copyright 2004-2006, The AROS Development Team. All rights reserved.
6 #define MUIMASTER_YES_INLINE_STDARG
9 #include <aros/debug.h>
11 #define WANDERER_DEFAULT_BACKDROP
12 //#define WANDERER_DEFAULT_SHOWALL
13 //#define WANDERER_DEFAULT_SHOWHIDDEN
15 #include <exec/types.h>
16 #include <libraries/gadtools.h>
17 #include <libraries/mui.h>
18 #include <zune/customclasses.h>
19 #include <dos/notify.h>
20 #include <workbench/handler.h>
21 #include <proto/graphics.h>
22 #include <proto/utility.h>
23 #include <proto/intuition.h>
24 #include <proto/muimaster.h>
25 #include <proto/dos.h>
26 #include <proto/workbench.h>
27 #include <proto/layers.h>
28 #include <proto/alib.h>
34 #include <aros/detach.h>
35 #include <prefs/wanderer.h>
37 #include "iconwindow.h"
38 #include "iconwindow_attributes.h"
39 #include "iconwindowcontents.h"
40 #include "wandererprefs.h"
41 #include "wandererprefsintern.h"
42 #include "filesystems.h"
44 #include "../../libs/muimaster/classes/iconlist.h"
45 #include "../../libs/muimaster/classes/iconlist_attributes.h"
48 #define VERSION "$VER: Wanderer 0.65 (16.04.2007) The AROS Dev Team"
50 #define KeyButton(name,key) TextObject, ButtonFrame, MUIA_Font, MUIV_Font_Button, MUIA_Text_Contents, (IPTR)(name), MUIA_Text_PreParse, "\33c", MUIA_Text_HiChar, (IPTR)(key), MUIA_ControlChar, key, MUIA_InputMode, MUIV_InputMode_RelVerify, MUIA_Background, MUII_ButtonBack, End
52 extern IPTR
InitWandererPrefs(void);
53 VOID
DoAllMenuNotifies(Object
*strip
, STRPTR path
);
54 Object
*FindMenuitem(Object
* strip
, int id
);
55 Object
*__CreateWandererIntuitionMenu__(BOOL isRoot
, BOOL useBackdrop
);
56 void wanderer_menufunc_window_update(void);
57 void execute_open_with_command(BPTR cd
, STRPTR contents
);
58 void DisposeCopyDisplay(struct MUIDisplayObjects
*d
);
59 BOOL
CreateCopyDisplay(UWORD flags
, struct MUIDisplayObjects
*d
);
61 /* Stored in the main wanderer executable */
62 extern Object
*_WandererIntern_AppObj
;
63 extern Class
*_WandererIntern_CLASS
;
65 struct Hook _WandererIntern_hook_standard
;
66 struct Hook _WandererIntern_hook_action
;
67 struct Hook _WandererIntern_hook_backdrop
;
69 static unsigned char strtochar(STRPTR st
)
74 /*** Instance Data **********************************************************/
77 struct Screen
*wd_Screen
;
83 struct MUI_InputHandlerNode wd_TimerIHN
;
84 struct MsgPort
*wd_CommandPort
;
85 struct MUI_InputHandlerNode wd_CommandIHN
;
86 struct MsgPort
*wd_NotifyPort
;
87 struct MUI_InputHandlerNode wd_NotifyIHN
;
88 struct NotifyRequest pnr
;
91 BOOL wd_Option_BackDropMode
;
94 /*** Macros *****************************************************************/
95 #define SETUP_WANDERER_INST_DATA struct Wanderer_DATA *data = INST_DATA(CLASS, self)
97 /**************************************************************************
99 **************************************************************************/
103 BOOL
, Wanderer__HookFunc_DisplayCopyFunc
,
104 AROS_UFHA(struct Hook
*, h
, A0
),
105 AROS_UFHA(struct dCopyStruct
*, obj
, A2
),
106 AROS_UFHA(APTR
, unused_param
, A1
)
112 unsigned int difftime
;
114 struct MUIDisplayObjects
*d
= (struct MUIDisplayObjects
*) obj
->userdata
;
117 if ((obj
->flags
& ACTION_UPDATE
) == 0)
121 if (obj
->filelen
< 8192)
124 if (d
->smallobjects
>= 20) d
->smallobjects
= 0;
130 if (d
->smallobjects
> 0) d
->updateme
= FALSE
;
133 SET(d
->fileObject
, MUIA_Text_Contents
, obj
->file
);
134 SET(d
->sourceObject
, MUIA_Text_Contents
, obj
->spath
);
137 if (d
->action
!= ACTION_DELETE
)
140 d
->bytes
+= obj
->actlen
;
141 if ((obj
->flags
& ACTION_UPDATE
) == 0)
145 SET(d
->gauge
, MUIA_Gauge_Current
, 0);
146 SET(d
->destObject
, MUIA_Text_Contents
, obj
->dpath
);
152 if (d
->updateme
&&(obj
->totallen
<= obj
->filelen
))
154 sprintf(d
->SpeedBuffer
, "Speed: %.2f kBytes/s", (double) (((double) obj
->totallen
) / (((double) obj
->difftime
) / ((double) CLOCKS_PER_SEC
))) / 1024.0);
155 SetAttrs(d
->gauge
, MUIA_Gauge_Current
, (ULONG
) (32768.0 * (double) obj
->totallen
/ (double) obj
->filelen
), MUIA_Gauge_InfoText
, d
->SpeedBuffer
, TAG_DONE
);
163 d
->Buffer
, "# of files: %ld Actual: %.2f kBytes Total: %.2f kBytes",
164 d
->numfiles
, (double) obj
->filelen
/ 1024.0, (double) d
->bytes
/ 1024.0
166 SET(d
->performanceObject
, MUIA_Text_Contents
, d
->Buffer
);
170 DoMethod(d
->copyApp
, MUIM_Application_InputBuffered
);
172 /* read the stopflag and return TRUE if the user wanted to stop actionDir() */
174 if (d
->stopflag
== 1) return TRUE
; else return FALSE
;
181 ULONG
, Wanderer__HookFunc_AskDeleteFunc
,
182 AROS_UFHA(struct Hook
*, h
, A0
),
183 AROS_UFHA(struct dCopyStruct
*, obj
, A2
),
184 AROS_UFHA(APTR
, unused_param
, A1
)
189 ULONG back
= DELMODE_NONE
;
198 string
= CombineString("Really delete file\n\033b%s\033n\nlocated in\n\033b%s\033n ?",
199 obj
->file
, obj
->spath
);
201 else if (obj
->type
== 1)
203 string
= CombineString("Do you wish to unprotect file\n\033b%s\033n\nlocated in\n\033b%s\033n ?",
204 obj
->file
, obj
->spath
);
206 else if (obj
->type
== 2)
208 string
= CombineString("Really overwrite file\n\033b%s\033n\nlocated in\n\033b%s\033n ?",
209 obj
->file
, obj
->spath
);
213 string
= CombineString("Can't access file\n\033b%s\033n\nlocated in\n\033b%s\033n ?",
214 obj
->file
, obj
->spath
);
219 if (obj
->type
== 0) string
= CombineString("Really delete drawer\n\033b%s\033n ?", obj
->spath
);
220 else if (obj
->type
== 1) string
= CombineString("Do you wish to unprotect drawer\n\033b%s\033n ?", obj
->spath
);
221 else if (obj
->type
== 3) string
= CombineString("Can't access drawer\n\033b%s", obj
->spath
);
226 if (obj
->type
== 0) ret
= AskChoiceCentered("Delete Requester:", string
, "_Yes|Yes to _All|_No|No _to ALL", 0);
227 else if (obj
->type
== 1) ret
= AskChoiceCentered("Protection Requester:", string
, "_Unprotect|Unprotect _All|_No|No _to ALL", 0);
228 else if (obj
->type
== 2) ret
= AskChoiceCentered("Overwrite Requester:", string
, "_Overwrite|Overwrite _All|_No|No _to ALL", 0);
229 else ret
= AskChoiceCentered("Overwrite Requester:", string
, "_Skip|_Abort", 0);
230 freeString(NULL
, string
);
233 if (ret
== 0) back
= DELMODE_NONE
;
234 else if (ret
== 1) back
= DELMODE_DELETE
;
235 else if (ret
== 2) back
= DELMODE_ALL
;
236 else if (ret
== 3) back
= DELMODE_NO
;
245 void, Wanderer__HookFunc_ActionFunc
,
246 AROS_UFHA(struct Hook
*, h
, A0
),
247 AROS_UFHA(Object
*, obj
, A2
),
248 AROS_UFHA(struct IconWindow_ActionMsg
*, msg
, A1
)
253 if (msg
->type
== ICONWINDOW_ACTION_OPEN
)
255 static unsigned char buf
[1024];
257 struct IconList_Entry
*ent
= (void*)MUIV_IconList_NextSelected_Start
;
259 DoMethod(msg
->iconlist
, MUIM_IconList_NextSelected
, (IPTR
) &ent
);
260 if ((int)ent
== MUIV_IconList_NextSelected_End
) return;
262 IPTR offset
= strlen(ent
->filename
) - 5;
264 if ((msg
->isroot
) && (!Stricmp(ent
->filename
+ offset
, ":Disk")))
266 strcpy(buf
,ent
->label
);
271 strcpy(buf
,ent
->filename
);
274 D(bug("[WANDERER] Wanderer__HookFunc_ActionFunc: ICONWINDOW_ACTION_OPEN - offset = %d, buf = %s\n", offset
, buf
);)
276 if ( (ent
->type
== ST_ROOT
) || (ent
->type
== ST_USERDIR
) )
278 Object
*cstate
= (Object
*)(((struct List
*)XGET(_app(obj
), MUIA_Application_WindowList
))->lh_Head
);
279 Object
*prefs
= (Object
*) XGET(_app(obj
), MUIA_Wanderer_Prefs
);
282 /* open new window if root or classic navigation set */
283 if ( (msg
->isroot
) || (XGET(prefs
, MUIA_IconWindowExt_Toolbar_NavigationMethod
) == WPD_NAVIGATION_CLASSIC
) )
285 while ((child
= NextObject(&cstate
)))
287 if (XGET(child
, MUIA_UserData
))
289 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
290 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
292 int is_open
= XGET(child
, MUIA_Window_Open
);
296 DoMethod(child
, MUIM_IconWindow_Open
);
300 DoMethod(child
, MUIM_Window_ToFront
);
301 SET(child
, MUIA_Window_Activate
, TRUE
);
309 /* Check if the window for this drawer is already opened */
310 DoMethod(_WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
);
311 // FIXME: error handling
315 /* open drawer in same window */
316 SET(obj
, MUIA_IconWindow_Location
, (IPTR
) buf
);
320 else if (ent
->type
== ST_FILE
)
322 BPTR newwd
, oldwd
, file
;
324 /* Set the CurrentDir to the path of the executable to be started */
325 file
= Lock(ent
->filename
, SHARED_LOCK
);
328 newwd
= ParentDir(file
);
329 oldwd
= CurrentDir(newwd
);
331 if (!OpenWorkbenchObject(ent
->filename
, TAG_DONE
))
333 execute_open_with_command(newwd
, FilePart(ent
->filename
));
342 else if (msg
->type
== ICONWINDOW_ACTION_DIRUP
)
345 STRPTR actual_drawer
= (STRPTR
)XGET(obj
, MUIA_IconWindow_Location
);
346 STRPTR parent_drawer
= strrchr(actual_drawer
,'/');
347 STRPTR root_drawer
= strrchr(actual_drawer
,':');
349 /* check if dir is not drive root dir */
350 if ( strlen(root_drawer
) > 1 )
352 /* check if second or third level directory*/
355 (*(root_drawer
+1)) = 0;
356 SET(obj
, MUIA_IconWindow_Location
, actual_drawer
);
361 (*parent_drawer
) = 0;
362 SET(obj
, MUIA_IconWindow_Location
, actual_drawer
);
367 else if (msg
->type
== ICONWINDOW_ACTION_CLICK
)
369 if (!msg
->click
->shift
)
371 Object
*cstate
= (Object
*)(((struct List
*)XGET(_WandererIntern_AppObj
, MUIA_Application_WindowList
))->lh_Head
);
374 while ((child
= NextObject(&cstate
)))
376 if (XGET(child
, MUIA_UserData
))
378 if (child
!= obj
) DoMethod(child
, MUIM_IconWindow_UnselectAll
);
383 else if (msg
->type
== ICONWINDOW_ACTION_ICONDROP
)
385 IPTR destination_path
;
387 struct IconList_Drop
*drop
= (struct IconList_Drop
*)msg
->drop
;
391 /* get path of DESTINATION iconlist*/
392 destination_path
= drop
->destination_string
;
394 if ( !destination_path
) return;
396 /* get SOURCE entries */
398 struct MUIDisplayObjects dobjects
;
399 struct Hook displayCopyHook
;
400 struct Hook displayDelHook
;
402 displayCopyHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_DisplayCopyFunc
;
403 displayDelHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_AskDeleteFunc
;
406 if (CreateCopyDisplay(ACTION_COPY
, &dobjects
))
408 struct IconList_Entry
*ent
= (void*)MUIV_IconList_NextSelected_Start
;
410 /* process all selected entries */
413 DoMethod(drop
->source_iconlistobj
, MUIM_IconList_NextSelected
, (IPTR
) &ent
);
415 /* if not end of selection, process */
416 if ( (int)ent
!= MUIV_IconList_NextSelected_End
)
418 D(bug("[WANDERER] drop entry: %s dropped in %s\n", ent
->filename
, destination_path
));
420 /* copy via filesystems.c */
421 D(bug("[WANDERER] CopyContent \"%s\" to \"%s\"\n", ent
->filename
, destination_path
));
422 CopyContent(NULL
, ent
->filename
, destination_path
, TRUE
, ACTION_COPY
, &displayCopyHook
, &displayDelHook
, (APTR
) &dobjects
);
425 while ( (int)ent
!= MUIV_IconList_NextSelected_End
);
426 DisposeCopyDisplay(&dobjects
);
428 /* update list contents */
429 DoMethod(drop
->destination_iconlistobj
,MUIM_IconList_Update
);
432 else if (msg
->type
== ICONWINDOW_ACTION_APPWINDOWDROP
)
434 struct Screen
*wscreen
= NULL
;
437 /* get wanderers screen struct and the layer located at cursor position afterwards */
438 get( obj
, MUIA_Window_Screen
, &wscreen
);
439 layer
= WhichLayer(&wscreen
->LayerInfo
,wscreen
->MouseX
,wscreen
->MouseY
);
443 struct Window
*win
= (struct Window
*) layer
->Window
;
451 struct IconList_Entry
*ent
= (void*)MUIV_IconList_NextSelected_Start
;
452 /* process all selected entries */
455 DoMethod(msg
->iconlist
, MUIM_IconList_NextSelected
, (IPTR
) &ent
);
456 /* if not end of selection, process */
457 if ( (int)ent
!= MUIV_IconList_NextSelected_End
)
459 struct AppW
*a
= AllocVec(sizeof(struct AppW
), MEMF_CLEAR
);
462 a
->name
= AllocVec(strlen(ent
->filename
)+1, MEMF_CLEAR
);
466 strcpy(a
->name
, ent
->filename
);
467 AddTail(&AppList
, (struct Node
*) a
);
478 while ( ((int)ent
!= MUIV_IconList_NextSelected_End
) && !fail
);
480 if (!fail
&& (files
> 0))
482 STRPTR
*filelist
= AllocVec(sizeof(STRPTR
) * files
, MEMF_CLEAR
);
483 if (filelist
!= NULL
)
485 STRPTR
*flist
= filelist
;
486 if (!IsListEmpty(&AppList
))
489 struct Node
*s
= AppList
.lh_Head
;
490 while (((succ
= ((struct Node
*) s
)->ln_Succ
) != NULL
) && !fail
)
492 *flist
++ = ((struct AppW
*) s
)->name
;
496 D(bug("[WANDERER] AppWindowMsg: win:%s files:%s mx:%d my:%d\n",win
->Title
, filelist
, wscreen
->MouseX
, wscreen
->MouseY
);)
497 /* send appwindow msg struct containing selected files to destination */
498 SendAppWindowMessage(win
, files
, filelist
, 0, wscreen
->MouseX
, wscreen
->MouseY
, 0, 0);
504 if (!IsListEmpty(&AppList
))
507 struct Node
*s
= AppList
.lh_Head
;
508 while (((succ
= ((struct Node
*) s
)->ln_Succ
) != NULL
))
510 if ( ((struct AppW
*) s
)->name
!= NULL
)
511 FreeVec(((struct AppW
*) s
)->name
);
529 void, Wanderer__HookFunc_StandardFunc
,
530 AROS_UFHA(struct Hook
*, h
, A0
),
531 AROS_UFHA(void *, dummy
, A2
),
532 AROS_UFHA(void **, funcptr
, A1
)
537 void (*func
) (ULONG
*) = (void (*)(ULONG
*)) (*funcptr
);
538 if (func
) func((ULONG
*)(funcptr
+ 1));
545 void, Wanderer__HookFunc_BackdropFunc
,
546 AROS_UFHA(struct Hook
*, h
, A0
),
547 AROS_UFHA(void *, dummy
, A2
),
548 AROS_UFHA(void **, funcptr
, A1
)
553 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc()\n"));
554 struct Wanderer_DATA
*data
= INST_DATA(_WandererIntern_CLASS
, _WandererIntern_AppObj
);
556 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Private data @ %x\n", data
));
558 if (!data
->wd_WorkbenchWindow
)
560 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: No Workbench Window\n"));
564 BOOL wb_iscurrentlybd
= (BOOL
)XGET(data
->wd_WorkbenchWindow
, MUIA_IconWindow_IsBackdrop
);
566 if (wb_iscurrentlybd
!= data
->wd_Option_BackDropMode
)
568 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Backdrop mode change requested!\n"));
570 BOOL isOpen
= (BOOL
)XGET(data
->wd_WorkbenchWindow
, MUIA_Window_Open
);
571 Object
*win_Active
= NULL
;
573 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Disposing of existing Workbench window Obj ..\n"));
575 SET(data
->wd_WorkbenchWindow
, MUIA_Window_Open
, FALSE
);
577 if (data
->wd_WorkbenchWindow
== data
->wd_ActiveWindow
)
579 data
->wd_ActiveWindow
= NULL
;
583 win_Active
= data
->wd_ActiveWindow
;
586 /* Kill our close request notification .. */
589 data
->wd_WorkbenchWindow
, MUIM_KillNotify
, MUIA_Window_CloseRequest
592 /* .. And dispose of the window */
593 DoMethod(_WandererIntern_AppObj
, OM_REMMEMBER
, data
->wd_WorkbenchWindow
);
594 MUI_DisposeObject(data
->wd_WorkbenchWindow
);
595 data
->wd_WorkbenchWindow
= NULL
;
598 if (data
->wd_Option_BackDropMode
)
600 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Creating new Workbench window Obj (BACKDROP MODE)..\n"));
604 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Creating new Workbench window Obj (NORMAL MODE)..\n"));
608 data
->wd_WorkbenchWindow
= (Object
*) DoMethod
610 _WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) NULL
613 if ((data
->wd_WorkbenchWindow
) && (isOpen
))
615 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Making Workbench window visable..\n"));
616 DoMethod(data
->wd_WorkbenchWindow
, MUIM_IconWindow_Open
);
617 DoMethod(data
->wd_WorkbenchWindow
, MUIM_Window_ToBack
);
622 SET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
, win_Active
);
624 else if (data
->wd_WorkbenchWindow
)
626 SET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
, data
->wd_WorkbenchWindow
);
632 /******** code from workbench/c/Info.c *******************/
633 static void fmtlarge(UBYTE
*buf
, ULONG num
)
647 if (num
>= 1073741824)
649 array
.val
= num
>> 30;
650 d
= ((UQUAD
)num
* 10 + 536870912) / 1073741824;
653 ch
= strtochar((STRPTR
)_(MSG_MEM_G
));
655 else if (num
>= 1048576)
657 array
.val
= num
>> 20;
658 d
= ((UQUAD
)num
* 10 + 524288) / 1048576;
661 ch
= strtochar((STRPTR
)_(MSG_MEM_M
));
663 else if (num
>= 1024)
665 array
.val
= num
>> 10;
666 d
= (num
* 10 + 512) / 1024;
669 ch
= strtochar((STRPTR
)_(MSG_MEM_K
));
677 ch
= strtochar((STRPTR
)_(MSG_MEM_B
));
680 if (!array
.dec
&& (d
> array
.val
* 10))
685 RawDoFmt(array
.dec
? "%lu.%lu" : "%lu", &array
, NULL
, buf
);
686 while (*buf
) { buf
++; }
691 STRPTR
GetScreenTitle(VOID
)
693 STATIC TEXT title
[256];
694 UBYTE chip
[10], fast
[10];
695 fmtlarge(chip
,AvailMem(MEMF_CHIP
));
696 fmtlarge(fast
,AvailMem(MEMF_FAST
));
697 /* AROS probably don't have graphics mem but without it looks so empty */
698 sprintf(title
, _(MSG_SCREENTITLE
), chip
, fast
);
703 /* Expand a passed in env: string to its full location */
704 /* Wanderer doesnt free this mem at the moment but should
705 incase it is every closed */
706 STRPTR
ExpandEnvName(STRPTR env_path
)
709 char tmp_envbuff
[1024];
710 STRPTR fullpath
= NULL
;
711 BPTR env_lock
= NULL
;
713 env_lock
= Lock("ENV:", SHARED_LOCK
);
716 if (NameFromLock(env_lock
, tmp_envbuff
, 256)) ok
= TRUE
;
722 if ((fullpath
= AllocVec(strlen(tmp_envbuff
) + strlen(env_path
) + 1 + 1 - 4, MEMF_CLEAR
| MEMF_PUBLIC
)) != NULL
)
724 strcpy(fullpath
, tmp_envbuff
);
725 AddPart(fullpath
, env_path
+ 4, 1019);
730 //We couldnt expand it so just use as is ..
737 MEN_WANDERER_BACKDROP
,
738 MEN_WANDERER_EXECUTE
,
740 MEN_WANDERER_GUISETTINGS
,
744 MEN_WINDOW_NEW_DRAWER
,
745 MEN_WINDOW_OPEN_PARENT
,
755 MEN_WINDOW_VIEW_ICON
,
756 MEN_WINDOW_VIEW_DETAIL
,
760 MEN_WINDOW_SORT_NAME
,
761 MEN_WINDOW_SORT_TYPE
,
762 MEN_WINDOW_SORT_DATE
,
763 MEN_WINDOW_SORT_SIZE
,
764 MEN_WINDOW_SORT_REVERSE
,
765 MEN_WINDOW_SORT_TOPDRAWERS
,
766 MEN_WINDOW_SORT_GROUP
,
770 MEN_ICON_INFORMATION
,
776 /**************************************************************************
777 Open the execute window. Similar to below but you can also set the
778 command. Called when item is openend
779 **************************************************************************/
780 void execute_open_with_command(BPTR cd
, STRPTR contents
)
784 if (cd
!= NULL
) lock
= cd
;
785 else lock
= Lock("RAM:", ACCESS_READ
);
789 "WANDERER:Tools/ExecuteCommand",
790 WBOPENA_ArgLock
, (IPTR
) lock
,
791 WBOPENA_ArgName
, (IPTR
) contents
,
795 if (cd
== NULL
) UnLock(lock
);
798 /**************************************************************************
799 Open the execute window
801 This function will always get the current drawer as argument
802 **************************************************************************/
803 VOID
wanderer_menufunc_wanderer_execute(STRPTR
*cdptr
)
805 //TODO: remove the STRPTR *cdptr from top
806 //TODO:remove this commented out stuff
808 //if (cdptr != NULL) lock = Lock(*cdptr, SHARED_LOCK);
809 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
810 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
811 BPTR cd
= Lock(dr
,SHARED_LOCK
);
812 execute_open_with_command(cd
, NULL
);
816 /*******************************/
818 void wanderer_menufunc_wanderer_shell(STRPTR
*cd_ptr
)
820 //TODO: remove the STRPTR *cdptr from top
821 //TODO:remove this commented out stuff
822 //BPTR cd = Lock(*cd_ptr,ACCESS_READ);
823 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
824 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
825 BPTR cd
= Lock(dr
,ACCESS_READ
);
826 if (SystemTags("NewShell", NP_CurrentDir
, (IPTR
)cd
, TAG_DONE
) == -1)
832 void wanderer_menufunc_wanderer_backdrop(Object
**pstrip
)
834 struct Wanderer_DATA
*data
= INST_DATA(_WandererIntern_CLASS
, _WandererIntern_AppObj
);
835 Object
*strip
= *pstrip
;
836 Object
*item
= FindMenuitem(strip
, MEN_WANDERER_BACKDROP
);
838 D(bug("[WANDERER] wanderer_menufunc_wanderer_backdrop()\n"));
842 data
->wd_Option_BackDropMode
= (BOOL
)XGET(item
, MUIA_Menuitem_Checked
);
843 SET(data
->wd_WorkbenchWindow
, MUIA_IconWindow_IsBackdrop
, data
->wd_Option_BackDropMode
);
847 void wanderer_menufunc_window_newdrawer(STRPTR
*cdptr
)
849 //TODO: remove the STRPTR *cdptr from top
851 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
852 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
853 D(bug("[wanderer] wanderer_menufunc_window_newdrawer(%s)\n", dr
));
855 Object
*actwindow
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
856 Object
*wbwindow
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_WorkbenchWindow
);
857 if (actwindow
== wbwindow
)
859 /* This check is necessary because WorkbenchWindow has path RAM: */
860 D(bug("[wanderer] wanderer_menufunc_window_newdrawer: Can't call WBNewDrawer for WorkbenchWindow\n"));
863 if ( XGET(actwindow
, MUIA_Window_Open
) == FALSE
)
865 D(bug("[wanderer] wanderer_menufunc_window_newdrawer: Can't call WBNewDrawer: the active window isn't open\n"));
869 BPTR lock
= Lock(dr
, ACCESS_READ
);
872 "WANDERER:Tools/WBNewDrawer",
873 WBOPENA_ArgLock
, (IPTR
) lock
,
880 void wanderer_menufunc_window_openparent(STRPTR
*cdptr
)
882 //TODO: Remove the **cdptr stuff from top
883 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
884 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
887 STRPTR last_letter
=NULL
;
888 last_letter
= &dr
[ strlen(dr
) - 1 ];
890 STRPTR thispath
= FilePart(dr
);
892 if (*last_letter
==0x3a) return; /* Top Drawer has no parent to open */
894 last_letter
= &thispath
[strlen(thispath
)-1];
896 if (*last_letter
==0x3a)
897 path_len
= (IPTR
)(thispath
-(IPTR
)(dr
));
899 path_len
= (IPTR
)((thispath
-(IPTR
)(dr
))-1);
901 STRPTR buf
= AllocVec((path_len
+1),MEMF_PUBLIC
|MEMF_CLEAR
);
902 CopyMem(dr
, buf
, path_len
);
904 Object
*cstate
= (Object
*)(((struct List
*)XGET(_WandererIntern_AppObj
, MUIA_Application_WindowList
))->lh_Head
);
907 // Make sure we have a correct path
908 BOOL foundSlash
= FALSE
, foundColon
= FALSE
;
909 int i
= 0; for ( ; i
< path_len
; i
++ )
911 if ( buf
[ i
] == '/' ) foundSlash
= TRUE
;
912 if ( buf
[ i
] == ':' ) foundColon
= TRUE
;
914 if ( !foundColon
&& !foundSlash
)
916 STRPTR newbuf
= AllocVec ((path_len
+ 2), MEMF_PUBLIC
|MEMF_CLEAR
);
917 sprintf(newbuf
,"%s:",buf
);
921 // Done with path correction check
923 while ((child
= NextObject(&cstate
)))
925 if (XGET(child
, MUIA_UserData
))
927 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
928 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
930 int is_open
= XGET(child
, MUIA_Window_Open
);
932 DoMethod(child
, MUIM_IconWindow_Open
);
935 DoMethod(child
, MUIM_Window_ToFront
);
936 SET(child
, MUIA_Window_Activate
, TRUE
);
944 DoMethod(_WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
);
948 void wanderer_menufunc_window_close()
950 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
951 SET(window
, MUIA_Window_CloseRequest
, TRUE
);
954 void wanderer_menufunc_window_update()
956 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
957 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
959 if (iconList
!= NULL
)
961 DoMethod(iconList
, MUIM_IconList_Update
);
965 void wanderer_menufunc_window_clear()
967 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
968 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
970 if (iconList
!= NULL
)
972 DoMethod(iconList
, MUIM_IconList_UnselectAll
);
976 void wanderer_menufunc_window_select()
978 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
979 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
981 if (iconList
!= NULL
)
983 DoMethod(iconList
, MUIM_IconList_SelectAll
);
987 void wanderer_menufunc_window_view_icons(Object
**pstrip
)
989 Object
*strip
= *pstrip
;
990 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_VIEW_ALL
);
991 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
992 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
994 if (item
!= NULL
&& iconList
!= NULL
)
996 ULONG display_bits
= 0, menu_view_state
= 0;
997 GET(iconList
, MUIA_IconList_DisplayFlags
, &display_bits
);
999 GET(item
, MUIA_Menuitem_Checked
, &menu_view_state
);
1001 if (menu_view_state
)
1003 display_bits
&= ~ICONLIST_DISP_SHOWINFO
;
1007 display_bits
|= ICONLIST_DISP_SHOWINFO
;
1010 SET(iconList
, MUIA_IconList_DisplayFlags
, display_bits
);
1011 DoMethod(iconList
, MUIM_IconList_Sort
);
1015 void wanderer_menufunc_window_sort_name(Object
**pstrip
)
1017 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1018 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1020 if ( iconList
!= NULL
)
1022 ULONG sort_bits
= 0;
1023 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1025 /*name = date and size bit both NOT set*/
1026 if( (sort_bits
& ICONLIST_SORT_BY_DATE
) || (sort_bits
& ICONLIST_SORT_BY_SIZE
) )
1028 sort_bits
&= ~(ICONLIST_SORT_BY_DATE
| ICONLIST_SORT_BY_SIZE
);
1031 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1032 DoMethod(iconList
, MUIM_IconList_Sort
);
1036 void wanderer_menufunc_window_sort_date(Object
**pstrip
)
1038 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1039 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1041 if ( iconList
!= NULL
)
1043 ULONG sort_bits
= 0;
1044 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1046 /*exclude size bit*/
1047 if( sort_bits
& ICONLIST_SORT_BY_SIZE
)
1049 sort_bits
&= ~ICONLIST_SORT_BY_SIZE
;
1052 sort_bits
|= ICONLIST_SORT_BY_DATE
;
1054 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1055 DoMethod(iconList
, MUIM_IconList_Sort
);
1059 void wanderer_menufunc_window_sort_size(Object
**pstrip
)
1061 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1062 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1064 if ( iconList
!= NULL
)
1066 ULONG sort_bits
= 0;
1067 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1069 /*exclude date bit*/
1070 if( sort_bits
& ICONLIST_SORT_BY_DATE
)
1072 sort_bits
&= ~ICONLIST_SORT_BY_DATE
;
1075 sort_bits
|= ICONLIST_SORT_BY_SIZE
;
1077 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1078 DoMethod(iconList
, MUIM_IconList_Sort
);
1082 void wanderer_menufunc_window_sort_type(Object
**pstrip
)
1084 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1085 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1087 if ( iconList
!= NULL
)
1089 ULONG sort_bits
= 0;
1090 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1092 /*type = both date and size bits set*/
1093 sort_bits
|= (ICONLIST_SORT_BY_DATE
| ICONLIST_SORT_BY_SIZE
);
1095 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1096 DoMethod(iconList
, MUIM_IconList_Sort
);
1100 void wanderer_menufunc_window_sort_reverse(Object
**pstrip
)
1102 Object
*strip
= *pstrip
;
1103 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_REVERSE
);
1104 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1105 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1107 if (item
!= NULL
&& iconList
!= NULL
)
1109 ULONG sort_bits
= 0;
1110 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1112 if( XGET(item
, MUIA_Menuitem_Checked
) )
1114 sort_bits
|= ICONLIST_SORT_REVERSE
;
1118 sort_bits
&= ~ICONLIST_SORT_REVERSE
;
1121 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1122 DoMethod(iconList
, MUIM_IconList_Sort
);
1126 void wanderer_menufunc_window_sort_topdrawers(Object
**pstrip
)
1128 Object
*strip
= *pstrip
;
1129 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_TOPDRAWERS
);
1130 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1131 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1133 if (item
!= NULL
&& iconList
!= NULL
)
1135 ULONG sort_bits
= 0;
1136 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1138 if( XGET(item
, MUIA_Menuitem_Checked
) )
1140 sort_bits
&= !ICONLIST_SORT_DRAWERS_MIXED
;
1144 sort_bits
|= ICONLIST_SORT_DRAWERS_MIXED
;
1147 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1148 DoMethod(iconList
, MUIM_IconList_Sort
);
1152 void wanderer_menufunc_icon_open()
1154 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1155 DoMethod(window
, MUIM_IconWindow_DoubleClicked
);
1158 void wanderer_menufunc_icon_rename(void)
1160 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1161 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1162 struct IconList_Entry
*entry
= (APTR
) MUIV_IconList_NextSelected_Start
;
1166 DoMethod(iconList
, MUIM_IconList_NextSelected
, (IPTR
) &entry
);
1168 if ((int)entry
!= MUIV_IconList_NextSelected_End
)
1170 BPTR lock
= Lock(entry
->filename
, ACCESS_READ
);
1171 BPTR parent
= ParentDir(lock
);
1174 D(bug("[wanderer] wanderer_menufunc_icon_rename: selected = '%s'\n", entry
->filename
));
1178 "WANDERER:Tools/WBRename",
1179 WBOPENA_ArgLock
, (IPTR
) parent
,
1180 WBOPENA_ArgName
, (IPTR
) FilePart(entry
->filename
),
1184 D(bug("[wanderer] wanderer_menufunc_icon_rename: selected = '%s'\n", entry
->filename
));
1195 void wanderer_menufunc_icon_information()
1197 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1198 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1199 struct IconList_Entry
*entry
= (APTR
) MUIV_IconList_NextSelected_Start
;
1203 DoMethod(iconList
, MUIM_IconList_NextSelected
, (IPTR
) &entry
);
1205 if ((int)entry
!= MUIV_IconList_NextSelected_End
)
1207 BPTR lock
= Lock(entry
->filename
, ACCESS_READ
);
1208 BPTR parent
= ParentDir(lock
);
1211 D(bug("[wanderer] wanderer_menufunc_icon_information: selected = '%s'\n", entry
->filename
));
1213 WBInfo(parent
, entry
->filename
, NULL
);
1224 /* dispose the file copy display */
1226 void DisposeCopyDisplay(struct MUIDisplayObjects
*d
)
1230 SET(d
->win
,MUIA_Window_Open
,FALSE
);
1231 MUI_DisposeObject(d
->copyApp
);
1234 /* create the file copy window */
1236 BOOL
CreateCopyDisplay(UWORD flags
, struct MUIDisplayObjects
*d
)
1240 Object
*group
, *fromObject
, *toObject
, *fileTextObject
, *fileLengthObject
, *gaugeGroup
;
1242 d
->stopflag
= 0; // will be set to 1 when clicking on stop, than the displayhook can tell actionDir() to stop copy
1246 d
->smallobjects
= 0;
1247 d
->copyApp
= ApplicationObject
,
1248 MUIA_Application_Title
, (IPTR
)"CopyRequester",
1249 MUIA_Application_Base
, (IPTR
)"WANDERER_COPY",
1250 SubWindow
, (IPTR
)(d
->win
= WindowObject
,
1251 MUIA_Window_Title
, (IPTR
)"Copy Filesystem",
1252 MUIA_Window_Activate
, TRUE
,
1253 MUIA_Window_DepthGadget
, TRUE
,
1254 MUIA_Window_DragBar
, TRUE
,
1255 MUIA_Window_SizeGadget
, TRUE
,
1256 MUIA_Window_AppWindow
, FALSE
,
1257 MUIA_Window_CloseGadget
, FALSE
,
1258 MUIA_Window_Borderless
, FALSE
,
1259 MUIA_Window_TopEdge
, MUIV_Window_TopEdge_Centered
,
1260 MUIA_Window_LeftEdge
, MUIV_Window_LeftEdge_Centered
,
1261 WindowContents
, (group
= VGroup
,
1262 Child
, (IPTR
)(fromObject
= TextObject
,
1264 MUIA_Text_PreParse
, (IPTR
)"\33c",
1266 Child
, (IPTR
)(d
->sourceObject
= TextObject
,
1269 MUIA_Background
, MUII_TextBack
,
1270 MUIA_Text_PreParse
, (IPTR
)"\33c",
1271 MUIA_Text_Contents
, (IPTR
)"--------------------------------------------------------------------------------------------",
1273 Child
, (IPTR
)(toObject
= TextObject
,
1275 MUIA_Text_PreParse
, (IPTR
)"\33c",
1277 Child
, (IPTR
)(d
->destObject
= TextObject
,
1280 MUIA_Background
, MUII_TextBack
,
1281 MUIA_Text_PreParse
, (IPTR
)"\33c",
1282 MUIA_Text_Contents
, (IPTR
)"--------------------------------------------------------------------------------------------",
1284 Child
, (IPTR
)(fileTextObject
= TextObject
,
1286 MUIA_Text_PreParse
, (IPTR
)"\33c",
1288 Child
, (IPTR
)(d
->fileObject
= TextObject
,
1291 MUIA_Background
, MUII_TextBack
,
1292 MUIA_Text_PreParse
, (IPTR
)"\33c",
1293 MUIA_Text_Contents
, (IPTR
)"--------------------------------------------------------------------------------------------",
1295 Child
, (IPTR
)(fileLengthObject
= TextObject
,
1297 MUIA_Text_PreParse
, (IPTR
)"\33c",
1299 Child
, (IPTR
)(gaugeGroup
= VGroup
,
1301 Child
, d
->gauge
= GaugeObject
,
1302 MUIA_Gauge_Horiz
, TRUE
,
1303 MUIA_Gauge_Max
, 32768,
1304 MUIA_Gauge_InfoText
, "...........Processing...........",
1307 MUIA_Scale_Horiz
, TRUE
,
1310 Child
, (IPTR
)( d
->performanceObject
= TextObject
,
1313 MUIA_Background
, MUII_TextBack
,
1314 MUIA_Text_PreParse
, (IPTR
)"\33c",
1315 MUIA_Text_Contents
, (IPTR
)"...........0 Bytes...........",
1318 Child
, (IPTR
)( d
->stopObject
= SimpleButton("Stop") ),
1326 if ((flags
& (ACTION_COPY
|ACTION_DELETE
)) == (ACTION_COPY
|ACTION_DELETE
))
1328 SET(fromObject
, MUIA_Text_Contents
, (IPTR
)"move from");
1329 SET(toObject
, MUIA_Text_Contents
, (IPTR
)"move to");
1330 SET(fileTextObject
, MUIA_Text_Contents
, (IPTR
)"file");
1331 SET(fileLengthObject
, MUIA_Text_Contents
, (IPTR
)"traffic");
1333 else if ((flags
& ACTION_COPY
) == ACTION_COPY
)
1335 SET(fromObject
, MUIA_Text_Contents
, (IPTR
)"copy from");
1336 SET(toObject
, MUIA_Text_Contents
, (IPTR
)"copy to");
1337 SET(fileTextObject
, MUIA_Text_Contents
, (IPTR
)"file");
1338 SET(fileLengthObject
, MUIA_Text_Contents
, (IPTR
)"traffic");
1341 else if ((flags
& ACTION_DELETE
) == ACTION_DELETE
)
1343 SET(fromObject
, MUIA_Text_Contents
, "delete from");
1344 DoMethod(group
, MUIM_Group_InitChange
);
1345 DoMethod(group
, OM_REMMEMBER
, toObject
);
1346 DoMethod(group
, OM_REMMEMBER
, fileLengthObject
);
1347 DoMethod(group
, OM_REMMEMBER
, d
->performanceObject
);
1348 DoMethod(group
, OM_REMMEMBER
, d
->destObject
);
1349 DoMethod(group
, OM_REMMEMBER
, gaugeGroup
);
1350 DoMethod(group
, MUIM_Group_ExitChange
);
1351 SET(fileTextObject
, MUIA_Text_Contents
, "file to delete");
1354 SET(d
->win
,MUIA_Window_Open
,TRUE
);
1355 DoMethod(d
->stopObject
,MUIM_Notify
, MUIA_Pressed
, FALSE
, d
->stopObject
, 3, MUIM_WriteLong
, 1 ,&d
->stopflag
);
1361 void wanderer_menufunc_icon_delete(void)
1363 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1364 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1365 struct IconList_Entry
*entry
= ( void*) MUIV_IconList_NextSelected_Start
;
1366 DoMethod(iconList
, MUIM_IconList_NextSelected
, (IPTR
) &entry
);
1368 struct MUIDisplayObjects dobjects
;
1369 struct Hook displayCopyHook
;
1370 struct Hook displayDelHook
;
1371 displayCopyHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_DisplayCopyFunc
;
1372 displayDelHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_AskDeleteFunc
;
1374 ULONG updatedIcons
= 0;
1376 /* Process all selected entries */
1377 if (CreateCopyDisplay(ACTION_DELETE
, &dobjects
))
1381 if ((int)entry
!= MUIV_IconList_NextSelected_End
)
1383 /* copy via filesystems.c */
1384 D(bug("[WANDERER] Delete \"%s\"\n", entry
->filename
);)
1385 CopyContent( NULL
, entry
->filename
, NULL
, TRUE
, ACTION_DELETE
, &displayCopyHook
, &displayDelHook
, (APTR
) &dobjects
);
1388 DoMethod(iconList
, MUIM_IconList_NextSelected
, (IPTR
) &entry
);
1390 while ( (int)entry
!= MUIV_IconList_NextSelected_End
);
1391 DisposeCopyDisplay(&dobjects
);
1393 // Only update list if anything happened to the icons!
1394 if ( updatedIcons
> 0 )
1396 DoMethod(window
, MUIM_IconWindow_UnselectAll
);
1397 DoMethod ( iconList
, MUIM_IconList_Update
);
1401 void wanderer_menufunc_wanderer_guisettings(void)
1403 //DoMethod(_WandererIntern_AppObj, MUIM_Application_OpenConfigWindow);
1404 OpenWorkbenchObject("SYS:Prefs/Zune",
1405 WBOPENA_ArgName
, (IPTR
) "WANDERER",
1409 void wanderer_menufunc_wanderer_about(void)
1411 OpenWorkbenchObject("SYS:System/About", TAG_DONE
);
1414 void wanderer_menufunc_wanderer_quit(void)
1416 //if (MUI_RequestA(_WandererIntern_AppObj, NULL, 0, "Wanderer", _(MSG_YESNO), _(MSG_REALLYQUIT), NULL))
1417 //DoMethod(_WandererIntern_AppObj, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
1418 OpenWorkbenchObject("WANDERER:Tools/Quit", TAG_DONE
);
1421 /**************************************************************************
1422 This function returns a Menu Object with the given id
1423 **************************************************************************/
1424 Object
*FindMenuitem(Object
* strip
, int id
)
1426 return (Object
*)DoMethod(strip
, MUIM_FindUData
, id
);
1429 /**************************************************************************
1430 This connects a notify to the given menu entry id
1431 **************************************************************************/
1432 VOID
DoMenuNotify(Object
* strip
, int id
, void *function
, void *arg
)
1435 entry
= FindMenuitem(strip
,id
);
1440 entry
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1441 (IPTR
) entry
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
1442 (IPTR
) function
, (IPTR
) arg
1447 VOID
DoAllMenuNotifies(Object
*strip
, STRPTR path
)
1453 DoMenuNotify(strip
, MEN_WANDERER_EXECUTE
, wanderer_menufunc_wanderer_execute
, path
);
1454 DoMenuNotify(strip
, MEN_WANDERER_SHELL
, wanderer_menufunc_wanderer_shell
, path
);
1455 DoMenuNotify(strip
, MEN_WANDERER_GUISETTINGS
, wanderer_menufunc_wanderer_guisettings
, NULL
);
1456 DoMenuNotify(strip
, MEN_WANDERER_ABOUT
, wanderer_menufunc_wanderer_about
, NULL
);
1457 DoMenuNotify(strip
, MEN_WANDERER_QUIT
, wanderer_menufunc_wanderer_quit
, NULL
);
1459 DoMenuNotify(strip
, MEN_WINDOW_NEW_DRAWER
, wanderer_menufunc_window_newdrawer
, path
);
1460 DoMenuNotify(strip
, MEN_WINDOW_OPEN_PARENT
, wanderer_menufunc_window_openparent
, path
);
1461 DoMenuNotify(strip
, MEN_WINDOW_CLOSE
, wanderer_menufunc_window_close
, NULL
);
1462 DoMenuNotify(strip
, MEN_WINDOW_UPDATE
, wanderer_menufunc_window_update
, NULL
);
1463 DoMenuNotify(strip
, MEN_WINDOW_CLEAR
, wanderer_menufunc_window_clear
, NULL
);
1464 DoMenuNotify(strip
, MEN_WINDOW_SELECT
, wanderer_menufunc_window_select
, NULL
);
1465 DoMenuNotify(strip
, MEN_WINDOW_VIEW_ALL
, wanderer_menufunc_window_view_icons
, strip
);
1466 DoMenuNotify(strip
, MEN_WINDOW_SORT_NAME
, wanderer_menufunc_window_sort_name
, strip
);
1467 DoMenuNotify(strip
, MEN_WINDOW_SORT_TYPE
, wanderer_menufunc_window_sort_type
, strip
);
1468 DoMenuNotify(strip
, MEN_WINDOW_SORT_DATE
, wanderer_menufunc_window_sort_date
, strip
);
1469 DoMenuNotify(strip
, MEN_WINDOW_SORT_SIZE
, wanderer_menufunc_window_sort_size
, strip
);
1470 DoMenuNotify(strip
, MEN_WINDOW_SORT_REVERSE
, wanderer_menufunc_window_sort_reverse
, strip
);
1471 DoMenuNotify(strip
, MEN_WINDOW_SORT_TOPDRAWERS
, wanderer_menufunc_window_sort_topdrawers
, strip
);
1473 DoMenuNotify(strip
, MEN_ICON_OPEN
, wanderer_menufunc_icon_open
, NULL
);
1474 DoMenuNotify(strip
, MEN_ICON_RENAME
, wanderer_menufunc_icon_rename
, NULL
);
1475 DoMenuNotify(strip
, MEN_ICON_INFORMATION
, wanderer_menufunc_icon_information
, NULL
);
1476 DoMenuNotify(strip
, MEN_ICON_DELETE
, wanderer_menufunc_icon_delete
, NULL
);
1478 if ((item
= FindMenuitem(strip
, MEN_WANDERER_BACKDROP
)))
1482 item
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
1483 (IPTR
) _WandererIntern_AppObj
, 7, MUIM_Application_PushMethod
,
1484 (IPTR
) _WandererIntern_AppObj
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
1485 (IPTR
) wanderer_menufunc_wanderer_backdrop
, (IPTR
) strip
1490 /*** Methods ****************************************************************/
1491 Object
*Wanderer__OM_NEW(Class
*CLASS
, Object
*self
, struct opSet
*message
)
1493 D(bug("[Wanderer] Wanderer__OM_NEW()\n"));
1495 self
= (Object
*) DoSuperNewTags
1499 MUIA_Application_Title
, (IPTR
) "Wanderer",
1500 MUIA_Application_Base
, (IPTR
) "WANDERER",
1501 MUIA_Application_Version
, (IPTR
) VERSION
,
1502 MUIA_Application_Description
, (IPTR
) _(MSG_DESCRIPTION
),
1503 MUIA_Application_SingleTask
, TRUE
,
1505 TAG_MORE
, (IPTR
) message
->ops_AttrList
1510 SETUP_WANDERER_INST_DATA
;
1512 D(bug("[Wanderer] Wanderer__OM_NEW: SELF = %d, Private data @ %x\n", self
, data
));
1514 data
->wd_Screen
= LockPubScreen(NULL
);
1515 _WandererIntern_CLASS
= CLASS
;
1517 #if defined(WANDERER_DEFAULT_BACKDROP)
1518 data
->wd_Option_BackDropMode
= TRUE
;
1520 data
->wd_Option_BackDropMode
= FALSE
;
1523 if(data
->wd_Screen
== NULL
)
1525 D(bug("[Wanderer] Wanderer__OM_NEW: Couldn't lock screen!\n"));
1526 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
1530 D(bug("[Wanderer] Wanderer__OM_NEW: Using Screen @ %x\n", data
->wd_Screen
));
1532 /*-- Setup hooks structures ----------------------------------------*/
1533 _WandererIntern_hook_standard
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_StandardFunc
;
1534 _WandererIntern_hook_action
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_ActionFunc
;
1535 _WandererIntern_hook_backdrop
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_BackdropFunc
;
1538 if ((data
->wd_CommandPort
= CreateMsgPort()) == NULL
)
1540 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
1544 if ((data
->wd_NotifyPort
= CreateMsgPort()) == NULL
)
1546 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
1550 RegisterWorkbench(data
->wd_CommandPort
);
1552 /* Setup command port handler --------------------------------------*/
1553 data
->wd_CommandIHN
.ihn_Signals
= 1UL << data
->wd_CommandPort
->mp_SigBit
;
1554 data
->wd_CommandIHN
.ihn_Object
= self
;
1555 data
->wd_CommandIHN
.ihn_Method
= MUIM_Wanderer_HandleCommand
;
1559 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_CommandIHN
1562 /* Setup timer handler ---------------------------------------------*/
1563 data
->wd_TimerIHN
.ihn_Flags
= MUIIHNF_TIMER
;
1564 data
->wd_TimerIHN
.ihn_Millis
= 3000;
1565 data
->wd_TimerIHN
.ihn_Object
= self
;
1566 data
->wd_TimerIHN
.ihn_Method
= MUIM_Wanderer_HandleTimer
;
1570 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_TimerIHN
1573 /* Setup filesystem notification handler ---------------------------*/
1574 data
->wd_NotifyIHN
.ihn_Signals
= 1UL << data
->wd_NotifyPort
->mp_SigBit
;
1575 data
->wd_NotifyIHN
.ihn_Object
= self
;
1576 data
->wd_NotifyIHN
.ihn_Method
= MUIM_Wanderer_HandleNotify
;
1580 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_NotifyIHN
1583 // All the following should be moved to InitWandererPrefs
1585 /* Setup notification on prefs file --------------------------------*/
1586 data
->pnr
.nr_Name
= ExpandEnvName("ENV:SYS/Wanderer.prefs");
1587 data
->pnr
.nr_Flags
= NRF_SEND_MESSAGE
;
1588 data
->pnr
.nr_stuff
.nr_Msg
.nr_Port
= data
->wd_NotifyPort
;
1590 if (StartNotify(&data
->pnr
))
1592 D(bug("[Wanderer] Wanderer__OM_NEW: Prefs-notification setup on '%s'\n", data
->pnr
.nr_Name
));
1596 D(bug("[Wanderer] Wanderer__OM_NEW: FAILED to setup Prefs-notification!\n"));
1599 data
->wd_Prefs
= WandererPrefsObject
,
1600 End
; // FIXME: error handling
1602 if (data
->wd_Prefs
) data
->wd_PrefsIntern
= InitWandererPrefs();
1608 IPTR
Wanderer__OM_DISPOSE(Class
*CLASS
, Object
*self
, Msg message
)
1610 SETUP_WANDERER_INST_DATA
;
1612 if (data
->wd_CommandPort
)
1615 They only have been added if the creation of the msg port was
1618 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_TimerIHN
);
1619 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_CommandIHN
);
1620 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_NotifyIHN
);
1622 UnregisterWorkbench(data
->wd_CommandPort
);
1624 EndNotify(&data
->pnr
);
1626 DeleteMsgPort(data
->wd_NotifyPort
);
1627 data
->wd_NotifyPort
= NULL
;
1629 DeleteMsgPort(data
->wd_CommandPort
);
1630 data
->wd_CommandPort
= NULL
;
1632 DisposeObject(data
->wd_Prefs
);
1633 data
->wd_Prefs
= NULL
;
1636 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
1639 IPTR
Wanderer__OM_SET(Class
*CLASS
, Object
*self
, struct opSet
*message
)
1641 SETUP_WANDERER_INST_DATA
;
1642 struct TagItem
*tstate
= message
->ops_AttrList
, *tag
;
1644 while ((tag
= NextTagItem((const struct TagItem
**)&tstate
)) != NULL
)
1646 switch (tag
->ti_Tag
)
1648 case MUIA_Wanderer_Screen
:
1649 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_Screen = %p\n", tag
->ti_Data
));
1650 D(bug("[Wanderer] Wanderer__OM_SET: setting MUIA_Wanderer_Screen isnt yet handled!\n"));
1653 case MUIA_Wanderer_ActiveWindow
:
1654 data
->wd_ActiveWindow
= (Object
*) tag
->ti_Data
;
1655 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_ActiveWindow = %p\n", tag
->ti_Data
));
1656 if (!(XGET(data
->wd_ActiveWindow
, MUIA_Window_Activate
)))
1657 NNSET(data
->wd_ActiveWindow
, MUIA_Window_Activate
, TRUE
);
1661 case MUIA_Application_Iconified
:
1662 /* Wanderer itself cannot be iconified,
1663 just hide, instead. */
1664 tag
->ti_Tag
= MUIA_ShowMe
;
1665 tag
->ti_Data
= !tag
->ti_Data
;
1670 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
1673 IPTR
Wanderer__OM_GET(Class
*CLASS
, Object
*self
, struct opGet
*message
)
1675 SETUP_WANDERER_INST_DATA
;
1676 IPTR
*store
= message
->opg_Storage
;
1679 switch (message
->opg_AttrID
)
1681 case MUIA_Wanderer_Screen
:
1682 *store
= (IPTR
) data
->wd_Screen
;
1685 case MUIA_Wanderer_Prefs
:
1686 *store
= (IPTR
) data
->wd_Prefs
;
1689 case MUIA_Wanderer_ActiveWindow
:
1690 *store
= (IPTR
) data
->wd_ActiveWindow
;
1693 case MUIA_Wanderer_WorkbenchWindow
:
1694 *store
= (IPTR
) data
->wd_WorkbenchWindow
;
1698 rv
= DoSuperMethodA(CLASS
, self
, (Msg
) message
);
1704 /* Main entry point for Wanderer Application Object */
1706 When the executable creates our object it calls zune
1707 to handle basic "control" ... which results in Zune
1708 calling this method ..
1710 IPTR Wanderer__MUIM_Application_Execute
1712 Class
*CLASS
, Object
*self
, Msg message
1715 SETUP_WANDERER_INST_DATA
;
1717 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute() ##\n[Wanderer] Wanderer__MUIM_Application_Execute: Creating 'Workbench' Window..\n"));
1719 data
->wd_WorkbenchWindow
= (Object
*) DoMethod
1721 self
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) NULL
1724 if (data
->wd_WorkbenchWindow
!= NULL
)
1726 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Workbench Window Obj @ %x\n", data
->wd_WorkbenchWindow
));
1730 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Really handing control to Zune ..\n"));
1732 DoSuperMethodA(CLASS
, self
, message
);
1737 #warning "TODO: Report an error if we fail to create the Workbench's window ..."
1739 return RETURN_ERROR
;
1742 IPTR Wanderer__MUIM_Wanderer_HandleTimer
1744 Class
*CLASS
, Object
*self
, Msg message
1747 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
1748 Object
*child
= NULL
;
1749 STRPTR scr_title
= GetScreenTitle();
1751 while ((child
= NextObject(&cstate
)))
1752 SET(child
, MUIA_Window_ScreenTitle
, (IPTR
) scr_title
);
1757 IPTR Wanderer__MUIM_Wanderer_HandleCommand
1759 Class
*CLASS
, Object
*self
, Msg message
1762 SETUP_WANDERER_INST_DATA
;
1763 struct WBHandlerMessage
*wbhm
= NULL
;
1765 D(bug("[Wanderer] Recieved signal at notify port\n"));
1767 while ((wbhm
= WBHM(GetMsg(data
->wd_CommandPort
))) != NULL
)
1769 D(bug("[Wanderer] Recieved message from handler, type = %ld\n", wbhm
->wbhm_Type
));
1771 switch (wbhm
->wbhm_Type
)
1773 case WBHM_TYPE_SHOW
:
1774 D(bug("[Wanderer] WBHM_TYPE_SHOW\n"));
1775 SET(self
, MUIA_ShowMe
, TRUE
);
1778 case WBHM_TYPE_HIDE
:
1779 D(bug("[Wanderer] WBHM_TYPE_HIDE\n"));
1780 SET(self
, MUIA_ShowMe
, FALSE
);
1783 case WBHM_TYPE_UPDATE
:
1784 D(bug("[Wanderer] WBHM_TYPE_UPDATE\n"));
1786 CONST_STRPTR name
= wbhm
->wbhm_Data
.Update
.Name
;
1789 switch (wbhm
->wbhm_Data
.Update
.Type
)
1794 length
= strlen(name
);
1798 length
= PathPart(name
) - name
;
1802 D(bug("[Wanderer] name = %s, length = %ld\n", name
, length
));
1805 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
1806 Object
*child
= NULL
;
1808 while ((child
= NextObject(&cstate
)))
1810 if (XGET(child
, MUIA_UserData
))
1812 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
1816 child_drawer
!= NULL
1817 && strncmp(name
, child_drawer
, length
) == 0
1818 && strlen(child_drawer
) == length
1821 Object
*iconlist
= (Object
*) XGET(child
, MUIA_IconWindow_IconList
);
1823 D(bug("[Wanderer] Drawer found: %s!\n", child_drawer
));
1825 if (iconlist
!= NULL
)
1827 DoMethod ( iconlist
, MUIM_IconList_Update
);
1837 case WBHM_TYPE_OPEN
:
1838 D(bug("[Wanderer] WBHM_TYPE_OPEN\n"));
1841 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
1843 CONST_STRPTR buf
= wbhm
->wbhm_Data
.Open
.Name
;
1845 while ((child
= NextObject(&cstate
)))
1847 if (XGET(child
, MUIA_UserData
))
1849 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
1850 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
1852 int is_open
= XGET(child
, MUIA_Window_Open
);
1854 DoMethod(child
, MUIM_IconWindow_Open
);
1857 DoMethod(child
, MUIM_Window_ToFront
);
1858 SET(child
, MUIA_Window_Activate
, TRUE
);
1867 _WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
1873 ReplyMsg((struct Message
*) wbhm
);
1880 IPTR Wanderer__MUIM_Wanderer_HandleNotify
1882 Class
*CLASS
, Object
*self
, Msg message
1885 SETUP_WANDERER_INST_DATA
;
1886 struct Message
*notifyMessage
= NULL
;
1888 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: got prefs change notification!\n"));
1890 while ((notifyMessage
= GetMsg(data
->wd_NotifyPort
)) != NULL
)
1892 ReplyMsg(notifyMessage
);
1895 /* reload prefs file */
1896 DoMethod(data
->wd_Prefs
, MUIM_WandererPrefs_Reload
);
1901 /* Some differences here between volumes and subwindows */
1902 Object
* __CreateWandererIntuitionMenu__ ( BOOL isRoot
, BOOL isBackdrop
)
1904 Object
*_NewWandIntMenu__menustrip
= NULL
;
1905 IPTR _NewWandIntMenu__OPTION_BACKDROP
= CHECKIT
|MENUTOGGLE
;
1906 IPTR _NewWandIntMenu__OPTION_SHOWALL
= CHECKIT
|MENUTOGGLE
;
1910 _NewWandIntMenu__OPTION_BACKDROP
|= CHECKED
;
1913 #if defined(WANDERER_DEFAULT_SHOWALL)
1914 _NewWandIntMenu__OPTION_SHOWALL
|= CHECKED
;
1919 struct NewMenu nm
[] = {
1920 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
1921 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
1922 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
1924 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
1925 {NM_ITEM
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_GUISETTINGS
},
1926 {NM_ITEM
, _(MSG_MEN_ABOUT
), _(MSG_MEN_SC_ABOUT
) , 0 , 0, (APTR
) MEN_WANDERER_ABOUT
},
1927 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
1929 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, NM_MENUDISABLED
},
1931 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
1932 {NM_ITEM
, NM_BARLABEL
},
1933 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
1934 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
1935 {NM_ITEM
, NM_BARLABEL
},
1936 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
1937 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
1938 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
1939 {NM_ITEM
, NM_BARLABEL
},
1940 {NM_ITEM
, _(MSG_MEN_VIEW
)},
1941 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
1942 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
1943 {NM_SUB
, NM_BARLABEL
},
1944 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
1945 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
1946 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
1947 {NM_SUB
, NM_BARLABEL
},
1948 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
1949 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
1950 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
,4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
1951 //{NM_SUB, "..by Type", NULL, CHECKIT,4+8+16, (APTR) MEN_WINDOW_SORT_TYPE},
1952 {NM_SUB
, NM_BARLABEL
},
1953 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
1954 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
1955 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
1957 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, NM_MENUDISABLED
},
1958 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), 0, 0, (APTR
) MEN_ICON_OPEN
},
1959 // {NM_ITEM, "Close","C" },
1960 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), 0, 0, (APTR
) MEN_ICON_RENAME
},
1961 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), 0, 0, (APTR
) MEN_ICON_INFORMATION
},
1962 // {NM_ITEM, "Snapshot", "S" },
1963 // {NM_ITEM, "Unsnapshot", "U" },
1964 // {NM_ITEM, "Leave Out", "L" },
1965 // {NM_ITEM, "Put Away", "P" },
1966 {NM_ITEM
, NM_BARLABEL
},
1967 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, 0, 0, (APTR
) MEN_ICON_DELETE
},
1968 // {NM_ITEM, "Format Disk..." },
1969 // {NM_ITEM, "Empty Trash..." },
1971 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, NM_MENUDISABLED
},
1972 // {NM_ITEM, "ResetWanderer" },
1975 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
1979 struct NewMenu nm
[] = {
1980 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
1981 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
1982 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
1984 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
1985 {NM_ITEM
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_GUISETTINGS
},
1986 {NM_ITEM
, _(MSG_MEN_ABOUT
), _(MSG_MEN_SC_ABOUT
) , 0 , 0, (APTR
) MEN_WANDERER_ABOUT
},
1987 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
1989 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, NM_MENUDISABLED
},
1991 {NM_ITEM
, _(MSG_MEN_NEWDRAW
), _(MSG_MEN_SC_NEWDRAW
) , 0 , 0, (APTR
) MEN_WINDOW_NEW_DRAWER
},
1992 {NM_ITEM
, _(MSG_MEN_OPENPAR
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_OPEN_PARENT
},
1993 {NM_ITEM
, _(MSG_MEN_CLOSE
), _(MSG_MEN_SC_CLOSE
) , 0 , 0, (APTR
) MEN_WINDOW_CLOSE
},
1994 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
1995 {NM_ITEM
, NM_BARLABEL
},
1996 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
1997 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
1998 {NM_ITEM
, NM_BARLABEL
},
1999 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
2000 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
2001 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
2002 {NM_ITEM
, NM_BARLABEL
},
2003 {NM_ITEM
, _(MSG_MEN_VIEW
)},
2004 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
2005 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
2006 {NM_SUB
, NM_BARLABEL
},
2007 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
2008 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
2009 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
2010 {NM_SUB
, NM_BARLABEL
},
2011 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
2012 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
2013 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
,4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
2014 //{NM_SUB, "..by Type", NULL, CHECKIT,4+8+16, (APTR) MEN_WINDOW_SORT_TYPE},
2015 {NM_SUB
, NM_BARLABEL
},
2016 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
2017 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
2018 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
2020 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, NM_MENUDISABLED
},
2021 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), 0, 0, (APTR
) MEN_ICON_OPEN
},
2022 // {NM_ITEM, "Close","C" },
2023 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), 0, 0, (APTR
) MEN_ICON_RENAME
},
2024 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), 0, 0, (APTR
) MEN_ICON_INFORMATION
},
2025 // {NM_ITEM, "Snapshot", "S" },
2026 // {NM_ITEM, "Unsnapshot", "U" },
2027 // {NM_ITEM, "Leave Out", "L" },
2028 // {NM_ITEM, "Put Away", "P" },
2029 {NM_ITEM
, NM_BARLABEL
},
2030 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, 0, 0, (APTR
) MEN_ICON_DELETE
},
2031 // {NM_ITEM, "Format Disk..." },
2032 // {NM_ITEM, "Empty Trash..." },
2034 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, NM_MENUDISABLED
},
2035 // {NM_ITEM, "ResetWanderer" },
2038 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
2040 return _NewWandIntMenu__menustrip
;
2043 Object
*Wanderer__MUIM_Wanderer_CreateDrawerWindow
2045 Class
*CLASS
, Object
*self
,
2046 struct MUIP_Wanderer_CreateDrawerWindow
*message
2049 SETUP_WANDERER_INST_DATA
;
2051 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow()\n"));
2053 Object
*window
= NULL
;
2054 BOOL isWorkbenchWindow
= FALSE
;
2055 BOOL useBackdrop
= FALSE
;
2057 if (isWorkbenchWindow
= (message
->drawer
== NULL
? TRUE
: FALSE
))
2059 useBackdrop
= data
->wd_Option_BackDropMode
;
2062 BOOL hasToolbar
= XGET(data
->wd_Prefs
, MUIA_IconWindowExt_Toolbar_Enabled
);
2063 IPTR TAG_IconWindow_Drawer
= isWorkbenchWindow
? TAG_IGNORE
: MUIA_IconWindow_Location
;
2065 IPTR useFont
= (IPTR
)NULL
;
2066 if (data
->wd_PrefsIntern
)
2068 useFont
= (IPTR
)((struct WandererInternalPrefsData
*)data
->wd_PrefsIntern
)->WIPD_IconFont
;
2071 Object
*_NewWandDrawerMenu__menustrip
= __CreateWandererIntuitionMenu__ (isWorkbenchWindow
, useBackdrop
);
2073 /* Create a new icon drawer window with the correct drawer being set */
2074 window
= IconWindowObject
,
2076 MUIA_Wanderer_Prefs
, data
->wd_Prefs
,
2077 MUIA_Wanderer_Screen
, data
->wd_Screen
,
2078 MUIA_Window_ScreenTitle
, (IPTR
) GetScreenTitle(),
2079 MUIA_Window_Menustrip
, (IPTR
) _NewWandDrawerMenu__menustrip
,
2080 TAG_IconWindow_Drawer
, (IPTR
) message
->drawer
,
2081 MUIA_IconWindow_Font
, useFont
,
2082 MUIA_IconWindow_ActionHook
, (IPTR
) &_WandererIntern_hook_action
,
2083 MUIA_IconWindow_IsRoot
, isWorkbenchWindow
? TRUE
: FALSE
,
2084 isWorkbenchWindow
? MUIA_IconWindow_IsBackdrop
: TAG_IGNORE
, useBackdrop
,
2085 MUIA_Window_IsSubWindow
, isWorkbenchWindow
? FALSE
: TRUE
,
2086 MUIA_IconWindowExt_Toolbar_Enabled
, hasToolbar
? TRUE
: FALSE
,
2091 /* Get the drawer path back so we can use it also outside this function */
2093 BOOL freeDrwStr
= FALSE
;
2095 if (!isWorkbenchWindow
) drw
= (STRPTR
) XGET(window
, MUIA_IconWindow_Location
);
2098 drw
= AllocVec ( 5, MEMF_CLEAR
);
2099 sprintf ( drw
, "RAM:" );
2103 if (isWorkbenchWindow
)
2107 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
2108 (IPTR
)self
, 3, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_standard
, (IPTR
)wanderer_menufunc_wanderer_quit
2115 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
2116 (IPTR
)window
, 1, MUIM_IconWindow_Remove
2120 #if defined(WANDERER_DEFAULT_SHOWALL) || defined(WANDERER_DEFAULT_SHOWHIDDEN)
2121 Object
*window_IconList
= NULL
;
2122 ULONG current_DispFlags
= 0;
2124 GET(window
, MUIA_IconWindow_IconList
, &window_IconList
);
2126 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: IconWindows IconList @ %x\n", window_IconList
));
2128 if (window_IconList
!= NULL
)
2130 GET(window_IconList
, MUIA_IconList_DisplayFlags
, ¤t_DispFlags
);
2132 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Old Flags : %x\n", current_DispFlags
));
2134 #if defined(WANDERER_DEFAULT_SHOWALL)
2135 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Telling IconList to Show 'ALL' Files\n"));
2136 current_DispFlags
&= ~ICONLIST_DISP_SHOWINFO
;
2138 #if defined(WANDERER_DEFAULT_SHOWHIDDEN)
2139 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Telling IconList to Show 'Hidden' Files\n"));
2140 current_DispFlags
|= ICONLIST_DISP_SHOWHIDDEN
;
2142 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: New Flags : %x\n", current_DispFlags
));
2143 SET(window_IconList
, MUIA_IconList_DisplayFlags
, current_DispFlags
);
2149 window
, MUIM_Notify
, MUIA_Window_Activate
, TRUE
,
2150 (IPTR
)_app(self
), 3, MUIM_Set
, MUIA_Wanderer_ActiveWindow
, (IPTR
) window
2156 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
2157 (IPTR
)_app(self
), 5, MUIM_Application_PushMethod
, (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_backdrop
2162 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
2163 (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_backdrop
2167 /* If "Execute Command" entry is clicked open the execute window */
2168 DoAllMenuNotifies(_NewWandDrawerMenu__menustrip
, drw
);
2170 /* Add the window to the application */
2171 DoMethod(_app(self
), OM_ADDMEMBER
, (IPTR
) window
);
2173 /* And now open it */
2174 DoMethod(window
, MUIM_IconWindow_Open
);
2176 /* Clean up ram string */
2177 if ( freeDrwStr
&& drw
) FreeVec ( drw
);
2183 /*** Setup ******************************************************************/
2186 Wanderer
, NULL
, MUIC_Application
, NULL
,
2187 OM_NEW
, struct opSet
*,
2189 OM_SET
, struct opSet
*,
2190 OM_GET
, struct opGet
*,
2191 MUIM_Application_Execute
, Msg
,
2192 MUIM_Wanderer_HandleTimer
, Msg
,
2193 MUIM_Wanderer_HandleCommand
, Msg
,
2194 MUIM_Wanderer_HandleNotify
, Msg
,
2195 MUIM_Wanderer_CreateDrawerWindow
, struct MUIP_Wanderer_CreateDrawerWindow
*