2 #include <proto/intuition.h>
3 #include <proto/muimaster.h>
4 #include <proto/utility.h>
6 #include <libraries/mui.h>
7 #include <libraries/gadtools.h>
9 #include "muimiamipanel_intern.h"
10 #include "muimiamipanel_locale.h"
12 #include <mui/TheBar_mcc.h>
14 /***********************************************************************/
16 struct MiamiPanelMGroupClass_DATA
23 struct MPS_TinyPrefs prefs
;
28 struct MUI_EventHandlerNode eh
;
44 /***********************************************************************/
61 static ULONG buttonsIDs
[] =
63 MSG_Button_Show
, MSG_Button_Show_Help
,
64 MSG_Button_Hide
, MSG_Button_Hide_Help
,
65 MSG_Button_Quit
, MSG_Button_Quit_Help
68 static struct MUIS_TheBar_Button buttons
[] =
76 static struct MiamiPanelBase_intern
*MiamiPanelBaseIntern
;
79 MUIPC_MGroup__OM_NEW(struct IClass
*CLASS
,Object
*self
,struct opSet
*message
)
81 struct TagItem
*attrs
= message
->ops_AttrList
;
82 Object
*ifGroup
, *ifList
;
83 struct MPS_Prefs
*prefs
= (struct MPS_Prefs
*)GetTagData(MPA_Prefs
,NULL
,attrs
);
84 ULONG show
= GetTagData(MPA_Show
,MIAMIPANELV_Init_Flags_Control
,attrs
);
86 if (self
= (Object
*)DoSuperNewTags
90 MUIA_Group_Horiz
, !(prefs
->layout
& MPV_Layout_Horiz
),
91 Child
, ifGroup
= ScrollgroupObject
,
92 MUIA_ShortHelp
, __(MSG_IFGroup_Help
),
93 MUIA_CycleChain
, TRUE
,
94 MUIA_Scrollgroup_FreeHoriz
, FALSE
,
95 MUIA_Scrollgroup_UseWinBorder
, TRUE
,
96 MUIA_Scrollgroup_Contents
, (ifList
= NewObject(MiamiPanelBaseIntern
->mpb_ifGroupClass
->mcc_Class
, NULL
,
103 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
105 data
->ifGroup
= ifGroup
;
106 data
->ifList
= ifList
;
108 if ((show
& MIAMIPANELV_Init_Flags_Control
) &&
109 (data
->bar
= TheBarVirtObject
,
110 MUIA_Group_Horiz
, prefs
->layout
& MPV_Layout_Horiz
,
111 MUIA_TheBar_ViewMode
, prefs
->viewMode
,
112 MUIA_TheBar_LabelPos
, prefs
->labelPos
,
113 MUIA_TheBar_BarPos
, prefs
->barLayout
,
114 MUIA_TheBar_Borderless
, prefs
->btflags
& MPV_BTFlags_Borderless
,
115 MUIA_TheBar_Raised
, prefs
->btflags
& MPV_BTFlags_Raised
,
116 MUIA_TheBar_Sunny
, prefs
->btflags
& MPV_BTFlags_Sunny
,
117 MUIA_TheBar_Scaled
, prefs
->btflags
& MPV_BTFlags_Scaled
,
118 MUIA_TheBar_EnableKeys
, prefs
->btflags
& MPV_BTFlags_Underscore
,
119 MUIA_TheBar_DragBar
, prefs
->btflags
& MPV_BTFlags_DragBar
,
120 MUIA_TheBar_Frame
, prefs
->btflags
& MPV_BTFlags_Frame
,
121 MUIA_TheBar_Buttons
, buttons
,
122 MUIA_TheBar_PicsDrawer
, "Miami:Libs/Pics",
123 MUIA_TheBar_Pics
, pics
,
126 DoSuperMethod(CLASS
,self
,OM_ADDMEMBER
,(ULONG
)data
->bar
);
128 if (prefs
->layout
& (MPV_Layout_Left
|MPV_Layout_PureTop
))
129 DoSuperMethod(CLASS
,self
,MUIM_Group_Sort
,(ULONG
)data
->bar
,(ULONG
)data
->ifGroup
,NULL
);
131 DoMethod(data
->bar
,MUIM_TheBar_DoOnButton
,B_SHOW
,MUIM_Notify
,
132 MUIA_Pressed
,FALSE
,MUIV_Notify_Application
,2,MPM_Miami
,MPV_Miami_Show
);
134 DoMethod(data
->bar
,MUIM_TheBar_DoOnButton
,B_HIDE
,MUIM_Notify
,
135 MUIA_Pressed
,FALSE
,MUIV_Notify_Application
,2,MPM_Miami
,MPV_Miami_Hide
);
137 DoMethod(data
->bar
,MUIM_TheBar_DoOnButton
,B_QUIT
,MUIM_Notify
,
138 MUIA_Pressed
,FALSE
,MUIV_Notify_Application
,2,MPM_Miami
,MPV_Miami_Quit
);
141 get(data
->ifGroup
,MUIA_Scrollgroup_VertBar
,&data
->scrollBar
);
142 if (prefs
->flags
& MPV_Flags_BWin
)
144 data
->flags
|= FLG_BWin
;
145 set(data
->scrollBar
,MUIA_ShowMe
,FALSE
);
148 CopyMem(prefs
,&data
->prefs
,sizeof(data
->prefs
));
154 /***********************************************************************/
157 MUIPC_MGroup__MUIM_Setup(struct IClass
*CLASS
,Object
*self
,Msg message
)
159 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
161 if (!DoSuperMethodA(CLASS
,self
,(Msg
)message
)) return FALSE
;
162 set(_win(self
),MUIA_Window_DefaultObject
,data
->ifGroup
);
167 /***********************************************************************/
172 isMouseOnBorder(struct Window
*window
)
174 if (window
->MouseX
<0 || window
->MouseY
<0 || window
->MouseX
>window
->Width
-1 || window
->MouseY
>window
->Height
-1) return FALSE
;
176 if (window
->MouseY
>0 && window
->MouseY
< window
->BorderTop
) return TRUE
;
177 if (window
->MouseY
>window
->Height
-window
->BorderBottom
-1 && window
->MouseY
<window
->Height
) return TRUE
;
179 if (window
->MouseX
>0 && window
->MouseX
<window
->BorderLeft
) return TRUE
;
180 if (window
->MouseX
>window
->Width
-window
->BorderRight
-1 && window
->MouseX
<window
->Width
) return TRUE
;
185 M_HOOK(trans
,struct Window
*window
,struct TransparencyMessage
*message
)
187 struct MiamiPanelMGroupClass_DATA
*data
= hook
->h_Data
;
188 struct Rectangle rect
;
191 /* use transp only when window is active */
192 if (!(window
->Flags
& WFLG_WINDOWACTIVE
)) return 0;
194 /* use transp only when pointer NOT on border */
195 if (isMouseOnBorder(window
)) return 0;
197 b
= (data
->flags
& FLG_BWin
) ? 1 : 0;
199 /* make top border transparent */
202 rect
.MaxX
= window
->Width
- 1;
203 rect
.MaxY
= window
->BorderTop
+ b
;
205 OrRectRegion(message
->Region
,&rect
);
209 rect
.MinY
= window
->BorderTop
;
210 rect
.MaxX
= window
->BorderLeft
- 1 + b
;
211 rect
.MaxY
= window
->Height
- window
->BorderBottom
- 1;
213 OrRectRegion(message
->Region
,&rect
);
216 rect
.MinX
= window
->Width
- window
->BorderRight
- b
;
217 rect
.MinY
= window
->BorderTop
;
218 rect
.MaxX
= window
->Width
- 1;
219 rect
.MaxY
= window
->Height
- window
->BorderBottom
- 1;
221 OrRectRegion(message
->Region
,&rect
);
225 rect
.MinY
= window
->Height
- window
->BorderBottom
- b
;
226 rect
.MaxX
= window
->Width
- 1;
227 rect
.MaxY
= window
->Height
- 1;
229 OrRectRegion(message
->Region
,&rect
);
235 switchTransparency(struct IClass
*CLASS
,Object
*self
,struct MiamiPanelMGroupClass_DATA
*data
,ULONG use
)
237 struct TagItem tags
[] = {{TRANSPCONTROL_REGIONHOOK
,0},{TAG_DONE
,0}};
241 if (!(data
->flags
& FLG_Handler
))
243 trans_hook
.h_Data
= data
;
245 tags
[0].ti_Data
= (ULONG
)&trans_hook
;
246 TransparencyControl(data
->win
,TRANSPCONTROLMETHOD_INSTALLREGIONHOOK
,tags
);
248 memset(&data
->eh
,0,sizeof(data
->eh
));
249 data
->eh
.ehn_Class
= CLASS
;
250 data
->eh
.ehn_Object
= self
;
251 data
->eh
.ehn_Events
= IDCMP_INTUITICKS
;
252 DoMethod(_win(self
),MUIM_Window_AddEventHandler
,(ULONG
)&data
->eh
);
254 data
->flags
|= FLG_Handler
;
259 if (MiamiPanelMGroupClass_DATA
->flags
& FLG_Handler
)
261 DoMethod(_win(self
),MUIM_Window_RemEventHandler
,(ULONG
)&data
->eh
);
263 TransparencyControl(data
->win
,TRANSPCONTROLMETHOD_INSTALLREGIONHOOK
,tags
);
265 data
->flags
&= ~FLG_Handler
;
271 MUIPC_MGroup__MUIM_Show(struct IClass
*CLASS
,Object
*self
,Msg message
)
273 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
275 if (!DoSuperMethodA(CLASS
,self
,(Msg
)message
)) return FALSE
;
277 get(_win(self
),MUIA_Window_Window
,&data
->win
);
278 data
->flags
|= FLG_Visible
;
280 switchTransparency(CLASS
,self
,data
,data
->prefs
.flags
& MPV_Flags_UseTransparency
);
286 MUIPC_MGroup__MUIM_Hide(struct IClass
*CLASS
,Object
*self
,Msg message
)
288 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
290 switchTransparency(CLASS
,self
,data
,FALSE
);
292 data
->flags
&= ~FLG_Visible
;
294 return DoSuperMethodA(CLASS
,self
,(Msg
)message
);
298 MUIPC_MGroup__MUIM_HandleEvent(struct IClass
*CLASS
,Object
*self
,struct MUIP_HandleEvent
*message
)
300 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
302 if (data
->flags
& FLG_Handler
)
306 if (!BOOLSAME(b
= isMouseOnBorder(data
->win
),data
->flags
& FLG_Border
))
308 if (b
) data
->flags
|= FLG_Border
;
309 else data
->flags
&= ~FLG_Border
;
311 TransparencyControl(data
->win
,TRANSPCONTROLMETHOD_UPDATETRANSPARENCY
,NULL
);
319 /***********************************************************************/
322 MUIPC_MGroup__OM_SET(struct IClass
*CLASS
,Object
*self
,struct opSet
*message
)
324 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
325 register struct TagItem
*tag
;
326 struct TagItem
*tstate
;
328 register ULONG res
, win
= FALSE
;
331 for (tstate
= message
->ops_AttrList
; tag
= NextTagItem(&tstate
); )
333 register ULONG tidata
= tag
->ti_Data
;
338 if (memcmp(&data
->prefs
,PREFS(tidata
),sizeof(data
->prefs
)))
342 ULONG layoutChanged
= data
->prefs
.layout
!=PREFS(tidata
)->layout
;
346 DoSuperMethod(CLASS
,self
,MUIM_Group_InitChange
);
348 SetSuperAttrs(CLASS
,self
,MUIA_Group_Horiz
,!(PREFS(tidata
)->layout
& MPV_Layout_Horiz
),TAG_DONE
);
350 if (PREFS(tidata
)->layout
& (MPV_Layout_Left
|MPV_Layout_PureTop
))
351 DoSuperMethod(CLASS
,self
,MUIM_Group_Sort
,(ULONG
)data
->bar
,(ULONG
)data
->ifGroup
,NULL
);
352 else DoSuperMethod(CLASS
,self
,MUIM_Group_Sort
,(ULONG
)data
->ifGroup
,(ULONG
)data
->bar
,NULL
);
355 if (layoutChanged
|| memcmp(&data
->prefs
.barLayout
,&PREFS(tidata
)->barLayout
,sizeof(ULONG
)*4))
357 DoMethod(data
->bar
,MUIM_Group_InitChange
);
359 SetAttrs(data
->bar
,MUIA_Group_Horiz
, PREFS(tidata
)->layout
& MPV_Layout_Horiz
,
360 MUIA_TheBar_BarPos
, PREFS(tidata
)->barLayout
,
361 MUIA_TheBar_ViewMode
, PREFS(tidata
)->viewMode
,
362 MUIA_TheBar_LabelPos
, PREFS(tidata
)->labelPos
,
363 MUIA_TheBar_Borderless
, PREFS(tidata
)->btflags
& MPV_BTFlags_Borderless
,
364 MUIA_TheBar_Sunny
, PREFS(tidata
)->btflags
& MPV_BTFlags_Sunny
,
365 MUIA_TheBar_Raised
, PREFS(tidata
)->btflags
& MPV_BTFlags_Raised
,
366 MUIA_TheBar_Scaled
, PREFS(tidata
)->btflags
& MPV_BTFlags_Scaled
,
367 MUIA_TheBar_EnableKeys
, PREFS(tidata
)->btflags
& MPV_BTFlags_Underscore
,
368 MUIA_TheBar_Frame
, PREFS(tidata
)->btflags
& MPV_BTFlags_Frame
,
369 MUIA_TheBar_DragBar
, PREFS(tidata
)->btflags
& MPV_BTFlags_DragBar
,
372 DoMethod(data
->bar
,MUIM_Group_ExitChange
);
375 if (layoutChanged
) DoSuperMethod(CLASS
,self
,MUIM_Group_ExitChange
);
378 if (PREFS(tidata
)->flags
& MPV_Flags_BWin
) data
->flags
|= FLG_BWin
;
379 else data
->flags
&= ~FLG_BWin
;
382 if ((data
->flags
& FLG_Visible
) && !BOOLSAME(PREFS(tidata
)->flags
& MPV_Flags_UseTransparency
,data
->prefs
.flags
& MPV_Flags_UseTransparency
))
383 if (PREFS(tidata
)->flags
& MPV_Flags_UseTransparency
) win
= TRUE
;
384 else switchTransparency(CLASS
,self
,data
,FALSE
);
387 CopyMem(PREFS(tidata
),&data
->prefs
,sizeof(data
->prefs
));
392 set(data
->scrollBar
,MUIA_ShowMe
,tidata
);
398 res
= DoSuperMethodA(CLASS
,self
,(Msg
)message
);
402 DoMethod(_app(self
),MUIM_Application_PushMethod
,(ULONG
)_win(self
),3,MUIM_Set
,MUIA_Window_Open
,FALSE
);
403 DoMethod(_app(self
),MUIM_Application_PushMethod
,(ULONG
)_win(self
),3,MUIM_Set
,MUIA_Window_Open
,TRUE
);
404 DoMethod(_app(self
),MUIM_Application_PushMethod
,(ULONG
)_win(self
),3,MUIM_Set
,MUIA_Window_Activate
,TRUE
);
405 DoMethod(_app(self
),MUIM_Application_PushMethod
,(ULONG
)self
,1,MPM_MGroup_UpdateTransparency
);
410 return DoSuperMethodA(CLASS
,self
,(Msg
)message
);
414 /***********************************************************************/
418 MUIPC_MGroup__MUIM_DragQuery(struct IClass
*CLASS
,Object
*self
,struct MUIP_DragQuery
*message
)
420 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
422 if (message
->obj
!=data
->bar
) return MUIV_DragQuery_Refuse
;
424 return MUIV_DragQuery_Accept
;
427 /***********************************************************************/
430 MUIPC_MGroup__MUIM_DragBegin(struct IClass
*CLASS
,Object
*self
,Msg message
)
432 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
434 data
->layout
= data
->prefs
.layout
;
435 set(data
->ifList
,MPA_SkipBar
,TRUE
);
440 /***********************************************************************/
443 MUIPC_MGroup__MUIM_DragReport(struct IClass
*CLASS
,Object
*self
,struct MUIP_DragReport
*message
)
445 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
447 LONG x
, y
, l
, t
, r
, b
, w
, h
;
449 if (!message
->update
) return MUIV_DragReport_Refresh
;
459 w
= _mwidth(self
)/DD_FACT
;
460 h
= _mheight(self
)/DD_FACT
;
464 switch (data
->prefs
.layout
)
466 case MPV_Layout_Left
:
467 if (x
<l
+w
) layout
= MPV_Layout_Left
;
468 else if (y
<t
+h
) layout
= MPV_Layout_Top
;
469 else if (y
>b
-h
) layout
= MPV_Layout_Bottom
;
470 else if (x
>r
-w
) layout
= MPV_Layout_Right
;
473 case MPV_Layout_Right
:
474 if (x
>r
-w
) layout
= MPV_Layout_Right
;
475 else if (y
<t
+h
) layout
= MPV_Layout_Top
;
476 else if (y
>b
-h
) layout
= MPV_Layout_Bottom
;
477 else if (x
<l
+w
) layout
= MPV_Layout_Left
;
481 if (y
<t
+h
) layout
= MPV_Layout_Top
;
482 else if (y
>b
-h
) layout
= MPV_Layout_Bottom
;
483 else if (x
<l
+w
) layout
= MPV_Layout_Left
;
484 else if (x
>r
-w
) layout
= MPV_Layout_Right
;
485 else data
->layout
= 0;
488 case MPV_Layout_Bottom
:
489 if (y
>b
-h
) layout
= MPV_Layout_Bottom
;
490 else if (y
<t
+h
) layout
= MPV_Layout_Top
;
491 else if (x
<l
+w
) layout
= MPV_Layout_Left
;
492 else if (x
>r
-w
) layout
= MPV_Layout_Right
;
493 else data
->layout
= 0;
497 if (!layout
) return MUIV_DragReport_Abort
;
499 if (data
->prefs
.layout
!=layout
)
501 set(data
->bar
,MUIA_TheBar_Limbo
,TRUE
);
502 DoSuperMethod(CLASS
,self
,MUIM_Group_InitChange
);
504 SetSuperAttrs(CLASS
,self
,MUIA_Group_Horiz
,!(layout
& MPV_Layout_Horiz
),TAG_DONE
);
505 set(data
->bar
,MUIA_Group_Horiz
,layout
& MPV_Layout_Horiz
);
507 if (layout
& (MPV_Layout_Left
|MPV_Layout_PureTop
))
508 DoSuperMethod(CLASS
,self
,MUIM_Group_Sort
,(ULONG
)data
->bar
,(ULONG
)data
->ifGroup
,NULL
);
509 else DoSuperMethod(CLASS
,self
,MUIM_Group_Sort
,(ULONG
)data
->ifGroup
,(ULONG
)data
->bar
,NULL
);
511 DoSuperMethod(CLASS
,self
,MUIM_Group_ExitChange
);
512 set(data
->bar
,MUIA_TheBar_Limbo
,FALSE
);
514 if (!BOOLSAME(data
->prefs
.layout
& MPV_Layout_Horiz
,layout
& MPV_Layout_Horiz
))
515 data
->flags
|= FLG_Special
;
516 data
->prefs
.layout
= layout
;
518 return MUIV_DragReport_Abort
;
521 return MUIV_DragReport_Continue
;
524 /***********************************************************************/
527 MUIPC_MGroup__MUIM_DragFinish(struct IClass
*CLASS
,Object
*self
,struct MUIP_DragFinish
*message
)
529 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
531 if (data
->flags
& FLG_Special
)
533 DoSuperMethod(CLASS
,self
,MUIM_Group_InitChange
);
534 DoSuperMethod(CLASS
,self
,MUIM_Group_ExitChange
);
535 data
->flags
&= ~FLG_Special
;
541 /***********************************************************************/
544 MUIPC_MGroup__MUIM_DragDrop(struct IClass
*CLASS
,Object
*self
,struct MUIP_DragDrop
*message
)
546 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
548 if (data
->prefs
.layout
!=data
->layout
)
550 struct MPS_Prefs prefs
, *p
;
551 Object
*app
= _app(self
);
553 get(app
,MPA_Prefs
,&p
);
554 CopyMem(p
,&prefs
,sizeof(prefs
));
555 prefs
.layout
= data
->prefs
.layout
;
556 SetAttrs(app
,MPA_Prefs
,(ULONG
)&prefs
,MPA_OneWay
,TRUE
,MPA_NoIfList
,TRUE
,TAG_DONE
);
559 set(data
->ifList
,MPA_SkipBar
,FALSE
);
564 /***********************************************************************/
567 MUIPC_MGroup__MPM_MGroup_GrabIFList(struct IClass
*CLASS
,Object
*self
,Msg message
)
569 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
571 return DoMethod(data
->ifList
,MPM_IfGroup_GrabIFList
);
574 /***********************************************************************/
578 MUIPC_MGroup__MPM_MGroup_UpdateTransparency(struct IClass
*CLASS
,Object
*self
,Msg message
)
580 struct MiamiPanelMGroupClass_DATA
*data
= INST_DATA(CLASS
,self
);
582 TransparencyControl(data
->win
,TRANSPCONTROLMETHOD_UPDATETRANSPARENCY
,NULL
);
587 /***********************************************************************/
589 BOOPSI_DISPATCHER(IPTR
, MUIPC_MGroup_Dispatcher
, CLASS
, self
, message
)
591 switch(message
->MethodID
)
593 case OM_NEW
: return MUIPC_MGroup__OM_NEW(CLASS
,self
,(APTR
)message
);
594 case OM_SET
: return MUIPC_MGroup__OM_SET(CLASS
,self
,(APTR
)message
);
595 case MUIM_Setup
: return MUIPC_MGroup__MUIM_Setup(CLASS
,self
,(APTR
)message
);
598 case MUIM_Show
: return MUIPC_MGroup__MUIM_Show(CLASS
,self
,(APTR
)message
);
599 case MUIM_Hide
: return MUIPC_MGroup__MUIM_Hide(CLASS
,self
,(APTR
)message
);
600 case MUIM_HandleEvent
: return MUIPC_MGroup__MUIM_HandleEvent(CLASS
,self
,(APTR
)message
);
603 case MUIM_DragQuery
: return MUIPC_MGroup__MUIM_DragQuery(CLASS
,self
,(APTR
)message
);
604 case MUIM_DragBegin
: return MUIPC_MGroup__MUIM_DragBegin(CLASS
,self
,(APTR
)message
);
605 case MUIM_DragDrop
: return MUIPC_MGroup__MUIM_DragDrop(CLASS
,self
,(APTR
)message
);
606 case MUIM_DragReport
: return MUIPC_MGroup__MUIM_DragReport(CLASS
,self
,(APTR
)message
);
607 case MUIM_DragFinish
: return MUIPC_MGroup__MUIM_DragFinish(CLASS
,self
,(APTR
)message
);
609 case MPM_MGroup_GrabIFList
: return MUIPC_MGroup__MPM_MGroup_GrabIFList(CLASS
,self
,(APTR
)message
);
611 case MPM_MGroup_UpdateTransparency
: return MUIPC_MGroup__MPM_MGroup_UpdateTransparency(CLASS
,self
,(APTR
)message
);
614 default: return DoSuperMethodA(CLASS
,self
,message
);
618 BOOPSI_DISPATCHER_END
620 /***********************************************************************/
623 MUIPC_MGroup_ClassInit(struct MiamiPanelBase_intern
*MiamiPanelBase
)
625 MiamiPanelBaseIntern
= MiamiPanelBase
;
626 if (MiamiPanelBaseIntern
->mpb_mgroupClass
= MUI_CreateCustomClass(NULL
, MUIC_Group
, NULL
, sizeof(struct MiamiPanelMGroupClass_DATA
), MUIPC_MGroup_Dispatcher
))
628 localizeButtonsBar(buttons
,buttonsIDs
);
636 /***********************************************************************/