//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "MainForm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------

/*
	Constructor.
*/
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

/*
	Event for the form's creation. (OnCreate)
*/
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
		// The usual stuff
	pgeMain->Align = alClient;
	pnlMain->Align = alClient;

		// Make sure that the first tab is showing. The default behavior is to
		// show the tab that was active during design.
	pgeMain->ActivePageIndex = 0;
}
//---------------------------------------------------------------------------

/*
	Event handler for the OnChange event of any edit box.
*/
void __fastcall TfrmMain::ColorChange(TObject *Sender)
{
		// Read the values from the edit boxes. (The text is AnsiString)
	int red = StrToInt(ledtRed->Text);
	int green = StrToInt(ledtGreen->Text);
	int blue = StrToInt(ledtBlue->Text);

		// Set the panel's color to the values of the edit boxes
	pnlMain->Color = TColor(RGB(red, green, blue));

		// Synchronize the sliders with the edit box values
	barRed->Position = red;
	barGreen->Position = green;
	barBlue->Position = blue;

	pnlMain->Caption = Format("%.2X%.2X%.2X", ARRAYOFCONST((red, green, blue)));
}
//---------------------------------------------------------------------------

/*
	Event handler when any of the sliders moves (OnChange event)
*/
void __fastcall TfrmMain::ColorSlides(TObject *Sender)
{
	spnRed->Position = short(barRed->Position);
	spnGreen->Position = short(barGreen->Position);
	spnBlue->Position = short(barBlue->Position);
}
//---------------------------------------------------------------------------

/*
	Event handler for the OnChange event of the alpha blending slider
*/
void __fastcall TfrmMain::barAlphaBlendChange(TObject *Sender)
{
		// Update the form's AlphaBlend property. (Transparency)
	AlphaBlendValue = (unsigned char)barAlphaBlend->Position;
}
//---------------------------------------------------------------------------

/*
	Redraw the label with the count of maps in combo box
*/
void TfrmMain::UpdateMapCount(void)
{
	int count = lstMaps2->Items->Count;
	lblAvailableMaps->Caption = "&Available maps (" + IntToStr(count) + ")";

		// Make sure there is no text shown if there are no items
	if (!count)
		lstMaps2->Clear();
}

/*
	Handler for *all* check boxes since the code is the same.
*/
void __fastcall TfrmMain::chkMapsClick(TObject *Sender)
{
		/*
			In a robust application, you may want to make sure that the Sender really
			is a TCheckBox. (dynamic_cast)
		*/
	TCheckBox *cb = (TCheckBox *)Sender;
	String s = cb->Caption;
	if (cb->Checked)
	{
		int index = lstMaps2->Items->Add(s);
		lstMaps2->ItemIndex = index;
	}
	else
	{
		int index = lstMaps2->Items->IndexOf(s);
		if (index >= 0)
			lstMaps2->Items->Delete(index);
	}
	UpdateMapCount();
}
//---------------------------------------------------------------------------

/*
	Called from the event handlers to check/uncheck all. (Code reuse)
*/
void TfrmMain::SetChecks(bool state)
{
	int count = grpMaps->ControlCount;
	for (int i = 0; i < count; i++)
	{
		TCheckBox *cb = (TCheckBox *)grpMaps->Controls[i];
		cb->Checked = state;
	}
}

/*
	Handles the click on "Select all"
*/
void __fastcall TfrmMain::btnSelectAllClick(TObject *Sender)
{
	SetChecks(true);  // Check all
	UpdateMapCount(); // Update label
}
//---------------------------------------------------------------------------

/*
	Handles the click on "Select none"
*/
void __fastcall TfrmMain::btnSelectNoneClick(TObject *Sender)
{
	SetChecks(false); // Uncheck all
	UpdateMapCount(); // Update label
}
//---------------------------------------------------------------------------

