private void TreeView_MouseDown(object sender, MouseButtonEventArgs e)
 {
     if (e.RightButton == MouseButtonState.Pressed)
     {
         Point point = e.GetPosition(TreeView_Item);
         RemoteTreeViewItem element = TreeView_Item.GetElementFromPoint <RemoteTreeViewItem>(point);
         foreach (MenuItem item in TreeView_Item.ContextMenu.Items)
         {
             item.IsEnabled = true;                                                       //将所有右键菜单启用
         }
         if (element != null)
         {
             element.IsSelected = true;
             if (element.RemoteType == RemoteType.dir)
             {
                 ((MenuItem)TreeView_Item.ContextMenu.Items[0]).IsEnabled = false; //打开
                 ((MenuItem)TreeView_Item.ContextMenu.Items[1]).IsEnabled = false; //"打开(后台)"
                 ((MenuItem)TreeView_Item.ContextMenu.Items[2]).IsEnabled = false; //"打开(外部)"
             }
         }
         else
         {
             TreeViewItem item = TreeView_Item.SelectedItem as TreeViewItem;
             if (item != null)
             {
                 item.IsSelected = false;
             }
             ((MenuItem)TreeView_Item.ContextMenu.Items[0]).IsEnabled = false; //打开
             ((MenuItem)TreeView_Item.ContextMenu.Items[1]).IsEnabled = false; //"打开(后台)"
             ((MenuItem)TreeView_Item.ContextMenu.Items[2]).IsEnabled = false; //"打开(外部)"
             ((MenuItem)TreeView_Item.ContextMenu.Items[5]).IsEnabled = false; //"重命名"
             ((MenuItem)TreeView_Item.ContextMenu.Items[6]).IsEnabled = false; //"删除"
         }
     }
 }
 void IDropTarget.DragOver(IDropInfo dropInfo)
 {
     if (DefaultDropHandler.CanAcceptData(dropInfo))
     {
         var isTreeViewItem          = dropInfo.InsertPosition.HasFlag(RelativeInsertPosition.TargetItemCenter) && dropInfo.VisualTargetItem is TreeViewItem;
         RemoteTreeViewItem srcItem  = dropInfo.Data as RemoteTreeViewItem;
         RemoteTreeViewItem destItem = dropInfo.TargetItem as RemoteTreeViewItem;
         if (destItem != null)
         {
             if (destItem.RemoteType != RemoteType.dir && destItem.Parent == srcItem.Parent)
             {
                 return;
             }
             if (destItem == srcItem.Parent)
             {
                 return;
             }
         }
         else
         {
             if (srcItem.Parent is RemoteTreeViewItem == false)
             {
                 return;
             }
         }
         dropInfo.Effects = DefaultDropHandler.ShouldCopyData(dropInfo) ? DragDropEffects.Copy : DragDropEffects.Move;
         if (isTreeViewItem)
         {
             dropInfo.DropTargetAdorner = typeof(RemooeTreeHighlightAdorner);
         }
     }
 }
Beispiel #3
0
        /// <summary>添加条目,treeViewItem=选中的节点,会自动处理父子逻辑</summary>
        public static RemoteTreeViewItem Insert(RemoteType type, RemoteTreeViewItem selectItem, string name)
        {
            ItemCollection itemCollection;

            if (selectItem == null)
            {
                itemCollection = _remoteTreeView.Items;
            }
            else if (selectItem.RemoteType == RemoteType.dir)
            {
                itemCollection = selectItem.Items;
            }
            else
            {
                itemCollection = ((ItemsControl)selectItem.Parent).Items;
            }

            //计算文件夹在前端的合适插入位置
            int index = 0;

            if (type == RemoteType.dir)
            {
                foreach (RemoteTreeViewItem item in itemCollection)
                {
                    if (item.RemoteType != RemoteType.dir)
                    {
                        break;
                    }
                    index += 1;
                }
            }
            else
            {
                index = itemCollection.Count;
            }
            //计算项目的父Id
            string uuid = null;

            if (selectItem != null)
            {
                if (selectItem?.RemoteType == RemoteType.dir)
                {
                    uuid = selectItem.uuid;
                }
                else
                {
                    RemoteTreeViewItem viewItem = selectItem.Parent as RemoteTreeViewItem;
                    if (viewItem != null)
                    {
                        uuid = viewItem.uuid;
                    }
                }
            }
            string             id           = Database.InsertRemoteItem(type, uuid, name);
            RemoteTreeViewItem treeViewItem = new RemoteTreeViewItem(name, type, id);

            itemCollection.Insert(index, treeViewItem);

            return(treeViewItem);
        }
