mirror of
https://github.com/ZDoom/Raze.git
synced 2024-11-15 08:51:24 +00:00
215 lines
6.6 KiB
C++
215 lines
6.6 KiB
C++
|
|
#include "settingspage.h"
|
|
#include "launcherwindow.h"
|
|
#include "gstrings.h"
|
|
#include "i_interface.h"
|
|
#include "v_video.h"
|
|
#include <zwidget/core/resourcedata.h>
|
|
#include <zwidget/widgets/listview/listview.h>
|
|
#include <zwidget/widgets/textlabel/textlabel.h>
|
|
#include <zwidget/widgets/checkboxlabel/checkboxlabel.h>
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
EXTERN_CVAR(Int, vid_preferbackend);
|
|
#endif
|
|
|
|
EXTERN_CVAR(String, language)
|
|
EXTERN_CVAR(Bool, queryiwad);
|
|
|
|
SettingsPage::SettingsPage(LauncherWindow* launcher, int* autoloadflags) : Widget(nullptr), Launcher(launcher), AutoloadFlags(autoloadflags)
|
|
{
|
|
LangLabel = new TextLabel(this);
|
|
GeneralLabel = new TextLabel(this);
|
|
//ExtrasLabel = new TextLabel(this);
|
|
FullscreenCheckbox = new CheckboxLabel(this);
|
|
DisableAutoloadCheckbox = new CheckboxLabel(this);
|
|
DontAskAgainCheckbox = new CheckboxLabel(this);
|
|
/*
|
|
LightsCheckbox = new CheckboxLabel(this);
|
|
BrightmapsCheckbox = new CheckboxLabel(this);
|
|
WidescreenCheckbox = new CheckboxLabel(this);
|
|
*/
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
BackendLabel = new TextLabel(this);
|
|
VulkanCheckbox = new CheckboxLabel(this);
|
|
OpenGLCheckbox = new CheckboxLabel(this);
|
|
GLESCheckbox = new CheckboxLabel(this);
|
|
#endif
|
|
|
|
FullscreenCheckbox->SetChecked(vid_fullscreen);
|
|
DontAskAgainCheckbox->SetChecked(!queryiwad);
|
|
|
|
int flags = *autoloadflags;
|
|
DisableAutoloadCheckbox->SetChecked(flags & 1);
|
|
/*
|
|
LightsCheckbox->SetChecked(flags & 2);
|
|
BrightmapsCheckbox->SetChecked(flags & 4);
|
|
WidescreenCheckbox->SetChecked(flags & 8);
|
|
*/
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
OpenGLCheckbox->SetRadioStyle(true);
|
|
VulkanCheckbox->SetRadioStyle(true);
|
|
GLESCheckbox->SetRadioStyle(true);
|
|
OpenGLCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
|
VulkanCheckbox->FuncChanged = [this](bool on) { if (on) { OpenGLCheckbox->SetChecked(false); GLESCheckbox->SetChecked(false); }};
|
|
GLESCheckbox->FuncChanged = [this](bool on) { if (on) { VulkanCheckbox->SetChecked(false); OpenGLCheckbox->SetChecked(false); }};
|
|
switch (vid_preferbackend)
|
|
{
|
|
case 0:
|
|
OpenGLCheckbox->SetChecked(true);
|
|
break;
|
|
case 1:
|
|
VulkanCheckbox->SetChecked(true);
|
|
break;
|
|
case 2:
|
|
GLESCheckbox->SetChecked(true);
|
|
break;
|
|
}
|
|
#endif
|
|
|
|
LangList = new ListView(this);
|
|
|
|
try
|
|
{
|
|
auto data = LoadWidgetData("menudef.txt");
|
|
FScanner sc;
|
|
sc.OpenMem("menudef.txt", data);
|
|
while (sc.GetString())
|
|
{
|
|
if (sc.Compare("OptionString"))
|
|
{
|
|
sc.MustGetString();
|
|
if (sc.Compare("LanguageOptions"))
|
|
{
|
|
sc.MustGetStringName("{");
|
|
while (!sc.CheckString("}"))
|
|
{
|
|
sc.MustGetString();
|
|
FString iso = sc.String;
|
|
sc.MustGetStringName(",");
|
|
sc.MustGetString();
|
|
if(iso.CompareNoCase("auto"))
|
|
languages.push_back(std::make_pair(iso, FString(sc.String)));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (const std::exception& ex)
|
|
{
|
|
hideLanguage = true;
|
|
}
|
|
int i = 0;
|
|
for (auto& l : languages)
|
|
{
|
|
LangList->AddItem(l.second.GetChars());
|
|
if (!l.first.CompareNoCase(::language))
|
|
LangList->SetSelectedItem(i);
|
|
i++;
|
|
}
|
|
|
|
LangList->OnChanged = [=](int i) { OnLanguageChanged(i); };
|
|
}
|
|
|
|
void SettingsPage::Save()
|
|
{
|
|
vid_fullscreen = FullscreenCheckbox->GetChecked();
|
|
queryiwad = !DontAskAgainCheckbox->GetChecked();
|
|
|
|
int flags = 0;
|
|
if (DisableAutoloadCheckbox->GetChecked()) flags |= 1;
|
|
/*
|
|
if (LightsCheckbox->GetChecked()) flags |= 2;
|
|
if (BrightmapsCheckbox->GetChecked()) flags |= 4;
|
|
if (WidescreenCheckbox->GetChecked()) flags |= 8;
|
|
*/
|
|
*AutoloadFlags = flags;
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
int v = 1;
|
|
if (OpenGLCheckbox->GetChecked()) v = 0;
|
|
else if (VulkanCheckbox->GetChecked()) v = 1;
|
|
else if (GLESCheckbox->GetChecked()) v = 2;
|
|
if (v != vid_preferbackend) vid_preferbackend = v;
|
|
#endif
|
|
}
|
|
|
|
void SettingsPage::UpdateLanguage()
|
|
{
|
|
LangLabel->SetText(GStrings("OPTMNU_LANGUAGE"));
|
|
GeneralLabel->SetText(GStrings("PICKER_GENERAL"));
|
|
// ExtrasLabel->SetText(GStrings("PICKER_EXTRA"));
|
|
FullscreenCheckbox->SetText(GStrings("PICKER_FULLSCREEN"));
|
|
DisableAutoloadCheckbox->SetText(GStrings("PICKER_NOAUTOLOAD"));
|
|
DontAskAgainCheckbox->SetText(GStrings("PICKER_DONTASK"));
|
|
/*
|
|
LightsCheckbox->SetText(GStrings("PICKER_LIGHTS"));
|
|
BrightmapsCheckbox->SetText(GStrings("PICKER_BRIGHTMAPS"));
|
|
WidescreenCheckbox->SetText(GStrings("PICKER_WIDESCREEN"));
|
|
*/
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
BackendLabel->SetText(GStrings("PICKER_PREFERBACKEND"));
|
|
VulkanCheckbox->SetText(GStrings("OPTVAL_VULKAN"));
|
|
OpenGLCheckbox->SetText(GStrings("OPTVAL_OPENGL"));
|
|
GLESCheckbox->SetText(GStrings("OPTVAL_OPENGLES"));
|
|
#endif
|
|
}
|
|
|
|
void SettingsPage::OnLanguageChanged(int i)
|
|
{
|
|
::language = languages[i].first.GetChars();
|
|
GStrings.UpdateLanguage(::language); // CVAR callbacks are not active yet.
|
|
UpdateLanguage();
|
|
Update();
|
|
Launcher->UpdateLanguage();
|
|
}
|
|
|
|
void SettingsPage::OnGeometryChanged()
|
|
{
|
|
double panelWidth = 200.0;
|
|
double y = 0.0;
|
|
double w = GetWidth();
|
|
double h = GetHeight();
|
|
|
|
GeneralLabel->SetFrameGeometry(0.0, y, 190.0, GeneralLabel->GetPreferredHeight());
|
|
//ExtrasLabel->SetFrameGeometry(w - panelWidth, y, panelWidth, ExtrasLabel->GetPreferredHeight());
|
|
y += GeneralLabel->GetPreferredHeight();
|
|
|
|
FullscreenCheckbox->SetFrameGeometry(0.0, y, 190.0, FullscreenCheckbox->GetPreferredHeight());
|
|
//LightsCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, LightsCheckbox->GetPreferredHeight());
|
|
y += FullscreenCheckbox->GetPreferredHeight();
|
|
|
|
DisableAutoloadCheckbox->SetFrameGeometry(0.0, y, 190.0, DisableAutoloadCheckbox->GetPreferredHeight());
|
|
//BrightmapsCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, BrightmapsCheckbox->GetPreferredHeight());
|
|
y += DisableAutoloadCheckbox->GetPreferredHeight();
|
|
|
|
DontAskAgainCheckbox->SetFrameGeometry(0.0, y, 190.0, DontAskAgainCheckbox->GetPreferredHeight());
|
|
//WidescreenCheckbox->SetFrameGeometry(w - panelWidth, y, panelWidth, WidescreenCheckbox->GetPreferredHeight());
|
|
y += DontAskAgainCheckbox->GetPreferredHeight();
|
|
|
|
#ifdef RENDER_BACKENDS
|
|
double x = GetWidth() - 20.0 - panelWidth;
|
|
y = 0;
|
|
BackendLabel->SetFrameGeometry(x, y, 190.0, BackendLabel->GetPreferredHeight());
|
|
y += BackendLabel->GetPreferredHeight();
|
|
|
|
VulkanCheckbox->SetFrameGeometry(x, y, 190.0, VulkanCheckbox->GetPreferredHeight());
|
|
y += VulkanCheckbox->GetPreferredHeight();
|
|
|
|
OpenGLCheckbox->SetFrameGeometry(x, y, 190.0, OpenGLCheckbox->GetPreferredHeight());
|
|
y += OpenGLCheckbox->GetPreferredHeight();
|
|
|
|
GLESCheckbox->SetFrameGeometry(x, y, 190.0, GLESCheckbox->GetPreferredHeight());
|
|
y += GLESCheckbox->GetPreferredHeight();
|
|
#endif
|
|
|
|
if (!hideLanguage)
|
|
{
|
|
LangLabel->SetFrameGeometry(0.0, y, w, LangLabel->GetPreferredHeight());
|
|
y += LangLabel->GetPreferredHeight();
|
|
LangList->SetFrameGeometry(0.0, y, w, std::max(h - y, 0.0));
|
|
}
|
|
}
|