muimaster.library: remove empty Dispose from Listview
[AROS.git] / workbench / libs / muimaster / classes / listview.c
blobae90eb717b8c22353a96092dbe48ff64acf7f1fd
1 /*
2 Copyright © 2002-2015, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <aros/debug.h>
8 #include <clib/alib_protos.h>
9 #include <proto/utility.h>
10 #include <proto/intuition.h>
11 #include <proto/muimaster.h>
13 #include "mui.h"
15 extern struct Library *MUIMasterBase;
17 struct MUI_ListviewData
19 Object *list;
20 // struct Hook hook;
21 struct Hook selfnotify_hook;
22 BOOL noforward;
25 #define PROP_VERT_FIRST 1
27 //ULONG Listview_Function(struct Hook *hook, APTR dummyobj, void **msg)
28 //{
29 // struct MUI_ListviewData *data = (struct MUI_ListviewData *)hook->h_Data;
30 // SIPTR type = (SIPTR) msg[0];
31 // SIPTR val = (SIPTR) msg[1];
33 // D(bug("[ListView] List 0x%p, Event %d, value %ld\n", data->list, type,
34 // val));
36 // switch (type)
37 // {
38 // case PROP_VERT_FIRST:
39 // get(data->vert, MUIA_Prop_First, &val);
40 // nnset(data->list, MUIA_List_VertProp_First, val);
41 // break;
42 // }
43 // return 0;
44 //}
46 ULONG SelfNotify_Function(struct Hook *hook, APTR obj, void **msg)
48 struct MUI_ListviewData *data = (struct MUI_ListviewData *)hook->h_Data;
49 SIPTR attribute = (SIPTR) msg[0];
50 SIPTR value = (SIPTR) msg[1];
52 /* This allows avoiding notify loops */
53 data->noforward = TRUE;
54 SetAttrs(obj, MUIA_Group_Forward, FALSE, attribute, value, TAG_DONE);
55 data->noforward = FALSE;
57 return 0;
60 /**************************************************************************
61 OM_NEW
62 **************************************************************************/
63 IPTR Listview__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
65 struct MUI_ListviewData *data;
66 struct TagItem *tag, *tags;
67 Object *list =
68 (Object *) GetTagData(MUIA_Listview_List, (IPTR) NULL,
69 msg->ops_AttrList);
71 if (!list)
72 return (IPTR) NULL;
74 obj = (Object *) DoSuperNewTags(cl, obj, NULL,
75 MUIA_Group_Horiz, TRUE,
76 MUIA_InnerLeft, 0,
77 MUIA_InnerRight, 0,
78 MUIA_Group_Spacing, 0,
79 Child, list,
80 TAG_MORE, msg->ops_AttrList);
82 if (!obj)
83 return (IPTR) NULL;
85 data = INST_DATA(cl, obj);
86 data->list = list;
88 // data->hook.h_Entry = HookEntry;
89 // data->hook.h_SubEntry = (HOOKFUNC) Listview_Function;
90 // data->hook.h_Data = data;
92 data->selfnotify_hook.h_Entry = HookEntry;
93 data->selfnotify_hook.h_SubEntry = (HOOKFUNC) SelfNotify_Function;
94 data->selfnotify_hook.h_Data = data;
95 data->noforward = FALSE;
97 /* parse initial taglist, forward to list */
98 for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags));)
100 switch (tag->ti_Tag)
102 case MUIA_Listview_DoubleClick:
103 case MUIA_Listview_Input:
104 case MUIA_Listview_MultiSelect:
105 case MUIA_Listview_ScrollerPos:
106 set(list, tag->ti_Tag, tag->ti_Data);
107 break;
111 // DoMethod(vert, MUIM_Notify, MUIA_Prop_First, MUIV_EveryTime, (IPTR) obj,
112 // 4, MUIM_CallHook, (IPTR) &data->hook, PROP_VERT_FIRST,
113 // MUIV_TriggerValue); FIXME
115 DoMethod(list, MUIM_Notify, MUIA_List_Active, MUIV_EveryTime,
116 (IPTR) obj, 4, MUIM_CallHook, (IPTR) &data->selfnotify_hook,
117 MUIA_List_Active, MUIV_TriggerValue);
118 DoMethod(list, MUIM_Notify, MUIA_Listview_DoubleClick, MUIV_EveryTime,
119 (IPTR) obj, 4, MUIM_CallHook, (IPTR) &data->selfnotify_hook,
120 MUIA_Listview_DoubleClick, MUIV_TriggerValue);
121 DoMethod(list, MUIM_Notify, MUIA_Listview_SelectChange, MUIV_EveryTime,
122 (IPTR) obj, 4, MUIM_CallHook, (IPTR) &data->selfnotify_hook,
123 MUIA_Listview_SelectChange, MUIV_TriggerValue);
125 return (IPTR) obj;
128 /**************************************************************************
129 OM_SET
130 **************************************************************************/
131 IPTR Listview__OM_SET(struct IClass *cl, Object *obj, struct opSet *msg)
133 struct TagItem *tag, *tags;
134 IPTR no_notify = GetTagData(MUIA_NoNotify, FALSE, msg->ops_AttrList);
135 struct MUI_ListviewData *data = INST_DATA(cl, obj);
137 if (data->noforward)
139 return DoSuperMethodA(cl, obj, (Msg) msg);
142 for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags));)
144 switch (tag->ti_Tag)
146 case MUIA_List_CompareHook:
147 case MUIA_List_ConstructHook:
148 case MUIA_List_DestructHook:
149 case MUIA_List_DisplayHook:
150 case MUIA_List_VertProp_First:
151 case MUIA_List_Format:
152 case MUIA_List_VertProp_Entries:
153 case MUIA_List_VertProp_Visible:
154 case MUIA_List_Active:
155 case MUIA_List_First:
156 case MUIA_List_Visible:
157 case MUIA_List_Entries:
158 case MUIA_List_Quiet:
159 SetAttrs(data->list, MUIA_NoNotify, no_notify, tag->ti_Tag,
160 tag->ti_Data, TAG_DONE);
161 break;
165 return DoSuperMethodA(cl, obj, (Msg) msg);
168 /**************************************************************************
169 OM_GET
170 **************************************************************************/
171 IPTR Listview__OM_GET(struct IClass *cl, Object *obj, struct opGet *msg)
173 /* small macro to simplify return value storage */
174 #define STORE *(msg->opg_Storage)
175 struct MUI_ListviewData *data = INST_DATA(cl, obj);
177 switch (msg->opg_AttrID)
179 case MUIA_List_CompareHook:
180 case MUIA_List_ConstructHook:
181 case MUIA_List_DestructHook:
182 case MUIA_List_DisplayHook:
183 case MUIA_List_VertProp_First:
184 case MUIA_List_Format:
185 case MUIA_List_VertProp_Entries:
186 case MUIA_List_VertProp_Visible:
187 case MUIA_List_Active:
188 case MUIA_List_First:
189 case MUIA_List_Visible:
190 case MUIA_List_Entries:
191 case MUIA_List_Quiet:
192 case MUIA_Listview_ClickColumn:
193 case MUIA_Listview_DoubleClick:
194 case MUIA_Listview_SelectChange:
195 return GetAttr(msg->opg_AttrID, data->list, msg->opg_Storage);
197 case MUIA_Listview_List:
198 STORE = (IPTR) data->list;
199 return 1;
202 return DoSuperMethodA(cl, obj, (Msg) msg);
203 #undef STORE
206 BOOPSI_DISPATCHER(IPTR, Listview_Dispatcher, cl, obj, msg)
208 switch (msg->MethodID)
210 case OM_SET:
211 return Listview__OM_SET(cl, obj, (struct opSet *)msg);
212 case OM_GET:
213 return Listview__OM_GET(cl, obj, (struct opGet *)msg);
214 case OM_NEW:
215 return Listview__OM_NEW(cl, obj, (struct opSet *)msg);
216 case MUIM_List_Clear:
217 case MUIM_List_CreateImage:
218 case MUIM_List_DeleteImage:
219 case MUIM_List_Exchange:
220 case MUIM_List_GetEntry:
221 case MUIM_List_Insert:
222 case MUIM_List_InsertSingle:
223 case MUIM_List_Jump:
224 case MUIM_List_NextSelected:
225 case MUIM_List_Redraw:
226 case MUIM_List_Remove:
227 case MUIM_List_Select:
228 case MUIM_List_Sort:
229 case MUIM_List_TestPos:
231 struct MUI_ListviewData *data = INST_DATA(cl, obj);
233 return DoMethodA(data->list, msg);
238 return DoSuperMethodA(cl, obj, msg);
240 BOOPSI_DISPATCHER_END
243 * Class descriptor.
245 const struct __MUIBuiltinClass _MUI_Listview_desc =
247 MUIC_Listview,
248 MUIC_Group,
249 sizeof(struct MUI_ListviewData),
250 (void *) Listview_Dispatcher