コード例 #1
0
 /*
 public MingTreeViewItem GetRootNode(MingTreeViewItem treeViewItem)
 {
     var climb = treeViewItem;
     while (climb.Parent != null)
     {
         climb = climb.Parent;
     }
     return climb;
 }*/
 public ConnectionInfo GetNodeConnection(MingTreeViewItem treeViewItem)
 {
     var climb = treeViewItem;
     while (!(climb.Data is IConnectionProvider))
     {
         climb = climb.Parent;
     }
     return (climb.Data as IConnectionProvider).ConnectionInfo;
 }
コード例 #2
0
        public void CompactCollections(MingTreeViewItem node, ConnectionInfo cnnInfo, string database)
        {
            var confirm = new MessageBox();
            var message = database == null
                ? string.Format(Properties.Resources.CompactCollections_ConfirmAll, cnnInfo.Host, cnnInfo.Port)
                : string.Format(Properties.Resources.CompactCollections_Confirm, database);
            if (!confirm.ShowConfirm(_mingApp.MainWindow, message))
            {
                return;
            }

            var operation = new OperationStatus
            {
                IsIndeterminate = true,
                Title = Properties.Resources.CompactCollections_Title,
                Description = Properties.Resources.CompactCollections_DescCounting
            };
            _mingApp.AddLongRunningOperation(operation);
            var task = new CancelableTask(() => DoCompactCollections(operation, cnnInfo, database), null);
            task.Execute();
        }
コード例 #3
0
 public void CopyCollection(MingTreeViewItem node, ConnectionInfo cnnInfo, string database, string collection)
 {
     var ted = new TextEntryDialogController(_mingApp.MainWindow, Properties.Resources.CopyCollection_Title, Properties.Resources.CreateCollection_Prompt);
     ted.Text = collection;
     if (!ted.ShowDialog())
     {
         return;
     }
     var name = ted.Text.Trim();
     if (string.IsNullOrWhiteSpace(name))
     {
         return;
     }
     var operation = new OperationStatus
     {
         IsIndeterminate = true,
         Title = Properties.Resources.CopyCollection_OpTitle,
         Description = Properties.Resources.CopyCollection_Counting
     };
     _mingApp.AddLongRunningOperation(operation);
     var task = new CancelableTask(() => DoCopyCollection(node, operation, cnnInfo, database, collection, name), null);
     task.Execute();
 }
コード例 #4
0
        private void DoCopyCollection(MingTreeViewItem node, OperationStatus operation, ConnectionInfo cnnInfo, string database, string collection, string newCollection)
        {
            try
            {
                if (MongoUtilities.Create(cnnInfo).GetDatabase(database).CollectionExists(newCollection))
                {
                    operation.IsSuccess = false;
                    operation.IsComplete = true;
                    operation.Description = string.Format(Properties.Resources.CopyCollection_Exists, newCollection);
                    return;
                }
                var src = MongoUtilities.Create(cnnInfo).GetDatabase(database).GetCollection(collection);
                var dest = MongoUtilities.Create(cnnInfo).GetDatabase(database).GetCollection(newCollection);
                var count = src.Count();
                operation.IsIndeterminate = false;
                operation.Description = string.Format(Properties.Resources.CopyCollection_Copying, 0);

                var copied = 0;
                var srcCur = src.FindAll().SetSnapshot();
                foreach (var item in srcCur)
                {
                    dest.Insert(item);
                    copied++;
                    operation.Description = string.Format(Properties.Resources.CopyCollection_Copying, copied);
                    operation.PercentComplete = (int)((100.0 / (double)count) * (double)copied);
                }
                operation.IsSuccess = true;
                operation.IsComplete = true;
            }
            catch (Exception ex)
            {
                operation.Description = string.Format(Properties.Resources.CopyCollections_Error, ex.Message);
                operation.IsSuccess = false;
                operation.IsComplete = true;
            }
            _mingApp.RefreshTreeViewItem(node.Parent);
        }
コード例 #5
0
 private void TreeViewItemsLoaded(MingTreeViewItem parent, IEnumerable<MingTreeViewItem> items)
 {
     parent.Items.Clear();
     if (items == null || items.Count() == 0)
     {
         parent.AddChild(new MingTreeViewItem(Utilities.BitmapImageFromBitmap(Properties.Resources.warning), Properties.Resources.TreeView_NoData, null, false));
     }
     else
     {
         items.ToList().ForEach(item => parent.AddChild(item));
     }
     MingApp.Instance.IndicateIdle();
 }
コード例 #6
0
        private void LoadChildren(MingTreeViewItem node)
        {
            MingApp.Instance.IndicateBusy(null);

            var cnn = GetNodeConnection(node);

            var plugin = PluginManager.Instance.GetPluginInstance(cnn.ServiceId);
            var loadtask = new CancelableTask<IEnumerable<MingTreeViewItem>>(
                () => plugin.TreeViewClient.NodeExpanded(node, cnn),
                result => TreeViewItemsLoaded(node, result));
            loadtask.Execute();
        }
