private void formMain_Load(object sender, EventArgs e)
{
this.MinimumSize = this.Size;
if (Interface.CurrentOptions.MainMenuWidth == -1 & Interface.CurrentOptions.MainMenuHeight == -1)
{
this.WindowState = FormWindowState.Maximized;
}
else if (Interface.CurrentOptions.MainMenuWidth > 0 & Interface.CurrentOptions.MainMenuHeight > 0)
{
this.Size = new Size(Interface.CurrentOptions.MainMenuWidth, Interface.CurrentOptions.MainMenuHeight);
this.CenterToScreen();
}
labelVersion.Text = @"v" + Application.ProductVersion + OpenBve.Program.VersionSuffix;
System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture;
// form icon
try
{
string File = OpenBveApi.Path.CombineFile(Program.FileSystem.GetDataFolder(), "icon.ico");
this.Icon = new Icon(File);
}
catch { }
radiobuttonStart.Appearance = Appearance.Button;
radiobuttonStart.AutoSize = false;
radiobuttonStart.Size = new Size(buttonClose.Width, buttonClose.Height);
radiobuttonStart.TextAlign = ContentAlignment.MiddleCenter;
radiobuttonReview.Appearance = Appearance.Button;
radiobuttonReview.AutoSize = false;
radiobuttonReview.Size = new Size(buttonClose.Width, buttonClose.Height);
radiobuttonReview.TextAlign = ContentAlignment.MiddleCenter;
radiobuttonControls.Appearance = Appearance.Button;
radiobuttonControls.AutoSize = false;
radiobuttonControls.Size = new Size(buttonClose.Width, buttonClose.Height);
radiobuttonControls.TextAlign = ContentAlignment.MiddleCenter;
radiobuttonOptions.Appearance = Appearance.Button;
radiobuttonOptions.AutoSize = false;
radiobuttonOptions.Size = new Size(buttonClose.Width, buttonClose.Height);
radiobuttonOptions.TextAlign = ContentAlignment.MiddleCenter;
radioButtonPackages.Appearance = Appearance.Button;
radioButtonPackages.AutoSize = false;
radioButtonPackages.Size = new Size(buttonClose.Width, buttonClose.Height);
radioButtonPackages.TextAlign = ContentAlignment.MiddleCenter;
// options
Interface.LoadLogs();
ListLanguages();
{
int Tab = 0;
string[] Args = System.Environment.GetCommandLineArgs();
for (int i = 1; i < Args.Length; i++)
{
switch (Args[i].ToLowerInvariant())
{
case "/newgame": Tab = 0; break;
case "/review": Tab = 1; break;
case "/controls": Tab = 2; break;
case "/options": Tab = 3; break;
}
}
switch (Tab)
{
case 1: radiobuttonReview.Checked = true; break;
case 2: radiobuttonControls.Checked = true; break;
case 3: radiobuttonOptions.Checked = true; break;
case 4: radioButtonPackages.Checked = true; break;
default: radiobuttonStart.Checked = true; break;
}
}
// icons and images
string MenuFolder = Program.FileSystem.GetDataFolder("Menu");
Image ParentIcon = LoadImage(MenuFolder, "icon_parent.png");
Image FolderIcon = LoadImage(MenuFolder, "icon_folder.png");
Image RouteIcon = LoadImage(MenuFolder, "icon_route.png");
Image TrainIcon = LoadImage(MenuFolder, "icon_train.png");
Image KeyboardIcon = LoadImage(MenuFolder, "icon_keyboard.png");
Image MouseIcon = LoadImage(MenuFolder, "icon_mouse.png");
Image JoystickIcon = LoadImage(MenuFolder, "icon_joystick.png");
Image GamepadIcon = LoadImage(MenuFolder, "icon_gamepad.png");
JoystickImage = LoadImage(MenuFolder, "joystick.png");
Image Logo = LoadImage(MenuFolder, "logo.png");
if (Logo != null) pictureboxLogo.Image = Logo;
string flagsFolder = Program.FileSystem.GetDataFolder("Flags");
/*
* TODO: Integrate into packages
*/
#pragma warning disable 0219
string[] flags = new string[] { };
try
{
flags = System.IO.Directory.GetFiles(flagsFolder);
}
catch (Exception)
{
}
#pragma warning restore 0219
// route selection
listviewRouteFiles.SmallImageList = new ImageList { TransparentColor = Color.White };
if (ParentIcon != null) listviewRouteFiles.SmallImageList.Images.Add("parent", ParentIcon);
if (FolderIcon != null) listviewRouteFiles.SmallImageList.Images.Add("folder", FolderIcon);
if (RouteIcon != null) listviewRouteFiles.SmallImageList.Images.Add("route", RouteIcon);
listviewRouteFiles.Columns.Clear();
listviewRouteFiles.Columns.Add("");
listviewRouteRecently.Items.Clear();
listviewRouteRecently.Columns.Add("");
listviewRouteRecently.SmallImageList = new ImageList { TransparentColor = Color.White };
if (RouteIcon != null) listviewRouteRecently.SmallImageList.Images.Add("route", RouteIcon);
for (int i = 0; i < Interface.CurrentOptions.RecentlyUsedRoutes.Length; i++)
{
ListViewItem Item = listviewRouteRecently.Items.Add(System.IO.Path.GetFileName(Interface.CurrentOptions.RecentlyUsedRoutes[i]));
Item.ImageKey = "route";
Item.Tag = Interface.CurrentOptions.RecentlyUsedRoutes[i];
string RoutePath = System.IO.Path.GetDirectoryName(Interface.CurrentOptions.RecentlyUsedRoutes[i]);
if (textboxRouteFolder.Items.Count == 0 || !textboxRouteFolder.Items.Contains(RoutePath))
{
textboxRouteFolder.Items.Add(RoutePath);
}
}
listviewRouteRecently.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
// train selection
listviewTrainFolders.SmallImageList = new ImageList { TransparentColor = Color.White };
if (ParentIcon != null) listviewTrainFolders.SmallImageList.Images.Add("parent", ParentIcon);
if (FolderIcon != null) listviewTrainFolders.SmallImageList.Images.Add("folder", FolderIcon);
if (TrainIcon != null) listviewTrainFolders.SmallImageList.Images.Add("train", TrainIcon);
listviewTrainFolders.Columns.Clear();
listviewTrainFolders.Columns.Add("");
listviewTrainRecently.Columns.Clear();
listviewTrainRecently.Columns.Add("");
listviewTrainRecently.SmallImageList = new ImageList { TransparentColor = Color.White };
if (TrainIcon != null) listviewTrainRecently.SmallImageList.Images.Add("train", TrainIcon);
for (int i = 0; i < Interface.CurrentOptions.RecentlyUsedTrains.Length; i++)
{
ListViewItem Item = listviewTrainRecently.Items.Add(System.IO.Path.GetFileName(Interface.CurrentOptions.RecentlyUsedTrains[i]));
Item.ImageKey = "train";
Item.Tag = Interface.CurrentOptions.RecentlyUsedTrains[i];
string TrainPath = System.IO.Path.GetDirectoryName(Interface.CurrentOptions.RecentlyUsedTrains[i]);
if (textboxTrainFolder.Items.Count == 0 || !textboxTrainFolder.Items.Contains(TrainPath))
{
textboxTrainFolder.Items.Add(TrainPath);
}
}
listviewTrainRecently.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);
// text boxes
if (Interface.CurrentOptions.RouteFolder.Length != 0 && System.IO.Directory.Exists(Interface.CurrentOptions.RouteFolder))
{
textboxRouteFolder.Text = Interface.CurrentOptions.RouteFolder;
}
else {
textboxRouteFolder.Text = Program.FileSystem.InitialRouteFolder;
}
if (Interface.CurrentOptions.TrainFolder.Length != 0 && System.IO.Directory.Exists(Interface.CurrentOptions.TrainFolder))
{
textboxTrainFolder.Text = Interface.CurrentOptions.TrainFolder;
}
else {
textboxTrainFolder.Text = Program.FileSystem.InitialTrainFolder;
}
// encodings
{
System.Text.EncodingInfo[] Info = System.Text.Encoding.GetEncodings();
EncodingCodepages = new int[Info.Length + 1];
string[] EncodingDescriptions = new string[Info.Length + 1];
EncodingCodepages[0] = System.Text.Encoding.UTF8.CodePage;
EncodingDescriptions[0] = "(UTF-8)";
for (int i = 0; i < Info.Length; i++)
{
EncodingCodepages[i + 1] = Info[i].CodePage;
try
{ // MoMA says that DisplayName is flagged with [MonoTodo]
EncodingDescriptions[i + 1] = Info[i].DisplayName + " - " + Info[i].CodePage.ToString(Culture);
}
catch
{
EncodingDescriptions[i + 1] = Info[i].Name;
}
}
Array.Sort<string, int>(EncodingDescriptions, EncodingCodepages, 1, Info.Length);
comboboxRouteEncoding.Items.Clear();
comboboxTrainEncoding.Items.Clear();
for (int i = 0; i < Info.Length + 1; i++)
{
comboboxRouteEncoding.Items.Add(EncodingDescriptions[i]);
comboboxTrainEncoding.Items.Add(EncodingDescriptions[i]);
}
}
// modes
comboboxMode.Items.Clear();
comboboxMode.Items.AddRange(new object[] { "", "", "" });
comboboxMode.SelectedIndex = Interface.CurrentOptions.GameMode == Interface.GameMode.Arcade ? 0 : Interface.CurrentOptions.GameMode == Interface.GameMode.Expert ? 2 : 1;
// review last game
{
if (Game.LogRouteName.Length == 0 | Game.LogTrainName.Length == 0)
{
radiobuttonReview.Enabled = false;
}
else {
double ratio = Game.CurrentScore.Maximum == 0 ? 0.0 : (double)Game.CurrentScore.Value / (double)Game.CurrentScore.Maximum;
if (ratio < 0.0) ratio = 0.0;
if (ratio > 1.0) ratio = 1.0;
int index = (int)Math.Floor(ratio * (double)Interface.RatingsCount);
if (index >= Interface.RatingsCount) index = Interface.RatingsCount - 1;
labelReviewRouteValue.Text = Game.LogRouteName;
labelReviewTrainValue.Text = Game.LogTrainName;
labelReviewDateValue.Text = Game.LogDateTime.ToString("yyyy-MM-dd", Culture);
labelReviewTimeValue.Text = Game.LogDateTime.ToString("HH:mm:ss", Culture);
switch (Interface.CurrentOptions.GameMode)
{
case Interface.GameMode.Arcade: labelRatingModeValue.Text = Interface.GetInterfaceString("mode_arcade"); break;
case Interface.GameMode.Normal: labelRatingModeValue.Text = Interface.GetInterfaceString("mode_normal"); break;
case Interface.GameMode.Expert: labelRatingModeValue.Text = Interface.GetInterfaceString("mode_expert"); break;
default: labelRatingModeValue.Text = Interface.GetInterfaceString("mode_unknown"); break;
}
if (Game.CurrentScore.Maximum == 0)
{
labelRatingColor.BackColor = Color.Gray;
labelRatingDescription.Text = Interface.GetInterfaceString("rating_unknown");
}
else {
Color[] Colors = { Color.PaleVioletRed, Color.IndianRed, Color.Peru, Color.Goldenrod, Color.DarkKhaki, Color.YellowGreen, Color.MediumSeaGreen, Color.MediumAquamarine, Color.SkyBlue, Color.CornflowerBlue };
if (index >= 0 & index < Colors.Length)
{
labelRatingColor.BackColor = Colors[index];
}
else {
labelRatingColor.BackColor = Color.Gray;
}
labelRatingDescription.Text = Interface.GetInterfaceString("rating_" + index.ToString(Culture));
}
labelRatingAchievedValue.Text = Game.CurrentScore.Value.ToString(Culture);
labelRatingMaximumValue.Text = Game.CurrentScore.Maximum.ToString(Culture);
labelRatingRatioValue.Text = (100.0 * ratio).ToString("0.00", Culture) + "%";
}
}
comboboxBlackBoxFormat.Items.Clear();
comboboxBlackBoxFormat.Items.AddRange(new object[] { "", "" });
comboboxBlackBoxFormat.SelectedIndex = 1;
if (Game.BlackBoxEntryCount == 0)
{
labelBlackBox.Enabled = false;
labelBlackBoxFormat.Enabled = false;
comboboxBlackBoxFormat.Enabled = false;
buttonBlackBoxExport.Enabled = false;
}
// controls
listviewControls.SmallImageList = new ImageList { TransparentColor = Color.White };
if (KeyboardIcon != null) listviewControls.SmallImageList.Images.Add("keyboard", KeyboardIcon);
if (MouseIcon != null) listviewControls.SmallImageList.Images.Add("mouse", MouseIcon);
if (JoystickIcon != null) listviewControls.SmallImageList.Images.Add("joystick", JoystickIcon);
if (GamepadIcon != null) listviewControls.SmallImageList.Images.Add("gamepad", GamepadIcon);
// options
if (Interface.CurrentOptions.FullscreenMode)
{
radiobuttonFullscreen.Checked = true;
}
else {
radiobuttonWindow.Checked = true;
}
comboboxVSync.Items.Clear();
comboboxVSync.Items.Add("");
comboboxVSync.Items.Add("");
comboboxVSync.SelectedIndex = Interface.CurrentOptions.VerticalSynchronization ? 1 : 0;
updownWindowWidth.Value = (decimal)Interface.CurrentOptions.WindowWidth;
updownWindowHeight.Value = (decimal)Interface.CurrentOptions.WindowHeight;
updownFullscreenWidth.Value = (decimal)Interface.CurrentOptions.FullscreenWidth;
updownFullscreenHeight.Value = (decimal)Interface.CurrentOptions.FullscreenHeight;
comboboxFullscreenBits.Items.Clear();
comboboxFullscreenBits.Items.Add("16");
comboboxFullscreenBits.Items.Add("32");
comboboxFullscreenBits.SelectedIndex = Interface.CurrentOptions.FullscreenBits == 16 ? 0 : 1;
comboboxInterpolation.Items.Clear();
comboboxInterpolation.Items.AddRange(new object[] { "", "", "", "", "", "" });
if ((int)Interface.CurrentOptions.Interpolation >= 0 & (int)Interface.CurrentOptions.Interpolation < comboboxInterpolation.Items.Count)
{
comboboxInterpolation.SelectedIndex = (int)Interface.CurrentOptions.Interpolation;
}
else {
comboboxInterpolation.SelectedIndex = 3;
}
comboBoxTimeTableDisplayMode.Items.Clear();
comboBoxTimeTableDisplayMode.Items.AddRange(new object[] { "", "", "", "" });
if ((int)Interface.CurrentOptions.TimeTableStyle >= 0 & (int)Interface.CurrentOptions.TimeTableStyle < comboBoxTimeTableDisplayMode.Items.Count)
{
comboBoxTimeTableDisplayMode.SelectedIndex = (int)Interface.CurrentOptions.TimeTableStyle;
}
else
{
comboBoxTimeTableDisplayMode.SelectedIndex = 1;
}
if (Interface.CurrentOptions.AnisotropicFilteringMaximum <= 0)
{
labelAnisotropic.Enabled = false;
updownAnisotropic.Enabled = false;
updownAnisotropic.Minimum = (decimal)0;
updownAnisotropic.Maximum = (decimal)0;
}
else {
updownAnisotropic.Minimum = (decimal)1;
updownAnisotropic.Maximum = (decimal)Interface.CurrentOptions.AnisotropicFilteringMaximum;
if ((decimal)Interface.CurrentOptions.AnisotropicFilteringLevel >= updownAnisotropic.Minimum & (decimal)Interface.CurrentOptions.AnisotropicFilteringLevel <= updownAnisotropic.Maximum)
{
updownAnisotropic.Value = (decimal)Interface.CurrentOptions.AnisotropicFilteringLevel;
}
else {
updownAnisotropic.Value = updownAnisotropic.Minimum;
}
}
updownAntiAliasing.Value = (decimal)Interface.CurrentOptions.AntiAliasingLevel;
updownDistance.Value = (decimal)Interface.CurrentOptions.ViewingDistance;
comboboxMotionBlur.Items.Clear();
comboboxMotionBlur.Items.AddRange(new object[] { "", "", "", "" });
comboboxMotionBlur.SelectedIndex = (int)Interface.CurrentOptions.MotionBlur;
trackbarTransparency.Value = (int)Interface.CurrentOptions.TransparencyMode;
trackBarTimeAccelerationFactor.Value = Interface.CurrentOptions.TimeAccelerationFactor > trackBarTimeAccelerationFactor.Maximum ? trackBarTimeAccelerationFactor.Maximum : Interface.CurrentOptions.TimeAccelerationFactor;
checkboxToppling.Checked = Interface.CurrentOptions.Toppling;
checkboxCollisions.Checked = Interface.CurrentOptions.Collisions;
checkboxDerailments.Checked = Interface.CurrentOptions.Derailments;
checkBoxLoadInAdvance.Checked = Interface.CurrentOptions.LoadInAdvance;
checkBoxUnloadTextures.Checked = Interface.CurrentOptions.UnloadUnusedTextures;
checkBoxDisableDisplayLists.Checked = Interface.CurrentOptions.DisableDisplayLists;
checkboxBlackBox.Checked = Interface.CurrentOptions.BlackBox;
checkboxJoysticksUsed.Checked = Interface.CurrentOptions.UseJoysticks;
checkBoxEBAxis.Checked = Interface.CurrentOptions.AllowAxisEB;
{
double a = (double)(trackbarJoystickAxisThreshold.Maximum - trackbarJoystickAxisThreshold.Minimum) * Interface.CurrentOptions.JoystickAxisThreshold + (double)trackbarJoystickAxisThreshold.Minimum;
int b = (int)Math.Round(a);
if (b < trackbarJoystickAxisThreshold.Minimum) b = trackbarJoystickAxisThreshold.Minimum;
if (b > trackbarJoystickAxisThreshold.Maximum) b = trackbarJoystickAxisThreshold.Maximum;
trackbarJoystickAxisThreshold.Value = b;
}
updownSoundNumber.Value = (decimal)Interface.CurrentOptions.SoundNumber;
checkboxWarningMessages.Checked = Interface.CurrentOptions.ShowWarningMessages;
checkboxErrorMessages.Checked = Interface.CurrentOptions.ShowErrorMessages;
comboBoxCompressionFormat.SelectedIndex = (int)Interface.CurrentOptions.packageCompressionType;
// language
{
string Folder = Program.FileSystem.GetDataFolder("Languages");
int j;
for (j = 0; j < LanguageFiles.Length; j++)
{
string File = OpenBveApi.Path.CombineFile(Folder, Interface.CurrentOptions.LanguageCode + ".cfg");
if (string.Compare(File, LanguageFiles[j], StringComparison.OrdinalIgnoreCase) == 0)
{
comboboxLanguages.SelectedIndex = j;
break;
}
}
if (j == LanguageFiles.Length)
{
#if !DEBUG
try
{
#endif
string File = OpenBveApi.Path.CombineFile(Folder, "en-US.cfg");
Interface.LoadLanguage(File);
ApplyLanguage();
#if !DEBUG
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
#endif
}
}
if (Program.CurrentlyRunningOnMono)
{
//HACK: If we're running on Mono, manually select the tabpage at start. This avoids the 'grey tab' bug
tabcontrolRouteSelection.SelectedTab = tabpageRouteBrowse;
tabcontrolTrainSelection.SelectedTab = tabpageTrainBrowse;
}
// lists
ShowScoreLog(checkboxScorePenalties.Checked);
// result
Result.Start = false;
routeWorkerThread = new BackgroundWorker();
routeWorkerThread.DoWork += routeWorkerThread_doWork;
routeWorkerThread.RunWorkerCompleted += routeWorkerThread_completed;
Manipulation.ProgressChanged += OnWorkerProgressChanged;
Manipulation.ProblemReport += OnWorkerReportsProblem;
trackBarTimeAccelerationFactor.ValueChanged += trackBarTimeAccelerationFactor_ValueChanged;
}