Filters in ProceduresDlg : ProceduresCtrl with SplitContainer: 1 UI for filters and 2 ListViewEx, BaseWithListViewEx is not used, ver. 2.25.1404

This commit is contained in:
Milan Hanajik 2020-01-23 10:04:25 +01:00
parent 8b1e0af207
commit 51c24f8c4c
10 changed files with 843 additions and 184 deletions

View File

@ -44,6 +44,11 @@ namespace Config.Entities
public virtual string AltProcName { get; set; } /// Alternative procedure name (null or string.Empty = no alt. procedure)
public virtual int AltProcPeriod { get; set; } /// Period of alternative procedures (0 = no alt. procedure)
public virtual float DN { get; set; } /// Not mapped to DB, valid in ProceduresCtrl for procedure filtering only
public virtual float Qn { get; set; } /// - ' ' -
public virtual string MClass { get; set; } /// - ' ' -
public virtual string Producer { get; set; } /// - ' ' -
public virtual IList<ComponentProcedure> MoreParams { get; set; }
public virtual IList<Test> Tests { get; set; }
@ -65,6 +70,11 @@ namespace Config.Entities
Watermeters = string.Empty;
Description = string.Empty;
LongDescription = string.Empty;
DN = 0;
Qn = 0;
MClass = string.Empty;
Producer = string.Empty;
}
public Procedure(string name, int itemNr)
@ -103,6 +113,11 @@ namespace Config.Entities
result.AltProcName = AltProcName;
result.AltProcPeriod = AltProcPeriod;
result.DN = DN;
result.Qn = Qn;
result.MClass = MClass;
result.Producer = Producer;
foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone(result)); }
foreach (var test in Tests) { result.Tests.Add(test.Clone()); }

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// Build Number
// Revision
//
[assembly: AssemblyVersion("2.25.1403.0")]
[assembly: AssemblyFileVersion("2.25.1403.0")]
[assembly: AssemblyVersion("2.25.1404.0")]
[assembly: AssemblyFileVersion("2.25.1404.0")]

View File

