Esempio n. 1
0
 // Adds the assemblies that are initially loaded with the
 // component inspector code
 public static void AddCurrentAssemblies()
 {
     foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
     {
         // Don't add the current assembly
         if (!(LocalPrefs.Get(LocalPrefs.DEV) != null))
         {
             if (assembly.Equals(Assembly.GetCallingAssembly()))
             {
                 continue;
             }
         }
         // Skip the dynamically created assembly used by the
         // internal dynamic classes
         if (assembly.GetName().Name.Equals(AssemblySupport.DUMMY_ASSY_NAME))
         {
             continue;
         }
         try {
             AssemblyTreeNode node = AddAssy(assembly, null);
             // Don't allow close since these are always loaded
             // automatically
             node.NoClose = true;
         } catch (Exception ex) {
             TraceUtil.WriteLineWarning(null, "Error adding local assembly: "
                                        + assembly + ": " + ex);
         }
     }
 }
 bool ParseArguments(string[] args)
 {
     // Allow local preferences to be set from the command line
     try {
         for (int i = 0; i < args.Length; i = i + 2)
         {
             if (args[i].StartsWith("-"))
             {
                 String setting = args[i].Substring(1);
                 String value   = args[i + 1];
                 Console.WriteLine("Using setting: " + setting + " " + value);
                 LocalPrefs.Set(setting, value);
             }
             else
             {
                 // This is a DLL file to open
                 fileToOpen = args[i];
             }
         }
         return(true);
     } catch {
         Console.WriteLine("Error in arguments: specify '-setting value'");
         return(false);
     }
 }
 private void OnEnable()
 {
     window        = this;
     isInitialized = false;
     script        = LocalPrefs.Data;
     EditorApplication.playModeStateChanged += Initialize;
 }
        void Start()
        {
            boolsUI.clearAllButton.onClick.AddListener(() =>
            {
                for (int i = 0; i < bools.Count; i++)
                {
                    DestroyBool(bools[i]);
                }
            });
            boolsUI.addButton.onClick.AddListener(() =>
            {
                int keysCount     = bools.Count;
                string newItemKey = "New " + "Boolean" + " ";
                while (LocalPrefs.HasKey <bool>(newItemKey + keysCount))
                {
                    keysCount++;
                }

                string newKey = newItemKey + keysCount;
                LocalPrefs.Set(newKey, false);
                InstatiateBoolUI(newKey);
            });

            string[] allBooleans = LocalPrefs.AllKeys <bool>();
            bools = new List <BoolUI>(allBooleans.Length);
            for (int i = 0; i < allBooleans.Length; i++)
            {
                bools.Add(InstatiateBoolUI(allBooleans[i]));
            }

            SetBoolListeners();
        }
Esempio n. 5
0
 protected static bool ShouldShow(DetailElement de)
 {
     if (!de._internal ||
         (LocalPrefs.Get(LocalPrefs.SHOW_INTERNAL_DETAILS) != null))
     {
         return(true);
     }
     return(false);
 }
Esempio n. 6
0
 void RandomLocalPrefs()
 {
     localPrefs = new float[randomPrefsCount];
     LocalPrefs.SetInt("RandomPrefsCount", randomPrefsCount);
     for (int i = 0; i < randomPrefsCount; i++)
     {
         localPrefs[i] = LocalPrefs.Set <float>("RandomFloat" + i, UnityEngine.Random.Range(0, 100000));
     }
 }
        private void OnDisable()
        {
            if (!EditorApplication.isPlayingOrWillChangePlaymode)
            {
                LocalPrefs.Save(files[selectedFile]);
            }
            EditorApplication.update -= Repaint;

            isInitialized = false;
        }
Esempio n. 8
0
    bool Save()
    {
        DateTime before = DateTime.Now;

        LocalPrefs.Save(stressTestFileName, encrypt);
        DateTime after    = DateTime.Now;
        TimeSpan duration = after.Subtract(before);

        Debug.Log("LocalPrefs Save time: " + duration.TotalMilliseconds + " ms");
        return(true);
    }
