Пример #1
0
        public static FileGroupPropertiesDialog NewPropertiesDialog(FileGroup group, Form parentForm)
        {
            FileGroupPropertiesDialog fileGroupPropertiesDialog = new FileGroupPropertiesDialog(group, group.Text + " File Properties", "OK", parentForm);

            fileGroupPropertiesDialog.CreateControls(group);
            return(fileGroupPropertiesDialog);
        }
Пример #2
0
 public void PopulateCredentialsProfiles(FileGroup file)
 {
     if (file == null || _file != file)
     {
         _file = file;
         PopulateCredentialsProfilesWorker();
     }
 }
Пример #3
0
        protected void PopulateCredentialsProfiles(GroupBase group)
        {
            FileGroup file = group?.FileGroup;

            foreach (ICredentialsTabPage item in base.TabPages.OfType <ICredentialsTabPage>())
            {
                item.PopulateCredentialsProfiles(file);
            }
        }
Пример #4
0
 public static void RefreshAll(FileGroup fileGroup)
 {
     AllSmartGroups.ForEach(delegate(SmartGroup group)
     {
         if (group.FileGroup == fileGroup)
         {
             group.Refresh();
         }
     });
 }
Пример #5
0
        internal FileGroup GetSelectedFile()
        {
            FileGroup result       = null;
            TreeNode  selectedNode = base.SelectedNode;

            if (selectedNode != null)
            {
                result = (selectedNode as RdcTreeNode).FileGroup;
            }
            return(result);
        }
Пример #6
0
 private static void OnGroupChanged(GroupChangedEventArgs e)
 {
     if (e.ChangeType.HasFlag(ChangeType.TreeChanged) || e.ChangeType.HasFlag(ChangeType.PropertyChanged))
     {
         FileGroup fileGroup = e.Group.FileGroup;
         if (fileGroup != null)
         {
             fileGroup.HasChangedSinceWrite = true;
         }
     }
 }
Пример #7
0
 protected virtual void ReadXml(XmlNode xmlNode, FileGroup fileGroup, ICollection <string> errors)
 {
     if (!string.IsNullOrEmpty(XmlNodeName))
     {
         ReadXml(NodeActions, xmlNode, errors);
         if (base.Properties.Expanded.Value)
         {
             Expand();
         }
     }
 }
Пример #8
0
 public static void CloseFileGroup(FileGroup file)
 {
     file.AnyOrAllConnected(out bool anyConnected, out bool _);
     if (anyConnected)
     {
         DialogResult dialogResult = FormTools.YesNoDialog("There are active connections from " + file.Text + ". Are you sure you want to close it?");
         if (dialogResult == DialogResult.No)
         {
             return;
         }
     }
     if (SaveFileGroup(file) != 0)
     {
         ServerTree.Instance.RemoveNode(file);
         Program.Preferences.NeedToSave = true;
     }
 }
Пример #9
0
        private static void OpenFiles()
        {
            List <string> filesToOpen = Preferences.FilesToOpen;

            if (filesToOpen != null)
            {
                bool flag = true;
                foreach (string item in filesToOpen)
                {
                    FileGroup fileGroup = RdgFile.OpenFile(item);
                    if (fileGroup != null && flag)
                    {
                        flag = false;
                        ServerTree.Instance.SelectedNode = fileGroup;
                    }
                }
            }
        }
Пример #10
0
 public static FileGroup NewFile()
 {
     using (SaveFileDialog saveFileDialog = new SaveFileDialog())
     {
         saveFileDialog.Title            = "New File";
         saveFileDialog.Filter           = "RDCMan Groups (*.rdg)|*.rdg";
         saveFileDialog.AddExtension     = true;
         saveFileDialog.CheckPathExists  = true;
         saveFileDialog.InitialDirectory = GetWorkingDirectory();
         saveFileDialog.RestoreDirectory = false;
         if (saveFileDialog.ShowDialog() != DialogResult.OK)
         {
             return(null);
         }
         FileGroup fileGroup = new FileGroup(saveFileDialog.FileName);
         ServerTree.Instance.AddNode(fileGroup, ServerTree.Instance.RootNode);
         DoSaveWithRetry(fileGroup);
         return(fileGroup);
     }
 }
