7 #define INTUITION_PRE_V36_NAMES
9 #include <exec/types.h>
10 #include <graphics/gels.h>
11 #include <graphics/rastport.h>
12 #include <intuition/classes.h>
13 #include <intuition/classusr.h>
14 #include <utility/hooks.h>
15 #include <intuition/gadgetclass.h>
16 #include <intuition/icclass.h>
17 #include <workbench/workbench.h>
18 #include <dos/dostags.h>
19 #include <dos/datetime.h>
23 #include <proto/dos.h>
24 #include <proto/exec.h>
25 #include <proto/intuition.h>
26 #include <proto/graphics.h>
27 #include <proto/utility.h>
28 #include <proto/locale.h>
30 #include <proto/scalos.h>
32 #include <clib/alib_protos.h>
35 #include <scalos/scalos.h>
36 #include <scalos/GadgetBar.h>
42 #include "scalos_structures.h"
43 #include "functions.h"
45 #include "Variables.h"
46 #include "DtImageClass.h"
47 #include "FrameImageClass.h"
48 #include "CycleGadgetClass.h"
49 #include "HistoryGadgetClass.h"
51 //----------------------------------------------------------------------------
53 struct ControlBarMember
; // forward
55 typedef void (*CBM_DISABLEFUNC
)(struct internalScaWindowTask
*, struct ControlBarMember
*);
57 struct ControlBarMember
60 struct ControlBarGadgetEntry cbm_Entry
;
61 enum SCPGadgetTypes cbm_GadgetType
;
63 Object
*cbm_NormalImage
;
64 Object
*cbm_SelectedImage
;
65 Object
*cbm_FrameImage
;
66 const struct ScalosMenuCommand
*cbm_smcom
; // for action buttons, holds pointer to MenuCommandTable entry
67 CBM_DISABLEFUNC cbm_DisableFunc
;
70 //----------------------------------------------------------------------------
72 static ULONG
ControlbarCodeFromViewMode(UBYTE ViewByType
);
73 static struct ControlBarMember
*ControlBarCreateViewByCycle(struct internalScaWindowTask
*iwt
,
74 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
75 static struct ControlBarMember
*ControlBarCreateShowModeCycle(struct internalScaWindowTask
*iwt
,
76 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
77 static struct ControlBarMember
*ControlBarCreateSeparator(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
78 static struct ControlBarMember
*ControlBarCreateActionButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
79 static struct ControlBarMember
*ControlBarCreateBackButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
80 static struct ControlBarMember
*ControlBarCreateForwardButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
81 static struct ControlBarMember
*ControlBarCreateParentButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
82 static struct ControlBarMember
*ControlBarCreateBrowseButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
83 static struct ControlBarMember
*ControlBarCreateButton(CONST_STRPTR NormalImgName
,
84 CONST_STRPTR SelectedImgName
, CONST_STRPTR DisabledImgName
,
85 ULONG GadgetID
, ULONG FallbackSysImg
, CBM_DISABLEFUNC DisableFunc
);
86 static struct ControlBarMember
*ControlBarCreateHistoryGadget(struct internalScaWindowTask
*iwt
,
87 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
);
88 static UWORD
ControlBarQueryGadgetID(struct ExtGadget
*gg
);
89 static void FreeControlBarMember(struct ControlBarMember
*Member
);
90 static struct ControlBarMember
*ControlBarFindMember(struct internalScaWindowTask
*iwt
,
92 static void ControlBarParentDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
);
93 static void ControlBarBackDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
);
94 static void ControlBarForwardDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
);
95 static void ControlBarHistoryListDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
);
96 static void ControlBarAddGadgets(struct internalScaWindowTask
*iwt
, const struct List
*CbGadgetsList
);
98 //----------------------------------------------------------------------------
100 BOOL
ControlBarAdd(struct internalScaWindowTask
*iwt
)
103 BOOL Success
= FALSE
;
105 d1(KPrintF("%s/%s/%ld: START iwt=%08lx <%s>\n", __FILE__
, __FUNC__
, __LINE__
, iwt
, iwt
->iwt_WinTitle
));
108 const struct List
*CbGadgetsList
;
111 if (iwt
->iwt_ControlBar
)
112 break; // ControlBar already present
113 if (iwt
->iwt_BackDrop
)
114 break; // no ControlBar for backdrop windows
116 if (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_MoreFlags
& WSV_MoreFlagF_NoControlBar
)
119 if (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Flags
& WSV_FlagF_BrowserMode
)
120 CbGadgetsList
= &ControlBarGadgetListBrowser
;
122 CbGadgetsList
= &ControlBarGadgetListNormal
;
124 if (IsListEmpty((struct List
*) CbGadgetsList
))
127 if (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Window
)
128 win
= iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Window
;
130 win
= iInfos
.xii_iinfos
.ii_MainWindowStruct
->ws_Window
;
132 d1(KPrintF("%s/%s/%ld: StatusBar BgPen=%ld\n", __FILE__
, __FUNC__
, __LINE__
, \
133 PalettePrefs
.pal_PensList
[PENIDX_STATUSBAR_BG
]));
135 iwt
->iwt_ControlBar
= (struct Gadget
*) SCA_NewScalosObjectTags("GadgetBar.sca",
136 GBDTA_WindowTask
, (ULONG
) iwt
,
137 GBDTA_Position
, GBPOS_Top
,
140 GA_ID
, GADGETID_CONTROLBAR
,
141 GBDTA_BGPen
, PalettePrefs
.pal_PensList
[PENIDX_STATUSBAR_BG
],
142 GBDTA_BackgroundImageName
, (ULONG
) "THEME:Window/ControlBar/Background",
147 d1(KPrintF("%s/%s/%ld: iwt_ControlBar=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ControlBar
));
148 if (NULL
== iwt
->iwt_ControlBar
)
151 ControlBarAddGadgets(iwt
, CbGadgetsList
);
153 d1(KPrintF("%s/%s/%ld: Height=%ld\n", __FILE__
, __FUNC__
, __LINE__
, Height
));
155 if (iwt
->iwt_WindowTask
.wt_Window
)
156 AddGList(iwt
->iwt_WindowTask
.wt_Window
, iwt
->iwt_ControlBar
, ~0, 1, NULL
);
158 // Layout Control bar so we can query the required height
159 DoGadgetMethod(iwt
->iwt_ControlBar
,
162 NULL
, // GadgetInfo is filled in by DoGadgetMethod
165 GetAttr(GA_Height
, (Object
*) iwt
->iwt_ControlBar
, &Height
);
167 d1(KPrintF("%s/%s/%ld: Height=%ld\n", __FILE__
, __FUNC__
, __LINE__
, Height
));
168 d1(KPrintF("%s/%s/%ld: iwt_ExtraHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
));
169 d1(KPrintF("%s/%s/%ld: iwt_InnerTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerTop
));
171 iwt
->iwt_ExtraHeight
+= Height
;
172 iwt
->iwt_InnerTop
+= iwt
->iwt_GadgetBarHeightTop
;
173 iwt
->iwt_InnerHeight
-= iwt
->iwt_InnerTop
;
175 d1(KPrintF("%s/%s/%ld: iwt_GadgetBarHeightTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_GadgetBarHeightTop
));
176 d1(KPrintF("%s/%s/%ld: iwt_ExtraHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
));
177 d1(KPrintF("%s/%s/%ld: iwt_InnerTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerTop
));
179 d1(KPrintF("%s/%s/%ld: iwt_ExtraHeight=%ld iwt_GadgetBarHeightTop=%ld\n", \
180 __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
, iwt
->iwt_GadgetBarHeightTop
));
181 d1(KPrintF("%s/%s/%ld: iwt_InnerTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerTop
));
186 d1(KPrintF("%s/%s/%ld: Success=%ld\n", __FILE__
, __FUNC__
, __LINE__
, Success
));
191 //----------------------------------------------------------------------------
193 void ControlBarRemove(struct internalScaWindowTask
*iwt
)
195 struct ControlBarMember
*Member
;
197 iwt
->iwt_HighlightedControlBarGadget
= NULL
;
199 if (iwt
->iwt_ControlBar
)
201 d1(kprintf("%s/%s/%ld: iwt_ExtraHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
));
203 if (iwt
->iwt_WindowTask
.wt_Window
)
204 RemoveGList(iwt
->iwt_WindowTask
.wt_Window
, iwt
->iwt_ControlBar
, 1);
206 d1(kprintf("%s/%s/%ld: iwt_InnerBottom=%ld iwt_SkipBottom=%ld\n", \
207 __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerBottom
, iwt
->iwt_SkipBottom
));
209 d1(KPrintF("%s/%s/%ld: iwt_GadgetBarHeightTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_GadgetBarHeightTop
));
210 d1(KPrintF("%s/%s/%ld: iwt_ExtraHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
));
211 d1(KPrintF("%s/%s/%ld: iwt_InnerTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerTop
));
213 iwt
->iwt_ExtraHeight
-= iwt
->iwt_GadgetBarHeightTop
;
214 iwt
->iwt_InnerTop
-= iwt
->iwt_GadgetBarHeightTop
;
215 iwt
->iwt_InnerHeight
+= iwt
->iwt_GadgetBarHeightTop
;
217 d1(KPrintF("%s/%s/%ld: iwt_ExtraHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_ExtraHeight
));
218 d1(KPrintF("%s/%s/%ld: iwt_InnerTop=%ld\n", __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerTop
));
220 DisposeObject((Object
*) iwt
->iwt_ControlBar
);
221 iwt
->iwt_ControlBar
= NULL
;
223 d1(kprintf("%s/%s/%ld: iwt_InnerBottom=%ld iwt_SkipBottom=%ld\n", \
224 __FILE__
, __FUNC__
, __LINE__
, iwt
->iwt_InnerBottom
, iwt
->iwt_SkipBottom
));
227 while ((Member
= (struct ControlBarMember
*) RemHead(&iwt
->iwt_ControlBarMemberList
)))
229 FreeControlBarMember(Member
);
233 //----------------------------------------------------------------------------
235 void ControlBarRebuild(struct internalScaWindowTask
*iwt
)
237 const struct List
*CbGadgetsList
;
239 d1(KPrintF("%s/%s/%ld: START iwt=%08lx <%s>\n", __FILE__
, __FUNC__
, __LINE__
, iwt
, iwt
->iwt_WinTitle
));
241 if (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Flags
& WSV_FlagF_BrowserMode
)
242 CbGadgetsList
= &ControlBarGadgetListBrowser
;
244 CbGadgetsList
= &ControlBarGadgetListNormal
;
246 if (IsListEmpty((struct List
*) CbGadgetsList
) || (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_MoreFlags
& WSV_MoreFlagF_NoControlBar
))
248 // No control bar desired for window - remove it if present
249 ControlBarRemove(iwt
);
253 if (iwt
->iwt_ControlBar
)
255 // control bar is already present - apply modifications
256 struct ControlBarMember
*Member
;
257 ULONG OldHeight
= 0, NewHeight
= 0;
258 ULONG OldHeightTop
= iwt
->iwt_GadgetBarHeightTop
;
259 ULONG OldInnerTop
= iwt
->iwt_InnerTop
;
261 iwt
->iwt_HighlightedControlBarGadget
= NULL
;
263 GetAttr(GA_Height
, (Object
*) iwt
->iwt_ControlBar
, &OldHeight
);
265 d1(KPrintF("%s/%s/%ld: OldHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, OldHeight
));
267 while ((Member
= (struct ControlBarMember
*) RemHead(&iwt
->iwt_ControlBarMemberList
)))
269 DoMethod(iwt
->iwt_WindowTask
.mt_MainObject
,
270 SCCM_IconWin_RemFromControlBar
,
273 FreeControlBarMember(Member
);
276 d1(KPrintF("%s/%s/%ld: \n", __FILE__
, __FUNC__
, __LINE__
));
278 ControlBarAddGadgets(iwt
, CbGadgetsList
);
280 d1(KPrintF("%s/%s/%ld: \n", __FILE__
, __FUNC__
, __LINE__
));
282 // Layout Control bar so we can query the required height
283 DoGadgetMethod(iwt
->iwt_ControlBar
,
284 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
286 NULL
, // GadgetInfo is filled in by DoGadgetMethod
289 d1(KPrintF("%s/%s/%ld: \n", __FILE__
, __FUNC__
, __LINE__
));
291 GetAttr(GA_Height
, (Object
*) iwt
->iwt_ControlBar
, &NewHeight
);
293 d1(KPrintF("%s/%s/%ld: NewHeight=%ld\n", __FILE__
, __FUNC__
, __LINE__
, NewHeight
));
295 if (NewHeight
!= OldHeight
)
297 iwt
->iwt_ExtraHeight
+= NewHeight
- OldHeight
;
298 iwt
->iwt_InnerTop
+= iwt
->iwt_GadgetBarHeightTop
- OldHeightTop
;
299 iwt
->iwt_InnerHeight
-= iwt
->iwt_InnerTop
- OldInnerTop
;
304 // control bar was not present - add it now
309 DoMethod(iwt
->iwt_WindowTask
.mt_WindowObject
, SCCM_Window_SetInnerSize
);
311 d1(KPrintF("%s/%s/%ld: END\n", __FILE__
, __FUNC__
, __LINE__
));
314 //----------------------------------------------------------------------------
316 void ControlBarUpdateViewMode(struct internalScaWindowTask
*iwt
, UBYTE ViewByType
)
318 struct ControlBarMember
*Member
;
320 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
321 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
322 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
324 if (SCPGadgetType_ViewBy
== Member
->cbm_GadgetType
)
326 SetGadgetAttrs((struct Gadget
*) Member
->cbm_Gadget
,
327 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
328 SCACYCLE_Active
, ControlbarCodeFromViewMode(ViewByType
),
334 //----------------------------------------------------------------------------
336 static ULONG
ControlbarCodeFromViewMode(UBYTE ViewByType
)
342 case IDTV_ViewModes_Default
:
343 if (IsViewByIcon(ViewByType
))
348 case IDTV_ViewModes_Icon
:
351 case IDTV_ViewModes_Name
:
354 case IDTV_ViewModes_Size
:
357 case IDTV_ViewModes_Date
:
360 case IDTV_ViewModes_Time
:
363 case IDTV_ViewModes_Comment
:
366 case IDTV_ViewModes_Protection
:
369 case IDTV_ViewModes_Type
:
380 //----------------------------------------------------------------------------
382 UBYTE
ControlBarViewModeFromCode(ULONG Code
)
389 ViewMode
= IDTV_ViewModes_Icon
;
392 ViewMode
= IDTV_ViewModes_Name
;
395 ViewMode
= IDTV_ViewModes_Size
;
398 ViewMode
= IDTV_ViewModes_Date
;
401 ViewMode
= IDTV_ViewModes_Time
;
404 ViewMode
= IDTV_ViewModes_Comment
;
407 ViewMode
= IDTV_ViewModes_Protection
;
410 ViewMode
= IDTV_ViewModes_Type
;
413 ViewMode
= IDTV_ViewModes_Default
;
420 //----------------------------------------------------------------------------
422 void ControlBarUpdateShowMode(struct internalScaWindowTask
*iwt
)
424 struct ControlBarMember
*Member
;
426 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
427 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
428 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
430 if (SCPGadgetType_ShowMode
== Member
->cbm_GadgetType
)
432 SetGadgetAttrs((struct Gadget
*) Member
->cbm_Gadget
,
433 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
434 SCACYCLE_Active
, IsShowAll(iwt
->iwt_WindowTask
.mt_WindowStruct
) ? 1 : 0,
440 //----------------------------------------------------------------------------
442 void ControlBarUpdateHistory(struct internalScaWindowTask
*iwt
)
444 struct ControlBarMember
*Member
;
446 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
447 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
448 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
450 if (SCPGadgetType_History
== Member
->cbm_GadgetType
)
452 SetGadgetAttrs((struct Gadget
*) Member
->cbm_Gadget
,
453 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
454 SCAHISTORY_Active
, (ULONG
) iwt
->iwt_CurrentHistoryEntry
,
460 //----------------------------------------------------------------------------
462 static struct ControlBarMember
*ControlBarCreateViewByCycle(struct internalScaWindowTask
*iwt
,
463 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
465 static const ULONG CycleLabelMsgIds
[] =
467 MSGID_CONTROLBAR_VIEWBY_ICON
,
468 MSGID_CONTROLBAR_VIEWBY_NAME
,
469 MSGID_CONTROLBAR_VIEWBY_SIZE
,
470 MSGID_CONTROLBAR_VIEWBY_DATE
,
471 MSGID_CONTROLBAR_VIEWBY_TIME
,
472 MSGID_CONTROLBAR_VIEWBY_COMMENT
,
473 MSGID_CONTROLBAR_VIEWBY_PROTECTION
,
474 MSGID_CONTROLBAR_VIEWBY_TYPE
,
476 static CONST_STRPTR CycleLabels
[1 + Sizeof(CycleLabelMsgIds
)];
477 struct ControlBarMember
*Member
;
478 BOOL Success
= FALSE
;
480 if (NULL
== CycleLabels
[0])
484 for (n
= 0; n
< Sizeof(CycleLabelMsgIds
); n
++)
485 CycleLabels
[n
] = GetLocString(CycleLabelMsgIds
[n
]);
489 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
493 Member
->cbm_NormalImage
= NULL
;
494 Member
->cbm_SelectedImage
= NULL
;
495 Member
->cbm_smcom
= NULL
; // for action buttons, holds pointer to MenuCommandTable entry
496 Member
->cbm_DisableFunc
= NULL
;
498 // Frame image is optional
499 Member
->cbm_FrameImage
= SCA_NewScalosObjectTags("FrameImage.sca",
500 FRAMEIMG_ImageName
, (ULONG
) "THEME:Window/ControlBar/ViewByCycleFrame",
502 d1(KPrintF("%s/%s/%ld: FrameImage=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Frame
));
504 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("CycleGadget.sca",
505 SCACYCLE_Labels
, (ULONG
) CycleLabels
,
506 SCACYCLE_Active
, ControlbarCodeFromViewMode(iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Viewmodes
),
507 SCACYCLE_TextFont
, (ULONG
) iInfos
.xii_iinfos
.ii_Screen
->RastPort
.Font
,
508 SCACYCLE_PopupTextFont
, (ULONG
) iInfos
.xii_iinfos
.ii_Screen
->RastPort
.Font
,
509 SCACYCLE_PopupTTFont
, CurrentPrefs
.pref_UseScreenTTFont
? (ULONG
) &ScreenTTFont
: 0,
510 Member
->cbm_FrameImage
? SCACYCLE_FrameImage
: TAG_IGNORE
, (ULONG
) Member
->cbm_FrameImage
,
514 ICA_TARGET
, ICTARGET_IDCMP
,
516 if (NULL
== Member
->cbm_Gadget
)
524 FreeControlBarMember(Member
);
531 //----------------------------------------------------------------------------
533 static struct ControlBarMember
*ControlBarCreateShowModeCycle(struct internalScaWindowTask
*iwt
,
534 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
536 static const ULONG ShowModeLabelMsgIds
[] =
538 MSGID_CONTROLBAR_SHOW_ONLYICONS
,
539 MSGID_CONTROLBAR_SHOW_ALLFILES
,
541 static CONST_STRPTR ShowModeLabels
[1 + Sizeof(ShowModeLabelMsgIds
)];
542 struct ControlBarMember
*Member
;
543 BOOL Success
= FALSE
;
545 if (NULL
== ShowModeLabels
[0])
549 for (n
= 0; n
< Sizeof(ShowModeLabelMsgIds
); n
++)
550 ShowModeLabels
[n
] = GetLocString(ShowModeLabelMsgIds
[n
]);
554 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
558 Member
->cbm_NormalImage
= NULL
;
559 Member
->cbm_SelectedImage
= NULL
;
560 Member
->cbm_smcom
= NULL
; // for action buttons, holds pointer to MenuCommandTable entry
561 Member
->cbm_DisableFunc
= NULL
;
563 // Frame image is optional
564 Member
->cbm_FrameImage
= SCA_NewScalosObjectTags("FrameImage.sca",
565 FRAMEIMG_ImageName
, (ULONG
) "THEME:Window/ControlBar/ShowModeCycleFrame",
567 d1(KPrintF("%s/%s/%ld: FrameImage=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Frame
));
569 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("CycleGadget.sca",
570 SCACYCLE_Labels
, (ULONG
) ShowModeLabels
,
571 SCACYCLE_Active
, IsShowAll(iwt
->iwt_WindowTask
.mt_WindowStruct
) ? 1 : 0,
572 SCACYCLE_TextFont
, (ULONG
) iInfos
.xii_iinfos
.ii_Screen
->RastPort
.Font
,
573 SCACYCLE_PopupTextFont
, (ULONG
) iInfos
.xii_iinfos
.ii_Screen
->RastPort
.Font
,
574 SCACYCLE_PopupTTFont
, CurrentPrefs
.pref_UseScreenTTFont
? (ULONG
) &ScreenTTFont
: 0,
575 Member
->cbm_FrameImage
? SCACYCLE_FrameImage
: TAG_IGNORE
, (ULONG
) Member
->cbm_FrameImage
,
579 ICA_TARGET
, ICTARGET_IDCMP
,
581 if (NULL
== Member
->cbm_Gadget
)
589 FreeControlBarMember(Member
);
596 //----------------------------------------------------------------------------
598 static struct ControlBarMember
*ControlBarCreateSeparator(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
600 struct ControlBarMember
*Member
;
601 BOOL Success
= FALSE
;
604 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
608 memset(Member
, 0, sizeof(struct ControlBarMember
));
610 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("SeparatorGadget.sca",
613 GA_BottomBorder
, TRUE
,
619 if (NULL
== Member
->cbm_Gadget
)
622 Member
->cbm_DisableFunc
= NULL
;
629 FreeControlBarMember(Member
);
636 //----------------------------------------------------------------------------
638 static struct ControlBarMember
*ControlBarCreateActionButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
640 struct ControlBarMember
*Member
= NULL
;
641 BOOL Success
= FALSE
;
643 d1(KPrintF("%s/%s/%ld: START cgy_Action=<%s>\n", __FILE__
, __FUNC__
, __LINE__
, cgy
->cgy_Action
));
647 const struct ScalosMenuCommand
*smcom
= NULL
;
649 for (n
= 0; MenuCommandTable
[n
].smcom_CommandName
; n
++)
651 if (0 == stricmp(cgy
->cgy_Action
, MenuCommandTable
[n
].smcom_CommandName
))
653 smcom
= &MenuCommandTable
[n
];
658 d1(KPrintF("%s/%s/%ld: smcom=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, smcom
));
660 break; // unknown command string
662 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
663 d1(KPrintF("%s/%s/%ld: Member=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
));
667 memset(Member
, 0, sizeof(struct ControlBarMember
));
669 Member
->cbm_smcom
= smcom
;
671 // imgNormal is always required
672 Member
->cbm_NormalImage
= NewObject(DtImageClass
, NULL
,
673 DTIMG_ImageName
, (ULONG
) cgy
->cgy_NormalImage
,
674 DTIMG_SelImageName
, (ULONG
) cgy
->cgy_SelectedImage
,
675 DTIMG_DisabledImageName
, (ULONG
) cgy
->cgy_DisabledImage
,
677 d1(KPrintF("%s/%s/%ld: cbm_NormalImage=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
->cbm_NormalImage
));
678 if (NULL
== Member
->cbm_NormalImage
)
681 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("ButtonGadget.sca",
683 GA_BottomBorder
, TRUE
,
687 GA_Image
, (ULONG
) Member
->cbm_NormalImage
,
689 d1(KPrintF("%s/%s/%ld: cbm_Gadget=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
->cbm_Gadget
));
690 if (NULL
== Member
->cbm_Gadget
)
693 Member
->cbm_DisableFunc
= NULL
;
700 FreeControlBarMember(Member
);
707 //----------------------------------------------------------------------------
709 static struct ControlBarMember
*ControlBarCreateBackButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
711 return ControlBarCreateButton("ButtonBackNormal", "ButtonBackSelected",
712 "ButtonBackDisabled",
713 GadgetID
, LEFTIMAGE
, ControlBarBackDisable
);
716 //----------------------------------------------------------------------------
718 static struct ControlBarMember
*ControlBarCreateForwardButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
720 return ControlBarCreateButton("ButtonForwardNormal", "ButtonForwardSelected",
721 "ButtonForwardDisabled",
722 GadgetID
, RIGHTIMAGE
, ControlBarForwardDisable
);
725 //----------------------------------------------------------------------------
727 static struct ControlBarMember
*ControlBarCreateParentButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
729 return ControlBarCreateButton("ButtonUpNormal", "ButtonUpSelected",
731 GadgetID
, UPIMAGE
, ControlBarParentDisable
);
734 //----------------------------------------------------------------------------
736 static struct ControlBarMember
*ControlBarCreateBrowseButton(const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
738 return ControlBarCreateButton("BrowseNormal", "BrowseSelected",
740 GadgetID
, UPIMAGE
, NULL
);
743 //----------------------------------------------------------------------------
745 static struct ControlBarMember
*ControlBarCreateButton(CONST_STRPTR NormalImgName
,
746 CONST_STRPTR SelectedImgName
, CONST_STRPTR DisabledImgName
,
747 ULONG GadgetID
, ULONG FallbackSysImg
, CBM_DISABLEFUNC DisableFunc
)
750 STRPTR ImageNameSel
= NULL
;
751 STRPTR ImageNameDisabled
= NULL
;
752 struct ControlBarMember
*Member
= NULL
;
753 BOOL Success
= FALSE
;
756 ImageNameNrm
= AllocPathBuffer();
757 if (NULL
== ImageNameNrm
)
760 ImageNameSel
= AllocPathBuffer();
761 if (NULL
== ImageNameSel
)
764 ImageNameDisabled
= AllocPathBuffer();
765 if (NULL
== ImageNameDisabled
)
768 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
772 d1(KPrintF("%s/%s/%ld: NormalImgName=<%s>\n", __FILE__
, __FUNC__
, __LINE__
, NormalImgName
));
774 memset(Member
, 0, sizeof(struct ControlBarMember
));
776 stccpy(ImageNameNrm
, "THEME:Window/ControlBar", Max_PathLen
);
777 AddPart(ImageNameNrm
, NormalImgName
, Max_PathLen
);
779 stccpy(ImageNameSel
, "THEME:Window/ControlBar", Max_PathLen
);
780 AddPart(ImageNameSel
, SelectedImgName
, Max_PathLen
);
782 stccpy(ImageNameDisabled
, "THEME:Window/ControlBar", Max_PathLen
);
783 AddPart(ImageNameDisabled
, DisabledImgName
, Max_PathLen
);
785 // imgNormal is always required
786 Member
->cbm_NormalImage
= NewObject(DtImageClass
, NULL
,
787 DTIMG_ImageName
, (ULONG
) ImageNameNrm
,
788 DTIMG_SelImageName
, (ULONG
) ImageNameSel
,
789 DTIMG_DisabledImageName
, (ULONG
) ImageNameDisabled
,
791 d1(KPrintF("%s/%s/%ld: cbm_NormalImage=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
->cbm_NormalImage
));
792 if (NULL
== Member
->cbm_NormalImage
)
794 // no Theme image could be found - fall back to sys image
795 Member
->cbm_NormalImage
= NewObject(NULL
, SYSICLASS
,
796 SYSIA_Which
, FallbackSysImg
,
797 SYSIA_DrawInfo
, (ULONG
) iInfos
.xii_iinfos
.ii_DrawInfo
,
800 d1(KPrintF("%s/%s/%ld: cbm_NormalImage=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
->cbm_NormalImage
));
801 if (NULL
== Member
->cbm_NormalImage
)
804 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("ButtonGadget.sca",
806 GA_BottomBorder
, TRUE
,
810 GA_Image
, (ULONG
) Member
->cbm_NormalImage
,
812 d1(KPrintF("%s/%s/%ld: cbm_Gadget=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, Member
->cbm_Gadget
));
813 if (NULL
== Member
->cbm_Gadget
)
816 Member
->cbm_DisableFunc
= DisableFunc
;
822 FreePathBuffer(ImageNameNrm
);
824 FreePathBuffer(ImageNameSel
);
825 if (ImageNameDisabled
)
826 FreePathBuffer(ImageNameDisabled
);
829 FreeControlBarMember(Member
);
836 //----------------------------------------------------------------------------
838 static struct ControlBarMember
*ControlBarCreateHistoryGadget(struct internalScaWindowTask
*iwt
,
839 const struct ControlBarGadgetEntry
*cgy
, ULONG GadgetID
)
841 struct ControlBarMember
*Member
;
842 BOOL Success
= FALSE
;
845 Member
= ScalosAlloc(sizeof(struct ControlBarMember
));
849 memset(Member
, 0, sizeof(struct ControlBarMember
));
851 // imgNormal is always required
852 Member
->cbm_NormalImage
= NewObject(DtImageClass
, NULL
,
853 DTIMG_ImageName
, (ULONG
) "THEME:Window/ControlBar/HistoryNormal" ,
854 DTIMG_SelImageName
, (ULONG
) "THEME:Window/ControlBar/HistorySelected" ,
855 DTIMG_DisabledImageName
, (ULONG
) "THEME:Window/ControlBar/HistoryDisabled" ,
857 if (NULL
== Member
->cbm_NormalImage
)
859 // no Theme image could be found - fall back to sys image
860 Member
->cbm_NormalImage
= NewObject(NULL
, SYSICLASS
,
861 SYSIA_Which
, MXIMAGE
,
862 SYSIA_DrawInfo
, (ULONG
) iInfos
.xii_iinfos
.ii_DrawInfo
,
865 if (NULL
== Member
->cbm_NormalImage
)
868 ScalosObtainSemaphoreShared(&iwt
->iwt_WindowHistoryListSemaphore
);
870 Member
->cbm_Gadget
= SCA_NewScalosObjectTags("HistoryGadget.sca",
872 GA_BottomBorder
, TRUE
,
876 GA_Image
, (ULONG
) Member
->cbm_NormalImage
,
877 SCAHISTORY_Labels
, (ULONG
) &iwt
->iwt_HistoryList
,
878 SCAHISTORY_Active
, (ULONG
) iwt
->iwt_CurrentHistoryEntry
,
880 if (NULL
== Member
->cbm_Gadget
)
883 ScalosReleaseSemaphore(&iwt
->iwt_WindowHistoryListSemaphore
);
885 Member
->cbm_DisableFunc
= ControlBarHistoryListDisable
;
892 FreeControlBarMember(Member
);
899 //----------------------------------------------------------------------------
901 struct ControlBarGadgetEntry
*ControlBarFindGadgetByID(struct internalScaWindowTask
*iwt
, UWORD GadgetID
)
903 struct ControlBarMember
*Member
;
905 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
906 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
907 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
909 struct ExtGadget
*gg
= (struct ExtGadget
*) Member
->cbm_Gadget
;
911 if (GadgetID
== gg
->GadgetID
)
912 return &Member
->cbm_Entry
;
918 //----------------------------------------------------------------------------
920 static UWORD
ControlBarQueryGadgetID(struct ExtGadget
*gg
)
924 GetAttr(GBDTA_LastActive
, (Object
*) gg
, &Code
);
925 d1(KPrintF("%s/%s/%ld: Code=%04lx\n", __FILE__
, __FUNC__
, __LINE__
, Code
));
929 //----------------------------------------------------------------------------
931 UWORD
ControlBarQueryGadgetType(struct internalScaWindowTask
*iwt
, struct ExtGadget
*gg
)
933 ULONG GadgetID
= ControlBarQueryGadgetID(gg
);
934 struct ControlBarGadgetEntry
*cgy
;
936 d1(KPrintF("%s/%s/%ld: GadgetID=%ld\n", __FILE__
, __FUNC__
, __LINE__
, GadgetID
));
938 cgy
= ControlBarFindGadgetByID(iwt
, GadgetID
);
939 d1(KPrintF("%s/%s/%ld: cgy=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cgy
));
941 return (UWORD
) cgy
->cgy_GadgetType
;
946 //----------------------------------------------------------------------------
948 static void FreeControlBarMember(struct ControlBarMember
*Member
)
952 // cbm_Gadget is freed by GadgetBar
953 if (Member
->cbm_NormalImage
)
955 DisposeObject(Member
->cbm_NormalImage
);
956 Member
->cbm_NormalImage
= NULL
;
958 if (Member
->cbm_SelectedImage
)
960 DisposeObject(Member
->cbm_SelectedImage
);
961 Member
->cbm_SelectedImage
= NULL
;
963 if (Member
->cbm_FrameImage
)
965 SCA_DisposeScalosObject(Member
->cbm_FrameImage
);
966 Member
->cbm_FrameImage
= NULL
;
969 FreeCopyString(Member
->cbm_Entry
.cgy_NormalImage
);
970 FreeCopyString(Member
->cbm_Entry
.cgy_SelectedImage
);
971 FreeCopyString(Member
->cbm_Entry
.cgy_DisabledImage
);
972 FreeCopyString(Member
->cbm_Entry
.cgy_HelpText
);
978 //----------------------------------------------------------------------------
980 static struct ControlBarMember
*ControlBarFindMember(struct internalScaWindowTask
*iwt
,
983 struct ControlBarMember
*Member
;
985 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
986 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
987 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
989 struct ExtGadget
*gg
= (struct ExtGadget
*) Member
->cbm_Gadget
;
991 if (gg
&& gg
->GadgetID
== GadgetID
)
995 return NULL
; // not found
998 //----------------------------------------------------------------------------
1000 // Update disable state of control bar gadgets
1001 void SetControlBarOnOff(struct internalScaWindowTask
*iwt
)
1003 struct ControlBarMember
*Member
;
1005 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
1006 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
1007 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
1009 if (Member
->cbm_Gadget
)
1011 if (Member
->cbm_DisableFunc
)
1013 Member
->cbm_DisableFunc(iwt
, Member
);
1015 else if (Member
->cbm_smcom
&& Member
->cbm_smcom
->smcom_Enable
)
1017 struct Gadget
*gg
= (struct Gadget
*) Member
->cbm_Gadget
;
1019 if (Member
->cbm_smcom
->smcom_Enable(iwt
, NULL
))
1021 if (gg
->Flags
& GFLG_DISABLED
)
1024 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1031 if (!(gg
->Flags
& GFLG_DISABLED
))
1034 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1045 //----------------------------------------------------------------------------
1047 static void ControlBarParentDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
)
1049 SetGadgetAttrs((struct Gadget
*) cbm
->cbm_Gadget
,
1050 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1051 GA_Disabled
, (iwt
->iwt_WindowTask
.mt_WindowStruct
->ws_Flags
& WSV_FlagF_RootWindow
),
1055 //----------------------------------------------------------------------------
1057 static void ControlBarBackDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
)
1061 ScalosObtainSemaphoreShared(&iwt
->iwt_WindowHistoryListSemaphore
);
1063 Disable
= IsListEmpty(&iwt
->iwt_HistoryList
) // should not happen
1064 || NULL
== iwt
->iwt_CurrentHistoryEntry
// should not happen
1065 || iwt
->iwt_CurrentHistoryEntry
== (struct WindowHistoryEntry
*) iwt
->iwt_HistoryList
.lh_Head
;
1067 ScalosReleaseSemaphore(&iwt
->iwt_WindowHistoryListSemaphore
);
1069 d1(KPrintF("%s/%s/%ld: IsListEmpty=%ld iwt_CurrentHistoryEntry=%08lx Disable=%ld\n", \
1070 __FILE__
, __FUNC__
, __LINE__
, IsListEmpty(&iwt
->iwt_HistoryList
), iwt
->iwt_CurrentHistoryEntry
, Disable
));
1072 SetGadgetAttrs((struct Gadget
*) cbm
->cbm_Gadget
,
1073 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1074 GA_Disabled
, Disable
,
1078 //----------------------------------------------------------------------------
1080 static void ControlBarForwardDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
)
1084 ScalosObtainSemaphoreShared(&iwt
->iwt_WindowHistoryListSemaphore
);
1086 Disable
= IsListEmpty(&iwt
->iwt_HistoryList
) // should not happen
1087 || NULL
== iwt
->iwt_CurrentHistoryEntry
// should not happen
1088 || iwt
->iwt_CurrentHistoryEntry
== (struct WindowHistoryEntry
*) iwt
->iwt_HistoryList
.lh_TailPred
;
1090 ScalosReleaseSemaphore(&iwt
->iwt_WindowHistoryListSemaphore
);
1092 SetGadgetAttrs((struct Gadget
*) cbm
->cbm_Gadget
,
1093 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1094 GA_Disabled
, Disable
,
1098 //----------------------------------------------------------------------------
1100 static void ControlBarHistoryListDisable(struct internalScaWindowTask
*iwt
, struct ControlBarMember
*cbm
)
1104 ScalosObtainSemaphoreShared(&iwt
->iwt_WindowHistoryListSemaphore
);
1106 Disable
= IsListEmpty(&iwt
->iwt_HistoryList
);
1108 ScalosReleaseSemaphore(&iwt
->iwt_WindowHistoryListSemaphore
);
1110 SetGadgetAttrs((struct Gadget
*) cbm
->cbm_Gadget
,
1111 iwt
->iwt_WindowTask
.wt_Window
, NULL
,
1112 GA_Disabled
, Disable
,
1116 //----------------------------------------------------------------------------
1118 void ControlBarSwitchHistoryEntry(struct internalScaWindowTask
*iwt
)
1120 struct ControlBarMember
*Member
;
1122 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
1123 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
1124 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
1126 if (SCPGadgetType_History
== Member
->cbm_GadgetType
)
1128 struct WindowHistoryEntry
*whe
= NULL
;
1129 struct Node
*ln
= NULL
;
1132 GetAttr(SCAHISTORY_Active
, Member
->cbm_Gadget
, (APTR
) &ln
);
1134 pLock
= Lock(ln
->ln_Name
, ACCESS_READ
);
1137 whe
= WindowFindHistoryEntry(iwt
, pLock
);
1142 DoMethod(iwt
->iwt_WindowTask
.mt_MainObject
,
1143 SCCM_IconWin_NewPath
,
1144 whe
->whe_Node
.ln_Name
,
1145 SCA_ShowAllMode
, whe
->whe_ViewAll
,
1146 SCA_ViewModes
, whe
->whe_Viewmodes
,
1147 SCA_XOffset
, whe
->whe_XOffset
,
1148 SCA_YOffset
, whe
->whe_YOffset
,
1149 SCA_IconList
, (SCANDIR_OK
== whe
->whe_ScanDirResult
) ? whe
->whe_IconList
: NULL
,
1151 ScalosReleaseSemaphore(&iwt
->iwt_WindowHistoryListSemaphore
);
1155 DoMethod(iwt
->iwt_WindowTask
.mt_MainObject
,
1156 SCCM_IconWin_NewPath
,
1164 //----------------------------------------------------------------------------
1166 struct ExtGadget
*ControlBarFindGadget(struct internalScaWindowTask
*iwt
,
1169 struct ControlBarMember
*Member
;
1171 Member
= ControlBarFindMember(iwt
, GadgetID
);
1173 return Member
? (struct ExtGadget
*) Member
->cbm_Gadget
: NULL
;
1176 //----------------------------------------------------------------------------
1178 void ControlBarActionButton(struct internalScaWindowTask
*iwt
, struct ExtGadget
*gg
)
1180 ULONG GadgetID
= ControlBarQueryGadgetID(gg
);
1181 struct ControlBarGadgetEntry
*cgy
;
1183 cgy
= ControlBarFindGadgetByID(iwt
, GadgetID
);
1186 DoMethod(iwt
->iwt_WindowTask
.mt_MainObject
,
1187 SCCM_IconWin_MenuCommand
,
1194 //----------------------------------------------------------------------------
1196 static void ControlBarAddGadgets(struct internalScaWindowTask
*iwt
, const struct List
*CbGadgetsList
)
1198 ULONG GadgetID
= CBAR_GadgetID
;
1199 struct ControlBarMember
*Member
;
1200 struct ControlBarGadgetEntry
*cgy
;
1202 for (cgy
= (struct ControlBarGadgetEntry
*) CbGadgetsList
->lh_Head
;
1203 cgy
!= (struct ControlBarGadgetEntry
*) &CbGadgetsList
->lh_Tail
;
1204 cgy
= (struct ControlBarGadgetEntry
*) cgy
->cgy_Node
.ln_Succ
)
1206 struct ControlBarMember
*cbm
;
1207 ULONG CurrentGadgetID
= GadgetID
++; // create unique ID for each gadget
1209 switch (cgy
->cgy_GadgetType
)
1211 case SCPGadgetType_BackButton
:
1212 FreeCopyString(cgy
->cgy_HelpText
);
1213 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_BACK
));
1214 cbm
= ControlBarCreateBackButton(cgy
, CurrentGadgetID
);
1215 d1(KPrintF("%s/%s/%ld: SCPGadgetType_BackButton=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1217 case SCPGadgetType_ForwardButton
:
1218 FreeCopyString(cgy
->cgy_HelpText
);
1219 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_FORWARD
));
1220 cbm
= ControlBarCreateForwardButton(cgy
, CurrentGadgetID
);
1221 d1(KPrintF("%s/%s/%ld: SCPGadgetType_ForwardButton=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1223 case SCPGadgetType_UpButton
:
1224 FreeCopyString(cgy
->cgy_HelpText
);
1225 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_PARENT
));
1226 cbm
= ControlBarCreateParentButton(cgy
, CurrentGadgetID
);
1227 d1(KPrintF("%s/%s/%ld: SCPGadgetType_UpButton=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1229 case SCPGadgetType_History
:
1230 FreeCopyString(cgy
->cgy_HelpText
);
1231 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_HISTORY
));
1232 cbm
= ControlBarCreateHistoryGadget(iwt
, cgy
, CurrentGadgetID
);
1233 d1(KPrintF("%s/%s/%ld: SCPGadgetType_History=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1235 case SCPGadgetType_BrowseButton
:
1236 FreeCopyString(cgy
->cgy_HelpText
);
1237 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_BROWSE
));
1238 cbm
= ControlBarCreateBrowseButton(cgy
, CurrentGadgetID
);
1239 d1(KPrintF("%s/%s/%ld: SCPGadgetType_BrowseButton=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1241 case SCPGadgetType_ViewBy
:
1242 FreeCopyString(cgy
->cgy_HelpText
);
1243 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_VIEWBY
));
1244 cbm
= ControlBarCreateViewByCycle(iwt
, cgy
, CurrentGadgetID
);
1245 d1(KPrintF("%s/%s/%ld: SCPGadgetType_ViewBy=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1247 case SCPGadgetType_ShowMode
:
1248 FreeCopyString(cgy
->cgy_HelpText
);
1249 cgy
->cgy_HelpText
= AllocCopyString(GetLocString(MSGID_TOOLTIP_GADGET_CONTROLBAR_SHOWMODE
));
1250 cbm
= ControlBarCreateShowModeCycle(iwt
, cgy
, CurrentGadgetID
);
1251 d1(KPrintF("%s/%s/%ld: SCPGadgetType_ShowMode=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1253 case SCPGadgetType_Separator
:
1254 cbm
= ControlBarCreateSeparator(cgy
, CurrentGadgetID
);
1255 d1(KPrintF("%s/%s/%ld: SCPGadgetType_Separator=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1257 case SCPGadgetType_ActionButton
:
1258 cbm
= ControlBarCreateActionButton(cgy
, CurrentGadgetID
);
1259 d1(KPrintF("%s/%s/%ld: SCPGadgetType_ActionButton=%08lx\n", __FILE__
, __FUNC__
, __LINE__
, cbm
));
1268 cbm
->cbm_GadgetType
= cgy
->cgy_GadgetType
;
1270 // Clone ControlBarGadgetEntry
1271 // done't use a reference or pointer here since
1272 // it would become invalid when preferences are reloaded
1273 cbm
->cbm_Entry
= *cgy
;
1274 cbm
->cbm_Entry
.cgy_NormalImage
= AllocCopyString(cgy
->cgy_NormalImage
);
1275 cbm
->cbm_Entry
.cgy_SelectedImage
= AllocCopyString(cgy
->cgy_SelectedImage
);
1276 cbm
->cbm_Entry
.cgy_DisabledImage
= AllocCopyString(cgy
->cgy_DisabledImage
);
1277 cbm
->cbm_Entry
.cgy_HelpText
= AllocCopyString(cgy
->cgy_HelpText
);
1279 AddHead(&iwt
->iwt_ControlBarMemberList
, &cbm
->cbm_Node
);
1283 for (Member
= (struct ControlBarMember
*) iwt
->iwt_ControlBarMemberList
.lh_Head
;
1284 Member
!= (struct ControlBarMember
*) &iwt
->iwt_ControlBarMemberList
.lh_Tail
;
1285 Member
= (struct ControlBarMember
*) Member
->cbm_Node
.ln_Succ
)
1287 DoMethod(iwt
->iwt_WindowTask
.mt_MainObject
,
1288 SCCM_IconWin_AddToControlBar
,
1295 //----------------------------------------------------------------------------