コード例 #7
0
 private void DisplayConnection(ConnectionInfo cnnInfo)
 {
     var img = Utilities.BitmapImageFromBitmap(PluginManager.Instance.GetPluginInstance(cnnInfo.ServiceId).TreeViewIcon);
     MingTreeViewItem cnnObj;
     if (!string.IsNullOrWhiteSpace(cnnInfo.Name))
     {
         cnnObj = new MingTreeViewItem(img, cnnInfo.Name, new TreeViewRootNodeData(cnnInfo), true);
     }
     else
     {
         if (!string.IsNullOrWhiteSpace(cnnInfo.Username))
         {
             cnnObj = new MingTreeViewItem(img, string.Format("{0}@{1}:{2}", cnnInfo.Username, cnnInfo.Host, cnnInfo.Port), new TreeViewRootNodeData(cnnInfo), true);
         }
         else
         {
             cnnObj = new MingTreeViewItem(img, string.Format("{0}:{1}", cnnInfo.Host, cnnInfo.Port), new TreeViewRootNodeData(cnnInfo), true);
         }
     }
     _treeView.Items.Add(cnnObj);
 }
コード例 #8
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
        public IEnumerable<string> GetActiveNodeContextMenuKeys(MingTreeViewItem node)
        {
            var items = new List<string>();

            var nodeData = node.Data;

            if (nodeData is TreeViewRootNodeData)
            {
                items.Add(MenuFileDeleteConnection);
            }
            if (node.HasDynamicChildren)
            {
                items.Add(MenuRefresh);
            }

            return items;
        }
コード例 #9
0
 public void MenuItemHandler(ConnectionInfo cnnInfo, MingTreeViewItem node, string menuKey)
 {
     throw new NotImplementedException();
 }
コード例 #10
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
 void ConnectionsTreeController_SelectedItemChanged(MingTreeViewItem selectedItem)
 {
     _menuController.ActivateToolBarItems();
 }
コード例 #11
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
        public IList<object> TreeViewContextMenu(MingTreeViewItem originator)
        {
            var plugin = PluginManager.Instance.GetPluginInfo(_connectionsTreeController.GetNodeConnection(originator).ServiceId);

            return _menuController.GetContextMenu(originator, plugin);
        }
コード例 #12
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
 public void RefreshTreeViewItem(MingTreeViewItem node)
 {
     _mainWindow.Dispatcher.Invoke(new Action(() => _connectionsTreeController.RefreshNode(node)));
 }
コード例 #13
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
 public void MenuItemHandler(ConnectionInfo cnnInfo, MingTreeViewItem node, string menuKey)
 {
     switch (menuKey)
     {
         case MenuFileAddConnection:
             Connect();
             break;
         case MenuFileDeleteConnection:
             Disconnect(cnnInfo);
             break;
         case MenuFileImport:
             var import = new ConnectionsPort();
             import.ImportConnections();
             break;
         case MenuFileExport:
             var export = new ConnectionsPort();
             export.ExportConnections();
             break;
         case MenuFileExit:
             End();
             break;
         case MenuRefresh:
             _connectionsTreeController.RefreshSelectedNode();
             break;
         case MenuHelpAbout:
             var about = new Ming.Forms.AboutForm();
             about.Owner = _mainWindow;
             about.ShowDialog();
             break;
     }
 }
コード例 #14
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
 public ConnectionInfo GetTreeViewNodeConnectionInfo(MingTreeViewItem item)
 {
     if (item == null)
     {
         return null;
     }
     return _connectionsTreeController.GetNodeConnection(item);
 }
コード例 #15
0
 public void RefreshNode(MingTreeViewItem node)
 {
     LoadChildren(node);
 }
コード例 #16
0
 public System.Collections.Generic.IEnumerable<string> GetActiveMenuKeys(MingTreeViewItem activeNode)
 {
     return System.Linq.Enumerable.Empty<string>();
 }
コード例 #17
0
ファイル: MingTreeViewClient.cs プロジェクト: stevehjohn/Hub
        public IEnumerable<MingTreeViewItem> NodeExpanded(MingTreeViewItem node, ConnectionInfo cnnInfo)
        {
            var nodeData = node.Data;

            if (nodeData is TreeViewRootNodeData)
            {
                return LoadReplicaSet(cnnInfo);
            }
            if (nodeData is ReplicaSetMemberNode)
            {
                return LoadDatabases(cnnInfo);
            }
            if (nodeData is DatabaseNode)
            {
                return GetDatabaseObjectNodes(nodeData as DatabaseNode);
            }
            if (nodeData is CollectionsNode)
            {
                return LoadCollections(nodeData as CollectionsNode, cnnInfo);
            }
            if (nodeData is CollectionNode)
            {
                return GetCollectionObjectNodes(nodeData as CollectionNode);
            }
            if (nodeData is CollectionIndexesNode)
            {
                return LoadCollectionIndexes(nodeData as CollectionIndexesNode, cnnInfo);
            }
            if (nodeData is CollectionPropertiesNode)
            {
                return LoadCollectionProperties(nodeData as CollectionPropertiesNode, cnnInfo);
            }
            if (nodeData is CollectionPropertyNode)
            {
                return LoadPropertyProperties(nodeData as CollectionPropertyNode, cnnInfo);
            }

            return null;
        }
