Add user-friendliness

This commit is contained in:
nastys
2019-08-04 02:07:05 +02:00
parent a8f6f1e8ea
commit 058a2c68a3
29 changed files with 55872 additions and 4358 deletions
@@ -12,6 +12,12 @@
using namespace System;
using namespace System::Windows::Forms;
float BaseScaleSize = 96;
int Col1Width = 110;
int Col2Left = 114;
int Col2Width = 110;
int ControlSpacing = 6;
// Custom function. Works like GetPrivateProfileIntW but returns bool. Can detect a numeric value or string.
bool GetPrivateProfileBoolW(LPCWSTR lpAppName, LPCWSTR lpKeyName, bool default, LPCWSTR lpFileName)
{
@@ -220,16 +226,24 @@ public:
cb->Text = gcnew String(_friendlyName);
cb->Checked = GetPrivateProfileBoolW(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath);
cb->Left = left;
cb->Left = left + 2;
cb->Top = top;
cb->AutoSize = true;
cb->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
cb->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(cb, gcnew String(_description));
panel->Controls->Add(cb);
mainControlHandle = cb->Handle;
return 23;
int ControlHeight = cb->Font->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -271,7 +285,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -280,18 +294,27 @@ public:
numberbox->Value = (int)GetPrivateProfileIntW(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath); // cast to int because this returns uint and breaks -1
// it seems it does read negative values correctly though... but eventually a parser that properly supports negative numbers would be ideal
numberbox->Left = left + 104;
numberbox->Left = left + Col2Left;
numberbox->Top = top;
numberbox->Width = 90;
numberbox->Width = Col2Width;
numberbox->AutoSize = true;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
numberbox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(numberbox, gcnew String(_description));
panel->Controls->Add(label);
panel->Controls->Add(numberbox);
mainControlHandle = numberbox->Handle;
return 28;
int ControlHeight = numberbox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -334,7 +357,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -345,11 +368,18 @@ public:
}
textbox->Text = gcnew String(stringBuf);
textbox->Left = left + 104;
textbox->Left = left + Col2Left;
textbox->Top = top;
textbox->Width = 90;
textbox->Width = Col2Width;
textbox->AutoSize = true;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
textbox->Scale(ScaleWidth, ScaleHeight);
// disable editing for utf8 mode because the ANSI hack used may not work correctly
if (_useUtf8) {
textbox->Enabled = false;
@@ -361,7 +391,9 @@ public:
panel->Controls->Add(label);
panel->Controls->Add(textbox);
mainControlHandle = textbox->Handle;
return 28;
int ControlHeight = textbox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -415,7 +447,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -423,20 +455,29 @@ public:
combobox->Items->Add(msclr::interop::marshal_as<System::String^>(choice));
}
combobox->SelectedIndex = GetPrivateProfileIntW(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath);
combobox->Left = left + 104;
combobox->Left = left + Col2Left;
combobox->Top = top;
combobox->Width = 90;
combobox->Width = Col2Width;
combobox->AutoSize = true;
combobox->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
combobox->DropDownStyle = ComboBoxStyle::DropDownList;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
panel->Controls->Add(label);
panel->Controls->Add(combobox);
mainControlHandle = combobox->Handle;
return 28;;
int ControlHeight = combobox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -481,7 +522,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -496,13 +537,20 @@ public:
}
combobox->Text = gcnew String(stringBuf);
combobox->Left = left + 104;
combobox->Left = left + Col2Left;
combobox->Top = top;
combobox->Width = 90;
combobox->Width = Col2Width;
combobox->AutoSize = true;
combobox->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
combobox->DropDownStyle = ComboBoxStyle::DropDown;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
// disable editing for utf8 mode because the ANSI hack used may not work correctly
if (_useUtf8) {
label->Enabled = false;
@@ -515,7 +563,9 @@ public:
panel->Controls->Add(label);
panel->Controls->Add(combobox);
mainControlHandle = combobox->Handle;
return 28;;
int ControlHeight = combobox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -571,7 +621,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -582,13 +632,20 @@ public:
tempSysStr = Convert::ToInt32((int)GetPrivateProfileIntW(_iniSectionName, _iniVarName, _defaultVal, _iniFilePath)).ToString();
combobox->Text = gcnew String(tempSysStr);
combobox->Left = left + 104;
combobox->Left = left + Col2Left;
combobox->Top = top;
combobox->Width = 90;
combobox->Width = Col2Width;
combobox->AutoSize = true;
combobox->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
combobox->DropDownStyle = ComboBoxStyle::DropDown;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
@@ -598,7 +655,9 @@ public:
panel->Controls->Add(label);
panel->Controls->Add(combobox);
mainControlHandle = combobox->Handle;
return 28;;
int ControlHeight = combobox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -643,7 +702,7 @@ public:
label->Text = gcnew String(_friendlyName);
label->Left = left;
label->Top = top + 3;
label->Width = 100;
label->Width = Col1Width;
label->AutoSize = true;
label->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
@@ -663,13 +722,20 @@ public:
combobox->Text = tempSysStr;
}
combobox->Left = left + 104;
combobox->Left = left + Col2Left;
combobox->Top = top;
combobox->Width = 90;
combobox->Width = Col2Width;
combobox->AutoSize = true;
combobox->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
combobox->DropDownStyle = ComboBoxStyle::DropDown;
Form^ RootForm = panel->FindForm();
Drawing::SizeF CurrentScaleSize = RootForm->CurrentAutoScaleDimensions;
float ScaleWidth = CurrentScaleSize.Width / BaseScaleSize;
float ScaleHeight = CurrentScaleSize.Height / BaseScaleSize;
label->Scale(ScaleWidth, ScaleHeight);
combobox->Scale(ScaleWidth, ScaleHeight);
tooltip->SetToolTip(label, gcnew String(_description));
tooltip->SetToolTip(combobox, gcnew String(_description));
@@ -679,7 +745,9 @@ public:
panel->Controls->Add(label);
panel->Controls->Add(combobox);
mainControlHandle = combobox->Handle;
return 28;;
int ControlHeight = combobox->Height / ScaleHeight;
return ControlHeight + ControlSpacing;
}
virtual void SaveOption()
@@ -167,16 +167,22 @@
<ItemGroup>
<ClInclude Include="ConfigOption.h" />
<ClInclude Include="framework.h" />
<ClInclude Include="SkinnedMessageBox.h" />
<ClInclude Include="TabPadding.h" />
<ClInclude Include="ui.h">
<FileType>CppForm</FileType>
</ClInclude>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="SkinnedMessageBox.resx" />
<EmbeddedResource Include="ui.resx">
<DependentUpon>ui.h</DependentUpon>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<Image Include="PokeSnarf2x.bmp" />
<Image Include="PokeSnarf2x.png" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

