/*
**	ClearWin.c
**
**	Copyright (C) 1994,95,96 Bernardo Innocenti
**
**	Clear panel handling functions.
*/

#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>

#include <proto/exec.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/xmodule.h>

#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);
}

