/// <summary> /// Constructor /// </summary> /// <remarks> /// Do not catch errors here. /// If error is occurred exception is shown and application is closed. /// </remarks> public MainForm() { InitializeComponent(); CancelBtn.Enabled = false; Devices = new GXDLMSDeviceCollection(); ObjectValueView.Visible = DeviceInfoView.Visible = DeviceList.Visible = false; ObjectValueView.Dock = ObjectPanelFrame.Dock = DeviceList.Dock = DeviceInfoView.Dock = DockStyle.Fill; ProgressBar.Visible = false; UpdateDeviceUI(null, DeviceState.None); Initialize(); m_MruManager = new MRUManager(RecentFilesMnu); m_MruManager.OnOpenMRUFile += new OpenMRUFileEventHandler(this.OnOpenMRUFile); }
/// <summary> /// /// </summary> /// <returns></returns> GXDLMSDeviceCollection GetDevices() { GXDLMSDeviceCollection devices = new GXDLMSDeviceCollection(); foreach (GXDLMSObject it in SelectedListItems.Values) { GXDLMSDevice dev = it.Parent.Tag as GXDLMSDevice; if (!devices.Contains(dev)) { devices.Add(dev); } } //If no device item is selected return all devices. if (devices.Count == 0) { return this.Devices; } return devices; }
void Disconnect(System.Windows.Forms.Control sender, object[] parameters) { try { int pos = 0; int cnt; object obj = parameters[0]; if (obj is GXDLMSDeviceCollection) { cnt = ((GXDLMSDeviceCollection)obj).Count; foreach (GXDLMSDevice it in (GXDLMSDeviceCollection)obj) { sender.BeginInvoke(new ProgressEventHandler(this.OnProgress), null, "Disconnecting", ++pos, cnt); it.Disconnect(); } } else if (obj is GXDLMSDevice) { sender.BeginInvoke(new ProgressEventHandler(this.OnProgress), null, "Disconnecting", 0, 1); ((GXDLMSDevice)obj).Disconnect(); } else if (obj is GXDLMSObjectCollection) { GXDLMSObjectCollection tmp = obj as GXDLMSObjectCollection; GXDLMSDeviceCollection devices = new GXDLMSDeviceCollection(); foreach (GXDLMSObject it in tmp) { GXDLMSDevice dev = it.Parent.Tag as GXDLMSDevice; if (!devices.Contains(dev)) { devices.Add(dev); } } Disconnect(sender, new object[] { devices }); } else { sender.BeginInvoke(new ProgressEventHandler(this.OnProgress), null, "Disconnecting", 0, 1); GXDLMSObject tmp = obj as GXDLMSObject; GXDLMSDevice dev = tmp.Parent.Tag as GXDLMSDevice; dev.Disconnect(); } } catch (ThreadAbortException) { //User has cancel action. Do nothing. } catch (Exception Ex) { GXDLMS.Common.Error.ShowError(sender, Ex); } finally { sender.BeginInvoke(new ProgressEventHandler(this.OnProgress), null, "", 1, 1); } }
void Connect(System.Windows.Forms.Control sender, object[] parameters) { try { object obj = parameters[0]; int pos = 0; int cnt; if (obj is GXDLMSDeviceCollection) { cnt = ((GXDLMSDeviceCollection)obj).Count; foreach (GXDLMSDevice it in (GXDLMSDeviceCollection)obj) { if (!it.Media.IsOpen) { this.OnProgress(null, "Connecting", ++pos, cnt); it.InitializeConnection(); } } } else if (obj is GXDLMSDevice) { if (!((GXDLMSDevice)obj).Media.IsOpen) { this.OnProgress(null, "Connecting", 0, 1); ((GXDLMSDevice)obj).InitializeConnection(); } } else if (obj is GXDLMSObjectCollection) { GXDLMSObjectCollection tmp = obj as GXDLMSObjectCollection; GXDLMSDeviceCollection devices = new GXDLMSDeviceCollection(); foreach (GXDLMSObject it in tmp) { GXDLMSDevice dev = it.Parent.Tag as GXDLMSDevice; if (!devices.Contains(dev)) { devices.Add(dev); } } Connect(sender, new object[] { devices }); } else { this.OnProgress(null, "Connecting", 0, 1); GXDLMSObject tmp = obj as GXDLMSObject; GXDLMSDevice dev = tmp.Parent.Tag as GXDLMSDevice; if (!dev.Media.IsOpen) { dev.InitializeConnection(); } } } catch (ThreadAbortException) { //User has cancel action. Do nothing. } catch (Exception Ex) { GXDLMS.Common.Error.ShowError(sender, Ex); } finally { this.OnProgress(null, "Connecting", 1, 1); } }
/// <summary> /// Load settings from the file. /// </summary> /// <param name="path"></param> void LoadFile(string path) { //Save changes? if (this.Dirty) { DialogResult ret = MessageBox.Show(this, Properties.Resources.SaveChangesTxt, Properties.Resources.GXDLMSDirectorTxt, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (ret == DialogResult.Cancel) { return; } if (ret == DialogResult.Yes) { if (!Save()) { return; } } } //Clear log every time when new device list is loaded. GXLogWriter.ClearLog(); Initialize(); int version = 1; using (XmlReader reader = XmlReader.Create(path)) { List<Type> types = new List<Type>(Gurux.DLMS.GXDLMSClient.GetObjectTypes()); types.Add(typeof(GXDLMSAttributeSettings)); types.Add(typeof(GXDLMSAttribute)); //Version is added to namespace. XmlSerializer x = new XmlSerializer(typeof(GXDLMSDeviceCollection), null, types.ToArray(), null, "Gurux1"); if (!x.CanDeserialize(reader)) { version = 0; x = new XmlSerializer(typeof(GXDLMSDeviceCollection), types.ToArray()); } Devices = (GXDLMSDeviceCollection)x.Deserialize(reader); reader.Close(); TreeNode node = ObjectTree.Nodes[0]; node.Tag = Devices; } //Add devices to the device tree and update parser. foreach (GXDLMSDevice dev in Devices) { dev.Comm.parentForm = this; dev.Manufacturers = this.Manufacturers; GXManufacturer m = Manufacturers.FindByIdentification(dev.Manufacturer); if (m == null) { throw new Exception("Load failed. Invalid manufacturer: " + dev.Manufacturer); } if (version == 0) { dev.UseLogicalNameReferencing = m.UseLogicalNameReferencing; } dev.ObisCodes = m.ObisCodes; this.AddDevice(dev, false); RefreshDevice(dev, false); } GroupItems(GroupsMnu.Checked); m_Path = path; SetDirty(false); m_MruManager.Insert(0, path); }
/// <summary> /// Constructor /// </summary> /// <remarks> /// Do not catch errors here. /// If error is occurred exception is shown and application is closed. /// </remarks> public MainForm() { InitializeComponent(); CancelBtn.Enabled = false; GroupBy = GXGroupBy.None; Devices = new GXDLMSDeviceCollection(); ObjectValueView.Visible = DeviceInfoView.Visible = DeviceList.Visible = false; ObjectValueView.Dock = ObjectPanelFrame.Dock = DeviceList.Dock = DeviceInfoView.Dock = DockStyle.Fill; ProgressBar.Visible = false; UpdateDeviceUI(null, DeviceState.None); Initialize(); m_MruManager = new MRUManager(RecentFilesMnu); m_MruManager.OnOpenMRUFile += new OpenMRUFileEventHandler(this.OnOpenMRUFile); string path = Path.Combine(GXManufacturerCollection.ObisCodesPath, "GraphItems.xml"); if (File.Exists(path)) { try { using (TextReader reader = new StreamReader(path)) { XmlSerializer x = new XmlSerializer(typeof(GXObisCodeGraphItemCollection), new Type[] { typeof(GXObisCodeGraphItem) }); this.GraphItems = (GXObisCodeGraphItemCollection)x.Deserialize(reader); reader.Close(); } } catch { this.GraphItems.Clear(); //It's OK if this fails. } } }