Beispiel #4
0
        /// <summary>加载远程桌面的条目</summary>
        public static void LoadItems(TreeView treeView)
        {
            _remoteTreeView = treeView;
            _remoteRunTime  = new Dictionary <string, RemoteRunTime>();

            Dictionary <string, RemoteTreeViewItem> keyValues = new Dictionary <string, RemoteTreeViewItem>();

            foreach (DbItemDirectory item in Database.EnumDirectory())
            {
                RemoteTreeViewItem treeViewItem = new RemoteTreeViewItem(item.Name, RemoteType.dir, item.Id);
                if (string.IsNullOrEmpty(item.ParentId))
                {
                    _remoteTreeView.Items.Add(treeViewItem);
                }
                else
                {
                    keyValues[item.ParentId].Items.Add(treeViewItem);
                }
                keyValues.Add(item.Id, treeViewItem);
            }
            foreach (DbItemRemoteLink item in Database.EnumRemoteLink())
            {
                RemoteTreeViewItem treeViewItem = new RemoteTreeViewItem(item.Name, (RemoteType)(item.Type), item.Id);
                if (string.IsNullOrEmpty(item.ParentId))
                {
                    _remoteTreeView.Items.Add(treeViewItem);
                }
                else
                {
                    keyValues[item.ParentId].Items.Add(treeViewItem);
                }
                keyValues.Add(item.Id, treeViewItem);
            }
        }
Beispiel #5
0
        private void Home_Tree_EditHeaderClosing(object sender, CancelEditEventArgs e)
        {
            e.Cancel = true;
            RemoteTreeViewItem treeItem = sender as RemoteTreeViewItem;

            if (treeItem == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(e.NewValue))
            {
                MainWindow.ShowNoticeDialog("提示", "名称不能为空");
                return;
            }

            if (treeItem.RemoteType == RemoteType.dir)
            {
                RemoteItems.GetItemDirectory(treeItem.uuid);
                RemoteItems.ItemDirectory.Name = e.NewValue;
                RemoteItems.UpdateItemDirectory();
            }
            else if (RemoteItems.ItemRemoteLink != null && RemoteItems.ItemRemoteLink.Id == treeItem.uuid)
            {
                RemoteItems.ItemRemoteLink.Name = e.NewValue;
                RemoteItems.UpdateItemRemoteLink();
                TextBox_Name.Text = e.NewValue;
            }

            RemoteItems.SetItemName(treeItem, e.NewValue);
        }
Beispiel #6
0
        private void NewRemoteItem(RemoteTreeViewItem selectItem, RemoteType type, string name = null)
        {
            if (name == null)
            {
                if (type == RemoteType.dir)
                {
                    name = "新建目录";
                }
                if (type == RemoteType.rdp)
                {
                    name = "新建RDP连接";
                }
                if (type == RemoteType.ssh)
                {
                    name = "新建SSH连接";
                }
                if (type == RemoteType.telnet)
                {
                    name = "新建Telnet连接";
                }
            }

            var treeViewItem = RemoteItems.Insert(type, selectItem, name);

            treeViewItem.UpdateLayout();
            treeViewItem.HeaderEdit(Home_Tree_EditHeaderClosing);
        }
        void IDropTarget.Drop(IDropInfo dropInfo)
        {
            if (dropInfo == null || dropInfo.DragInfo == null)
            {
                return;
            }

            RemoteTreeViewItem srcItem  = dropInfo.Data as RemoteTreeViewItem;
            RemoteTreeViewItem destItem = dropInfo.TargetItem as RemoteTreeViewItem;

            RemoteItems.Move(srcItem, destItem);
        }