Пример #11
0
 protected virtual void WriteXml(XmlTextWriter tw, FileGroup file)
 {
     if (!string.IsNullOrEmpty(XmlNodeName))
     {
         tw.WriteStartElement(XmlNodeName);
         if (file == null)
         {
             WriteXmlSettingsGroups(tw);
         }
         foreach (TreeNode node2 in base.Nodes)
         {
             TServerRef node = node2 as TServerRef;
             if (ShouldWriteNode(node, file))
             {
                 tw.WriteElementString("server", node.ServerNode.FullPath);
             }
         }
         tw.WriteEndElement();
     }
 }
Пример #12
0
        public AddCredentialsDialog(RdcTreeNode node)
            : base("添加凭据", "保存")
        {
            _file = node.FileGroup;
            int rowIndex = 0;
            int tabIndex = 0;

            _profileNameTextBox         = FormTools.AddLabeledTextBox(this, "配置文件名:", ref rowIndex, ref tabIndex);
            _profileNameTextBox.Enabled = true;
            RdcTextBox   profileNameTextBox = _profileNameTextBox;
            EventHandler value = delegate
            {
                _profileNameUserCreated = true;
            };

            profileNameTextBox.TextChanged += value;
            _profileNameTextBox.Validate    = ValidateProfileName;
            _logonCredentialsUI.AddControlsToParent(this, LogonCredentialsDialogOptions.None, ref rowIndex, ref tabIndex);
            _logonCredentialsUI.UserNameTextBox.TextChanged += CredentialsChanged;
            _logonCredentialsUI.DomainTextBox.TextChanged   += CredentialsChanged;
            _logonCredentialsUI.EnableDisableControls(enable: true);
            FinalizeLayout(rowIndex, tabIndex);
        }