@@ -0,0 +1,394 @@
#pragma once
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files
#include <windows.h>
using namespace System;
using namespace System::Windows::Forms;
using namespace System::Drawing;
// ported from https://stackoverflow.com/a/7785745
// original code by user LarsTech https://stackoverflow.com/users/719186/larstech
static ref class SkinnedMessageBox
{
private: ref class SkinnedMessageBoxForm : Form
{
private:
void SkinnedMessageBoxForm_Shown(Object^ sender, EventArgs^ e)
{
Activate();
}
void SkinnedMessageBoxForm_FormClosed(Object^ sender, FormClosedEventArgs^ e)
{
if (CancelButton && (DialogResult == System::Windows::Forms::DialogResult::None || DialogResult == System::Windows::Forms::DialogResult::Cancel))
DialogResult = CancelButton->DialogResult;
}
void InitComponentNew()
{
this->SuspendLayout();
this->AutoSize = true;
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
this->Width = 350;
this->Height = 140;
this->StartPosition = FormStartPosition::CenterScreen;
this->MaximizeBox = false;
this->MinimizeBox = false;
this->ShowInTaskbar = false;
this->ShowIcon = false;
__try
{
this->Icon = Application::OpenForms[0]->Icon;
}
__except (1) { }
this->Shown += gcnew EventHandler(this, &SkinnedMessageBoxForm::SkinnedMessageBoxForm_Shown);
this->FormClosed += gcnew FormClosedEventHandler(this, &SkinnedMessageBoxForm::SkinnedMessageBoxForm_FormClosed);
//this->Font = SystemFonts::MessageBoxFont;
//this->Font = gcnew Font(SystemFonts::MessageBoxFont->FontFamily, SystemFonts::MessageBoxFont->SizeInPoints);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::None;
this->ResumeLayout(false);
this->PerformLayout();
}
float ScaleWidth = 1.0;
float ScaleHeight = 1.0;
int btnWidth = 85;
int btnHeight = 23;
int btnPadding = 12;
static cli::array<Button^>^ buttonrefs = gcnew cli::array<Button^>{ gcnew Button, gcnew Button, gcnew Button };
int numbuttons = 1;
Button^ AddBtn(String^ text, System::Windows::Forms::DialogResult result, int btnNumber)
{
Button^ btn = buttonrefs[btnNumber];
btn->Text = text;
btn->DialogResult = result;
btn->Anchor = AnchorStyles::Bottom | AnchorStyles::Right;
btn->Width = btnWidth;
btn->Height = btnHeight;
btn->Location = Point(ClientSize.Width - btnWidth * (numbuttons - btnNumber) - btnPadding * (numbuttons - btnNumber), ClientSize.Height - btnHeight - btnPadding);
Controls->Add(btn);
//buttonrefs[btnNumber] = btn;
return btn;
}
void SetBackCol(Control^ elem, Color color)
{
Type^ elemType = elem->GetType();
if ((elem->HasChildren || elemType == Button::typeid || elemType == ComboBox::typeid) && elemType != NumericUpDown::typeid)
{
elem->BackColor = color;
for (int i = 0; i < elem->Controls->Count; i++)
{
SetBackCol(elem->Controls[i], color);
}
}
}
void SetForeCol(Control^ elem, Color color)
{
Type^ elemType = elem->GetType();
if (elemType != NumericUpDown::typeid && elemType != TextBox::typeid)
{
elem->ForeColor = color;
}
if (elem->HasChildren && elemType != NumericUpDown::typeid)
{
for (int i = 0; i < elem->Controls->Count; i++)
{
SetForeCol(elem->Controls[i], color);
}
}
}
void SetUIStyle(Control^ elem, FlatStyle style)
{
Type^ elemType = elem->GetType();
if (elemType == Button::typeid)
{
((Button^)elem)->FlatStyle = style;
}
else if (elemType == ComboBox::typeid)
{
((ComboBox^)elem)->FlatStyle = style;
}
else if (elemType == CheckBox::typeid)
{
((CheckBox^)elem)->FlatStyle = style;
}
if (elem->HasChildren && elemType != NumericUpDown::typeid)
{
for (int i = 0; i < elem->Controls->Count; i++)
{
SetUIStyle(elem->Controls[i], style);
}
}
}
public:
SkinnedMessageBoxForm(IWin32Window^ owner, String^ message, String^ caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultbutton, MessageBoxOptions options)
{
InitComponentNew();
ScaleWidth = Font->SizeInPoints / 8.0f;
ScaleHeight = ScaleWidth;
btnWidth *= ScaleWidth;
btnHeight *= ScaleHeight;
btnPadding *= ScaleWidth;
Width *= ScaleWidth;
Height *= ScaleHeight;
if (owner->Handle != IntPtr::Zero)
{
Owner = Control::FromHandle(owner->Handle)->FindForm();
}
else
{
Owner = ActiveForm;
}
Text = caption;
System::Windows::Forms::Padding lblMargin = System::Windows::Forms::Padding(14 * ScaleWidth, 0 * ScaleHeight, 14 * ScaleWidth, 45 * ScaleHeight);
Point lblLocation = Point(14 * ScaleWidth, 14 * ScaleHeight);
Drawing::Size lblMinSize = Drawing::Size(ClientSize.Width - lblLocation.X - lblMargin.Right, 0);
Drawing::Size lblMaxSize = Drawing::Size(600 * ScaleWidth, 0 * ScaleHeight);
Label^ MessageLbl = gcnew Label();
MessageLbl->Text = message;
MessageLbl->AutoSize = true;
MessageLbl->Margin = lblMargin;
MessageLbl->Location = lblLocation;
MessageLbl->MinimumSize = lblMinSize;
MessageLbl->MaximumSize = lblMaxSize;
Controls->Add(MessageLbl);
if (buttons == MessageBoxButtons::OK)
{
numbuttons = 1;
Button^ OkBtn = AddBtn("&OK", System::Windows::Forms::DialogResult::OK, 0);
CancelButton = OkBtn;
//(not sure why, but this matches official .NET behaviour)
}
else if (buttons == MessageBoxButtons::OKCancel)
{
numbuttons = 2;
AddBtn("&OK", System::Windows::Forms::DialogResult::OK, 0);
Button^ CancelBtn = AddBtn("&Cancel", System::Windows::Forms::DialogResult::Cancel, 1);
CancelButton = CancelBtn;
}
else if (buttons == MessageBoxButtons::YesNo)
{
numbuttons = 2;
AddBtn("&Yes", System::Windows::Forms::DialogResult::Yes, 0);
Button^ NoBtn = AddBtn("&No", System::Windows::Forms::DialogResult::No, 1);
CancelButton = NoBtn;
//(official .NET doesn't set cancel button, but this seems pretty clear to me...)
}
else if (buttons == MessageBoxButtons::RetryCancel)
{
numbuttons = 2;
AddBtn("&Retry", System::Windows::Forms::DialogResult::Retry, 0);
Button^ CancelBtn = AddBtn("&Cancel", System::Windows::Forms::DialogResult::Cancel, 1);
CancelButton = CancelBtn;
}
else if (buttons == MessageBoxButtons::YesNoCancel)
{
numbuttons = 3;
AddBtn("&Yes", System::Windows::Forms::DialogResult::Yes, 0);
AddBtn("&No", System::Windows::Forms::DialogResult::No, 1);
Button^ CancelBtn = AddBtn("&Cancel", System::Windows::Forms::DialogResult::Cancel, 2);
CancelButton = CancelBtn;
}
else if (buttons == MessageBoxButtons::AbortRetryIgnore)
{
numbuttons = 3;
AddBtn("&Abort", System::Windows::Forms::DialogResult::Abort, 0);
AddBtn("&Retry", System::Windows::Forms::DialogResult::Retry, 1);
AddBtn("&Ignore", System::Windows::Forms::DialogResult::Ignore, 2);
//this.CancelButton = IgnoreBtn;
//(official .NET doesn't set cancel button)
}
else
{
throw gcnew System::ComponentModel::InvalidEnumArgumentException("buttons", (int)buttons, MessageBoxButtons::typeid);
}
if (!CancelButton)
ControlBox = false;
if (icon != MessageBoxIcon::None)
{
int iconsize = 32 * ScaleWidth;
int iconpadding = 12 * ScaleWidth;
int textpadding = -8 * ScaleWidth;
PictureBox^ iconPB = gcnew PictureBox();
iconPB->Width = iconsize;
iconPB->Height = iconsize;
iconPB->Top = 10 * ScaleHeight;
iconPB->Left = 10 * ScaleWidth;
iconPB->AccessibleName = "Icon";
// there are many duplicated values:
// https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.messageboxicon?view=netframework-4.7.2
if (icon == MessageBoxIcon::Error) // also Hand and Stop
{
Drawing::Icon^ erricon = gcnew Drawing::Icon(SystemIcons::Error, iconsize, iconsize);
iconPB->Image = erricon->ToBitmap();
iconPB->AccessibleDescription = "Error";
//this.Icon = SystemIcons.Error;
System::Media::SystemSounds::Hand->Play();
}
else if (icon == MessageBoxIcon::Question)
{
Drawing::Icon^ qicon = gcnew Drawing::Icon(SystemIcons::Question, iconsize, iconsize);
iconPB->Image = qicon->ToBitmap();
iconPB->AccessibleDescription = "Question";
//this.Icon = SystemIcons.Question;
System::Media::SystemSounds::Question->Play();
}
else if (icon == MessageBoxIcon::Warning) // also Exclamation
{
Drawing::Icon^ warnicon = gcnew Drawing::Icon(SystemIcons::Warning, iconsize, iconsize);
iconPB->Image = warnicon->ToBitmap();
//System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(SkinnedMessageBox::typeid));
//iconPB->Image = cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"PokeSnarf2x"));
iconPB->AccessibleDescription = "Warning";
//this.Icon = SystemIcons.Warning;
textpadding -= 2 * ScaleWidth; // triangle shape looks worse without this
System::Media::SystemSounds::Exclamation->Play();
}
else if (icon == MessageBoxIcon::Information) // also Asterisk
{
Drawing::Icon^ infoicon = gcnew Drawing::Icon(SystemIcons::Information, iconsize, iconsize);
iconPB->Image = infoicon->ToBitmap();
iconPB->AccessibleDescription = "Information";
//this.Icon = SystemIcons.Question;
System::Media::SystemSounds::Asterisk->Play();
}
else
{
throw gcnew System::ComponentModel::InvalidEnumArgumentException("icon", (int)icon, MessageBoxIcon::typeid);
}
MessageLbl->MinimumSize = Drawing::Size(MessageLbl->MinimumSize.Width - (iconsize + iconpadding + textpadding), MessageLbl->MinimumSize.Height);
MessageLbl->Left += (iconsize + iconpadding + textpadding);
Controls->Add(iconPB);
}
if (defaultbutton == MessageBoxDefaultButton::Button1)
{
AcceptButton = buttonrefs[0];
ActiveControl = buttonrefs[0];
}
else if (defaultbutton == MessageBoxDefaultButton::Button2)
{
if (!Controls->Contains(buttonrefs[1])) throw gcnew ArgumentOutOfRangeException("defaultbutton", "defaultbutton cannot be set to a button number that does not exist");
AcceptButton = buttonrefs[1];
ActiveControl = buttonrefs[1];
}
else if (defaultbutton == MessageBoxDefaultButton::Button3)
{
if (!Controls->Contains(buttonrefs[2])) throw gcnew ArgumentOutOfRangeException("defaultbutton", "defaultbutton cannot be set to a button number that does not exist");
AcceptButton = buttonrefs[2];
ActiveControl = buttonrefs[2];
}
else
{
throw gcnew System::ComponentModel::InvalidEnumArgumentException("defaultbutton", (int)defaultbutton, MessageBoxDefaultButton::typeid);
}
// TODO: TEXT ALIGNMENT AND RTL MODE
/*
// MessageBoxOptions are more like flags than concrete settings.
// For ease of use, we assume default value is whatever winforms gives us in current locale -- but we override if any value is set
if ((options & MessageBoxOptions.RightAlign) == MessageBoxOptions.RightAlign) MessageLbl.TextAlign = ContentAlignment.TopRight;
else if (options != 0) MessageLbl.TextAlign = ContentAlignment.TopLeft;
// RtlReading should be what actually affects layout, and RightAlign only affects the text label
if ((options & MessageBoxOptions.RtlReading) == MessageBoxOptions.RtlReading)
{
foreach (Control control in this.Controls)
{
control.Left = this.ClientSize.Width - control.Right;
control.RightToLeft = RightToLeft.Yes;
}
this.RightToLeft = RightToLeft.Yes;
this.RightToLeftLayout = true;
}
else if (options != 0)
{
foreach (Control control in this.Controls)
{
control.RightToLeft = RightToLeft.No;
}
this.RightToLeft = RightToLeft.No;
this.RightToLeftLayout = false;
}
*/
SetBackCol(this, Color::FromArgb(64, 64, 64));
SetForeCol(this, Color::White);
SetUIStyle(this, FlatStyle::Flat);
}
SkinnedMessageBoxForm(String^ message, String^ caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultbutton, MessageBoxOptions options)
{
SkinnedMessageBoxForm(NativeWindow::FromHandle((IntPtr::Zero)), message, caption, buttons, icon, defaultbutton, options);
}
};
public:
static DialogResult Show(IWin32Window^ owner, String^ message, String^ caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultbutton, MessageBoxOptions options)
{
// I probably shouldn't do this, but from what I can tell this should be safe enough -- out of thread owner is allowed
// and it only seems to appear when debugging (???)
Control::CheckForIllegalCrossThreadCalls = false;
SkinnedMessageBoxForm^ mb = gcnew SkinnedMessageBoxForm(owner, message, caption, buttons, icon, defaultbutton, options);
DialogResult res = mb->ShowDialog();
Control::CheckForIllegalCrossThreadCalls = true;
return res;
}
static DialogResult Show(IWin32Window^ owner, String^ message, String^ caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultbutton)
{
return Show(owner, message, caption, buttons, icon, defaultbutton, (MessageBoxOptions)0);
}
static DialogResult Show(IWin32Window^ owner, String^ message, String^ caption, MessageBoxButtons buttons, MessageBoxIcon icon)
{
return Show(owner, message, caption, buttons, icon, MessageBoxDefaultButton::Button1, (MessageBoxOptions)0);
}
static DialogResult Show(IWin32Window^ owner, String^ message, String^ caption, MessageBoxButtons buttons)
{
return Show(owner, message, caption, buttons, MessageBoxIcon::None, MessageBoxDefaultButton::Button1, (MessageBoxOptions)0);
}
static DialogResult Show(IWin32Window^ owner, String^ message, String^ caption)
{
return Show(owner, message, caption, MessageBoxButtons::OK, MessageBoxIcon::None, MessageBoxDefaultButton::Button1, (MessageBoxOptions)0);
}
static DialogResult Show(IWin32Window^ owner, String^ message)
{
return Show(owner, message, "", MessageBoxButtons::OK, MessageBoxIcon::None, MessageBoxDefaultButton::Button1, (MessageBoxOptions)0);
}
};
@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="PokeSnarf2x" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>PokeSnarf2x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 229 KiB