Beispiel #8
0
        private async void DeleteRemoteItem(RemoteTreeViewItem selectItem)
        {
            MainWindow mainWindow = Window.GetWindow(this) as MainWindow;

            if (mainWindow != null)
            {
                var result = await mainWindow.ShowMessageAsync("提示", $"是否要删除 “{selectItem.Header}”", MessageDialogStyle.AffirmativeAndNegative);

                if (result == MessageDialogResult.Affirmative)
                {
                    RemoteItems.Delete(selectItem);
                }
            }
        }
Beispiel #9
0
        private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (e.NewValue != null)
            {
                RemoteTreeViewItem selectItem = (RemoteTreeViewItem)e.NewValue;

                if (selectItem.RemoteType != RemoteType.dir)
                {
                    ScrollViewer.Visibility = Visibility.Visible;
                    RemoteItems.GetItemRemoteLink(selectItem.uuid);
                    ScrollViewer.DataContext   = RemoteItems.ItemRemoteLink;
                    TextBox_Password.Password  = RemoteItems.ItemRemoteLink.Password;
                    TextBox_Name.Text          = RemoteItems.ItemRemoteLink.Name;
                    TextBox_Password.IsEnabled = true;

                    _currentSetControl?.UnLoaded();
                    Grid_PrivateKey.Visibility = Visibility.Collapsed;
                    if (selectItem.RemoteType == RemoteType.rdp)
                    {
                        _currentSetControl = PART_SettingRdp;
                    }
                    if (selectItem.RemoteType == RemoteType.ssh)
                    {
                        //加载私钥
                        if (RemoteItems.ItemRemoteLink.PrivateKey == null)
                        {
                            CheckBox_PrivateKey.IsChecked = false;
                        }
                        else
                        {
                            CheckBox_PrivateKey.IsChecked = true;
                        }
                        CheckBox_PrivateKey_Click(null, null);
                        _currentSetControl         = PART_SettingSsh;
                        Grid_PrivateKey.Visibility = Visibility.Visible;
                    }
                    if (selectItem.RemoteType == RemoteType.telnet)
                    {
                        _currentSetControl = PART_SettingTelnet;
                    }
                    Expander_Setting.Content = _currentSetControl;
                    _currentSetControl?.Loaded(RemoteItems.ItemRemoteLink);
                }
                else
                {
                    ScrollViewer.Visibility = Visibility.Collapsed;
                }
            }
        }
Beispiel #10
0
        private void TreeView_KeyDown(object sender, KeyEventArgs e)
        {
            RemoteTreeViewItem selectItem = TreeView_Item.SelectedItem as RemoteTreeViewItem;

            if (selectItem == null)
            {
                return;
            }

            if (e.Key == Key.F2)
            {
                selectItem.HeaderEdit(Home_Tree_EditHeaderClosing);
            }
            if (e.Key == Key.Delete)
            {
                RemoteItems.Delete(selectItem);
            }
        }
Beispiel #11
0
 private void TreeView_MouseDoubleClick(object sender, MouseButtonEventArgs e)
 {
     try
     {
         Point point = e.GetPosition(TreeView_Item);
         RemoteTreeViewItem element = TreeView_Item.GetElementFromPoint <RemoteTreeViewItem>(point);
         if (element != null)
         {
             if (element.IsHeaderEdit == false && element.RemoteType != RemoteType.dir)
             {
                 RemoteItems.OpenRemote((RemoteTreeViewItem)TreeView_Item.SelectedItem, DbItemSetting.OPEN_DEFAULT);
             }
         }
     }
     catch (Exception ex)
     {
         MainWindow.ShowMessageDialog("错误", ex.Message);
     }
 }
