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

#include <vcl.h>
#pragma hdrstop

#include "MainForm.h"
#include <IniFiles.hpp>

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

/*
  Constructor
*/
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner), ConfigFilename_("./MyProgram.ini")
{
}
//---------------------------------------------------------------------------

/*
  Reads program settings from an .ini file
*/
void TfrmMain::LoadConfig(const AnsiString &Filename)
{
  TIniFile *inifile = new TIniFile(ConfigFilename_);

    Width = inifile->ReadInteger("General", "Width", 365);
    Height = inifile->ReadInteger("General", "Height", 285);
    Top = inifile->ReadInteger("General", "Top", 60);
    Left = inifile->ReadInteger("General", "Left", 60);

    edtTitle->Text = inifile->ReadString("General", "Title", "Default");
    edtDescription->Text = inifile->ReadString("General", "Description", "Default");

    rgrpMap->ItemIndex = inifile->ReadInteger("Level", "Map", 0);
    chkSpectre->Checked = inifile->ReadBool("Level", "Spectre", False);
    chkArachnotron->Checked = inifile->ReadBool("Level", "Arachnotron", False);
    chkMancubus->Checked = inifile->ReadBool("Level", "Mancubus", False);
    spnNumSpectre->Position = (short)inifile->ReadInteger("Level", "SpectreCount", 1);
    spnNumArachnotron->Position = (short)inifile->ReadInteger("Level", "ArachnotronCount", 1);
    spnNumMancubus->Position = (short)inifile->ReadInteger("Level", "MancubusCount", 1);

  delete inifile;
}

/*
  Writes settings to an .ini file
*/
void TfrmMain::SaveConfig(const AnsiString &Filename)
{
  TIniFile *inifile = new TIniFile(ConfigFilename_);

    inifile->WriteInteger("General", "Width", Width);
    inifile->WriteInteger("General", "Height", Height);
    inifile->WriteInteger("General", "Top", Top);
    inifile->WriteInteger("General", "Left", Left);

    inifile->WriteString("General", "Title", edtTitle->Text);
    inifile->WriteString("General", "Description", edtDescription->Text);

    inifile->WriteInteger("Level", "Map", rgrpMap->ItemIndex);
    inifile->WriteBool("Level", "Spectre", chkSpectre->Checked);
    inifile->WriteBool("Level", "Arachnotron", chkArachnotron->Checked);
    inifile->WriteBool("Level", "Mancubus", chkMancubus->Checked);
    inifile->WriteInteger("Level", "SpectreCount", spnNumSpectre->Position);
    inifile->WriteInteger("Level", "ArachnotronCount", spnNumArachnotron->Position);
    inifile->WriteInteger("Level", "MancubusCount", spnNumMancubus->Position);

  delete inifile;
}

void __fastcall TfrmMain::btnLoadClick(TObject *Sender)
{
  LoadConfig(ConfigFilename_);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
{
  SaveConfig(ConfigFilename_);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnSaveClick(TObject *Sender)
{
  SaveConfig(ConfigFilename_);
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
  LoadConfig(ConfigFilename_);
}
//---------------------------------------------------------------------------