@@ -8,8 +8,13 @@ using namespace System::Windows::Forms;
[STAThread]
int showUI() {
if (Environment::OSVersion->Version->Major >= 6)
SetProcessDPIAware();
SetProcessDPIAware();
// trick Optimus into switching to the NVIDIA GPU
HMODULE nvcudaModule = LoadLibraryW(L"nvcuda.dll");
// cuInit actually returns a CUresult, but we don't really care about it
void(WINAPI * cuInit)(unsigned int flags) = (void(WINAPI*)(unsigned int flags))GetProcAddress(nvcudaModule, "cuInit");
if (cuInit != NULL) cuInit(0);
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 776 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

+124 -63
View File
@@ -1,8 +1,11 @@
#pragma once
#pragma once
#include "framework.h"
#include <msclr\marshal_cppstd.h>
#include <cstdlib>
#include "TabPadding.h"
#include <GL\freeglut.h>
#include <GL\GL.h>
#include "SkinnedMessageBox.h"
namespace Launcher {
@@ -48,7 +51,7 @@ namespace Launcher {
int screenresY = 3;
for (ConfigOptionBase* option : screenResolutionArray)
{
screenresY += option->AddToPanel(panel_ScreenRes, 3, screenresY, toolTip1);
screenresY += option->AddToPanel(panel_ScreenRes, 12, screenresY, toolTip1);
}
((ComboBox^)ComboBox::FromHandle(DisplayModeDropdown->mainControlHandle))->SelectedIndexChanged += gcnew System::EventHandler(this, &ui::DisplayTypeChangedHandler);
DisplayTypeChangedHandler(this, gcnew EventArgs); // run handler now
@@ -63,7 +66,7 @@ namespace Launcher {
int intresY = 3;
for (ConfigOptionBase* option : internalResolutionArray)
{
intresY += option->AddToPanel(panel_IntRes, 3, intresY, toolTip1);
intresY += option->AddToPanel(panel_IntRes, 12, intresY, toolTip1);
}
((CheckBox^)CheckBox::FromHandle(InternalResolutionCheckbox->mainControlHandle))->CheckedChanged += gcnew System::EventHandler(this, &ui::InternalResEnabledChangedHandler);
InternalResEnabledChangedHandler(this, gcnew EventArgs); // run handler now
@@ -78,7 +81,7 @@ namespace Launcher {
int optionsY = 3;
for (ConfigOptionBase* option : optionsArray)
{
optionsY += option->AddToPanel(panel_Patches, 3, optionsY, toolTip1);
optionsY += option->AddToPanel(panel_Patches, 12, optionsY, toolTip1);
}
this->panel_Patches->ResumeLayout(false);
this->panel_Patches->PerformLayout();
@@ -91,7 +94,7 @@ namespace Launcher {
int playerdataY = 3;
for (ConfigOptionBase* option : playerdataArray)
{
playerdataY += option->AddToPanel(panel_Playerdata, 3, playerdataY, toolTip1);
playerdataY += option->AddToPanel(panel_Playerdata, 12, playerdataY, toolTip1);
}
this->panel_Playerdata->ResumeLayout(false);
this->panel_Playerdata->PerformLayout();
@@ -104,10 +107,28 @@ namespace Launcher {
int componentsY = 3;
for (ConfigOptionBase* component : componentsArray)
{
componentsY += component->AddToPanel(panel_Components, 3, componentsY, toolTip1);
componentsY += component->AddToPanel(panel_Components, 12, componentsY, toolTip1);
}
this->panel_Components->ResumeLayout(false);
this->panel_Components->PerformLayout();
int argc = 1;
char* argv[1] = { (char*)"" };
glutInit(&argc, argv);
int window = glutCreateWindow("glut");
String^ vendor = gcnew String((char*)glGetString(GL_VENDOR));
String^ renderer = gcnew String((char*)glGetString(GL_RENDERER));
String^ version = gcnew String((char*)glGetString(GL_VERSION));
glutDestroyWindow(window);
glutMainLoopEvent();
/*MessageBox::Show(vendor, "vendor", MessageBoxButtons::OK, MessageBoxIcon::Information);
MessageBox::Show(renderer, "renderer", MessageBoxButtons::OK, MessageBoxIcon::Information);
MessageBox::Show(version, "version", MessageBoxButtons::OK, MessageBoxIcon::Information);*/
this->labelGPU->Text = "Vendor: " + vendor + "\nRenderer: " + renderer + "\nOpenGL: " + version;
if (vendor != "NVIDIA Corporation")
//MessageBox::Show("Your graphics card is not supported! Only NVIDIA GPUs are currently supported.", "PD Launcher", MessageBoxButtons::OK, MessageBoxIcon::Error);
SkinnedMessageBox::Show(this, "Your graphics card is not supported! Only NVIDIA GPUs are currently supported.", "PD Launcher", MessageBoxButtons::OK, MessageBoxIcon::Warning);
//if (version[0] < 4) MessageBox::Show("WARNING: Your GPU is too old. The game might not render correctly!", "PD Launcher", MessageBoxButtons::OK, MessageBoxIcon::Warning);
}
protected:
@@ -122,7 +143,8 @@ namespace Launcher {
}
}
private: System::Windows::Forms::Button^ button_Launch;
private: System::Windows::Forms::Button^ button_Exit;
private: System::Windows::Forms::Button^ button_Help;
private: System::Windows::Forms::GroupBox^ groupBox_ScreenRes;
private: System::Windows::Forms::TabControl^ tabControl;
private: System::Windows::Forms::TabPage^ tabPage_Resolution;
@@ -138,7 +160,11 @@ namespace Launcher {
private: System::Windows::Forms::ToolTip^ toolTip1;
private: System::Windows::Forms::Panel^ panel_ScreenRes;
private: System::Windows::Forms::Panel^ panel_IntRes;
private: System::ComponentModel::IContainer^ components;
private: System::Windows::Forms::Label^ labelGPU;
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
@@ -154,13 +180,14 @@ namespace Launcher {
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(ui::typeid));
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(ui::typeid));
this->button_Launch = (gcnew System::Windows::Forms::Button());
this->button_Exit = (gcnew System::Windows::Forms::Button());
this->button_Help = (gcnew System::Windows::Forms::Button());
this->groupBox_ScreenRes = (gcnew System::Windows::Forms::GroupBox());
this->panel_ScreenRes = (gcnew System::Windows::Forms::Panel());
this->tabControl = (gcnew System::Windows::Forms::TabControl());
this->tabPage_Resolution = (gcnew System::Windows::Forms::TabPage());
this->labelGPU = (gcnew System::Windows::Forms::Label());
this->groupBox_InternalRes = (gcnew System::Windows::Forms::GroupBox());
this->panel_IntRes = (gcnew System::Windows::Forms::Panel());
this->tabPage_Patches = (gcnew System::Windows::Forms::TabPage());
@@ -185,42 +212,48 @@ namespace Launcher {
//
this->button_Launch->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control;
this->button_Launch->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Launch->Location = System::Drawing::Point(18, 267);
this->button_Launch->Location = System::Drawing::Point(25, 473);
this->button_Launch->Margin = System::Windows::Forms::Padding(4);
this->button_Launch->Name = L"button_Launch";
this->button_Launch->Size = System::Drawing::Size(75, 23);
this->button_Launch->Size = System::Drawing::Size(112, 34);
this->button_Launch->TabIndex = 20;
this->button_Launch->Text = L"Launch";
this->button_Launch->Click += gcnew System::EventHandler(this, &ui::Button_Launch_Click);
//
// button_Exit
// button_Help
//
this->button_Exit->DialogResult = System::Windows::Forms::DialogResult::Cancel;
this->button_Exit->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control;
this->button_Exit->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Exit->Location = System::Drawing::Point(139, 267);
this->button_Exit->Name = L"button_Exit";
this->button_Exit->Size = System::Drawing::Size(75, 23);
this->button_Exit->TabIndex = 21;
this->button_Exit->Text = L"Exit";
this->button_Exit->Click += gcnew System::EventHandler(this, &ui::Button_Exit_Click);
this->button_Help->DialogResult = System::Windows::Forms::DialogResult::Cancel;
this->button_Help->FlatAppearance->BorderColor = System::Drawing::SystemColors::Control;
this->button_Help->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Help->Location = System::Drawing::Point(151, 473);
this->button_Help->Margin = System::Windows::Forms::Padding(4);
this->button_Help->Name = L"button_Help";
this->button_Help->Size = System::Drawing::Size(112, 34);
this->button_Help->TabIndex = 21;
this->button_Help->Text = L"Get help";
this->button_Help->Click += gcnew System::EventHandler(this, &ui::Button_Help_Click);
//
// groupBox_ScreenRes
//
this->groupBox_ScreenRes->Controls->Add(this->panel_ScreenRes);
this->groupBox_ScreenRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_ScreenRes->ForeColor = System::Drawing::Color::White;
this->groupBox_ScreenRes->Location = System::Drawing::Point(8, 6);
this->groupBox_ScreenRes->Location = System::Drawing::Point(8, 9);
this->groupBox_ScreenRes->Margin = System::Windows::Forms::Padding(4);
this->groupBox_ScreenRes->Name = L"groupBox_ScreenRes";
this->groupBox_ScreenRes->Size = System::Drawing::Size(208, 133);
this->groupBox_ScreenRes->Padding = System::Windows::Forms::Padding(4);
this->groupBox_ScreenRes->Size = System::Drawing::Size(417, 205);
this->groupBox_ScreenRes->TabIndex = 10;
this->groupBox_ScreenRes->TabStop = false;
this->groupBox_ScreenRes->Text = L"Screen Resolution";
//
// panel_ScreenRes
//
this->panel_ScreenRes->Location = System::Drawing::Point(4, 19);
this->panel_ScreenRes->AutoScroll = true;
this->panel_ScreenRes->Location = System::Drawing::Point(6, 28);
this->panel_ScreenRes->Margin = System::Windows::Forms::Padding(4);
this->panel_ScreenRes->Name = L"panel_ScreenRes";
this->panel_ScreenRes->Size = System::Drawing::Size(200, 108);
this->panel_ScreenRes->Size = System::Drawing::Size(403, 169);
this->panel_ScreenRes->TabIndex = 0;
//
// tabControl
@@ -231,41 +264,59 @@ namespace Launcher {
this->tabControl->Controls->Add(this->tabPage_Playerdata);
this->tabControl->Controls->Add(this->tabPage_Components);
this->tabControl->Location = System::Drawing::Point(0, 0);
this->tabControl->Margin = System::Windows::Forms::Padding(4);
this->tabControl->Name = L"tabControl";
this->tabControl->SelectedIndex = 0;
this->tabControl->Size = System::Drawing::Size(233, 261);
this->tabControl->Size = System::Drawing::Size(441, 465);
this->tabControl->TabIndex = 10;
//
// tabPage_Resolution
//
this->tabPage_Resolution->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Resolution->BackColor = System::Drawing::Color::Transparent;
this->tabPage_Resolution->BackgroundImage = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"tabPage_Resolution.BackgroundImage")));
this->tabPage_Resolution->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->tabPage_Resolution->Controls->Add(this->labelGPU);
this->tabPage_Resolution->Controls->Add(this->groupBox_InternalRes);
this->tabPage_Resolution->Controls->Add(this->groupBox_ScreenRes);
this->tabPage_Resolution->Location = System::Drawing::Point(4, 25);
this->tabPage_Resolution->Location = System::Drawing::Point(4, 32);
this->tabPage_Resolution->Margin = System::Windows::Forms::Padding(4);
this->tabPage_Resolution->Name = L"tabPage_Resolution";
this->tabPage_Resolution->Padding = System::Windows::Forms::Padding(3);
this->tabPage_Resolution->Size = System::Drawing::Size(225, 232);
this->tabPage_Resolution->Padding = System::Windows::Forms::Padding(4);
this->tabPage_Resolution->Size = System::Drawing::Size(433, 429);
this->tabPage_Resolution->TabIndex = 0;
this->tabPage_Resolution->Text = L"Resolution";
//
// labelGPU
//
this->labelGPU->AutoSize = true;
this->labelGPU->Location = System::Drawing::Point(12, 359);
this->labelGPU->MinimumSize = System::Drawing::Size(410, 20);
this->labelGPU->Name = L"labelGPU";
this->labelGPU->Size = System::Drawing::Size(410, 20);
this->labelGPU->TabIndex = 21;
this->labelGPU->TextAlign = System::Drawing::ContentAlignment::MiddleLeft;
//
// groupBox_InternalRes
//
this->groupBox_InternalRes->Controls->Add(this->panel_IntRes);
this->groupBox_InternalRes->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->groupBox_InternalRes->ForeColor = System::Drawing::Color::White;
this->groupBox_InternalRes->Location = System::Drawing::Point(8, 145);
this->groupBox_InternalRes->Location = System::Drawing::Point(8, 222);
this->groupBox_InternalRes->Margin = System::Windows::Forms::Padding(4);
this->groupBox_InternalRes->Name = L"groupBox_InternalRes";
this->groupBox_InternalRes->Size = System::Drawing::Size(208, 83);
this->groupBox_InternalRes->Padding = System::Windows::Forms::Padding(4);
this->groupBox_InternalRes->Size = System::Drawing::Size(417, 124);
this->groupBox_InternalRes->TabIndex = 20;
this->groupBox_InternalRes->TabStop = false;
this->groupBox_InternalRes->Text = L"Internal Resolution";
//
// panel_IntRes
//
this->panel_IntRes->Location = System::Drawing::Point(4, 19);
this->panel_IntRes->AutoScroll = true;
this->panel_IntRes->Location = System::Drawing::Point(6, 28);
this->panel_IntRes->Margin = System::Windows::Forms::Padding(4);
this->panel_IntRes->Name = L"panel_IntRes";
this->panel_IntRes->Size = System::Drawing::Size(200, 58);
this->panel_IntRes->Size = System::Drawing::Size(403, 88);
this->panel_IntRes->TabIndex = 1;
//
// tabPage_Patches
@@ -273,9 +324,10 @@ namespace Launcher {
this->tabPage_Patches->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Patches->Controls->Add(this->panel_Patches);
this->tabPage_Patches->Location = System::Drawing::Point(4, 25);
this->tabPage_Patches->Location = System::Drawing::Point(4, 32);
this->tabPage_Patches->Margin = System::Windows::Forms::Padding(4);
this->tabPage_Patches->Name = L"tabPage_Patches";
this->tabPage_Patches->Size = System::Drawing::Size(225, 232);
this->tabPage_Patches->Size = System::Drawing::Size(433, 429);
this->tabPage_Patches->TabIndex = 1;
this->tabPage_Patches->Text = L"Options";
//
@@ -283,18 +335,20 @@ namespace Launcher {
//
this->panel_Patches->AutoScroll = true;
this->panel_Patches->Location = System::Drawing::Point(0, 0);
this->panel_Patches->Margin = System::Windows::Forms::Padding(4);
this->panel_Patches->Name = L"panel_Patches";
this->panel_Patches->Size = System::Drawing::Size(225, 232);
this->panel_Patches->Size = System::Drawing::Size(429, 425);
this->panel_Patches->TabIndex = 9;
//
// tabPage_Playerdata
//
this->tabPage_Playerdata->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Playerdata->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Playerdata->Controls->Add(this->panel_Playerdata);
this->tabPage_Playerdata->Location = System::Drawing::Point(4, 25);
this->tabPage_Playerdata->Location = System::Drawing::Point(4, 32);
this->tabPage_Playerdata->Margin = System::Windows::Forms::Padding(4);
this->tabPage_Playerdata->Name = L"tabPage_Playerdata";
this->tabPage_Playerdata->Size = System::Drawing::Size(225, 232);
this->tabPage_Playerdata->Size = System::Drawing::Size(433, 429);
this->tabPage_Playerdata->TabIndex = 3;
this->tabPage_Playerdata->Text = L"Player Data";
//
@@ -302,19 +356,21 @@ namespace Launcher {
//
this->panel_Playerdata->AutoScroll = true;
this->panel_Playerdata->Location = System::Drawing::Point(0, 0);
this->panel_Playerdata->Margin = System::Windows::Forms::Padding(4);
this->panel_Playerdata->Name = L"panel_Playerdata";
this->panel_Playerdata->Size = System::Drawing::Size(225, 232);
this->panel_Playerdata->Size = System::Drawing::Size(429, 425);
this->panel_Playerdata->TabIndex = 1;
//
// tabPage_Components
//
this->tabPage_Components->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Components->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->tabPage_Components->Controls->Add(this->panel_Components);
this->tabPage_Components->Location = System::Drawing::Point(4, 25);
this->tabPage_Components->Location = System::Drawing::Point(4, 32);
this->tabPage_Components->Margin = System::Windows::Forms::Padding(4);
this->tabPage_Components->Name = L"tabPage_Components";
this->tabPage_Components->Padding = System::Windows::Forms::Padding(3);
this->tabPage_Components->Size = System::Drawing::Size(225, 232);
this->tabPage_Components->Padding = System::Windows::Forms::Padding(4);
this->tabPage_Components->Size = System::Drawing::Size(433, 429);
this->tabPage_Components->TabIndex = 2;
this->tabPage_Components->Text = L"Components";
//
@@ -322,8 +378,9 @@ namespace Launcher {
//
this->panel_Components->AutoScroll = true;
this->panel_Components->Location = System::Drawing::Point(0, 0);
this->panel_Components->Margin = System::Windows::Forms::Padding(4);
this->panel_Components->Name = L"panel_Components";
this->panel_Components->Size = System::Drawing::Size(225, 232);
this->panel_Components->Size = System::Drawing::Size(429, 425);
this->panel_Components->TabIndex = 0;
//
// button_Discord
@@ -334,9 +391,10 @@ namespace Launcher {
this->button_Discord->FlatAppearance->MouseOverBackColor = System::Drawing::Color::Transparent;
this->button_Discord->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_Discord->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"button_Discord.Image")));
this->button_Discord->Location = System::Drawing::Point(239, 12);
this->button_Discord->Location = System::Drawing::Point(295, 459);
this->button_Discord->Margin = System::Windows::Forms::Padding(4);
this->button_Discord->Name = L"button_Discord";
this->button_Discord->Size = System::Drawing::Size(42, 42);
this->button_Discord->Size = System::Drawing::Size(63, 63);
this->button_Discord->TabIndex = 31;
this->button_Discord->UseVisualStyleBackColor = false;
this->button_Discord->Click += gcnew System::EventHandler(this, &ui::button_Discord_Click);
@@ -344,14 +402,16 @@ namespace Launcher {
// button_github
//
this->button_github->BackColor = System::Drawing::Color::Transparent;
this->button_github->Cursor = System::Windows::Forms::Cursors::Hand;
this->button_github->FlatAppearance->BorderSize = 0;
this->button_github->FlatAppearance->MouseDownBackColor = System::Drawing::Color::Transparent;
this->button_github->FlatAppearance->MouseOverBackColor = System::Drawing::Color::Transparent;
this->button_github->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
this->button_github->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"button_github.Image")));
this->button_github->Location = System::Drawing::Point(239, 60);
this->button_github->Location = System::Drawing::Point(378, 459);
this->button_github->Margin = System::Windows::Forms::Padding(4);
this->button_github->Name = L"button_github";
this->button_github->Size = System::Drawing::Size(42, 42);
this->button_github->Size = System::Drawing::Size(63, 63);
this->button_github->TabIndex = 32;
this->button_github->UseVisualStyleBackColor = false;
this->button_github->Click += gcnew System::EventHandler(this, &ui::button_github_Click);
@@ -359,24 +419,24 @@ namespace Launcher {
// ui
//
this->AcceptButton = this->button_Launch;
this->AutoScaleDimensions = System::Drawing::SizeF(96, 96);
this->AutoScaleDimensions = System::Drawing::SizeF(144, 144);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Dpi;
this->AutoSize = true;
this->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
this->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(64)), static_cast<System::Int32>(static_cast<System::Byte>(64)),
static_cast<System::Int32>(static_cast<System::Byte>(64)));
this->BackgroundImage = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"$this.BackgroundImage")));
this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->CancelButton = this->button_Exit;
this->ClientSize = System::Drawing::Size(288, 297);
this->ClientSize = System::Drawing::Size(440, 514);
this->Controls->Add(this->tabControl);
this->Controls->Add(this->button_Help);
this->Controls->Add(this->button_Launch);
this->Controls->Add(this->button_github);
this->Controls->Add(this->button_Discord);
this->Controls->Add(this->tabControl);
this->Controls->Add(this->button_Exit);
this->Controls->Add(this->button_Launch);
this->DoubleBuffered = true;
this->ForeColor = System::Drawing::Color::White;
this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
this->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"$this.Icon")));
this->Margin = System::Windows::Forms::Padding(4);
this->MaximizeBox = false;
this->MinimizeBox = false;
this->Name = L"ui";
@@ -388,6 +448,7 @@ namespace Launcher {
this->groupBox_ScreenRes->ResumeLayout(false);
this->tabControl->ResumeLayout(false);
this->tabPage_Resolution->ResumeLayout(false);
this->tabPage_Resolution->PerformLayout();
this->groupBox_InternalRes->ResumeLayout(false);
this->tabPage_Patches->ResumeLayout(false);
this->tabPage_Playerdata->ResumeLayout(false);
@@ -424,8 +485,8 @@ private: System::Void SaveSettings() {
}
private: System::Void Ui_Load(System::Object^ sender, System::EventArgs^ e){
}
private: System::Void Button_Exit_Click(System::Object^ sender, System::EventArgs^ e) {
this->Close();
private: System::Void Button_Help_Click(System::Object^ sender, System::EventArgs^ e) {
System::Diagnostics::Process::Start("https://notabug.org/nastys/PD-Loader/wiki");
}
private: System::Void Button_Launch_Click(System::Object^ sender, System::EventArgs^ e) {
File diff suppressed because it is too large Load Diff