4 ** Copyright (C) 1993,94,95,96,97 Bernardo Innocenti
6 ** Handle ToolBox panel
9 #include <exec/memory.h>
10 #include <intuition/intuition.h>
11 #include <intuition/gadgetclass.h>
12 #include <libraries/gadtools.h>
13 #include <libraries/locale.h>
14 #include <workbench/workbench.h>
16 #include <proto/exec.h>
17 #include <proto/dos.h>
18 #include <proto/intuition.h>
20 #include <proto/asl.h>
21 #include <proto/icon.h>
22 #include <proto/xmodule.h>
24 #include "XModulePriv.h"
49 /*****************************/
50 /* Local function prototypes */
51 /*****************************/
53 static void EditInstrumentsClicked (void);
54 static void EditSequenceClicked (void);
55 static void EditPatternsClicked (void);
56 static void OptimizationClicked (void);
57 static void PlayClicked (void);
58 static void EditSongsClicked (void);
60 static void ToolBoxMiNew (void);
61 static void ToolBoxMiOpen (void);
62 static void ToolBoxMiOpenNew (void);
63 static void ToolBoxMiSave (void);
64 static void ToolBoxMiSaveAs (void);
65 static void ToolBoxMiSaveFormat (void);
66 static void ToolBoxMiClearMod (void);
67 static void ToolBoxMiAbout (void);
68 static void ToolBoxMiHelp (void);
69 static void ToolBoxMiIconify (void);
70 static void ToolBoxMiQuit (void);
71 static void ToolBoxMiUserInterface (void);
72 static void ToolBoxMiSaveIcons (void);
73 static void ToolBoxMiOverwrite (void);
74 static void ToolBoxMiAskExit (void);
75 static void ToolBoxMiOpenSettings (void);
76 static void ToolBoxMiSaveSettings (void);
77 static void ToolBoxMiSaveSettingsAs (void);
81 static struct NewMenu ToolBoxNewMenu[] = {
82 NM_TITLE, (STRPTR)MSG_PROJECT_MEN, NULL, 0, NULL, NULL,
83 NM_ITEM, (STRPTR)MSG_NEW_MEN, (STRPTR)"N", 0, 0L, (APTR)ToolBoxMiNew,
84 NM_ITEM, (STRPTR)MSG_OPEN_MEN, (STRPTR)"O", 0, 0L, (APTR)ToolBoxMiOpen,
85 NM_ITEM, (STRPTR)MSG_OPEN_NEW_MEN, (STRPTR)"Y", 0, 0L, (APTR)ToolBoxMiOpenNew,
86 NM_ITEM, (STRPTR)MSG_SAVE_MEN, (STRPTR)"S", 0, 0L, (APTR)ToolBoxMiSave,
87 NM_ITEM, (STRPTR)MSG_SAVE_AS_MEN, (STRPTR)"A", 0, 0L, (APTR)ToolBoxMiSaveAs,
88 NM_ITEM, (STRPTR)MSG_SAVE_FORMAT_MEN, (STRPTR)"F", 0, 0L, (APTR)ToolBoxMiSaveFormat,
89 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
90 NM_ITEM, (STRPTR)MSG_CLEAR_MEN, (STRPTR)"K", 0, 0L, (APTR)ToolBoxMiClearMod,
91 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
92 NM_ITEM, (STRPTR)MSG_ABOUT_MEN, (STRPTR)"?", 0, 0L, (APTR)ToolBoxMiAbout,
93 NM_ITEM, (STRPTR)MSG_HELP_MEN, NULL, 0, 0L, (APTR)ToolBoxMiHelp,
94 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
95 NM_ITEM, (STRPTR)MSG_ICONIFY_MEN, (STRPTR)"I", 0, 0L, (APTR)ToolBoxMiIconify,
96 NM_ITEM, (STRPTR)MSG_QUIT_MEN, (STRPTR)"Q", 0, 0L, (APTR)ToolBoxMiQuit,
97 NM_TITLE, (STRPTR)MSG_SETTINGS_MEN, NULL, 0, NULL, NULL,
98 NM_ITEM, (STRPTR)MSG_USER_INTERFACE_MEN, NULL, 0, 0L, (APTR)ToolBoxMiUserInterface,
99 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
100 NM_ITEM, (STRPTR)MSG_SAVE_ICONS_MEN, NULL, CHECKIT|MENUTOGGLE, 0L, (APTR)ToolBoxMiSaveIcons,
101 NM_ITEM, (STRPTR)MSG_CONFIRM_OVERWRITE_MEN, NULL, CHECKIT|MENUTOGGLE, 0L, (APTR)ToolBoxMiOverwrite,
102 NM_ITEM, (STRPTR)MSG_CONFIRM_EXIT_MEN, NULL, CHECKIT|MENUTOGGLE, 0L, (APTR)ToolBoxMiAskExit,
103 NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
104 NM_ITEM, (STRPTR)MSG_OPEN_SETTINGS_MEN, NULL, 0, 0L, (APTR)ToolBoxMiOpenSettings,
105 NM_ITEM, (STRPTR)MSG_SAVE_SETTINGS_MEN, NULL, 0, 0L, (APTR)ToolBoxMiSaveSettings,
106 NM_ITEM, (STRPTR)MSG_SAVE_SETTINGS_AS_MEN, NULL, 0, 0L, (APTR)ToolBoxMiSaveSettingsAs,
107 NM_END, NULL, NULL, 0, 0L, NULL
112 static ULONG ToolBoxArgs[] =
116 BUTTON_KIND, (ULONG)PlayClicked, MSG_PLAY_GAD, TAG_DONE,
117 BUTTON_KIND, (ULONG)EditSongsClicked, MSG_SONGS_GAD, TAG_DONE,
120 BUTTON_KIND, (ULONG)EditPatternsClicked, MSG_PATTERNS_DOTS_GAD, TAG_DONE,
121 BUTTON_KIND, (ULONG)EditInstrumentsClicked, MSG_INSTRUMENTS_GAD, TAG_DONE,
124 BUTTON_KIND, (ULONG)EditSequenceClicked, MSG_SEQUENCE_DOTS_GAD, TAG_DONE,
125 BUTTON_KIND, (ULONG)OptimizationClicked, MSG_OPTIMIZATION_GAD, TAG_DONE,
133 XDEF LONG ToolBoxWinTags[] =
135 XMWIN_NewMenu, (LONG)ToolBoxNewMenu,
136 XMWIN_LayoutArgs, (LONG)ToolBoxArgs,
137 XMWIN_GCount, ToolBox_CNT,
138 XMWIN_Title, MSG_TOOLBOX_TITLE,
139 XMWIN_WindowFlags, WFLG_CLOSEGADGET | WFLG_ACTIVATE,
140 XMWIN_IDCMPFlags, BUTTONIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
141 XMWIN_PostOpenFunc, (LONG)UpdateGuiSwitches,
142 XMWIN_HelpNode, (LONG)"ToolBox",
149 /*********************/
150 /* ToolBox Functions */
151 /*********************/
155 GLOBALCALL void ToolBoxDropIcon (struct AppMessage *msg)
157 struct WBArg *wba = msg->am_ArgList;
164 ObtainSemaphore (&XModuleBase->xm_BaseLock);
166 olddir = CurrentDir (wba->wa_Lock);
168 for (i = 0; i < msg->am_NumArgs; i++)
170 CurrentDir (wba->wa_Lock);
172 if (si = xmLoadModule (wba->wa_Name,
173 XMSNG_OldSong, i ? NULL : XModuleBase->xm_CurrentSong,
175 XMSNG_Active, i == (msg->am_NumArgs - 1),
177 ReleaseSemaphore (&si->Lock); /* For XMSNG_AddToList */
182 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
190 GLOBALCALL void ToolBoxOpenModule (CONST_STRPTR file, ULONG num, ULONG count)
192 /* Handle FileRequester Open Module message */
198 ObtainSemaphore (&XModuleBase->xm_BaseLock);
200 DB(kprintf ("opening song %ld of %ld\n", num, count));
202 if (si = xmLoadModule (file,
203 XMSNG_AddToList, num ? (ULONG)XModuleBase->xm_CurrentSong : (ULONG)~0,
204 XMSNG_Active, num == (count - 1),
205 XMSNG_OldSong, num ? (ULONG)NULL : (ULONG)XModuleBase->xm_CurrentSong,
207 ReleaseSemaphore (&si->Lock); /* This is for XMSNG_AddToList */
209 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
215 GLOBALCALL void UpdateGuiSwitches ()
217 struct MenuItem *item;
218 struct WinUserData *wud = WDescr[WID_TOOLBOX].Wud;
220 if (wud && wud->MenuStrip)
222 if (wud->Win) ClearMenuStrip (wud->Win);
224 item = ItemAddress (wud->MenuStrip, SHIFTMENU(1) | SHIFTITEM(2) );
227 if (GuiSwitches.SaveIcons)
228 item->Flags |= CHECKED;
230 item->Flags &= ~CHECKED;
232 /* Confirm Overwrite? */
233 item = item->NextItem;
234 if (GuiSwitches.AskOverwrite)
235 item->Flags |= CHECKED;
237 item->Flags &= ~CHECKED;
240 item = item->NextItem;
241 if (GuiSwitches.AskExit)
242 item->Flags |= CHECKED;
244 item->Flags &= ~CHECKED;
246 if (wud->Win) ResetMenuStrip (wud->Win, wud->MenuStrip);
252 /*******************/
253 /* ToolBox Gadgets */
254 /*******************/
256 static void EditInstrumentsClicked (void)
258 NewWindow (WID_INSTRUMENTS);
261 static void EditSequenceClicked (void)
263 NewWindow (WID_SEQUENCE);
266 static void OptimizationClicked (void)
268 NewWindow (WID_OPTIMIZATION);
271 static void PlayClicked (void)
273 NewWindow (WID_PLAY);
276 static void EditSongsClicked (void)
278 NewWindow (WID_SONGINFO);
281 static void EditPatternsClicked (void)
283 NewWindow (WID_PATTERN);
292 static void ToolBoxMiNew (void)
296 if (si = xmCreateSong (
297 SNGA_ReadyToUse, TRUE,
301 ReleaseSemaphore (&si->Lock); /* This is for XMSNG_AddToList */
308 static void ToolBoxMiOpen (void)
310 StartFileRequest (FREQ_LOADMOD, ToolBoxOpenModule);
315 static void ToolBoxMiOpenNew (void)
323 static void ToolBoxMiSave (void)
329 ObtainSemaphoreShared (&XModuleBase->xm_BaseLock);
331 if (si = XModuleBase->xm_CurrentSong)
333 ObtainSemaphoreShared (&si->Lock);
335 if (!(LastErr = xmSaveModuleA (si, si->Path, NULL, NULL)))
338 ReleaseSemaphore (&si->Lock);
341 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
348 static void ToolBoxMiSaveAs (void)
351 UBYTE pathname[PATHNAME_MAX];
355 ObtainSemaphoreShared (&XModuleBase->xm_BaseLock);
357 if (si = XModuleBase->xm_CurrentSong)
359 ObtainSemaphoreShared (&si->Lock);
363 strncpy (pathname, si->Path, PATHNAME_MAX - 1);
364 pathname[PATHNAME_MAX - 1] = '\0';
366 else pathname[0] = '\0';
368 if (FileRequest (FREQ_SAVEMOD, pathname))
377 ReleaseSemaphore (&si->Lock);
380 ReleaseSemaphore (&XModuleBase->xm_BaseLock);
387 static void ToolBoxMiClearMod (void)
389 NewWindow (WID_CLEAR);
394 static void ToolBoxMiAbout (void)
396 ShowRequest (MSG_ABOUT_TEXT, MSG_CONTINUE,
397 XMODULEVER " " XMODULEDATE " " BUILDMODE,
399 AvailMem (MEMF_CHIP) >> 10,
400 AvailMem (MEMF_FAST) >> 10,
401 ScrInfo.PubScreenName[0] ? ScrInfo.PubScreenName : STR(MSG_DEFAULT),
402 PubPort ? PubPortName : STR(MSG_DISABLED),
403 CxPort ? CxPopKey : STR(MSG_DISABLED),
404 Catalog ? Catalog->cat_Language : (UBYTE *)"English");
409 static void ToolBoxMiHelp (void)
414 static void ToolBoxMiIconify (void)
417 DoNextSelect = FALSE;
422 static void ToolBoxMiQuit (void)
430 static void ToolBoxMiSaveFormat (void)
432 NewWindow (WID_SAVERS);
435 static void ToolBoxMiUserInterface (void)
437 NewWindow (WID_PREFS);
442 static void ToolBoxMiSaveIcons (void)
444 GuiSwitches.SaveIcons ^= 1;
449 static void ToolBoxMiOverwrite (void)
451 GuiSwitches.AskOverwrite ^= 1;
456 static void ToolBoxMiAskExit (void)
458 GuiSwitches.AskExit ^= 1;
463 static void ToolBoxMiOpenSettings (void)
465 UBYTE filename[PATHNAME_MAX];
467 strcpy (filename, "XModule.prefs");
469 if (FileRequest (FREQ_LOADMISC, filename))
470 LastErr = LoadPrefs (filename);
475 static void ToolBoxMiSaveSettings (void)
477 LastErr = SavePrefs ("PROGDIR:XModule.prefs");
482 static void ToolBoxMiSaveSettingsAs (void)
484 UBYTE filename[PATHNAME_MAX];
486 strcpy (filename, "PROGDIR:XModule.prefs");
488 if (FileRequest (FREQ_SAVEMISC, filename))
489 LastErr = SavePrefs (filename);