1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-25 01:57:47 +01:00
cnc-ddraw/config/ConfigFormUnit.cpp

422 lines
9.0 KiB
C++
Raw Normal View History

2021-07-01 18:02:16 +02:00
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
2021-07-01 20:56:25 +02:00
#include <IniFiles.hpp>
#include <StrUtils.hpp>
#include <IOUtils.hpp>
2021-07-01 18:02:16 +02:00
#include "ConfigFormUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TConfigForm *ConfigForm;
2021-07-01 20:56:25 +02:00
bool Initialized;
2021-07-02 01:19:12 +02:00
/* Save previous settings so we don't override custom settings */
int Maxfps;
int Savesettings;
int Hook;
int Minfps;
2021-07-01 18:02:16 +02:00
//---------------------------------------------------------------------------
__fastcall TConfigForm::TConfigForm(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TConfigForm::DisplayBtnClick(TObject *Sender)
{
DisplayPnl->Visible = true;
AdvDisplayPnl->Visible = false;
CompatibilityPnl->Visible = false;
}
2021-07-01 18:04:34 +02:00
void __fastcall TConfigForm::AdvDisplayBtnClick(TObject *Sender)
2021-07-01 18:02:16 +02:00
{
AdvDisplayPnl->Visible = true;
DisplayPnl->Visible = false;
CompatibilityPnl->Visible = false;
}
2021-07-01 18:04:34 +02:00
void __fastcall TConfigForm::CompatibilityBtnClick(TObject *Sender)
{
CompatibilityPnl->Visible = true;
AdvDisplayPnl->Visible = false;
DisplayPnl->Visible = false;
}
2021-07-01 18:02:16 +02:00
2021-07-01 20:56:25 +02:00
void __fastcall TConfigForm::FormCreate(TObject *Sender)
{
auto *ini = new TIniFile(".\\ddraw.ini");
/* Display Settings */
2021-07-02 00:22:01 +02:00
bool windowed = GetBool(ini, "windowed", false);
bool fullscreen = GetBool(ini, "fullscreen", false);
2021-07-01 20:56:25 +02:00
if (windowed && fullscreen) {
2021-07-02 00:22:01 +02:00
PresentationCbx->ItemIndex = 1;
2021-07-01 20:56:25 +02:00
}
else if (windowed) {
2021-07-02 00:22:01 +02:00
PresentationCbx->ItemIndex = 2;
2021-07-01 20:56:25 +02:00
}
else {
PresentationCbx->ItemIndex = 0;
}
2021-07-02 00:22:01 +02:00
MaintasChk->State = GetBool(ini, "maintas", false) ? tssOn : tssOff;
VsyncChk->State = GetBool(ini, "vsync", false) ? tssOn : tssOff;
2021-07-02 02:42:57 +02:00
AdjmouseChk->State = GetBool(ini, "adjmouse", true) ? tssOn : tssOff;
2021-07-02 00:22:01 +02:00
DevmodeChk->State = GetBool(ini, "devmode", false) ? tssOff : tssOn;
2021-07-01 20:56:25 +02:00
/* Advanced Display Settings */
auto renderer = LowerCase(ini->ReadString("ddraw", "renderer", "auto"));
if (StartsStr("d", renderer)) {
RendererCbx->ItemIndex = 1;
}
else if (StartsStr("o", renderer)) {
RendererCbx->ItemIndex = 2;
}
else if (StartsStr("s", renderer) || StartsStr("g", renderer)) {
RendererCbx->ItemIndex = 3;
}
else {
RendererCbx->ItemIndex = 0;
}
try
{
TStringDynArray list = TDirectory::GetFiles(
"Shaders",
"*.glsl",
TSearchOption::soAllDirectories);
for (int i = 0; i < list.Length; i++)
ShaderCbx->AddItem(list[i], NULL);
auto shader = ini->ReadString("ddraw", "shader", "");
ShaderCbx->ItemIndex = ShaderCbx->Items->IndexOf(shader);
}
catch (...)
{
}
2021-07-02 01:19:12 +02:00
Maxfps = ini->ReadInteger("ddraw", "maxfps", -1);
MaxfpsChk->State = Maxfps != 0 ? tssOn : tssOff;
2021-07-01 20:56:25 +02:00
2021-07-02 00:22:01 +02:00
BoxingChk->State = GetBool(ini, "boxing", false) ? tssOn : tssOff;
2021-07-02 02:42:57 +02:00
BorderChk->State = GetBool(ini, "border", true) ? tssOn : tssOff;
2021-07-01 20:56:25 +02:00
2021-07-02 01:19:12 +02:00
Savesettings = ini->ReadInteger("ddraw", "savesettings", 1);
SavesettingsChk->State = Savesettings != 0 ? tssOn : tssOff;
2021-07-01 20:56:25 +02:00
2021-07-02 00:22:01 +02:00
/* Compatibility Settings */
int maxgameticks = ini->ReadInteger("ddraw", "maxgameticks", 0);
switch (maxgameticks) {
case -1:
MaxgameticksCbx->ItemIndex = 0;
break;
case -2:
MaxgameticksCbx->ItemIndex = 1;
break;
2021-07-02 01:19:12 +02:00
case 0:
MaxgameticksCbx->ItemIndex = 2;
break;
2021-07-02 00:22:01 +02:00
case 1000:
MaxgameticksCbx->ItemIndex = 3;
break;
case 500:
MaxgameticksCbx->ItemIndex = 4;
break;
case 60:
MaxgameticksCbx->ItemIndex = 5;
break;
case 30:
MaxgameticksCbx->ItemIndex = 6;
break;
case 25:
MaxgameticksCbx->ItemIndex = 7;
break;
case 15:
MaxgameticksCbx->ItemIndex = 8;
break;
default:
2021-07-02 01:19:12 +02:00
MaxgameticksCbx->AddItem(IntToStr(maxgameticks), NULL);
MaxgameticksCbx->ItemIndex = 9;
2021-07-02 00:22:01 +02:00
break;
}
NoactivateappChk->State = GetBool(ini, "noactivateapp", false) ? tssOn : tssOff;
2021-07-02 01:19:12 +02:00
Hook = ini->ReadInteger("ddraw", "hook", 4);
HookChk->State = Hook == 2 ? tssOn : tssOff;
Minfps = ini->ReadInteger("ddraw", "minfps", 0);
MinfpsChk->State = Minfps != 0 ? tssOn : tssOff;
2021-07-02 00:22:01 +02:00
FixpitchChk->State = GetBool(ini, "fixpitch", false) ? tssOn : tssOff;
NonexclusiveChk->State = GetBool(ini, "nonexclusive", false) ? tssOn : tssOff;
2021-07-01 20:56:25 +02:00
delete ini;
Initialized = true;
}
void TConfigForm::SaveSettings()
{
if (!Initialized)
return;
auto *ini = new TIniFile(".\\ddraw.ini");
/* Display Settings */
2021-07-02 00:22:01 +02:00
switch(PresentationCbx->ItemIndex) {
2021-07-01 20:56:25 +02:00
case 0:
ini->WriteString("ddraw", "windowed", "false");
ini->WriteString("ddraw", "fullscreen", "false");
break;
case 1:
ini->WriteString("ddraw", "windowed", "true");
ini->WriteString("ddraw", "fullscreen", "true");
break;
2021-07-02 00:22:01 +02:00
case 2:
2021-07-01 20:56:25 +02:00
ini->WriteString("ddraw", "windowed", "true");
ini->WriteString("ddraw", "fullscreen", "false");
break;
default:
break;
}
ini->WriteString(
"ddraw",
"maintas",
MaintasChk->State == tssOn ? "true" : "false");
ini->WriteString(
"ddraw",
"vsync",
VsyncChk->State == tssOn ? "true" : "false");
ini->WriteString(
"ddraw",
"adjmouse",
AdjmouseChk->State == tssOn ? "true" : "false");
ini->WriteString(
"ddraw",
"devmode",
2021-07-01 21:09:26 +02:00
DevmodeChk->State == tssOn ? "false" : "true");
2021-07-01 20:56:25 +02:00
/* Advanced Display Settings */
ini->WriteString("ddraw", "renderer", LowerCase(RendererCbx->Text));
ini->WriteString("ddraw", "shader", ShaderCbx->Text);
2021-07-02 01:19:12 +02:00
int maxfps = Maxfps == 0 ? -1 : Maxfps;
2021-07-01 20:56:25 +02:00
ini->WriteInteger(
"ddraw",
"maxfps",
2021-07-02 01:19:12 +02:00
MaxfpsChk->State == tssOn ? maxfps : 0);
2021-07-01 20:56:25 +02:00
ini->WriteString(
"ddraw",
"boxing",
BoxingChk->State == tssOn ? "true" : "false");
ini->WriteString(
"ddraw",
"border",
BorderChk->State == tssOn ? "true" : "false");
2021-07-02 01:19:12 +02:00
int savesettings = Savesettings == 0 ? 1 : Savesettings;
2021-07-01 20:56:25 +02:00
ini->WriteInteger(
"ddraw",
"savesettings",
2021-07-02 01:19:12 +02:00
SavesettingsChk->State == tssOn ? savesettings : 0);
if (Savesettings != 0 && SavesettingsChk->State == tssOff) {
ini->WriteInteger("ddraw", "width", 0);
ini->WriteInteger("ddraw", "height", 0);
ini->WriteInteger("ddraw", "posX", -32000);
ini->WriteInteger("ddraw", "posY", -32000);
}
2021-07-01 20:56:25 +02:00
2021-07-02 00:22:01 +02:00
/* Compatibility Settings */
switch(MaxgameticksCbx->ItemIndex) {
case 0:
ini->WriteInteger("ddraw", "maxgameticks", -1);
break;
case 1:
ini->WriteInteger("ddraw", "maxgameticks", -2);
break;
case 2:
ini->WriteInteger("ddraw", "maxgameticks", 0);
break;
case 3:
ini->WriteInteger("ddraw", "maxgameticks", 1000);
break;
case 4:
ini->WriteInteger("ddraw", "maxgameticks", 500);
break;
case 5:
ini->WriteInteger("ddraw", "maxgameticks", 60);
break;
case 6:
ini->WriteInteger("ddraw", "maxgameticks", 30);
break;
case 7:
ini->WriteInteger("ddraw", "maxgameticks", 25);
break;
case 8:
ini->WriteInteger("ddraw", "maxgameticks", 15);
break;
2021-07-02 01:19:12 +02:00
case 9:
ini->WriteString("ddraw", "maxgameticks", MaxgameticksCbx->Text);
break;
2021-07-02 00:22:01 +02:00
default:
break;
}
ini->WriteString(
"ddraw",
"noactivateapp",
NoactivateappChk->State == tssOn ? "true" : "false");
2021-07-02 01:19:12 +02:00
int hook = Hook != 2 ? Hook : 4;
2021-07-02 00:22:01 +02:00
ini->WriteInteger(
"ddraw",
"hook",
2021-07-02 01:19:12 +02:00
HookChk->State == tssOn ? 2 : hook);
2021-07-02 00:22:01 +02:00
if (HookChk->State == tssOn)
ini->WriteString("ddraw", "renderer", "gdi");
2021-07-02 01:19:12 +02:00
int minfps = Minfps == 0 ? -1 : Minfps;
2021-07-02 00:22:01 +02:00
ini->WriteInteger(
"ddraw",
"minfps",
2021-07-02 01:19:12 +02:00
MinfpsChk->State == tssOn ? minfps : 0);
2021-07-02 00:22:01 +02:00
ini->WriteString(
"ddraw",
"fixpitch",
FixpitchChk->State == tssOn ? "true" : "false");
ini->WriteString(
"ddraw",
"nonexclusive",
NonexclusiveChk->State == tssOn ? "true" : "false");
2021-07-01 20:56:25 +02:00
delete ini;
}
2021-07-02 00:22:01 +02:00
bool TConfigForm::GetBool(TIniFile *ini, System::UnicodeString key, bool defValue)
{
auto s = LowerCase(ini->ReadString("ddraw", key, defValue ? "true" : "false"));
return s == "true" || s == "yes" || s == "1";
}
2021-07-01 20:56:25 +02:00
void __fastcall TConfigForm::PresentationCbxChange(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::MaintasChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::VsyncChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::AdjmouseChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::DevmodeChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::RendererCbxChange(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::ShaderCbxChange(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::MaxfpsChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::BoxingChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::BorderChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::SavesettingsChkClick(TObject *Sender)
{
SaveSettings();
}
2021-07-02 00:22:01 +02:00
void __fastcall TConfigForm::MaxgameticksCbxChange(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::NoactivateappChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::HookChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::MinfpsChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::FixpitchChkClick(TObject *Sender)
{
SaveSettings();
}
void __fastcall TConfigForm::NonexclusiveChkClick(TObject *Sender)
{
SaveSettings();
}
2021-07-02 18:20:47 +02:00
void __fastcall TConfigForm::PboxPaint(TObject *Sender)
{
TPaintBox *pbox = static_cast<TPaintBox*>(Sender);
pbox->Canvas->Rectangle(pbox->ClientRect);
}