示例#1
0
文件: OptionsForm.cs 项目: mo5h/omeo
 private bool ApplyChanges()
 {
     lock ( _optionsGroups )
     {
         // save cursor
         Cursor currentCursor = Cursor.Current;
         Cursor.Current = Cursors.WaitCursor;
         try
         {
             foreach (TreeNode rootNode in _panesView.Nodes)
             {
                 UIManager.OptionsGroupDescriptor desc =
                     (UIManager.OptionsGroupDescriptor)_optionsGroups[rootNode.Text];
                 if (desc != null)
                 {
                     _errorMessage    = null;
                     _controlToSelect = null;
                     foreach (TreeNode paneNode in rootNode.Nodes)
                     {
                         AbstractOptionsPane pane = paneNode.Tag as AbstractOptionsPane;
                         if (pane != null)
                         {
                             if (!pane.IsValid(ref _errorMessage, ref _controlToSelect))
                             {
                                 if (_panesView.SelectedNode == paneNode)
                                 {
                                     DisplayError();
                                 }
                                 else
                                 {
                                     _panesView.SelectedNode = paneNode;
                                 }
                                 return(false);
                             }
                         }
                     }
                     foreach (TreeNode paneNode in rootNode.Nodes)
                     {
                         AbstractOptionsPane pane = paneNode.Tag as AbstractOptionsPane;
                         if (pane != null)
                         {
                             pane.OK();
                             _needRestart = _needRestart || pane.NeedRestart;
                             HashMap.Entry E = desc._optionsListeners.GetEntry(paneNode.Text);
                             if (E != null)
                             {
                                 ArrayList handlers = (ArrayList)E.Value;
                                 for (int i = 0; i < handlers.Count; i++)
                                 {
                                     EventHandler handler = (EventHandler)handlers[i];
                                     handler(this, new EventArgs());
                                 }
                             }
                             // extract options pane creator from map and replace pane with it
                             paneNode.Tag = desc._optionsPanes[paneNode.Text];
                         }
                     }
                 }
             }
         }
         finally
         {
             Cursor.Current = currentCursor;
         }
     }
     return(true);
 }
示例#2
0
文件: OptionsForm.cs 项目: mo5h/omeo
        internal void EditOptions(HashMap optionsGroups, IWin32Window owner)
        {
            RestoreSettings();
            _panesView.BeginUpdate();
            try
            {
                _panesView.Sorted = true;
                _panesView.Nodes.Clear();
                lock ( optionsGroups )
                {
                    _optionsGroups = optionsGroups;
                    foreach (HashMap.Entry E in optionsGroups)
                    {
                        string group = (string)E.Key;
                        UIManager.OptionsGroupDescriptor desc = (UIManager.OptionsGroupDescriptor)E.Value;
                        TreeNode rootNode = _panesView.Nodes.Add(group);
                        rootNode.Tag = desc.Prompt;
                        rootNode.Expand();
                        foreach (HashMap.Entry paneEntry in desc._optionsPanes)
                        {
                            TreeNode paneNode = rootNode.Nodes.Add((string)paneEntry.Key);
                            paneNode.Tag = paneEntry.Value;
                        }
                    }
                }
                _panesView.Sorted = false;
                for (int i = 0; i < _panesView.Nodes.Count; ++i)
                {
                    TreeNode node = _panesView.Nodes[i];
                    if (node.Text.IndexOf(Core.ProductName) >= 0)
                    {
                        _panesView.Nodes.RemoveAt(i);
                        _panesView.Nodes.Insert(0, node);
                        break;
                    }
                }
            }
            finally
            {
                _panesView.EndUpdate();
            }
            bool bSelected = false;

            if (_selectedGroup.Length == 0)
            {
                _selectedGroup    = Core.SettingStore.ReadString("OptionsDialog", "SelectedGroup");
                _selectedPaneName = Core.SettingStore.ReadString("OptionsDialog", "SelectedPane");
            }
            if (_selectedGroup.Length > 0)
            {
                for (int i = 0; i < _panesView.Nodes.Count; ++i)
                {
                    TreeNode groupNode = _panesView.Nodes[i];
                    if (_selectedGroup == groupNode.Text)
                    {
                        if (_selectedPaneName.Length > 0)
                        {
                            for (int j = 0; j < groupNode.Nodes.Count; ++j)
                            {
                                if (groupNode.Nodes[j].Text == _selectedPaneName)
                                {
                                    _panesView.SelectedNode = groupNode.Nodes[j];
                                    bSelected = true;
                                    break;
                                }
                            }
                        }
                        if (!bSelected)
                        {
                            _panesView.SelectedNode = groupNode;
                            bSelected = true;
                        }
                        break;
                    }
                }
            }
            if (!bSelected && _panesView.Nodes.Count > 0)
            {
                _panesView.SelectedNode = _panesView.Nodes[0];
            }
            ShowDialog(owner);
        }