diff --git a/External/Plugins/ProjectManager/Controls/PropertiesDialog.cs b/External/Plugins/ProjectManager/Controls/PropertiesDialog.cs index 4a48d40bf2..1889885ab9 100644 --- a/External/Plugins/ProjectManager/Controls/PropertiesDialog.cs +++ b/External/Plugins/ProjectManager/Controls/PropertiesDialog.cs @@ -12,6 +12,7 @@ using ProjectManager.Actions; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using Ookii.Dialogs; using PluginCore.Collections; @@ -21,68 +22,68 @@ public class PropertiesDialog : SmartForm { #region Form Designer - private System.Windows.Forms.Button btnOK; - private System.Windows.Forms.Button btnCancel; - private System.Windows.Forms.Button btnApply; - private System.Windows.Forms.TabPage movieTab; - private System.Windows.Forms.TextBox outputSwfBox; - private System.Windows.Forms.Label exportinLabel; - private System.Windows.Forms.Label pxLabel; - private System.Windows.Forms.Label fpsLabel; - private System.Windows.Forms.Label bgcolorLabel; - private System.Windows.Forms.Label framerateLabel; - private System.Windows.Forms.Label dimensionsLabel; - private System.Windows.Forms.Label xLabel; - private System.Windows.Forms.ColorDialog colorDialog; - private System.Windows.Forms.Button outputBrowseButton; - private System.Windows.Forms.GroupBox generalGroupBox; - private System.Windows.Forms.GroupBox playGroupBox; - private System.Windows.Forms.TabPage classpathsTab; - private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnGlobalClasspaths; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.TabPage buildTab; - private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.TextBox preBuildBox; - private System.Windows.Forms.Button preBuilderButton; - private System.Windows.Forms.GroupBox groupBox5; - private System.Windows.Forms.Button postBuilderButton; - private System.Windows.Forms.TextBox postBuildBox; - private System.Windows.Forms.ToolTip agressiveTip; - private System.Windows.Forms.CheckBox alwaysExecuteCheckBox; - private System.Windows.Forms.ComboBox testMovieCombo; - private System.Windows.Forms.TabPage compilerTab; - private System.Windows.Forms.PropertyGrid propertyGrid; - private System.Windows.Forms.Label outputTypeLabel; - private System.Windows.Forms.ComboBox outputCombo; - private System.Windows.Forms.GroupBox platformGroupBox; - private System.Windows.Forms.ComboBox platformCombo; - private System.Windows.Forms.Button editCommandButton; - private System.Windows.Forms.ComboBox versionCombo; - private System.Windows.Forms.TabPage sdkTabPage; - private System.Windows.Forms.Button manageButton; - private System.Windows.Forms.ComboBox sdkComboBox; - private System.Windows.Forms.GroupBox sdkGroupBox; - private System.Windows.Forms.GroupBox customGroupBox; - private System.Windows.Forms.Label labelUseGlobal; - private System.Windows.Forms.PictureBox warningImage; - private System.Windows.Forms.Label labelWarning; - private System.Windows.Forms.Button browseButton; - private System.Windows.Forms.TextBox customTextBox; - private System.Windows.Forms.Label labelUseCustom; + System.Windows.Forms.Button btnOK; + System.Windows.Forms.Button btnCancel; + System.Windows.Forms.Button btnApply; + System.Windows.Forms.TabPage movieTab; + System.Windows.Forms.TextBox outputSwfBox; + System.Windows.Forms.Label exportinLabel; + System.Windows.Forms.Label pxLabel; + System.Windows.Forms.Label fpsLabel; + System.Windows.Forms.Label bgcolorLabel; + System.Windows.Forms.Label framerateLabel; + System.Windows.Forms.Label dimensionsLabel; + System.Windows.Forms.Label xLabel; + System.Windows.Forms.ColorDialog colorDialog; + System.Windows.Forms.Button outputBrowseButton; + System.Windows.Forms.GroupBox generalGroupBox; + System.Windows.Forms.GroupBox playGroupBox; + System.Windows.Forms.TabPage classpathsTab; + System.Windows.Forms.Label label2; + System.Windows.Forms.Label label3; + System.Windows.Forms.Button btnGlobalClasspaths; + System.Windows.Forms.GroupBox groupBox3; + System.Windows.Forms.TabPage buildTab; + System.Windows.Forms.GroupBox groupBox4; + System.Windows.Forms.TextBox preBuildBox; + System.Windows.Forms.Button preBuilderButton; + System.Windows.Forms.GroupBox groupBox5; + System.Windows.Forms.Button postBuilderButton; + System.Windows.Forms.TextBox postBuildBox; + System.Windows.Forms.ToolTip agressiveTip; + System.Windows.Forms.CheckBox alwaysExecuteCheckBox; + System.Windows.Forms.ComboBox testMovieCombo; + System.Windows.Forms.TabPage compilerTab; + System.Windows.Forms.PropertyGrid propertyGrid; + System.Windows.Forms.Label outputTypeLabel; + System.Windows.Forms.ComboBox outputCombo; + System.Windows.Forms.GroupBox platformGroupBox; + System.Windows.Forms.ComboBox platformCombo; + System.Windows.Forms.Button editCommandButton; + System.Windows.Forms.ComboBox versionCombo; + System.Windows.Forms.TabPage sdkTabPage; + System.Windows.Forms.Button manageButton; + System.Windows.Forms.ComboBox sdkComboBox; + System.Windows.Forms.GroupBox sdkGroupBox; + System.Windows.Forms.GroupBox customGroupBox; + System.Windows.Forms.Label labelUseGlobal; + System.Windows.Forms.PictureBox warningImage; + System.Windows.Forms.Label labelWarning; + System.Windows.Forms.Button browseButton; + System.Windows.Forms.TextBox customTextBox; + System.Windows.Forms.Label labelUseCustom; protected System.Windows.Forms.TabControl tabControl; protected System.Windows.Forms.TextBox colorTextBox; protected System.Windows.Forms.Label colorLabel; protected System.Windows.Forms.TextBox fpsTextBox; protected System.Windows.Forms.TextBox heightTextBox; protected System.Windows.Forms.TextBox widthTextBox; - private ClasspathControl classpathControl; + ClasspathControl classpathControl; /// /// Required designer variable. /// - private System.ComponentModel.IContainer components = null; + System.ComponentModel.IContainer components = null; /// /// Clean up any resources being used. @@ -103,7 +104,7 @@ protected override void Dispose(bool disposing) /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// - private void InitializeComponent() + void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.btnOK = new System.Windows.Forms.ButtonEx(); @@ -795,10 +796,11 @@ private void InitializeComponent() #endregion - private CompilerOptions optionsCopy; - private bool sdkChanged; - private bool isPropertyGridReadOnly; - private LanguagePlatform langPlatform; + CompilerOptions optionsCopy; + bool sdkChanged; + bool isPropertyGridReadOnly; + LanguagePlatform langPlatform; + string currentPlatform; public event EventHandler OpenGlobalClasspaths; @@ -811,7 +813,7 @@ public PropertiesDialog() this.InitializeLocalization(); } - private void CreateClassPathControl() + void CreateClassPathControl() { this.classpathControl = new ProjectManager.Controls.ClasspathControl(); this.classpathControl.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right; @@ -847,7 +849,7 @@ public void SetProject(Project project) #region Localization - private void InitializeLocalization() + void InitializeLocalization() { this.btnOK.Text = TextHelper.GetString("Label.OK"); this.buildTab.Text = TextHelper.GetString("Info.Build"); @@ -911,12 +913,12 @@ protected virtual void BuildDisplay() btnApply.Enabled = false; } - private void InitOptionsTab() + void InitOptionsTab() { UpdateCompilerOptions(); } - private void UpdateCompilerOptions() + void UpdateCompilerOptions() { var readOnly = IsExternalConfiguration(); if (readOnly == isPropertyGridReadOnly && propertyGrid.SelectedObject != null) @@ -934,14 +936,14 @@ private void UpdateCompilerOptions() PropertiesChanged = false; } - private void InitBuildTab() + void InitBuildTab() { preBuildBox.Text = BaseProject.PreBuildEvent; postBuildBox.Text = BaseProject.PostBuildEvent; alwaysExecuteCheckBox.Checked = BaseProject.AlwaysRunPostBuild; } - private void InitClasspathTab() + void InitClasspathTab() { classpathControl.Changed += classpathControl_Changed; classpathControl.Project = BaseProject; @@ -952,7 +954,7 @@ private void InitClasspathTab() ClasspathsChanged = false; } - private void UpdateClasspaths() + void UpdateClasspaths() { if (IsExternalConfiguration()) { @@ -965,7 +967,7 @@ private void UpdateClasspaths() label2.Text = TextHelper.GetString("Info.ProjectClasspaths"); } - private void InitSDKTab() + void InitSDKTab() { sdkComboBox.Items.Clear(); int select = 0; @@ -1005,14 +1007,11 @@ private void InitSDKTab() sdkChanged = false; } - private void InitOutputTab() + void InitOutputTab() { - MovieOptions options = BaseProject.MovieOptions; + var options = BaseProject.MovieOptions; - string[] types = Array.ConvertAll( - BaseProject.MovieOptions.OutputTypes, - (ot) => ot.ToString() - ); + var types = Array.ConvertAll(BaseProject.MovieOptions.OutputTypes, ot => ot.ToString()); InitCombo(outputCombo, types, BaseProject.OutputType, "Label.OutputType"); outputCombo.SelectedIndexChanged += outputCombo_SelectedIndexChanged; @@ -1023,6 +1022,7 @@ private void InitOutputTab() fpsTextBox.Text = options.Fps.ToString(); InitCombo(platformCombo, BaseProject.MovieOptions.TargetPlatforms, BaseProject.MovieOptions.Platform); + currentPlatform = platformCombo.Text; platformCombo.SelectedIndexChanged += platformCombo_SelectedIndexChanged; InitCombo(versionCombo, BaseProject.MovieOptions.TargetVersions(this.platformCombo.Text), BaseProject.MovieOptions.Version); @@ -1034,7 +1034,7 @@ private void InitOutputTab() UpdateEditCommandButton(); } - private void UpdateEditCommandButton() + void UpdateEditCommandButton() { TestMovieBehavior state = GetTestMovie(); editCommandButton.Visible = state == TestMovieBehavior.Custom @@ -1042,7 +1042,7 @@ private void UpdateEditCommandButton() || state == TestMovieBehavior.Webserver; } - private void UpdateVersionCombo() + void UpdateVersionCombo() { if (versionCombo.Items.Count > 1) { @@ -1055,7 +1055,7 @@ private void UpdateVersionCombo() } } - private void InitTestMovieOptions() + void InitTestMovieOptions() { OutputType output = GetOutput(); string platform = GetPlatform(); @@ -1071,19 +1071,19 @@ private void InitTestMovieOptions() options.Add(TestMovieBehavior.OpenDocument); options.Add(TestMovieBehavior.Webserver); options.Add(TestMovieBehavior.Custom); - List items = options.ConvertAll((item) => item.ToString()); + var items = options.ConvertAll(item => item.ToString()); InitCombo(testMovieCombo, items.ToArray(), BaseProject.TestMovieBehavior.ToString(), "Label.TestMovie"); } - private void InitCombo(ComboBox combo, object[] items, object select) + void InitCombo(ComboBox combo, object[] items, object select) { InitCombo(combo, items, select, null); } - private void InitCombo(ComboBox combo, object[] values, object select, string localizePrefix) + void InitCombo(ComboBox combo, object[] values, object select, string localizePrefix) { combo.Items.Clear(); - ComboItem[] items = Array.ConvertAll(values, (value) => new ComboItem(value, localizePrefix)); + var items = Array.ConvertAll(values, value => new ComboItem(value, localizePrefix)); combo.Items.AddRange(items); if (select != null) @@ -1094,19 +1094,19 @@ private void InitCombo(ComboBox combo, object[] values, object select, string lo } } - private string GetPlatform() + string GetPlatform() { if (platformCombo.SelectedIndex < 0) return null; return ((ComboItem) platformCombo.SelectedItem).Value.ToString(); } - private OutputType GetOutput() + OutputType GetOutput() { if (outputCombo.SelectedIndex < 0) return OutputType.Unknown; return (OutputType)Enum.Parse(typeof(OutputType), ((ComboItem) outputCombo.SelectedItem).Value.ToString()); } - private TestMovieBehavior GetTestMovie() + TestMovieBehavior GetTestMovie() { if (testMovieCombo.SelectedIndex < 0) return TestMovieBehavior.Unknown; return (TestMovieBehavior)Enum.Parse(typeof(TestMovieBehavior), ((ComboItem) testMovieCombo.SelectedItem).Value.ToString()); @@ -1160,7 +1160,7 @@ protected virtual bool Apply() return true; } - private bool OuputValid(string path) + bool OuputValid(string path) { try { @@ -1173,33 +1173,33 @@ private bool OuputValid(string path) } } - private void btnOK_Click(object sender, EventArgs e) + void btnOK_Click(object sender, EventArgs e) { if (btnApply.Enabled) if (!Apply()) return; this.Close(); } - private void btnCancel_Click(object sender, EventArgs e) + void btnCancel_Click(object sender, EventArgs e) { this.Close(); } - private void btnApply_Click(object sender, EventArgs e) + void btnApply_Click(object sender, EventArgs e) { Apply(); } - private void outputSwfBox_TextChanged(object sender, EventArgs e) + void outputSwfBox_TextChanged(object sender, EventArgs e) { ClasspathsChanged = true; Modified(); } - private void widthTextBox_TextChanged(object sender, EventArgs e) { Modified(); } + void widthTextBox_TextChanged(object sender, EventArgs e) { Modified(); } - private void heightTextBox_TextChanged(object sender, EventArgs e) { Modified(); } + void heightTextBox_TextChanged(object sender, EventArgs e) { Modified(); } - private void colorTextBox_TextChanged(object sender, EventArgs e) + void colorTextBox_TextChanged(object sender, EventArgs e) { string rgb = colorTextBox.Text; if (rgb.Length == 0) rgb = "#000000"; @@ -1213,34 +1213,45 @@ private void colorTextBox_TextChanged(object sender, EventArgs e) catch { colorLabel.BackColor = SystemColors.WindowText; } Modified(); } - private void fpsTextBox_TextChanged(object sender, EventArgs e) { Modified(); } - private void preBuildBox_TextChanged(object sender, System.EventArgs e) { Modified(); } + void fpsTextBox_TextChanged(object sender, EventArgs e) { Modified(); } + + void preBuildBox_TextChanged(object sender, System.EventArgs e) { Modified(); } - private void postBuildBox_TextChanged(object sender, System.EventArgs e) { Modified(); } + void postBuildBox_TextChanged(object sender, System.EventArgs e) { Modified(); } - private void alwaysExecuteCheckBox_CheckedChanged(object sender, System.EventArgs e) { Modified(); } + void alwaysExecuteCheckBox_CheckedChanged(object sender, System.EventArgs e) { Modified(); } - private void testMovieCombo_SelectedIndexChanged(object sender, System.EventArgs e) + void testMovieCombo_SelectedIndexChanged(object sender, System.EventArgs e) { Modified(); editCommandButton.Visible = testMovieCombo.Text.IndexOfOrdinal("..") > 0; } - private void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) + void propertyGrid_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) { Modified(); } void platformCombo_SelectedIndexChanged(object sender, EventArgs e) { - langPlatform = GetLanguagePlatform(platformCombo.Text); - - this.versionCombo.Items.Clear(); - this.versionCombo.Items.AddRange(BaseProject.MovieOptions.TargetVersions(this.platformCombo.Text)); - this.versionCombo.SelectedIndex = Math.Max(0, this.versionCombo.Items.IndexOf( - BaseProject.MovieOptions.DefaultVersion(this.platformCombo.Text))); + var newPlatform = platformCombo.Text; + var currentVersion = versionCombo.Text; + langPlatform = GetLanguagePlatform(newPlatform); + + versionCombo.Items.Clear(); + var versions = BaseProject.MovieOptions.TargetVersions(newPlatform); + versionCombo.Items.AddRange(versions); + // for example: AIR -> AIR Mobile, AIR Mobile -> AIR + if ((Regex.IsMatch(newPlatform, $"{Regex.Escape(currentPlatform)}\\s") + || Regex.IsMatch(currentPlatform, $"{Regex.Escape(newPlatform)}\\s")) + && Array.IndexOf(versions, currentVersion) is int p && p != -1) + { + versionCombo.SelectedIndex = p; + } + else versionCombo.SelectedIndex = Math.Max(0, versionCombo.Items.IndexOf(BaseProject.MovieOptions.DefaultVersion(newPlatform))); + currentPlatform = newPlatform; UpdateVersionCombo(); InitTestMovieOptions(); UpdateGeneralPanel(); @@ -1248,12 +1259,11 @@ void platformCombo_SelectedIndexChanged(object sender, EventArgs e) DetectExternalToolchain(); UpdateClasspaths(); UpdateCompilerOptions(); - PlatformChanged = true; Modified(); } - private void SelectItem(ComboBox combo, object value) + void SelectItem(ComboBox combo, object value) { foreach (var item in combo.Items) if (item.ToString() == value.ToString()) @@ -1263,7 +1273,7 @@ private void SelectItem(ComboBox combo, object value) } } - private void versionCombo_SelectedIndexChanged(object sender, EventArgs e) + void versionCombo_SelectedIndexChanged(object sender, EventArgs e) { PlatformChanged = true; Modified(); @@ -1275,7 +1285,7 @@ void classpathControl_Changed(object sender, EventArgs e) Modified(); } - private void colorLabel_Click(object sender, EventArgs e) + void colorLabel_Click(object sender, EventArgs e) { if (this.colorDialog.ShowDialog() == DialogResult.OK) { @@ -1285,17 +1295,17 @@ private void colorLabel_Click(object sender, EventArgs e) } } - private string ToHtml(Color c) + string ToHtml(Color c) { return $"#{(c.R << 16) + (c.G << 8) + c.B:X6}"; } - private void btnGlobalClasspaths_Click(object sender, EventArgs e) + void btnGlobalClasspaths_Click(object sender, EventArgs e) { OpenGlobalClasspaths?.Invoke(this,new EventArgs()); } - private void outputBrowseButton_Click(object sender, EventArgs e) + void outputBrowseButton_Click(object sender, EventArgs e) { using SaveFileDialog dialog = new SaveFileDialog(); dialog.Filter = "*.*|*.*"; // TextHelper.GetString("Info.FlashMovieFilter"); @@ -1314,7 +1324,7 @@ private void outputBrowseButton_Click(object sender, EventArgs e) } } - private void editCommandButton_Click(object sender, System.EventArgs e) + void editCommandButton_Click(object sender, System.EventArgs e) { string caption; string label; @@ -1338,28 +1348,28 @@ private void editCommandButton_Click(object sender, System.EventArgs e) } } - private void preBuilderButton_Click(object sender, System.EventArgs e) + void preBuilderButton_Click(object sender, System.EventArgs e) { using BuildEventDialog dialog = new BuildEventDialog(BaseProject); dialog.CommandLine = preBuildBox.Text; if (dialog.ShowDialog(this) == DialogResult.OK) preBuildBox.Text = dialog.CommandLine; } - private void postBuilderButton_Click(object sender, System.EventArgs e) + void postBuilderButton_Click(object sender, System.EventArgs e) { using BuildEventDialog dialog = new BuildEventDialog(BaseProject); dialog.CommandLine = postBuildBox.Text; if (dialog.ShowDialog(this) == DialogResult.OK) postBuildBox.Text = dialog.CommandLine; } - private void outputCombo_SelectedIndexChanged(object sender, EventArgs e) + void outputCombo_SelectedIndexChanged(object sender, EventArgs e) { UpdateGeneralPanel(); InitTestMovieOptions(); Modified(); } - private void UpdateGeneralPanel() + void UpdateGeneralPanel() { OutputType output = GetOutput(); generalGroupBox.Enabled = BaseProject.MovieOptions.HasOutput(output); @@ -1375,7 +1385,7 @@ private void UpdateGeneralPanel() exportinLabel.Text = TextHelper.GetString("Label.OutputFile"); } - private void manageButton_Click(object sender, EventArgs e) + void manageButton_Click(object sender, EventArgs e) { DataEvent de = new DataEvent(EventType.Command, "ASCompletion.ShowSettings", BaseProject.Language); EventManager.DispatchEvent(this, de); @@ -1388,7 +1398,7 @@ void customTextBox_TextChanged(object sender, EventArgs e) Modified(); } - private void browseButton_Click(object sender, EventArgs e) + void browseButton_Click(object sender, EventArgs e) { using VistaFolderBrowserDialog folder = new VistaFolderBrowserDialog(); if (customTextBox.Text.Length > 0 && Directory.Exists(customTextBox.Text)) @@ -1399,7 +1409,7 @@ private void browseButton_Click(object sender, EventArgs e) } } - private void sdkCombo_SelectedIndexChanged(object sender, EventArgs e) + void sdkCombo_SelectedIndexChanged(object sender, EventArgs e) { customTextBox.Text = ""; sdkChanged = true; @@ -1408,7 +1418,7 @@ private void sdkCombo_SelectedIndexChanged(object sender, EventArgs e) /* PLATFORM CONFIGURATION */ - private void DetectExternalToolchain() + void DetectExternalToolchain() { if (!IsExternalToolchain()) return; @@ -1426,16 +1436,16 @@ private void DetectExternalToolchain() } } - private bool IsExternalConfiguration() + bool IsExternalConfiguration() { var selectedVersion = versionCombo.Text == "" ? "1.0" : versionCombo.Text; var version = langPlatform?.GetVersion(selectedVersion); return version?.Commands != null && version.Commands.ContainsKey("display"); } - private bool IsExternalToolchain() => langPlatform?.ExternalToolchain != null; + bool IsExternalToolchain() => langPlatform?.ExternalToolchain != null; - private LanguagePlatform GetLanguagePlatform(string platformName) + LanguagePlatform GetLanguagePlatform(string platformName) { if (PlatformData.SupportedLanguages.ContainsKey(BaseProject.Language)) { @@ -1448,7 +1458,7 @@ private LanguagePlatform GetLanguagePlatform(string platformName) } - class ComboItem + internal class ComboItem { public string Label; public object Value;