예제 #1
0
        public static List <SessionGroup> Load(string xmlFilePath)
        {
            List <SessionGroup> sessionGroups = new List <SessionGroup>();

            if (!File.Exists(xmlFilePath))
            {
                return(sessionGroups);
            }

            XmlDocument doc = new XmlDocument();

            doc.Load(xmlFilePath);

            XmlNodeList groupNodes = doc.SelectNodes("//groups/descendant::group");

            foreach (XmlNode groupNode in groupNodes)
            {
                SessionGroup group = new SessionGroup(groupNode.Attributes["name"].Value);
                foreach (XmlNode sessionNode in groupNode.SelectNodes("session"))
                {
                    SessionInfo session = new SessionInfo();
                    session.Type     = (SessionType)int.Parse(sessionNode.Attributes["type"].Value);
                    session.Host     = sessionNode.Attributes["host"].Value;
                    session.Username = sessionNode.Attributes["username"].Value;

                    group.Sessions.Add(session);
                }

                sessionGroups.Add(group);
            }

            return(sessionGroups);
        }
예제 #2
0
        private List <SessionGroup> GetGroupsAndSessions()
        {
            List <SessionGroup> sessionGroups = new List <SessionGroup>();

            foreach (TreeNode groupNode in sessionsNode.Nodes)
            {
                if (!(groupNode.Tag is SessionGroup))
                {
                    continue;
                }

                SessionGroup group = (SessionGroup)groupNode.Tag;
                group.Sessions.Clear();

                foreach (TreeNode sessionNode in groupNode.Nodes)
                {
                    if (!(sessionNode.Tag is SessionInfo))
                    {
                        continue;
                    }

                    group.Sessions.Add((SessionInfo)sessionNode.Tag);
                }

                sessionGroups.Add(group);
            }

            return(sessionGroups);
        }
예제 #3
0
        private TreeNode GetSessionGroupTreeNode(SessionGroup group)
        {
            foreach (TreeNode node in sessionsNode.Nodes)
            {
                if (node.Tag == group)
                {
                    return(node);
                }
            }

            return(null);
        }
예제 #4
0
        private void SessionsPanel_Load(object sender, EventArgs e)
        {
            // Load MuTTY sessions from configuration
            sessionsNode = new TreeNode("Sessions");
            tvSessions.Nodes.Add(sessionsNode);

            List <SessionGroup> sessionGroups = Configuration.Load(ConfigFile);

            foreach (SessionGroup group in sessionGroups)
            {
                TreeNode groupNode = new TreeNode(group.Name);
                groupNode.Tag = group;

                foreach (SessionInfo session in group.Sessions)
                {
                    TreeNode sessionNode = new TreeNode(session.GetName());
                    sessionNode.Tag = session;
                    groupNode.Nodes.Add(sessionNode);
                }

                sessionsNode.Nodes.Add(groupNode);
            }

            // Add default session group if none exist
            if (sessionGroups.Count == 0)
            {
                SessionGroup defaultGroup = new SessionGroup("Default Group");

                TreeNode defaultGroupNode = new TreeNode(defaultGroup.Name);
                defaultGroupNode.Tag = defaultGroup;

                sessionsNode.Nodes.Add(defaultGroupNode);
            }

            sessionsNode.ExpandAll();

            // Try to load existing PuTTY sessions from registry
            puttySessionsNode = new TreeNode("PuTTY Sessions");
            tvSessions.Nodes.Add(puttySessionsNode);

            List <SessionInfo> existingSessions = TryLoadExistingPuTTYSessions();

            foreach (SessionInfo session in existingSessions)
            {
                TreeNode node = new TreeNode(session.GetName());
                node.Tag = session;
                puttySessionsNode.Nodes.Add(node);
            }

            puttySessionsNode.Expand();
        }
