Tabs to spaces, more consistent formatting.
[AROS.git] / workbench / libs / muimaster / classes / poppen.c
blob5b0b8cfe8d86c29bc55c800502c93dd0c684707d
1 /*
2 Copyright © 2002-2003, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define MUIMASTER_YES_INLINE_STDARG
8 #include <clib/alib_protos.h>
9 #include <proto/exec.h>
10 #include <proto/graphics.h>
11 #include <proto/utility.h>
12 #include <proto/intuition.h>
13 #include <proto/muimaster.h>
15 #include "mui.h"
16 #include "muimaster_intern.h"
17 #include "support.h"
18 #include "support_classes.h"
19 #include "poppen_private.h"
21 extern struct Library *MUIMasterBase;
24 IPTR Poppen__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
26 struct Poppen_DATA *data;
27 struct TagItem *tag, *tags;
28 //Object *image;
30 obj = (Object *) DoSuperNewTags(cl, obj, NULL,
31 ButtonFrame,
32 InnerSpacing(4, 4),
33 MUIA_Background, MUII_ButtonBack,
34 MUIA_InputMode, MUIV_InputMode_RelVerify,
35 MUIA_Draggable, TRUE, TAG_MORE, (IPTR) msg->ops_AttrList);
37 if (!obj)
38 return FALSE;
40 data = INST_DATA(cl, obj);
41 data->wintitle = NULL;
43 /* parse initial taglist */
44 for (tags = msg->ops_AttrList; (tag = NextTagItem(&tags));)
46 switch (tag->ti_Tag)
48 case MUIA_Window_Title:
49 data->wintitle = (CONST_STRPTR) tag->ti_Data;
50 break;
55 DoMethod(obj, MUIM_Notify, MUIA_Pressed, FALSE, (IPTR) obj, 1,
56 MUIM_Poppen_OpenWindow);
58 return (IPTR) obj;
61 IPTR Poppen__MUIM_Hide(struct IClass *cl, Object *obj, struct opGet *msg)
63 struct Poppen_DATA *data = INST_DATA(cl, obj);
65 if (data->wnd)
67 set(data->wnd, MUIA_Window_Open, FALSE);
68 DoMethod(_app(obj), OM_REMMEMBER, (IPTR) data->wnd);
69 MUI_DisposeObject(data->wnd);
70 data->wnd = NULL;
72 return DoSuperMethodA(cl, obj, (Msg) msg);
75 IPTR Poppen__MUIM_Poppen_OpenWindow(struct IClass *cl, Object *obj,
76 Msg msg)
78 struct Poppen_DATA *data = INST_DATA(cl, obj);
80 if (!data->wnd)
82 Object *ok_button, *cancel_button;
83 char *penspec = NULL;
85 get(obj, MUIA_Pendisplay_Spec, &penspec);
87 data->wnd = (Object *)(WindowObject,
88 MUIA_Window_Title, (IPTR)data->wintitle,
89 MUIA_Window_Activate, TRUE,
90 WindowContents, (IPTR)VGroup,
91 Child, (IPTR)(data->penadjust = (Object *)PenadjustObject,
92 MUIA_CycleChain, 1,
93 MUIA_Penadjust_Spec, (IPTR)penspec,
94 End),
95 Child, (IPTR)HGroup,
96 Child, (IPTR)(ok_button =
97 MUI_MakeObject(MUIO_Button,(IPTR)"_Ok")),
98 Child, (IPTR)(cancel_button =
99 MUI_MakeObject(MUIO_Button,(IPTR)"_Cancel")),
100 End,
101 End,
102 End);
104 if (data->wnd)
106 set(ok_button, MUIA_CycleChain, 1);
107 set(cancel_button, MUIA_CycleChain, 1);
109 DoMethod(_app(obj), OM_ADDMEMBER, (IPTR) data->wnd);
111 DoMethod(ok_button, MUIM_Notify, MUIA_Pressed, FALSE,
112 (IPTR) _app(obj), 5, MUIM_Application_PushMethod,
113 (IPTR) obj, 2, MUIM_Poppen_CloseWindow, TRUE);
114 DoMethod(cancel_button, MUIM_Notify, MUIA_Pressed, FALSE,
115 (IPTR) _app(obj), 5, MUIM_Application_PushMethod,
116 (IPTR) obj, 2, MUIM_Poppen_CloseWindow, FALSE);
117 DoMethod(data->wnd, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
118 (IPTR) _app(obj), 5, MUIM_Application_PushMethod,
119 (IPTR) obj, 2, MUIM_Poppen_CloseWindow, FALSE);
123 if (data->wnd)
125 IPTR opened = FALSE;
127 set(data->wnd, MUIA_Window_Open, TRUE);
128 get(data->wnd, MUIA_Window_Open, &opened);
130 if (!opened)
132 DoMethod(obj, MUIM_Poppen_CloseWindow, FALSE);
136 return 1;
139 IPTR Poppen__MUIM_Poppen_CloseWindow(struct IClass *cl, Object *obj,
140 struct MUIP_Poppen_CloseWindow *msg)
142 struct Poppen_DATA *data = INST_DATA(cl, obj);
143 int ok = msg->ok;
145 set(data->wnd, MUIA_Window_Open, FALSE);
147 if (ok)
149 char *spec = NULL;
151 get(data->penadjust, MUIA_Penadjust_Spec, &spec);
153 set(obj, MUIA_Pendisplay_Spec, (IPTR) spec);
156 DoMethod(_app(obj), OM_REMMEMBER, (IPTR) data->wnd);
157 MUI_DisposeObject(data->wnd);
158 data->wnd = NULL;
159 data->penadjust = NULL;
160 return 1;
163 IPTR Poppen__MUIM_DisconnectParent(struct IClass *cl, Object *obj,
164 struct MUIP_DisconnectParent *msg)
166 struct Poppen_DATA *data = INST_DATA(cl, obj);
168 if (data->wnd)
169 DoMethod(obj, MUIM_Poppen_CloseWindow, FALSE);
170 return DoSuperMethodA(cl, obj, (Msg) msg);
173 #if ZUNE_BUILTIN_POPPEN
174 BOOPSI_DISPATCHER(IPTR, Poppen_Dispatcher, cl, obj, msg)
176 switch (msg->MethodID)
178 case OM_NEW:
179 return Poppen__OM_NEW(cl, obj, (struct opSet *)msg);
180 case MUIM_Hide:
181 return Poppen__MUIM_Hide(cl, obj, (APTR) msg);
182 case MUIM_Poppen_OpenWindow:
183 return Poppen__MUIM_Poppen_OpenWindow(cl, obj, (APTR) msg);
184 case MUIM_Poppen_CloseWindow:
185 return Poppen__MUIM_Poppen_CloseWindow(cl, obj, (APTR) msg);
186 case MUIM_DisconnectParent:
187 return Poppen__MUIM_DisconnectParent(cl, obj, (APTR) msg);
188 default:
189 return DoSuperMethodA(cl, obj, msg);
192 BOOPSI_DISPATCHER_END
194 const struct __MUIBuiltinClass _MUI_Poppen_desc =
196 MUIC_Poppen,
197 MUIC_Pendisplay,
198 sizeof(struct Poppen_DATA),
199 (void *) Poppen_Dispatcher
201 #endif /* ZUNE_BUILTIN_POPPEN */