From 4e2c4c3bacc6afebf52df2296bab3eb14ab1f138 Mon Sep 17 00:00:00 2001 From: Milan Hanajik Date: Fri, 25 Jan 2019 12:52:05 +0100 Subject: [PATCH] TBF : (1) SharedButtons: opt. buttons positions automated, (2) Export and import of transition sequences, ver. 2.18.1122 --- Config/Entities/TransitionSequence.cs | 58 +++++- Config/Entities/TransitionStep.cs | 63 +++++- Config/Entities/VirtualBenchSequence.cs | 22 ++- Config/Properties/AssemblyInfo.cs | 4 +- ResultsBrowser/Properties/AssemblyInfo.cs | 4 +- .../TestMethods/Endurance/CycleDlg.cs | 2 +- TBF/Forms/TabNameDlg.Designer.cs | 127 ++++++------ TBF/ProcedureDlg.cs | 9 +- TBF/Properties/AssemblyInfo.cs | 4 +- TBF/Resources/Strings.Designer.cs | 27 +++ TBF/Resources/Strings.resx | 9 + TBF/TransitionsDlg.cs | 97 +++++++-- TBF/UiControls/SharedButtons.Designer.cs | 10 +- TBF/UiControls/SharedButtons.cs | 185 ++++++++---------- 14 files changed, 416 insertions(+), 205 deletions(-) diff --git a/Config/Entities/TransitionSequence.cs b/Config/Entities/TransitionSequence.cs index d17ef434a..d1e960c6c 100644 --- a/Config/Entities/TransitionSequence.cs +++ b/Config/Entities/TransitionSequence.cs @@ -1,7 +1,10 @@ /// -/// Copyright (c) 2013-2015 Sensus Metering Systems +/// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// +using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; namespace Config.Entities { @@ -37,5 +40,56 @@ namespace Config.Entities foreach (var step in TransitionSteps) { result.TransitionSteps.Add(step.Clone()); } return result; } - } + + public virtual void Export(StreamWriter output) + { + output.WriteLine(ItemNr.ToString(CultureInfo.InvariantCulture)); + output.WriteLine(Name); + output.WriteLine(Description); + + foreach (var step in TransitionSteps) { step.Export(output); } + output.WriteLine(); + + output.Close(); + } + + public static TransitionSequence Import(StreamReader input) + { + TransitionSequence result = new TransitionSequence(); + + result.ItemNr = int.Parse(input.ReadLine(), CultureInfo.InvariantCulture); + result.Name = input.ReadLine(); + result.Description = input.ReadLine(); + + while (true) + { + TransitionStep step = TransitionStep.Import(input, result); + if (step == null) + break; + else + result.TransitionSteps.Add(step); + } + + return result; + } + + public virtual string Compare(StreamReader inp) + { + System.Text.StringBuilder diff = new System.Text.StringBuilder(); + const string fmt = "{0} = {1}\r\n (in the file {2})\r\n"; + string ln; + + ln = inp.ReadLine(); /// skip ItemNr + ln = inp.ReadLine(); if (ln != Name) { diff.AppendFormat(fmt, "Name", Name, ln); }; + ln = inp.ReadLine(); if (ln != Description) { diff.AppendFormat(fmt, "Description", Description, ln); }; + + //foreach (var step in TransitionSteps) + //{ + // string testDiff = step.Compare(inp); + // if (testDiff.Contains( + //} + + return diff.ToString(); + } + } } diff --git a/Config/Entities/TransitionStep.cs b/Config/Entities/TransitionStep.cs index 143b525e1..6fd7c5129 100644 --- a/Config/Entities/TransitionStep.cs +++ b/Config/Entities/TransitionStep.cs @@ -1,8 +1,10 @@ /// -/// Copyright (c) 2013-2015, 2017 Sensus Metering Systems +/// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; namespace Config.Entities { @@ -61,5 +63,64 @@ namespace Config.Entities result += indent + "PumpsWithFMPct = " + PumpWithFMPcts + Environment.NewLine; return result; } + + public virtual void Export(StreamWriter output) + { + CultureInfo ci = CultureInfo.InvariantCulture; + + output.WriteLine(ItemNr.ToString(ci)); + output.WriteLine(Duration.ToString(ci)); + output.WriteLine(Message); + output.WriteLine(EndCondition); + output.WriteLine(ValvesOpen); + output.WriteLine(ValvesClose); + output.WriteLine(RegulValvesPct); + output.WriteLine(PumpWithFMPcts); + } + + public static TransitionStep Import(StreamReader input, TransitionSequence newSequence) + { + string firstLine = input.ReadLine(); + if (string.IsNullOrEmpty(firstLine)) + { + return null; + } + + CultureInfo ci = CultureInfo.InvariantCulture; + int itemNr = int.Parse(firstLine, ci); + TransitionStep tst = new TransitionStep(itemNr, newSequence); + + tst.Duration = int.Parse(input.ReadLine(), ci); + tst.Message = input.ReadLine(); + tst.EndCondition = input.ReadLine(); + tst.ValvesOpen = input.ReadLine(); + tst.ValvesClose = input.ReadLine(); + tst.RegulValvesPct = input.ReadLine(); + tst.PumpWithFMPcts = input.ReadLine(); + + return tst; + } + + public virtual string Compare(StreamReader inp) + { + System.Text.StringBuilder diff = new System.Text.StringBuilder(); + string fmt = string.Format("Step {0} : ", ItemNr) + "{0} = {1}\r\n (in the file {2})\r\n"; + string ln; + CultureInfo ci = CultureInfo.InvariantCulture; + + string firstLine = inp.ReadLine(); + if (string.IsNullOrEmpty(firstLine)) return string.Format("TransitionStep {0} is missing in the compared file\r\n", ItemNr); + + if (ItemNr.ToString() != firstLine) { diff.AppendFormat(fmt, "ItemNr", ItemNr, firstLine); }; + ln = inp.ReadLine(); if (ln != Duration.ToString(ci)) { diff.AppendFormat(fmt, "Duration", Duration.ToString(ci), ln); }; + ln = inp.ReadLine(); if (ln != Message) { diff.AppendFormat(fmt, "Message", Message, ln); }; + ln = inp.ReadLine(); if (ln != EndCondition) { diff.AppendFormat(fmt, "EndCondition", EndCondition, ln); }; + ln = inp.ReadLine(); if (ln != ValvesOpen) { diff.AppendFormat(fmt, "ValvesOpen", ValvesOpen, ln); }; + ln = inp.ReadLine(); if (ln != ValvesClose) { diff.AppendFormat(fmt, "ValvesClose", ValvesClose, ln); }; + ln = inp.ReadLine(); if (ln != RegulValvesPct) { diff.AppendFormat(fmt, "RegulValvesPct", RegulValvesPct, ln); }; + ln = inp.ReadLine(); if (ln != PumpWithFMPcts) { diff.AppendFormat(fmt, "PumpWithFMPcts", PumpWithFMPcts, ln); }; + + return diff.ToString(); + } } } diff --git a/Config/Entities/VirtualBenchSequence.cs b/Config/Entities/VirtualBenchSequence.cs index 151d8c20c..44171e6b7 100644 --- a/Config/Entities/VirtualBenchSequence.cs +++ b/Config/Entities/VirtualBenchSequence.cs @@ -1,8 +1,9 @@ /// -/// Copyright (c) 2013-2015 Sensus Metering Systems +/// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using System; using System.Collections.Generic; +using System.IO; namespace Config.Entities { @@ -35,5 +36,24 @@ namespace Config.Entities foreach (var step in VirtualBenchSteps) { result.VirtualBenchSteps.Add(step.Clone()); } return result; } + + public virtual void Export(StreamWriter output) + { + /// TODO + } + + public static VirtualBenchSequence Import(StreamReader input) + { + VirtualBenchSequence result = new VirtualBenchSequence(); + /// TODO + return result; + } + + public virtual string Compare(StreamReader inp) + { + System.Text.StringBuilder diff = new System.Text.StringBuilder(); + /// TODO + return diff.ToString(); + } } } diff --git a/Config/Properties/AssemblyInfo.cs b/Config/Properties/AssemblyInfo.cs index 6a1140e73..c8d6440a3 100644 --- a/Config/Properties/AssemblyInfo.cs +++ b/Config/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.18.1110.0")] -[assembly: AssemblyFileVersion("2.18.1110.0")] +[assembly: AssemblyVersion("2.18.1122.0")] +[assembly: AssemblyFileVersion("2.18.1122.0")] diff --git a/ResultsBrowser/Properties/AssemblyInfo.cs b/ResultsBrowser/Properties/AssemblyInfo.cs index 1f31127f0..b7dfbffed 100644 --- a/ResultsBrowser/Properties/AssemblyInfo.cs +++ b/ResultsBrowser/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.18.1115.0")] -[assembly: AssemblyFileVersion("2.18.1115.0")] +[assembly: AssemblyVersion("2.18.1122.0")] +[assembly: AssemblyFileVersion("2.18.1122.0")] diff --git a/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs b/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs index 40290f9f6..051d5c0fb 100644 --- a/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs +++ b/TBF/BenchControl/TestMethods/Endurance/CycleDlg.cs @@ -177,7 +177,7 @@ namespace TBF.BenchControl.TestMethods.Endurance seqStepsCtrl.OkBtnClicked(); } slctdTab = tabControl.SelectedIndex; - sharedButtons.SetEnabled(TBF.UiControls.SharedButtons.Buttons.Add, true); + sharedButtons.EnableButtons(TBF.UiControls.SharedButtons.Buttons.Add); sharedButtons.DisableButtons(TBF.UiControls.SharedButtons.Buttons.Remove); RefreshAllTabs(); } diff --git a/TBF/Forms/TabNameDlg.Designer.cs b/TBF/Forms/TabNameDlg.Designer.cs index 17591d262..2be8db154 100644 --- a/TBF/Forms/TabNameDlg.Designer.cs +++ b/TBF/Forms/TabNameDlg.Designer.cs @@ -31,69 +31,70 @@ namespace TBF.Forms /// private void InitializeComponent() { - this.tabNameTextBox = new System.Windows.Forms.TextBox(); - this.okButton = new System.Windows.Forms.Button(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.SuspendLayout(); - // - // tabNameTextBox - // - this.tabNameTextBox.Location = new System.Drawing.Point(33, 25); - this.tabNameTextBox.Name = "tabNameTextBox"; - this.tabNameTextBox.Size = new System.Drawing.Size(145, 20); - this.tabNameTextBox.TabIndex = 1; - // - // okButton - // - this.okButton.Location = new System.Drawing.Point(209, 18); - this.okButton.Name = "okButton"; - this.okButton.Size = new System.Drawing.Size(85, 33); - this.okButton.TabIndex = 2; - this.okButton.Text = "OK"; - this.okButton.UseVisualStyleBackColor = true; - this.okButton.Click += new System.EventHandler(this.okButton_Click); - // - // radioButton1 - // - this.radioButton1.AutoSize = true; - this.radioButton1.Checked = true; - this.radioButton1.Location = new System.Drawing.Point(37, 63); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(121, 17); - this.radioButton1.TabIndex = 3; - this.radioButton1.TabStop = true; - this.radioButton1.Text = "Transition sequence"; - this.radioButton1.UseVisualStyleBackColor = true; - // - // radioButton2 - // - this.radioButton2.AutoSize = true; - this.radioButton2.Location = new System.Drawing.Point(37, 86); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(137, 17); - this.radioButton2.TabIndex = 4; - this.radioButton2.Text = "Virtual bench sequence"; - this.radioButton2.UseVisualStyleBackColor = true; - // - // TabNameDlg - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(316, 122); - this.Controls.Add(this.radioButton2); - this.Controls.Add(this.radioButton1); - this.Controls.Add(this.okButton); - this.Controls.Add(this.tabNameTextBox); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "TabNameDlg"; - this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; - this.Text = "TabName"; - this.Load += new System.EventHandler(this.TabNameDlg_Load); - this.ResumeLayout(false); - this.PerformLayout(); + this.tabNameTextBox = new System.Windows.Forms.TextBox(); + this.okButton = new System.Windows.Forms.Button(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.SuspendLayout(); + // + // tabNameTextBox + // + this.tabNameTextBox.Location = new System.Drawing.Point(33, 25); + this.tabNameTextBox.Name = "tabNameTextBox"; + this.tabNameTextBox.Size = new System.Drawing.Size(145, 20); + this.tabNameTextBox.TabIndex = 1; + // + // okButton + // + this.okButton.Location = new System.Drawing.Point(209, 18); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(85, 33); + this.okButton.TabIndex = 2; + this.okButton.Text = "OK"; + this.okButton.UseVisualStyleBackColor = true; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Checked = true; + this.radioButton1.Location = new System.Drawing.Point(37, 63); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(121, 17); + this.radioButton1.TabIndex = 3; + this.radioButton1.TabStop = true; + this.radioButton1.Text = "Transition sequence"; + this.radioButton1.UseVisualStyleBackColor = true; + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(37, 86); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(137, 17); + this.radioButton2.TabIndex = 4; + this.radioButton2.Text = "Virtual bench sequence"; + this.radioButton2.UseVisualStyleBackColor = true; + // + // TabNameDlg + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(316, 122); + this.Controls.Add(this.radioButton2); + this.Controls.Add(this.radioButton1); + this.Controls.Add(this.okButton); + this.Controls.Add(this.tabNameTextBox); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "TabNameDlg"; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "TabName"; + this.Load += new System.EventHandler(this.TabNameDlg_Load); + this.ResumeLayout(false); + this.PerformLayout(); } diff --git a/TBF/ProcedureDlg.cs b/TBF/ProcedureDlg.cs index 889f520fb..c6da1dce0 100644 --- a/TBF/ProcedureDlg.cs +++ b/TBF/ProcedureDlg.cs @@ -1851,7 +1851,14 @@ namespace TBF selectedTab == ProcedureTabs.Process || selectedTab == ProcedureTabs.Parameters; - sharedButtons.SetEnabled(SharedButtons.Buttons.Add, isMetr12ProcOrParams); + if (isMetr12ProcOrParams) + { + sharedButtons.EnableButtons(SharedButtons.Buttons.Add); + } + else + { + sharedButtons.DisableButtons(SharedButtons.Buttons.Add); + } //bool removeBtnEnabled = (selectedTab != ProcedureTabs.General && // selectedTab != ProcedureTabs.History && diff --git a/TBF/Properties/AssemblyInfo.cs b/TBF/Properties/AssemblyInfo.cs index 53a4f12e1..5ea85298d 100644 --- a/TBF/Properties/AssemblyInfo.cs +++ b/TBF/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("2.18.1120.0")] -[assembly: AssemblyFileVersion("2.18.1120.0")] +[assembly: AssemblyVersion("2.18.1122.0")] +[assembly: AssemblyFileVersion("2.18.1122.0")] diff --git a/TBF/Resources/Strings.Designer.cs b/TBF/Resources/Strings.Designer.cs index e24d7211d..c98d09427 100644 --- a/TBF/Resources/Strings.Designer.cs +++ b/TBF/Resources/Strings.Designer.cs @@ -798,6 +798,15 @@ namespace TBF.Resources { } } + /// + /// Looks up a localized string similar to Compare. + /// + internal static string Compare { + get { + return ResourceManager.GetString("Compare", resourceCulture); + } + } + /// /// Looks up a localized string similar to Component. /// @@ -1581,6 +1590,15 @@ namespace TBF.Resources { } } + /// + /// Looks up a localized string similar to Export. + /// + internal static string Export { + get { + return ResourceManager.GetString("Export", resourceCulture); + } + } + /// /// Looks up a localized string similar to NOK. /// @@ -1932,6 +1950,15 @@ namespace TBF.Resources { } } + /// + /// Looks up a localized string similar to Import. + /// + internal static string Import { + get { + return ResourceManager.GetString("Import", resourceCulture); + } + } + /// /// Looks up a localized string similar to Information. /// diff --git a/TBF/Resources/Strings.resx b/TBF/Resources/Strings.resx index 8c5494d41..098dab46b 100644 --- a/TBF/Resources/Strings.resx +++ b/TBF/Resources/Strings.resx @@ -1918,4 +1918,13 @@ Previous + + Compare + + + Export + + + Import + \ No newline at end of file diff --git a/TBF/TransitionsDlg.cs b/TBF/TransitionsDlg.cs index 1852f0b29..654703f6e 100644 --- a/TBF/TransitionsDlg.cs +++ b/TBF/TransitionsDlg.cs @@ -12,6 +12,7 @@ using TBF.BenchControl.Generic; using TBF.BenchControl.GenericDevices; using TBF.Resources; using TBF.UiControls; +using System.IO; namespace TBF { @@ -57,6 +58,7 @@ namespace TBF IList seqStepsCtrls; + public TransitionsDlg() { /// Detect display setting: 100% = 96dpi, 125% = 120dpi, 150% = 144dpi. @@ -68,8 +70,9 @@ namespace TBF sharedButtons.RequiredGroupMembership = new Users.Grp.GID[] { Users.Grp.GID.Metrologists }; sharedButtons.OptionalButtons = SharedButtons.Buttons.Add | SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down | - SharedButtons.Buttons.NewTab | SharedButtons.Buttons.RenameTab | - SharedButtons.Buttons.RemoveTab; + SharedButtons.Buttons.Export | SharedButtons.Buttons.Import | + SharedButtons.Buttons.Compare | SharedButtons.Buttons.NewTab | + SharedButtons.Buttons.RenameTab | SharedButtons.Buttons.RemoveTab; sharedButtons.Unlocked += Unlocked; sharedButtons.OKClicked += okButton_Click; sharedButtons.CancelClicked += cancelButton_Click; @@ -77,6 +80,9 @@ namespace TBF sharedButtons.RemoveClicked += removeButton_Click; sharedButtons.UpClicked += upButton_Click; sharedButtons.DownClicked += downButton_Click; + sharedButtons.ExportClicked += exportButton_Click; + sharedButtons.ImportClicked += importButton_Click; + sharedButtons.CompareClicked += compareButton_Click; sharedButtons.NewTabClicked += newTabButton_Click; sharedButtons.RenameTabClicked += renameTabButton_Click; sharedButtons.RemoveTabClicked += removeTabButton_Click; @@ -149,7 +155,7 @@ namespace TBF private void TransitionsDlg_Load(object sender, EventArgs e) { Localize(); - LoadFormPosition(); + LoadUISettings(); /// Now refresh the content of the dialog RefreshAllTabs(); @@ -170,6 +176,7 @@ namespace TBF foreach (var ctrl in seqStepsCtrls) ctrl.Unlock(); } + private void newTabButton_Click(object sender, EventArgs e) { Forms.TabNameDlg dlg; @@ -495,7 +502,7 @@ namespace TBF Cursor.Current = Cursors.Default; - SaveFormPosition(); + SaveUISettings(); DialogResult = DialogResult.OK; Close(); return; @@ -503,13 +510,13 @@ namespace TBF private void cancelButton_Click(object sender, EventArgs e) { - SaveFormPosition(); + SaveUISettings(); DialogResult = DialogResult.Cancel; Close(); return; } - private void SaveFormPosition() + private void SaveUISettings() { TBF.LocalSettings ls = Program.LocalSettings; if (WindowState == FormWindowState.Normal) @@ -529,13 +536,13 @@ namespace TBF ls.Save(); } - private void LoadFormPosition() + private void LoadUISettings() { TBF.LocalSettings ls = Program.LocalSettings; Width = (ls.TransitionsDlgWidth > 0) ? ls.TransitionsDlgWidth : 1050; - Height = (ls.TransitionsDlgHeight > 0) ? ls.TransitionsDlgHeight : 360; - Left = (ls.TransitionsDlgLeft != 0) ? ls.TransitionsDlgLeft : 150; - Top = (ls.TransitionsDlgTop != 0) ? ls.TransitionsDlgTop : 150; + Height = (ls.TransitionsDlgHeight > 0) ? ls.TransitionsDlgHeight : 650; + Left = (ls.TransitionsDlgLeft != 0) ? ls.TransitionsDlgLeft : 100; + Top = (ls.TransitionsDlgTop != 0) ? ls.TransitionsDlgTop : 100; } @@ -549,7 +556,7 @@ namespace TBF seqStepsCtrls[slctdTab].OkBtnClicked(); } slctdTab = tabControl.SelectedIndex; - sharedButtons.SetEnabled(SharedButtons.Buttons.Add, true); + sharedButtons.EnableButtons(SharedButtons.Buttons.Add); sharedButtons.DisableButtons(SharedButtons.Buttons.Remove); RefreshAllTabs(); } @@ -601,15 +608,6 @@ namespace TBF } } - private void purgeStartCtrl_SelectedIndexChanged(object sender, EventArgs e) - { - SelectedIndexChanged(sender, e); - } - - private void purgeEndCtrl_SelectedIndexChanged(object sender, EventArgs e) - { - SelectedIndexChanged(sender, e); - } /// /// Common part for three xxxListViewEx_SelectedIndexChanged event handlers @@ -639,5 +637,62 @@ namespace TBF UpdateButtonStates(SharedButtons.SelectedItemPos.Middle); } } - } + + + private void exportButton_Click(object sender, EventArgs e) + { + TabPage tabPage = tabControl.SelectedTab; + TransitionSequence transitionSeq = tabPage.Tag as TransitionSequence; + VirtualBenchSequence virtualBenchSeq = tabPage.Tag as VirtualBenchSequence; + + SaveFileDialog dlg = new SaveFileDialog(); + if (dlg.ShowDialog() == DialogResult.OK) + { + if (transitionSeq != null) + { + /// export transition sequence + transitionSeq.Export(new StreamWriter(dlg.FileName, false, System.Text.Encoding.UTF8)); + } + else if (virtualBenchSeq != null) + { + /// export virtual sequence + virtualBenchSeq.Export(new StreamWriter(dlg.FileName, false, System.Text.Encoding.UTF8)); + } + } + } + + private void importButton_Click(object sender, EventArgs e) + { + OpenFileDialog dlg = new OpenFileDialog(); + + if (dlg.ShowDialog() != DialogResult.OK) return; + + /// Import a procedure from a file + int tabId = TransitionSequences.Count + VirtualBenchSequences.Count; + TransitionSequence newSequence = TransitionSequence.Import(new StreamReader(dlg.FileName, System.Text.Encoding.UTF8)); + newSequence.ItemNr = tabId; + + /// Find an unused procedure name + string newName; + bool nameUsed; + for (int nameId = 1; true; nameId++) + { + newName = string.Format("{0} imported{1}", newSequence.Name, (nameId == 1) ? string.Empty : string.Format("({0})", nameId)); + nameUsed = false; + foreach (var seq in TransitionSequences) if (seq.Name.Equals(newName)) nameUsed = true; + if (!nameUsed) break; + } + newSequence.Name = newName; + + TransitionSequences.Add(newSequence); + AddTransitionSeqTab(newSequence); + seqStepsCtrls[tabId].Unlock(); + tabControl.SelectTab(tabId); + } + + private void compareButton_Click(object sender, EventArgs e) + { + MessageBox.Show("Comparing sequences in not implemented yet"); + } + } } diff --git a/TBF/UiControls/SharedButtons.Designer.cs b/TBF/UiControls/SharedButtons.Designer.cs index 3847a479e..2013b72e3 100644 --- a/TBF/UiControls/SharedButtons.Designer.cs +++ b/TBF/UiControls/SharedButtons.Designer.cs @@ -151,7 +151,7 @@ namespace TBF.UiControls // newTabButton // this.newTabButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.newTabButton.Location = new System.Drawing.Point(10, 394); + this.newTabButton.Location = new System.Drawing.Point(10, 565); this.newTabButton.Name = "newTabButton"; this.newTabButton.Size = new System.Drawing.Size(80, 40); this.newTabButton.TabIndex = 9; @@ -162,7 +162,7 @@ namespace TBF.UiControls // renameTabButton // this.renameTabButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.renameTabButton.Location = new System.Drawing.Point(10, 437); + this.renameTabButton.Location = new System.Drawing.Point(10, 608); this.renameTabButton.Name = "renameTabButton"; this.renameTabButton.Size = new System.Drawing.Size(80, 40); this.renameTabButton.TabIndex = 10; @@ -173,7 +173,7 @@ namespace TBF.UiControls // removeTabButton // this.removeTabButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.removeTabButton.Location = new System.Drawing.Point(10, 480); + this.removeTabButton.Location = new System.Drawing.Point(10, 651); this.removeTabButton.Name = "removeTabButton"; this.removeTabButton.Size = new System.Drawing.Size(80, 40); this.removeTabButton.TabIndex = 11; @@ -184,7 +184,7 @@ namespace TBF.UiControls // moreButton // this.moreButton.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.moreButton.Location = new System.Drawing.Point(10, 523); + this.moreButton.Location = new System.Drawing.Point(10, 694); this.moreButton.Name = "moreButton"; this.moreButton.Size = new System.Drawing.Size(80, 40); this.moreButton.TabIndex = 12; @@ -246,7 +246,7 @@ namespace TBF.UiControls this.Controls.Add(this.cancelButton); this.Controls.Add(this.okButton); this.Name = "SharedButtons"; - this.Size = new System.Drawing.Size(100, 649); + this.Size = new System.Drawing.Size(100, 805); this.Load += new System.EventHandler(this.SharedDlgButtons_Load); this.ResumeLayout(false); diff --git a/TBF/UiControls/SharedButtons.cs b/TBF/UiControls/SharedButtons.cs index c6fbe7ffb..dc75fe0ab 100644 --- a/TBF/UiControls/SharedButtons.cs +++ b/TBF/UiControls/SharedButtons.cs @@ -17,23 +17,23 @@ namespace TBF.UiControls public enum Buttons { None = 0, - OK = 1, /// always visible, text = 'Close' when locked - Cancel = 2, /// always visible - Add = 4, /// optional - Remove = 8, /// optional - Up = 0x10, /// optional - Down = 0x20, /// optional - Edit = 0x40, /// optional - Copy = 0x80, /// optional - NewTab = 0x100, /// optional - RenameTab = 0x200, /// optional - RemoveTab = 0x400, /// optional - More = 0x800, /// optional - Export = 0x1000, /// optional - Import = 0x2000, /// optional - Compare = 0x4000, /// optional + Add = (1 << 0), /// optional + Remove = (1 << 1), /// optional + Up = (1 << 2), /// optional + Down = (1 << 3), /// optional + Edit = (1 << 4), /// optional + Copy = (1 << 5), /// optional + Export = (1 << 6), /// optional + Import = (1 << 7), /// optional + Compare = (1 << 8), /// optional + NewTab = (1 << 9), /// optional + RenameTab = (1 << 10), /// optional + RemoveTab = (1 << 11), /// optional + More = (1 << 12), /// optional } + readonly System.Windows.Forms.Button[] buttonCtrls; + /// /// Optional buttons are Add, Remove, Up, Down, Edit and Copy. /// OK and Cancel buttons are always visible (after unlock), but not always enabled. @@ -47,6 +47,8 @@ namespace TBF.UiControls } LockState lockState; + bool buttonsRepositionsed; + public bool MoreActive; public int MoreButtonTop; @@ -72,12 +74,19 @@ namespace TBF.UiControls /// public SharedButtons() { + InitializeComponent(); originalUser = Users.GlobalData.CurrentUser; lockState = LockState.Locked; MoreActive = false; - OptionalButtons = Buttons.None; RequiredGroupMembership = null; - InitializeComponent(); + buttonCtrls = new System.Windows.Forms.Button[] + { + addButton, removeButton, upButton, downButton, editButton, copyButton, + exportButton, importButton, compareButton, + newTabButton, renameTabButton, removeTabButton, moreButton, + }; + OptionalButtons = Buttons.None; + buttonsRepositionsed = false; } /// @@ -96,120 +105,88 @@ namespace TBF.UiControls downButton.Text = Strings.DownBtnText; editButton.Text = Strings.EditBtnText; copyButton.Text = Strings.CopyBtnText; + exportButton.Text = Strings.Export; + importButton.Text = Strings.Import; + compareButton.Text = Strings.Compare; newTabButton.Text = Strings.NewTabBtnText; renameTabButton.Text = Strings.RenameTabBtnText; removeTabButton.Text = Strings.RemoveTabBtnText; moreButton.Text = Strings.MoreBtnText; cancelButton.Hide(); - addButton.Hide(); - removeButton.Hide(); - upButton.Hide(); - downButton.Hide(); - editButton.Hide(); - copyButton.Hide(); - newTabButton.Hide(); - renameTabButton.Hide(); - removeTabButton.Hide(); - moreButton.Hide(); - exportButton.Hide(); - importButton.Hide(); - compareButton.Hide(); - - /// Reposition 'Edit' and 'Copy" buttons in case both 'Up' and 'Down' are hidden - if (((OptionalButtons & Buttons.Up) == 0) && - ((OptionalButtons & Buttons.Down) == 0)) - { - editButton.Top = upButton.Top; - copyButton.Top = downButton.Top; - } - - /// Reposition Tab-related button in case both 'Edit' and 'Copy" are hidden - if (((OptionalButtons & Buttons.Edit) == 0) && - ((OptionalButtons & Buttons.Copy) == 0)) - { - removeTabButton.Top = newTabButton.Top + 15; - newTabButton.Top = editButton.Top + 15; - renameTabButton.Top = copyButton.Top + 15; - } - - if ((OptionalButtons & Buttons.Add) == 0 && - (OptionalButtons & Buttons.Remove) == 0 && - (OptionalButtons & Buttons.Up) == 0 && - (OptionalButtons & Buttons.Down) == 0 && - (OptionalButtons & Buttons.Edit) == 0 && - (OptionalButtons & Buttons.Copy) == 0 && - (OptionalButtons & Buttons.NewTab) == 0 && - (OptionalButtons & Buttons.RenameTab) == 0 && - (OptionalButtons & Buttons.RemoveTab) == 0) - { - moreButton.Top = MoreButtonTop; - } -#if DEBUG - //unlockBtn_Click(sender, e); -#endif + ShowOrHideButtons((Buttons)0x7FFFFFFF, false); } + + void RepositionButtons(Buttons enabledButtons) + { + if (!buttonsRepositionsed) + { + buttonsRepositionsed = true; /// Reposition buttons once + + int spacing = unlockButton.Height + 3; + const int ExtraSpacing = 15; + int nextTop = cancelButton.Top + spacing + ExtraSpacing; + + for (int i = 0; i < buttonCtrls.Length; i++) + { + Buttons btn = (Buttons)(1 << i); + if ((OptionalButtons & btn) != 0) + { + buttonCtrls[i].Top = nextTop; + nextTop += spacing + ((btn == Buttons.Down || btn == Buttons.Compare || btn == Buttons.RemoveTab) ? ExtraSpacing : 0); + } + } + } + } + + void ShowOrHideButtons(Buttons selectedButtons, bool value) + { + for (int i = 0; i < buttonCtrls.Length; i++) + { + if ((selectedButtons & (Buttons)(1 << i)) != 0) buttonCtrls[i].Visible = value; + } + } + + public void EnableOrDisableButtons(Buttons selectedButtons, bool value) + { + for (int i = 0; i < buttonCtrls.Length; i++) + { + if ((selectedButtons & (Buttons)(1 << i)) != 0) buttonCtrls[i].Enabled = value; + } + } + + /// /// Update the visibility of buttons and OK button text when the dialog is unlocked /// public void UnlockButtons() { + RepositionButtons(OptionalButtons); + unlockButton.Enabled = false; okButton.Text = Strings.OkBtnText; - cancelButton.Show(); - if ((OptionalButtons & Buttons.Add) != 0) addButton.Show(); - if ((OptionalButtons & Buttons.Remove) != 0) removeButton.Show(); - if ((OptionalButtons & Buttons.Up) != 0) upButton.Show(); - if ((OptionalButtons & Buttons.Down) != 0) downButton.Show(); - if ((OptionalButtons & Buttons.Edit) != 0) editButton.Show(); - if ((OptionalButtons & Buttons.Copy) != 0) copyButton.Show(); - if ((OptionalButtons & Buttons.NewTab) != 0) newTabButton.Show(); - if ((OptionalButtons & Buttons.RenameTab) != 0) renameTabButton.Show(); - if ((OptionalButtons & Buttons.RemoveTab) != 0) removeTabButton.Show(); - if ((OptionalButtons & Buttons.More) != 0) moreButton.Show(); - if ((OptionalButtons & Buttons.Export) != 0) exportButton.Show(); - if ((OptionalButtons & Buttons.Import) != 0) importButton.Show(); - if ((OptionalButtons & Buttons.Compare) != 0) compareButton.Show(); - + cancelButton.Visible = true; + ShowOrHideButtons(OptionalButtons, true); lockState = LockState.Unlocked; } /// /// Enable specified buttons /// - public void EnableButtons(Buttons buttons) + public void EnableButtons(Buttons selectedButtons) { - SetEnabled(buttons, true); + EnableOrDisableButtons(selectedButtons, true); } /// /// Disable specified buttons /// - public void DisableButtons(Buttons buttons) + public void DisableButtons(Buttons selectedButtons) { - SetEnabled(buttons, false); + EnableOrDisableButtons(selectedButtons, false); } - public void SetEnabled(Buttons buttons, bool value) - { - if ((buttons & Buttons.OK) != 0) okButton.Enabled = value; - if ((buttons & Buttons.Cancel) != 0) cancelButton.Enabled = value; - if ((buttons & Buttons.Add) != 0) addButton.Enabled = value; - if ((buttons & Buttons.Remove) != 0) removeButton.Enabled = value; - if ((buttons & Buttons.Up) != 0) upButton.Enabled = value; - if ((buttons & Buttons.Down) != 0) downButton.Enabled = value; - if ((buttons & Buttons.Edit) != 0) editButton.Enabled = value; - if ((buttons & Buttons.Copy) != 0) copyButton.Enabled = value; - if ((buttons & Buttons.NewTab) != 0) newTabButton.Enabled = value; - if ((buttons & Buttons.RenameTab) != 0) renameTabButton.Enabled = value; - if ((buttons & Buttons.RemoveTab) != 0) removeTabButton.Enabled = value; - if ((buttons & Buttons.More) != 0) moreButton.Enabled = value; - if ((buttons & Buttons.Export) != 0) exportButton.Enabled = value; - if ((buttons & Buttons.Import) != 0) importButton.Enabled = value; - if ((buttons & Buttons.Compare) != 0) compareButton.Enabled = value; - } - void RestoreUser() { Users.GlobalData.CurrentUser = originalUser; @@ -305,11 +282,11 @@ namespace TBF.UiControls private void downBtn_Click(object s, EventArgs e) { if (DownClicked != null) DownClicked(s, e); } private void editBtn_Click(object s, EventArgs e) { if (EditClicked != null) EditClicked(s, e); } private void copyBtn_Click(object s, EventArgs e) { if (CopyClicked != null) CopyClicked(s, e); } - private void newTabButton_Click(object s, EventArgs e) { if (NewTabClicked != null) NewTabClicked(s, e); } - private void renameTabButton_Click(object s, EventArgs e) { if (RenameTabClicked != null) RenameTabClicked(s, e); } - private void removeTabButton_Click(object s, EventArgs e) { if (RemoveTabClicked != null) RemoveTabClicked(s, e); } private void exportButton_Click(object s, EventArgs e) { if (ExportClicked != null) ExportClicked(s, e); } private void importButton_Click(object s, EventArgs e) { if (ImportClicked != null) ImportClicked(s, e); } private void compareButton_Click(object s, EventArgs e) { if (CompareClicked != null) CompareClicked(s, e); } + private void newTabButton_Click(object s, EventArgs e) { if (NewTabClicked != null) NewTabClicked(s, e); } + private void renameTabButton_Click(object s, EventArgs e) { if (RenameTabClicked != null) RenameTabClicked(s, e); } + private void removeTabButton_Click(object s, EventArgs e) { if (RemoveTabClicked != null) RemoveTabClicked(s, e); } } }