2 Copyright 2004-2009, The AROS Development Team. All rights reserved.
5 #include "portable_macros.h"
8 #define MUIMASTER_YES_INLINE_STDARG
11 #include <aros/debug.h>
14 #define WANDERER_DEFAULT_BACKDROP
16 #include <exec/types.h>
17 #include <libraries/gadtools.h>
18 #include <libraries/mui.h>
21 #include <zune/customclasses.h>
23 #include <zune_AROS/customclasses.h>
26 #include <dos/notify.h>
29 #include <workbench/handler.h>
31 #include <workbench_AROS/handler.h>
34 #include <proto/graphics.h>
35 #include <proto/utility.h>
37 #include <proto/dos.h>
39 #include <proto/icon.h>
42 #include <proto/workbench.h>
45 #include <proto/layers.h>
48 #include <proto/alib.h>
57 #include <aros/detach.h>
58 #include <prefs/wanderer.h>
60 #include <prefs_AROS/wanderer.h>
63 #if defined(__AMIGA__) && !defined(__PPC__)
64 #define NO_INLINE_STDARG
66 #include <proto/intuition.h>
67 #include <proto/muimaster.h>
70 #include "iconwindow.h"
71 #include "iconwindow_attributes.h"
72 #include "iconwindowcontents.h"
73 #include "wandererprefs.h"
74 #include "wandererprefsintern.h"
75 #include "filesystems.h"
77 #include "Classes/iconlist.h"
78 #include "Classes/iconlist_attributes.h"
87 #define D(x) if (DEBUG) x
89 #define bug DebugPrintF
98 #ifndef NO_ICON_POSITION
99 #define NO_ICON_POSITION (0x8000000) /* belongs to workbench/workbench.h */
102 #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, TAG_DONE)
104 extern IPTR
InitWandererPrefs(void);
105 VOID
DoAllMenuNotifies(Object
*strip
, STRPTR path
);
106 Object
*FindMenuitem(Object
* strip
, int id
);
107 Object
*Wanderer__Func_CreateWandererIntuitionMenu(BOOL isRoot
, BOOL useBackdrop
);
108 void wanderer_menufunc_window_update(void);
109 void execute_open_with_command(BPTR cd
, STRPTR contents
);
110 void DisposeCopyDisplay(struct MUIDisplayObjects
*d
);
111 BOOL
CreateCopyDisplay(UWORD flags
, struct MUIDisplayObjects
*d
);
113 /* Stored in the main wanderer executable */
114 extern Object
*_WandererIntern_AppObj
;
115 extern Class
*_WandererIntern_CLASS
;
118 struct Hook _WandererIntern_hook_standard
;
119 struct Hook _WandererIntern_hook_action
;
120 struct Hook _WandererIntern_hook_backdrop
;
122 struct Hook
*_WandererIntern_hook_standard
;
123 struct Hook
*_WandererIntern_hook_action
;
124 struct Hook
*_WandererIntern_hook_backdrop
;
127 /*** Instance Data **********************************************************/
130 struct Screen
*wd_Screen
;
136 struct MUI_InputHandlerNode wd_TimerIHN
;
137 struct MsgPort
*wd_CommandPort
;
138 struct MUI_InputHandlerNode wd_CommandIHN
;
139 struct MsgPort
*wd_NotifyPort
;
140 struct MUI_InputHandlerNode wd_NotifyIHN
;
141 struct NotifyRequest wd_PrefsNotifyRequest
;
144 BOOL wd_Option_BackDropMode
;
147 /*** Macros *****************************************************************/
148 #define SETUP_WANDERER_INST_DATA struct Wanderer_DATA *data = INST_DATA(CLASS, self)
150 /**************************************************************************
152 **************************************************************************/
153 ///Wanderer__HookFunc_DisplayCopyFunc()
157 BOOL
, Wanderer__HookFunc_DisplayCopyFunc
,
158 AROS_UFHA(struct Hook
*, hook
, A0
),
159 AROS_UFHA(struct dCopyStruct
*, obj
, A2
),
160 AROS_UFHA(APTR
, unused_param
, A1
)
164 HOOKPROTO(Wanderer__HookFunc_DisplayCopyFunc
, BOOL
, struct dCopyStruct
*obj
, APTR unused_param
)
169 struct MUIDisplayObjects
*d
= (struct MUIDisplayObjects
*) obj
->userdata
;
171 if ((obj
->flags
& ACTION_UPDATE
) == 0)
175 if ((obj
->filelen
< 8192) && (d
->numfiles
> 0))
178 if (d
->smallobjects
>= 20) d
->smallobjects
= 0;
185 if (d
->smallobjects
> 0)
190 SET(d
->fileObject
, MUIA_Text_Contents
, obj
->file
);
191 SET(d
->sourceObject
, MUIA_Text_Contents
, obj
->spath
);
194 if (d
->action
!= ACTION_DELETE
)
196 d
->bytes
+= obj
->actlen
;
198 if ((obj
->flags
& ACTION_UPDATE
) == 0)
202 SET(d
->gauge
, MUIA_Gauge_Current
, 0);
203 SET(d
->destObject
, MUIA_Text_Contents
, obj
->dpath
);
209 if (d
->updateme
&&(obj
->totallen
<= obj
->filelen
))
211 double rate
= (double) (((double) obj
->totallen
) / (((double) obj
->difftime
) / ((double) CLOCKS_PER_SEC
))) / 1024.0;
212 if (rate
< 1024.0) sprintf(d
->SpeedBuffer
, "%.2f kBytes/s", rate
); else sprintf(d
->SpeedBuffer
, "%.2f MBytes/s", rate
/ 1024.0);
213 SetAttrs(d
->gauge
, MUIA_Gauge_Current
, (ULONG
) (32768.0 * (double) obj
->totallen
/ (double) obj
->filelen
), MUIA_Gauge_InfoText
, d
->SpeedBuffer
, TAG_DONE
);
219 if (d
->bytes
< 1048576)
221 if (obj
->filelen
< 1048576)
224 d
->Buffer
, "%s %ld %s %.2f kBytes %s %.2f kBytes",
225 _(MSG_WANDERER_FILEACCESS_NOOFFILES
), d
->numfiles
, _(MSG_WANDERER_FILEACCESS_ACTUAL
), (double) obj
->filelen
/ 1024.0, _(MSG_WANDERER_FILEACCESS_TOTAL
), (double) d
->bytes
/ 1024.0
231 d
->Buffer
, "%s %ld %s %.2f MBytes %s %.2f kBytes",
232 _(MSG_WANDERER_FILEACCESS_NOOFFILES
), d
->numfiles
, _(MSG_WANDERER_FILEACCESS_ACTUAL
), (double) obj
->filelen
/ 1048576.0, _(MSG_WANDERER_FILEACCESS_TOTAL
), (double) d
->bytes
/ 1024.0
238 if (obj
->filelen
< 1048576)
241 d
->Buffer
, "%s %ld %s %.2f kBytes %s %.2f MBytes",
242 _(MSG_WANDERER_FILEACCESS_NOOFFILES
), d
->numfiles
, _(MSG_WANDERER_FILEACCESS_ACTUAL
), (double) obj
->filelen
/ 1024.0, _(MSG_WANDERER_FILEACCESS_TOTAL
), (double) d
->bytes
/ 1048576.0
248 d
->Buffer
, "%s %ld %s %.2f MBytes %s %.2f MBytes",
249 _(MSG_WANDERER_FILEACCESS_NOOFFILES
), d
->numfiles
, _(MSG_WANDERER_FILEACCESS_ACTUAL
), (double) obj
->filelen
/ 1048576.0, _(MSG_WANDERER_FILEACCESS_TOTAL
), (double) d
->bytes
/ 1048576.0
253 SET(d
->performanceObject
, MUIA_Text_Contents
, d
->Buffer
);
257 DoMethod(d
->copyApp
, MUIM_Application_InputBuffered
);
259 /* read the stopflag and return TRUE if the user wanted to stop actionDir() */
260 if (d
->stopflag
== 1)
268 MakeStaticHook(Hook_DisplayCopyFunc
,Wanderer__HookFunc_DisplayCopyFunc
);
272 ///Wanderer__HookFunc_AskDeleteFunc()
276 ULONG
, Wanderer__HookFunc_AskDeleteFunc
,
277 AROS_UFHA(struct Hook
*, hook
, A0
),
278 AROS_UFHA(struct dCopyStruct
*, obj
, A2
),
279 AROS_UFHA(APTR
, unused_param
, A1
)
283 HOOKPROTO(Wanderer__HookFunc_AskDeleteFunc
, ULONG
, struct dCopyStruct
*obj
, APTR unused_param
)
288 ULONG back
= DELMODE_NONE
;
297 string
= CombineString("%s\n\033b%s\033n\n%s\n\033b%s\033n %s",
298 _(MSG_REQU_DELETE_FILE_S
), obj
->file
, _(MSG_REQU_DELETE_FILE_M
), obj
->spath
, _(MSG_REQU_DELETE_FILE_E
) );
300 else if (obj
->type
== 1)
302 string
= CombineString("%s\n\033b%s\033n\n%s\n\033b%s\033n %s",
303 _(MSG_REQU_FILEUNPROTECT_S
), obj
->file
, _(MSG_REQU_FILEUNPROTECT_M
), obj
->spath
, _(MSG_REQU_FILEUNPROTECT_E
) );
305 else if (obj
->type
== 2)
307 string
= CombineString("%s\n\033b%s\033n\n%s\n\033b%s\033n %s",
308 _(MSG_REQU_OVERWRITE_S
), obj
->file
, _(MSG_REQU_OVERWRITE_M
), obj
->spath
, _(MSG_REQU_OVERWRITE_E
) );
312 string
= CombineString("%s\n\033b%s\033n\n%s\n\033b%s\033n%s",
313 _(MSG_NOFILEACCESS_S
), obj
->file
, _(MSG_NOFILEACCESS_M
), obj
->spath
, _(MSG_NOFILEACCESS_E
) );
318 if (obj
->type
== 0) string
= CombineString("%s \033b%s\033n %s", _(MSG_REQU_DELETE_DRAWER_S
), obj
->spath
, _(MSG_REQU_DELETE_DRAWER_E
) );
319 else if (obj
->type
== 1) string
= CombineString("%s\n\033b%s\033n %s", _(MSG_REQU_PROTECTION_UNPROTECTDRAWER_S
), obj
->spath
, _(MSG_REQU_PROTECTION_UNPROTECTDRAWER_E
) );
320 else if (obj
->type
== 3) string
= CombineString("%s\n\033b%s %s", _(MSG_NODRAWERACCESS_S
), obj
->spath
, _(MSG_NODRAWERACCESS_E
) );
325 if (obj
->type
== 0) ret
= AskChoiceCentered( _(MSG_REQU_DELETE
), string
, _(MSG_REQU_DELETE_YESNO
), 0);
326 else if (obj
->type
== 1) ret
= AskChoiceCentered( _(MSG_REQU_PROTECTION
), string
, _(MSG_REQU_PROTECTION_UNPROTECT
), 0);
327 else if (obj
->type
== 2) ret
= AskChoiceCentered( _(MSG_REQU_OVERWRITE
), string
, _(MSG_REQU_OVERWRITE_YESNO
), 0);
328 else ret
= AskChoiceCentered( _(MSG_REQU_OVERWRITE
), string
, _(MSG_REQU_OVERWRITE_SKIPABORT
), 0);
329 freeString(NULL
, string
);
332 if (ret
== 0) back
= DELMODE_NONE
;
333 else if (ret
== 1) back
= DELMODE_DELETE
;
334 else if (ret
== 2) back
= DELMODE_ALL
;
335 else if (ret
== 3) back
= DELMODE_NO
;
342 MakeStaticHook(Hook_AskDeleteFunc
,Wanderer__HookFunc_AskDeleteFunc
);
346 ///Wanderer__Func_CopyDropEntries()
347 void Wanderer__Func_CopyDropEntries()
349 /* get filelist from user message */
350 struct Wanderer_FilelistMsg
*message_filelist
= FindTask(NULL
)->tc_UserData
;
352 D(bug("[Wanderer] Wanderer__Func_CopyDropEntries()\n" ));
354 if (message_filelist
)
357 struct MUIDisplayObjects dobjects
;
358 struct Wanderer_FileEntry
*currententry
;
360 struct Hook displayCopyHook
;
361 struct Hook displayDelHook
;
363 struct Hook
*displayCopyHook
;
364 struct Hook
*displayDelHook
;
368 displayCopyHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_DisplayCopyFunc
;
369 displayDelHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_AskDeleteFunc
;
371 displayCopyHook
= &Hook_DisplayCopyFunc
;
372 displayDelHook
= &Hook_AskDeleteFunc
;
375 if (CreateCopyDisplay(ACTION_COPY
, &dobjects
))
377 /* process all selected entries */
378 while ((currententry
= (struct Wanderer_FileEntry
*)RemTail(&message_filelist
->files
)) != NULL
)
380 /* copy via filesystems.c */
381 D(bug("[Wanderer] Wanderer__Func_CopyDropEntries: Copying '%s' to '%s'\n", ¤tentry
->filename
, &message_filelist
->destination_string
));
384 (char *)¤tentry
->filename
, (char *)&message_filelist
->destination_string
,
385 TRUE
, ACTION_COPY
, &displayCopyHook
, &displayDelHook
, (APTR
) &dobjects
);
387 FreeVec( currententry
);
389 /* delete copy window */
390 DisposeCopyDisplay(&dobjects
);
394 /* free msg memory */
395 FreeMem(message_filelist
, sizeof(struct Wanderer_FilelistMsg
));
401 ///Wanderer__HookFunc_ActionFunc()
405 void, Wanderer__HookFunc_ActionFunc
,
406 AROS_UFHA(struct Hook
*, hook
, A0
),
407 AROS_UFHA(Object
*, obj
, A2
),
408 AROS_UFHA(struct IconWindow_ActionMsg
*, msg
, A1
)
412 HOOKPROTO(Wanderer__HookFunc_ActionFunc
, void, Object
*obj
, struct IconWindow_ActionMsg
*msg
)
417 if (msg
->type
== ICONWINDOW_ACTION_OPEN
)
419 static unsigned char buf
[1024];
421 struct IconList_Entry
*ent
= (void*)MUIV_IconList_NextIcon_Start
;
423 DoMethod(msg
->iconlist
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&ent
);
424 if ((IPTR
)ent
== (IPTR
)MUIV_IconList_NextIcon_End
)
426 D(bug("[WANDERER] Wanderer__HookFunc_ActionFunc: ICONWINDOW_ACTION_OPEN: NextIcon returned MUIV_IconList_NextIcon_TAG_DONE)\n"));
430 offset
= strlen(ent
->filename
) - 5;
432 if ((msg
->isroot
) && (ent
->type
== ST_ROOT
))
434 strcpy((STRPTR
)buf
, ent
->label
);
438 strcpy((STRPTR
)buf
, ent
->filename
);
441 D(bug("[WANDERER] Wanderer__HookFunc_ActionFunc: ICONWINDOW_ACTION_OPEN - offset = %d, buf = %s\n", offset
, buf
);)
443 if ((ent
->type
== ST_ROOT
) || (ent
->type
== ST_USERDIR
) || (ent
->type
== ST_LINKDIR
))
445 Object
*cstate
= (Object
*)(((struct List
*)XGET(_app(obj
), MUIA_Application_WindowList
))->lh_Head
);
446 Object
*prefs
= (Object
*) XGET(_app(obj
), MUIA_Wanderer_Prefs
);
449 /* open new window if root or classic navigation set */
450 if ( (msg
->isroot
) || (XGET(prefs
, MUIA_IconWindowExt_Toolbar_NavigationMethod
) == WPD_NAVIGATION_CLASSIC
) )
452 while ((child
= NextObject(&cstate
)))
454 if (XGET(child
, MUIA_UserData
))
456 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
457 if (child_drawer
&& !Stricmp(buf
,(CONST_STRPTR
)child_drawer
))
459 BOOL is_open
= ( BOOL
)XGET(child
, MUIA_Window_Open
);
463 DoMethod(child
, MUIM_IconWindow_Open
);
467 DoMethod(child
, MUIM_Window_ToFront
);
468 SET(child
, MUIA_Window_Activate
, TRUE
);
476 /* Check if the window for this drawer is already opened */
477 DoMethod(_WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
);
478 // FIXME: error handling
482 /* open drawer in same window */
483 SET(obj
, MUIA_IconWindow_Location
, (IPTR
) buf
);
487 else if ((ent
->type
== ST_FILE
) || (ent
->type
== ST_LINKFILE
))
489 BPTR newwd
, oldwd
, file
;
491 /* Set the CurrentDir to the path of the executable to be started */
492 file
= Lock(ent
->filename
, SHARED_LOCK
);
495 newwd
= ParentDir(file
);
496 oldwd
= CurrentDir(newwd
);
498 if (!OpenWorkbenchObject(ent
->filename
, TAG_DONE
))
500 execute_open_with_command(newwd
, FilePart(ent
->filename
));
509 else if (msg
->type
== ICONWINDOW_ACTION_DIRUP
)
512 STRPTR actual_drawer
= (STRPTR
)XGET(obj
, MUIA_IconWindow_Location
);
513 STRPTR parent_drawer
= strrchr(actual_drawer
,'/');
514 STRPTR root_drawer
= strrchr(actual_drawer
,':');
516 /* check if dir is not drive root dir */
517 if ( strlen(root_drawer
) > 1 )
519 /* check if second or third level directory*/
522 (*(root_drawer
+1)) = 0;
523 SET(obj
, MUIA_IconWindow_Location
, actual_drawer
);
528 (*parent_drawer
) = 0;
529 SET(obj
, MUIA_IconWindow_Location
, actual_drawer
);
534 else if (msg
->type
== ICONWINDOW_ACTION_CLICK
)
536 if (!msg
->click
->shift
)
538 Object
*cstate
= (Object
*)(((struct List
*)XGET(_WandererIntern_AppObj
, MUIA_Application_WindowList
))->lh_Head
);
541 while ((child
= NextObject(&cstate
)))
543 if (XGET(child
, MUIA_UserData
))
545 if (child
!= obj
) DoMethod(child
, MUIM_IconWindow_UnselectAll
);
550 else if (msg
->type
== ICONWINDOW_ACTION_ICONDROP
)
552 struct Process
*child
;
554 struct IconList_Drop
*drop
= (struct IconList_Drop
*)msg
->drop
;
555 struct IconList_Entry
*ent
= (void*)MUIV_IconList_NextIcon_Start
;
556 struct Wanderer_FileEntry
*file_recordtmp
;
558 struct Wanderer_FilelistMsg
*message_filelist
= NULL
;
560 if ((message_filelist
= AllocMem(sizeof(struct Wanderer_FilelistMsg
), MEMF_CLEAR
|MEMF_PUBLIC
)) != NULL
)
562 strcpy( (char*)&message_filelist
->destination_string
,(STRPTR
) drop
->destination_string
);
564 NEWLIST(&message_filelist
->files
);
566 NEW_LIST(&message_filelist
->files
);
568 /* process all selected entries */
571 DoMethod((Object
*)drop
->source_iconlistobj
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &ent
);
573 /* if not end of selection, process */
574 if ( (int)ent
!= MUIV_IconList_NextIcon_End
)
576 file_recordtmp
= AllocVec( sizeof(struct Wanderer_FileEntry
), MEMF_CLEAR
|MEMF_PUBLIC
);
577 strcpy( (char*)&file_recordtmp
->filename
, ent
->filename
);
578 AddTail(&message_filelist
->files
, (struct Node
*)file_recordtmp
);
581 while ((int)ent
!= MUIV_IconList_NextIcon_End
);
584 /* create process and copy files within */
585 const struct TagItem tags
[]=
587 {NP_Entry
, (IPTR
)Wanderer__Func_CopyDropEntries
},
588 {NP_Name
, (IPTR
)"wanderer copy" },
589 {NP_UserData
, (IPTR
)message_filelist
},
590 {NP_StackSize
, 40000 },
594 child
= CreateNewProc(tags
);
596 #warning "TODO: update list contents"
597 /* this one should be solved through file notofications, as files are copied in a seperate process now */
600 else if (msg
->type
== ICONWINDOW_ACTION_APPWINDOWDROP
)
602 struct Screen
*wscreen
= NULL
;
605 /* get wanderers screen struct and the layer located at cursor position afterwards */
606 get( obj
, MUIA_Window_Screen
, &wscreen
);
607 layer
= WhichLayer(&wscreen
->LayerInfo
,wscreen
->MouseX
,wscreen
->MouseY
);
611 struct Window
*win
= (struct Window
*) layer
->Window
;
617 struct IconList_Entry
*ent
;
621 ent
= (void*)MUIV_IconList_NextIcon_Start
;
622 /* process all selected entries */
625 DoMethod(msg
->iconlist
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &ent
);
626 /* if not end of selection, process */
627 if ( (int)ent
!= MUIV_IconList_NextIcon_End
)
629 struct AppW
*a
= AllocVec(sizeof(struct AppW
), MEMF_CLEAR
);
632 a
->name
= AllocVec(strlen(ent
->filename
)+1, MEMF_CLEAR
);
636 strcpy(a
->name
, ent
->filename
);
637 AddTail(&AppList
, (struct Node
*) a
);
648 while ( ((int)ent
!= MUIV_IconList_NextIcon_End
) && !fail
);
650 if (!fail
&& (files
> 0))
652 STRPTR
*filelist
= AllocVec(sizeof(STRPTR
) * files
, MEMF_CLEAR
);
653 if (filelist
!= NULL
)
655 STRPTR
*flist
= filelist
;
656 if (!IsListEmpty(&AppList
))
659 struct Node
*s
= AppList
.lh_Head
;
660 while (((succ
= ((struct Node
*) s
)->ln_Succ
) != NULL
) && !fail
)
662 *flist
++ = ((struct AppW
*) s
)->name
;
666 D(bug("[WANDERER] AppWindowMsg: win:%s files:%s mx:%d my:%d\n",win
->Title
, filelist
, wscreen
->MouseX
- win
->LeftEdge
, wscreen
->MouseY
- win
->TopEdge
);)
667 /* send appwindow msg struct containing selected files to destination */
668 SendAppWindowMessage(win
, files
, (char **)filelist
, 0, wscreen
->MouseX
- win
->LeftEdge
, wscreen
->MouseY
- win
->TopEdge
, 0, 0);
674 if (!IsListEmpty(&AppList
))
677 struct Node
*s
= AppList
.lh_Head
;
678 while (((succ
= ((struct Node
*) s
)->ln_Succ
) != NULL
))
680 if ( ((struct AppW
*) s
)->name
!= NULL
)
681 FreeVec(((struct AppW
*) s
)->name
);
694 MakeStaticHook(Hook_ActionFunc
,Wanderer__HookFunc_ActionFunc
);
698 ///Wanderer__HookFunc_StandardFunc()
702 void, Wanderer__HookFunc_StandardFunc
,
703 AROS_UFHA(struct Hook
*, hook
, A0
),
704 AROS_UFHA(void *, dummy
, A2
),
705 AROS_UFHA(void **, funcptr
, A1
)
709 HOOKPROTO(Wanderer__HookFunc_StandardFunc
, void, void *dummy
, void **funcptr
)
714 void (*func
) (ULONG
*) = (void (*)(ULONG
*)) (*funcptr
);
715 if (func
) func((ULONG
*)(funcptr
+ 1));
720 MakeStaticHook(Hook_StandardFunc
,Wanderer__HookFunc_StandardFunc
);
724 ///Wanderer__HookFunc_BackdropFunc()
728 void, Wanderer__HookFunc_BackdropFunc
,
729 AROS_UFHA(struct Hook
*, hook
, A0
),
730 AROS_UFHA(void *, dummy
, A2
),
731 AROS_UFHA(void **, funcptr
, A1
)
735 HOOKPROTO(Wanderer__HookFunc_BackdropFunc
, void, void *dummy
, void **funcptr
)
740 struct Wanderer_DATA
*data
= INST_DATA(_WandererIntern_CLASS
, _WandererIntern_AppObj
);
741 BOOL wb_iscurrentlybd
;
743 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc()\n"));
744 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Private data @ %x\n", data
));
746 if (!data
->wd_WorkbenchWindow
)
748 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: No Workbench Window\n"));
752 wb_iscurrentlybd
= (BOOL
)XGET(data
->wd_WorkbenchWindow
, MUIA_IconWindow_IsBackdrop
);
754 if (wb_iscurrentlybd
!= data
->wd_Option_BackDropMode
)
756 BOOL isOpen
= (BOOL
)XGET(data
->wd_WorkbenchWindow
, MUIA_Window_Open
);
757 Object
*win_Active
= NULL
;
759 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Backdrop mode change requested!\n"));
760 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Disposing of existing Workbench window Obj ..\n"));
762 SET(data
->wd_WorkbenchWindow
, MUIA_Window_Open
, FALSE
);
764 if (data
->wd_WorkbenchWindow
== data
->wd_ActiveWindow
)
766 data
->wd_ActiveWindow
= NULL
;
770 win_Active
= data
->wd_ActiveWindow
;
773 /* Kill our close request notification .. */
776 data
->wd_WorkbenchWindow
, MUIM_KillNotify
, MUIA_Window_CloseRequest
779 /* .. And dispose of the window */
780 DoMethod(_WandererIntern_AppObj
, OM_REMMEMBER
, data
->wd_WorkbenchWindow
);
781 MUI_DisposeObject(data
->wd_WorkbenchWindow
);
782 data
->wd_WorkbenchWindow
= NULL
;
785 if (data
->wd_Option_BackDropMode
)
787 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Creating new Workbench window Obj (BACKDROP MODE)..\n"));
791 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Creating new Workbench window Obj (NORMAL MODE)..\n"));
794 data
->wd_WorkbenchWindow
= (Object
*) DoMethod
796 _WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) NULL
799 if ((data
->wd_WorkbenchWindow
) && (isOpen
))
801 D(bug("[WANDERER] Wanderer__HookFunc_BackdropFunc: Making Workbench window visable..\n"));
802 DoMethod(data
->wd_WorkbenchWindow
, MUIM_IconWindow_Open
);
803 DoMethod(data
->wd_WorkbenchWindow
, MUIM_Window_ToBack
);
808 SET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
, win_Active
);
810 else if (data
->wd_WorkbenchWindow
)
812 SET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
, data
->wd_WorkbenchWindow
);
818 MakeStaticHook(Hook_BackdropFunc
,Wanderer__HookFunc_BackdropFunc
);
821 /******** code from workbench/c/Info.c *******************/
823 static void fmtlarge(UBYTE
*buf
, ULONG num
)
837 if (num
>= 0x40000000)
839 array
.val
= num
>> 30;
840 d
= ((UQUAD
)num
* 10 + 0x20000000) / 0x40000000;
845 else if (num
>= 0x100000)
847 array
.val
= num
>> 20;
848 d
= ((UQUAD
)num
* 10 + 0x80000) / 0x100000;
853 else if (num
>= 0x400)
855 array
.val
= num
>> 10;
856 d
= (num
* 10 + 0x200) / 0x400;
870 if (!array
.dec
&& (d
> array
.val
* 10))
875 RawDoFmt(array
.dec
? "%lu.%lu" : "%lu", &array
, NULL
, buf
);
876 while (*buf
) { buf
++; }
883 STRPTR
GetScreenTitle(VOID
)
885 static TEXT title
[256];
886 UBYTE chip
[10], fast
[10];
889 __availMem
= AvailMem(MEMF_CHIP
);
890 fmtlarge(chip
, __availMem
);
891 __availMem
= AvailMem(MEMF_FAST
);
892 fmtlarge(fast
, __availMem
);
894 sprintf(title
, _(MSG_SCREENTITLE
), chip
, fast
);
900 ///GetUserScreenTitle()
901 STRPTR
GetUserScreenTitle(Object
*self
)
903 /*Work in progress :-)
905 char *screentitlestr
;
908 GET(self
, MUIA_IconWindowExt_ScreenTitle_String
, &screentitlestr
);
910 screentitleleng
= strlen(screentitlestr
);
912 if (screentitleleng
<1)
914 return GetScreenTitle();
916 return screentitlestr
;
922 /* Expand a passed in env: string to its full location */
923 /* Wanderer doesnt free this mem at the moment but should
924 incase it is every closed */
925 STRPTR
ExpandEnvName(STRPTR env_path
)
928 char tmp_envbuff
[1024];
929 STRPTR fullpath
= NULL
;
930 BPTR env_lock
= (BPTR
) NULL
;
932 env_lock
= Lock("ENV:", SHARED_LOCK
);
935 if (NameFromLock(env_lock
, tmp_envbuff
, 256)) ok
= TRUE
;
941 if ((fullpath
= AllocVec(strlen(tmp_envbuff
) + strlen(env_path
) + 1 + 1 - 4, MEMF_CLEAR
| MEMF_PUBLIC
)) != NULL
)
943 strcpy(fullpath
, tmp_envbuff
);
944 AddPart(fullpath
, env_path
+ 4, 1019);
949 //We couldnt expand it so just use as is ..
957 MEN_WANDERER_BACKDROP
,
958 MEN_WANDERER_EXECUTE
,
960 MEN_WANDERER_AROS_GUISETTINGS
,
961 MEN_WANDERER_AROS_ABOUT
,
964 MEN_WANDERER_SHUTDOWN
,
966 MEN_WINDOW_NEW_DRAWER
,
967 MEN_WINDOW_OPEN_PARENT
,
977 MEN_WINDOW_VIEW_ICON
,
978 MEN_WINDOW_VIEW_DETAIL
,
980 MEN_WINDOW_VIEW_HIDDEN
,
983 MEN_WINDOW_SORT_NAME
,
984 MEN_WINDOW_SORT_TYPE
,
985 MEN_WINDOW_SORT_DATE
,
986 MEN_WINDOW_SORT_SIZE
,
987 MEN_WINDOW_SORT_REVERSE
,
988 MEN_WINDOW_SORT_TOPDRAWERS
,
989 MEN_WINDOW_SORT_GROUP
,
993 MEN_ICON_INFORMATION
,
1004 ///execute_open_with_command()
1005 /**************************************************************************
1006 Open the execute window. Similar to below but you can also set the
1007 command. Called when item is openend
1008 **************************************************************************/
1009 void execute_open_with_command(BPTR cd
, STRPTR contents
)
1013 if (cd
!=(BPTR
) NULL
) lock
= cd
;
1014 else lock
= Lock("RAM:", ACCESS_READ
);
1018 "WANDERER:Tools/ExecuteCommand",
1019 WBOPENA_ArgLock
, (IPTR
) lock
,
1020 WBOPENA_ArgName
, (IPTR
) contents
,
1024 if (cd
==(BPTR
) NULL
) UnLock(lock
);
1028 ///wanderer_menufunc_wanderer_execute()
1029 /**************************************************************************
1030 Open the execute window
1032 This function will always get the current drawer as argument
1033 **************************************************************************/
1034 VOID
wanderer_menufunc_wanderer_execute(STRPTR
*cdptr
)
1036 //TODO: remove the STRPTR *cdptr from top
1037 //TODO:remove this commented out stuff
1039 //if (cdptr != NULL) lock = Lock(*cdptr, SHARED_LOCK);
1040 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1041 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
1042 BPTR cd
= Lock(dr
,SHARED_LOCK
);
1043 execute_open_with_command(cd
, NULL
);
1046 /*******************************/
1049 ///wanderer_menufunc_wanderer_shell()
1050 void wanderer_menufunc_wanderer_shell(STRPTR
*cd_ptr
)
1052 //TODO: remove the STRPTR *cdptr from top
1053 //TODO:remove this commented out stuff
1054 //BPTR cd = Lock(*cd_ptr,ACCESS_READ);
1055 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1056 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
1064 cd
= Lock(dr
, ACCESS_READ
);
1065 if (SystemTags("NewShell", NP_CurrentDir
, (IPTR
)cd
, TAG_DONE
) == -1)
1072 ///wanderer_menufunc_wanderer_backdrop()
1073 void wanderer_menufunc_wanderer_backdrop(Object
**pstrip
)
1075 struct Wanderer_DATA
*data
= INST_DATA(_WandererIntern_CLASS
, _WandererIntern_AppObj
);
1076 Object
*strip
= *pstrip
;
1077 Object
*item
= FindMenuitem(strip
, MEN_WANDERER_BACKDROP
);
1079 D(bug("[WANDERER] wanderer_menufunc_wanderer_backdrop()\n"));
1083 data
->wd_Option_BackDropMode
= (BOOL
)XGET(item
, MUIA_Menuitem_Checked
);
1084 SET(data
->wd_WorkbenchWindow
, MUIA_IconWindow_IsBackdrop
, data
->wd_Option_BackDropMode
);
1089 ///wanderer_menufunc_window_newdrawer()
1090 void wanderer_menufunc_window_newdrawer(STRPTR
*cdptr
)
1092 //TODO: remove the STRPTR *cdptr from top
1094 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1095 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
1096 Object
*actwindow
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1097 Object
*wbwindow
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_WorkbenchWindow
);
1100 D(bug("[wanderer] wanderer_menufunc_window_newdrawer(%s)\n", dr
));
1101 if (actwindow
== wbwindow
)
1103 /* This check is necessary because WorkbenchWindow has path RAM: */
1104 D(bug("[wanderer] wanderer_menufunc_window_newdrawer: Can't call WBNewDrawer for WorkbenchWindow\n"));
1107 if ( XGET(actwindow
, MUIA_Window_Open
) == FALSE
)
1109 D(bug("[wanderer] wanderer_menufunc_window_newdrawer: Can't call WBNewDrawer: the active window isn't open\n"));
1113 lock
= Lock(dr
, ACCESS_READ
);
1116 "WANDERER:Tools/WBNewDrawer",
1117 WBOPENA_ArgLock
, (IPTR
) lock
,
1125 ///wanderer_menufunc_window_openparent()
1126 void wanderer_menufunc_window_openparent(STRPTR
*cdptr
)
1128 //TODO: Remove the **cdptr stuff from top
1129 Object
*win
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1130 STRPTR dr
= ( STRPTR
)XGET( win
, MUIA_IconWindow_Location
);
1133 STRPTR last_letter
=NULL
;
1138 BOOL foundSlash
, foundColon
;
1141 last_letter
= &dr
[ strlen(dr
) - 1 ];
1143 thispath
= FilePart(dr
);
1145 if (*last_letter
==0x3a) return; /* Top Drawer has no parent to open */
1147 last_letter
= &thispath
[strlen(thispath
)-1];
1149 if (*last_letter
==0x3a)
1150 path_len
= (IPTR
)(thispath
-(IPTR
)(dr
));
1152 path_len
= (IPTR
)((thispath
-(IPTR
)(dr
))-1);
1154 buf
= AllocVec((path_len
+1),MEMF_PUBLIC
|MEMF_CLEAR
);
1155 CopyMem(dr
, buf
, path_len
);
1157 cstate
= (Object
*)(((struct List
*)XGET(_WandererIntern_AppObj
, MUIA_Application_WindowList
))->lh_Head
);
1160 // Make sure we have a correct path
1161 foundSlash
= FALSE
, foundColon
= FALSE
;
1162 i
= 0; for ( ; i
< path_len
; i
++ )
1164 if ( buf
[ i
] == '/' ) foundSlash
= TRUE
;
1165 if ( buf
[ i
] == ':' ) foundColon
= TRUE
;
1167 if ( !foundColon
&& !foundSlash
)
1169 STRPTR newbuf
= AllocVec ((path_len
+ 2), MEMF_PUBLIC
|MEMF_CLEAR
);
1170 sprintf(newbuf
,"%s:",buf
);
1174 // Done with path correction check
1176 while ((child
= NextObject(&cstate
)))
1178 if (XGET(child
, MUIA_UserData
))
1180 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
1181 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
1183 int is_open
= XGET(child
, MUIA_Window_Open
);
1185 DoMethod(child
, MUIM_IconWindow_Open
);
1188 DoMethod(child
, MUIM_Window_ToFront
);
1189 SET(child
, MUIA_Window_Activate
, TRUE
);
1197 DoMethod(_WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
);
1202 ///wanderer_menufunc_window_close()
1203 void wanderer_menufunc_window_close()
1205 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1206 SET(window
, MUIA_Window_CloseRequest
, TRUE
);
1210 ///wanderer_menufunc_window_update()
1211 void wanderer_menufunc_window_update()
1213 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1214 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1216 if (iconList
!= NULL
)
1218 DoMethod(iconList
, MUIM_IconList_Update
);
1223 ///wanderer_menufunc_window_clear()
1224 void wanderer_menufunc_window_clear()
1226 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1227 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1229 if (iconList
!= NULL
)
1231 DoMethod(iconList
, MUIM_IconList_UnselectAll
);
1236 ///wanderer_menufunc_window_select()
1237 void wanderer_menufunc_window_select()
1239 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1240 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1242 if (iconList
!= NULL
)
1244 DoMethod(iconList
, MUIM_IconList_SelectAll
);
1249 ///wanderer_menufunc_window_snapshot()
1250 void wanderer_menufunc_window_snapshot(IPTR
*flags
)
1252 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1253 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1254 char *dir_name
= (char *)XGET(window
, MUIA_IconWindow_Location
);
1255 struct DiskObject
*drawericon
= NULL
;
1256 IPTR geticon_error
= 0;
1257 IPTR display_bits
= 0, sort_bits
= 0;
1258 BOOL snapshot_all
= *flags
;
1260 D(bug("[wanderer] wanderer_menufunc_window_snapshot()\n"));
1261 D(bug("[wanderer] wanderer_menufunc_window_snapshot: Dir '%s'\n", dir_name
));
1263 if (snapshot_all
== TRUE
)
1265 struct IconList_Entry
*icon_entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
1266 struct IconEntry
*node
= NULL
;
1267 struct TagItem icon_tags
[] =
1269 { ICONPUTA_OnlyUpdatePosition
, TRUE
},
1272 D(bug("[wanderer] wanderer_menufunc_window_snapshot: snapshot ALL\n"));
1276 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Visible
, (IPTR
)&icon_entry
);
1278 if ((IPTR
)icon_entry
!= MUIV_IconList_NextIcon_End
)
1280 node
= (struct IconEntry
*)((IPTR
)icon_entry
- ((IPTR
)&node
->ile_IconListEntry
- (IPTR
)node
));
1281 D(bug("[wanderer] wanderer_menufunc_window_snapshot: SNAPSHOT entry = '%s' @ %p, (%p)\n", icon_entry
->filename
, icon_entry
, node
));
1282 if (node
->ile_DiskObj
)
1284 node
->ile_DiskObj
->do_CurrentX
= node
->ile_IconX
;
1285 node
->ile_DiskObj
->do_CurrentY
= node
->ile_IconY
;
1286 PutIconTagList(icon_entry
->filename
, node
->ile_DiskObj
, icon_tags
);
1290 D(bug("[wanderer] wanderer_menufunc_window_snapshot: icon has no diskobj!\n"));
1301 D(bug("[wanderer] wanderer_menufunc_window_snapshot: snapshot WINDOW\n"));
1304 drawericon
= GetIconTags(dir_name
,
1305 ICONGETA_FailIfUnavailable
, FALSE
,
1306 ICONA_ErrorCode
, &geticon_error
,
1309 if (drawericon
!= NULL
)
1311 if (drawericon
->do_DrawerData
== NULL
)
1313 D(bug("[wanderer] wanderer_menufunc_window_snapshot: Icon for '%s' has no DRAWER data!\n", dir_name
));
1314 drawericon
->do_DrawerData
= AllocMem(sizeof(struct DrawerData
), MEMF_CLEAR
|MEMF_PUBLIC
);
1317 drawericon
->do_Gadget
.UserData
= (APTR
)1;
1319 drawericon
->do_DrawerData
->dd_NewWindow
.TopEdge
= XGET(window
, MUIA_Window_TopEdge
);
1320 drawericon
->do_DrawerData
->dd_NewWindow
.LeftEdge
= XGET(window
, MUIA_Window_LeftEdge
);
1321 drawericon
->do_DrawerData
->dd_NewWindow
.Width
= XGET(window
, MUIA_Window_Width
);
1322 drawericon
->do_DrawerData
->dd_NewWindow
.Height
= XGET(window
, MUIA_Window_Height
);
1324 GET(iconList
, MUIA_IconList_DisplayFlags
, &display_bits
);
1325 if (display_bits
& ICONLIST_DISP_SHOWINFO
)
1327 D(bug("[wanderer] wanderer_menufunc_window_snapshot: ICONLIST_DISP_SHOWINFO\n"));
1328 drawericon
->do_DrawerData
->dd_Flags
= 1;
1332 drawericon
->do_DrawerData
->dd_Flags
= 2;
1335 #warning "TODO: Icon sort flags are only really for text list mode ... fix"
1336 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1337 if (sort_bits
& ICONLIST_SORT_BY_DATE
)
1339 drawericon
->do_DrawerData
->dd_ViewModes
= 3;
1341 else if (sort_bits
& ICONLIST_SORT_BY_SIZE
)
1343 drawericon
->do_DrawerData
->dd_ViewModes
= 4;
1347 drawericon
->do_DrawerData
->dd_ViewModes
= 2;
1349 PutDiskObject(dir_name
, drawericon
);
1354 ///wanderer_menufunc_window_view_icons(Object **pstrip)
1355 void wanderer_menufunc_window_view_icons(Object
**pstrip
)
1357 Object
*strip
= *pstrip
;
1358 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_VIEW_ALL
);
1359 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1360 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1362 if ((item
!= NULL
) && (iconList
!= NULL
))
1364 IPTR display_bits
= 0, menu_view_state
= 0;
1365 GET(iconList
, MUIA_IconList_DisplayFlags
, &display_bits
);
1367 GET(item
, MUIA_Menuitem_Checked
, &menu_view_state
);
1369 if (menu_view_state
)
1371 display_bits
&= ~ICONLIST_DISP_SHOWINFO
;
1375 display_bits
|= ICONLIST_DISP_SHOWINFO
;
1378 SET(iconList
, MUIA_IconList_DisplayFlags
, display_bits
);
1379 DoMethod(iconList
, MUIM_IconList_Sort
);
1384 ///wanderer_menufunc_window_view_hidden(Object **pstrip)
1385 void wanderer_menufunc_window_view_hidden(Object
**pstrip
)
1387 Object
*strip
= *pstrip
;
1388 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_VIEW_HIDDEN
);
1389 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1390 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1392 if ((item
!= NULL
) && (iconList
!= NULL
))
1394 IPTR display_bits
= 0, menu_view_state
= 0;
1395 GET(iconList
, MUIA_IconList_DisplayFlags
, &display_bits
);
1397 GET(item
, MUIA_Menuitem_Checked
, &menu_view_state
);
1399 if (menu_view_state
)
1401 display_bits
|= ICONLIST_DISP_SHOWHIDDEN
;
1405 display_bits
&= ~ICONLIST_DISP_SHOWHIDDEN
;
1408 SET(iconList
, MUIA_IconList_DisplayFlags
, display_bits
);
1409 DoMethod(iconList
, MUIM_IconList_Sort
);
1414 ///wanderer_menufunc_window_sort_name()
1415 void wanderer_menufunc_window_sort_name(Object
**pstrip
)
1417 Object
*strip
= *pstrip
;
1418 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_NAME
);
1419 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1420 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1422 if (item
!= NULL
&& iconList
!= NULL
)
1425 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1427 /*name = date and size bit both NOT set*/
1428 sort_bits
&= ~ICONLIST_SORT_MASK
;
1429 if( XGET(item
, MUIA_Menuitem_Checked
) )
1431 sort_bits
|= ICONLIST_SORT_BY_NAME
;
1433 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1434 DoMethod(iconList
, MUIM_IconList_Sort
);
1439 ///wanderer_menufunc_window_sort_date()
1440 void wanderer_menufunc_window_sort_date(Object
**pstrip
)
1442 Object
*strip
= *pstrip
;
1443 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_DATE
);
1444 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1445 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1447 if (item
!= NULL
&& iconList
!= NULL
)
1450 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1452 /*exclude size bit*/
1453 sort_bits
&= ~ICONLIST_SORT_MASK
;
1454 if( XGET(item
, MUIA_Menuitem_Checked
) )
1456 sort_bits
|= ICONLIST_SORT_BY_DATE
;
1458 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1459 DoMethod(iconList
, MUIM_IconList_Sort
);
1464 ///wanderer_menufunc_window_sort_size()
1465 void wanderer_menufunc_window_sort_size(Object
**pstrip
)
1467 Object
*strip
= *pstrip
;
1468 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_SIZE
);
1469 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1470 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1472 if (item
!= NULL
&& iconList
!= NULL
)
1475 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1477 /*exclude date bit*/
1478 sort_bits
&= ~ICONLIST_SORT_MASK
;
1479 if( XGET(item
, MUIA_Menuitem_Checked
) )
1481 sort_bits
|= ICONLIST_SORT_BY_SIZE
;
1483 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1484 DoMethod(iconList
, MUIM_IconList_Sort
);
1489 ///wanderer_menufunc_window_sort_type()
1490 void wanderer_menufunc_window_sort_type(Object
**pstrip
)
1492 Object
*strip
= *pstrip
;
1493 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_TYPE
);
1494 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1495 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1497 if (item
!= NULL
&& iconList
!= NULL
)
1500 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1502 /*type = all sort bits set (name+date+size) */
1503 sort_bits
&= ~ICONLIST_SORT_MASK
;
1504 if( XGET(item
, MUIA_Menuitem_Checked
) )
1506 sort_bits
|= ICONLIST_SORT_MASK
;
1508 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1509 DoMethod(iconList
, MUIM_IconList_Sort
);
1514 ///wanderer_menufunc_window_sort_reverse()
1515 void wanderer_menufunc_window_sort_reverse(Object
**pstrip
)
1517 Object
*strip
= *pstrip
;
1518 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_REVERSE
);
1519 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1520 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1522 if (item
!= NULL
&& iconList
!= NULL
)
1525 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1527 if( XGET(item
, MUIA_Menuitem_Checked
) )
1529 sort_bits
|= ICONLIST_SORT_REVERSE
;
1533 sort_bits
&= ~ICONLIST_SORT_REVERSE
;
1536 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1537 DoMethod(iconList
, MUIM_IconList_Sort
);
1542 ///wanderer_menufunc_window_sort_topdrawers()
1543 void wanderer_menufunc_window_sort_topdrawers(Object
**pstrip
)
1545 Object
*strip
= *pstrip
;
1546 Object
*item
= FindMenuitem(strip
, MEN_WINDOW_SORT_TOPDRAWERS
);
1547 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1548 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1550 if (item
!= NULL
&& iconList
!= NULL
)
1553 GET(iconList
, MUIA_IconList_SortFlags
, &sort_bits
);
1555 if( XGET(item
, MUIA_Menuitem_Checked
) )
1557 sort_bits
&= !ICONLIST_SORT_DRAWERS_MIXED
;
1561 sort_bits
|= ICONLIST_SORT_DRAWERS_MIXED
;
1564 SET(iconList
, MUIA_IconList_SortFlags
, sort_bits
);
1565 DoMethod(iconList
, MUIM_IconList_Sort
);
1570 ///wanderer_menufunc_icon_open()
1571 void wanderer_menufunc_icon_open()
1573 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1574 DoMethod(window
, MUIM_IconWindow_DoubleClicked
);
1578 ///wanderer_menufunc_icon_rename()
1579 void wanderer_menufunc_icon_rename(void)
1581 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1582 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1583 struct IconList_Entry
*entry
= (APTR
) MUIV_IconList_NextIcon_Start
;
1587 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &entry
);
1589 if ((int)entry
!= MUIV_IconList_NextIcon_End
)
1591 BPTR lock
= Lock(entry
->filename
, ACCESS_READ
);
1592 BPTR parent
= ParentDir(lock
);
1595 D(bug("[wanderer] wanderer_menufunc_icon_rename: selected = '%s'\n", entry
->filename
));
1599 "WANDERER:Tools/WBRename",
1600 WBOPENA_ArgLock
, (IPTR
) parent
,
1601 WBOPENA_ArgName
, (IPTR
) FilePart(entry
->filename
),
1605 D(bug("[wanderer] wanderer_menufunc_icon_rename: selected = '%s'\n", entry
->filename
));
1617 ///wanderer_menufunc_icon_information()
1618 void wanderer_menufunc_icon_information()
1620 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1621 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1622 struct IconList_Entry
*entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
1626 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&entry
);
1628 if ((IPTR
)entry
!= MUIV_IconList_NextIcon_End
)
1633 D(bug("[wanderer] wanderer_menufunc_icon_information: selected = '%s'\n", entry
->filename
));
1634 lock
= Lock(entry
->filename
, ACCESS_READ
);
1635 name
= FilePart(entry
->filename
);
1637 parent
= ParentDir(lock
);
1642 D(bug("[wanderer] wanderer_menufunc_icon_information: name = '%s' lock = 0x%08lX\n", name
, lock
));
1643 WBInfo(parent
, name
, NULL
);
1655 ///wanderer_menufunc_icon_snapshot()
1656 void wanderer_menufunc_icon_snapshot(IPTR
*flags
)
1658 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1659 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1660 struct IconList_Entry
*entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
1661 struct IconEntry
*node
= NULL
;
1662 BOOL snapshot
= *flags
;
1663 struct TagItem icontags
[] =
1665 { ICONPUTA_OnlyUpdatePosition
, TRUE
},
1669 D(bug("[wanderer] wanderer_menufunc_icon_snapshot()\n"));
1673 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&entry
);
1675 if ((IPTR
)entry
!= MUIV_IconList_NextIcon_End
)
1677 node
= (struct IconEntry
*)((IPTR
)entry
- ((IPTR
)&node
->ile_IconListEntry
- (IPTR
)node
));
1678 D(bug("[wanderer] wanderer_menufunc_icon_snapshot: %s entry = '%s' @ %p, (%p)\n", (snapshot
) ? "SNAPSHOT" : "UNSNAPSHOT", entry
->filename
, entry
, node
));
1679 if (node
->ile_DiskObj
)
1683 node
->ile_DiskObj
->do_CurrentX
= node
->ile_IconX
;
1684 node
->ile_DiskObj
->do_CurrentY
= node
->ile_IconY
;
1688 node
->ile_DiskObj
->do_CurrentX
= NO_ICON_POSITION
;
1689 node
->ile_DiskObj
->do_CurrentY
= NO_ICON_POSITION
;
1691 PutIconTagList(entry
->filename
, node
->ile_DiskObj
, icontags
);
1692 D(bug("[wanderer] wanderer_menufunc_icon_snapshot: saved ..\n"));
1696 D(bug("[wanderer] wanderer_menufunc_icon_snapshot: icon has no diskobj!\n"));
1704 D(bug("[wanderer] wanderer_menufunc_icon_snapshot: finished ..\n"));
1707 ///wanderer_menufunc_icon_leaveout()
1708 void wanderer_menufunc_icon_leaveout(void)
1710 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1711 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1712 struct IconList_Entry
*entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
1713 struct IconEntry
*node
= NULL
;
1714 char *leavout_dir
= NULL
;
1716 D(bug("[wanderer] wanderer_menufunc_icon_leaveout()\n"));
1718 GET(window
, MUIA_IconWindow_Location
, &leavout_dir
);
1720 if (leavout_dir
!= NULL
)
1722 D(bug("[wanderer] wanderer_menufunc_icon_leaveout: dir '%s'\n", leavout_dir
));
1725 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&entry
);
1727 if (((IPTR
)entry
!= MUIV_IconList_NextIcon_End
) && ((entry
->type
== ST_FILE
) || (entry
->type
== ST_USERDIR
)))
1729 node
= (struct IconEntry
*)((IPTR
)entry
- ((IPTR
)&node
->ile_IconListEntry
- (IPTR
)node
));
1730 D(bug("[wanderer] wanderer_menufunc_icon_leaveout: entry = '%s' @ %p, (%p)\n", entry
->filename
, entry
, node
));
1739 D(bug("[wanderer] wanderer_menufunc_icon_leaveout: finished ..\n"));
1742 ///wanderer_menufunc_icon_putaway()
1743 void wanderer_menufunc_icon_putaway(void)
1745 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1746 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1747 struct IconList_Entry
*entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
1748 struct IconEntry
*node
= NULL
;
1749 struct List putawayicons
;
1751 D(bug("[wanderer] wanderer_menufunc_icon_putaway()\n"));
1753 NEWLIST(&putawayicons
);
1757 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&entry
);
1759 if (((IPTR
)entry
!= MUIV_IconList_NextIcon_End
) && ((entry
->type
== ST_LINKFILE
) || (entry
->type
== ST_LINKDIR
)))
1761 node
= (struct IconEntry
*)((IPTR
)entry
- ((IPTR
)&node
->ile_IconListEntry
- (IPTR
)node
));
1762 D(bug("[wanderer] wanderer_menufunc_icon_putaway: entry = '%s' @ %p, (%p)\n", entry
->filename
, entry
, node
));
1763 /* Remove the node from the iconlist .. */
1764 /* Add it to our internal list for cleanup.. */
1765 //AddTail(&putawayicons, node);
1772 D(bug("[wanderer] wanderer_menufunc_icon_putaway: finished ..\n"));
1775 ///DisposeCopyDisplay()
1776 /* dispose the file copy display */
1777 void DisposeCopyDisplay(struct MUIDisplayObjects
*d
)
1781 //SET(d->win,MUIA_Window_Open,FALSE);
1782 MUI_DisposeObject(d
->copyApp
);
1787 ///CreateCopyDisplay()
1788 /* create the file copy window */
1789 BOOL
CreateCopyDisplay(UWORD flags
, struct MUIDisplayObjects
*d
)
1793 Object
*group
, *fromObject
, *toObject
, *fileTextObject
, *fileLengthObject
, *gaugeGroup
;
1795 d
->stopflag
= 0; // will be set to 1 when clicking on stop, than the displayhook can tell actionDir() to stop copy
1799 d
->smallobjects
= 0;
1800 d
->copyApp
= MUI_NewObject(MUIC_Application
,
1801 MUIA_Application_Title
, (IPTR
)"CopyRequester",
1802 MUIA_Application_Base
, (IPTR
)"WANDERER_COPY",
1803 MUIA_Application_Window
, (IPTR
)(d
->win
= MUI_NewObject(MUIC_Window
,
1804 MUIA_Window_Title
, (IPTR
)_(MSG_WANDERER_FILEACCESS
),
1805 MUIA_Window_Activate
, TRUE
,
1806 MUIA_Window_DepthGadget
, TRUE
,
1807 MUIA_Window_DragBar
, TRUE
,
1808 MUIA_Window_SizeGadget
, TRUE
,
1809 MUIA_Window_AppWindow
, FALSE
,
1810 MUIA_Window_CloseGadget
, FALSE
,
1811 MUIA_Window_Borderless
, FALSE
,
1812 MUIA_Window_TopEdge
, MUIV_Window_TopEdge_Centered
,
1813 MUIA_Window_LeftEdge
, MUIV_Window_LeftEdge_Centered
,
1814 MUIA_Window_Width
, MUIV_Window_Width_Visible(60),
1815 WindowContents
, (group
= MUI_NewObject(MUIC_Group
,
1816 Child
, (IPTR
)(fromObject
= MUI_NewObject(MUIC_Text
,
1818 MUIA_InnerRight
,(8),
1820 MUIA_InnerBottom
,(2),
1821 MUIA_Text_PreParse
, (IPTR
)"\33c",
1823 Child
, (IPTR
)(d
->sourceObject
= MUI_NewObject(MUIC_Text
,
1826 MUIA_InnerRight
,(8),
1828 MUIA_InnerBottom
,(2),
1829 MUIA_Background
, MUII_TextBack
,
1830 MUIA_Text_PreParse
, (IPTR
)"\33c",
1831 MUIA_Text_Contents
, (IPTR
)"---",
1833 Child
, (IPTR
)(toObject
= MUI_NewObject(MUIC_Text
,
1835 MUIA_InnerRight
,(8),
1837 MUIA_InnerBottom
,(2),
1838 MUIA_Text_PreParse
, (IPTR
)"\33c",
1840 Child
, (IPTR
)(d
->destObject
= MUI_NewObject(MUIC_Text
,
1843 MUIA_InnerRight
,(8),
1845 MUIA_InnerBottom
,(2),
1846 MUIA_Background
, MUII_TextBack
,
1847 MUIA_Text_PreParse
, (IPTR
)"\33c",
1848 MUIA_Text_Contents
, (IPTR
)"---",
1850 Child
, (IPTR
)(fileTextObject
= MUI_NewObject(MUIC_Text
,
1852 MUIA_InnerRight
,(8),
1854 MUIA_InnerBottom
,(2),
1855 MUIA_Text_PreParse
, (IPTR
)"\33c",
1857 Child
, (IPTR
)(d
->fileObject
= MUI_NewObject(MUIC_Text
,
1860 MUIA_InnerRight
,(8),
1862 MUIA_InnerBottom
,(2),
1863 MUIA_Background
, MUII_TextBack
,
1864 MUIA_Text_PreParse
, (IPTR
)"\33c",
1865 MUIA_Text_Contents
, (IPTR
)"---",
1867 Child
, (IPTR
)(fileLengthObject
= MUI_NewObject(MUIC_Text
,
1869 MUIA_InnerRight
,(8),
1871 MUIA_InnerBottom
,(2),
1872 MUIA_Text_PreParse
, (IPTR
)"\33c",
1874 Child
, (IPTR
)(gaugeGroup
= MUI_NewObject(MUIC_Group
,
1876 Child
, d
->gauge
= MUI_NewObject(MUIC_Gauge
,
1877 MUIA_Gauge_Horiz
, TRUE
,
1878 MUIA_Gauge_Max
, 32768,
1879 MUIA_Gauge_InfoText
, _(MSG_WANDERER_FILEACCESS_PROCESSING
),
1881 Child
, MUI_NewObject(MUIC_Scale
,
1882 MUIA_Scale_Horiz
, TRUE
,
1885 Child
, (IPTR
)( d
->performanceObject
= MUI_NewObject(MUIC_Text
,
1888 MUIA_InnerRight
,(8),
1890 MUIA_InnerBottom
,(2),
1891 MUIA_Background
, MUII_TextBack
,
1892 MUIA_Text_PreParse
, (IPTR
)"\33c",
1893 MUIA_Text_Contents
, (IPTR
)"...........0 Bytes...........",
1896 Child
, (IPTR
)( d
->stopObject
= SimpleButton( _(MSG_WANDERER_FILEACCESS_STOP
) ) ),
1904 if ((flags
& (ACTION_COPY
|ACTION_DELETE
)) == (ACTION_COPY
|ACTION_DELETE
))
1906 SET(fromObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_MOVEFROM
) );
1907 SET(toObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_MOVETO
) );
1908 SET(fileTextObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_FILE
) );
1909 SET(fileLengthObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_TRAFFIC
) );
1911 else if ((flags
& ACTION_COPY
) == ACTION_COPY
)
1913 SET(fromObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_COPYFROM
) );
1914 SET(toObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_COPYTO
) );
1915 SET(fileTextObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_FILE
) );
1916 SET(fileLengthObject
, MUIA_Text_Contents
, (IPTR
) _(MSG_WANDERER_FILEACCESS_TRAFFIC
) );
1919 else if ((flags
& ACTION_DELETE
) == ACTION_DELETE
)
1921 SET(fromObject
, MUIA_Text_Contents
, _(MSG_WANDERER_FILEACCESS_DELETEFROM
) );
1922 DoMethod(group
, MUIM_Group_InitChange
);
1923 DoMethod(group
, OM_REMMEMBER
, toObject
);
1924 DoMethod(group
, OM_REMMEMBER
, fileLengthObject
);
1925 DoMethod(group
, OM_REMMEMBER
, d
->performanceObject
);
1926 DoMethod(group
, OM_REMMEMBER
, d
->destObject
);
1927 DoMethod(group
, OM_REMMEMBER
, gaugeGroup
);
1928 DoMethod(group
, MUIM_Group_ExitChange
);
1929 SET(fileTextObject
, MUIA_Text_Contents
, _(MSG_WANDERER_FILEACCESS_FILETODELETE
) );
1932 SET(d
->win
,MUIA_Window_Open
,TRUE
);
1933 DoMethod(d
->stopObject
,MUIM_Notify
, MUIA_Pressed
, FALSE
, d
->stopObject
, 3, MUIM_WriteLong
, 1 ,&d
->stopflag
);
1940 ///wanderer_menufunc_icon_delete()
1941 void wanderer_menufunc_icon_delete(void)
1943 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1944 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1945 struct IconList_Entry
*entry
= ( void*) MUIV_IconList_NextIcon_Start
;
1946 struct MUIDisplayObjects dobjects
;
1947 struct Hook displayCopyHook
;
1948 struct Hook displayDelHook
;
1951 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &entry
);
1952 displayCopyHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_DisplayCopyFunc
;
1953 displayDelHook
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_AskDeleteFunc
;
1957 /* Process all selected entries */
1958 if (CreateCopyDisplay(ACTION_DELETE
, &dobjects
))
1962 if ((int)entry
!= MUIV_IconList_NextIcon_End
)
1964 /* copy via filesystems.c */
1965 D(bug("[WANDERER] Delete \"%s\"\n", entry
->filename
);)
1966 CopyContent( NULL
, entry
->filename
, NULL
, TRUE
, ACTION_DELETE
, &displayCopyHook
, &displayDelHook
, (APTR
) &dobjects
);
1969 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &entry
);
1971 while ( (int)entry
!= MUIV_IconList_NextIcon_End
);
1972 DisposeCopyDisplay(&dobjects
);
1974 // Only update list if anything happened to the icons!
1975 if ( updatedIcons
> 0 )
1977 DoMethod(window
, MUIM_IconWindow_UnselectAll
);
1978 DoMethod ( iconList
, MUIM_IconList_Update
);
1983 ///wanderer_menufunc_icon_format()
1984 void wanderer_menufunc_icon_format(void)
1986 Object
*window
= (Object
*) XGET(_WandererIntern_AppObj
, MUIA_Wanderer_ActiveWindow
);
1987 Object
*iconList
= (Object
*) XGET(window
, MUIA_IconWindow_IconList
);
1988 struct IconList_Entry
*entry
= ( void*) MUIV_IconList_NextIcon_Start
;
1990 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &entry
);
1992 /* Process only first selected entry */
1993 if ((int)entry
!= MUIV_IconList_NextIcon_End
)
1995 BPTR lock
= Lock(entry
->filename
, ACCESS_READ
);
1996 D(bug("[WANDERER] Format \"%s\"\n", entry
->filename
);)
1997 /* Usually we pass object name and parent lock. Here we do the same thing.
1998 Just object name is empty string and its parent is device's root. */
2001 "SYS:System/Format",
2002 WBOPENA_ArgLock
, (IPTR
) lock
,
2003 WBOPENA_ArgName
, lock
? (IPTR
)"" : (IPTR
)entry
->filename
,
2012 ///wanderer_menufunc_wanderer_AROS_guisettings()
2013 void wanderer_menufunc_wanderer_AROS_guisettings(void)
2015 //DoMethod(_WandererIntern_AppObj, MUIM_Application_OpenConfigWindow);
2016 OpenWorkbenchObject("SYS:Prefs/Zune",
2017 WBOPENA_ArgName
, (IPTR
) "WANDERER",
2022 ///wanderer_menufunc_wanderer_AROS_about()
2023 void wanderer_menufunc_wanderer_AROS_about(void)
2025 OpenWorkbenchObject("SYS:System/About", TAG_DONE
);
2029 ///wanderer_menufunc_wanderer_about()
2030 void wanderer_menufunc_wanderer_about(void)
2032 /* Display Information about this version of wanderer */
2033 #warning "TODO: Add a requestor with ABOUT info"
2037 ///wanderer_menufunc_wanderer_quit()
2038 void wanderer_menufunc_wanderer_quit(void)
2040 if (OpenWorkbenchObject("WANDERER:Tools/Quit", TAG_DONE
))
2044 if (MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, "Wanderer", _(MSG_YESNO
), _(MSG_REALLYQUIT
), NULL
))
2045 DoMethod(_WandererIntern_AppObj
, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
2051 ///wanderer_menufunc_wanderer_shutdown()
2052 void wanderer_menufunc_wanderer_shutdown(void)
2056 action
= MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, _(MSG_SHUTDOWN_TITLE
), _(MSG_SHUTDOWN_BUTTONS
), _(MSG_SHUTDOWN_BODY
), NULL
);
2061 ShutdownA(SD_ACTION_POWEROFF
);
2064 ShutdownA(SD_ACTION_COLDREBOOT
);
2069 MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, _(MSG_SHUTDOWN_TITLE
), _(MSG_OK
), _(MSG_ACTION_NOT_SUPPORTED
), NULL
);
2075 /**************************************************************************
2076 This function returns a Menu Object with the given id
2077 **************************************************************************/
2078 Object
*FindMenuitem(Object
* strip
, int id
)
2080 return (Object
*)DoMethod(strip
, MUIM_FindUData
, id
);
2085 /**************************************************************************
2086 This connects a notify to the given menu entry id
2087 **************************************************************************/
2088 VOID
DoMenuNotify(Object
* strip
, int id
, void *function
, void *arg
)
2091 entry
= FindMenuitem(strip
,id
);
2096 entry
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
2097 (IPTR
) entry
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
2098 (IPTR
) function
, (IPTR
) arg
2104 ///DoAllMenuNotifies()
2105 VOID
DoAllMenuNotifies(Object
*strip
, STRPTR path
)
2111 DoMenuNotify(strip
, MEN_WANDERER_EXECUTE
,
2112 wanderer_menufunc_wanderer_execute
, path
);
2113 DoMenuNotify(strip
, MEN_WANDERER_SHELL
,
2114 wanderer_menufunc_wanderer_shell
, path
);
2115 DoMenuNotify(strip
, MEN_WANDERER_AROS_GUISETTINGS
,
2116 wanderer_menufunc_wanderer_AROS_guisettings
, NULL
);
2117 DoMenuNotify(strip
, MEN_WANDERER_AROS_ABOUT
,
2118 wanderer_menufunc_wanderer_AROS_about
, NULL
);
2119 DoMenuNotify(strip
, MEN_WANDERER_QUIT
,
2120 wanderer_menufunc_wanderer_quit
, NULL
);
2121 DoMenuNotify(strip
, MEN_WANDERER_SHUTDOWN
,
2122 wanderer_menufunc_wanderer_shutdown
, NULL
);
2124 DoMenuNotify(strip
, MEN_WINDOW_NEW_DRAWER
,
2125 wanderer_menufunc_window_newdrawer
, path
);
2126 DoMenuNotify(strip
, MEN_WINDOW_OPEN_PARENT
,
2127 wanderer_menufunc_window_openparent
, path
);
2128 DoMenuNotify(strip
, MEN_WINDOW_CLOSE
,
2129 wanderer_menufunc_window_close
, NULL
);
2130 DoMenuNotify(strip
, MEN_WINDOW_UPDATE
,
2131 wanderer_menufunc_window_update
, NULL
);
2132 DoMenuNotify(strip
, MEN_WINDOW_CLEAR
,
2133 wanderer_menufunc_window_clear
, NULL
);
2135 DoMenuNotify(strip
, MEN_WINDOW_SNAP_WIN
,
2136 wanderer_menufunc_window_snapshot
, FALSE
);
2137 DoMenuNotify(strip
, MEN_WINDOW_SNAP_ALL
,
2138 wanderer_menufunc_window_snapshot
, (APTR
)TRUE
);
2140 DoMenuNotify(strip
, MEN_WINDOW_SELECT
,
2141 wanderer_menufunc_window_select
, NULL
);
2142 DoMenuNotify(strip
, MEN_WINDOW_VIEW_ALL
,
2143 wanderer_menufunc_window_view_icons
, strip
);
2144 DoMenuNotify(strip
, MEN_WINDOW_VIEW_HIDDEN
,
2145 wanderer_menufunc_window_view_hidden
, strip
);
2146 DoMenuNotify(strip
, MEN_WINDOW_SORT_NAME
,
2147 wanderer_menufunc_window_sort_name
, strip
);
2148 DoMenuNotify(strip
, MEN_WINDOW_SORT_TYPE
,
2149 wanderer_menufunc_window_sort_type
, strip
);
2150 DoMenuNotify(strip
, MEN_WINDOW_SORT_DATE
,
2151 wanderer_menufunc_window_sort_date
, strip
);
2152 DoMenuNotify(strip
, MEN_WINDOW_SORT_SIZE
,
2153 wanderer_menufunc_window_sort_size
, strip
);
2154 DoMenuNotify(strip
, MEN_WINDOW_SORT_REVERSE
,
2155 wanderer_menufunc_window_sort_reverse
, strip
);
2156 DoMenuNotify(strip
, MEN_WINDOW_SORT_TOPDRAWERS
,
2157 wanderer_menufunc_window_sort_topdrawers
, strip
);
2159 DoMenuNotify(strip
, MEN_ICON_OPEN
,
2160 wanderer_menufunc_icon_open
, NULL
);
2161 DoMenuNotify(strip
, MEN_ICON_RENAME
,
2162 wanderer_menufunc_icon_rename
, NULL
);
2163 DoMenuNotify(strip
, MEN_ICON_INFORMATION
,
2164 wanderer_menufunc_icon_information
, NULL
);
2165 DoMenuNotify(strip
, MEN_ICON_SNAPSHOT
,
2166 wanderer_menufunc_icon_snapshot
, (APTR
)TRUE
);
2167 DoMenuNotify(strip
, MEN_ICON_UNSNAPSHOT
,
2168 wanderer_menufunc_icon_snapshot
, FALSE
);
2169 DoMenuNotify(strip
, MEN_ICON_LEAVEOUT
,
2170 wanderer_menufunc_icon_leaveout
, NULL
);
2171 DoMenuNotify(strip
, MEN_ICON_PUTAWAY
,
2172 wanderer_menufunc_icon_putaway
, NULL
);
2173 DoMenuNotify(strip
, MEN_ICON_DELETE
,
2174 wanderer_menufunc_icon_delete
, NULL
);
2175 DoMenuNotify(strip
, MEN_ICON_FORMAT
,
2176 wanderer_menufunc_icon_format
, NULL
);
2178 if ((item
= FindMenuitem(strip
, MEN_WANDERER_BACKDROP
)))
2182 item
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
2183 (IPTR
) _WandererIntern_AppObj
, 7, MUIM_Application_PushMethod
,
2184 (IPTR
) _WandererIntern_AppObj
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
2185 (IPTR
) wanderer_menufunc_wanderer_backdrop
, (IPTR
) strip
2191 ///Wanderer__Func_UpdateMenuStates()
2192 VOID
Wanderer__Func_UpdateMenuStates(Object
*WindowObj
, Object
*IconlistObj
)
2194 IPTR current_DispFlags
= 0, current_SortFlags
= 0;
2195 Object
*current_Menustrip
= NULL
, *current_MenuItem
= NULL
;
2196 struct IconList_Entry
*icon_entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
2197 int selected_count
= 0;
2199 BOOL icon_men_PutAway
= FALSE
;
2200 BOOL icon_men_LeaveOut
= FALSE
;
2201 BOOL icon_men_Format
= FALSE
;
2202 BOOL icon_men_EmptyTrash
= FALSE
;
2204 if (IconlistObj
== NULL
)
2207 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates(IconList @ %p)\n", IconlistObj
));
2209 GET(IconlistObj
, MUIA_IconList_SortFlags
, ¤t_SortFlags
);
2210 GET(IconlistObj
, MUIA_IconList_DisplayFlags
, ¤t_DispFlags
);
2211 GET(WindowObj
, MUIA_Window_Menustrip
, ¤t_Menustrip
);
2213 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: Menu @ %p, Display Flags : %x, Sort Flags : %x\n", current_Menustrip
, current_DispFlags
, current_SortFlags
));
2217 DoMethod(IconlistObj
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&icon_entry
);
2219 if ((IPTR
)icon_entry
!= MUIV_IconList_NextIcon_End
)
2221 if (icon_entry
->type
== ST_ROOT
)
2223 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_ROOT\n"));
2224 icon_men_Format
= TRUE
;
2226 if ((icon_entry
->type
== ST_LINKDIR
) || (icon_entry
->type
== ST_LINKFILE
))
2228 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_LINKDIR/ST_LINKFILE\n"));
2229 icon_men_PutAway
= TRUE
;
2231 if ((icon_entry
->type
== ST_USERDIR
) || (icon_entry
->type
== ST_FILE
))
2233 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_USERDIR/ST_FILE\n"));
2234 icon_men_LeaveOut
= TRUE
;
2244 if (current_Menustrip
!= NULL
)
2246 if (selected_count
> 0)
2248 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_OPEN
)) != NULL
)
2250 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2252 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_RENAME
)) != NULL
)
2254 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2256 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_INFORMATION
)) != NULL
)
2258 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2260 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_SNAPSHOT
)) != NULL
)
2262 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2264 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_UNSNAPSHOT
)) != NULL
)
2266 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2268 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_DELETE
)) != NULL
)
2270 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2272 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_FORMAT
)) != NULL
)
2274 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_Format
);
2276 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_LEAVEOUT
)) != NULL
)
2278 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_LeaveOut
);
2280 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_PUTAWAY
)) != NULL
)
2282 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_PutAway
);
2284 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_EMPTYTRASH
)) != NULL
)
2286 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_EmptyTrash
);
2288 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_CLEAR
)) != NULL
)
2290 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2295 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_OPEN
)) != NULL
)
2297 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2299 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_RENAME
)) != NULL
)
2301 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2303 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_INFORMATION
)) != NULL
)
2305 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2307 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_SNAPSHOT
)) != NULL
)
2309 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2311 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_UNSNAPSHOT
)) != NULL
)
2313 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2315 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_DELETE
)) != NULL
)
2317 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2319 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_FORMAT
)) != NULL
)
2321 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2323 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_LEAVEOUT
)) != NULL
)
2325 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2327 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_PUTAWAY
)) != NULL
)
2329 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2331 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_EMPTYTRASH
)) != NULL
)
2333 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2335 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_CLEAR
)) != NULL
)
2337 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2340 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_VIEW_ALL
)) != NULL
)
2342 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)!(current_DispFlags
& ICONLIST_DISP_SHOWINFO
));
2344 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_VIEW_HIDDEN
)) != NULL
)
2346 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)(current_DispFlags
& ICONLIST_DISP_SHOWHIDDEN
));
2348 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_NAME
)) != NULL
)
2350 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_NAME
));
2352 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_DATE
)) != NULL
)
2354 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_DATE
));
2356 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_SIZE
)) != NULL
)
2358 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_SIZE
));
2360 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_TYPE
)) != NULL
)
2362 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_MASK
));
2367 ///Wanderer__HookFunc_UpdateMenuStatesFunc()
2371 ULONG
, Wanderer__HookFunc_UpdateMenuStatesFunc
,
2372 AROS_UFHA(struct Hook
*, hook
, A0
),
2373 AROS_UFHA(APTR
*, obj
, A2
),
2374 AROS_UFHA(APTR
, param
, A1
)
2378 HOOKPROTO(Wanderer__HookFunc_UpdateMenuStatesFunc
, ULONG
, struct dCopyStruct
*obj
, APTR param
)
2382 Object
*window
= *( Object
**)param
;
2383 Object
*iconlist
= NULL
;
2385 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc(self @ %p, window @ %p)\n", self
, window
));
2387 GET(window
, MUIA_IconWindow_IconList
, &iconlist
);
2389 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc: iconlist @ %p\n", iconlist
));
2391 Wanderer__Func_UpdateMenuStates(window
, iconlist
);
2393 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc: Update Complete.\n"));
2400 /*** Methods ****************************************************************/
2402 Object
*Wanderer__OM_NEW(Class
*CLASS
, Object
*self
, struct opSet
*message
)
2404 D(bug("[Wanderer] Wanderer__OM_NEW()\n"));
2406 self
= (Object
*) DoSuperNewTags
2410 MUIA_Application_Title
, (IPTR
) "Wanderer",
2411 MUIA_Application_Base
, (IPTR
) "WANDERER",
2412 MUIA_Application_Version
, (IPTR
) VERSION
,
2413 MUIA_Application_Description
, (IPTR
) _(MSG_DESCRIPTION
),
2414 MUIA_Application_SingleTask
, TRUE
,
2416 TAG_MORE
, (IPTR
) message
->ops_AttrList
2421 SETUP_WANDERER_INST_DATA
;
2423 // ULONG updatedIcons;
2424 D(bug("[Wanderer] Wanderer__OM_NEW: SELF = %d, Private data @ %x\n", self
, data
));
2426 _WandererIntern_CLASS
= CLASS
;
2428 #if defined(WANDERER_DEFAULT_BACKDROP)
2429 data
->wd_Option_BackDropMode
= TRUE
;
2431 data
->wd_Option_BackDropMode
= FALSE
;
2434 /*-- Setup hooks structures ----------------------------------------*/
2436 _WandererIntern_hook_standard
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_StandardFunc
;
2437 _WandererIntern_hook_action
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_ActionFunc
;
2438 _WandererIntern_hook_backdrop
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_BackdropFunc
;
2440 _WandererIntern_hook_standard
= &Hook_StandardFunc
;
2441 _WandererIntern_hook_action
= &Hook_ActionFunc
;
2442 _WandererIntern_hook_backdrop
= &Hook_BackdropFunc
;
2446 if ((data
->wd_CommandPort
= CreateMsgPort()) == NULL
)
2448 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
2452 if ((data
->wd_NotifyPort
= CreateMsgPort()) == NULL
)
2454 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
2458 RegisterWorkbench(data
->wd_CommandPort
);
2460 /* Setup command port handler --------------------------------------*/
2461 data
->wd_CommandIHN
.ihn_Signals
= 1UL << data
->wd_CommandPort
->mp_SigBit
;
2462 data
->wd_CommandIHN
.ihn_Object
= self
;
2463 data
->wd_CommandIHN
.ihn_Method
= MUIM_Wanderer_HandleCommand
;
2467 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_CommandIHN
2470 /* Setup timer handler ---------------------------------------------*/
2471 data
->wd_TimerIHN
.ihn_Flags
= MUIIHNF_TIMER
;
2472 data
->wd_TimerIHN
.ihn_Millis
= 3000;
2473 data
->wd_TimerIHN
.ihn_Object
= self
;
2474 data
->wd_TimerIHN
.ihn_Method
= MUIM_Wanderer_HandleTimer
;
2478 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_TimerIHN
2481 /* Setup filesystem notification handler ---------------------------*/
2482 data
->wd_NotifyIHN
.ihn_Signals
= 1UL << data
->wd_NotifyPort
->mp_SigBit
;
2483 data
->wd_NotifyIHN
.ihn_Object
= self
;
2484 data
->wd_NotifyIHN
.ihn_Method
= MUIM_Wanderer_HandleNotify
;
2488 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_NotifyIHN
2491 // All the following should be moved to InitWandererPrefs
2493 /* Setup notification on prefs file --------------------------------*/
2494 data
->wd_PrefsNotifyRequest
.nr_Name
= ExpandEnvName("ENV:SYS/Wanderer.prefs");
2495 data
->wd_PrefsNotifyRequest
.nr_Flags
= NRF_SEND_MESSAGE
;
2496 data
->wd_PrefsNotifyRequest
.nr_stuff
.nr_Msg
.nr_Port
= data
->wd_NotifyPort
;
2498 if (StartNotify(&data
->wd_PrefsNotifyRequest
))
2500 D(bug("[Wanderer] Wanderer__OM_NEW: Prefs-notification setup on '%s'\n", data
->wd_PrefsNotifyRequest
.nr_Name
));
2504 D(bug("[Wanderer] Wanderer__OM_NEW: FAILED to setup Prefs-notification!\n"));
2507 data
->wd_Prefs
= (Object
*)WandererPrefsObject
, End
; // FIXME: error handling
2509 data
->wd_Prefs
= NewObject(WandererPrefs_CLASS
->mcc_Class
, NULL
, TAG_DONE
); // FIXME: error handling
2514 D(bug("[Wanderer] Wanderer__OM_NEW: Prefs-Screentitle = '%s'\n",XGET(data
->wd_Prefs
, MUIA_IconWindowExt_ScreenTitle_String
)));
2515 data
->wd_PrefsIntern
= InitWandererPrefs();
2518 D(bug("[Wanderer] obj = %ld\n", self
));
2524 IPTR
Wanderer__OM_DISPOSE(Class
*CLASS
, Object
*self
, Msg message
)
2526 SETUP_WANDERER_INST_DATA
;
2528 if (data
->wd_CommandPort
)
2531 They only have been added if the creation of the msg port was
2534 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_TimerIHN
);
2535 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_CommandIHN
);
2536 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_NotifyIHN
);
2538 UnregisterWorkbench(data
->wd_CommandPort
);
2540 EndNotify(&data
->wd_PrefsNotifyRequest
);
2542 DeleteMsgPort(data
->wd_NotifyPort
);
2543 data
->wd_NotifyPort
= NULL
;
2545 DeleteMsgPort(data
->wd_CommandPort
);
2546 data
->wd_CommandPort
= NULL
;
2548 DisposeObject(data
->wd_Prefs
);
2549 data
->wd_Prefs
= NULL
;
2552 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2557 IPTR
Wanderer__OM_SET(Class
*CLASS
, Object
*self
, struct opSet
*message
)
2559 SETUP_WANDERER_INST_DATA
;
2560 struct TagItem
*tstate
= message
->ops_AttrList
, *tag
;
2562 while ((tag
= NextTagItem((TAGITEM
)&tstate
)) != NULL
)
2564 switch (tag
->ti_Tag
)
2566 case MUIA_Wanderer_Screen
:
2567 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_Screen = %p\n", tag
->ti_Data
));
2568 D(bug("[Wanderer] Wanderer__OM_SET: setting MUIA_Wanderer_Screen isnt yet handled!\n"));
2571 case MUIA_Wanderer_ActiveWindow
:
2572 data
->wd_ActiveWindow
= (Object
*) tag
->ti_Data
;
2573 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_ActiveWindow = %p\n", tag
->ti_Data
));
2574 if (!(XGET(data
->wd_ActiveWindow
, MUIA_Window_Activate
)))
2576 NNSET(data
->wd_ActiveWindow
, MUIA_Window_Activate
, TRUE
);
2578 Object
*activatewin_Iconlist
= NULL
;
2580 GET(data
->wd_ActiveWindow
, MUIA_IconWindow_IconList
, &activatewin_Iconlist
);
2581 Wanderer__Func_UpdateMenuStates(data
->wd_ActiveWindow
, activatewin_Iconlist
);
2584 case MUIA_Application_Iconified
:
2585 /* Wanderer itself cannot be iconified,
2586 just hide, instead. */
2587 tag
->ti_Tag
= MUIA_ShowMe
;
2588 tag
->ti_Data
= !tag
->ti_Data
;
2593 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2598 IPTR
Wanderer__OM_GET(Class
*CLASS
, Object
*self
, struct opGet
*message
)
2600 SETUP_WANDERER_INST_DATA
;
2601 IPTR
*store
= message
->opg_Storage
;
2604 switch (message
->opg_AttrID
)
2606 case MUIA_Wanderer_Screen
:
2607 *store
= (IPTR
)data
->wd_Screen
;
2610 case MUIA_Wanderer_Prefs
:
2611 *store
= (IPTR
)data
->wd_Prefs
;
2614 case MUIA_Wanderer_ActiveWindow
:
2615 *store
= (IPTR
)data
->wd_ActiveWindow
;
2618 case MUIA_Wanderer_WorkbenchWindow
:
2619 *store
= (IPTR
)data
->wd_WorkbenchWindow
;
2622 case MUIA_Wanderer_FileSysNotifyPort
:
2623 *store
= (IPTR
)data
->wd_NotifyPort
;
2627 rv
= DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2634 ///Wanderer__MUIM_Application_Execute()
2635 /* Main entry point for Wanderer Application Object */
2637 When the executable creates our object it calls zune
2638 to handle basic "control" ... which results in Zune
2639 calling this method ..
2641 IPTR Wanderer__MUIM_Application_Execute
2643 Class
*CLASS
, Object
*self
, Msg message
2646 SETUP_WANDERER_INST_DATA
;
2648 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute() ##\n[Wanderer] Wanderer__MUIM_Application_Execute: Creating 'Workbench' Window..\n"));
2650 data
->wd_WorkbenchWindow
= (Object
*) DoMethod
2652 self
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) NULL
2655 if (data
->wd_WorkbenchWindow
!= NULL
)
2657 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Workbench Window Obj @ %x\n", data
->wd_WorkbenchWindow
));
2661 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Really handing control to Zune ..\n"));
2664 DoSuperMethodA(CLASS
, self
, message
);
2668 while (DoMethod(self
,MUIM_Application_NewInput
,&sigs
) != MUIV_Application_ReturnID_Quit
)
2672 sigs
= Wait(sigs
| SIGBREAKF_CTRL_C
);
2673 if (sigs
& SIGBREAKF_CTRL_C
) break;
2684 #warning "TODO: Report an error if we fail to create the Workbench's window ..."
2686 return RETURN_ERROR
;
2690 ///Wanderer__MUIM_Wanderer_HandleTimer()
2691 /*This function uses GetScreenTitle() function...*/
2693 IPTR Wanderer__MUIM_Wanderer_HandleTimer
2695 Class
*CLASS
, Object
*self
, Msg message
2698 SETUP_WANDERER_INST_DATA
;
2699 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2700 Object
*child
= NULL
;
2702 STRPTR scr_title
= GetUserScreenTitle(data
->wd_Prefs
);
2704 while ((child
= NextObject(&cstate
)))
2705 SET(child
, MUIA_Window_ScreenTitle
, (IPTR
) scr_title
);
2711 ///Wanderer__MUIM_Wanderer_HandleCommand()
2712 IPTR Wanderer__MUIM_Wanderer_HandleCommand
2714 Class
*CLASS
, Object
*self
, Msg message
2717 SETUP_WANDERER_INST_DATA
;
2718 struct WBHandlerMessage
*wbhm
= NULL
;
2719 struct List
*pub_screen_list
;
2720 struct PubScreenNode
*pub_screen_node
;
2721 WORD visitor_count
= 0;
2722 D(bug("[Wanderer] %s()\n", __PRETTY_FUNCTION__
));
2723 D(bug("[Wanderer] %s: Recieved signal at notification port\n", __PRETTY_FUNCTION__
));
2725 while ((wbhm
= WBHM(GetMsg(data
->wd_CommandPort
))) != NULL
)
2727 D(bug("[Wanderer] %s: Recieved message from handler, type = %ld\n", __PRETTY_FUNCTION__
, wbhm
->wbhm_Type
));
2729 switch (wbhm
->wbhm_Type
)
2731 case WBHM_TYPE_SHOW
:
2732 D(bug("[Wanderer] %s: WBHM_TYPE_SHOW\n", __PRETTY_FUNCTION__
));
2733 if ((data
->wd_Screen
= LockPubScreen(NULL
)) != NULL
)
2735 D(bug("[Wanderer] %s: Unlocking access to screen @ %x\n", __PRETTY_FUNCTION__
, data
->wd_Screen
));
2736 UnlockPubScreen(NULL
, data
->wd_Screen
);
2737 SET(self
, MUIA_ShowMe
, TRUE
);
2741 #warning "TODO: We need to handle the possiblity that we fail to lock the pubscreen..."
2742 D(bug("[Wanderer] %s: Couldnt Lock WB Screen!!\n", __PRETTY_FUNCTION__
));
2746 case WBHM_TYPE_HIDE
:
2747 D(bug("[Wanderer] %s: WBHM_TYPE_HIDE\n", __PRETTY_FUNCTION__
));
2748 pub_screen_list
= LockPubScreenList();
2751 ForeachNode (pub_screen_list
, pub_screen_node
)
2753 Foreach_Node(pub_screen_list
, pub_screen_node
);
2756 if (pub_screen_node
->psn_Screen
== data
->wd_Screen
)
2757 visitor_count
= pub_screen_node
->psn_VisitorCount
;
2759 UnlockPubScreenList();
2760 if (visitor_count
== 0)
2761 SET(self
, MUIA_ShowMe
, FALSE
);
2764 case WBHM_TYPE_UPDATE
:
2765 D(bug("[Wanderer] %s: WBHM_TYPE_UPDATE\n", __PRETTY_FUNCTION__
));
2767 CONST_STRPTR name
= wbhm
->wbhm_Data
.Update
.Name
;
2770 switch (wbhm
->wbhm_Data
.Update
.Type
)
2775 length
= strlen(name
);
2779 length
= PathPart(name
) - name
;
2783 D(bug("[Wanderer] %s: name = %s, length = %ld\n", __PRETTY_FUNCTION__
, name
, length
));
2786 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2787 Object
*child
= NULL
;
2789 while ((child
= NextObject(&cstate
)))
2791 if (XGET(child
, MUIA_UserData
))
2793 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
2797 child_drawer
!= NULL
2798 && strncmp(name
, child_drawer
, length
) == 0
2799 && strlen(child_drawer
) == length
2802 Object
*iconlist
= (Object
*) XGET(child
, MUIA_IconWindow_IconList
);
2804 D(bug("[Wanderer] %s: Drawer found: %s!\n", __PRETTY_FUNCTION__
, child_drawer
));
2806 if (iconlist
!= NULL
)
2808 DoMethod ( iconlist
, MUIM_IconList_Update
);
2818 case WBHM_TYPE_OPEN
:
2819 D(bug("[Wanderer] %s: WBHM_TYPE_OPEN\n", __PRETTY_FUNCTION__
));
2822 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2824 CONST_STRPTR buf
= wbhm
->wbhm_Data
.Open
.Name
;
2826 while ((child
= NextObject(&cstate
)))
2828 if (XGET(child
, MUIA_UserData
))
2830 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
2831 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
2833 int is_open
= XGET(child
, MUIA_Window_Open
);
2835 DoMethod(child
, MUIM_IconWindow_Open
);
2838 DoMethod(child
, MUIM_Window_ToFront
);
2839 SET(child
, MUIA_Window_Activate
, TRUE
);
2848 _WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
2854 ReplyMsg((struct Message
*) wbhm
);
2861 ///Wanderer__MUIM_Wanderer_HandleNotify()
2862 IPTR Wanderer__MUIM_Wanderer_HandleNotify
2864 Class
*CLASS
, Object
*self
, Msg message
2867 SETUP_WANDERER_INST_DATA
;
2868 struct Message
*plainMessage
= NULL
;
2870 while ((plainMessage
= GetMsg(data
->wd_NotifyPort
)) != NULL
)
2872 struct NotifyMessage
*notifyMessage
= (struct NotifyMessage
*) plainMessage
;
2873 IPTR notifyMessage_UserData
= notifyMessage
->nm_NReq
->nr_UserData
;
2874 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: got FS notification ('%s' @ 0x%p) userdata = 0x%p!\n", notifyMessage
->nm_NReq
->nr_Name
, notifyMessage
, notifyMessage_UserData
));
2876 if ((notifyMessage_UserData
==(IPTR
) NULL
) && (strcmp(notifyMessage
->nm_NReq
->nr_Name
, data
->wd_PrefsNotifyRequest
.nr_Name
) == 0))
2878 /* reload prefs file */
2879 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: Wanderer Prefs-File Changed .. Reloading\n"));
2881 DoMethod(data
->wd_Prefs
, MUIM_WandererPrefs_Reload
);
2883 else if (notifyMessage_UserData
!= (IPTR
) NULL
)
2885 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: Drawer Window contents changed .. Updating\n"));
2886 DoMethod((Object
*)notifyMessage_UserData
, MUIM_IconList_Update
);
2889 ReplyMsg((struct Message
*)notifyMessage
);
2896 ///Wanderer__Func_CreateWandererIntuitionMenu()
2897 /* Some differences here between volumes and subwindows */
2898 Object
* Wanderer__Func_CreateWandererIntuitionMenu( BOOL isRoot
, BOOL isBackdrop
)
2900 Object
*_NewWandIntMenu__menustrip
= NULL
;
2901 IPTR _NewWandIntMenu__OPTION_BACKDROP
= CHECKIT
|MENUTOGGLE
;
2902 IPTR _NewWandIntMenu__OPTION_SHOWALL
= CHECKIT
|MENUTOGGLE
;
2906 _NewWandIntMenu__OPTION_BACKDROP
|= CHECKED
;
2911 struct NewMenu nm
[] = {
2912 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
2913 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
2914 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
2916 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
2917 #if defined(__AROS__)
2919 {NM_SUB
, _(MSG_MEN_ABOUT
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_ABOUT
},
2920 {NM_SUB
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_GUISETTINGS
},
2922 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
2923 {NM_ITEM
, _(MSG_MEN_SHUTDOWN
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_SHUTDOWN
},
2924 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, 0},
2925 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
2926 {NM_ITEM
, NM_BARLABEL
},
2927 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
2928 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
2929 {NM_ITEM
, NM_BARLABEL
},
2930 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
2931 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
2932 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
2933 {NM_ITEM
, NM_BARLABEL
},
2934 {NM_ITEM
, _(MSG_MEN_VIEW
)},
2935 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
, 8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
2936 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
, 4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
2937 {NM_SUB
, NM_BARLABEL
},
2938 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
2939 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
2940 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
2941 {NM_SUB
, NM_BARLABEL
},
2942 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|MENUTOGGLE
, 8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
2943 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
2944 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
2945 {NM_SUB
, _(MSG_MEN_BYTYPE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+16, (APTR
) MEN_WINDOW_SORT_TYPE
},
2946 {NM_SUB
, NM_BARLABEL
},
2947 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
2948 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
2949 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
2950 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, 0},
2951 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), ITEMENABLED
, 0, (APTR
) MEN_ICON_OPEN
},
2952 //{NM_ITEM, "Close","C" },
2953 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), ITEMENABLED
, 0, (APTR
) MEN_ICON_RENAME
},
2954 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), ITEMENABLED
, 0, (APTR
) MEN_ICON_INFORMATION
},
2955 {NM_ITEM
, _(MSG_SNAPSHOT
), "S", ITEMENABLED
, 0, (APTR
) MEN_ICON_SNAPSHOT
},
2956 {NM_ITEM
, _(MSG_UNSNAPSHOT
), "U", ITEMENABLED
, 0, (APTR
) MEN_ICON_UNSNAPSHOT
},
2957 {NM_ITEM
, _(MSG_LEAVE_OUT
), "L", ITEMENABLED
, 0, (APTR
) MEN_ICON_LEAVEOUT
},
2958 {NM_ITEM
, _(MSG_PUT_AWAY
), "P", ITEMENABLED
, 0, (APTR
) MEN_ICON_PUTAWAY
},
2959 {NM_ITEM
, NM_BARLABEL
},
2960 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_DELETE
},
2961 {NM_ITEM
, _(MSG_MEN_FORMAT
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_FORMAT
},
2962 {NM_ITEM
, _(MSG_EMPTY_TRASH
), NULL
, ITEMENABLED
},
2963 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, 0},
2964 //{NM_ITEM, "ResetWanderer" },
2967 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
2971 struct NewMenu nm
[] = {
2972 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
2973 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
2974 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
2976 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
2977 #if defined(__AROS__)
2979 {NM_SUB
, _(MSG_MEN_ABOUT
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_ABOUT
},
2980 {NM_SUB
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_GUISETTINGS
},
2982 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
2983 {NM_ITEM
, _(MSG_MEN_SHUTDOWN
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_SHUTDOWN
},
2985 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, 0},
2987 {NM_ITEM
, _(MSG_MEN_NEWDRAW
), _(MSG_MEN_SC_NEWDRAW
) , 0 , 0, (APTR
) MEN_WINDOW_NEW_DRAWER
},
2988 {NM_ITEM
, _(MSG_MEN_OPENPAR
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_OPEN_PARENT
},
2989 {NM_ITEM
, _(MSG_MEN_CLOSE
), _(MSG_MEN_SC_CLOSE
) , 0 , 0, (APTR
) MEN_WINDOW_CLOSE
},
2990 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
2991 {NM_ITEM
, NM_BARLABEL
},
2992 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
2993 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
2994 {NM_ITEM
, NM_BARLABEL
},
2995 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
2996 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
2997 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
2998 {NM_ITEM
, NM_BARLABEL
},
2999 {NM_ITEM
, _(MSG_MEN_VIEW
)},
3000 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
3001 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
3002 {NM_SUB
, NM_BARLABEL
},
3003 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
3004 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
3005 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
3006 {NM_SUB
, NM_BARLABEL
},
3007 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|MENUTOGGLE
, 8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
3008 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
3009 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
3010 {NM_SUB
, _(MSG_MEN_BYTYPE
), NULL
, CHECKIT
|MENUTOGGLE
|ITEMENABLED
, 4+8+16, (APTR
) MEN_WINDOW_SORT_TYPE
},
3011 {NM_SUB
, NM_BARLABEL
},
3012 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
3013 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
3014 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
3015 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, 0},
3016 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), ITEMENABLED
, 0, (APTR
) MEN_ICON_OPEN
},
3017 // {NM_ITEM, "Close","C" },
3018 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), ITEMENABLED
, 0, (APTR
) MEN_ICON_RENAME
},
3019 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), ITEMENABLED
, 0, (APTR
) MEN_ICON_INFORMATION
},
3020 {NM_ITEM
, _(MSG_SNAPSHOT
), "S", ITEMENABLED
, 0, (APTR
) MEN_ICON_SNAPSHOT
},
3021 {NM_ITEM
, _(MSG_UNSNAPSHOT
), "U", ITEMENABLED
, 0, (APTR
) MEN_ICON_UNSNAPSHOT
},
3022 {NM_ITEM
, _(MSG_LEAVE_OUT
), "L", ITEMENABLED
, 0, (APTR
) MEN_ICON_LEAVEOUT
},
3023 {NM_ITEM
, _(MSG_PUT_AWAY
), "P", ITEMENABLED
, 0, (APTR
) MEN_ICON_PUTAWAY
},
3024 {NM_ITEM
, NM_BARLABEL
},
3025 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_DELETE
},
3026 {NM_ITEM
, _(MSG_MEN_FORMAT
), NULL
, ITEMENABLED
},
3027 {NM_ITEM
, _(MSG_EMPTY_TRASH
),NULL
, ITEMENABLED
},
3029 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, 0},
3030 // {NM_ITEM, "ResetWanderer" },
3033 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
3035 return _NewWandIntMenu__menustrip
;
3039 ///Wanderer__MUIM_Wanderer_CreateDrawerWindow()
3040 Object
*Wanderer__MUIM_Wanderer_CreateDrawerWindow
3042 Class
*CLASS
, Object
*self
,
3043 struct MUIP_Wanderer_CreateDrawerWindow
*message
3046 SETUP_WANDERER_INST_DATA
;
3048 Object
*window
= NULL
;
3049 BOOL isWorkbenchWindow
= FALSE
;
3050 BOOL useBackdrop
= FALSE
;
3052 IPTR TAG_IconWindow_Drawer
;
3054 Object
*_NewWandDrawerMenu__menustrip
;
3056 Object
*window_IconList
= NULL
;
3058 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow()\n"));
3060 if ((isWorkbenchWindow
= (message
->drawer
== NULL
? TRUE
: FALSE
)))
3062 useBackdrop
= data
->wd_Option_BackDropMode
;
3065 hasToolbar
= XGET(data
->wd_Prefs
, MUIA_IconWindowExt_Toolbar_Enabled
);
3067 TAG_IconWindow_Drawer
= isWorkbenchWindow
? TAG_IGNORE
: MUIA_IconWindow_Location
;
3069 useFont
= (IPTR
)NULL
;
3071 data
->wd_Screen
= LockPubScreen(NULL
);
3073 if(data
->wd_Screen
== NULL
)
3075 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Couldn't lock screen!\n"));
3076 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
3079 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Using Screen @ %x\n", data
->wd_Screen
));
3081 if (data
->wd_PrefsIntern
)
3083 useFont
= (IPTR
)((struct WandererInternalPrefsData
*)data
->wd_PrefsIntern
)->WIPD_IconFont
;
3086 _NewWandDrawerMenu__menustrip
= Wanderer__Func_CreateWandererIntuitionMenu (isWorkbenchWindow
, useBackdrop
);
3088 //D(bug("1\n\n")); Delay(100);
3089 /* Create a new icon drawer window with the correct drawer being set */
3092 window
= (Object
*)IconWindowObject
,
3094 MUIA_Wanderer_Prefs
, (IPTR
)data
->wd_Prefs
,
3095 MUIA_Wanderer_Screen
, (IPTR
)data
->wd_Screen
,
3096 MUIA_Window_ScreenTitle
, (IPTR
)GetUserScreenTitle(data
->wd_Prefs
),
3097 MUIA_Window_Menustrip
, (IPTR
) _NewWandDrawerMenu__menustrip
,
3098 TAG_IconWindow_Drawer
, (IPTR
) message
->drawer
,
3099 MUIA_IconWindow_Font
, useFont
,
3100 MUIA_IconWindow_ActionHook
, (IPTR
) &_WandererIntern_hook_action
,
3101 MUIA_IconWindow_IsRoot
, isWorkbenchWindow
? TRUE
: FALSE
,
3102 isWorkbenchWindow
? MUIA_IconWindow_IsBackdrop
: TAG_IGNORE
, useBackdrop
,
3103 isWorkbenchWindow
? TAG_IGNORE
: MUIA_Wanderer_FileSysNotifyPort
, (IPTR
)data
->wd_NotifyPort
,
3104 MUIA_Window_IsSubWindow
, isWorkbenchWindow
? FALSE
: TRUE
,
3105 MUIA_IconWindowExt_Toolbar_Enabled
, hasToolbar
? TRUE
: FALSE
,
3108 window
= NewObject(IconWindow_CLASS
->mcc_Class
, NULL
,
3110 MUIA_Wanderer_Prefs
, data
->wd_Prefs
,
3111 MUIA_Wanderer_Screen
, data
->wd_Screen
,
3112 MUIA_Window_ScreenTitle
, GetUserScreenTitle(data
->wd_Prefs
),
3113 MUIA_Window_Menustrip
, (IPTR
) _NewWandDrawerMenu__menustrip
,
3114 TAG_IconWindow_Drawer
, (IPTR
) message
->drawer
,
3115 MUIA_IconWindow_Font
, useFont
,
3116 MUIA_IconWindow_ActionHook
, (IPTR
) &_WandererIntern_hook_action
,
3117 MUIA_IconWindow_IsRoot
, isWorkbenchWindow
? TRUE
: FALSE
,
3118 isWorkbenchWindow
? MUIA_IconWindow_IsBackdrop
: TAG_IGNORE
, useBackdrop
,
3119 isWorkbenchWindow
? TAG_IGNORE
: MUIA_Wanderer_FileSysNotifyPort
, data
->wd_NotifyPort
,
3120 MUIA_Window_IsSubWindow
, isWorkbenchWindow
? FALSE
: TRUE
,
3121 MUIA_IconWindowExt_Toolbar_Enabled
, hasToolbar
? TRUE
: FALSE
,
3124 //D(bug("2\n\n")); Delay(100);
3125 if (data
->wd_Screen
)
3127 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Unlocking access to screen @ %x\n", data
->wd_Screen
));
3128 UnlockPubScreen(NULL
, data
->wd_Screen
);
3133 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: window != NULL\n"));
3134 /* Get the drawer path back so we can use it also outside this function */
3136 BOOL freeDrwStr
= FALSE
;
3138 if (!isWorkbenchWindow
) drw
= (STRPTR
) XGET(window
, MUIA_IconWindow_Location
);
3141 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: call AllocVec()\n"));
3142 drw
= AllocVec ( 5, MEMF_CLEAR
);
3143 sprintf ( drw
, "RAM:" );
3147 if (isWorkbenchWindow
)
3149 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: isWorkbenchWindow\n"));
3152 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
3153 (IPTR
)self
, 3, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_standard
, (IPTR
)wanderer_menufunc_wanderer_quit
3160 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
3161 (IPTR
)_app(self
), 4, MUIM_Application_PushMethod
, (IPTR
)window
, 1, MUIM_IconWindow_Remove
3165 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: call get with MUIA_IconWindow_IconList\n"));
3166 GET(window
, MUIA_IconWindow_IconList
, &window_IconList
);
3168 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: IconWindows IconList @ %x\n", window_IconList
));
3170 if (window_IconList
!= NULL
)
3172 struct Hook
*_wand_UpdateMenuStates_hook
= NULL
;
3174 if ((_wand_UpdateMenuStates_hook
= AllocMem(sizeof(struct Hook
), MEMF_CLEAR
|MEMF_PUBLIC
)) != NULL
)
3176 _wand_UpdateMenuStates_hook
->h_Entry
= ( HOOKFUNC
)Wanderer__HookFunc_UpdateMenuStatesFunc
;
3179 window_IconList
, MUIM_Notify
, MUIA_IconList_SelectionChanged
, MUIV_EveryTime
,
3181 MUIM_CallHook
, _wand_UpdateMenuStates_hook
, (IPTR
)window
3184 Wanderer__Func_UpdateMenuStates(window
, window_IconList
);
3186 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: setup notifications\n"));
3189 window
, MUIM_Notify
, MUIA_Window_Activate
, TRUE
,
3190 (IPTR
)_app(self
), 3, MUIM_Set
, MUIA_Wanderer_ActiveWindow
, (IPTR
) window
3196 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
3197 (IPTR
)_app(self
), 5, MUIM_Application_PushMethod
, (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_backdrop
3202 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
3203 (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_backdrop
3206 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: execute all notifies\n"));
3207 /* If "Execute Command" entry is clicked open the execute window */
3208 DoAllMenuNotifies(_NewWandDrawerMenu__menustrip
, drw
);
3210 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: add window to app\n"));
3211 /* Add the window to the application */
3213 DoMethod(_app(self
), OM_ADDMEMBER
, (IPTR
) window
);
3215 DoMethod(self
, OM_ADDMEMBER
, (IPTR
) window
);
3217 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: open window\n"));
3218 /* And now open it */
3219 DoMethod(window
, MUIM_IconWindow_Open
);
3220 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: clean up memory\n"));
3221 /* Clean up ram string */
3222 if ( freeDrwStr
&& drw
) FreeVec ( drw
);
3224 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: exit\n"));
3228 /*** Setup ******************************************************************/
3231 Wanderer
, NULL
, MUIC_Application
, NULL
,
3232 OM_NEW
, struct opSet
*,
3234 OM_SET
, struct opSet
*,
3235 OM_GET
, struct opGet
*,
3236 MUIM_Application_Execute
, Msg
,
3237 MUIM_Wanderer_HandleTimer
, Msg
,
3238 MUIM_Wanderer_HandleCommand
, Msg
,
3239 MUIM_Wanderer_HandleNotify
, Msg
,
3240 MUIM_Wanderer_CreateDrawerWindow
, struct MUIP_Wanderer_CreateDrawerWindow
*