@ -321,6 +321,15 @@ namespace TBF.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to any.
/// </summary>
internal static string any {
get {
return ResourceManager.GetString("any", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Approval.
/// </summary>

View File

@ -2134,4 +2134,7 @@
<data name="Empty_the_tank" xml:space="preserve">
<value>Empty the tank</value>
</data>
<data name="any" xml:space="preserve">
<value>any</value>
</data>
</root>

View File

@ -2244,7 +2244,10 @@
<DependentUpon>ProcedureParamsCtrl.cs</DependentUpon>
</Compile>
<Compile Include="UI\Procedures\ProceduresCtrl.cs">
<SubType>Component</SubType>
<SubType>UserControl</SubType>
</Compile>
<Compile Include="UI\Procedures\ProceduresCtrl.Designer.cs">
<DependentUpon>ProceduresCtrl.cs</DependentUpon>
</Compile>
<Compile Include="UI\Procedures\ProceduresDlg.cs">
<SubType>Form</SubType>
@ -3243,6 +3246,9 @@
<EmbeddedResource Include="UI\Procedures\ProcedureParamsCtrl.resx">
<DependentUpon>ProcedureParamsCtrl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\Procedures\ProceduresCtrl.resx">
<DependentUpon>ProceduresCtrl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="UI\Procedures\ProceduresDlg.resx">
<DependentUpon>ProceduresDlg.cs</DependentUpon>
</EmbeddedResource>

View File

@ -0,0 +1,194 @@
namespace TBF.UI.Procedures
{
partial class ProceduresCtrl
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.filtersSplitContainer = new System.Windows.Forms.SplitContainer();
this.producerLabel = new System.Windows.Forms.Label();
this.mclassLabel = new System.Windows.Forms.Label();
this.q3Label = new System.Windows.Forms.Label();
this.dnLabel = new System.Windows.Forms.Label();
this.producerComboBox = new System.Windows.Forms.ComboBox();
this.mclassComboBox = new System.Windows.Forms.ComboBox();
this.q3ComboBox = new System.Windows.Forms.ComboBox();
this.dnComboBox = new System.Windows.Forms.ComboBox();
this.listViewEx = new Results.Forms.ListViewEx();
((System.ComponentModel.ISupportInitialize)(this.filtersSplitContainer)).BeginInit();
this.filtersSplitContainer.Panel1.SuspendLayout();
this.filtersSplitContainer.Panel2.SuspendLayout();
this.filtersSplitContainer.SuspendLayout();
this.SuspendLayout();
//
// filtersSplitContainer
//
this.filtersSplitContainer.Dock = System.Windows.Forms.DockStyle.Fill;
this.filtersSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.filtersSplitContainer.Location = new System.Drawing.Point(0, 0);
this.filtersSplitContainer.Name = "filtersSplitContainer";
this.filtersSplitContainer.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// filtersSplitContainer.Panel1
//
this.filtersSplitContainer.Panel1.Controls.Add(this.producerLabel);
this.filtersSplitContainer.Panel1.Controls.Add(this.mclassLabel);
this.filtersSplitContainer.Panel1.Controls.Add(this.q3Label);
this.filtersSplitContainer.Panel1.Controls.Add(this.dnLabel);
this.filtersSplitContainer.Panel1.Controls.Add(this.producerComboBox);
this.filtersSplitContainer.Panel1.Controls.Add(this.mclassComboBox);
this.filtersSplitContainer.Panel1.Controls.Add(this.q3ComboBox);
this.filtersSplitContainer.Panel1.Controls.Add(this.dnComboBox);
//
// filtersSplitContainer.Panel2
//
this.filtersSplitContainer.Panel2.Controls.Add(this.listViewEx);
this.filtersSplitContainer.Size = new System.Drawing.Size(600, 400);
this.filtersSplitContainer.SplitterDistance = 40;
this.filtersSplitContainer.TabIndex = 2;
//
// producerLabel
//
this.producerLabel.AutoSize = true;
this.producerLabel.Location = new System.Drawing.Point(381, 15);
this.producerLabel.Name = "producerLabel";
this.producerLabel.Size = new System.Drawing.Size(50, 13);
this.producerLabel.TabIndex = 7;
this.producerLabel.Text = "Producer";
//
// mclassLabel
//
this.mclassLabel.AutoSize = true;
this.mclassLabel.Location = new System.Drawing.Point(257, 15);
this.mclassLabel.Name = "mclassLabel";
this.mclassLabel.Size = new System.Drawing.Size(32, 13);
this.mclassLabel.TabIndex = 6;
this.mclassLabel.Text = "Class";
//
// q3Label
//
this.q3Label.AutoSize = true;
this.q3Label.Location = new System.Drawing.Point(125, 15);
this.q3Label.Name = "q3Label";
this.q3Label.Size = new System.Drawing.Size(40, 13);
this.q3Label.TabIndex = 5;
this.q3Label.Text = "Q3/Qn";
//
// dnLabel
//
this.dnLabel.AutoSize = true;
this.dnLabel.Location = new System.Drawing.Point(12, 15);
this.dnLabel.Name = "dnLabel";
this.dnLabel.Size = new System.Drawing.Size(23, 13);
this.dnLabel.TabIndex = 4;
this.dnLabel.Text = "DN";
//
// producerComboBox
//
this.producerComboBox.FormattingEnabled = true;
this.producerComboBox.Location = new System.Drawing.Point(437, 12);
this.producerComboBox.Name = "producerComboBox";
this.producerComboBox.Size = new System.Drawing.Size(133, 21);
this.producerComboBox.TabIndex = 3;
this.producerComboBox.SelectedIndexChanged += new System.EventHandler(this.producerComboBox_SelectedIndexChanged);
this.producerComboBox.TextChanged += new System.EventHandler(this.producerComboBox_TextChanged);
//
// mclassComboBox
//
this.mclassComboBox.FormattingEnabled = true;
this.mclassComboBox.Location = new System.Drawing.Point(295, 12);
this.mclassComboBox.Name = "mclassComboBox";
this.mclassComboBox.Size = new System.Drawing.Size(72, 21);
this.mclassComboBox.TabIndex = 2;
this.mclassComboBox.SelectedIndexChanged += new System.EventHandler(this.mclassComboBox_SelectedIndexChanged);
this.mclassComboBox.TextChanged += new System.EventHandler(this.mclassComboBox_TextChanged);
//
// q3ComboBox
//
this.q3ComboBox.FormattingEnabled = true;
this.q3ComboBox.Location = new System.Drawing.Point(171, 12);
this.q3ComboBox.Name = "q3ComboBox";
this.q3ComboBox.Size = new System.Drawing.Size(72, 21);
this.q3ComboBox.TabIndex = 1;
this.q3ComboBox.SelectedIndexChanged += new System.EventHandler(this.q3ComboBox_SelectedIndexChanged);
this.q3ComboBox.TextChanged += new System.EventHandler(this.q3ComboBox_TextChanged);
//
// dnComboBox
//
this.dnComboBox.FormattingEnabled = true;
this.dnComboBox.Location = new System.Drawing.Point(41, 12);
this.dnComboBox.Name = "dnComboBox";
this.dnComboBox.Size = new System.Drawing.Size(72, 21);
this.dnComboBox.TabIndex = 0;
this.dnComboBox.SelectedIndexChanged += new System.EventHandler(this.dnComboBox_SelectedIndexChanged);
this.dnComboBox.TextChanged += new System.EventHandler(this.dnComboBox_TextChanged);
//
// listViewEx
//
this.listViewEx.AllowColumnReorder = true;
this.listViewEx.Dock = System.Windows.Forms.DockStyle.Fill;
this.listViewEx.DoubleClickActivation = false;
this.listViewEx.FullRowSelect = true;
this.listViewEx.GridLines = true;
this.listViewEx.Location = new System.Drawing.Point(0, 0);
this.listViewEx.Name = "listViewEx";
this.listViewEx.Size = new System.Drawing.Size(600, 356);
this.listViewEx.TabIndex = 0;
this.listViewEx.UseCompatibleStateImageBehavior = false;
this.listViewEx.View = System.Windows.Forms.View.Details;
this.listViewEx.SelectedIndexChanged += new System.EventHandler(this.listViewEx_SelectedIndexChanged);
this.listViewEx.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listViewEx_MouseDoubleClick);
//
// ProceduresCtrl
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.filtersSplitContainer);
this.Name = "ProceduresCtrl";
this.Size = new System.Drawing.Size(600, 400);
this.filtersSplitContainer.Panel1.ResumeLayout(false);
this.filtersSplitContainer.Panel1.PerformLayout();
this.filtersSplitContainer.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.filtersSplitContainer)).EndInit();
this.filtersSplitContainer.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.SplitContainer filtersSplitContainer;
private System.Windows.Forms.Label producerLabel;
private System.Windows.Forms.Label mclassLabel;
private System.Windows.Forms.Label q3Label;
private System.Windows.Forms.Label dnLabel;
private System.Windows.Forms.ComboBox producerComboBox;
private System.Windows.Forms.ComboBox mclassComboBox;
private System.Windows.Forms.ComboBox q3ComboBox;
private System.Windows.Forms.ComboBox dnComboBox;
private Results.Forms.ListViewEx listViewEx;
}
}

