4 ** Copyright (C) 1994,95,96 Bernardo Innocenti
6 ** Savers panel handling functions.
10 #include <intuition/intuition.h>
11 #include <intuition/gadgetclass.h>
12 #include <libraries/gadtools.h>
14 #include <proto/exec.h>
15 #include <proto/intuition.h>
16 #include <proto/gadtools.h>
17 #include <proto/xmodule.h>
19 #include "XModulePriv.h"
25 /* Replaced by format properties stored inside hooks
26 UBYTE FormatProperties[] =
28 XMSF_NO_INSTRUMENTS|XMSF_NO_NAMES, // MED
29 XMSF_NO_INSTRUMENTS|XMSF_NO_NAMES, // OctaMED
30 ALLOWS_NO_INST|ALLOWS_NO_NAMES // MIDI File
78 /*****************************/
79 /* Local function prototypes */
80 /*****************************/
82 static void SaversPostOpen (void);
83 static void UpdateSaverInfo (void);
85 static void SaversListClicked (struct WinUserData *wud);
86 /* static void PackModeClicked (struct WinUserData *wud);
87 static void PackOptionsClicked (struct WinUserData *wud); */
88 static void FormatUseClicked (struct WinUserData *wud);
89 static void FormatCancelClicked (struct WinUserData *wud);
93 XDEF struct SaveSwitches SaveSwitches = {1, 1, 1, 0, 1};
94 XDEF struct SaveSwitches SaveSwitchesBackup;
99 static STRPTR PackModeLabels[] =
101 (STRPTR)MSG_NONE_GAD,
109 static ULONG SaversArgs[] =
112 LISTVIEW_KIND, (ULONG)SaversListClicked, 0, NULL, TAG_DONE,
114 VGROUP_KIND, BBFT_RIDGE,
115 CHECKBOX_KIND, NULL, MSG_SF_SEQUENCE_GAD, (ULONG)&SaveSwitches.SaveSeq, TAG_DONE,
116 CHECKBOX_KIND, NULL, MSG_SF_INSTRUMENTS_GAD, (ULONG)&SaveSwitches.SaveInstr, TAG_DONE,
117 CHECKBOX_KIND, NULL, MSG_SF_PATTERNS_GAD, (ULONG)&SaveSwitches.SavePatt, TAG_DONE,
118 CHECKBOX_KIND, NULL, MSG_SF_NAMES_GAD, (ULONG)&SaveSwitches.SaveNames, TAG_DONE,
119 CHECKBOX_KIND, NULL, MSG_ADD_ICON_GAD, (ULONG)&SaveSwitches.SaveIcons, TAG_DONE,
121 // VGROUP_KIND, BBFT_RIDGE,
122 // CYCLE_KIND, (ULONG)PackModeClicked, MSG_MODE_GAD, (ULONG)PackModeLabels, TAG_DONE,
123 // BUTTON_KIND, (ULONG)PackOptionsClicked, MSG_OPTIONS_DOTS_GAD, TAG_DONE,
127 VGROUP_KIND, BBFT_RIDGE,
128 TEXT_KIND, MSG_DESCRIPTION, 25, GTTX_Border, TRUE, TAG_DONE,
129 TEXT_KIND, MSG_AUTHOR, 15, GTTX_Border, TRUE, TAG_DONE,
132 NUMBER_KIND, MSG_MAXLENGTH, 3, TAG_DONE,
133 NUMBER_KIND, MSG_MAXTRACKS, 3, TAG_DONE,
134 NUMBER_KIND, MSG_MAXINSTRUMENTS, 3, TAG_DONE,
137 NUMBER_KIND, MSG_MAXPATTERNS, 5, TAG_DONE,
138 NUMBER_KIND, MSG_MAXPATTLEN, 5, TAG_DONE,
139 NUMBER_KIND, MSG_MAXSAMPLELEN, 9, TAG_DONE,
144 BUTTON_KIND, (ULONG)FormatUseClicked, MSG_UNDERSCORE_USE_GAD, TAG_DONE,
145 BUTTON_KIND, (ULONG)FormatCancelClicked, MSG_UNDERSCORE_CANCEL_GAD, TAG_DONE,
152 XDEF LONG SaversWinTags[] =
154 XMWIN_LayoutArgs, (LONG)SaversArgs,
155 XMWIN_GCount, Savers_CNT,
156 XMWIN_Title, MSG_SAVERS_TITLE,
157 XMWIN_WindowFlags, WFLG_CLOSEGADGET,
158 XMWIN_IDCMPFlags, CHECKBOXIDCMP|LISTVIEWIDCMP|BUTTONIDCMP|CYCLEIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
159 XMWIN_PostOpenFunc, (LONG)SaversPostOpen,
160 XMWIN_HelpNode, (LONG)"Savers",
166 static void SaversPostOpen (void)
168 UpdateSaveSwitches();
170 /* Backup SaveSwitches for "Cancel" option */
171 memcpy (&SaveSwitchesBackup, &SaveSwitches, sizeof (SaveSwitchesBackup));
176 GLOBALCALL void UpdateSaveSwitches (void)
178 struct WinUserData *wud = WDescr[WID_SAVERS].Wud;
179 struct XMHook *saver;
186 ObtainSemaphoreShared (&XModuleBase->xm_BaseLock);
188 /* Workaround for Pre-V39 ObtainSemaphoreShared() bug (see autodoc) */
190 /* Try to get the shared semaphore */
191 if (!AttemptSemaphoreShared (&XModuleBase->xm_BaseLock))
192 /* Check if we can get the exclusive version */
193 if (!AttemptSemaphore (&XModuleBase->xm_BaseLock))
194 /* Oh well, wait for the shared lock */
195 ObtainSemaphoreShared (&XModuleBase->xm_BaseLock);
198 if (saver = XModuleBase->xm_DefaultSaver)
200 struct XMHook *tmp = (struct XMHook *)XModuleBase->xm_Savers.mlh_Head;
205 tmp = (struct XMHook *)tmp->xmh_Link.ln_Succ;
211 GT_SetGadgetAttrs (wud->Gadgets[GD_SaversList], wud->Win, NULL,
212 GTLV_Labels, &XModuleBase->xm_Savers,
213 GTLV_Selected, savernum,
214 GTLV_MakeVisible, savernum,
219 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
225 static void UpdateSaverInfo (void)
227 struct XMHook *saver = XModuleBase->xm_DefaultSaver;
228 struct WinUserData *wud = WDescr[WID_SAVERS].Wud;
233 GD_SaveSequence, SaveSwitches.SaveSeq,
234 GD_SaveInstruments, SaveSwitches.SaveInstr,
235 GD_SavePatterns, SaveSwitches.SavePatt,
236 GD_SaveIcons, SaveSwitches.SaveIcons,
237 GD_SaveNames, SaveSwitches.SaveNames,
238 GD_FormatDescription, saver ? saver->xmh_Descr : NULL,
239 GD_FormatAuthor, saver ? saver->xmh_Author : NULL,
240 GD_MaxLength, saver ? saver->xmh_MaxLength : 0,
241 GD_MaxTracks, saver ? saver->xmh_MaxTracks : 0,
242 GD_MaxInstruments, saver ? saver->xmh_MaxInstruments : 0,
243 GD_MaxPatterns, saver ? saver->xmh_MaxPatterns : 0,
244 GD_MaxPattLen, saver ? saver->xmh_MaxPattLen : 0,
245 GD_MaxSampleLen, saver ? saver->xmh_MaxSampleLen : 0,
250 GT_SetGadgetAttrs (wud->Gadgets[GD_SaveSequence], wud->Win, NULL,
251 GA_Disabled, !(saver->xmh_Flags & XMHF_EXCLUDE_SEQUENCE),
254 GT_SetGadgetAttrs (wud->Gadgets[GD_SavePatterns], wud->Win, NULL,
255 GA_Disabled, !(saver->xmh_Flags & XMHF_EXCLUDE_PATTERNS),
258 GT_SetGadgetAttrs (wud->Gadgets[GD_SaveInstruments], wud->Win, NULL,
259 GA_Disabled, !(saver->xmh_Flags & XMHF_EXCLUDE_INSTRUMENTS),
262 GT_SetGadgetAttrs (wud->Gadgets[GD_SaveNames], wud->Win, NULL,
263 GA_Disabled, !(saver->xmh_Flags & XMHF_EXCLUDE_NAMES),
275 static void SaversListClicked (struct WinUserData *wud)
280 ObtainSemaphoreShared (&XModuleBase->xm_BaseLock);
282 tmp = (struct XMHook *)XModuleBase->xm_Savers.mlh_Head;
284 for (i = IntuiMsg.Code; (i > 0) && tmp ; i--)
285 tmp = (struct XMHook *)tmp->xmh_Link.ln_Succ;
287 if (tmp) XModuleBase->xm_DefaultSaver = tmp;
291 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
297 static void PackModeClicked (struct WinUserData *wud)
304 static void PackOptionsClicked (struct WinUserData *wud)
312 static void FormatUseClicked (struct WinUserData *wud)
319 static void FormatCancelClicked (struct WinUserData *wud)
321 /* Restore old SaveSwitches */
322 memcpy (&SaveSwitches, &SaveSwitchesBackup, sizeof (SaveSwitchesBackup));