コード例 #18
0
ファイル: MingTreeViewClient.cs プロジェクト: stevehjohn/Hub
        public IEnumerable<string> GetActiveNodeContextMenuKeys(MingTreeViewItem node)
        {
            var keys = new List<string>();

            var nodeData = node.Data;

            if (nodeData is DatabaseNode || nodeData is CollectionsNode || nodeData is CollectionsEmptyNode)
            {
                keys.Add(Menus.NewCollection);
                if (!(nodeData is CollectionIndexesEmptyNode))
                {
                    keys.Add(Menus.CompactCollections);
                    keys.Add(Menus.OpenConsole);
                    keys.Add(Menus.SystemStatus);
                }
            }

            if (nodeData is DatabaseNode)
            {
                keys.Add(Menus.DeleteDatabase);
                keys.Add(Menus.EvaluateJavaScript);
                keys.Add(Menus.CopyCollections);
                keys.Add(Menus.OpenConsole);
                keys.Add(Menus.SystemStatus);
                keys.Add(Menus.DeleteColsDBs);
            }

            if (nodeData is TreeViewRootNodeData)
            {
                var rootNode = nodeData as TreeViewRootNodeData;
                if (rootNode != null)
                {
                    if (rootNode.ConnectionInfo.ServiceId == MongoPlugin.PluginId)
                    {
                        keys.Add(Menus.NewDatabase);
                        keys.Add(Menus.WatchLogs);
                        keys.Add(Menus.CopyCollections);
                        keys.Add(Menus.OpenConsole);
                        keys.Add(Menus.SystemStatus);
                        keys.Add(Menus.DeleteColsDBs);
                    }
                }
            }
            if (nodeData is ReplicaSetMemberNode)
            {
                keys.Add(Menus.NewDatabase);
                keys.Add(Menus.CompactCollections);
                keys.Add(Menus.WatchLogs);
                keys.Add(Menus.CopyCollections);
                keys.Add(Menus.OpenConsole);
                keys.Add(Menus.SystemStatus);
                keys.Add(Menus.DeleteColsDBs);
            }
            else if (nodeData is DatabasesEmptyNode)
            {
                keys.Add(Menus.NewDatabase);
                keys.Add(Menus.CompactCollections);
            }

            if (nodeData is CollectionNode)
            {
                keys.Add(Menus.ViewCollection);
                keys.Add(Menus.DeleteCollection);
                keys.Add(Menus.RenameCollection);
                keys.Add(Menus.CopyCollection);
                keys.Add(Menus.CopyCollections);
                keys.Add(Menus.ManageIndexes);
                keys.Add(Menus.OpenConsole);
                keys.Add(Menus.SystemStatus);
            }

            if (nodeData is CollectionsNode)
            {
                keys.Add(Menus.CopyCollections);
                keys.Add(Menus.OpenConsole);
                keys.Add(Menus.SystemStatus);
                keys.Add(Menus.DeleteColsDBs);
            }

            if (nodeData is CollectionIndexesNode)
            {
                keys.Add(Menus.ManageIndexes);
            }
            if (nodeData is CollectionIndexNode)
            {
                keys.Add(Menus.ManageIndexes);
            }

            return keys;
        }
コード例 #19
0
ファイル: MenuController.cs プロジェクト: stevehjohn/Hub
        public IList<object> GetContextMenu(MingTreeViewItem originator, PluginInfo plugin)
        {
            _contextMenuOriginator = originator;

            var keys = plugin.Instance.TreeViewClient.GetActiveNodeContextMenuKeys(originator);

            _contextMenuKeyProviders.ToList().ForEach(item => keys = keys.Union(item.GetActiveNodeContextMenuKeys(originator)));

            var items = _contextMenuItems.Where(item => item is MenuItem ? keys.Contains(((MenuItem) item).Name) : true).ToList();

            if (items.Count > 0)
            {
                if (items[0] is Separator)
                {
                    items.RemoveAt(0);
                }
                if (items.Count > 0)
                {
                    if (items.Last() is Separator)
                    {
                        items.RemoveAt(items.Count - 1);
                    }
                }
            }

            return items;
        }
コード例 #20
0
ファイル: MingTreeViewItem.cs プロジェクト: stevehjohn/Hub
 public void AddChild(MingTreeViewItem child)
 {
     child._parent = this;
     _items.Add(child);
 }
コード例 #21
0
ファイル: MingApp.cs プロジェクト: stevehjohn/Hub
        public IEnumerable<string> GetActiveMenuKeys(MingTreeViewItem activeNode)
        {
            var keys = new List<string>();

            keys.Add(MenuFileAddConnection);
            if (activeNode != null)
            {
                keys.Add(MenuFileDeleteConnection);
            }
            keys.Add(MenuFileImport);
            if (SettingsManager.Instance.Connections.Count > 0)
            {
                keys.Add(MenuFileExport);
            }
            keys.Add(MenuFileExit);

            keys.Add(MenuHelpAbout);

            return keys;
        }