Пример #13
0
        private static bool ReadXml(XmlNode topNode, FileGroup fileGroup, ICollection <string> errors)
        {
            string text = "unknown";
            int    num  = 0;

            try
            {
                XmlNode namedItem = topNode.Attributes.GetNamedItem("programVersion");
                text = namedItem.InnerText;
            }
            catch
            {
            }
            try
            {
                XmlNode namedItem2 = topNode.Attributes.GetNamedItem("schemaVersion");
                num = int.Parse(namedItem2.InnerText);
            }
            catch
            {
            }
            fileGroup.SchemaVersion = num;
            if (num > 3)
            {
                DialogResult dialogResult = FormTools.YesNoDialog("{0} was written by a newer version of RDCMan ({1}). It may not load properly. If it does and is saved by this version, it will revert to the older file schema possibly losing information. Continue?".CultureFormat(fileGroup.GetFilename(), text));
                if (dialogResult == DialogResult.No)
                {
                    return(false);
                }
            }
            GroupBase.SchemaVersion = num;
            if (GroupBase.SchemaVersion <= 2)
            {
                fileGroup.EncryptionSettings.InheritSettingsType.Mode = InheritanceMode.None;
            }
            Dictionary <string, Helpers.ReadXmlDelegate> nodeActions = new Dictionary <string, Helpers.ReadXmlDelegate>();

            nodeActions["file"] = delegate(XmlNode childNode, RdcTreeNode group, ICollection <string> errors2)
            {
                (group as GroupBase).ReadXml(childNode, errors2);
            };
            foreach (IBuiltInVirtualGroup virtualGroup in Program.BuiltInVirtualGroups.Where((IBuiltInVirtualGroup v) => !string.IsNullOrEmpty(v.XmlNodeName)))
            {
                Helpers.ReadXmlDelegate readXmlDelegate2 = nodeActions[virtualGroup.XmlNodeName] = delegate(XmlNode childNode, RdcTreeNode group, ICollection <string> errors2)
                {
                    virtualGroup.ReadXml(childNode, fileGroup, errors2);
                };
            }
            nodeActions["version"] = delegate
            {
            };
            LongRunningActionForm.PerformOperation("Opening " + fileGroup.Pathname, showImmediately: false, delegate
            {
                foreach (XmlNode childNode in topNode.ChildNodes)
                {
                    if (nodeActions.TryGetValue(childNode.Name, out Helpers.ReadXmlDelegate value))
                    {
                        value(childNode, fileGroup, errors);
                    }
                    else
                    {
                        errors.Add("Unexpected Xml node {0} in '{1}'".CultureFormat(childNode.GetFullPath(), fileGroup.GetFilename()));
                    }
                }
            });
Пример #14
0
 bool IBuiltInVirtualGroup.ShouldWriteNode(ServerRef serverRef, FileGroup file)
 {
     return(ShouldWriteNode(serverRef, file));
 }
Пример #15
0
 void IBuiltInVirtualGroup.WriteXml(XmlTextWriter tw, FileGroup fileGroup)
 {
     WriteXml(tw, fileGroup);
 }
Пример #16
0
 void IBuiltInVirtualGroup.ReadXml(XmlNode xmlNode, FileGroup fileGroup, ICollection <string> errors)
 {
     ReadXml(xmlNode, fileGroup, errors);
 }
Пример #17
0
 protected virtual bool ShouldWriteNode(RdcTreeNode node, FileGroup file)
 {
     return(node.FileGroup == file);
 }
Пример #18
0
        private void PopulateNodeContextMenu(ContextMenuStrip menu, RdcTreeNode node)
        {
            menu.Items.Clear();
            if (node == null)
            {
                if (AnyOpenedEditableFiles())
                {
                    menu.Items.Add(new DelegateMenuItem("添加服务器", MenuNames.EditAddServer, AddNodeDialogHelper.AddServersDialog));
                    menu.Items.Add(new DelegateMenuItem("导入服务器配置", MenuNames.EditImportServers, AddNodeDialogHelper.ImportServersDialog));
                    menu.Items.Add("-");
                    menu.Items.Add(new DelegateMenuItem("添加群组", MenuNames.EditAddGroup, AddNodeDialogHelper.AddGroupDialog));
                }
                else
                {
                    ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem("Please open or create a file");
                    toolStripMenuItem.Enabled = false;
                    menu.Items.Add(toolStripMenuItem);
                }
                return;
            }
            GroupBase groupBase = node as GroupBase;

            if (groupBase != null)
            {
                groupBase.AnyOrAllConnected(out bool anyConnected, out bool allConnected);
                ToolStripMenuItem toolStripMenuItem = new DelegateMenuItem("整组连接", MenuNames.SessionConnect, groupBase.Connect);
                toolStripMenuItem.Enabled = !allConnected;
                menu.Items.Add(toolStripMenuItem);
                toolStripMenuItem         = new DelegateMenuItem("连接组为...", MenuNames.SessionConnectAs, groupBase.DoConnectAs);
                toolStripMenuItem.Enabled = !allConnected;
                menu.Items.Add(toolStripMenuItem);
                toolStripMenuItem         = new DelegateMenuItem("重连整组", MenuNames.SessionReconnect, groupBase.Reconnect);
                toolStripMenuItem.Enabled = anyConnected;
                menu.Items.Add(toolStripMenuItem);
                menu.Items.Add("-");
                toolStripMenuItem         = new DelegateMenuItem("断开整组", MenuNames.SessionDisconnect, groupBase.Disconnect);
                toolStripMenuItem.Enabled = anyConnected;
                menu.Items.Add(toolStripMenuItem);
                menu.Items.Add("-");
                toolStripMenuItem         = new DelegateMenuItem("登出整组", MenuNames.SessionLogOff, groupBase.LogOff);
                toolStripMenuItem.Enabled = (!Policies.DisableLogOff && anyConnected);
                menu.Items.Add(toolStripMenuItem);
                menu.Items.Add("-");
                toolStripMenuItem = new DelegateMenuItem("添加服务器", MenuNames.EditAddServer, delegate
                {
                    AddNodeDialogHelper.AddServersDialog(node);
                });
                toolStripMenuItem.Enabled = groupBase.CanAddServers();
                menu.Items.Add(toolStripMenuItem);
                toolStripMenuItem = new DelegateMenuItem("添加群组", MenuNames.EditAddGroup, delegate
                {
                    AddNodeDialogHelper.AddGroupDialog(node);
                });
                toolStripMenuItem.Enabled = groupBase.CanAddGroups();
                menu.Items.Add(toolStripMenuItem);
                toolStripMenuItem = new DelegateMenuItem("添加智能群组", MenuNames.EditAddSmartGroup, delegate
                {
                    AddNodeDialogHelper.AddSmartGroupDialog(node);
                });
                toolStripMenuItem.Enabled = groupBase.CanAddGroups();
                menu.Items.Add(toolStripMenuItem);
                menu.Items.Add("-");
                FileGroup file = node as FileGroup;
                if (file != null)
                {
                    toolStripMenuItem = new DelegateMenuItem("保存 " + file.GetFilename(), MenuNames.FileSave, delegate
                    {
                        Program.TheForm.DoFileSave(file);
                    });
                    toolStripMenuItem.Enabled = file.AllowEdit(popUI: false);
                    menu.Items.Add(toolStripMenuItem);
                    menu.Items.Add(new DelegateMenuItem("关闭 " + file.GetFilename(), MenuNames.FileClose, delegate
                    {
                        Program.TheForm.DoFileClose(file);
                    }));
                }
                else
                {
                    toolStripMenuItem = new DelegateMenuItem("删除服务器", MenuNames.EditRemoveServers, delegate
                    {
                        DoRemoveChildren(node);
                    });
                    toolStripMenuItem.Enabled = groupBase.CanRemoveChildren();
                    menu.Items.Add(toolStripMenuItem);
                    toolStripMenuItem = new DelegateMenuItem("删除群组", MenuNames.EditRemove, delegate
                    {
                        ConfirmRemove(node, askUser: true);
                    });
                    toolStripMenuItem.Enabled = node.CanRemove(popUI: false);
                    menu.Items.Add(toolStripMenuItem);
                }
                menu.Items.Add("-");
                toolStripMenuItem         = new DelegateMenuItem("属性", MenuNames.EditProperties, node.DoPropertiesDialog);
                toolStripMenuItem.Enabled = node.HasProperties;
                menu.Items.Add(toolStripMenuItem);
            }
            else
            {
                ServerBase server = node as ServerBase;
                MenuHelper.AddSessionMenuItems(menu, server);
                menu.Items.Add("-");
                MenuHelper.AddDockingMenuItems(menu, server);
                menu.Items.Add("-");
                MenuHelper.AddMaintenanceMenuItems(menu, server);
            }
        }
Пример #19
0
 protected FileGroupPropertiesDialog(FileGroup group, string dialogTitle, string acceptButtonText, Form parentForm)
     : base(group, dialogTitle, acceptButtonText, parentForm)
 {
 }
Пример #20
0
 protected override bool ShouldWriteNode(RdcTreeNode node, FileGroup file)
 {
     return(file == null);
 }
Пример #21
0
 public SaveCredentialsDialog(FileGroup file, string name)
     : base("保存配置: " + name, "保存")
 {
     _file = file;
     InitializeComponent(name);
 }
Пример #22
0
 public static FileGroup OpenFile(string filename)
 {
     using (Helpers.Timer("reading {0}", filename))
     {
         XmlDocument   xmlDocument   = new XmlDocument();
         XmlTextReader xmlTextReader = null;
         XmlNode       topNode;
         try
         {
             xmlTextReader = new XmlTextReader(filename);
             xmlTextReader.WhitespaceHandling = WhitespaceHandling.None;
             xmlTextReader.MoveToContent();
             topNode = xmlDocument.ReadNode(xmlTextReader);
         }
         catch (Exception ex)
         {
             FormTools.ErrorDialog(ex.Message);
             return(null);
         }
         finally
         {
             xmlTextReader?.Close();
         }
         if (topNode == null)
         {
             throw new FileLoadException(filename + ": File format error");
         }
         FileGroup fileGroup  = new FileGroup(filename);
         FileGroup fileGroup2 = (from f in ServerTree.Instance.Nodes.OfType <FileGroup>()
                                 where f.Pathname.Equals(fileGroup.Pathname, StringComparison.OrdinalIgnoreCase)
                                 select f).FirstOrDefault();
         if (fileGroup2 == null)
         {
             try
             {
                 List <string> errors = new List <string>();
                 ServerTree.Instance.Operation((OperationBehavior)31, delegate
                 {
                     ServerTree.Instance.AddNode(fileGroup, ServerTree.Instance.RootNode);
                     if (!ReadXml(topNode, fileGroup, errors))
                     {
                         throw new Exception(string.Empty);
                     }
                 });
                 if (errors.Count > 0)
                 {
                     StringBuilder stringBuilder = new StringBuilder("The following errors were encountered:").AppendLine().AppendLine();
                     foreach (string item in errors)
                     {
                         stringBuilder.AppendLine(item);
                     }
                     stringBuilder.AppendLine().Append("The file was not loaded completely. If it is saved it almost certainly means losing information. Continue?");
                     DialogResult dialogResult = FormTools.ExclamationDialog(stringBuilder.ToString(), MessageBoxButtons.YesNo);
                     if (dialogResult == DialogResult.No)
                     {
                         throw new Exception(string.Empty);
                     }
                 }
                 using (Helpers.Timer("sorting root, builtin groups and file"))
                 {
                     ServerTree.Instance.SortRoot();
                     foreach (GroupBase builtInVirtualGroup in Program.BuiltInVirtualGroups)
                     {
                         ServerTree.Instance.SortGroup(builtInVirtualGroup);
                         ServerTree.Instance.OnGroupChanged(builtInVirtualGroup, ChangeType.TreeChanged);
                     }
                     ServerTree.Instance.SortGroup(fileGroup, recurse: true);
                     ServerTree.Instance.OnGroupChanged(fileGroup, ChangeType.TreeChanged);
                 }
                 SmartGroup.RefreshAll(fileGroup);
                 fileGroup.VisitNodes(delegate(RdcTreeNode node)
                 {
                     GroupBase groupBase = node as GroupBase;
                     if (groupBase != null && groupBase.Properties.Expanded.Value)
                     {
                         groupBase.Expand();
                     }
                 });
                 Encryption.DecryptPasswords();
                 fileGroup.CheckCredentials();
                 fileGroup.VisitNodes(delegate(RdcTreeNode n)
                 {
                     n.ResetInheritance();
                 });
                 fileGroup.HasChangedSinceWrite = false;
                 Program.Preferences.NeedToSave = true;
                 return(fileGroup);
             }
             catch (Exception ex2)
             {
                 if (!string.IsNullOrEmpty(ex2.Message))
                 {
                     FormTools.ErrorDialog(ex2.Message);
                 }
                 ServerTree.Instance.RemoveNode(fileGroup);
                 return(null);
             }
         }
         FormTools.InformationDialog("{0} is already open as '{1}'".CultureFormat(fileGroup.Pathname, fileGroup2.Text));
         return(fileGroup2);
     }
 }
Пример #23
0
 public void CreateControls(bool inputServerName, LogonCredentials logonCredentials, ConnectionSettings connectionSettings, FileGroup fileGroup)
 {
     QuickConnectTabPage = new QuickConnectTabPage(this, logonCredentials);
     QuickConnectTabPage.CreateControls(inputServerName, fileGroup);
     AddTabPage(QuickConnectTabPage);
     connectionSettings.InheritSettingsType.Mode = InheritanceMode.Disabled;
     AddTabPage(connectionSettings.CreateTabPage(this));
     InitButtons();
 }