add casts to zune macros to silence some warnings
[tangerine.git] / workbench / system / Wanderer / iconwindow.c
blob2f3451eadff95a7631882e453bdc56506bea48f6
1 /*
2 Copyright 2004-2006, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define MUIMASTER_YES_INLINE_STDARG
8 #define ICONWINDOW_OPTION_NOSEARCHBUTTON
10 #define DEBUG 0
11 #include <aros/debug.h>
13 #include <exec/types.h>
14 #include <libraries/mui.h>
15 #include <zune/customclasses.h>
17 #include <proto/utility.h>
18 #include <proto/intuition.h>
19 #include <proto/graphics.h>
20 #include <proto/muimaster.h>
21 #include <proto/exec.h>
22 #include <proto/datatypes.h>
24 #include <dos/dos.h>
25 #include <proto/dos.h>
27 #include <stdio.h>
28 #include <string.h>
30 #include <intuition/screens.h>
31 #include <datatypes/pictureclass.h>
32 #include <clib/macros.h>
33 #include <clib/alib_protos.h>
35 #include <prefs/wanderer.h>
37 #include "../../libs/muimaster/classes/iconlist.h"
38 #include "../../libs/muimaster/classes/iconlist_attributes.h"
39 #include "wanderer.h"
40 #include "wandererprefs.h"
42 #include "iconwindow.h"
43 #include "iconwindow_attributes.h"
44 #include "iconwindowcontents.h"
45 #include "iconwindowbackfill.h"
47 static char __intern_wintitle_wanderer[] = "Wanderer";
49 /*** Private Global Data *********************************************************/
51 static struct List iconwindow_BackFillNodes;
52 struct IconWindow_BackFill_Descriptor *iconwindow_BackFill_Active = NULL;
54 /*** Hook functions *********************************************************/
56 AROS_UFH3(
57 void, IconWindow__HookFunc_ToolbarLocationStringFunc,
58 AROS_UFHA(struct Hook *, hook, A0),
59 AROS_UFHA(APTR *, obj, A2),
60 AROS_UFHA(APTR, param, A1)
63 AROS_USERFUNC_INIT
65 /* Get data */
66 Object *self = ( Object *)obj;
67 Class *CLASS = *( Class **)param;
68 STRPTR str = NULL;
69 BPTR fp = NULL;
70 struct FileInfoBlock *fib;
72 #warning "stegerg: doesn't allocate fib with AllocDOSObject"
74 SETUP_ICONWINDOW_INST_DATA;
76 /* Only change dir if it is a valid directory/volume */
77 GET(data->iwd_Toolbar_LocationStringObj, MUIA_String_Contents, &str);
79 #warning "TODO: Signal that it is a wrong path"
80 /* so that the user understands (here where we abort with return) */
82 fib = AllocDosObject(DOS_FIB, NULL);
83 if (!fib)
84 return;
86 if (!(fp = Lock(str, ACCESS_READ)))
88 FreeDosObject(DOS_FIB, fib);
89 return;
92 if (!(Examine(fp, fib)))
94 UnLock (fp );
95 FreeDosObject(DOS_FIB, fib);
96 return;
99 /* Change directory! */
100 if (fib->fib_DirEntryType >= 0)
101 SET(self, MUIA_IconWindow_Location, (IPTR)str);
103 UnLock(fp);
105 FreeDosObject(DOS_FIB, fib);
107 AROS_USERFUNC_EXIT
111 AROS_UFH3(
112 void, IconWindow__HookFunc_PrefsUpdatedFunc,
113 AROS_UFHA(struct Hook *, hook, A0),
114 AROS_UFHA(APTR *, obj, A2),
115 AROS_UFHA(APTR, param, A1)
118 AROS_USERFUNC_INIT
120 /* Get our private data */
121 Object *self = ( Object *)obj;
122 Class *CLASS = *( Class **)param;
124 SETUP_ICONWINDOW_INST_DATA;
126 D(bug("[IconWindow] IconWindow__HookFunc_PrefsUpdatedFunc()\n"));
128 IPTR changed_state = 0;
129 GET(self, MUIA_IconWindow_Changed, &changed_state);
131 if ((changed_state) && (data->iwd_IconListObj))
133 D(bug("[IconWindow] IconWindow__HookFunc_PrefsUpdatedFunc: Window contents have changed .. updating display ..\n"));
134 DoMethod(data->iwd_IconListObj, MUIM_IconList_Update);
135 SET(self, MUIA_IconWindow_Changed, FALSE);
138 AROS_USERFUNC_EXIT
142 AROS_UFH3(
143 void, IconWindow__HookFunc_ProcessBackgroundFunc,
144 AROS_UFHA(struct Hook *, hook, A0),
145 AROS_UFHA(APTR *, obj, A2),
146 AROS_UFHA(APTR, param, A1)
149 AROS_USERFUNC_INIT
151 /* Get our private data */
152 Object *self = ( Object *)obj,
153 *prefs = NULL;
154 Class *CLASS = *( Class **)param;
156 SETUP_ICONWINDOW_INST_DATA;
158 D(bug("[IconWindow] IconWindow__HookFunc_ProcessBackgroundFunc()\n"));
160 DoMethod(self, MUIM_IconWindow_BackFill_ProcessBackground, data->iwd_BackFillInfo, data->iwd_RootViewObj);
162 GET(_app(self), MUIA_Wanderer_Prefs, &prefs);
164 if (prefs)
166 BOOL options_changed = FALSE;
167 IPTR prefs_Processing = 0;
169 GET(prefs, MUIA_WandererPrefs_Processing, &prefs_Processing);
170 if (!prefs_Processing)
172 #warning "TODO: We arent in prefs-processing so cause an update!"
176 AROS_USERFUNC_EXIT
179 AROS_UFH3(
180 void, IconWindow__HookFunc_WandererBackFillFunc,
181 AROS_UFHA(struct Hook *, Hook, A0),
182 AROS_UFHA(struct RastPort *, RP, A2),
183 AROS_UFHA(struct BackFillMsg *, BFM, A1)
186 AROS_USERFUNC_INIT
188 D(bug("[IconWindow] IconWindow__HookFunc_WandererBackFillFunc()\n"));
189 struct IconWindow_BackFillHookData *HookData = NULL;
191 if ((HookData = Hook->h_Data) && (iconwindow_BackFill_Active != NULL))
193 Class *CLASS = HookData->bfhd_IWClass;
194 Object *self = HookData->bfhd_IWObject;
196 SETUP_ICONWINDOW_INST_DATA;
198 struct RastPort *DrawBackGround_RastPort = _rp(data->iwd_RootViewObj);
199 struct IconWindowBackFillMsg DrawBackGround_BackFillMsg;
201 DrawBackGround_BackFillMsg.Layer = DrawBackGround_RastPort->Layer;
203 DrawBackGround_BackFillMsg.AreaBounds.MinX = _mleft(data->iwd_RootViewObj);
204 DrawBackGround_BackFillMsg.AreaBounds.MinY = _mtop(data->iwd_RootViewObj);
205 DrawBackGround_BackFillMsg.AreaBounds.MaxX = _mleft(data->iwd_RootViewObj) + _mwidth(data->iwd_RootViewObj) - 1;
206 DrawBackGround_BackFillMsg.AreaBounds.MaxY = _mtop(data->iwd_RootViewObj) + _mheight(data->iwd_RootViewObj) - 1;
208 DrawBackGround_BackFillMsg.DrawBounds.MinX = BFM->Bounds.MinX;
209 DrawBackGround_BackFillMsg.DrawBounds.MinY = BFM->Bounds.MinY;
210 DrawBackGround_BackFillMsg.DrawBounds.MaxX = BFM->Bounds.MaxX;
211 DrawBackGround_BackFillMsg.DrawBounds.MaxY = BFM->Bounds.MaxY;
213 /* Offset into source image (ala scroll bar position) */
214 DrawBackGround_BackFillMsg.OffsetX = BFM->OffsetX;
215 DrawBackGround_BackFillMsg.OffsetY = BFM->OffsetY;
216 return DoMethod(self, MUIM_IconWindow_BackFill_DrawBackground, data->iwd_BackFillInfo, &DrawBackGround_BackFillMsg, DrawBackGround_RastPort);
219 AROS_USERFUNC_EXIT
222 /*** Methods ****************************************************************/
223 void IconWindow__SetupToolbar(Class *CLASS, Object *self, Object *prefs)
225 SETUP_ICONWINDOW_INST_DATA;
227 D(bug("[IconWindow] IconWindow__SetupToolbar()\n"));
229 Object *strObj = NULL,
230 *bt_dirup = NULL,
231 *bt_search = NULL;
233 D(bug("[IconWindow] IconWindow__SetupToolbar: App PrefsObj @ %x\n", prefs));
235 if (prefs != NULL)
237 data->iwd_Toolbar_PrefsNotificationObject = DoMethod(prefs,
238 MUIM_WandererPrefs_ViewSettings_GetNotifyObject,
239 "Toolbar");
240 //Set up our prefs notification handlers ..
244 /* Create the "ToolBar" panel object .. */
245 Object *toolbarPanel = VGroup,
246 InnerSpacing(0, 0),
247 MUIA_Frame, MUIV_Frame_None,
248 Child, (IPTR)HGroup,
249 InnerSpacing(4, 4),
250 MUIA_Frame, MUIV_Frame_None,
251 MUIA_Weight, 100,
252 Child, (IPTR)HGroup,
253 InnerSpacing(0, 0),
254 MUIA_Weight, 100,
255 Child, (IPTR)( strObj = StringObject,
256 MUIA_String_Contents, (IPTR)"",
257 MUIA_CycleChain, 1,
258 MUIA_Frame, MUIV_Frame_String,
259 End ),
260 End,
261 Child, (IPTR)HGroup,
262 InnerSpacing(0, 0),
263 MUIA_HorizWeight, 0,
264 MUIA_VertWeight, 100,
265 Child, (IPTR) (bt_dirup = ImageButton("", "THEME:Images/Gadgets/Prefs/Revert")),
266 #if !defined(ICONWINDOW_OPTION_NOSEARCHBUTTON)
267 Child, (IPTR) (bt_search = ImageButton("", "THEME:Images/Gadgets/Prefs/Test")),
268 #endif
269 End,
270 End,
271 Child, (IPTR)HGroup,
272 InnerSpacing(0, 0),
273 MUIA_Group_Spacing, 0,
274 MUIA_FixHeight, 1,
275 MUIA_Frame, MUIV_Frame_None,
276 MUIA_Background, MUII_SHADOW,
277 Child, (IPTR)RectangleObject,
278 MUIA_Frame, MUIV_Frame_None,
279 End,
280 End,
281 End;
283 /* Got a toolbarpanel? setup notifies and other values are
284 copied to the data of the object */
285 if ( toolbarPanel != NULL )
287 SET(bt_dirup, MUIA_Background, XGET( toolbarPanel, MUIA_Background ) );
288 SET(bt_dirup, MUIA_CycleChain, 1);
289 SET(bt_dirup, MUIA_Frame, MUIV_Frame_None );
290 #if !defined(ICONWINDOW_OPTION_NOSEARCHBUTTON)
291 SET(bt_search, MUIA_Background, XGET( toolbarPanel, MUIA_Background ) );
292 SET(bt_search, MUIA_CycleChain, 1);
293 SET(bt_search, MUIA_Frame, MUIV_Frame_None );
294 #endif
296 if (DoMethod( data->iwd_ExtensionGroupObj, MUIM_Group_InitChange ))
298 DoMethod(data->iwd_ExtensionGroupObj, OM_ADDMEMBER, (IPTR)toolbarPanel);
299 if (data->iwd_ExtensionGroupSpacerObj)
301 DoMethod(data->iwd_ExtensionGroupObj, OM_REMMEMBER, (IPTR)data->iwd_ExtensionGroupSpacerObj);
302 data->iwd_ExtensionGroupSpacerObj = NULL;
305 DoMethod(data->iwd_ExtensionGroupObj, MUIM_Group_ExitChange);
306 data->iwd_Toolbar_PanelObj = toolbarPanel;
309 if (data->iwd_Toolbar_PanelObj)
311 DoMethod(
312 bt_dirup, MUIM_Notify, MUIA_Pressed, FALSE,
313 (IPTR)self, 1, MUIM_IconWindow_DirectoryUp
316 data->iwd_Toolbar_LocationStringObj = strObj;
318 data->iwd_pathStrHook.h_Entry = ( HOOKFUNC )IconWindow__HookFunc_ToolbarLocationStringFunc;
319 SET(
320 data->iwd_Toolbar_LocationStringObj, MUIA_String_Contents,
321 XGET(data->iwd_IconListObj, MUIA_IconDrawerList_Drawer)
324 /* Make changes to string contents change dir on enter */
325 DoMethod (
326 strObj, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime,
327 (IPTR)self, 3, MUIM_CallHook, &data->iwd_pathStrHook, (IPTR)CLASS
331 else
333 data->iwd_Toolbar_PanelObj = NULL;
337 Object *IconWindow__OM_NEW(Class *CLASS, Object *self, struct opSet *message)
339 struct Screen *_newIconWin__Screen = NULL;
340 Object *_newIconWin__IconListObj = NULL,
341 *_newIconWin__RootViewObj = NULL,
342 *_newIconWin__ExtensionContainerObj = NULL, // around extension group
343 *_newIconWin__ExtensionGroupObj = NULL, // extension group top
344 *_newIconWin__ExtensionGroupSpacerObj = NULL, // extension group top
345 *prefs = NULL;
347 char *_newIconWin__Title = NULL;
349 BOOL isRoot = FALSE,
350 isBackdrop = FALSE,
351 hasToolbar = FALSE;
353 struct Hook *actionHook = NULL;
354 struct TextFont *_newIconWin__WindowFont = NULL;
356 struct Hook *_newIconWin__BackFillHook = NULL;
358 APTR WindowBF_TAG = TAG_IGNORE;
360 #warning "TODO: We should probably obtain the windows coords/dimensions from a .info file ?"
361 IPTR _newIconWin__WindowWidth = 300;
362 IPTR _newIconWin__WindowHeight = 300;
363 IPTR _newIconWin__WindowTop = 0;
364 IPTR _newIconWin__WindowLeft = 0;
366 D(bug("[iconwindow] IconWindow__OM_NEW()\n"));
368 /* More than one GetTagData is not very efficient, however since this isn't called very often... */
370 isBackdrop = (BOOL)GetTagData(MUIA_IconWindow_IsBackdrop, (IPTR)FALSE, message->ops_AttrList);
372 if (!(isRoot = (BOOL)GetTagData(MUIA_IconWindow_IsRoot, (IPTR)FALSE, message->ops_AttrList)))
373 hasToolbar = (BOOL)GetTagData(MUIA_IconWindowExt_Toolbar_Enabled, (IPTR)FALSE, message->ops_AttrList);
375 actionHook = (struct Hook *)GetTagData(MUIA_IconWindow_ActionHook, (IPTR) NULL, message->ops_AttrList);
376 _newIconWin__WindowFont = (struct TextFont *)GetTagData(MUIA_IconWindow_Font, (IPTR) NULL, message->ops_AttrList);
377 prefs = (Object *)GetTagData(MUIA_Wanderer_Prefs, (IPTR) NULL, message->ops_AttrList);
379 /* Request the screen we should use .. */
381 if (!(_newIconWin__Screen = (struct Hook *)GetTagData(MUIA_Wanderer_Screen, (IPTR) NULL, message->ops_AttrList)))
383 D(bug("[IconWindow] IconWindow__OM_NEW: NO SCREEN SET!\n"));
384 return NULL;
386 D(bug("[iconwindow] IconWindow__OM_NEW: Screen @ %x\n", _newIconWin__Screen));
388 if ((_newIconWin__BackFillHook = AllocVec(sizeof(struct Hook), MEMF_CLEAR|MEMF_PUBLIC))!=NULL)
390 D(bug("[IconWindow] IconWindow__OM_NEW: Allocated WindowBackFillHook @ %x\n", _newIconWin__BackFillHook));
391 _newIconWin__BackFillHook->h_Entry = ( HOOKFUNC )IconWindow__HookFunc_WandererBackFillFunc;
392 #if defined(__MORPHOS__)
393 WindowBF_TAG = MUIA_Window_BackFillHook;
394 #else
395 WindowBF_TAG = WA_BackFill;
396 #endif
399 if (isRoot)
401 _newIconWin__IconListObj = (IPTR)IconWindowIconVolumeListObject,
402 MUIA_Font, (IPTR)_newIconWin__WindowFont,
403 End;
405 _newIconWin__WindowWidth = GetBitMapAttr(_newIconWin__Screen->RastPort.BitMap, BMA_WIDTH);
406 _newIconWin__WindowHeight = GetBitMapAttr(_newIconWin__Screen->RastPort.BitMap, BMA_HEIGHT);
407 D(bug("[iconwindow] IconWindow__OM_NEW: Screen dimensions .. %d x %d\n", _newIconWin__WindowWidth, _newIconWin__WindowHeight));
409 if (isBackdrop)
411 D(bug("[iconwindow] IconWindow__OM_NEW: BACKDROP ROOT Window\n"));
412 _newIconWin__Title = NULL;
414 else
416 D(bug("[iconwindow] IconWindow__OM_NEW: Plain ROOT Window\n"));
417 _newIconWin__Title = __intern_wintitle_wanderer;
420 _newIconWin__WindowTop = _newIconWin__Screen->BarHeight + 1;
421 _newIconWin__WindowLeft = 0;
423 _newIconWin__WindowHeight -= _newIconWin__WindowTop;
425 else
427 D(bug("[iconwindow] IconWindow__OM_NEW: Directory Window\n"));
428 _newIconWin__Title = (STRPTR) GetTagData(MUIA_IconWindow_Location, (IPTR)NULL, message->ops_AttrList);
430 _newIconWin__IconListObj = (IPTR)IconWindowIconDrawerListObject,
431 MUIA_Font, (IPTR)_newIconWin__WindowFont,
432 MUIA_IconDrawerList_Drawer, (IPTR) _newIconWin__Title,
433 End;
435 _newIconWin__ExtensionGroupObj = GroupObject,
436 InnerSpacing(0,0),
437 MUIA_Frame, MUIV_Frame_None,
438 MUIA_Group_Spacing, 0,
439 Child, (_newIconWin__ExtensionGroupSpacerObj = HSpace(0)),
440 End;
442 if (_newIconWin__ExtensionGroupObj)
444 _newIconWin__ExtensionContainerObj = HGroup,
445 InnerSpacing(0,0),
446 MUIA_HorizWeight, 100,
447 MUIA_VertWeight, 0,
448 MUIA_Frame, MUIV_Frame_None,
449 MUIA_Group_Spacing, 3,
450 /* extension on top of the list */
451 Child, (IPTR)_newIconWin__ExtensionGroupObj,
452 End;
454 _newIconWin__WindowTop = MUIV_Window_TopEdge_Centered;
455 _newIconWin__WindowLeft = MUIV_Window_LeftEdge_Centered;
457 D(bug("[iconwindow] IconWindow__OM_NEW: Using dimensions .. %d x %d\n", _newIconWin__WindowWidth, _newIconWin__WindowHeight));
459 _newIconWin__RootViewObj = (IPTR) IconListviewObject,
460 MUIA_Weight, 100,
461 MUIA_IconListview_UseWinBorder, TRUE,
462 MUIA_IconListview_IconList, (IPTR) _newIconWin__IconListObj,
463 End;
465 D(bug("[iconwindow] IconWindow__OM_NEW: Font @ %x\n", _newIconWin__WindowFont));
467 self = (Object *) DoSuperNewTags
469 CLASS, self, NULL,
471 MUIA_Window_Screen, _newIconWin__Screen,
472 MUIA_Window_Backdrop, isBackdrop ? TRUE : FALSE,
473 MUIA_Window_Borderless, isBackdrop ? TRUE : FALSE,
474 MUIA_Window_Width, _newIconWin__WindowWidth,
475 MUIA_Window_Height, _newIconWin__WindowHeight,
476 MUIA_Window_LeftEdge, _newIconWin__WindowLeft,
477 MUIA_Window_TopEdge, _newIconWin__WindowTop,
478 (!isBackdrop) ? MUIA_Window_AltWidth : TAG_IGNORE, 100,
479 (!isBackdrop) ? MUIA_Window_AltHeight : TAG_IGNORE, 80,
480 MUIA_Window_Title, (IPTR)_newIconWin__Title,
482 MUIA_Window_DragBar, (!isBackdrop) ? TRUE : FALSE,
483 MUIA_Window_CloseGadget, (!isBackdrop) ? TRUE : FALSE,
484 MUIA_Window_SizeGadget, (!isBackdrop) ? TRUE : FALSE,
485 MUIA_Window_DepthGadget, (!isBackdrop) ? TRUE : FALSE,
486 #if defined(MUIA_Window_ZoomGadget)
487 MUIA_Window_ZoomGadget, (!isBackdrop) ? TRUE : FALSE,
488 #endif
489 MUIA_Window_UseBottomBorderScroller, (!isBackdrop) ? TRUE : FALSE,
490 MUIA_Window_UseRightBorderScroller, (!isBackdrop) ? TRUE : FALSE,
491 MUIA_Window_IsSubWindow, TRUE,
492 WindowBF_TAG, _newIconWin__BackFillHook,
493 MUIA_Window_ScreenTitle, (IPTR) "",
494 MUIA_Font, (IPTR) _newIconWin__WindowFont,
496 WindowContents, (IPTR) VGroup,
497 MUIA_Group_Spacing, 0,
498 MUIA_Group_SameSize, FALSE,
499 InnerSpacing(0,0),
501 /* "Extension" group */
502 _newIconWin__ExtensionContainerObj ? Child : TAG_IGNORE, (IPTR)_newIconWin__ExtensionContainerObj,
504 /* icon list */
505 Child, (IPTR) _newIconWin__RootViewObj,
507 End,
509 TAG_MORE, (IPTR) message->ops_AttrList
512 if (self != NULL)
514 SETUP_ICONWINDOW_INST_DATA;
516 D(bug("[iconwindow] IconWindow__OM_NEW: SELF = %x\n", self));
518 data->iwd_Title = _newIconWin__Title;
520 data->iwd_RootViewObj = _newIconWin__RootViewObj;
522 data->iwd_IconListObj = _newIconWin__IconListObj;
524 SET(data->iwd_RootViewObj, MUIA_IconWindow_Window, self);
526 data->iwd_ActionHook = actionHook;
528 data->iwd_ExtensionGroupObj = _newIconWin__ExtensionGroupObj;
529 data->iwd_ExtensionContainerObj = _newIconWin__ExtensionContainerObj;
530 data->iwd_ExtensionGroupSpacerObj = _newIconWin__ExtensionGroupSpacerObj;
532 data->iwd_Toolbar_PanelObj = NULL;
534 data->iwd_Flag_ISROOT = isRoot;
535 data->iwd_Flag_ISBACKDROP = isBackdrop;
537 data->iwd_WindowFont = _newIconWin__WindowFont;
539 data->iwd_ViewSettings_Attrib = data->iwd_Flag_ISROOT
540 ? "Workbench"
541 : "Drawer";
543 if (prefs)
545 data->iwd_PrefsUpdated_hook.h_Entry = ( HOOKFUNC )IconWindow__HookFunc_PrefsUpdatedFunc;
547 DoMethod
549 prefs, MUIM_Notify, MUIA_WandererPrefs_Processing, FALSE,
550 (IPTR) self, 3,
551 MUIM_CallHook, &data->iwd_PrefsUpdated_hook, (IPTR)CLASS
554 data->iwd_ViewSettings_PrefsNotificationObject = DoMethod(prefs,
555 MUIM_WandererPrefs_ViewSettings_GetNotifyObject,
556 data->iwd_ViewSettings_Attrib);
558 if (data->iwd_ExtensionContainerObj)
560 DoMethod
562 prefs, MUIM_Notify, MUIA_IconWindowExt_Toolbar_Enabled, MUIV_EveryTime,
563 (IPTR)self, 3, MUIM_Set, MUIA_IconWindowExt_Toolbar_Enabled, MUIV_TriggerValue
568 data->iwd_ProcessBackground_hook.h_Entry = ( HOOKFUNC )IconWindow__HookFunc_ProcessBackgroundFunc;
569 if (data->iwd_BackFill_hook = _newIconWin__BackFillHook)
571 data->iwd_BackFillHookData.bfhd_IWClass = CLASS;
572 data->iwd_BackFillHookData.bfhd_IWObject = self;
573 data->iwd_BackFill_hook->h_Data = &data->iwd_BackFillHookData;
576 if (iconwindow_BackFill_Active)
578 data->iwd_BackFillInfo = DoMethod(self, MUIM_IconWindow_BackFill_Setup);
579 D(bug("[iconwindow] IconWindow__OM_NEW: Window BackFill_Data @ %x for '%s'\n", data->iwd_BackFillInfo, iconwindow_BackFill_Active->bfd_BackFillID));
582 /* no tool bar when root */
583 if (!isRoot && hasToolbar && data->iwd_ExtensionContainerObj)
584 IconWindow__SetupToolbar(CLASS, self, prefs);
586 /* If double clicked then we call our own private methods, that's
587 easier then using Hooks */
588 DoMethod
590 _newIconWin__IconListObj, MUIM_Notify, MUIA_IconList_DoubleClick, TRUE,
591 (IPTR) self, 1, MUIM_IconWindow_DoubleClicked
594 /* notify when icons dropped on another (wanderer) window */
595 DoMethod
597 _newIconWin__IconListObj, MUIM_Notify, MUIA_IconList_IconsDropped, MUIV_EveryTime,
598 (IPTR) self, 1, MUIM_IconWindow_IconsDropped
601 /* notify when icons dropped on custom application */
602 DoMethod
604 _newIconWin__IconListObj, MUIM_Notify, MUIA_IconList_AppWindowDrop, MUIV_EveryTime,
605 (IPTR) self, 1, MUIM_IconWindow_AppWindowDrop
608 DoMethod
610 _newIconWin__IconListObj, MUIM_Notify, MUIA_IconList_Clicked, MUIV_EveryTime,
611 (IPTR) self, 1, MUIM_IconWindow_Clicked
615 return self;
618 IPTR IconWindow__OM_DISPOSE(Class *CLASS, Object *self, Msg message)
620 SETUP_ICONWINDOW_INST_DATA;
622 Object *prefs = NULL;
624 GET(_app(self), MUIA_Wanderer_Prefs, &prefs);
626 if (prefs)
628 DoMethod
630 prefs,
631 MUIM_KillNotifyObj, MUIA_WandererPrefs_Processing, (IPTR) self
634 DoMethod
636 prefs,
637 MUIM_KillNotifyObj, MUIA_IconWindowExt_Toolbar_Enabled, (IPTR) self
641 if (data->iwd_BackFill_hook)
642 FreeVec(data->iwd_BackFill_hook);
644 return DoSuperMethodA(CLASS, self, message);
647 IPTR IconWindow__OM_SET(Class *CLASS, Object *self, struct opSet *message)
649 SETUP_ICONWINDOW_INST_DATA;
651 struct TagItem *tstate = message->ops_AttrList, *tag;
652 BOOL UpdateIconlist = FALSE;
653 IPTR focusicon = NULL;
654 IPTR rv = TRUE;
656 while ((tag = NextTagItem((const struct TagItem**)&tstate)) != NULL)
658 switch (tag->ti_Tag)
660 case MUIA_IconWindow_Changed:
661 data->iwd_Flag_NEEDSUPDATE = (BOOL)tag->ti_Data;
662 break;
664 case MUIA_Window_Open:
666 /* Commented out for unknown reason - please elaborate here!
667 if (data->iwd_WindowFont)
669 D(bug("[iconwindow] MUIA_Window_Open: Setting Window Font [%x]\n", data->iwd_WindowFont));
670 SetFont(_rp(self), data->iwd_WindowFont);
673 break;
676 case MUIA_Window_Activate:
677 if (data->iwd_IconListObj)
678 GET(data->iwd_IconListObj, MUIA_IconList_FocusIcon, &focusicon);
680 break;
682 case MUIA_IconWindow_Font:
683 data->iwd_WindowFont = (struct TextFont *)tag->ti_Data;
684 D(bug("[iconwindow] IconWindow__OM_SET: MUIA_IconWindow_Font [font @ %x]\n", data->iwd_WindowFont));
686 if ( data->iwd_WindowFont != 1 )
687 SetFont(_rp(self), data->iwd_WindowFont);
689 break;
691 case MUIA_IconWindow_Location:
692 strcpy(data->iwd_DirectoryPath, (IPTR)tag->ti_Data);
693 D(bug("[iconwindow] IconWindow__OM_SET: MUIA_IconWindow_Location [drawer '%s']\n", data->iwd_DirectoryPath));
695 SET(data->iwd_IconListObj, MUIA_IconDrawerList_Drawer, (IPTR) data->iwd_DirectoryPath);
696 if (!data->iwd_Flag_ISROOT)
698 SET(self, MUIA_Window_Title, (IPTR)data->iwd_DirectoryPath);
699 SET(data->iwd_Toolbar_LocationStringObj, MUIA_String_Contents, (IPTR)data->iwd_DirectoryPath);
701 break;
703 case MUIA_IconWindow_BackgroundAttrib:
704 D(bug("[iconwindow] IconWindow__OM_SET: MUIA_IconWindow_BackgroundAttrib (not implemented)\n"));
705 break;
707 case MUIA_IconWindowExt_Toolbar_Enabled:
708 if ((!(data->iwd_Flag_ISROOT)) && (data->iwd_ExtensionContainerObj))
710 // remove toolbar
711 if (!(( BOOL )tag->ti_Data))
713 if (data->iwd_Toolbar_PanelObj != NULL)
715 data->iwd_ExtensionGroupSpacerObj = HSpace(0);
717 SET(data->iwd_ExtensionContainerObj, MUIA_Frame, MUIV_Frame_None);
718 SET(data->iwd_ExtensionContainerObj, MUIA_Group_Spacing, 0);
720 if ((data->iwd_ExtensionGroupSpacerObj) && (DoMethod(data->iwd_ExtensionGroupObj, MUIM_Group_InitChange)))
722 DoMethod(data->iwd_ExtensionGroupObj, OM_REMMEMBER, (IPTR)data->iwd_Toolbar_PanelObj);
723 DoMethod(data->iwd_ExtensionGroupObj, OM_ADDMEMBER, (IPTR)data->iwd_ExtensionGroupSpacerObj);
724 DoMethod(data->iwd_ExtensionGroupObj, MUIM_Group_ExitChange);
725 data->iwd_Toolbar_PanelObj = NULL;
728 //Force classic navigation when the toolbar is disabled ..
729 Object *prefs = NULL;
731 GET(_app(self), MUIA_Wanderer_Prefs, &prefs);
732 if (prefs)
733 SET(prefs, MUIA_IconWindowExt_Toolbar_NavigationMethod, WPD_NAVIGATION_CLASSIC);
735 else
737 // setup toolbar
738 if (data->iwd_Toolbar_PanelObj == NULL)
740 Object *prefs = NULL;
741 GET(_app(self), MUIA_Wanderer_Prefs, &prefs);
742 IconWindow__SetupToolbar(CLASS, self, prefs);
745 data->iwd_Flag_EXT_TOOLBARENABLED = (IPTR)tag->ti_Data;
747 break;
751 if (UpdateIconlist)
752 DoMethod(data->iwd_IconListObj, MUIM_IconList_Update);
754 rv = DoSuperMethodA(CLASS, self, (Msg) message);
756 if (focusicon)
758 D(bug("[iconwindow] IconWindow__OM_SET: Updating focused icon (@ %x)\n", focusicon));
759 DoMethod(data->iwd_IconListObj, MUIM_IconList_DrawEntry, focusicon, ICONENTRY_DRAWMODE_PLAIN);
760 DoMethod(data->iwd_IconListObj, MUIM_IconList_DrawEntryLabel, focusicon, ICONENTRY_DRAWMODE_PLAIN);
763 return rv;
767 IPTR IconWindow__OM_GET(Class *CLASS, Object *self, struct opGet *message)
769 SETUP_ICONWINDOW_INST_DATA;
771 IPTR *store = message->opg_Storage;
772 IPTR rv = TRUE;
774 switch (message->opg_AttrID)
776 case MUIA_IconWindow_Changed:
777 *store = (IPTR)data->iwd_Flag_NEEDSUPDATE;
778 break;
780 case MUIA_IconWindow_Window:
781 *store = (IPTR)self;
782 break;
784 case MUIA_IconWindow_Location:
785 *store = !data->iwd_Flag_ISROOT
786 ? XGET(data->iwd_IconListObj, MUIA_IconDrawerList_Drawer)
787 : (IPTR)NULL;
788 break;
790 case MUIA_IconWindow_IconList:
791 *store = (IPTR)data->iwd_IconListObj;
792 break;
794 case MUIA_IconWindowExt_Toolbar_Enabled:
795 *store = (IPTR)data->iwd_Flag_EXT_TOOLBARENABLED;
796 break;
798 case MUIA_IconWindow_IsRoot:
799 *store = (IPTR)data->iwd_Flag_ISROOT;
800 break;
802 case MUIA_IconWindow_IsBackdrop:
803 *store = (IPTR)data->iwd_Flag_ISBACKDROP;
804 break;
806 case MUIA_IconWindow_BackFillData:
807 *store = (IPTR)data->iwd_BackFillInfo;
808 break;
810 case MUIA_IconWindow_BackgroundAttrib:
811 *store = (IPTR)data->iwd_ViewSettings_Attrib;
812 break;
814 default:
815 rv = DoSuperMethodA(CLASS, self, (Msg) message);
818 return rv;
821 IPTR IconWindow__MUIM_Window_Setup
823 Class *CLASS, Object *self, Msg message
826 SETUP_ICONWINDOW_INST_DATA;
828 D(bug("[IconWindow] IconWindow__MUIM_Window_Setup()\n"));
830 Object *prefs = NULL;
832 if (!DoSuperMethodA(CLASS, self, message)) return FALSE;
834 GET(_app(self), MUIA_Wanderer_Prefs, &prefs);
836 D(bug("[IconWindow] IconWindow__MUIM_Window_Setup: App PrefsObj @ %x\n", prefs));
838 if ((prefs) && (data->iwd_ViewSettings_PrefsNotificationObject))
840 D(bug("[IconWindow] IconWindow__MUIM_Window_Setup: Setting up window background change hook\n"));
842 /* Set-up a hook to call ProcessBackground on prefs notification */
843 DoMethod
845 data->iwd_ViewSettings_PrefsNotificationObject, MUIM_Notify, MUIA_Background, MUIV_EveryTime,
846 (IPTR) self, 3,
847 MUIM_CallHook, &data->iwd_ProcessBackground_hook, (IPTR)CLASS
850 if (data->iwd_Flag_ISROOT)
852 DoMethod
854 data->iwd_ViewSettings_PrefsNotificationObject, MUIM_Notify, MUIA_IconWindowExt_ImageBackFill_BGRenderMode, MUIV_EveryTime,
855 (IPTR) self, 3,
856 MUIM_CallHook, &data->iwd_ProcessBackground_hook, (IPTR)CLASS
860 DoMethod
862 data->iwd_ViewSettings_PrefsNotificationObject, MUIM_Notify, MUIA_IconWindowExt_ImageBackFill_BGTileMode, MUIV_EveryTime,
863 (IPTR) self, 3,
864 MUIM_CallHook, &data->iwd_ProcessBackground_hook, (IPTR)CLASS
867 DoMethod
869 data->iwd_ViewSettings_PrefsNotificationObject, MUIM_Notify, MUIA_IconWindowExt_ImageBackFill_BGXOffset, MUIV_EveryTime,
870 (IPTR) self, 3,
871 MUIM_CallHook, &data->iwd_ProcessBackground_hook, (IPTR)CLASS
874 DoMethod
876 data->iwd_ViewSettings_PrefsNotificationObject, MUIM_Notify, MUIA_IconWindowExt_ImageBackFill_BGYOffset, MUIV_EveryTime,
877 (IPTR) self, 3,
878 MUIM_CallHook, &data->iwd_ProcessBackground_hook, (IPTR)CLASS
882 D(bug("[iconwindow] IconWindow__MUIM_Window_Setup: Setup complete!\n"));
884 return TRUE;
887 IPTR IconWindow__MUIM_Window_Cleanup
889 Class *CLASS, Object *self, Msg message
892 SETUP_ICONWINDOW_INST_DATA;
894 D(bug("[IconWindow] IconWindow__MUIM_Window_Cleanup()\n"));
896 if (data->iwd_BackFillInfo)
898 DoMethod(self, MUIM_IconWindow_BackFill_Cleanup, data->iwd_BackFillInfo);
899 data->iwd_BackFillInfo = NULL;
902 if (data->iwd_ViewSettings_PrefsNotificationObject)
904 DoMethod
906 data->iwd_ViewSettings_PrefsNotificationObject,
907 MUIM_KillNotifyObj, MUIA_IconWindowExt_ImageBackFill_BGYOffset, (IPTR) self
910 DoMethod
912 data->iwd_ViewSettings_PrefsNotificationObject,
913 MUIM_KillNotifyObj, MUIA_IconWindowExt_ImageBackFill_BGXOffset, (IPTR) self
916 DoMethod
918 data->iwd_ViewSettings_PrefsNotificationObject,
919 MUIM_KillNotifyObj, MUIA_IconWindowExt_ImageBackFill_BGTileMode, (IPTR) self
922 if (data->iwd_Flag_ISROOT)
924 DoMethod
926 data->iwd_ViewSettings_PrefsNotificationObject,
927 MUIM_KillNotifyObj, MUIA_IconWindowExt_ImageBackFill_BGRenderMode, (IPTR) self
931 DoMethod
933 data->iwd_ViewSettings_PrefsNotificationObject,
934 MUIM_KillNotifyObj, MUIA_Background, (IPTR) self
937 return DoSuperMethodA(CLASS, self, message);
940 IPTR IconWindow__MUIM_IconWindow_DoubleClicked
942 Class *CLASS, Object *self, Msg message
945 SETUP_ICONWINDOW_INST_DATA;
947 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_DoubleClicked()\n"));
949 if (data->iwd_ActionHook)
951 struct IconWindow_ActionMsg msg;
952 msg.type = ICONWINDOW_ACTION_OPEN;
953 msg.iconlist = data->iwd_IconListObj;
954 msg.isroot = data->iwd_Flag_ISROOT;
955 msg.click = NULL;
956 CallHookPkt(data->iwd_ActionHook, self, &msg);
959 return TRUE;
962 IPTR IconWindow__MUIM_IconWindow_Clicked
964 Class *CLASS, Object *self, Msg message
967 SETUP_ICONWINDOW_INST_DATA;
969 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Clicked()\n"));
971 if (data->iwd_ActionHook)
973 struct IconWindow_ActionMsg msg;
974 msg.type = ICONWINDOW_ACTION_CLICK;
975 msg.iconlist = data->iwd_IconListObj;
976 msg.isroot = data->iwd_Flag_ISROOT;
977 GET(data->iwd_IconListObj, MUIA_IconList_Clicked, &msg.click);
978 CallHookPkt(data->iwd_ActionHook, self, &msg);
981 return TRUE;
984 IPTR IconWindow__MUIM_IconWindow_IconsDropped
986 Class *CLASS, Object *self, Msg message
989 SETUP_ICONWINDOW_INST_DATA;
991 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_IconsDropped()\n"));
993 if (data->iwd_ActionHook)
995 struct IconWindow_ActionMsg msg;
996 msg.type = ICONWINDOW_ACTION_ICONDROP;
997 msg.iconlist = data->iwd_IconListObj;
998 msg.isroot = data->iwd_Flag_ISROOT;
999 GET(data->iwd_IconListObj, MUIA_IconList_IconsDropped, &msg.drop);
1000 CallHookPkt(data->iwd_ActionHook, self, &msg);
1003 return TRUE;
1006 IPTR IconWindow__MUIM_IconWindow_AppWindowDrop
1008 Class *CLASS, Object *self, Msg message
1011 SETUP_ICONWINDOW_INST_DATA;
1013 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_AppWindowDrop()\n"));
1015 if (data->iwd_ActionHook)
1017 struct IconWindow_ActionMsg msg;
1018 msg.type = ICONWINDOW_ACTION_APPWINDOWDROP;
1019 msg.iconlist = data->iwd_IconListObj;
1020 msg.isroot = data->iwd_Flag_ISROOT;
1021 GET(data->iwd_IconListObj, MUIA_IconList_IconsDropped, &msg.drop);
1022 CallHookPkt(data->iwd_ActionHook, self, &msg);
1025 return TRUE;
1028 IPTR IconWindow__MUIM_IconWindow_Open
1030 Class *CLASS, Object *self, Msg message
1033 SETUP_ICONWINDOW_INST_DATA;
1035 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Open()\n"));
1037 if (!XGET(self, MUIA_Window_Open))
1039 DoMethod(data->iwd_IconListObj, MUIM_IconList_Clear);
1040 SET(self, MUIA_Window_Open, TRUE);
1042 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Open: Process the background ..\n"));
1043 DoMethod(self, MUIM_IconWindow_BackFill_ProcessBackground, data->iwd_BackFillInfo, data->iwd_RootViewObj);
1045 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Open: Force an update of the list ..\n"));
1046 DoMethod(data->iwd_IconListObj, MUIM_IconList_Update);
1048 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Open: Setting window as active ..\n"));
1049 SET(self, MUIA_Window_Activate, TRUE);
1051 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Open: All done\n"));
1052 return TRUE;
1055 IPTR IconWindow__MUIM_IconWindow_DirectoryUp
1057 Class *CLASS, Object *self, Msg message
1060 SETUP_ICONWINDOW_INST_DATA;
1062 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_DirectoryUp()\n"));
1064 if (data->iwd_ActionHook)
1066 struct IconWindow_ActionMsg msg;
1067 msg.type = ICONWINDOW_ACTION_DIRUP;
1068 msg.iconlist = data->iwd_IconListObj;
1069 msg.isroot = data->iwd_Flag_ISROOT;
1070 msg.click = NULL;
1071 CallHookPkt(data->iwd_ActionHook, self, &msg);
1075 return TRUE;
1078 IPTR IconWindow__MUIM_IconWindow_UnselectAll
1080 Class *CLASS, Object *self, Msg message
1083 SETUP_ICONWINDOW_INST_DATA;
1085 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_UnselectAll()\n"));
1087 DoMethod(data->iwd_IconListObj, MUIM_IconList_UnselectAll);
1089 return TRUE;
1092 IPTR IconWindow__MUIM_IconWindow_Remove
1094 Class *CLASS, Object *self, Msg message
1097 SETUP_ICONWINDOW_INST_DATA;
1099 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_Remove()\n"));
1101 // Remove window
1102 SET( self, MUIA_Window_Open, FALSE );
1103 DoMethod ( _app(self), OM_REMMEMBER, self );
1104 DisposeObject(self);
1106 return TRUE;
1109 /*** Stubs for Backfill Hooks ******************************************************************/
1111 IPTR IconWindow__MUIM_IconWindow_BackFill_Register
1113 Class *CLASS, Object *self, struct MUIP_IconWindow_BackFill_Register *message
1116 // SETUP_ICONWINDOW_INST_DATA;
1118 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_Register('%s')\n", message->register_Node->bfd_BackFillID));
1120 AddTail(&iconwindow_BackFillNodes, message->register_Node);
1121 if (iconwindow_BackFill_Active == NULL) iconwindow_BackFill_Active = message->register_Node;
1123 return TRUE;
1126 IPTR IconWindow__MUIM_IconWindow_BackFill_Setup
1128 Class *CLASS, Object *self, struct MUIP_IconWindow_BackFill_Setup *message
1131 SETUP_ICONWINDOW_INST_DATA;
1133 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_Setup()\n"));
1135 if (iconwindow_BackFill_Active == NULL) return FALSE;
1137 return (iconwindow_BackFill_Active->bfd_MUIM_IconWindow_BackFill_Setup)(CLASS, self, message);
1140 IPTR IconWindow__MUIM_IconWindow_BackFill_Cleanup
1142 Class *CLASS, Object *self, struct MUIP_IconWindow_BackFill_Cleanup *message
1145 SETUP_ICONWINDOW_INST_DATA;
1147 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_Cleanup()\n"));
1149 if (iconwindow_BackFill_Active == NULL) return FALSE;
1151 return (iconwindow_BackFill_Active->bfd_MUIM_IconWindow_BackFill_Cleanup)(CLASS, self, message);
1154 IPTR IconWindow__MUIM_IconWindow_BackFill_ProcessBackground
1156 Class *CLASS, Object *self, struct MUIP_IconWindow_BackFill_ProcessBackground *message
1159 SETUP_ICONWINDOW_INST_DATA;
1161 IPTR retVal = (IPTR)FALSE;
1163 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_ProcessBackground()\n"));
1165 if (iconwindow_BackFill_Active != NULL)
1167 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_ProcessBackground: Asking module @ %x to process ..\n", iconwindow_BackFill_Active));
1168 retVal = (iconwindow_BackFill_Active->bfd_MUIM_IconWindow_BackFill_ProcessBackground)(CLASS, self, message);
1171 if ((retVal == (IPTR)FALSE) && (data->iwd_RootViewObj != NULL))
1173 Object *IconWindowPB_PrefsObj = NULL;
1175 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_ProcessBackground: No BackFill module/ module cant render mode\n"));
1176 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_ProcessBackground: Using default MUI functions ..\n"));
1178 GET(_app(self), MUIA_Wanderer_Prefs, &IconWindowPB_PrefsObj);
1179 if (IconWindowPB_PrefsObj)
1181 IPTR IconWindowPB_Background = 0;
1182 IPTR IconWindowPB_BGMode = 0;
1183 IPTR IconWindowPB_BGTileMode = 0;
1185 if ((IconWindowPB_Background = DoMethod(IconWindowPB_PrefsObj, MUIM_WandererPrefs_ViewSettings_GetAttribute, data->iwd_ViewSettings_Attrib, MUIA_Background)) != -1)
1187 if ((IconWindowPB_BGMode = DoMethod(IconWindowPB_PrefsObj, MUIM_WandererPrefs_ViewSettings_GetAttribute,
1188 data->iwd_ViewSettings_Attrib, MUIA_IconWindowExt_ImageBackFill_BGRenderMode)) == -1)
1189 IconWindowPB_BGMode = IconWindowExt_ImageBackFill_RenderMode_Tiled;
1191 if ((IconWindowPB_BGTileMode = DoMethod(IconWindowPB_PrefsObj, MUIM_WandererPrefs_ViewSettings_GetAttribute,
1192 data->iwd_ViewSettings_Attrib, MUIA_IconWindowExt_ImageBackFill_BGTileMode)) == -1)
1193 IconWindowPB_BGTileMode = IconWindowExt_ImageBackFill_TileMode_Float;
1195 SET(data->iwd_RootViewObj, MUIA_Background, IconWindowPB_Background);
1197 char *bgmode_string = IconWindowPB_Background;
1198 BYTE this_mode = bgmode_string[0] - 48;
1200 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_ProcessBackground: MUI BG Mode = %d\n", this_mode));
1202 switch (this_mode)
1204 case 5:
1205 //Image =D
1206 if (IconWindowPB_BGMode == IconWindowExt_ImageBackFill_RenderMode_Scale)
1208 SET(data->iwd_RootViewObj, MUIA_IconListview_ScaledBackground, TRUE);
1209 break;
1211 else
1212 SET(data->iwd_RootViewObj, MUIA_IconListview_ScaledBackground, FALSE);
1214 case 0:
1215 //MUI Pattern
1216 if (IconWindowPB_BGTileMode == IconWindowExt_ImageBackFill_TileMode_Fixed)
1217 SET(data->iwd_RootViewObj, MUIA_IconListview_FixedBackground, TRUE);
1218 else
1219 SET(data->iwd_RootViewObj, MUIA_IconListview_FixedBackground, FALSE);
1220 break;
1224 retVal = FALSE;
1227 return retVal;
1230 IPTR IconWindow__MUIM_IconWindow_BackFill_DrawBackground
1232 Class *CLASS, Object *self, struct MUIP_IconWindow_BackFill_DrawBackground *message
1235 SETUP_ICONWINDOW_INST_DATA;
1237 D(bug("[IconWindow] IconWindow__MUIM_IconWindow_BackFill_DrawBackground()\n"));
1239 if (iconwindow_BackFill_Active == NULL) return FALSE;
1241 return (iconwindow_BackFill_Active->bfd_MUIM_IconWindow_BackFill_DrawBackground)(CLASS, self, message);
1244 IPTR IconWindow__SetupClass()
1246 D(bug("[IconWindow] IconWindow__SetupClass()\n"));
1248 NewList(&iconwindow_BackFillNodes);
1249 iconwindow_BackFill_Active = NULL;
1251 return TRUE;
1254 /*** Setup ******************************************************************/
1255 ICONWINDOW_CUSTOMCLASS
1257 IconWindow, NULL, MUIC_Window, NULL,
1258 OM_NEW, struct opSet *,
1259 OM_DISPOSE, Msg,
1260 OM_SET, struct opSet *,
1261 OM_GET, struct opGet *,
1262 MUIM_Window_Setup, Msg,
1263 MUIM_Window_Cleanup, Msg,
1264 MUIM_IconWindow_Open, Msg,
1265 MUIM_IconWindow_UnselectAll, Msg,
1266 MUIM_IconWindow_DoubleClicked, Msg,
1267 MUIM_IconWindow_IconsDropped, Msg,
1268 MUIM_IconWindow_Clicked, Msg,
1269 MUIM_IconWindow_DirectoryUp, Msg,
1270 MUIM_IconWindow_AppWindowDrop, Msg,
1271 MUIM_IconWindow_Remove, Msg,
1272 MUIM_IconWindow_BackFill_Register, struct MUIP_IconWindow_BackFill_Register *,
1273 MUIM_IconWindow_BackFill_Setup, struct MUIP_IconWindow_BackFill_Setup *,
1274 MUIM_IconWindow_BackFill_Cleanup, struct MUIP_IconWindow_BackFill_Cleanup *,
1275 MUIM_IconWindow_BackFill_ProcessBackground, struct MUIP_IconWindow_BackFill_ProcessBackground *,
1276 MUIM_IconWindow_BackFill_DrawBackground, struct MUIP_IconWindow_BackFill_DrawBackground *
1279 ADD2INIT(IconWindow__SetupClass, 0);