/// <summary> /// Recurses the Q Set, getting queue information /// </summary> /// <param name="parentItem"></param> /// <param name="subscribeToEvents"></param> private void RecurseQSet(QSetFolderItem parentItem, bool subscribeToEvents) { //subscribe to folders events if necessary if (subscribeToEvents) { parentItem.ChildItems.AfterItemAdded += new AfterItemAddedEvent(ChildItems_AfterItemAdded); parentItem.ChildItems.BeforeItemRemoved += new BeforeItemRemovedEvent(ChildItems_BeforeItemRemoved); } //query all children of the parent foreach (QSetItemBase item in parentItem.ChildItems) { if (_isStopRequested) { break; } //monitor the queue, or query the folders children if (item is QSetQueueItem) { CountQueueMessages(((QSetQueueItem)item)); } else if (item is QSetFolderItem) { RecurseQSet((QSetFolderItem)item, subscribeToEvents); } } }
private void recipientsButton_Click(object sender, System.EventArgs e) { if (QueueSearchForm == null) { QueueSearchForm = new QueueSearchForm(); QueueSearchForm.ImageList = recipientsListView.SmallImageList; QueueSearchForm.AllowMachineSelect = true; QueueSearchForm.QueueImageIndex = (int)Images.IconType.Queue; QueueSearchForm.ComputerImageIndex = (int)Images.IconType.Server; } if (QueueSearchForm.ShowDialog() == DialogResult.OK) { foreach (QSetItemBase item in QueueSearchForm.SelectedItems) { QSetFolderItem machineItem = item as QSetFolderItem; if (machineItem != null) { foreach (QSetQueueItem childQueue in machineItem.ChildItems) { AddQueueItemToRecipientsList(childQueue); } } else { AddQueueItemToRecipientsList((QSetQueueItem)item); } } } }
/// <summary> /// Adds the currently active queue to the Q Set. /// </summary> public void AddActiveQueueToQSet() { if (_primaryControls.GetQSetExplorerSet() != null) { if (_primaryControls.GetQSetExplorerActiveItem() == null) { _primaryControls.SetQSetExplorerActiveItem(_primaryControls.GetQSetExplorerSet()); } if (_primaryControls.HasActiveDocument) { MessageBrowser messageBrowser = _primaryControls.GetActiveMessageBrowser(); if (messageBrowser != null) { QSetFolderItem folderItem = _primaryControls.GetQSetExplorerActiveItem() as QSetFolderItem; if (folderItem != null) { if (!folderItem.ChildItems.Exists(messageBrowser.QSetQueueItem.Name)) { folderItem.ChildItems.Add(messageBrowser.QSetQueueItem); } } else { MessageBox.Show(_primaryForms.EnvironmentForm, "Cannot add the queue at this point. Select a valid folder, or the top level Queue Set to add the queue.", Locale.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } } }
private void ChildItems_AfterItemAdded(object sender, AfterItemAddedEventArgs e) { QSetFolderItem folderItem = e.Item as QSetFolderItem; if (folderItem != null) { folderItem.ChildItems.AfterItemAdded += new AfterItemAddedEvent(ChildItems_AfterItemAdded); folderItem.ChildItems.BeforeItemRemoved += new BeforeItemRemovedEvent(ChildItems_BeforeItemRemoved); } }
/// <summary> /// Recursively populates the tree view with all child items of a folder item. /// </summary> /// <param name="parentItem">Parent folder item.</param> /// <param name="parentNode">Parent node.</param> private void DisplayQSetChildItems(QSetFolderItem parentFolderItem, TreeNode parentNode) { foreach (QSetItemBase item in parentFolderItem.ChildItems) { QSetItemTreeNode itemNode = new QSetItemTreeNode(item); parentNode.Nodes.Add((TreeNode)itemNode); if (item is QSetFolderItem) { DisplayQSetChildItems((QSetFolderItem)item, itemNode); } } }
/// <summary> /// Recursively adds child nodes to a node. /// </summary> /// <param name="parentItem">Parent folder item.</param> /// <param name="parentNode">Parent node.</param> public void CreateChildNodes(QSetFolderItem parentFolderItem, TreeNode parentNode) { foreach (QSetItemBase item in parentFolderItem.ChildItems) { QSetItemTreeNode itemNode = new QSetItemTreeNode(item); parentNode.Nodes.Add((TreeNode)itemNode); if (item is QSetFolderItem) { CreateChildNodes((QSetFolderItem)item, itemNode); } } }
/// <summary> /// Adds a new folder to the Q Set. /// </summary> public void AddNewFolderToQSet() { if (_primaryControls.GetQSetExplorerActiveItem() != null) { QSetFolderItem folderItem = _primaryControls.GetQSetExplorerActiveItem() as QSetFolderItem; if (folderItem != null) { QSetFolderItem newFolderItem = new QSetFolderItem(GetNextAvailableNewItemName("New Folder", folderItem.ChildItems)); folderItem.ChildItems.Add(newFolderItem); _primaryControls.QSetExplorerEditActiveItem(); } } }
/// <summary> /// Constructs the object a QSetItemBase object. /// </summary> /// <param name="queueSetItem">QSetItemBase object on which the tree node is based.</param> public QSetItemTreeNode(QSetItemBase queueSetItem) : base() { this.ImageIndex = (int)queueSetItem.Icon; this.SelectedImageIndex = (int)queueSetItem.OpenIcon; this.Text = queueSetItem.Name; _queueSetItem = queueSetItem; QSetFolderItem folderItem = _queueSetItem as QSetFolderItem; if (folderItem != null) { folderItem.ChildItems.ItemAdded += new Mulholland.Applications.QSet.QSetItemCollection.ItemAddedEvent(ChildItems_ItemAdded); folderItem.ChildItems.ItemRemoved += new Mulholland.Applications.QSet.QSetItemCollection.ItemRemovedEvent(ChildItems_ItemRemoved); } }
/// <summary> /// Constructs the object a QSetItemBase object. /// </summary> /// <param name="queueSetItem">QSetItemBase object on which the tree node is based.</param> public QSetItemTreeNode(QSetItemBase queueSetItem) : base() { this.ImageIndex = (int)queueSetItem.Icon; this.SelectedImageIndex = (int)queueSetItem.Icon; this.Text = queueSetItem.Name; _queueSetItem = queueSetItem; QSetFolderItem folderItem = _queueSetItem as QSetFolderItem; if (folderItem != null) { _afterItemAddedEventDelegate = new AfterItemAddedEvent(ChildItems_AfterItemAdded); _beforeItemRemovedEventDelegate = new BeforeItemRemovedEvent(ChildItems_BeforeItemRemoved); _itemRepositionedEventDelegate = new ItemRepositionedEvent(ChildItems_ItemRepositioned); folderItem.ChildItems.AfterItemAdded += _afterItemAddedEventDelegate; folderItem.ChildItems.BeforeItemRemoved += _beforeItemRemovedEventDelegate; folderItem.ChildItems.ItemRepositioned += _itemRepositionedEventDelegate; } _queueSetItem.ItemRenamed += new ItemRenamedEvent(_queueSetItem_ItemRenamed); }
/// <summary> /// Opens a machine and all of its queues, adding to the active Q Set if possible. /// </summary> /// <param name="machineName">Name of machine.</param> /// <param name="messageQueues">Array of message queues belonging to the machine.</param> public void OpenMachine(string machineName, MessageQueue[] messageQueues) { if (_primaryControls.GetQSetExplorerSet() != null) { //ensure we have a folder item to add to if (_primaryControls.GetQSetExplorerActiveItem() == null) { _primaryControls.SetQSetExplorerActiveItem(_primaryControls.GetQSetExplorerSet()); } if (!(_primaryControls.GetQSetExplorerActiveItem() is QSetFolderItem)) { _primaryControls.MoveQSetExplorerActiveItemToParent(); } //check the item does not already exist QSetFolderItem parentItem = (QSetFolderItem)_primaryControls.GetQSetExplorerActiveItem(); if (!parentItem.ChildItems.Exists(machineName)) { QSetMachineItem newMachineItem = new QSetMachineItem(machineName); foreach (MessageQueue queue in messageQueues) { newMachineItem.ChildItems.Add(new QSetQueueItem(string.Format(@"{0}\{1}", queue.MachineName, queue.QueueName))); //reformat as private queues can come out with extra data in name) } parentItem.ChildItems.Add(newMachineItem); } else { MessageBox.Show(Locale.UserMessages.CannotAddItemAsAlreadyExists, Locale.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { foreach (MessageQueue queue in messageQueues) { OpenQueue(new QSetQueueItem(string.Format(@"{0}\{1}", queue.MachineName, queue.QueueName))); //reformat as private queues can come out with extra data in name) } } }
/// <summary> /// Adds a new web service client to the Q Set. /// </summary> public void AddNewWebServiceClient() { //ensure the q set is selected at a valid position if (_primaryControls.GetQSetExplorerSet() == null) { _taskManager.CreateNewQSet(); } if (_primaryControls.GetQSetExplorerActiveItem() == null || !(_primaryControls.GetQSetExplorerActiveItem() is QSetFolderItem) || _primaryControls.GetQSetExplorerActiveItem() is QSetMachineItem) { _primaryControls.SetQSetExplorerActiveItem(_primaryControls.GetQSetExplorerSet()); } QSetFolderItem parentItem = _primaryControls.GetQSetExplorerActiveItem() as QSetFolderItem; if (parentItem != null) { QSetWebServiceItem webServiceItem = new QSetWebServiceItem(_taskManager.GetNextAvailableNewItemName("New Web Service Client", parentItem.ChildItems)); parentItem.ChildItems.Add(webServiceItem); LoadNewWebServiceClientControl(webServiceItem); } }
/// <summary> /// Handles the disposing of the node, unnattaching any event handlers. /// </summary> /// <param name="disposing">Set to true if being disposed from IDispose interface.</param> private void Dispose(bool disposing) { //detach event handlers if required if (!_disposed) { QSetFolderItem folderItem = _queueSetItem as QSetFolderItem; if (folderItem != null) { if (_afterItemAddedEventDelegate != null) { folderItem.ChildItems.AfterItemAdded -= _afterItemAddedEventDelegate; } if (_beforeItemRemovedEventDelegate != null) { folderItem.ChildItems.BeforeItemRemoved -= _beforeItemRemovedEventDelegate; } if (_itemRepositionedEventDelegate != null) { folderItem.ChildItems.ItemRepositioned -= _itemRepositionedEventDelegate; } } } _disposed = true; }
/// <summary> /// Handles the drag drop. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _qsetTreeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { //get the item which was dragged on to QSetItemBase dragOverItem = _qsetTreeView.GetNodeAt(_qsetTreeView.PointToClient(new Point(e.X, e.Y))) == null ? null : ((QSetItemTreeNode)_qsetTreeView.GetNodeAt(_qsetTreeView.PointToClient(new Point(e.X, e.Y)))).QSetItem; //was a Q Set item dragged? QSetItemBase droppedItem = QSetItemBase.GetFromDataObject(e.Data); if (droppedItem != null) { //handle Q Set item drag QSetFolderItem dragOverFolder = dragOverItem as QSetFolderItem; if (dragOverFolder != null && droppedItem.ParentItem != dragOverFolder) { if (!dragOverFolder.ChildItems.Exists(droppedItem.Name)) { ((QSetFolderItem)droppedItem.ParentItem).ChildItems.Remove(droppedItem.Name); dragOverFolder.ChildItems.Add(droppedItem); } else { MessageBox.Show(Locale.UserMessages.CannotAddItemAsAlreadyExists, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } else { //is this a message(s) drag? MessageDragContainer messageDragContainer = (MessageDragContainer)e.Data.GetData(typeof(MessageDragContainer)); if (messageDragContainer != null) { OnMessagesDragDrop(new MessagesDragDropEventArgs(messageDragContainer.OwnerQueueItem, (QSetQueueItem)dragOverItem, messageDragContainer.Messages)); } } }
/// <summary> /// Handles the ok click of the queue search results. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void QueueSearchForm_OKClicked(object sender, QueueSearchForm.OKClickedEventArgs e) { if (base.PrimaryControls.GetQSetExplorerSet() == null) { base.TaskManager.CreateNewQSet(); } if (base.PrimaryControls.GetQSetExplorerActiveItem() == null || !(base.PrimaryControls.GetQSetExplorerActiveItem() is QSetFolderItem) || base.PrimaryControls.GetQSetExplorerActiveItem() is QSetMachineItem) { base.PrimaryControls.SetQSetExplorerActiveItem(base.PrimaryControls.GetQSetExplorerSet()); } QSetFolderItem parentItem = (QSetFolderItem)base.PrimaryControls.GetQSetExplorerActiveItem(); foreach (QSetItemBase item in e.SelectedItems) { if (!parentItem.ChildItems.Exists(item.Name)) { parentItem.ChildItems.Add(item); } } }
/// <summary> /// Given a QSetItemBase, marks the corresponding QueueItemListViewItemPair for deletion, /// and repeats for any children of the QSetItemBase object. /// </summary> /// <param name="item">QSetItemBase to delete.</param> private void RecursivelyMarkListItemsForDeletion(QSetItemBase item) { //if we have a queue, remove it QSetQueueItem queueItem = item as QSetQueueItem; if (queueItem != null) { if (_itemPairHashTable.ContainsKey(queueItem.ID)) { _deleteItemPairQueue.Enqueue(_itemPairHashTable[queueItem.ID]); } } //if we have a folder, check children QSetFolderItem folderItem = item as QSetFolderItem; if (folderItem != null) { foreach (QSetItemBase childItem in folderItem.ChildItems) { RecursivelyMarkListItemsForDeletion(childItem); } } }
/// <summary> /// Recursively populates the tree view with all child items of a folder item. /// </summary> /// <param name="parentItem">Parent folder item.</param> /// <param name="parentNode">Parent node.</param> private void DisplayQSetChildItems(QSetFolderItem parentFolderItem, TreeNode parentNode) { foreach (QSetItemBase item in parentFolderItem.ChildItems) { QSetItemTreeNode itemNode = new QSetItemTreeNode(item); parentNode.Nodes.Add((TreeNode)itemNode); if (item is QSetFolderItem) DisplayQSetChildItems((QSetFolderItem)item, itemNode); } }