/// <summary> /// Removes a subscription from the control. /// </summary> public void RemoveSubscription(TsCAeSubscription subscription) { State state = (State)mSubscriptions_[subscription.ClientHandle]; if (state != null) { // unregister call backs. subscription.DataChangedEvent -= state.EventHandler; // remove subscription. mSubscriptions_.Remove(subscription.ClientHandle); // compile list of item to delete. ArrayList itemsToDelete = new ArrayList(); foreach (ListViewItem item in notificationsLv_.Items) { TsCAeEventNotification notification = (TsCAeEventNotification)item.Tag; if (notification.ClientHandle.Equals(subscription.ClientHandle)) { itemsToDelete.Add(item); } } // delete items. foreach (ListViewItem item in itemsToDelete) { item.Remove(); } } }
/// <summary> /// Toggles the active/inactive state for a subscription. /// </summary> private void ActiveMI_Click(object sender, System.EventArgs e) { try { ListViewItem item = subscriptionsLv_.SelectedItems[0]; TsCAeSubscription subscription = (TsCAeSubscription)item.Tag; TsCAeSubscriptionState state = new TsCAeSubscriptionState { Active = !activeMi_.Checked }; subscription.ModifyState((int)TsCAeStateMask.Active, state); // toggle checkbox. activeMi_.Checked = !activeMi_.Checked; // update list. Update(item); // receive notifications. if (MSubscriptionAction != null) { MSubscriptionAction(subscription, !subscription.Active); } // adjust columns. AdjustColumns(subscriptionsLv_); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Adds a subscription to the control. /// </summary> public void AddSubscription(TsCAeSubscription subscription) { if (subscription == null) { throw new ArgumentNullException(); } if (mSubscriptions_.Contains(subscription.ClientHandle)) { throw new ArgumentException("Subscription exists"); } // update current server. if (mServer_ != subscription.Server) { mServer_ = subscription.Server; } State state = new State { Subscription = subscription, EventHandler = new TsCAeDataChangedEventHandler(Subscription_EventChanged) }; subscription.DataChangedEvent += new TsCAeDataChangedEventHandler(Subscription_EventChanged); mSubscriptions_.Add(subscription.ClientHandle, state); }
/// <summary> /// Updates a subscription in the list. /// </summary> private void Update(ListViewItem item) { TsCAeSubscription subscription = (TsCAeSubscription)item.Tag; item.Text = subscription.Name; item.SubItems[1].Text = (subscription.Active)?"Yes":"No"; }
/// <summary> /// Called when the close button is clicked. /// </summary> private void DoneBTN_Click(object sender, System.EventArgs e) { try { mAreas_ = areaSourcesListCtrl_.GetAreas(); mSources_ = areaSourcesListCtrl_.GetSources(); // don't activate until all the filters are applied. bool active = mState_.Active; bool update = mSubscription_ != null; // create new subscription. if (mSubscription_ == null) { mState_.Active = false; mState_.ClientHandle = Guid.NewGuid().ToString(); mSubscription_ = (TsCAeSubscription)mServer_.CreateSubscription(mState_); } // update existing subscription. else { mSubscription_.ModifyState(((int)TsCAeStateMask.All & ~(int)TsCAeStateMask.Active), mState_); } // select filters. mFilters_.Areas.Clear(); mFilters_.Areas.AddRange(mAreas_); mFilters_.Sources.Clear(); mFilters_.Sources.AddRange(mSources_); mSubscription_.SetFilters(mFilters_); // select attributes. IDictionaryEnumerator enumerator = mAttributes_.GetEnumerator(); while (enumerator.MoveNext()) { int categoryId = (int)enumerator.Key; Technosoftware.DaAeHdaClient.Ae.TsCAeAttributeCollection attributeIDs = (Technosoftware.DaAeHdaClient.Ae.TsCAeAttributeCollection)enumerator.Value; mSubscription_.SelectReturnedAttributes(categoryId, attributeIDs.ToArray()); } // activate the subscription. if (active || update) { mState_.Active = active; mSubscription_.ModifyState((int)TsCAeStateMask.Active, mState_); } // close the dialog. DialogResult = DialogResult.OK; Close(); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Adds a subscription to the list. /// </summary> private void Add(TsCAeSubscription subscription) { ListViewItem item = new ListViewItem(subscription.Name, Resources.IMAGE_ENVELOPE); item.SubItems.Add((subscription.Active)?"Yes":"No"); item.Tag = subscription; subscriptionsLv_.Items.Add(item); }
/// <summary> /// Prompts a user to create a new subscription with a modal dialog. /// </summary> public TsCAeSubscription ShowDialog(TsCAeServer server, TsCAeSubscription subscription) { if (server == null) { throw new ArgumentNullException("server"); } mServer_ = server; mSubscription_ = subscription; // go to the initial stage. mStage_ = 0; ChangeStage(0); // initialize controls. stateCtrl_.SetDefaults(); filtersCtrl_.SetDefaults(); categoriesCtrl_.ShowCategories(mServer_); attributesCtrl_.ShowAttributes(mServer_); browseCtrl_.ShowAreas(mServer_); if (mSubscription_ != null) { mState_ = mSubscription_.GetState(); mFilters_ = mSubscription_.GetFilters(); mAttributes_ = mSubscription_.GetAttributes(); mAreas_ = mSubscription_.Areas.ToArray(); mSources_ = mSubscription_.Sources.ToArray(); } else { mState_.Name = String.Format("Subscription{0,3:000}", ++mCount_); } // set current values. stateCtrl_.Set(mState_); filtersCtrl_.Set(mFilters_); categoriesCtrl_.SetSelectedCategories(mFilters_.Categories.ToArray()); attributesCtrl_.SetSelectedAttributes(mAttributes_); areaSourcesListCtrl_.AddAreas(mAreas_); areaSourcesListCtrl_.AddSources(mSources_); // show dialog. if (ShowDialog() != DialogResult.OK) { return(null); } // return updated/created subscription. return(mSubscription_); }
/// <summary> /// Refreshes the current subscription. /// </summary> private void RefreshMI_Click(object sender, System.EventArgs e) { try { ListViewItem item = subscriptionsLv_.SelectedItems[0]; TsCAeSubscription subscription = (TsCAeSubscription)item.Tag; subscription.Refresh(); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Displays the event notifications. /// </summary> public void ShowDialog(TsCAeSubscription subscription, TsCAeEventNotification notification) { if (subscription == null) { throw new ArgumentNullException("subscription"); } mSubscription_ = subscription; mNotification_ = notification; acknowledgeBtn_.Enabled = notification.AckRequired; notificationCtrl_.ShowNotification(subscription, notification); ShowDialog(); }
/// <summary> /// Adds or removes a subscription from the event notifications control. /// </summary> private void SubscriptionsCTRL_SubscriptionAction(TsCAeSubscription subscription, bool deleted) { try { if (deleted) { eventListCtrl_.RemoveSubscription(subscription); } else { eventListCtrl_.AddSubscription(subscription); } } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Deletes a subscription. /// </summary> private void DeleteMI_Click(object sender, System.EventArgs e) { try { ListViewItem item = subscriptionsLv_.SelectedItems[0]; TsCAeSubscription subscription = (TsCAeSubscription)item.Tag; // send notifications. if (MSubscriptionAction != null) { MSubscriptionAction(subscription, true); } // remove from list. item.Remove(); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Edits the state of a subscription. /// </summary> private void EditMI_Click(object sender, System.EventArgs e) { try { ListViewItem item = subscriptionsLv_.SelectedItems[0]; TsCAeSubscription subscription = (TsCAeSubscription)item.Tag; // show properties dialog. bool active = subscription.Active; new SubscriptionEditDlg().ShowDialog(mServer_, subscription); if (subscription == null) { return; } // update list. Update(item); // send notifications. if (active != subscription.Active) { if (MSubscriptionAction != null) { MSubscriptionAction(subscription, !subscription.Active); } } // adjust columns. AdjustColumns(subscriptionsLv_); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
/// <summary> /// Displays the notification in the control. /// </summary> public void ShowNotification(TsCAeSubscription subscription, TsCAeEventNotification notification) { // check for null value. if (notification == null) { sourceTb_.Text = ""; timeTb_.Text = ""; messageTb_.Text = ""; eventTypeTb_.Text = ""; eventCategoryTb_.Text = ""; conditionNameTb_.Text = ""; subConditionNameTb_.Text = ""; newStateTb_.Text = ""; ackRequiredTb_.Text = ""; qualityTb_.Text = ""; activeTimeTb_.Text = ""; actorTb_.Text = ""; attributesLv_.Items.Clear(); return; } // find category. Technosoftware.DaAeHdaClient.Ae.TsCAeCategory category = null; try { Technosoftware.DaAeHdaClient.Ae.TsCAeCategory[] categories = subscription.Server.QueryEventCategories((int)notification.EventType); for (int ii = 0; ii < categories.Length; ii++) { if (categories[ii].ID == notification.EventCategory) { category = categories[ii]; break; } } } catch { category = null; } // find attributes. ArrayList attributes = new ArrayList(); try { // get attribute descriptions. Technosoftware.DaAeHdaClient.Ae.TsCAeAttribute[] descriptions = subscription.Server.QueryEventAttributes(notification.EventCategory); // get selected attributes. int[] attributeIDs = null; if (subscription.Attributes.Contains(notification.EventCategory)) { attributeIDs = subscription.Attributes[notification.EventCategory].ToArray(); } // find decriptions for selected attributes. if (attributeIDs != null) { for (int ii = 0; ii < attributeIDs.Length; ii++) { for (int jj = 0; jj < descriptions.Length; jj++) { if (descriptions[jj].ID == attributeIDs[ii]) { attributes.Add(descriptions[jj]); break; } } } } } catch { // ignore errors. } sourceTb_.Text = notification.SourceID; timeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.Time); messageTb_.Text = notification.Message; eventTypeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.EventType); eventCategoryTb_.Text = (category != null)?category.Name:""; conditionNameTb_.Text = notification.ConditionName; subConditionNameTb_.Text = notification.SubConditionName; newStateTb_.Text = ""; ackRequiredTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.AckRequired); qualityTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.Quality); activeTimeTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.ActiveTime); actorTb_.Text = notification.ActorID; // convert state to a string. if ((notification.NewState & (int)TsCAeConditionState.Active) != 0) { newStateTb_.Text += TsCAeConditionState.Active.ToString(); } if ((notification.NewState & (int)TsCAeConditionState.Enabled) != 0) { if (newStateTb_.Text != "") { newStateTb_.Text += " AND "; } newStateTb_.Text += TsCAeConditionState.Enabled.ToString(); } if ((notification.NewState & (int)TsCAeConditionState.Acknowledged) != 0) { if (newStateTb_.Text != "") { newStateTb_.Text += " AND "; } newStateTb_.Text += TsCAeConditionState.Acknowledged.ToString(); } // fill attributes list. attributesLv_.Items.Clear(); for (int ii = 0; ii < notification.Attributes.Count; ii++) { Technosoftware.DaAeHdaClient.Ae.TsCAeAttribute attribute = (ii < attributes.Count)?(Technosoftware.DaAeHdaClient.Ae.TsCAeAttribute)attributes[ii]:null; ListViewItem item = new ListViewItem((attribute != null)?attribute.Name:"Unknown"); item.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(notification.Attributes[ii])); attributesLv_.Items.Add(item); } AdjustColumns(attributesLv_); }