View File

@ -1,27 +1,53 @@
///
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
/// Copyright (c) 2020 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using System.Windows.Forms;
using NHibernate;
using log4net;
using Config.Entities;
using Results.Forms;
using TBF.BenchControl;
using TBF.BenchControl.GenericDevices;
using TBF.Resources;
using TBF.UI.Shared;
namespace TBF.UI.Procedures
{
public class ProceduresCtrl : BaseWithListViewEx<Procedure>, ITabWithListViewEx
{
public partial class ProceduresCtrl : UserControl
{
static readonly ILog log = LogManager.GetLogger(typeof(ProceduresCtrl));
/// <summary>
/// List of all active procedures
/// </summary>
public IList<Procedure> AllProcedures;
/// <summary>
/// List of procedures satisfying filter criteria
/// </summary>
public IList<Procedure> Procedures;
/// <summary>
/// List of removed items that have to be removed from the database
/// when completed with OK.
/// </summary>
public IList<Procedure> ToBeRemovedProcedures;
/// <summary>
/// true = editing was unlocked
/// </summary>
public bool Unlocked { get { return unlocked; } } /// read only
bool unlocked;
float selectedDN;
float selectedQ3;
string selectedMClass;
string selectedProducer;
/// <summary>
/// ListViewEx columns
/// </summary>
@ -40,31 +66,51 @@ namespace TBF.UI.Procedures
Control[] editors;
ISession session;
IWaterMeter waterMeterCmpnt;
IErrorFlags errorFlagsCmpnt;
public ProceduresCtrl()
: base()
{
InitializeComponent();
session = null;
}
waterMeterCmpnt = null;
errorFlagsCmpnt = null;
ToBeRemovedProcedures = new List<Procedure>();
dnComboBox.Text = Strings.any;
dnComboBox.Items.Add(Strings.any);
selectedDN = 0;
q3ComboBox.Text = Strings.any;
q3ComboBox.Items.Add(Strings.any);
selectedQ3 = 0;
mclassComboBox.Text = Strings.any;
mclassComboBox.Items.Add(Strings.any);
selectedMClass = null;
producerComboBox.Text = Strings.any;
producerComboBox.Items.Add(Strings.any);
selectedProducer = null;
}
public void Initialize(ProceduresDlg parent, Control parentControl)
{
if (parent == null) return;
/// Create a DB session
session = Config.FluentCommon.CreateSession(Users.Entities.DBKind.Config);
this.parent = parent;
this.parentControl = parentControl;
SubItemClicked += new SubItemEventHandler(listViewEx_SubItemClicked);
SubItemEndEditing += new SubItemEndEditingEventHandler(listViewEx_SubItemEndEditing);
/// ListViewEx columns
TBF.LocalSettings ls = Program.LocalSettings;
Columns.Add(Strings.Nr, (ls.ProceduresColumnCount > 0) ? ls.ProceduresColumnWidths[0] : ( 30 * parent.Dpi / Constants.Dpi100pct));
Columns.Add(Strings.Name, (ls.ProceduresColumnCount > 1) ? ls.ProceduresColumnWidths[1] : (100 * parent.Dpi / Constants.Dpi100pct));
Columns.Add(Strings.DescriptionColHdr, (ls.ProceduresColumnCount > 2) ? ls.ProceduresColumnWidths[2] : (300 * parent.Dpi / Constants.Dpi100pct));
Columns.Add(Strings.More, (ls.ProceduresColumnCount > 3) ? ls.ProceduresColumnWidths[3] : (300 * parent.Dpi / Constants.Dpi100pct));
listViewEx.Columns.Add(Strings.Nr, (ls.ProceduresColumnCount > 0) ? ls.ProceduresColumnWidths[0] : (30 * parent.Dpi / Constants.Dpi100pct));
listViewEx.Columns.Add(Strings.Name, (ls.ProceduresColumnCount > 1) ? ls.ProceduresColumnWidths[1] : (100 * parent.Dpi / Constants.Dpi100pct));
listViewEx.Columns.Add(Strings.DescriptionColHdr, (ls.ProceduresColumnCount > 2) ? ls.ProceduresColumnWidths[2] : (300 * parent.Dpi / Constants.Dpi100pct));
listViewEx.Columns.Add(Strings.More, (ls.ProceduresColumnCount > 3) ? ls.ProceduresColumnWidths[3] : (300 * parent.Dpi / Constants.Dpi100pct));
editors = new Control[columnsCount];
///
@ -85,82 +131,141 @@ namespace TBF.UI.Procedures
ReloadAndRedrawAll();
}
void ReloadAndRedrawAll()
{
public void Unlock()
{
unlocked = true;
if (listViewEx.SelectedItems.Count == 1)
{
int ix = listViewEx.SelectedIndices[0];
Focus();
listViewEx.Items[ix].Selected = true;
listViewEx.Items[ix].EnsureVisible();
}
}
bool ReloadProcedures()
{
bool isFirstTime = AllProcedures == null;
try
{
/// Find ErrorFlags component
foreach (var cmpnt in TBF.BenchControl.TbfComponents.LoadComponentsFromDB(session))
if (isFirstTime)
{
if (cmpnt is IErrorFlags)
/// Find WaterMeter and ErrorFlags components, this is done just once when AllProcedures == null
foreach (var cmpnt in TBF.BenchControl.TbfComponents.LoadComponentsFromDB(session))
{
errorFlagsCmpnt = cmpnt as IErrorFlags;
break;
if (waterMeterCmpnt == null && cmpnt is IWaterMeter) waterMeterCmpnt = cmpnt as IWaterMeter;
if (errorFlagsCmpnt == null && cmpnt is IErrorFlags) errorFlagsCmpnt = cmpnt as IErrorFlags;
}
}
/// Load the procedures
MyItems = session.QueryOver<Procedure>()
.Where(x => (x.ProcedureState == ProcedureState.Active))
.OrderBy(x => x.ItemNr).Asc
.List();
/// (Re)Load all procedures unconditionally
AllProcedures = session.QueryOver<Procedure>()
.Where(x => (x.ProcedureState == ProcedureState.Active))
.OrderBy(x => x.ItemNr).Asc
.List();
if (waterMeterCmpnt != null)
{
foreach (var proc in AllProcedures)
{
IParamsProvider waterMeterParams = waterMeterCmpnt.Cfg.GetUIProcParamsProvider(proc);
TBF.BenchControl.WaterMeters.WaterMeter.ProcParams wmParams = waterMeterParams as TBF.BenchControl.WaterMeters.WaterMeter.ProcParams;
if (wmParams != null)
{
proc.DN = wmParams.DN;
proc.Qn = wmParams.Qn;
proc.MClass = wmParams.MetrologicalClass;
proc.Producer = wmParams.Producer;
if (isFirstTime)
{
if (!dnComboBox.Items.Contains(wmParams.DN.ToString())) dnComboBox.Items.Add(wmParams.DN.ToString());
if (!q3ComboBox.Items.Contains(wmParams.Qn.ToString())) q3ComboBox.Items.Add(wmParams.Qn.ToString());
if (!mclassComboBox.Items.Contains(wmParams.MetrologicalClass)) mclassComboBox.Items.Add(wmParams.MetrologicalClass);
if (!producerComboBox.Items.Contains(wmParams.Producer)) producerComboBox.Items.Add(wmParams.Producer);
}
}
}
}
return true; /// Reloading successful
}
catch (Exception exc)
{
log.ErrorFormat("Loading Procedures from DB failed: {0}", exc.Message);
MyItems = new List<Procedure>();
AllProcedures = new List<Procedure>();
return false;
}
}
void ReloadAndRedrawAll()
{
if (ReloadProcedures())
{
RedrawAll();
}
}
void RedrawAll()
{
Procedures = new List<Procedure>();
/// Select procedures satisfying filter criteria: AllProcedures -> Procedures
if (AllProcedures != null)
{
foreach (var proc in AllProcedures)
{
if ((selectedDN == 0 || selectedDN == proc.DN) &&
(selectedQ3 == 0 || selectedQ3 == proc.Qn) &&
((selectedMClass == null) || (selectedMClass == proc.MClass)) &&
((selectedProducer == null) || (selectedProducer == proc.Producer)))
{
Procedures.Add(proc);
}
}
}
base.RedrawAll();
}
void listViewEx_SubItemClicked(object sender, SubItemEventArgs e)
{
}
void listViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
{
}
public override void DrawOne(object myItem)
{
Procedure entity = (Procedure)myItem;
listViewEx.Items.Clear();
foreach (var procedure in Procedures) DrawOne(procedure);
}
void DrawOne(Procedure procedure)
{
StringBuilder tests = new StringBuilder();
foreach (var test in entity.Tests)
foreach (var test in procedure.Tests)
{
tests.Append(test.Name);
tests.Append(", ");
}
ListViewItem lvi = new ListViewItem((entity.ItemNr + 1).ToString());
lvi.SubItems.Add(entity.Name);
lvi.SubItems.Add(entity.Description);
ListViewItem lvi = new ListViewItem((procedure.ItemNr + 1).ToString());
lvi.SubItems.Add(procedure.Name);
lvi.SubItems.Add(procedure.Description);
lvi.SubItems.Add(tests.ToString());
lvi.Tag = entity;
lvi.Tag = procedure;
Items.Add(lvi);
}
listViewEx.Items.Add(lvi);
}
/// <summary>
/// Update the entities and save them to the database
/// </summary>
public new void OkBtnClicked()
public void OkBtnClicked()
{
base.OkBtnClicked();
using (ITransaction transaction = session.BeginTransaction())
{
try
{
foreach (var entity in ToBeRemovedItems) session.Delete(entity);
ToBeRemovedItems.Clear();
foreach (var entity in ToBeRemovedProcedures) session.Delete(entity);
ToBeRemovedProcedures.Clear();
int itemNr = 0;
foreach (var entity in MyItems)
foreach (var proc in AllProcedures)
{
(entity as Procedure).ItemNr = itemNr++;
session.SaveOrUpdate(entity);
(proc as Procedure).ItemNr = itemNr++;
session.SaveOrUpdate(proc);
}
transaction.Commit();
@ -179,93 +284,91 @@ namespace TBF.UI.Procedures
Program.MainWnd.ReloadProcedureComboBoxItems();
}
void SaveUISettings()
public void CancelBtnClicked()
{
LocalSettings ls = Program.LocalSettings;
}
/// Compare list view column widths with the saved ones
bool anyColumnDiffers = false;
if (Columns.Count != ls.ProceduresColumnCount)
/// <summary>
/// 'Add' button was clicked.
/// </summary>
public void AddOne()
{
/// Find an unused procedure name
string newName;
for (int nameId = 1; true; nameId++)
{
anyColumnDiffers = true;
}
else
{
for (int i = 0; i < Columns.Count; i++)
{
if (Columns[i].Width != ls.ProceduresColumnWidths[i]) { anyColumnDiffers = true; break; }
}
newName = Strings.New_procedure_name + nameId.ToString();
bool notUsed = true;
foreach (var t in Procedures) if (t.Name.ToLower().Equals(newName.ToLower())) notUsed = false;
if (notUsed) break;
}
if (anyColumnDiffers)
{
/// Update column widths
ls.ProceduresColumnWidths = new int[Columns.Count];
for (int i = 0; i < Columns.Count; i++)
{
ls.ProceduresColumnWidths[i] = Columns[i].Width;
}
Procedure newProcedure = new Procedure(newName, Procedures.Count);
newProcedure.ItemNr = AllProcedures.Count;
newProcedure.ProcedureState = ProcedureState.Active;
newProcedure.Revision = 1;
newProcedure.PredecessorId = 0;
newProcedure.ObtainedByCopy = false;
newProcedure.CreationUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.CreationTime = DateTime.Now;
ls.Save();
if (new ProcedureDlg(newProcedure, GetUsedNames(false), true).ShowDialog() == DialogResult.OK)
{
/// TODO: Make name uniqueness test
parent.Unlock();
using (var transaction = session.BeginTransaction())
{
try
{
newProcedure.LastChgUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.LastChgTime = DateTime.Now;
DoAddOne(newProcedure);
session.SaveOrUpdate(newProcedure);
transaction.Commit();
MessageBox.Show(string.Format(Strings.Procedure_0_added, newProcedure.Name),
Strings.Confirmation,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
catch (Exception exc)
{
transaction.Rollback();
log.ErrorFormat("Exception when saving Procedure '{0}' : {1}", newProcedure.Name, exc.Message);
}
}
}
}
public void AddOne()
{
/// Find an unused procedure name
string newName;
for (int nameId = 1; true; nameId++)
{
newName = Strings.New_procedure_name + nameId.ToString();
bool notUsed = true;
foreach (var t in MyItems) if (t.Name.ToLower().Equals(newName.ToLower())) notUsed = false;
if (notUsed) break;
}
/// <summary>
/// Adds an item to the ListView and at the end of the list.
/// Focuses onto the added item.
/// </summary>
public void DoAddOne(Procedure procedure)
{
Procedures.Add(procedure);
AllProcedures.Add(procedure);
DrawOne(procedure);
Procedure newProcedure = new Procedure(newName, MyItems.Count);
newProcedure.ProcedureState = ProcedureState.Active;
newProcedure.Revision = 1;
newProcedure.PredecessorId = 0;
newProcedure.ObtainedByCopy = false;
newProcedure.CreationUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.CreationTime = DateTime.Now;
Focus();
listViewEx.SelectedItems.Clear();
listViewEx.Items[listViewEx.Items.Count - 1].Selected = true;
listViewEx.Items[listViewEx.Items.Count - 1].EnsureVisible();
}
if (new ProcedureDlg(newProcedure, GetUsedNames(false), true).ShowDialog() == DialogResult.OK)
{
/// TODO: Make name uniqueness test
parent.Unlock();
using(var transaction = session.BeginTransaction())
{
try
{
newProcedure.LastChgUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.LastChgTime = DateTime.Now;
base.AddOne(newProcedure);
session.SaveOrUpdate(newProcedure);
transaction.Commit();
MessageBox.Show(string.Format(Strings.Procedure_0_added, newProcedure.Name),
Strings.Confirmation,
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
catch (Exception exc)
{
transaction.Rollback();
log.ErrorFormat("Exception when saving Procedure '{0}' : {1}", newProcedure.Name, exc.Message);
}
}
}
}
public new void RemoveSelected()
{
/// <summary>
/// 'Remove' button was clicked.
/// </summary>
public void RemoveSelected()
{
if (MessageBox.Show(Strings.Do_you_want_to_delete_the_procedure,
Strings.Question, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
bool lastOneRemoved = base.RemoveSelected();
bool lastOneRemoved = DoRemoveSelected();
if (lastOneRemoved && parent != null)
{
@ -277,11 +380,11 @@ namespace TBF.UI.Procedures
{
try
{
foreach (var entity in ToBeRemovedItems) session.Delete(entity);
ToBeRemovedItems.Clear();
foreach (var entity in ToBeRemovedProcedures) session.Delete(entity);
ToBeRemovedProcedures.Clear();
int itemNr = 0;
foreach (var entity in MyItems)
foreach (var entity in Procedures)
{
(entity as Procedure).ItemNr = itemNr++;
session.SaveOrUpdate(entity);
@ -300,11 +403,143 @@ namespace TBF.UI.Procedures
}
}
/// <summary>
/// Removes an item from the ListView and from the list itself.
/// Adds it on ToBeRemovedItems list.
/// Focuses on the next item.
/// </summary>
/// <returns>true when the last item was removed and 'Remove' button should be disabled</returns>
public bool DoRemoveSelected()
{
if (listViewEx.SelectedItems.Count != 1) return false;
int removeItemNr = listViewEx.SelectedIndices[0];
if (removeItemNr < 0) return false;
Procedure selectedItem = (Procedure)listViewEx.SelectedItems[0].Tag;
/// Add to ToBeRemovedProcedures if necessary
if (selectedItem.Id != 0)
{
/// Procedure to be removed was loaded from the DB (was not recenlu created)
ToBeRemovedProcedures.Add(selectedItem);
}
/// Remove from AllProcedures
AllProcedures.Remove(selectedItem);
/// Remove
Procedures.RemoveAt(removeItemNr);
for (int i = removeItemNr; i < Procedures.Count; i++)
{
Procedures[i].ItemNr--;
}
RedrawAll();
if (removeItemNr < listViewEx.Items.Count)
{
Focus();
listViewEx.Items[removeItemNr].Selected = true;
listViewEx.Items[removeItemNr].EnsureVisible();
return false;
}
else
{
return true;
}
}
public void MoveUpSelected()
{
if (listViewEx.SelectedItems.Count != 1) return;
if (Procedures.Count != AllProcedures.Count) return;
int ix = listViewEx.SelectedIndices[0];
if (ix <= 0 || ix >= Procedures.Count) return;
Procedure proc1 = (Procedure)(listViewEx.Items[ix - 1].Tag);
Procedure proc2 = (Procedure)(listViewEx.Items[ix].Tag);
proc1.ItemNr++;
proc2.ItemNr--;
Procedures.RemoveAt(ix);
Procedures.Insert(ix - 1, proc2);
AllProcedures.RemoveAt(ix);
AllProcedures.Insert(ix - 1, proc2);
RedrawAll();
listViewEx.Focus();
listViewEx.Items[ix - 1].Selected = true;
listViewEx.Items[ix - 1].EnsureVisible();
}
public void MoveDownSelected()
{
if (listViewEx.SelectedItems.Count != 1) return;
if (Procedures.Count != AllProcedures.Count) return;
int ix = listViewEx.SelectedIndices[0];
if (ix < 0 || ix >= Procedures.Count - 1) return;
Procedure proc1 = (Procedure)(listViewEx.Items[ix].Tag);
Procedure proc2 = (Procedure)(listViewEx.Items[ix + 1].Tag);
proc1.ItemNr++;
proc2.ItemNr--;
Procedures.RemoveAt(ix + 1);
Procedures.Insert(ix, proc2);
AllProcedures.RemoveAt(ix + 1);
AllProcedures.Insert(ix, proc2);
RedrawAll();
listViewEx.Focus();
listViewEx.Items[ix + 1].Selected = true;
listViewEx.Items[ix + 1].EnsureVisible();
}
void SaveUISettings()
{
LocalSettings ls = Program.LocalSettings;
/// Compare list view column widths with the saved ones
bool anyColumnDiffers = false;
if (listViewEx.Columns.Count != ls.ProceduresColumnCount)
{
anyColumnDiffers = true;
}
else
{
for (int i = 0; i < listViewEx.Columns.Count; i++)
{
if (listViewEx.Columns[i].Width != ls.ProceduresColumnWidths[i]) { anyColumnDiffers = true; break; }
}
}
if (anyColumnDiffers)
{
/// Update column widths
ls.ProceduresColumnWidths = new int[listViewEx.Columns.Count];
for (int i = 0; i < listViewEx.Columns.Count; i++)
{
ls.ProceduresColumnWidths[i] = listViewEx.Columns[i].Width;
}
ls.Save();
}
}
private void listViewEx_MouseDoubleClick(object sender, MouseEventArgs e)
{
editButton_Click(sender, e);
}
///
public void editButton_Click(object sender, EventArgs e)
{
if (SelectedItems.Count != 1) return;
if (listViewEx.SelectedItems.Count != 1) return;
Procedure originalProcedure = SelectedItems[0].Tag as Procedure;
Procedure originalProcedure = listViewEx.SelectedItems[0].Tag as Procedure;
Procedure modifiedProcedure = originalProcedure.Clone();
modifiedProcedure.Revision = originalProcedure.Revision + 1;
@ -329,7 +564,7 @@ namespace TBF.UI.Procedures
session.SaveOrUpdate(modifiedProcedure);
transaction.Commit();
SelectedItems[0].Tag = modifiedProcedure;
listViewEx.SelectedItems[0].Tag = modifiedProcedure;
MessageBox.Show(string.Format(Strings.Procedure_0_modified, string.Format(" {0} '{1}' ", modifiedProcedure.ItemNr + 1, modifiedProcedure.Name)),
Strings.Confirmation,
MessageBoxButtons.OK,
@ -349,15 +584,15 @@ namespace TBF.UI.Procedures
public void copyButton_Click(object sender, EventArgs e)
{
if (SelectedItems.Count != 1) return;
if (listViewEx.SelectedItems.Count != 1) return;
Procedure selectedProcedure = (Procedure)SelectedItems[0].Tag;
Procedure selectedProcedure = (Procedure)listViewEx.SelectedItems[0].Tag;
/// Make a copy of the selected procedure
Procedure newProcedure = selectedProcedure.Clone();
newProcedure.Name = selectedProcedure.Name + Strings.New_name_copy;
newProcedure.ItemNr = MyItems.Count;
newProcedure.ItemNr = AllProcedures.Count;
newProcedure.ProcedureState = ProcedureState.Active;
newProcedure.Revision = 1;
newProcedure.PredecessorId = selectedProcedure.Id;
@ -376,7 +611,7 @@ namespace TBF.UI.Procedures
newProcedure.LastChgUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.LastChgTime = DateTime.Now;
base.AddOne(newProcedure);
DoAddOne(newProcedure);
session.SaveOrUpdate(newProcedure);
transaction.Commit();
@ -390,9 +625,9 @@ namespace TBF.UI.Procedures
public void exportButton_Click(object sender, EventArgs e)
{
if (SelectedItems.Count != 1) return;
if (listViewEx.SelectedItems.Count != 1) return;
Procedure selectedProcedure = (Procedure)SelectedItems[0].Tag;
Procedure selectedProcedure = (Procedure)listViewEx.SelectedItems[0].Tag;
SaveFileDialog dlg = new SaveFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
@ -411,7 +646,7 @@ namespace TBF.UI.Procedures
Procedure newProcedure = Procedure.Import(new StreamReader(dlg.FileName, System.Text.Encoding.UTF8));
newProcedure.Name = newProcedure.Name + " imported";
newProcedure.ItemNr = MyItems.Count;
newProcedure.ItemNr = Procedures.Count;
newProcedure.ProcedureState = ProcedureState.Active;
newProcedure.Revision = 1;
newProcedure.PredecessorId = 0;
@ -429,7 +664,7 @@ namespace TBF.UI.Procedures
newProcedure.LastChgUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.LastChgTime = DateTime.Now;
base.AddOne(newProcedure);
DoAddOne(newProcedure);
session.SaveOrUpdate(newProcedure);
transaction.Commit();
@ -443,9 +678,9 @@ namespace TBF.UI.Procedures
public void compareButton_Click(object sender, EventArgs e)
{
if (SelectedItems.Count != 1) return;
if (listViewEx.SelectedItems.Count != 1) return;
Procedure selectedProcedure = (Procedure)SelectedItems[0].Tag;
Procedure selectedProcedure = (Procedure)listViewEx.SelectedItems[0].Tag;
OpenFileDialog dlg = new OpenFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
@ -486,13 +721,13 @@ namespace TBF.UI.Procedures
{
newName = Strings.New_procedure_name + nameId.ToString();
bool notUsed = true;
foreach (var t in MyItems) if (t.Name.ToLower().Equals(newName.ToLower())) notUsed = false;
foreach (var t in Procedures) if (t.Name.ToLower().Equals(newName.ToLower())) notUsed = false;
if (notUsed) break;
}
ProfileType pt = dlg.SelectedProfile.ProfileType;
Procedure newProcedure = new Procedure(newName, MyItems.Count);
Procedure newProcedure = new Procedure(newName, Procedures.Count);
Medium medium = (pt == ProfileType.QnClassHotWater) ? Medium.HotWater : Medium.ColdWater;
IList<IParamsProvider> errorFlagsParamsOfCreatedTests = new List<IParamsProvider>();
IList<IParamsProvider> waterMeterParamsOfNewProcedure = new List<IParamsProvider>();
@ -649,7 +884,7 @@ namespace TBF.UI.Procedures
newProcedure.LastChgUser = Users.GlobalData.CurrentUser.UserName;
newProcedure.LastChgTime = DateTime.Now;
base.AddOne(newProcedure);
DoAddOne(newProcedure);
session.SaveOrUpdate(newProcedure);
foreach (var efp in errorFlagsParamsOfCreatedTests)
@ -673,13 +908,78 @@ namespace TBF.UI.Procedures
}
}
public string GetWarningsBeforeSaving(ref Dictionary<string, string> renmInfo)
{
return string.Empty;
}
public void UpdateRelatedItems(Dictionary<string, string> renameInfo)
public IList<string> GetUsedNames(bool caseSensitive = true)
{
IList<string> usedNames = new List<string>();
if (Procedures != null)
{
if (caseSensitive)
{
foreach (var procedure in Procedures)
{
usedNames.Add(procedure.Name);
}
}
else
{
foreach (var procedure in Procedures)
{
usedNames.Add(procedure.Name.ToLower());
}
}
}
return usedNames;
}
private void dnComboBox_SelectedIndexChanged(object sender, EventArgs e) { UpdateSelectedDN(); }
private void dnComboBox_TextChanged(object sender, EventArgs e) { UpdateSelectedDN(); }
///
void UpdateSelectedDN()
{
uint ival;
selectedDN = uint.TryParse(dnComboBox.Text, out ival) ? ival : 0;
RedrawAll();
listViewEx_SelectedIndexChanged(null, null);
}
private void q3ComboBox_SelectedIndexChanged(object sender, EventArgs e) { UpdateSelectedQn(); }
private void q3ComboBox_TextChanged(object sender, EventArgs e) { UpdateSelectedQn(); }
///
void UpdateSelectedQn()
{
float fval;
selectedQ3 = Utils.TryParseUFloat(q3ComboBox.Text, out fval) ? fval : 0;
RedrawAll();
listViewEx_SelectedIndexChanged(null, null);
}
private void mclassComboBox_SelectedIndexChanged(object sender, EventArgs e) { UpdateSelectedMClass(); }
private void mclassComboBox_TextChanged(object sender, EventArgs e) { UpdateSelectedMClass(); }
///
void UpdateSelectedMClass()
{
selectedMClass = (mclassComboBox.Text != Strings.any) ? mclassComboBox.Text : null;
RedrawAll();
listViewEx_SelectedIndexChanged(null, null);
}
private void producerComboBox_SelectedIndexChanged(object sender, EventArgs e) { UpdateSelectedProducer(); }
private void producerComboBox_TextChanged(object sender, EventArgs e) { UpdateSelectedProducer(); }
///
void UpdateSelectedProducer()
{
selectedProducer = (producerComboBox.Text != Strings.any) ? producerComboBox.Text : null;
RedrawAll();
listViewEx_SelectedIndexChanged(null, null);
}
private void listViewEx_SelectedIndexChanged(object sender, EventArgs e)
{
bool isFilterAny = (selectedDN == 0) && (selectedQ3 == 0) && (selectedMClass == null) && (selectedProducer == null);
if (parent != null) parent.SelectedIndexChanged(listViewEx, isFilterAny);
}
}
}

View File

@ -0,0 +1,120 @@
<?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>
</root>

View File

@ -54,23 +54,17 @@ namespace TBF.UI.Procedures
// splitContainer.Panel2
//
this.splitContainer.Panel2.Controls.Add(this.sharedButtons);
this.splitContainer.Size = new System.Drawing.Size(517, 402);
this.splitContainer.SplitterDistance = 412;
this.splitContainer.Size = new System.Drawing.Size(711, 402);
this.splitContainer.SplitterDistance = 606;
this.splitContainer.TabIndex = 0;
//
// proceduresCtrl
//
this.proceduresCtrl.Dock = System.Windows.Forms.DockStyle.Fill;
this.proceduresCtrl.DoubleClickActivation = false;
this.proceduresCtrl.FullRowSelect = true;
this.proceduresCtrl.GridLines = true;
this.proceduresCtrl.Location = new System.Drawing.Point(0, 0);
this.proceduresCtrl.Name = "proceduresCtrl";
this.proceduresCtrl.Size = new System.Drawing.Size(412, 402);
this.proceduresCtrl.TabIndex = 0;
this.proceduresCtrl.UseCompatibleStateImageBehavior = false;
this.proceduresCtrl.View = System.Windows.Forms.View.Details;
this.proceduresCtrl.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.proceduresCtrl_MouseDoubleClick);
//
// sharedButtons
//
@ -83,7 +77,7 @@ namespace TBF.UI.Procedures
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(517, 402);
this.ClientSize = new System.Drawing.Size(711, 402);
this.Controls.Add(this.splitContainer);
this.Name = "ProceduresDlg";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;

View File

@ -1,13 +1,11 @@
///
/// Copyright (c) 2013-2019 Sensus Slovensko a.s.
/// Copyright (c) 2013-2020 Sensus Slovensko a.s.
///
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using log4net;
using TBF.Resources;
using TBF.UI.Shared;
using Config.Entities;
namespace TBF.UI.Procedures
{
@ -179,16 +177,17 @@ namespace TBF.UI.Procedures
proceduresCtrl.MoveDownSelected();
}
private void proceduresCtrl_MouseDoubleClick(object sender, MouseEventArgs e)
{
proceduresCtrl.editButton_Click(sender, e);
}
private void custom1Button_Click(object sender, EventArgs e)
{
proceduresCtrl.CreateFromProfile();
}
/// <summary>
/// Common part for three xxxListViewEx_SelectedIndexChanged event handlers
/// </summary>
/// <param name="listViewEx"></param>
void SelectedIndexChanged(object sender, EventArgs e)
public void SelectedIndexChanged(ListView sender, bool isFilterAny)
{
Results.Forms.ListViewEx listViewEx = sender as Results.Forms.ListViewEx;
if (listViewEx.SelectedItems.Count != 1)
@ -205,27 +204,46 @@ namespace TBF.UI.Procedures
else if (listViewEx.SelectedIndices[0] == 0)
{
/// The first of many items selected
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Down);
sharedButtons.DisableButtons(SharedButtons.Buttons.Up);
if (isFilterAny)
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Down);
sharedButtons.DisableButtons(SharedButtons.Buttons.Up);
}
else
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove);
sharedButtons.DisableButtons(SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
}
}
else if (listViewEx.SelectedIndices[0] == (listViewEx.Items.Count - 1))
{
/// The last of many items selected
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up);
sharedButtons.DisableButtons(SharedButtons.Buttons.Down);
if (isFilterAny)
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up);
sharedButtons.DisableButtons(SharedButtons.Buttons.Down);
}
else
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove);
sharedButtons.DisableButtons(SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
}
}
else
{
/// One of middle items selected
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
if (isFilterAny)
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove | SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
}
else
{
sharedButtons.EnableButtons(SharedButtons.Buttons.Remove);
sharedButtons.DisableButtons(SharedButtons.Buttons.Up | SharedButtons.Buttons.Down);
}
}
}
private void custom1Button_Click(object sender, EventArgs e)
{
proceduresCtrl.CreateFromProfile();
}
public void UpdateButtonStates(SharedButtons.SelectedItemPos selectedItemPos)
{
if (selectedItemPos == SharedButtons.SelectedItemPos.None)