/// /// Copyright (c) 2015-2023 Sensus Slovensko a.s. /// using System; using System.Collections; using System.Collections.Generic; using System.Drawing.Printing; using System.IO; using System.Linq; using System.Windows.Forms; using log4net; using Common; using Config.Entities; using FluentNHibernate.Conventions; using log4net.Repository.Hierarchy; using NHibernate; using TBF.Resources; using TBF.Rig.Generic; using TBF.Rig.Configs; namespace TBF.Rig.Output.Printers.GroupPrinting.Single { public partial class PrinterCfgCtrl : ConfigCtrlUtils, IComponentCfgCtrl { static readonly ILog log = LogManager.GetLogger(typeof(PrinterCfgCtrl)); public bool ShowMore { get { return false; } } IList cmpntEntities; private ISession session; PrinterCfg config; public IComponentCfg Config { get { return config as IComponentCfg; } set { config = value as PrinterCfg; Redraw(); } } List itemsToPrint; public PrinterCfgCtrl() { InitializeComponent(); Localize(); } private void PrinterCfgCtrl_Load(object sender, EventArgs e) { printerComboBox.Items.Add(Strings.default_printer); foreach (var p in PrinterSettings.InstalledPrinters) printerComboBox.Items.Add(p); EnableEdit(false); InintComponents(); Redraw(); } void Localize() { } public void Closing() { // if (printerComboBox.Enabled && !printerComboBox.Text.IsEmpty()) // { // GroupPrinterUtils.UpdateParametersInEntitys(session, cmpntEntities, printerComboBox.Text); // } } void InintComponents() { cmpntEntities = cmpntEntities == null ? new List() : cmpntEntities; itemsToPrint = config.ItemsToPrint?.ToList(); session = GroupPrinterUtils.GetCorrespondedEntities(in cmpntEntities, in itemsToPrint); RedrawAll(); } void Redraw() { if (config == null) return; /// Control was not loaded, settings were not changed classNameLabel.Text = config.Factory.ClassName; nameTextBox.Text = config.Name; printerComboBox.Text = string.IsNullOrEmpty(config.PrinterName) ? Strings.default_printer : config.PrinterName; } public void Unlock() { EnableEdit(true); } private void EnableEdit(bool bEnable) { nameTextBox.Enabled = bEnable; printerComboBox.Enabled = bEnable; selectPrinterButton.Enabled = bEnable; btListAdd.Enabled = bEnable; btListRemove.Enabled = bEnable; btMoveUp.Enabled = bEnable; btMoveDown.Enabled = bEnable; listViewEx.Enabled = bEnable; } public CfgUpdateFlags VerifyCfg(ref string message) { CfgUpdateFlags flags = CfgUpdateFlags.None; return flags; } public CfgUpdateFlags UpdateCfg() { CfgUpdateFlags flags = CfgUpdateFlags.None; if (config == null) return CfgUpdateFlags.Error; /// Control was not loaded, settings were not changed if (config.Name != nameTextBox.Text) { config.Name = nameTextBox.Text; flags |= (CfgUpdateFlags.RestartRqrd | CfgUpdateFlags.AnyChange); } string newPrinter = (printerComboBox.Text == Strings.default_printer) ? string.Empty : printerComboBox.Text; if (config.PrinterName != newPrinter) { config.PrinterName = newPrinter; flags |= (CfgUpdateFlags.RestartRqrd | CfgUpdateFlags.AnyChange); } if ((flags & CfgUpdateFlags.InvokeCfgChange) != 0) { Printer.OnCfgChange(this, new CfgChangeArgs(CfgChangeCmd.CfgChange, config)); } List itemsComponent = new List(); foreach (Component entity in cmpntEntities) { itemsComponent.Add(PrinterDef.fromComponent(entity).ToString()); } config.ItemsToPrint = itemsComponent.ToArray(); return flags; } #region Configuration Change Handling public static void OnCmdResponse(object sender, CmdResponseArgs args) { if (CmdResponseHandler == null) return; try { CmdResponseHandler(sender, args); } catch (Exception e) { log.Error("CmdResponseHandler(...) failed", e); } } public static event EventHandler CmdResponseHandler; public void StartResponseHandler() { } public void StopResponseHandler() { } #endregion Configuration Change Handling private void selectPrinterButton_Click(object sender, EventArgs e) { PrintDialog dlg = new PrintDialog(); if (dlg.ShowDialog() == DialogResult.OK) { printerComboBox.Text = dlg.PrinterSettings.PrinterName; } } private void btListAdd_Click(object sender, EventArgs e) { PrinterTestBenchComponentSelectorDlg dlg = new PrinterTestBenchComponentSelectorDlg(); if (dlg.ShowDialog() == DialogResult.OK) { if (cmpntEntities == null) { cmpntEntities = new List(); } else { if (cmpntEntities.Any(com => com.ItemNr == dlg.SelectedComponent.ItemNr)) { MessageBox.Show("Item is in list included already!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } } cmpntEntities.Add(dlg.SelectedComponent); RedrawAll(); } } void RedrawAll() { listViewEx.Items.Clear(); foreach (var cmpnt in cmpntEntities) DrawOne(cmpnt); } void DrawOne(Component cmpnt) { ListViewItem lvi = new ListViewItem(cmpnt.ItemNr.ToString()); lvi.Tag = cmpnt; lvi.SubItems.Add(cmpnt.Name); listViewEx.Items.Add(lvi); } //////////////////////// private void btListRemove_Click(object sender, EventArgs e) { if (listViewEx.SelectedItems.Count > 0) { int selectedIndex = listViewEx.SelectedIndices[0]; Component cmpntEntity = cmpntEntities[selectedIndex]; if (MessageBox.Show($"Do you want remove {cmpntEntity.Name} from list?", "Remove Action", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { cmpntEntities.Remove(cmpntEntity); listViewEx.Items.RemoveAt(selectedIndex); } } } private void btMoveUp_Click(object sender, EventArgs e) { if (listViewEx.SelectedItems.Count > 0) { int selectedIndex = listViewEx.SelectedIndices[0]; if (selectedIndex > 0) { int newItemIndex = (selectedIndex - 1); Component cmpntEntity = cmpntEntities[selectedIndex]; cmpntEntities.Insert(newItemIndex, cmpntEntity); cmpntEntities.RemoveAt(selectedIndex + 1); RedrawAll(); listViewEx.Items[newItemIndex].Selected = true; } } } private void btMoveDown_Click(object sender, EventArgs e) { if (listViewEx.SelectedItems.Count > 0) { int selectedIndex = listViewEx.SelectedIndices[0]; if (selectedIndex < listViewEx.Items.Count - 1) { Component cmpntEntity = cmpntEntities[selectedIndex]; int newItemIndex = selectedIndex + 2; cmpntEntities.Insert(newItemIndex, cmpntEntity); cmpntEntities.RemoveAt(selectedIndex); RedrawAll(); listViewEx.Items[newItemIndex - 1].Selected = true; } } } } }