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(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
, 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
= XGET(window
, MUIA_IconWindow_Location
);
1255 struct DiskObject
*drawericon
= NULL
;
1256 IPTR geticon_error
= NULL
;
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
= 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
;
1989 struct MUIDisplayObjects dobjects
;
1990 struct Hook displayCopyHook
;
1991 struct Hook displayDelHook
;
1993 DoMethod(iconList
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
) &entry
);
1995 /* Process only first selected entry */
1996 if ((int)entry
!= MUIV_IconList_NextIcon_End
)
1998 BPTR lock
= Lock(entry
->filename
, ACCESS_READ
);
1999 D(bug("[WANDERER] Format \"%s\"\n", entry
->filename
);)
2000 /* Usually we pass object name and parent lock. Here we do the same thing.
2001 Just object name is empty string and its parent is device's root. */
2004 "SYS:System/Format",
2005 WBOPENA_ArgLock
, (IPTR
) lock
,
2006 WBOPENA_ArgName
, lock
? (IPTR
)"" : (IPTR
)entry
->filename
,
2015 ///wanderer_menufunc_wanderer_AROS_guisettings()
2016 void wanderer_menufunc_wanderer_AROS_guisettings(void)
2018 //DoMethod(_WandererIntern_AppObj, MUIM_Application_OpenConfigWindow);
2019 OpenWorkbenchObject("SYS:Prefs/Zune",
2020 WBOPENA_ArgName
, (IPTR
) "WANDERER",
2025 ///wanderer_menufunc_wanderer_AROS_about()
2026 void wanderer_menufunc_wanderer_AROS_about(void)
2028 OpenWorkbenchObject("SYS:System/About", TAG_DONE
);
2032 ///wanderer_menufunc_wanderer_about()
2033 void wanderer_menufunc_wanderer_about(void)
2035 /* Display Information about this version of wanderer */
2036 #warning "TODO: Add a requestor with ABOUT info"
2040 ///wanderer_menufunc_wanderer_quit()
2041 void wanderer_menufunc_wanderer_quit(void)
2043 if (OpenWorkbenchObject("WANDERER:Tools/Quit", TAG_DONE
))
2047 if (MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, "Wanderer", _(MSG_YESNO
), _(MSG_REALLYQUIT
), NULL
))
2048 DoMethod(_WandererIntern_AppObj
, MUIM_Application_ReturnID
, MUIV_Application_ReturnID_Quit
);
2054 ///wanderer_menufunc_wanderer_shutdown()
2055 void wanderer_menufunc_wanderer_shutdown(void)
2059 action
= MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, _(MSG_SHUTDOWN_TITLE
), _(MSG_SHUTDOWN_BUTTONS
), _(MSG_SHUTDOWN_BODY
), NULL
);
2064 ShutdownA(SD_ACTION_POWEROFF
);
2067 ShutdownA(SD_ACTION_COLDREBOOT
);
2072 MUI_RequestA(_WandererIntern_AppObj
, NULL
, 0, _(MSG_SHUTDOWN_TITLE
), _(MSG_OK
), _(MSG_ACTION_NOT_SUPPORTED
), NULL
);
2078 /**************************************************************************
2079 This function returns a Menu Object with the given id
2080 **************************************************************************/
2081 Object
*FindMenuitem(Object
* strip
, int id
)
2083 return (Object
*)DoMethod(strip
, MUIM_FindUData
, id
);
2088 /**************************************************************************
2089 This connects a notify to the given menu entry id
2090 **************************************************************************/
2091 VOID
DoMenuNotify(Object
* strip
, int id
, void *function
, void *arg
)
2094 entry
= FindMenuitem(strip
,id
);
2099 entry
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
2100 (IPTR
) entry
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
2101 (IPTR
) function
, (IPTR
) arg
2107 ///DoAllMenuNotifies()
2108 VOID
DoAllMenuNotifies(Object
*strip
, STRPTR path
)
2114 DoMenuNotify(strip
, MEN_WANDERER_EXECUTE
,
2115 wanderer_menufunc_wanderer_execute
, path
);
2116 DoMenuNotify(strip
, MEN_WANDERER_SHELL
,
2117 wanderer_menufunc_wanderer_shell
, path
);
2118 DoMenuNotify(strip
, MEN_WANDERER_AROS_GUISETTINGS
,
2119 wanderer_menufunc_wanderer_AROS_guisettings
, NULL
);
2120 DoMenuNotify(strip
, MEN_WANDERER_AROS_ABOUT
,
2121 wanderer_menufunc_wanderer_AROS_about
, NULL
);
2122 DoMenuNotify(strip
, MEN_WANDERER_QUIT
,
2123 wanderer_menufunc_wanderer_quit
, NULL
);
2124 DoMenuNotify(strip
, MEN_WANDERER_SHUTDOWN
,
2125 wanderer_menufunc_wanderer_shutdown
, NULL
);
2127 DoMenuNotify(strip
, MEN_WINDOW_NEW_DRAWER
,
2128 wanderer_menufunc_window_newdrawer
, path
);
2129 DoMenuNotify(strip
, MEN_WINDOW_OPEN_PARENT
,
2130 wanderer_menufunc_window_openparent
, path
);
2131 DoMenuNotify(strip
, MEN_WINDOW_CLOSE
,
2132 wanderer_menufunc_window_close
, NULL
);
2133 DoMenuNotify(strip
, MEN_WINDOW_UPDATE
,
2134 wanderer_menufunc_window_update
, NULL
);
2135 DoMenuNotify(strip
, MEN_WINDOW_CLEAR
,
2136 wanderer_menufunc_window_clear
, NULL
);
2138 DoMenuNotify(strip
, MEN_WINDOW_SNAP_WIN
,
2139 wanderer_menufunc_window_snapshot
, FALSE
);
2140 DoMenuNotify(strip
, MEN_WINDOW_SNAP_ALL
,
2141 wanderer_menufunc_window_snapshot
, TRUE
);
2143 DoMenuNotify(strip
, MEN_WINDOW_SELECT
,
2144 wanderer_menufunc_window_select
, NULL
);
2145 DoMenuNotify(strip
, MEN_WINDOW_VIEW_ALL
,
2146 wanderer_menufunc_window_view_icons
, strip
);
2147 DoMenuNotify(strip
, MEN_WINDOW_VIEW_HIDDEN
,
2148 wanderer_menufunc_window_view_hidden
, strip
);
2149 DoMenuNotify(strip
, MEN_WINDOW_SORT_NAME
,
2150 wanderer_menufunc_window_sort_name
, strip
);
2151 DoMenuNotify(strip
, MEN_WINDOW_SORT_TYPE
,
2152 wanderer_menufunc_window_sort_type
, strip
);
2153 DoMenuNotify(strip
, MEN_WINDOW_SORT_DATE
,
2154 wanderer_menufunc_window_sort_date
, strip
);
2155 DoMenuNotify(strip
, MEN_WINDOW_SORT_SIZE
,
2156 wanderer_menufunc_window_sort_size
, strip
);
2157 DoMenuNotify(strip
, MEN_WINDOW_SORT_REVERSE
,
2158 wanderer_menufunc_window_sort_reverse
, strip
);
2159 DoMenuNotify(strip
, MEN_WINDOW_SORT_TOPDRAWERS
,
2160 wanderer_menufunc_window_sort_topdrawers
, strip
);
2162 DoMenuNotify(strip
, MEN_ICON_OPEN
,
2163 wanderer_menufunc_icon_open
, NULL
);
2164 DoMenuNotify(strip
, MEN_ICON_RENAME
,
2165 wanderer_menufunc_icon_rename
, NULL
);
2166 DoMenuNotify(strip
, MEN_ICON_INFORMATION
,
2167 wanderer_menufunc_icon_information
, NULL
);
2168 DoMenuNotify(strip
, MEN_ICON_SNAPSHOT
,
2169 wanderer_menufunc_icon_snapshot
,TRUE
);
2170 DoMenuNotify(strip
, MEN_ICON_UNSNAPSHOT
,
2171 wanderer_menufunc_icon_snapshot
, FALSE
);
2172 DoMenuNotify(strip
, MEN_ICON_LEAVEOUT
,
2173 wanderer_menufunc_icon_leaveout
, NULL
);
2174 DoMenuNotify(strip
, MEN_ICON_PUTAWAY
,
2175 wanderer_menufunc_icon_putaway
, NULL
);
2176 DoMenuNotify(strip
, MEN_ICON_DELETE
,
2177 wanderer_menufunc_icon_delete
, NULL
);
2178 DoMenuNotify(strip
, MEN_ICON_FORMAT
,
2179 wanderer_menufunc_icon_format
, NULL
);
2181 if ((item
= FindMenuitem(strip
, MEN_WANDERER_BACKDROP
)))
2185 item
, MUIM_Notify
, MUIA_Menuitem_Trigger
, MUIV_EveryTime
,
2186 (IPTR
) _WandererIntern_AppObj
, 7, MUIM_Application_PushMethod
,
2187 (IPTR
) _WandererIntern_AppObj
, 4, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_standard
,
2188 (IPTR
) wanderer_menufunc_wanderer_backdrop
, (IPTR
) strip
2194 ///Wanderer__Func_UpdateMenuStates()
2195 VOID
Wanderer__Func_UpdateMenuStates(Object
*WindowObj
, Object
*IconlistObj
)
2197 IPTR current_DispFlags
= NULL
, current_SortFlags
= NULL
;
2198 Object
*current_Menustrip
= NULL
, *current_MenuItem
= NULL
;
2199 struct IconList_Entry
*icon_entry
= (IPTR
)MUIV_IconList_NextIcon_Start
;
2200 int selected_count
= 0;
2202 BOOL icon_men_PutAway
= FALSE
;
2203 BOOL icon_men_LeaveOut
= FALSE
;
2204 BOOL icon_men_Format
= FALSE
;
2205 BOOL icon_men_EmptyTrash
= FALSE
;
2207 if (IconlistObj
== NULL
)
2210 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates(IconList @ %p)\n", IconlistObj
));
2212 GET(IconlistObj
, MUIA_IconList_SortFlags
, ¤t_SortFlags
);
2213 GET(IconlistObj
, MUIA_IconList_DisplayFlags
, ¤t_DispFlags
);
2214 GET(WindowObj
, MUIA_Window_Menustrip
, ¤t_Menustrip
);
2216 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: Menu @ %p, Display Flags : %x, Sort Flags : %x\n", current_Menustrip
, current_DispFlags
, current_SortFlags
));
2220 DoMethod(IconlistObj
, MUIM_IconList_NextIcon
, MUIV_IconList_NextIcon_Selected
, (IPTR
)&icon_entry
);
2222 if ((IPTR
)icon_entry
!= MUIV_IconList_NextIcon_End
)
2224 if (icon_entry
->type
== ST_ROOT
)
2226 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_ROOT\n"));
2227 icon_men_Format
= TRUE
;
2229 if ((icon_entry
->type
== ST_LINKDIR
) || (icon_entry
->type
== ST_LINKFILE
))
2231 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_LINKDIR/ST_LINKFILE\n"));
2232 icon_men_PutAway
= TRUE
;
2234 if ((icon_entry
->type
== ST_USERDIR
) || (icon_entry
->type
== ST_FILE
))
2236 D(bug("[Wanderer] Wanderer__Func_UpdateMenuStates: ST_USERDIR/ST_FILE\n"));
2237 icon_men_LeaveOut
= TRUE
;
2247 if (current_Menustrip
!= NULL
)
2249 if (selected_count
> 0)
2251 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_OPEN
)) != NULL
)
2253 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2255 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_RENAME
)) != NULL
)
2257 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2259 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_INFORMATION
)) != NULL
)
2261 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2263 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_SNAPSHOT
)) != NULL
)
2265 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2267 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_UNSNAPSHOT
)) != NULL
)
2269 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2271 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_DELETE
)) != NULL
)
2273 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2275 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_FORMAT
)) != NULL
)
2277 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_Format
);
2279 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_LEAVEOUT
)) != NULL
)
2281 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_LeaveOut
);
2283 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_PUTAWAY
)) != NULL
)
2285 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_PutAway
);
2287 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_EMPTYTRASH
)) != NULL
)
2289 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, icon_men_EmptyTrash
);
2291 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_CLEAR
)) != NULL
)
2293 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, TRUE
);
2298 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_OPEN
)) != NULL
)
2300 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2302 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_RENAME
)) != NULL
)
2304 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2306 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_INFORMATION
)) != NULL
)
2308 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2310 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_SNAPSHOT
)) != NULL
)
2312 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2314 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_UNSNAPSHOT
)) != NULL
)
2316 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2318 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_DELETE
)) != NULL
)
2320 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2322 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_FORMAT
)) != NULL
)
2324 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2326 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_LEAVEOUT
)) != NULL
)
2328 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2330 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_PUTAWAY
)) != NULL
)
2332 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2334 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_ICON_EMPTYTRASH
)) != NULL
)
2336 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2338 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_CLEAR
)) != NULL
)
2340 SET(current_MenuItem
, MUIA_Menuitem_Enabled
, FALSE
);
2343 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_VIEW_ALL
)) != NULL
)
2345 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)!(current_DispFlags
& ICONLIST_DISP_SHOWINFO
));
2347 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_VIEW_HIDDEN
)) != NULL
)
2349 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)(current_DispFlags
& ICONLIST_DISP_SHOWHIDDEN
));
2351 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_NAME
)) != NULL
)
2353 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_NAME
));
2355 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_DATE
)) != NULL
)
2357 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_DATE
));
2359 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_SIZE
)) != NULL
)
2361 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_BY_SIZE
));
2363 if ((current_MenuItem
= FindMenuitem(current_Menustrip
, MEN_WINDOW_SORT_TYPE
)) != NULL
)
2365 SET(current_MenuItem
, MUIA_Menuitem_Checked
, (BOOL
)((current_SortFlags
& ICONLIST_SORT_MASK
) == ICONLIST_SORT_MASK
));
2370 ///Wanderer__HookFunc_UpdateMenuStatesFunc()
2374 ULONG
, Wanderer__HookFunc_UpdateMenuStatesFunc
,
2375 AROS_UFHA(struct Hook
*, hook
, A0
),
2376 AROS_UFHA(APTR
*, obj
, A2
),
2377 AROS_UFHA(APTR
, param
, A1
)
2381 HOOKPROTO(Wanderer__HookFunc_UpdateMenuStatesFunc
, ULONG
, struct dCopyStruct
*obj
, APTR param
)
2385 Object
*self
= ( Object
*)obj
;
2386 Object
*window
= *( Object
**)param
;
2387 Object
*iconlist
= NULL
;
2389 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc(self @ %p, window @ %p)\n", self
, window
));
2391 GET(window
, MUIA_IconWindow_IconList
, &iconlist
);
2393 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc: iconlist @ %p\n", iconlist
));
2395 Wanderer__Func_UpdateMenuStates(window
, iconlist
);
2397 D(bug("[Wanderer] Wanderer__HookFunc_UpdateMenuStatesFunc: Update Complete.\n"));
2402 /*** Methods ****************************************************************/
2404 Object
*Wanderer__OM_NEW(Class
*CLASS
, Object
*self
, struct opSet
*message
)
2406 D(bug("[Wanderer] Wanderer__OM_NEW()\n"));
2408 self
= (Object
*) DoSuperNewTags
2412 MUIA_Application_Title
, (IPTR
) "Wanderer",
2413 MUIA_Application_Base
, (IPTR
) "WANDERER",
2414 MUIA_Application_Version
, (IPTR
) VERSION
,
2415 MUIA_Application_Description
, (IPTR
) _(MSG_DESCRIPTION
),
2416 MUIA_Application_SingleTask
, TRUE
,
2418 TAG_MORE
, (IPTR
) message
->ops_AttrList
2423 SETUP_WANDERER_INST_DATA
;
2425 // ULONG updatedIcons;
2426 D(bug("[Wanderer] Wanderer__OM_NEW: SELF = %d, Private data @ %x\n", self
, data
));
2428 _WandererIntern_CLASS
= CLASS
;
2430 #if defined(WANDERER_DEFAULT_BACKDROP)
2431 data
->wd_Option_BackDropMode
= TRUE
;
2433 data
->wd_Option_BackDropMode
= FALSE
;
2436 /*-- Setup hooks structures ----------------------------------------*/
2438 _WandererIntern_hook_standard
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_StandardFunc
;
2439 _WandererIntern_hook_action
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_ActionFunc
;
2440 _WandererIntern_hook_backdrop
.h_Entry
= (HOOKFUNC
) Wanderer__HookFunc_BackdropFunc
;
2442 _WandererIntern_hook_standard
= &Hook_StandardFunc
;
2443 _WandererIntern_hook_action
= &Hook_ActionFunc
;
2444 _WandererIntern_hook_backdrop
= &Hook_BackdropFunc
;
2448 if ((data
->wd_CommandPort
= CreateMsgPort()) == NULL
)
2450 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
2454 if ((data
->wd_NotifyPort
= CreateMsgPort()) == NULL
)
2456 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
2460 RegisterWorkbench(data
->wd_CommandPort
);
2462 /* Setup command port handler --------------------------------------*/
2463 data
->wd_CommandIHN
.ihn_Signals
= 1UL << data
->wd_CommandPort
->mp_SigBit
;
2464 data
->wd_CommandIHN
.ihn_Object
= self
;
2465 data
->wd_CommandIHN
.ihn_Method
= MUIM_Wanderer_HandleCommand
;
2469 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_CommandIHN
2472 /* Setup timer handler ---------------------------------------------*/
2473 data
->wd_TimerIHN
.ihn_Flags
= MUIIHNF_TIMER
;
2474 data
->wd_TimerIHN
.ihn_Millis
= 3000;
2475 data
->wd_TimerIHN
.ihn_Object
= self
;
2476 data
->wd_TimerIHN
.ihn_Method
= MUIM_Wanderer_HandleTimer
;
2480 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_TimerIHN
2483 /* Setup filesystem notification handler ---------------------------*/
2484 data
->wd_NotifyIHN
.ihn_Signals
= 1UL << data
->wd_NotifyPort
->mp_SigBit
;
2485 data
->wd_NotifyIHN
.ihn_Object
= self
;
2486 data
->wd_NotifyIHN
.ihn_Method
= MUIM_Wanderer_HandleNotify
;
2490 self
, MUIM_Application_AddInputHandler
, (IPTR
) &data
->wd_NotifyIHN
2493 // All the following should be moved to InitWandererPrefs
2495 /* Setup notification on prefs file --------------------------------*/
2496 data
->wd_PrefsNotifyRequest
.nr_Name
= ExpandEnvName("ENV:SYS/Wanderer.prefs");
2497 data
->wd_PrefsNotifyRequest
.nr_Flags
= NRF_SEND_MESSAGE
;
2498 data
->wd_PrefsNotifyRequest
.nr_stuff
.nr_Msg
.nr_Port
= data
->wd_NotifyPort
;
2500 if (StartNotify(&data
->wd_PrefsNotifyRequest
))
2502 D(bug("[Wanderer] Wanderer__OM_NEW: Prefs-notification setup on '%s'\n", data
->wd_PrefsNotifyRequest
.nr_Name
));
2506 D(bug("[Wanderer] Wanderer__OM_NEW: FAILED to setup Prefs-notification!\n"));
2509 data
->wd_Prefs
= WandererPrefsObject
, End
; // FIXME: error handling
2511 data
->wd_Prefs
= NewObject(WandererPrefs_CLASS
->mcc_Class
, NULL
, TAG_DONE
); // FIXME: error handling
2516 D(bug("[Wanderer] Wanderer__OM_NEW: Prefs-Screentitle = '%s'\n",XGET(data
->wd_Prefs
, MUIA_IconWindowExt_ScreenTitle_String
)));
2517 data
->wd_PrefsIntern
= InitWandererPrefs();
2520 D(bug("[Wanderer] obj = %ld\n", self
));
2526 IPTR
Wanderer__OM_DISPOSE(Class
*CLASS
, Object
*self
, Msg message
)
2528 SETUP_WANDERER_INST_DATA
;
2530 if (data
->wd_CommandPort
)
2533 They only have been added if the creation of the msg port was
2536 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_TimerIHN
);
2537 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_CommandIHN
);
2538 DoMethod(self
, MUIM_Application_RemInputHandler
, (IPTR
) &data
->wd_NotifyIHN
);
2540 UnregisterWorkbench(data
->wd_CommandPort
);
2542 EndNotify(&data
->wd_PrefsNotifyRequest
);
2544 DeleteMsgPort(data
->wd_NotifyPort
);
2545 data
->wd_NotifyPort
= NULL
;
2547 DeleteMsgPort(data
->wd_CommandPort
);
2548 data
->wd_CommandPort
= NULL
;
2550 DisposeObject(data
->wd_Prefs
);
2551 data
->wd_Prefs
= NULL
;
2554 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2559 IPTR
Wanderer__OM_SET(Class
*CLASS
, Object
*self
, struct opSet
*message
)
2561 SETUP_WANDERER_INST_DATA
;
2562 struct TagItem
*tstate
= message
->ops_AttrList
, *tag
;
2564 while ((tag
= NextTagItem((TAGITEM
)&tstate
)) != NULL
)
2566 switch (tag
->ti_Tag
)
2568 case MUIA_Wanderer_Screen
:
2569 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_Screen = %p\n", tag
->ti_Data
));
2570 D(bug("[Wanderer] Wanderer__OM_SET: setting MUIA_Wanderer_Screen isnt yet handled!\n"));
2573 case MUIA_Wanderer_ActiveWindow
:
2574 data
->wd_ActiveWindow
= (Object
*) tag
->ti_Data
;
2575 D(bug("[Wanderer] Wanderer__OM_SET: MUIA_Wanderer_ActiveWindow = %p\n", tag
->ti_Data
));
2576 if (!(XGET(data
->wd_ActiveWindow
, MUIA_Window_Activate
)))
2578 NNSET(data
->wd_ActiveWindow
, MUIA_Window_Activate
, TRUE
);
2580 Object
*activatewin_Iconlist
= NULL
;
2582 GET(data
->wd_ActiveWindow
, MUIA_IconWindow_IconList
, &activatewin_Iconlist
);
2583 Wanderer__Func_UpdateMenuStates(data
->wd_ActiveWindow
, activatewin_Iconlist
);
2586 case MUIA_Application_Iconified
:
2587 /* Wanderer itself cannot be iconified,
2588 just hide, instead. */
2589 tag
->ti_Tag
= MUIA_ShowMe
;
2590 tag
->ti_Data
= !tag
->ti_Data
;
2595 return DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2600 IPTR
Wanderer__OM_GET(Class
*CLASS
, Object
*self
, struct opGet
*message
)
2602 SETUP_WANDERER_INST_DATA
;
2603 IPTR
*store
= message
->opg_Storage
;
2606 switch (message
->opg_AttrID
)
2608 case MUIA_Wanderer_Screen
:
2609 *store
= (IPTR
)data
->wd_Screen
;
2612 case MUIA_Wanderer_Prefs
:
2613 *store
= (IPTR
)data
->wd_Prefs
;
2616 case MUIA_Wanderer_ActiveWindow
:
2617 *store
= (IPTR
)data
->wd_ActiveWindow
;
2620 case MUIA_Wanderer_WorkbenchWindow
:
2621 *store
= (IPTR
)data
->wd_WorkbenchWindow
;
2624 case MUIA_Wanderer_FileSysNotifyPort
:
2625 *store
= (IPTR
)data
->wd_NotifyPort
;
2629 rv
= DoSuperMethodA(CLASS
, self
, (Msg
) message
);
2636 ///Wanderer__MUIM_Application_Execute()
2637 /* Main entry point for Wanderer Application Object */
2639 When the executable creates our object it calls zune
2640 to handle basic "control" ... which results in Zune
2641 calling this method ..
2643 IPTR Wanderer__MUIM_Application_Execute
2645 Class
*CLASS
, Object
*self
, Msg message
2648 SETUP_WANDERER_INST_DATA
;
2650 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute() ##\n[Wanderer] Wanderer__MUIM_Application_Execute: Creating 'Workbench' Window..\n"));
2652 data
->wd_WorkbenchWindow
= (Object
*) DoMethod
2654 self
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) NULL
2657 if (data
->wd_WorkbenchWindow
!= NULL
)
2659 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Workbench Window Obj @ %x\n", data
->wd_WorkbenchWindow
));
2663 D(bug("[Wanderer] Wanderer__MUIM_Application_Execute: Really handing control to Zune ..\n"));
2666 DoSuperMethodA(CLASS
, self
, message
);
2670 while (DoMethod(self
,MUIM_Application_NewInput
,&sigs
) != MUIV_Application_ReturnID_Quit
)
2674 sigs
= Wait(sigs
| SIGBREAKF_CTRL_C
);
2675 if (sigs
& SIGBREAKF_CTRL_C
) break;
2686 #warning "TODO: Report an error if we fail to create the Workbench's window ..."
2688 return RETURN_ERROR
;
2692 ///Wanderer__MUIM_Wanderer_HandleTimer()
2693 /*This function uses GetScreenTitle() function...*/
2695 IPTR Wanderer__MUIM_Wanderer_HandleTimer
2697 Class
*CLASS
, Object
*self
, Msg message
2700 SETUP_WANDERER_INST_DATA
;
2701 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2702 Object
*child
= NULL
;
2704 STRPTR scr_title
= GetUserScreenTitle(data
->wd_Prefs
);
2706 while ((child
= NextObject(&cstate
)))
2707 SET(child
, MUIA_Window_ScreenTitle
, (IPTR
) scr_title
);
2713 ///Wanderer__MUIM_Wanderer_HandleCommand()
2714 IPTR Wanderer__MUIM_Wanderer_HandleCommand
2716 Class
*CLASS
, Object
*self
, Msg message
2719 SETUP_WANDERER_INST_DATA
;
2720 struct WBHandlerMessage
*wbhm
= NULL
;
2721 struct List
*pub_screen_list
;
2722 struct PubScreenNode
*pub_screen_node
;
2723 WORD visitor_count
= 0;
2724 D(bug("[Wanderer] %s()\n", __PRETTY_FUNCTION__
));
2725 D(bug("[Wanderer] %s: Recieved signal at notification port\n", __PRETTY_FUNCTION__
));
2727 while ((wbhm
= WBHM(GetMsg(data
->wd_CommandPort
))) != NULL
)
2729 D(bug("[Wanderer] %s: Recieved message from handler, type = %ld\n", __PRETTY_FUNCTION__
, wbhm
->wbhm_Type
));
2731 switch (wbhm
->wbhm_Type
)
2733 case WBHM_TYPE_SHOW
:
2734 D(bug("[Wanderer] %s: WBHM_TYPE_SHOW\n", __PRETTY_FUNCTION__
));
2735 if ((data
->wd_Screen
= LockPubScreen(NULL
)) != NULL
)
2737 D(bug("[Wanderer] %s: Unlocking access to screen @ %x\n", __PRETTY_FUNCTION__
, data
->wd_Screen
));
2738 UnlockPubScreen(NULL
, data
->wd_Screen
);
2739 SET(self
, MUIA_ShowMe
, TRUE
);
2743 #warning "TODO: We need to handle the possiblity that we fail to lock the pubscreen..."
2744 D(bug("[Wanderer] %s: Couldnt Lock WB Screen!!\n", __PRETTY_FUNCTION__
));
2748 case WBHM_TYPE_HIDE
:
2749 D(bug("[Wanderer] %s: WBHM_TYPE_HIDE\n", __PRETTY_FUNCTION__
));
2750 pub_screen_list
= LockPubScreenList();
2753 ForeachNode (pub_screen_list
, pub_screen_node
)
2755 Foreach_Node(pub_screen_list
, pub_screen_node
);
2758 if (pub_screen_node
->psn_Screen
== data
->wd_Screen
)
2759 visitor_count
= pub_screen_node
->psn_VisitorCount
;
2761 UnlockPubScreenList();
2762 if (visitor_count
== 0)
2763 SET(self
, MUIA_ShowMe
, FALSE
);
2766 case WBHM_TYPE_UPDATE
:
2767 D(bug("[Wanderer] %s: WBHM_TYPE_UPDATE\n", __PRETTY_FUNCTION__
));
2769 CONST_STRPTR name
= wbhm
->wbhm_Data
.Update
.Name
;
2772 switch (wbhm
->wbhm_Data
.Update
.Type
)
2777 length
= strlen(name
);
2781 length
= PathPart(name
) - name
;
2785 D(bug("[Wanderer] %s: name = %s, length = %ld\n", __PRETTY_FUNCTION__
, name
, length
));
2788 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2789 Object
*child
= NULL
;
2791 while ((child
= NextObject(&cstate
)))
2793 if (XGET(child
, MUIA_UserData
))
2795 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
2799 child_drawer
!= NULL
2800 && strncmp(name
, child_drawer
, length
) == 0
2801 && strlen(child_drawer
) == length
2804 Object
*iconlist
= (Object
*) XGET(child
, MUIA_IconWindow_IconList
);
2806 D(bug("[Wanderer] %s: Drawer found: %s!\n", __PRETTY_FUNCTION__
, child_drawer
));
2808 if (iconlist
!= NULL
)
2810 DoMethod ( iconlist
, MUIM_IconList_Update
);
2820 case WBHM_TYPE_OPEN
:
2821 D(bug("[Wanderer] %s: WBHM_TYPE_OPEN\n", __PRETTY_FUNCTION__
));
2824 Object
*cstate
= (Object
*)(((struct List
*)XGET(self
, MUIA_Application_WindowList
))->lh_Head
);
2826 CONST_STRPTR buf
= wbhm
->wbhm_Data
.Open
.Name
;
2828 while ((child
= NextObject(&cstate
)))
2830 if (XGET(child
, MUIA_UserData
))
2832 STRPTR child_drawer
= (STRPTR
)XGET(child
, MUIA_IconWindow_Location
);
2833 if (child_drawer
&& !Stricmp(buf
,child_drawer
))
2835 int is_open
= XGET(child
, MUIA_Window_Open
);
2837 DoMethod(child
, MUIM_IconWindow_Open
);
2840 DoMethod(child
, MUIM_Window_ToFront
);
2841 SET(child
, MUIA_Window_Activate
, TRUE
);
2850 _WandererIntern_AppObj
, MUIM_Wanderer_CreateDrawerWindow
, (IPTR
) buf
2856 ReplyMsg((struct Message
*) wbhm
);
2863 ///Wanderer__MUIM_Wanderer_HandleNotify()
2864 IPTR Wanderer__MUIM_Wanderer_HandleNotify
2866 Class
*CLASS
, Object
*self
, Msg message
2869 SETUP_WANDERER_INST_DATA
;
2870 struct Message
*plainMessage
= NULL
;
2872 while ((plainMessage
= GetMsg(data
->wd_NotifyPort
)) != NULL
)
2874 struct NotifyMessage
*notifyMessage
= (struct NotifyMessage
*) plainMessage
;
2875 IPTR notifyMessage_UserData
= notifyMessage
->nm_NReq
->nr_UserData
;
2876 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
));
2878 if ((notifyMessage_UserData
==(IPTR
) NULL
) && (strcmp(notifyMessage
->nm_NReq
->nr_Name
, data
->wd_PrefsNotifyRequest
.nr_Name
) == 0))
2880 /* reload prefs file */
2881 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: Wanderer Prefs-File Changed .. Reloading\n"));
2883 DoMethod(data
->wd_Prefs
, MUIM_WandererPrefs_Reload
);
2885 else if (notifyMessage_UserData
!= (IPTR
) NULL
)
2887 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_HandleNotify: Drawer Window contents changed .. Updating\n"));
2888 DoMethod(notifyMessage_UserData
, MUIM_IconList_Update
);
2891 ReplyMsg((struct Message
*)notifyMessage
);
2898 ///Wanderer__Func_CreateWandererIntuitionMenu()
2899 /* Some differences here between volumes and subwindows */
2900 Object
* Wanderer__Func_CreateWandererIntuitionMenu( BOOL isRoot
, BOOL isBackdrop
)
2902 Object
*_NewWandIntMenu__menustrip
= NULL
;
2903 IPTR _NewWandIntMenu__OPTION_BACKDROP
= CHECKIT
|MENUTOGGLE
;
2904 IPTR _NewWandIntMenu__OPTION_SHOWALL
= CHECKIT
|MENUTOGGLE
;
2908 _NewWandIntMenu__OPTION_BACKDROP
|= CHECKED
;
2913 struct NewMenu nm
[] = {
2914 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
2915 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
2916 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
2918 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
2919 #if defined(__AROS__)
2921 {NM_SUB
, _(MSG_MEN_ABOUT
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_ABOUT
},
2922 {NM_SUB
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_GUISETTINGS
},
2924 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
2925 {NM_ITEM
, _(MSG_MEN_SHUTDOWN
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_SHUTDOWN
},
2926 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, 0},
2927 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
2928 {NM_ITEM
, NM_BARLABEL
},
2929 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
2930 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
2931 {NM_ITEM
, NM_BARLABEL
},
2932 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
2933 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
2934 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
2935 {NM_ITEM
, NM_BARLABEL
},
2936 {NM_ITEM
, _(MSG_MEN_VIEW
)},
2937 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
, 8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
2938 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
, 4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
2939 {NM_SUB
, NM_BARLABEL
},
2940 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
2941 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
2942 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
2943 {NM_SUB
, NM_BARLABEL
},
2944 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|MENUTOGGLE
, 8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
2945 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
2946 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
2947 {NM_SUB
, _(MSG_MEN_BYTYPE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+16, (APTR
) MEN_WINDOW_SORT_TYPE
},
2948 {NM_SUB
, NM_BARLABEL
},
2949 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
2950 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
2951 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
2952 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, 0},
2953 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), ITEMENABLED
, 0, (APTR
) MEN_ICON_OPEN
},
2954 //{NM_ITEM, "Close","C" },
2955 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), ITEMENABLED
, 0, (APTR
) MEN_ICON_RENAME
},
2956 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), ITEMENABLED
, 0, (APTR
) MEN_ICON_INFORMATION
},
2957 {NM_ITEM
, _(MSG_SNAPSHOT
), "S", ITEMENABLED
, 0, (APTR
) MEN_ICON_SNAPSHOT
},
2958 {NM_ITEM
, _(MSG_UNSNAPSHOT
), "U", ITEMENABLED
, 0, (APTR
) MEN_ICON_UNSNAPSHOT
},
2959 {NM_ITEM
, _(MSG_LEAVE_OUT
), "L", ITEMENABLED
, 0, (APTR
) MEN_ICON_LEAVEOUT
},
2960 {NM_ITEM
, _(MSG_PUT_AWAY
), "P", ITEMENABLED
, 0, (APTR
) MEN_ICON_PUTAWAY
},
2961 {NM_ITEM
, NM_BARLABEL
},
2962 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_DELETE
},
2963 {NM_ITEM
, _(MSG_MEN_FORMAT
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_FORMAT
},
2964 {NM_ITEM
, _(MSG_EMPTY_TRASH
), NULL
, ITEMENABLED
},
2965 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, 0},
2966 //{NM_ITEM, "ResetWanderer" },
2969 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
2973 struct NewMenu nm
[] = {
2974 {NM_TITLE
, _(MSG_MEN_WANDERER
)},
2975 {NM_ITEM
, _(MSG_MEN_BACKDROP
),_(MSG_MEN_SC_BACKDROP
), _NewWandIntMenu__OPTION_BACKDROP
, 0, (APTR
) MEN_WANDERER_BACKDROP
},
2976 {NM_ITEM
, _(MSG_MEN_EXECUTE
), _(MSG_MEN_SC_EXECUTE
) , 0 , 0, (APTR
) MEN_WANDERER_EXECUTE
},
2978 {NM_ITEM
, _(MSG_MEN_SHELL
), _(MSG_MEN_SC_SHELL
) , 0 , 0, (APTR
) MEN_WANDERER_SHELL
},
2979 #if defined(__AROS__)
2981 {NM_SUB
, _(MSG_MEN_ABOUT
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_ABOUT
},
2982 {NM_SUB
, _(MSG_MEN_GUISET
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_AROS_GUISETTINGS
},
2984 {NM_ITEM
, _(MSG_MEN_QUIT
) , _(MSG_MEN_SC_QUIT
) , 0 , 0, (APTR
) MEN_WANDERER_QUIT
},
2985 {NM_ITEM
, _(MSG_MEN_SHUTDOWN
), NULL
, 0 , 0, (APTR
) MEN_WANDERER_SHUTDOWN
},
2987 {NM_TITLE
, _(MSG_MEN_WINDOW
), NULL
, 0},
2989 {NM_ITEM
, _(MSG_MEN_NEWDRAW
), _(MSG_MEN_SC_NEWDRAW
) , 0 , 0, (APTR
) MEN_WINDOW_NEW_DRAWER
},
2990 {NM_ITEM
, _(MSG_MEN_OPENPAR
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_OPEN_PARENT
},
2991 {NM_ITEM
, _(MSG_MEN_CLOSE
), _(MSG_MEN_SC_CLOSE
) , 0 , 0, (APTR
) MEN_WINDOW_CLOSE
},
2992 {NM_ITEM
, _(MSG_MEN_UPDATE
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_UPDATE
},
2993 {NM_ITEM
, NM_BARLABEL
},
2994 {NM_ITEM
, _(MSG_MEN_CONTENTS
), _(MSG_MEN_SC_CONTENTS
), 0 , 0, (APTR
) MEN_WINDOW_SELECT
},
2995 {NM_ITEM
, _(MSG_MEN_CLRSEL
), _(MSG_MEN_SC_CLRSEL
) , 0 , 0, (APTR
) MEN_WINDOW_CLEAR
},
2996 {NM_ITEM
, NM_BARLABEL
},
2997 {NM_ITEM
, _(MSG_MEN_SNAPSHT
) },
2998 {NM_SUB
, _(MSG_MEN_WINDOW
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_WIN
},
2999 {NM_SUB
, _(MSG_MEN_ALL
), NULL
, 0 , 0, (APTR
) MEN_WINDOW_SNAP_ALL
},
3000 {NM_ITEM
, NM_BARLABEL
},
3001 {NM_ITEM
, _(MSG_MEN_VIEW
)},
3002 {NM_SUB
, _(MSG_MEN_ICVIEW
), NULL
, CHECKIT
|CHECKED
,8+16+32, (APTR
) MEN_WINDOW_VIEW_ICON
},
3003 {NM_SUB
, _(MSG_MEN_DCVIEW
), NULL
, CHECKIT
,4+16+32, (APTR
) MEN_WINDOW_VIEW_DETAIL
},
3004 {NM_SUB
, NM_BARLABEL
},
3005 {NM_SUB
, _(MSG_MEN_ALLFIL
), NULL
, _NewWandIntMenu__OPTION_SHOWALL
, 0, (APTR
) MEN_WINDOW_VIEW_ALL
},
3006 {NM_ITEM
, _(MSG_MEN_SORTIC
)},
3007 {NM_SUB
, _(MSG_MEN_CLNUP
), _(MSG_MEN_SC_CLNUP
) , 0 , 0, (APTR
) MEN_WINDOW_SORT_NOW
},
3008 {NM_SUB
, NM_BARLABEL
},
3009 {NM_SUB
, _(MSG_MEN_BYNAME
), NULL
, CHECKIT
|MENUTOGGLE
, 8+16+32, (APTR
) MEN_WINDOW_SORT_NAME
},
3010 {NM_SUB
, _(MSG_MEN_BYDATE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+16+32, (APTR
) MEN_WINDOW_SORT_DATE
},
3011 {NM_SUB
, _(MSG_MEN_BYSIZE
), NULL
, CHECKIT
|MENUTOGGLE
, 4+8+32, (APTR
) MEN_WINDOW_SORT_SIZE
},
3012 {NM_SUB
, _(MSG_MEN_BYTYPE
), NULL
, CHECKIT
|MENUTOGGLE
|ITEMENABLED
, 4+8+16, (APTR
) MEN_WINDOW_SORT_TYPE
},
3013 {NM_SUB
, NM_BARLABEL
},
3014 {NM_SUB
, _(MSG_MEN_REVERSE
), NULL
, CHECKIT
|MENUTOGGLE
, 0, (APTR
) MEN_WINDOW_SORT_REVERSE
},
3015 {NM_SUB
, _(MSG_MEN_DRWFRST
), NULL
, CHECKIT
|MENUTOGGLE
|CHECKED
, 0, (APTR
) MEN_WINDOW_SORT_TOPDRAWERS
},
3016 //{NM_SUB, "Group Icons", NULL, CHECKIT|MENUTOGGLE|CHECKED, 0, (APTR) MEN_WINDOW_SORT_GROUP},
3017 {NM_TITLE
, _(MSG_MEN_ICON
), NULL
, 0},
3018 {NM_ITEM
, _(MSG_MEN_OPEN
), _(MSG_MEN_SC_OPEN
), ITEMENABLED
, 0, (APTR
) MEN_ICON_OPEN
},
3019 // {NM_ITEM, "Close","C" },
3020 {NM_ITEM
, _(MSG_MEN_RENAME
), _(MSG_MEN_SC_RENAME
), ITEMENABLED
, 0, (APTR
) MEN_ICON_RENAME
},
3021 {NM_ITEM
, _(MSG_MEN_INFO
), _(MSG_MEN_SC_INFO
), ITEMENABLED
, 0, (APTR
) MEN_ICON_INFORMATION
},
3022 {NM_ITEM
, _(MSG_SNAPSHOT
), "S", ITEMENABLED
, 0, (APTR
) MEN_ICON_SNAPSHOT
},
3023 {NM_ITEM
, _(MSG_UNSNAPSHOT
), "U", ITEMENABLED
, 0, (APTR
) MEN_ICON_UNSNAPSHOT
},
3024 {NM_ITEM
, _(MSG_LEAVE_OUT
), "L", ITEMENABLED
, 0, (APTR
) MEN_ICON_LEAVEOUT
},
3025 {NM_ITEM
, _(MSG_PUT_AWAY
), "P", ITEMENABLED
, 0, (APTR
) MEN_ICON_PUTAWAY
},
3026 {NM_ITEM
, NM_BARLABEL
},
3027 {NM_ITEM
, _(MSG_MEN_DELETE
), NULL
, ITEMENABLED
, 0, (APTR
) MEN_ICON_DELETE
},
3028 {NM_ITEM
, _(MSG_MEN_FORMAT
), NULL
, ITEMENABLED
},
3029 {NM_ITEM
, _(MSG_EMPTY_TRASH
),NULL
, ITEMENABLED
},
3031 {NM_TITLE
, _(MSG_MEN_TOOLS
), NULL
, 0},
3032 // {NM_ITEM, "ResetWanderer" },
3035 _NewWandIntMenu__menustrip
= MUI_MakeObject(MUIO_MenustripNM
, nm
, (IPTR
) NULL
);
3037 return _NewWandIntMenu__menustrip
;
3041 ///Wanderer__MUIM_Wanderer_CreateDrawerWindow()
3042 Object
*Wanderer__MUIM_Wanderer_CreateDrawerWindow
3044 Class
*CLASS
, Object
*self
,
3045 struct MUIP_Wanderer_CreateDrawerWindow
*message
3048 SETUP_WANDERER_INST_DATA
;
3050 Object
*window
= NULL
;
3051 BOOL isWorkbenchWindow
= FALSE
;
3052 BOOL useBackdrop
= FALSE
;
3054 IPTR TAG_IconWindow_Drawer
;
3056 Object
*_NewWandDrawerMenu__menustrip
;
3058 Object
*window_IconList
= NULL
;
3060 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow()\n"));
3062 if ((isWorkbenchWindow
= (message
->drawer
== NULL
? TRUE
: FALSE
)))
3064 useBackdrop
= data
->wd_Option_BackDropMode
;
3067 hasToolbar
= XGET(data
->wd_Prefs
, MUIA_IconWindowExt_Toolbar_Enabled
);
3069 TAG_IconWindow_Drawer
= isWorkbenchWindow
? TAG_IGNORE
: MUIA_IconWindow_Location
;
3071 useFont
= (IPTR
)NULL
;
3073 data
->wd_Screen
= LockPubScreen(NULL
);
3075 if(data
->wd_Screen
== NULL
)
3077 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Couldn't lock screen!\n"));
3078 CoerceMethod(CLASS
, self
, OM_DISPOSE
);
3081 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Using Screen @ %x\n", data
->wd_Screen
));
3083 if (data
->wd_PrefsIntern
)
3085 useFont
= (IPTR
)((struct WandererInternalPrefsData
*)data
->wd_PrefsIntern
)->WIPD_IconFont
;
3088 _NewWandDrawerMenu__menustrip
= Wanderer__Func_CreateWandererIntuitionMenu (isWorkbenchWindow
, useBackdrop
);
3090 //D(bug("1\n\n")); Delay(100);
3091 /* Create a new icon drawer window with the correct drawer being set */
3094 window
= IconWindowObject
,
3096 MUIA_Wanderer_Prefs
, data
->wd_Prefs
,
3097 MUIA_Wanderer_Screen
, data
->wd_Screen
,
3098 MUIA_Window_ScreenTitle
, GetUserScreenTitle(data
->wd_Prefs
),
3099 MUIA_Window_Menustrip
, (IPTR
) _NewWandDrawerMenu__menustrip
,
3100 TAG_IconWindow_Drawer
, (IPTR
) message
->drawer
,
3101 MUIA_IconWindow_Font
, useFont
,
3102 MUIA_IconWindow_ActionHook
, (IPTR
) &_WandererIntern_hook_action
,
3103 MUIA_IconWindow_IsRoot
, isWorkbenchWindow
? TRUE
: FALSE
,
3104 isWorkbenchWindow
? MUIA_IconWindow_IsBackdrop
: TAG_IGNORE
, useBackdrop
,
3105 isWorkbenchWindow
? TAG_IGNORE
: MUIA_Wanderer_FileSysNotifyPort
, data
->wd_NotifyPort
,
3106 MUIA_Window_IsSubWindow
, isWorkbenchWindow
? FALSE
: TRUE
,
3107 MUIA_IconWindowExt_Toolbar_Enabled
, hasToolbar
? TRUE
: FALSE
,
3110 window
= NewObject(IconWindow_CLASS
->mcc_Class
, NULL
,
3112 MUIA_Wanderer_Prefs
, data
->wd_Prefs
,
3113 MUIA_Wanderer_Screen
, data
->wd_Screen
,
3114 MUIA_Window_ScreenTitle
, GetUserScreenTitle(data
->wd_Prefs
),
3115 MUIA_Window_Menustrip
, (IPTR
) _NewWandDrawerMenu__menustrip
,
3116 TAG_IconWindow_Drawer
, (IPTR
) message
->drawer
,
3117 MUIA_IconWindow_Font
, useFont
,
3118 MUIA_IconWindow_ActionHook
, (IPTR
) &_WandererIntern_hook_action
,
3119 MUIA_IconWindow_IsRoot
, isWorkbenchWindow
? TRUE
: FALSE
,
3120 isWorkbenchWindow
? MUIA_IconWindow_IsBackdrop
: TAG_IGNORE
, useBackdrop
,
3121 isWorkbenchWindow
? TAG_IGNORE
: MUIA_Wanderer_FileSysNotifyPort
, data
->wd_NotifyPort
,
3122 MUIA_Window_IsSubWindow
, isWorkbenchWindow
? FALSE
: TRUE
,
3123 MUIA_IconWindowExt_Toolbar_Enabled
, hasToolbar
? TRUE
: FALSE
,
3126 //D(bug("2\n\n")); Delay(100);
3127 if (data
->wd_Screen
)
3129 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: Unlocking access to screen @ %x\n", data
->wd_Screen
));
3130 UnlockPubScreen(NULL
, data
->wd_Screen
);
3135 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: window != NULL\n"));
3136 /* Get the drawer path back so we can use it also outside this function */
3138 BOOL freeDrwStr
= FALSE
;
3140 if (!isWorkbenchWindow
) drw
= (STRPTR
) XGET(window
, MUIA_IconWindow_Location
);
3143 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: call AllocVec()\n"));
3144 drw
= AllocVec ( 5, MEMF_CLEAR
);
3145 sprintf ( drw
, "RAM:" );
3149 if (isWorkbenchWindow
)
3151 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: isWorkbenchWindow\n"));
3154 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
3155 (IPTR
)self
, 3, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_standard
, (IPTR
)wanderer_menufunc_wanderer_quit
3162 window
, MUIM_Notify
, MUIA_Window_CloseRequest
, TRUE
,
3163 (IPTR
)_app(self
), 4, MUIM_Application_PushMethod
, (IPTR
)window
, 1, MUIM_IconWindow_Remove
3167 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: call get with MUIA_IconWindow_IconList\n"));
3168 GET(window
, MUIA_IconWindow_IconList
, &window_IconList
);
3170 D(bug("[Wanderer] Wanderer__MUIM_Wanderer_CreateDrawerWindow: IconWindows IconList @ %x\n", window_IconList
));
3172 if (window_IconList
!= NULL
)
3174 struct Hook
*_wand_UpdateMenuStates_hook
= NULL
;
3176 if ((_wand_UpdateMenuStates_hook
= AllocMem(sizeof(struct Hook
), MEMF_CLEAR
|MEMF_PUBLIC
)) != NULL
)
3178 _wand_UpdateMenuStates_hook
->h_Entry
= ( HOOKFUNC
)Wanderer__HookFunc_UpdateMenuStatesFunc
;
3181 window_IconList
, MUIM_Notify
, MUIA_IconList_SelectionChanged
, MUIV_EveryTime
,
3183 MUIM_CallHook
, _wand_UpdateMenuStates_hook
, (IPTR
)window
3186 Wanderer__Func_UpdateMenuStates(window
, window_IconList
);
3188 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: setup notifications\n"));
3191 window
, MUIM_Notify
, MUIA_Window_Activate
, TRUE
,
3192 (IPTR
)_app(self
), 3, MUIM_Set
, MUIA_Wanderer_ActiveWindow
, (IPTR
) window
3198 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
3199 (IPTR
)_app(self
), 5, MUIM_Application_PushMethod
, (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
)&_WandererIntern_hook_backdrop
3204 window
, MUIM_Notify
, MUIA_IconWindow_IsBackdrop
, MUIV_EveryTime
,
3205 (IPTR
)_app(self
), 2, MUIM_CallHook
, (IPTR
) &_WandererIntern_hook_backdrop
3208 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: execute all notifies\n"));
3209 /* If "Execute Command" entry is clicked open the execute window */
3210 DoAllMenuNotifies(_NewWandDrawerMenu__menustrip
, drw
);
3212 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: add window to app\n"));
3213 /* Add the window to the application */
3215 DoMethod(_app(self
), OM_ADDMEMBER
, (IPTR
) window
);
3217 DoMethod(self
, OM_ADDMEMBER
, (IPTR
) window
);
3219 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: open window\n"));
3220 /* And now open it */
3221 DoMethod(window
, MUIM_IconWindow_Open
);
3222 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: clean up memory\n"));
3223 /* Clean up ram string */
3224 if ( freeDrwStr
&& drw
) FreeVec ( drw
);
3226 D(bug("Wanderer__MUIM_Wanderer_CreateDrawerWindow: exit\n"));
3230 /*** Setup ******************************************************************/
3233 Wanderer
, NULL
, MUIC_Application
, NULL
,
3234 OM_NEW
, struct opSet
*,
3236 OM_SET
, struct opSet
*,
3237 OM_GET
, struct opGet
*,
3238 MUIM_Application_Execute
, Msg
,
3239 MUIM_Wanderer_HandleTimer
, Msg
,
3240 MUIM_Wanderer_HandleCommand
, Msg
,
3241 MUIM_Wanderer_HandleNotify
, Msg
,
3242 MUIM_Wanderer_CreateDrawerWindow
, struct MUIP_Wanderer_CreateDrawerWindow
*