Esempio n. 9
0
    void OnGUI()
    {
        Type      prefsBase = typeof(LocalPrefs);
        FieldInfo dicField  = prefsBase.GetField("s_dicCategory", BindingFlags.Static | BindingFlags.NonPublic);
        var       dic       = dicField.GetValue(null) as Dictionary <Type, LocalPrefs.LocalPrefsContainer>;

        Type[] nested = prefsBase.GetNestedTypes();
        if (categoryFold == null)
        {
            categoryFold = new bool[nested.Length];
        }

        EditorGUILayout.HelpBox("\n Current Local Preference Value List\n", MessageType.None);
        scroll = EditorGUILayout.BeginScrollView(scroll);
        for (int i = 0; i < nested.Length; i++)
        {
            if (nested[i].Name.Equals(typeof(LocalPrefs.LocalPrefsContainer).Name) == true)
            {
                continue;
            }

            EditorGUILayout.Space();
            if (categoryFold[i] = EditorGUILayout.Foldout(categoryFold[i], nested[i].Name))
            {
                var         container = LocalPrefs.Get(nested[i]) as LocalPrefs.LocalPrefsContainer;
                FieldInfo[] fields    = container.GetType().GetFields();
                for (int j = 0; j < fields.Length; j++)
                {
                    GUI.color = Color.white;
                    EditorGUILayout.BeginHorizontal();

                    {
                        string val = fields[j].GetValue(container).ToString();
                        EditorGUILayout.LabelField(" " + fields[j].Name);

                        if (string.IsNullOrEmpty(val) == true)
                        {
                            GUI.color = new Color(.8f, .8f, .8f);
                        }
                        EditorGUILayout.TextField(val);
                    }

                    EditorGUILayout.EndHorizontal();
                }
            }
        }
        EditorGUILayout.EndScrollView();
    }
        BoolUI InstatiateBoolUI(string key)
        {
            GameObject prefab  = Instantiate(boolPrefab, boolsUI.content);
            var        newBool = new BoolUI()
            {
                key          = key,
                parent       = prefab,
                input        = prefab.GetComponentInChildren <InputField>(),
                toggle       = prefab.GetComponentInChildren <Toggle>(),
                removeButton = prefab.GetComponentInChildren <Button>(),
            };

            newBool.input.text  = newBool.key;
            newBool.toggle.isOn = LocalPrefs.Get(newBool.key, false);
            return(newBool);
        }
        void Initialize()
        {
            FindSaveFiles(script.FilesPath);
            if (!Application.isPlaying)
            {
                LocalPrefs.Load(files[selectedFile]);
            }

            EditorApplication.update += Repaint;

            prefGUIs.Clear();
            prefGUIs.Add(boolGUI    = new PrefGUI <bool>("Boolean"));
            prefGUIs.Add(intGUI     = new PrefGUI <int>("Int"));
            prefGUIs.Add(floatGUI   = new PrefGUI <float>("Float"));
            prefGUIs.Add(vector2GUI = new PrefGUI <Vector2>("Vector2"));
            prefGUIs.Add(vector3GUI = new PrefGUI <Vector3>("Vector3"));
            prefGUIs.Add(vector4GUI = new PrefGUI <Vector4>("Vector4"));
            prefGUIs.Add(stringGUI  = new PrefGUI <string>("String"));
        }
