Tabs to spaces, more consistent formatting.
[AROS.git] / workbench / libs / muimaster / classes / popscreen.c
blob46d26d3230cb7efb1ea0c90e105867abec892ad9
1 /*
2 Copyright © 2002-2003, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define MUIMASTER_YES_INLINE_STDARG
8 #include <exec/memory.h>
9 #include <clib/alib_protos.h>
10 #include <proto/exec.h>
11 #include <proto/dos.h>
12 #include <proto/utility.h>
13 #include <proto/intuition.h>
14 #include <proto/muimaster.h>
16 #include <string.h>
17 #include <stdio.h>
19 #include "mui.h"
20 #include "muimaster_intern.h"
21 #include "support.h"
22 #include "support_classes.h"
23 #include "debug.h"
24 #include "popscreen_private.h"
26 extern struct Library *MUIMasterBase;
28 LONG PopscreenStrObjFunc(struct Hook *hook, Object *popup, Object *str)
30 struct Popscreen_DATA *data = (struct Popscreen_DATA *)hook->h_Data;
31 struct List *pubscrlist;
32 struct PubScreenNode *pubscrnode;
33 STRPTR strtext = NULL, listentry;
34 LONG index;
36 DoMethod(data->list, MUIM_List_Clear);
38 pubscrlist = LockPubScreenList();
39 ForeachNode(pubscrlist, pubscrnode)
41 DoMethod(data->list, MUIM_List_InsertSingle,
42 (IPTR) pubscrnode->psn_Node.ln_Name, MUIV_List_Insert_Bottom);
44 UnlockPubScreenList();
46 get(str, MUIA_String_Contents, &strtext);
48 for (index = 0;; index++)
50 DoMethod(data->list, MUIM_List_GetEntry, index, (IPTR) & listentry);
52 if (!listentry)
54 set(data->list, MUIA_List_Active,
55 strtext[0] ? MUIV_List_Active_Off : 0);
56 break;
59 if (stricmp(strtext, listentry) == 0)
61 set(data->list, MUIA_List_Active, index);
62 break;
66 return TRUE;
69 void PopscreenObjStrFunc(struct Hook *hook, Object *popup, Object *str)
71 STRPTR listentry;
73 DoMethod(popup, MUIM_List_GetEntry, MUIV_List_GetEntry_Active,
74 (IPTR) & listentry);
76 if (listentry)
78 set(str, MUIA_String_Contents, listentry);
82 IPTR Popscreen__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
84 Object *lv, *list;
86 obj = (Object *) DoSuperNewTags
87 (cl, obj, NULL,
88 MUIA_Popobject_Object, (IPTR) (lv = (Object *) ListviewObject,
89 MUIA_Listview_List, (IPTR) (list = (Object *) ListObject,
90 InputListFrame,
91 End),
92 End),
93 TAG_MORE, (IPTR) msg->ops_AttrList);
95 if (obj)
97 struct Popscreen_DATA *data = INST_DATA(cl, obj);
99 data->list = list;
101 data->strobj_hook.h_Entry = HookEntry;
102 data->strobj_hook.h_SubEntry = (HOOKFUNC) PopscreenStrObjFunc;
103 data->strobj_hook.h_Data = data;
105 data->objstr_hook.h_Entry = HookEntry;
106 data->objstr_hook.h_SubEntry = (HOOKFUNC) PopscreenObjStrFunc;
107 data->objstr_hook.h_Data = data;
109 SetAttrs(obj, MUIA_Popobject_StrObjHook, (IPTR) & data->strobj_hook,
110 MUIA_Popobject_ObjStrHook, (IPTR) & data->objstr_hook,
111 TAG_DONE);
113 DoMethod(lv, MUIM_Notify, MUIA_Listview_DoubleClick, TRUE,
114 (IPTR) obj, 2, MUIM_Popstring_Close, TRUE);
117 return (IPTR) obj;
120 #if ZUNE_BUILTIN_POPSCREEN
121 BOOPSI_DISPATCHER(IPTR, Popscreen_Dispatcher, cl, obj, msg)
123 switch (msg->MethodID)
125 case OM_NEW:
126 return Popscreen__OM_NEW(cl, obj, (struct opSet *)msg);
127 default:
128 return DoSuperMethodA(cl, obj, msg);
131 BOOPSI_DISPATCHER_END
133 const struct __MUIBuiltinClass _MUI_Popscreen_desc =
135 MUIC_Popscreen,
136 MUIC_Popobject,
137 sizeof(struct Popscreen_DATA),
138 (void *) Popscreen_Dispatcher
140 #endif /* ZUNE_BUILTIN_POPSCREEN */