more rendering corrections
[AROS.git] / workbench / libs / desktop / containericonobserver.c
blob6f0a61ee09759a71d837d838539fa577ac3ece50
1 /*
2 Copyright © 1995-2003, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define MUIMASTER_YES_INLINE_STDARG
8 #define DEBUG 1
9 #include <aros/debug.h>
11 #include <exec/types.h>
12 #include <exec/memory.h>
13 #include <intuition/classes.h>
14 #include <intuition/classusr.h>
15 #include <libraries/gadtools.h>
16 #include <libraries/mui.h>
17 #include <libraries/desktop.h>
19 #include "support.h"
20 #include "worker.h"
21 #include "desktop_intern.h"
23 #include <proto/desktop.h>
24 #include <proto/dos.h>
25 #include <proto/muimaster.h>
26 #include <proto/intuition.h>
27 #include <proto/utility.h>
29 #include "presentation.h"
30 #include "observer.h"
31 #include "iconobserver.h"
32 #include "drawericonobserver.h"
33 #include "desktopobserver.h"
34 #include "iconcontainerclass.h"
35 #include "iconclass.h"
37 #include "desktop_intern_protos.h"
39 #include <string.h>
41 IPTR containerIconObserverExecute(Class * cl, Object * obj, Msg msg)
43 UBYTE *name,
44 *directory,
45 *newDir;
46 ULONG dirNameLen = 0;
47 ULONG length = 0;
48 struct ContainerIconObserverClassData *data;
49 IPTR retval = 1;
50 Object *horiz,
51 *vert,
52 *dirWindow,
53 *iconcontainer,
54 *strip;
55 struct NewMenu *menuDat;
56 Object *desktop = NULL;
57 STRPTR title = NULL;
59 data = (struct ContainerIconObserverClassData *) INST_DATA(cl, obj);
60 retval = DoSuperMethodA(cl, obj, msg);
62 name = _name(obj);
63 directory = _directory(obj);
65 // directory is NULL if this is a disk icon
66 if (directory)
67 dirNameLen = strlen(directory);
69 length = strlen(name) + dirNameLen + 1 /* ':' or '/' */ + 1;
70 newDir = AllocVec(length, MEMF_ANY);
72 if (directory)
74 strlcpy(newDir, directory, length);
75 strlcat(newDir, name, length);
76 strlcat(newDir, "/", length);
77 title = name;
79 else
81 strlcpy(newDir, name, length);
82 strlcat(newDir, ":", length);
83 title = newDir;
86 horiz = PropObject,
87 MUIA_Prop_Horiz, TRUE,
88 MUIA_Prop_Entries, 0,
89 MUIA_Prop_UseWinBorder, MUIV_Prop_UseWinBorder_Bottom, End;
90 vert = PropObject,
91 MUIA_Prop_Horiz, FALSE,
92 MUIA_Prop_UseWinBorder, MUIV_Prop_UseWinBorder_Right, End;
94 menuDat = BuildDesktopMenus();
96 GetAttr(IA_Desktop, _presentation(obj), (IPTR *) &desktop);
98 iconcontainer = CreateDesktopObject
100 CDO_IconContainer,
102 ICOA_Directory, (IPTR) newDir,
103 AICA_Desktop, (IPTR) desktop,
104 ICA_VertScroller, (IPTR) vert,
105 ICA_HorizScroller, (IPTR) horiz,
106 MUIA_FillArea, FALSE,
107 MUIA_InnerLeft, 0,
108 MUIA_InnerTop, 0,
109 MUIA_InnerRight, 0,
110 MUIA_InnerBottom, 0,
112 TAG_DONE
115 // TEMPORARY!!!!! Use CreateDesktopObjectA(CDO_Window.....) instead!
116 dirWindow = WindowObject,
117 MUIA_Window_Width, 300,
118 MUIA_Window_Height, 300,
119 MUIA_Window_Title, (IPTR) title,
120 MUIA_Window_Menustrip, (IPTR) strip = MUI_MakeObject(MUIO_MenustripNM, (IPTR) menuDat, 0),
121 MUIA_Window_UseBottomBorderScroller, TRUE,
122 MUIA_Window_UseRightBorderScroller, TRUE,
123 MUIA_Window_EraseArea, FALSE,
125 WindowContents, (IPTR) iconcontainer,
126 End;
128 DoMethod(_app(_presentation(obj)), OM_ADDMEMBER, (IPTR) dirWindow);
130 DoMethod(dirWindow, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
131 (IPTR) dirWindow, 3, MUIM_Set, MUIA_Window_Open, FALSE);
133 DoMethod(vert, MUIM_Notify, MUIA_Prop_First, MUIV_EveryTime,
134 (IPTR) iconcontainer, 3, MUIM_Set, ICA_ScrollToVert, MUIV_TriggerValue);
135 DoMethod(horiz, MUIM_Notify, MUIA_Prop_First, MUIV_EveryTime,
136 (IPTR) iconcontainer, 3, MUIM_Set, ICA_ScrollToHoriz,
137 MUIV_TriggerValue);
138 DoMethod(dirWindow, MUIM_Notify, MUIA_Window_Activate, TRUE, (IPTR) desktop, 3,
139 MUIM_Set, DA_ActiveWindow, (IPTR) dirWindow);
140 SetAttrs(dirWindow, MUIA_Window_Open, TRUE, TAG_END);
142 return 1;
145 IPTR containerIconObserverNew(Class * cl, Object * obj, struct opSet * msg)
147 IPTR retval = 0;
148 struct ContainerIconObserverClassData *data;
150 retval = DoSuperMethodA(cl, obj, (Msg) msg);
151 if (retval)
153 obj = (Object *) retval;
154 data = INST_DATA(cl, obj);
157 return retval;
160 IPTR containerIconObserverSet(Class * cl, Object * obj, struct opSet * msg)
162 struct ContainerIconObserverClassData *data;
163 IPTR retval = 1;
164 struct TagItem *tag,
165 *tstate = msg->ops_AttrList;
167 data = (struct ContainerIconObserverClassData *) INST_DATA(cl, obj);
169 while ((tag = NextTagItem(&tstate)))
171 switch (tag->ti_Tag)
172 default:
173 break;
176 retval = DoSuperMethodA(cl, obj, (Msg) msg);
178 return retval;
181 IPTR containerIconObserverGet(Class * cl, Object * obj, struct opGet * msg)
183 IPTR retval = 1;
184 struct ContainerIconObserverClassData *data;
186 data = (struct ContainerIconObserverClassData *) INST_DATA(cl, obj);
188 switch (msg->opg_AttrID)
190 default:
191 retval = DoSuperMethodA(cl, obj, (Msg) msg);
192 break;
195 return retval;
198 IPTR containerIconObserverDispose(Class * cl, Object * obj, Msg msg)
200 IPTR retval;
202 retval = DoSuperMethodA(cl, obj, msg);
204 return retval;
207 BOOPSI_DISPATCHER(IPTR, containerIconObserverDispatcher, cl, obj, msg)
209 ULONG retval = 0;
211 switch (msg->MethodID)
213 case OM_NEW:
214 retval = containerIconObserverNew(cl, obj, (struct opSet *) msg);
215 break;
216 case OM_SET:
217 retval = containerIconObserverSet(cl, obj, (struct opSet *) msg);
218 break;
219 case OM_GET:
220 retval = containerIconObserverGet(cl, obj, (struct opGet *) msg);
221 break;
222 case OM_DISPOSE:
223 retval = containerIconObserverDispose(cl, obj, msg);
224 break;
225 case IOM_Execute:
226 retval = containerIconObserverExecute(cl, obj, msg);
227 break;
228 default:
229 retval = DoSuperMethodA(cl, obj, msg);
230 break;
233 return retval;
235 BOOPSI_DISPATCHER_END