Tabs to spaces, more consistent formatting.
[AROS.git] / workbench / libs / muimaster / classes / scrollbar.c
blobc8c0c204cb6533b6ef8e01411b58671059f6875a
1 /*
2 Copyright 2002-2006, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <exec/memory.h>
7 #include <intuition/icclass.h>
8 #include <intuition/gadgetclass.h>
9 #include <clib/alib_protos.h>
10 #include <proto/exec.h>
11 #include <proto/intuition.h>
12 #include <proto/utility.h>
13 #include <proto/muimaster.h>
15 #include "../datatypescache.h"
16 #include "../imspec_intern.h"
18 #include "mui.h"
19 #include "muimaster_intern.h"
20 #include "support.h"
21 #include "prefs.h"
23 #define MYDEBUG 1
24 #include "debug.h"
26 extern struct Library *MUIMasterBase;
28 struct Scrollbar_DATA
30 Object *prop;
31 Object *up_arrow;
32 Object *down_arrow;
33 int sb_pos;
37 IPTR Scrollbar__OM_NEW(struct IClass *cl, Object *obj, struct opSet *msg)
39 struct Scrollbar_DATA *data;
40 //struct TagItem *tags,*tag;
41 int horiz = GetTagData(MUIA_Group_Horiz, 0, msg->ops_AttrList);
42 int usewinborder =
43 GetTagData(MUIA_Prop_UseWinBorder, 0, msg->ops_AttrList);
44 int sb_pos = GetTagData(MUIA_Scrollbar_Type, 0, msg->ops_AttrList);
46 Object *prop =
47 MUI_NewObject(MUIC_Prop, PropFrame, MUIA_Prop_Horiz, horiz,
48 TAG_MORE, msg->ops_AttrList);
50 obj = (Object *) DoSuperNewTags(cl, obj, NULL,
51 MUIA_Group_Spacing, 0,
52 MUIA_Background, MUII_GroupBack,
53 TAG_MORE, (IPTR) msg->ops_AttrList);
54 if (!obj)
55 return FALSE;
57 data = INST_DATA(cl, obj);
58 data->prop = prop;
59 data->sb_pos = sb_pos;
61 if (!usewinborder)
63 data->up_arrow = ImageObject,
64 MUIA_Background, MUII_ButtonBack,
65 MUIA_Weight, 0,
66 ImageButtonFrame,
67 MUIA_InputMode, MUIV_InputMode_RelVerify,
68 MUIA_Image_Spec, horiz ? MUII_ArrowLeft : MUII_ArrowUp,
69 MUIA_Image_Prop, prop, End;
70 if (data->up_arrow)
72 DoMethod(data->up_arrow, MUIM_Notify, MUIA_Timer,
73 MUIV_EveryTime, (IPTR) prop, 2, MUIM_Prop_Decrease, 1);
76 data->down_arrow = ImageObject,
77 MUIA_Background, MUII_ButtonBack,
78 MUIA_Weight, 0,
79 ImageButtonFrame,
80 MUIA_InputMode, MUIV_InputMode_RelVerify,
81 MUIA_Image_Spec, horiz ? MUII_ArrowRight : MUII_ArrowDown,
82 MUIA_Image_Prop, prop, End;
83 if (data->down_arrow)
85 DoMethod(data->down_arrow, MUIM_Notify, MUIA_Timer,
86 MUIV_EveryTime, (IPTR) prop, 2, MUIM_Prop_Increase, 1);
89 switch (sb_pos)
91 case MUIV_Scrollbar_Type_Default:
92 case MUIV_Scrollbar_Type_Top:
93 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->prop);
94 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->up_arrow);
95 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->down_arrow);
96 break;
97 case MUIV_Scrollbar_Type_Bottom:
98 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->up_arrow);
99 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->down_arrow);
100 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->prop);
101 break;
102 case MUIV_Scrollbar_Type_Sym:
103 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->up_arrow);
104 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->prop);
105 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->down_arrow);
106 break;
109 else
111 _flags(obj) |= MADF_BORDERGADGET;
112 DoMethod(obj, OM_ADDMEMBER, (IPTR) data->prop);
115 return (IPTR) obj;
119 IPTR Scrollbar__MUIM_Setup(struct IClass *cl, Object *obj, Msg msg)
121 struct Scrollbar_DATA *data = INST_DATA(cl, obj);
123 if (!DoSuperMethodA(cl, obj, msg))
124 return FALSE;
126 if (!(_flags(obj) & MADF_BORDERGADGET) && !data->sb_pos)
128 switch (muiGlobalInfo(obj)->mgi_Prefs->scrollbar_arrangement)
130 case SCROLLBAR_ARRANGEMENT_TOP:
131 DoMethod(obj, MUIM_Group_Sort, (IPTR) data->prop,
132 (IPTR) data->up_arrow, (IPTR) data->down_arrow,
133 (IPTR) NULL);
134 break;
135 case SCROLLBAR_ARRANGEMENT_MIDDLE:
136 DoMethod(obj, MUIM_Group_Sort, (IPTR) data->up_arrow,
137 (IPTR) data->prop, (IPTR) data->down_arrow, (IPTR) NULL);
138 break;
139 case SCROLLBAR_ARRANGEMENT_BOTTOM:
140 DoMethod(obj, MUIM_Group_Sort, (IPTR) data->up_arrow,
141 (IPTR) data->down_arrow, (IPTR) data->prop, (IPTR) NULL);
142 break;
145 switch (muiGlobalInfo(obj)->mgi_Prefs->scrollbar_type)
147 case SCROLLBAR_TYPE_STANDARD:
148 break;
149 case SCROLLBAR_TYPE_NEWLOOK:
150 break;
151 case SCROLLBAR_TYPE_CUSTOM:
152 break;
156 return TRUE;
160 BOOPSI_DISPATCHER(IPTR, Scrollbar_Dispatcher, cl, obj, msg)
162 switch (msg->MethodID)
164 case OM_NEW:
165 return Scrollbar__OM_NEW(cl, obj, (struct opSet *)msg);
166 case MUIM_Setup:
167 return Scrollbar__MUIM_Setup(cl, obj, msg);
168 default:
169 return DoSuperMethodA(cl, obj, msg);
172 BOOPSI_DISPATCHER_END
174 const struct __MUIBuiltinClass _MUI_Scrollbar_desc =
176 MUIC_Scrollbar,
177 MUIC_Group,
178 sizeof(struct Scrollbar_DATA),
179 (void *)Scrollbar_Dispatcher