Esempio n. 12
0
    void Start()
    {
        // Local prefs load
        DateTime before = DateTime.Now;

        LocalPrefs.Load(stressTestFileName, encrypt);
        DateTime after    = DateTime.Now;
        TimeSpan duration = after.Subtract(before);

        Debug.Log("LocalPrefs Load time: " + duration.TotalMilliseconds + " ms");

        // Local prefs get floats
        before = DateTime.Now;
        int prefsCount = LocalPrefs.Get <int>("RandomPrefsCount");

        localPrefs = new float[prefsCount];
        for (int i = 0; i < prefsCount; i++)
        {
            localPrefs[i] = LocalPrefs.Get <float>("RandomFloat" + i);
        }
        after    = DateTime.Now;
        duration = after.Subtract(before);
        Debug.Log("LocalPrefs GetFloat: " + duration.TotalMilliseconds + " ms");

        if (testPlayerPrefs)
        {
            // Player prefs get floats
            before = DateTime.Now;
            LocalPrefs.Load(stressTestFileName);
            prefsCount = PlayerPrefs.GetInt("RandomPrefsCount");
            localPrefs = new float[prefsCount];
            for (int i = 0; i < prefsCount; i++)
            {
                localPrefs[i] = PlayerPrefs.GetFloat("RandomFloat" + i);
            }
            after    = DateTime.Now;
            duration = after.Subtract(before);
            Debug.Log("PlayerPrefs GetFloat: " + duration.TotalMilliseconds + " ms");
        }
        Application.wantsToQuit += Save;
        m_randomTime             = Time.time + randomTime;
    }
        void SetBoolListeners()
        {
            for (int i = 0; i < bools.Count; i++)
            {
                int m_i    = i;
                var boolUI = bools[m_i];

                bools[i].input.onEndEdit.RemoveAllListeners();
                bools[i].toggle.onValueChanged.RemoveAllListeners();
                bools[i].removeButton.onClick.RemoveAllListeners();

                // On Input field
                bools[i].input.onEndEdit.AddListener((s) =>
                {
                    if (!LocalPrefs.HasKey <bool>(s))
                    {
                        boolUI.key = LocalPrefs.ChangeKey <bool>(boolUI.key, s);
                        bools[m_i] = boolUI;
                    }
                    else if (s != boolUI.key)
                    {
                        bools[m_i].input.text = boolUI.key;
                        Debug.Log("Boolean with key \"" + s + "\" is already presented in preferences.");
                    }
                    SetBoolListeners();
                });
                // On Toggle
                bools[i].toggle.onValueChanged.AddListener((b) =>
                {
                    LocalPrefs.Set(boolUI.key, b);
                    SetBoolListeners();
                });
                // On Remove button
                bools[i].removeButton.onClick.AddListener(() =>
                {
                    DestroyBool(boolUI);
                    SetBoolListeners();
                });
            }
        }