Beispiel #12
0
        /// <summary>打开远程桌面</summary>
        public static void OpenRemote(RemoteTreeViewItem treeTtem, int openMode)
        {
            IRemoteControl   remoteControl  = null;
            DbItemRemoteLink itemRemoteLink = Database.GetRemoteLink(treeTtem.uuid);

            if (string.IsNullOrEmpty(itemRemoteLink.Server))
            {
                throw new Exception("服务器地址不能为空。");
            }

            DbItemSetting itemSetting = Database.GetRemoteSetting(itemRemoteLink);

            if (openMode == DbItemSetting.OPEN_DEFAULT)
            {
                openMode = new FinalItemSetting(itemSetting).OpenMode;
            }

            //如果指定的远程桌面有在后台运行,则跳转
            if (_remoteRunTime.ContainsKey(treeTtem.uuid))
            {
                var value = _remoteRunTime[treeTtem.uuid];
                if (value.OpenMode == openMode)
                {
                    value.RemoteControl.Jump();
                    return;
                }
                value.RemoteControl.Remove();
                _remoteRunTime.Remove(treeTtem.uuid);
            }

            //开始连接远程桌面
            if (openMode == DbItemSetting.OPEN_WINDOW)
            {
                remoteControl = new RemoteWinControl();
            }
            else
            {
                remoteControl = new RemoteTabControl();
            }
            remoteControl.Open(itemRemoteLink, itemSetting, openMode == DbItemSetting.OPEN_TAB);
            _remoteRunTime.Add(treeTtem.uuid, new RemoteRunTime(openMode, remoteControl));
            remoteControl.OnRemove += (sender, e) => _remoteRunTime.Remove(treeTtem.uuid);
        }
Beispiel #13
0
        private void TreeView_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (e.RightButton == MouseButtonState.Pressed)
            {
                Point point = e.GetPosition(PART_RemoteTree);
                RemoteTreeViewItem            element           = PART_RemoteTree.GetElementFromPoint <RemoteTreeViewItem>(point);
                Dictionary <string, MenuItem> menuItemKeyValues = new Dictionary <string, MenuItem>();
                foreach (var item in PART_RemoteTree.ContextMenu.Items)
                {
                    MenuItem menuItem = item as MenuItem;
                    if (menuItem != null)
                    {
                        menuItem.IsEnabled = true;//将所有右键菜单启用
                        menuItemKeyValues.Add(menuItem.Name, menuItem);
                    }
                }

                if (element != null)
                {
                    element.IsSelected = true;
                    if (element.RemoteType == RemoteType.dir)
                    {
                        menuItemKeyValues["MenuItem_Link"].IsEnabled         = false;
                        menuItemKeyValues["MenuItem_LinkBackend"].IsEnabled  = false;
                        menuItemKeyValues["MenuItem_LinkSeparate"].IsEnabled = false;
                    }
                }
                else
                {
                    TreeViewItem item = PART_RemoteTree.SelectedItem as TreeViewItem;
                    if (item != null)
                    {
                        item.IsSelected = false;
                    }
                    menuItemKeyValues["MenuItem_Link"].IsEnabled         = false;
                    menuItemKeyValues["MenuItem_LinkBackend"].IsEnabled  = false;
                    menuItemKeyValues["MenuItem_LinkSeparate"].IsEnabled = false;
                    menuItemKeyValues["MenuItem_Rename"].IsEnabled       = false;
                    menuItemKeyValues["MenuItem_Delete"].IsEnabled       = false;
                }
            }
        }
Beispiel #14
0
        /// <summary>删除一条远程桌面的记录</summary>
        public static void Delete(RemoteTreeViewItem selectItem)
        {
            int i;

            Database.DeleteRemoteItem(selectItem.RemoteType, selectItem.uuid);
            ItemCollection itemCollection = selectItem.Parent is TreeView ? _remoteTreeView.Items : ((TreeViewItem)selectItem.Parent).Items;

            i = itemCollection.IndexOf(selectItem);
            itemCollection.Remove(selectItem);
            if (i >= itemCollection.Count)
            {
                i -= 1;
            }
            if (i >= 0)
            {
                RemoteTreeViewItem treeViewItem = (RemoteTreeViewItem)itemCollection[i];
                treeViewItem.IsSelected = true;
                treeViewItem.Focus();
            }
        }
