/// <summary> /// Constructor. /// </summary> /// <param name="group"></param> /// <param name="target"></param> public GXDeviceGroupDialog(GXDeviceGroup group, object target) { InitializeComponent(); FindParentGroups(target); Target = group; NameTB.Text = group.Name; this.GeneralTab.Text = Gurux.DeviceSuite.Properties.Resources.GeneralTxt; this.Text = Gurux.DeviceSuite.Properties.Resources.DeviceGroupSettingsTxt; //Update help strings from the resource. this.helpProvider1.SetHelpString(this.NameTB, Gurux.DeviceSuite.Properties.Resources.DeviceGroupNameHelp); this.helpProvider1.SetHelpString(this.btnOK, Gurux.DeviceSuite.Properties.Resources.OKHelp); this.helpProvider1.SetHelpString(this.btnCancel, Gurux.DeviceSuite.Properties.Resources.CancelHelp); //Add disabled actions. m_DisActions = new DisabledAction(Target.DisabledActions); tabControl1.TabPages.Add(m_DisActions.DisabledActionsTB); }
/// <summary> /// Search available devices. /// </summary> /// <returns>True if the the search was success.</returns> public abstract bool FindDevices(GXDeviceGroup deviceGroup);
/// <summary> /// Load device template and connect to the device. /// </summary> /// <param name="path"></param> /// <param name="taskinfo"></param> public void Connect(string path, GXClaimedTask taskinfo) { ExecutedTask = taskinfo; //If already connected. if (Device != null) { UpdateParameters(); if ((Device.Status & DeviceStates.Connected) == 0) { Device.Connect(); } return; } DeviceList = new GXDeviceList(); DeviceList.OnError += new Gurux.Common.ErrorEventHandler(DeviceList_OnError); DeviceList.OnUpdated += new ItemUpdatedEventHandler(DeviceList_OnUpdated); GXDeviceGroup group = new GXDeviceGroup(); DeviceList.DeviceGroups.Add(group); TargetDirectory = path; AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); AppDomain.CurrentDomain.TypeResolve += new ResolveEventHandler(CurrentDomain_TypeResolve); GXDeviceList.Update(path); string filename = Path.Combine(path, taskinfo.Device.ProfileGuid + ".gxp"); Device = GXDevice.Load(filename); Device.ID = taskinfo.Device.Id; group.Devices.Add(Device); Device.Name = taskinfo.Device.Name; //taskinfo.Device.AutoConnect; // ForcePerPropertyRead Device.UpdateInterval = taskinfo.Device.UpdateInterval; Device.WaitTime = taskinfo.Device.WaitTime; Device.ResendCount = taskinfo.Device.ResendCount; Device.DisabledActions = taskinfo.Device.DisabledActions; /* TODO: Device.FailTryCount = taskinfo.Device.FailTryCount; Device.FailWaitTime = taskinfo.Device.FailWaitTime; Device.ConnectionTryCount = taskinfo.Device.ConnectionTryCount; Device.ConnectionFailWaitTime = taskinfo.Device.ConnectionFailWaitTime; */ //Update parameters. UpdateParameters(); //Load medias to this assembly domin. Gurux.Communication.GXClient.GetAvailableMedias(); if (taskinfo.Device.TraceLevel != System.Diagnostics.TraceLevel.Off) { Device.Trace = taskinfo.Device.TraceLevel; Device.OnTrace += new TraceEventHandler(Device_OnTrace); } Exception lastException = null; int pos = -1; Gurux.Common.IGXMedia media = null; foreach (var it in taskinfo.MediaSettings) { try { ++pos; //If media is changed. if (media == null || media.MediaType != taskinfo.MediaSettings[pos].Key) { media = Device.GXClient.SelectMedia(taskinfo.MediaSettings[pos].Key); Device.GXClient.AssignMedia(media); } media.Settings = taskinfo.MediaSettings[pos].Value.Value; lastException = null; Device.Connect(); break; } catch (Exception ex) { //If connection fails try next redundant connectio. lastException = ex; } } if (lastException != null) { throw lastException; } }
/// <summary> /// Create new Device list. /// </summary> public void NewDeviceList() { try { if (CheckAndWritePropertyValues() != DialogResult.Cancel) { //Don't clear errors on new list creation (and director opening) m_DeviceList.CreateEmpty("GXDeviceList1"); //Create default device group where device are added. GXDeviceGroup group = new GXDeviceGroup(); group.Name = "Devices"; m_DeviceList.DeviceGroups.Add(group); m_DeviceList.SelectedItem = group; m_DeviceList.Dirty = false; } } catch (Exception ex) { GXCommon.ShowError(ParentComponent, ex); } }
/// <summary> /// Delete selected device group. /// </summary> /// <param name="deviceGroup">The device group to be deleted.</param> public void DeleteDeviceGroup(GXDeviceGroup deviceGroup) { if (deviceGroup == null || deviceGroup.Parent == null) { System.Diagnostics.Debug.Assert(false); return; } //Show default Gurux dialog. if (GXCommon.ShowExclamation(ParentComponent, Gurux.DeviceSuite.Properties.Resources.GuruxDeviceSuiteTxt, Gurux.DeviceSuite.Properties.Resources.RemoveItemTxt) != DialogResult.Yes) { return; } Queue q = new Queue(); q.Enqueue(deviceGroup); GXDeviceGroup grp = null; bool ChildDeviceConnected = false; while (q.Count > 0) { grp = (GXDeviceGroup)q.Dequeue(); //Add child groups to queue foreach (GXDeviceGroup ChildGrp in grp.DeviceGroups) { q.Enqueue(ChildGrp); } //Remove devices from schedules bool DeviceConnected = false; foreach (GXDevice dev in grp.Devices) { if ((dev.Status & Gurux.Device.DeviceStates.Connected) != 0) { ChildDeviceConnected = DeviceConnected = true; } } if (DeviceConnected) { continue; } } if (!ChildDeviceConnected) { deviceGroup.Parent.Remove(deviceGroup); } else { throw new Exception("Could not remove device group, because of some connected device(s)."); } }
private TreeNode ShowAvailableDeviceGroup(GXDeviceGroup group, TreeNodeCollection nodes, bool showDevices) { #if DEBUG m_ObjectIDs.Add(group.ID, group); #endif //DEBUG TreeNode node = nodes.Add(group.Name); node.Tag = group; node.SelectedImageIndex = node.ImageIndex = (int)DeviceImageType.DeviceGroup; DeviceToTreeNode[group] = node; if (showDevices) { ShowAvailableDevices(group.Devices, node); } ShowAvailableDeviceGroups(group.DeviceGroups, node.Nodes, showDevices); return node; }