예제 #5
0
        private void ShowNewGroupDialog()
        {
            SessionGroupOptionsDialog dlg = new SessionGroupOptionsDialog();

            dlg.DialogTitle  = "New Group";
            dlg.OKButtonText = "Add Group";

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                SessionGroup group = new SessionGroup(dlg.GroupName);
                TreeNode     node  = new TreeNode(group.Name);
                node.Tag = group;
                sessionsNode.Nodes.Add(node);
                SaveGroupsAndSessions();
            }
        }
예제 #6
0
        private void btnConnect_Click(object sender, EventArgs e)
        {
            if (txtHost.Text.Trim().Length == 0)
            {
                MessageBox.Show("Please enter a hostname.", "No hostname", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }

            Session.Type     = (SessionType)cbSessionType.SelectedItem;
            Session.Host     = txtHost.Text;
            Session.Username = txtUsername.Text;

            SelectedGroup = (SessionGroup)groupComboBox.SelectedItem;

            DialogResult = DialogResult.OK;
            Close();
        }
예제 #7
0
        private void DeleteGroupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ctxMenuSessionGroup.Tag is TreeNode && ctxMenuSessionGroup.Tag != sessionsNode)
            {
                TreeNode     node  = (TreeNode)ctxMenuSessionGroup.Tag;
                SessionGroup group = (SessionGroup)node.Tag;

                if (MessageBox.Show("Do you really want to delete group '" + group.Name + "'?",
                                    "Delete group", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
                {
                    return;
                }

                node.Remove();
                SaveGroupsAndSessions();
            }
        }
예제 #8
0
        private void EditGroupToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ctxMenuSessionGroup.Tag is TreeNode && ctxMenuSessionGroup.Tag != sessionsNode)
            {
                TreeNode     groupNode = (TreeNode)ctxMenuSessionGroup.Tag;
                SessionGroup group     = (SessionGroup)groupNode.Tag;

                SessionGroupOptionsDialog dlg = new SessionGroupOptionsDialog();
                dlg.DialogTitle  = "Edit Group";
                dlg.OKButtonText = "Ok";
                dlg.GroupName    = group.Name;

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    group.Name     = dlg.GroupName;
                    groupNode.Text = dlg.GroupName;
                    SaveGroupsAndSessions();
                }
            }
        }
예제 #9
0
        private void editSessionCtxMenuItem_Click(object sender, EventArgs e)
        {
            if (ctxMenuSession.Tag is TreeNode)
            {
                TreeNode node = (TreeNode)ctxMenuSession.Tag;
                if (!(node.Tag is SessionInfo))
                {
                    return;
                }

                SessionInfo session = (SessionInfo)node.Tag;
                if (session.External)
                {
                    return;
                }

                SessionGroup group = (SessionGroup)node.Parent.Tag;

                SessionOptionsDialog dlg = new SessionOptionsDialog();
                dlg.OKButtonText  = "Save";
                dlg.SessionGroups = GetGroupsAndSessions();
                dlg.SelectedGroup = group;
                dlg.Session       = new SessionInfo(session);

                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    session.CopyFrom(dlg.Session);
                    node.Text = session.GetName();

                    if (dlg.SelectedGroup != group)
                    {
                        node.Remove();

                        TreeNode newGroupNode = GetSessionGroupTreeNode(dlg.SelectedGroup);
                        newGroupNode.Nodes.Add(node);
                    }

                    SaveGroupsAndSessions();
                }
            }
        }
예제 #10
0
        // If sessionGroup is not given, the first group node found will be pre-selected
        private void ShowNewSessionDialog(SessionGroup sessionGroup = null)
        {
            SessionOptionsDialog dlg = new SessionOptionsDialog();

            dlg.OKButtonText  = "Add";
            dlg.SessionGroups = GetGroupsAndSessions();
            dlg.SelectedGroup = (sessionGroup != null ? sessionGroup : dlg.SessionGroups.First());

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                SessionInfo session = dlg.Session;
                TreeNode    node    = new TreeNode(session.GetName());
                node.Tag = session;

                TreeNode groupNode = GetSessionGroupTreeNode(dlg.SelectedGroup);
                groupNode.Nodes.Add(node);
                groupNode.Expand();

                SaveGroupsAndSessions();
            }
        }