Esempio n. 14
0
        void InitializeComponent(bool showStatusPanel, bool tabbedLayout)
        {
            SuspendLayout();

            CausesValidation    = false;
            AutoScaleDimensions = new SizeF(6F, 13F);
            AutoScaleMode       = AutoScaleMode.Font;
            Name = "ObjectBrowserControl";
            Size = new Size(800, 700);

            // All of the dimensions are here
            int objTreeWidth  = (int)(ClientSize.Width * 2 / WIDTH_UNITS);
            int assyTreeWidth = (int)(ClientSize.Width * 3 / WIDTH_UNITS);
            int paramsWidth   = (int)(ClientSize.Width * 1 / WIDTH_UNITS);
            int imageWidth    = (int)(ClientSize.Width * 2 / WIDTH_UNITS);
            int topHeight     = (int)(ClientSize.Height * 2.5 / HEIGHT_UNITS);
            int bottomHeight  = (int)(ClientSize.Height * 2.5 / HEIGHT_UNITS);
            int detailHeight  = (int)(ClientSize.Height * 1 / HEIGHT_UNITS);
            int objTreeHeight = ClientSize.Height - detailHeight;

            // Contents of treePanel, on the left
            _objTree = new BrowserTree(TOP_OBJ_NAME);

            // Hook up the routines that get called when preferences change
            ComponentInspectorProperties.ShowPropertyAccessorMethodsChanged += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowFieldsChanged            += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowPropertiesChanged        += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowMethodsChanged           += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowEventsChanged            += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowBaseClassesChanged       += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowPublicMembersOnlyChanged += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowMemberCategoriesChanged  += ObjectTreePreferencesChanged;
            ComponentInspectorProperties.ShowBaseCategoriesChanged    += ObjectTreePreferencesChanged;
            ComponentInspectorProperties.CategoryThresholdChanged     += ObjectTreePreferencesChanged;
            ComponentInspectorProperties.ShowBaseClassNamesChanged    += ObjectTreeInvalidated;
            ComponentInspectorProperties.DisplayHexChanged            += ObjectTreeInvalidated;
            ComponentInspectorProperties.ShowAssemblyPanelChanged     += TabPanelChanged;
            ComponentInspectorProperties.ShowControlPanelChanged      += TabPanelChanged;
            ComponentInspectorProperties.ShowGacPanelChanged          += TabPanelChanged;
            ComponentInspectorProperties.TypeHandlerChanged           += ObjectTreeInvalidated;

            ColumnHeader ch = new ColumnHeader();

            ch.Text      = StringParser.Parse("${res:ComponentInspector.ObjectBrowser.ValueColumnHeader}");
            ch.TextAlign = HorizontalAlignment.Left;
            _objTree.Columns.Add(ch);
            _objTree.BorderStyle       = BorderStyle.None;
            _objTree.AllowDrop         = true;
            _objTree.IsObjectContainer = true;
            _objTree.IsDropTarget      = true;
            _objTree.UseCompareTo      = true;
            _objTree.GotFocus         += new EventHandler(TreeFocused);
            UpdateObjectTreePreferences();

            _objTree.SetupPanel();
            _objTree.Panel.Dock        = DockStyle.Fill;
            _objTree.Panel.Width       = objTreeWidth;
            _objTree.Panel.Height      = objTreeHeight;
            _objTree.Panel.BorderStyle = BorderStyle.None;

            _objTreePanel       = new Panel();
            _objTreePanel.Dock  = DockStyle.Left;
            _objTreePanel.Width = _objTree.Panel.Width;

            // Note we add the parent, because the tree comes with a
            // panel that's the parent of the tree
            _objTreePanel.Controls.Add(_objTree.Panel);
            _objTreePanel.BorderStyle = BorderStyle.Fixed3D;
            new PanelLabel(_objTreePanel, StringParser.Parse("${res:ComponentInspector.ObjectBrowser.ObjectsTreePanel}"));

            // Image panel
            _imagePanel = NoGoop.ObjBrowser.ImagePanel.CreateImagePanel(objTreeWidth, !tabbedLayout);
            _imagePanel.WrapperPanel.Dock = DockStyle.Fill;

            // For text associated with each tree node
            _detailPanel      = new DetailPanel();
            _detailPanel.Dock = DockStyle.Bottom;

            _params       = new ParamPanel();
            _params.Dock  = DockStyle.Fill;
            _params.Width = paramsWidth;

            _eventLog = new EventLogList(this);

            AssemblySupport.Init();
            AssemblySupport.AssyTree.GotFocus += new EventHandler(TreeFocused);

            // Splitter between main tree and the rest, vertical
            Splitter mainSplitter = new Splitter();

            mainSplitter.Dock  = DockStyle.Left;
            mainSplitter.Width = Utils.SPLITTER_SIZE;

            Panel paramPanel = new Panel();

            paramPanel.Dock  = DockStyle.Left;
            paramPanel.Width = _params.Width;
            paramPanel.Controls.Add(_params);
            paramPanel.BorderStyle = BorderStyle.Fixed3D;
            new PanelLabel(paramPanel, StringParser.Parse("${res:ComponentInspector.ObjectBrowser.ParametersPanel}"));

            Splitter propImageSplitter = new Splitter();

            propImageSplitter.Dock  = DockStyle.Left;
            propImageSplitter.Width = Utils.SPLITTER_SIZE;

            // Contains the property panel and image panel
            Panel propImagePanel = new Panel();

            propImagePanel.Dock   = DockStyle.Top;
            propImagePanel.Height = topHeight;
            propImagePanel.Controls.Add(_imagePanel.WrapperPanel);
            propImagePanel.Controls.Add(propImageSplitter);
            propImagePanel.Controls.Add(paramPanel);

            // Splitter between node details and the rest
            _topTabSplitter        = new Splitter();
            _topTabSplitter.Dock   = DockStyle.Top;
            _topTabSplitter.Height = Utils.SPLITTER_SIZE;

            GacList gacList = new GacList();

            gacList.Width       = assyTreeWidth;
            gacList.Dock        = DockStyle.Fill;
            gacList.BorderStyle = BorderStyle.None;
            _gacTabPage         = new TabPage();
            _gacTabPage.Controls.Add(gacList);
            _gacTabPage.Text        = "GAC";
            _gacTabPage.BorderStyle = BorderStyle.None;

            // Object tab page.
            if (tabbedLayout)
            {
                _objTreeTabPage = new TabPage();
                _objTreeTabPage.Controls.Add(_objTreePanel);
                _objTreeTabPage.Text        = StringParser.Parse("${res:ComponentInspector.ObjectBrowser.ObjectsTreePanel}");
                _objTreeTabPage.BorderStyle = BorderStyle.None;
            }

            // Not presently used
            _outputList             = new OutputList();
            _outputList.Width       = assyTreeWidth;
            _outputList.Dock        = DockStyle.Fill;
            _outputList.BorderStyle = BorderStyle.None;
            TabPage outputTabPage = new TabPage();

            outputTabPage.Controls.Add(_outputList);
            outputTabPage.Text        = StringParser.Parse("${res:ComponentInspector.ObjectBrowser.OutputTab}");
            outputTabPage.BorderStyle = BorderStyle.None;

            _tabControl       = new TabControl();
            _tabControl.Dock  = DockStyle.Fill;
            _tabControl.Width = assyTreeWidth;
            _tabControl.SelectedIndexChanged += new EventHandler(TabIndexChangedHandler);

            // Contains the property panel and image panel
            Panel tabPanel = new Panel();

            tabPanel.Dock = DockStyle.Fill;
            if (tabbedLayout)
            {
                propImagePanel.Dock = DockStyle.Fill;
            }
            else
            {
                tabPanel.Controls.Add(_tabControl);
                tabPanel.Controls.Add(_topTabSplitter);
            }
            tabPanel.Controls.Add(propImagePanel);

            // All of the panels on the top
            _topPanel        = new Panel();
            _topPanel.Dock   = DockStyle.Fill;
            _topPanel.Height = topHeight + bottomHeight;
            _topPanel.Controls.Add(tabPanel);
            _topPanel.Controls.Add(mainSplitter);
            if (tabbedLayout)
            {
                _tabControl.Dock   = DockStyle.Left;
                _objTreePanel.Dock = DockStyle.Fill;
                _topPanel.Controls.Add(_tabControl);
            }
            else
            {
                _topPanel.Controls.Add(_objTreePanel);
            }

            if (!tabbedLayout)
            {
                _topBottomSplitter         = new Splitter();
                _topBottomSplitter.Dock    = DockStyle.Bottom;
                _topBottomSplitter.Height  = Utils.SPLITTER_SIZE;
                _topBottomSplitter.MinSize = detailHeight;
            }

            if (showStatusPanel)
            {
                _statusPanel           = new StatusPanel();
                _statusPanelLabel      = new PanelLabel(_statusPanel);
                _statusPanelLabel.Dock = DockStyle.Top;
            }

            Controls.Add(_topPanel);
            if (showStatusPanel)
            {
                Controls.Add(_statusPanelLabel);
            }
            if (!tabbedLayout)
            {
                Controls.Add(_topBottomSplitter);
                Controls.Add(_detailPanel);
            }

            // To allow file dropping
            DragEnter += new DragEventHandler(DragEnterEvent);
            DragDrop  += new DragEventHandler(DragDropEvent);
            DragOver  += new DragEventHandler(DragOverEvent);
            AllowDrop  = true;

            _objTree.BeginUpdate();

            // Add top level nodes
            ArrayList  tlList  = new ArrayList();
            ObjectInfo objInfo = ObjectInfoFactory.GetObjectInfo(false, tlList);

            objInfo.ObjectName = TOP_OBJ_NAME;
            BrowserTreeNode node = new ObjectTreeNode(false, objInfo);

            // Make sure this is the first node
            node.NodeOrder   = 0;
            node.AllowDelete = false;
            _objTree.Nodes.Add(node);

            // Just for testing
            if (LocalPrefs.Get(LocalPrefs.DEV) != null)
            {
                tlList.Add(this);
            }

            _objTree.EndUpdate();
            ComSupport.Init();
            ComSupport.ComTree.GotFocus += new EventHandler(TreeFocused);

            SetTabPanels();

            ResumeLayout();
        }