Beispiel #15
0
        private void Home_Tree_EditHeaderClosing(object sender, CancelEditEventArgs e)
        {
            RemoteTreeViewItem treeItem = ((RemoteTreeViewItem)sender); if (treeItem == null)

            {
                return;
            }

            if (string.IsNullOrEmpty(e.NewValue))
            {
                MainWindow.ShowMessageDialog("提示", "名称不能为空");
                e.Cancel = true;
                return;
            }

            if (treeItem.RemoteType == RemoteType.dir)
            {
                DbItemDirectory itemDirectory = Database.GeyDirectory(treeItem.uuid);
                itemDirectory.Name = e.NewValue;
                Database.Update(itemDirectory.Id, itemDirectory);
            }
            else
            {
                if (_itemRemoteLink != null && _itemRemoteLink.Id == treeItem.uuid)
                {
                    _itemRemoteLink.Name = e.NewValue;
                    Database.Update(_itemRemoteLink.Id, _itemRemoteLink);
                    TextBox_Name.Text = e.NewValue;
                }
                else
                {
                    DbItemRemoteLink itemRemoteLink = Database.GetRemoteLink(treeItem.uuid);
                    itemRemoteLink.Name = e.NewValue;
                    Database.Update(itemRemoteLink.Id, itemRemoteLink);
                }
            }
        }
Beispiel #16
0
        private void MenuItem_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                MenuItem menuItem = sender as MenuItem; if (menuItem == null)
                {
                    return;
                }
                RemoteTreeViewItem selectItem = (RemoteTreeViewItem)TreeView_Item.SelectedItem;
                RemoteTreeViewItem treeViewItem;
                switch (menuItem.Header.ToString())
                {
                case "新建目录":
                    treeViewItem = RemoteItems.Insert(RemoteType.dir, selectItem, "新建目录");;
                    if (treeViewItem.IsVisible)
                    {
                        treeViewItem.Loaded += (treeItemsender, treeIteme) => treeViewItem.HeaderEdit(Home_Tree_EditHeaderClosing);
                    }
                    break;

                case "RDP连接":
                    treeViewItem = RemoteItems.Insert(RemoteType.rdp, selectItem, "新建RDP连接");
                    if (treeViewItem.IsVisible)
                    {
                        treeViewItem.Loaded += (treeItemsender, treeIteme) => treeViewItem.HeaderEdit(Home_Tree_EditHeaderClosing);
                    }
                    break;

                case "SSH连接":
                    treeViewItem = RemoteItems.Insert(RemoteType.ssh, selectItem, "新建SSH连接");
                    if (treeViewItem.IsVisible)
                    {
                        treeViewItem.Loaded += (treeItemsender, treeIteme) => treeViewItem.HeaderEdit(Home_Tree_EditHeaderClosing);
                    }
                    break;

                case "Telnet连接":
                    treeViewItem = RemoteItems.Insert(RemoteType.telnet, selectItem, "新建Telnet连接");
                    if (treeViewItem.IsVisible)
                    {
                        treeViewItem.Loaded += (treeItemsender, treeIteme) => treeViewItem.HeaderEdit(Home_Tree_EditHeaderClosing);
                    }
                    break;

                case "删除":
                    RemoteItems.Delete(selectItem);
                    break;

                case "打开":
                    RemoteItems.OpenRemote(selectItem, DbItemSetting.OPEN_TAB);
                    break;

                case "打开(后台)":
                    RemoteItems.OpenRemote(selectItem, DbItemSetting.OPEN_TAB_BACKSTAGE);
                    break;

                case "打开(外部)":
                    RemoteItems.OpenRemote(selectItem, DbItemSetting.OPEN_WINDOW);
                    break;

                case "重命名":
                    selectItem.HeaderEdit(Home_Tree_EditHeaderClosing);
                    break;
                }
            }
            catch (Exception ex)
            {
                MainWindow.ShowMessageDialog("错误", ex.Message);
            }
        }
