/* ** ClearWin.c ** ** Copyright (C) 1994,95,96 Bernardo Innocenti ** ** Clear panel handling functions. */ #include #include #include #include #include #include #include #include "XModulePriv.h" #include "Gui.h" /* Gadgets IDs */ enum { GD_ClearGroup0, GD_ClearGroup1, GD_ClearSequence, GD_ClearInstruments, GD_ClearPatterns, GD_ClearPerform, Clear_CNT }; /*****************************/ /* Local function prototypes */ /*****************************/ static void ClearPerformClicked (struct WinUserData *wud); XDEF struct ClearSwitches ClearSwitches = { 1, 1, 1 }; static LONG ClearArgs[] = { VGROUP_KIND, BBFT_RIDGE, CHECKBOX_KIND, NULL, MSG_CLR_SEQUENCE_GAD, (LONG)&ClearSwitches.ClearSeq, TAG_DONE, CHECKBOX_KIND, NULL, MSG_CLR_INSTRUMENTS_GAD, (LONG)&ClearSwitches.ClearInstr, TAG_DONE, CHECKBOX_KIND, NULL, MSG_CLR_PATTERNS_GAD, (LONG)&ClearSwitches.ClearPatt, TAG_DONE, ENDGROUP_KIND, BUTTON_KIND, (LONG)ClearPerformClicked, MSG_CLEARMOD_GAD, TAG_DONE, ENDGROUP_KIND }; XDEF LONG ClearWinTags[] = { XMWIN_LayoutArgs, (LONG)ClearArgs, XMWIN_GCount, Clear_CNT, XMWIN_Title, MSG_CLEAR_TITLE, XMWIN_WindowFlags, WFLG_CLOSEGADGET, XMWIN_IDCMPFlags, CHECKBOXIDCMP | BUTTONIDCMP | IDCMP_CLOSEWINDOW | IDCMP_REFRESHWINDOW, XMWIN_HelpNode, (LONG)"Clear", TAG_DONE }; GLOBALCALL void UpdateClearSwitches (void) { struct WinUserData *wud = WDescr[WID_CLEAR].Wud; if (wud && wud->Win) SetGadgets (wud, GD_ClearSequence, ClearSwitches.ClearSeq, GD_ClearInstruments, ClearSwitches.ClearInstr, GD_ClearPatterns, ClearSwitches.ClearPatt, -1); } /*****************/ /* Clear Gadgets */ /*****************/ static void ClearPerformClicked (struct WinUserData *wud) { struct SongInfo *si; LONG i; if (si = xmLockActiveSong (SM_EXCLUSIVE)) { if (ClearSwitches.ClearPatt) { for (i = si->NumPatterns - 1 ; i >= 0 ; i--) xmRemPattern (si, i, 0); xmAddPatternA (si, NULL); } if (ClearSwitches.ClearInstr) { for (i = 1 ; i <= si->LastInstrument ; i++) xmRemInstrument (si, i); } if (ClearSwitches.ClearSeq) { xmSetSongLen (si, 1); si->Sequence[0] = 0; } ReleaseSemaphore (&si->Lock); } UpdateSongInfo(); MyCloseWindow (wud); }