Esempio n. 15
0
        void CreateMenus()
        {
            ToolStripMenuItem open = new ToolStripMenuItem();

            open.ShortcutKeys = Keys.Control | Keys.O;
            //open.Text = "&Open...";
            open.Text   = StringParser.Parse("${res:XML.MainMenu.FileMenu.Open}");
            open.Click += new System.EventHandler(OpenClick);
            ToolStripMenuItem close = new ToolStripMenuItem();

            close.Text    = StringParser.Parse("${res:Global.CloseButtonText}");
            close.Enabled = false;
            close.Click  += new EventHandler(CloseClick);

            ToolStripMenuItem exit = new ToolStripMenuItem();

            exit.Text   = StringParser.Parse("${res:XML.MainMenu.FileMenu.Exit}");
            exit.Click += new System.EventHandler(ExitClick);

            ToolStripMenuItem fileMenuItem = new ToolStripMenuItem();

            fileMenuItem.DropDownItems.AddRange(new ToolStripMenuItem[] { open, close, exit });
            fileMenuItem.Text = StringParser.Parse("${res:XML.MainMenu.FileMenu}");

            ToolStripMenuItem viewMenuItem = new ToolStripMenuItem();
            ToolStripMenuItem mi           = new ToolStripMenuItem();

            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.ObjectTreeMenuItem}");
            mi.Click += new System.EventHandler(CustObjectClick);
            viewMenuItem.DropDownItems.Add(mi);

            mi        = new ToolStripMenuItem();
            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.TypeHandlersMenuItem}");
            mi.Click += new System.EventHandler(CustTypeHandlerClick);
            viewMenuItem.DropDownItems.Add(mi);

            mi        = new ToolStripMenuItem();
            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.PanelsMenuItem}");
            mi.Click += new System.EventHandler(CustPanelClick);
            viewMenuItem.DropDownItems.Add(mi);

            mi        = new ToolStripMenuItem();
            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.DirectoriesMenuItem}");
            mi.Click += new System.EventHandler(CustDirClick);
            viewMenuItem.DropDownItems.Add(mi);

            mi        = new ToolStripMenuItem();
            mi.Text   = "&ActiveX/COM...";
            mi.Click += new System.EventHandler(CustActiveXClick);
            viewMenuItem.DropDownItems.Add(mi);

            // Create the customization form
            _customizeForm = new CustomizeDialog();

            viewMenuItem.Text = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.OptionsMenuItem}");

            ToolStripMenuItem actionMenu = new ToolStripMenuItem();

            actionMenu.Text = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.ActionMenuItem}");
            ActionMenuHelper actionMenuHelper = new ActionMenuHelper(close);

            actionMenuHelper.BuildActionMenu(actionMenu);
            ActionMenuHelper.Helper = actionMenuHelper;

            ToolStripMenuItem editMenu = new ToolStripMenuItem();

            editMenu.Text = StringParser.Parse("${res:XML.MainMenu.EditMenu}");
            actionMenuHelper.BuildEditMenu(editMenu);
            editMenu.DropDownItems.Add("-");

            // Create the find form
            mi              = new ToolStripMenuItem();
            mi.Text         = StringParser.Parse("${res:ComponentInspector.InspectorMenu.Find}");
            mi.ShortcutKeys = Keys.Control | Keys.F;
            mi.Click       += new System.EventHandler(FindClick);
            editMenu.DropDownItems.Add(mi);

            // Create the attach form
            _attachForm = new AttachDialog();

            ToolStripMenuItem remoteMenuItem = new ToolStripMenuItem();

            remoteMenuItem.Text = "&Development";
            mi        = new ToolStripMenuItem();
            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.AttachMenuItem}");
            mi.Click += new System.EventHandler(AttachClick);
            remoteMenuItem.DropDownItems.Add(mi);

            // Create the attach form
            _tracingForm = new TracingDialog();

            mi        = new ToolStripMenuItem();
            mi.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.TracingMenuItem}");
            mi.Click += new System.EventHandler(TracingClick);
            remoteMenuItem.DropDownItems.Add(mi);

            ToolStripMenuItem about = new ToolStripMenuItem();

            about.Text   = StringParser.Parse("${res:XML.MainMenu.HelpMenu.About}");
            about.Click += new System.EventHandler(AboutClick);

            ToolStripMenuItem help = new ToolStripMenuItem();

            help.Text   = StringParser.Parse("${res:ComponentInspector.ObjectBrowserForm.ShowHelpMenuItem}");
            help.Click += new System.EventHandler(HelpClick);

            ToolStripMenuItem helpMenuItem = new ToolStripMenuItem();

            helpMenuItem.DropDownItems.AddRange(new ToolStripMenuItem[] { help, about });
            helpMenuItem.Text = StringParser.Parse("${res:XML.MainMenu.HelpMenu}");

            MainMenuStrip = new MenuStrip();
            Controls.Add(MainMenuStrip);
            MainMenuStrip.Items.Add(fileMenuItem);
            MainMenuStrip.Items.Add(editMenu);
            MainMenuStrip.Items.Add(actionMenu);
            MainMenuStrip.Items.Add(viewMenuItem);
            if (LocalPrefs.Get(LocalPrefs.DEV_MENU) != null)
            {
                MainMenuStrip.Items.Add(remoteMenuItem);
            }
            MainMenuStrip.Items.Add(helpMenuItem);
        }
 void DestroyBool(BoolUI boolUI)
 {
     LocalPrefs.RemoveKey <bool>(boolUI.key);
     Destroy(boolUI.parent);
     bools.Remove(boolUI);
 }