Beispiel #17
0
 private void MenuItem_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         MenuItem menuItem = sender as MenuItem;
         if (menuItem == null)
         {
             return;
         }
         RemoteTreeViewItem selectItem = (RemoteTreeViewItem)PART_RemoteTree.SelectedItem;
         if (menuItem.Name == "MenuItem_NewDir")
         {
             NewRemoteItem(selectItem, RemoteType.dir);
         }
         else if (menuItem.Name == "MenuItem_Newrdp")
         {
             NewRemoteItem(selectItem, RemoteType.rdp);
         }
         else if (menuItem.Name == "MenuItem_Newssh")
         {
             NewRemoteItem(selectItem, RemoteType.ssh);
         }
         else if (menuItem.Name == "MenuItem_NewTelnet")
         {
             NewRemoteItem(selectItem, RemoteType.telnet);
         }
         else if (menuItem.Name == "MenuItem_Delete")
         {
             DeleteRemoteItem(selectItem);
         }
         else if (menuItem.Name == "MenuItem_Link")
         {
             RemoteItems.Open(selectItem, DbItemSetting.OPEN_TAB);
         }
         else if (menuItem.Name == "MenuItem_LinkBackend")
         {
             RemoteItems.Open(selectItem, DbItemSetting.OPEN_TAB_BACKSTAGE);
         }
         else if (menuItem.Name == "MenuItem_LinkSeparate")
         {
             RemoteItems.Open(selectItem, DbItemSetting.OPEN_WINDOW);
         }
         else if (menuItem.Name == "MenuItem_Rename")
         {
             selectItem.HeaderEdit(Home_Tree_EditHeaderClosing);
         }
         else if (menuItem.Name == "MenuItem_Shear")
         {
             RemoteItems.Shear(selectItem);
         }
         else if (menuItem.Name == "MenuItem_Copy")
         {
             RemoteItems.Copy(selectItem);
         }
         else if (menuItem.Name == "MenuItem_Paste")
         {
             RemoteItems.Paste(selectItem);
         }
     }
     catch (Exception ex)
     {
         MainWindow.ShowMessageDialog("错误", ex.Message);
     }
 }
Beispiel #18
0
        private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (e.NewValue != null)
            {
                if (_itemRemoteLink != null)
                {
                    Database.Update(_itemRemoteLink.Id, _itemRemoteLink);
                }
                RemoteTreeViewItem selectItem = (RemoteTreeViewItem)e.NewValue;

                if (selectItem.RemoteType != RemoteType.dir)
                {
                    ScrollViewer.Visibility   = Visibility.Visible;
                    _itemRemoteLink           = Database.GetRemoteLink(selectItem.uuid);
                    ScrollViewer.DataContext  = _itemRemoteLink;
                    TextBox_Password.Password = _itemRemoteLink.Password;
                    TextBox_Name.Text         = _itemRemoteLink.Name;

                    switch (selectItem.RemoteType)
                    {
                    case RemoteType.rdp:
                        Expander_Setting.Content = _home_Remote_rdp;
                        _home_Remote_rdp.Load(_itemRemoteLink);
                        Grid_PrivateKey.Visibility = Visibility.Collapsed;
                        break;

                    case RemoteType.ssh:
                        //加载私钥
                        if (_itemRemoteLink.PrivateKey == null)
                        {
                            CheckBox_PrivateKey.IsChecked = false;
                        }
                        else
                        {
                            CheckBox_PrivateKey.IsChecked = true;
                        }
                        CheckBox_PrivateKey_Click(null, null);

                        Expander_Setting.Content = _home_Remote_ssh;
                        _home_Remote_ssh.Load(_itemRemoteLink);
                        Grid_PrivateKey.Visibility = Visibility.Visible;
                        break;

                    case RemoteType.telnet:
                        Expander_Setting.Content = _home_Remote_telnet;
                        _home_Remote_telnet.Load(_itemRemoteLink);
                        TextBox_Password.IsEnabled = true;
                        Grid_PrivateKey.Visibility = Visibility.Collapsed;
                        break;

                    default:
                        Expander_Setting.Content = null;
                        break;
                    }
                }
                else
                {
                    ScrollViewer.Visibility = Visibility.Collapsed;
                }
            }
        }