コード例 #1
0
ファイル: DynamicMenuBar.cs プロジェクト: x2v3/gui.cs
        public DynamicMenuBarSample(ustring title) : base(title)
        {
            DataContext = new DynamicMenuItemModel();

            var _frmMenu = new FrameView("Menus:")
            {
                Y      = 7,
                Width  = Dim.Percent(50),
                Height = Dim.Fill()
            };

            var _btnAddMenuBar = new Button("Add a MenuBar")
            {
                Y = 1,
            };

            _frmMenu.Add(_btnAddMenuBar);

            var _btnMenuBarUp = new Button("^")
            {
                X = Pos.Center()
            };

            _frmMenu.Add(_btnMenuBarUp);

            var _btnMenuBarDown = new Button("v")
            {
                X = Pos.Center(),
                Y = Pos.Bottom(_btnMenuBarUp)
            };

            _frmMenu.Add(_btnMenuBarDown);

            var _btnRemoveMenuBar = new Button("Remove a MenuBar")
            {
                Y = 1
            };

            _btnRemoveMenuBar.X = Pos.AnchorEnd() - (Pos.Right(_btnRemoveMenuBar) - Pos.Left(_btnRemoveMenuBar));
            _frmMenu.Add(_btnRemoveMenuBar);

            var _btnPrevious = new Button("<")
            {
                X = Pos.Left(_btnAddMenuBar),
                Y = Pos.Top(_btnAddMenuBar) + 2
            };

            _frmMenu.Add(_btnPrevious);

            var _btnAdd = new Button(" Add  ")
            {
                Y = Pos.Top(_btnPrevious) + 2,
            };

            _btnAdd.X = Pos.AnchorEnd() - (Pos.Right(_btnAdd) - Pos.Left(_btnAdd));
            _frmMenu.Add(_btnAdd);

            var _btnNext = new Button(">")
            {
                X = Pos.X(_btnAdd),
                Y = Pos.Top(_btnPrevious),
            };

            _frmMenu.Add(_btnNext);

            var _lblMenuBar = new Label()
            {
                ColorScheme   = Colors.Dialog,
                TextAlignment = TextAlignment.Centered,
                X             = Pos.Right(_btnPrevious) + 1,
                Y             = Pos.Top(_btnPrevious),
                Width         = Dim.Fill() - Dim.Width(_btnAdd) - 1,
                Height        = 1
            };

            _frmMenu.Add(_lblMenuBar);
            _lblMenuBar.WantMousePositionReports = true;
            _lblMenuBar.CanFocus = true;

            var _lblParent = new Label()
            {
                TextAlignment = TextAlignment.Centered,
                X             = Pos.Right(_btnPrevious) + 1,
                Y             = Pos.Top(_btnPrevious) + 1,
                Width         = Dim.Fill() - Dim.Width(_btnAdd) - 1
            };

            _frmMenu.Add(_lblParent);

            var _btnPreviowsParent = new Button("..")
            {
                X = Pos.Left(_btnAddMenuBar),
                Y = Pos.Top(_btnPrevious) + 1
            };

            _frmMenu.Add(_btnPreviowsParent);

            var _lstMenus = new ListView(new List <DynamicMenuItemList> ())
            {
                ColorScheme = Colors.Dialog,
                X           = Pos.Right(_btnPrevious) + 1,
                Y           = Pos.Top(_btnPrevious) + 2,
                Width       = _lblMenuBar.Width,
                Height      = Dim.Fill(),
            };

            _frmMenu.Add(_lstMenus);

            _lblMenuBar.TabIndex = _btnPrevious.TabIndex + 1;
            _lstMenus.TabIndex   = _lblMenuBar.TabIndex + 1;
            _btnNext.TabIndex    = _lstMenus.TabIndex + 1;
            _btnAdd.TabIndex     = _btnNext.TabIndex + 1;

            var _btnRemove = new Button("Remove")
            {
                X = Pos.Left(_btnAdd),
                Y = Pos.Top(_btnAdd) + 1
            };

            _frmMenu.Add(_btnRemove);

            var _btnUp = new Button("^")
            {
                X = Pos.Right(_lstMenus) + 2,
                Y = Pos.Top(_btnRemove) + 2
            };

            _frmMenu.Add(_btnUp);

            var _btnDown = new Button("v")
            {
                X = Pos.Right(_lstMenus) + 2,
                Y = Pos.Top(_btnUp) + 1
            };

            _frmMenu.Add(_btnDown);

            Add(_frmMenu);

            var _frmMenuDetails = new FrameView("Menu Details:")
            {
                X      = Pos.Right(_frmMenu),
                Y      = Pos.Top(_frmMenu),
                Width  = Dim.Fill(),
                Height = Dim.Fill()
            };

            var _lblTitle = new Label("Title:")
            {
                Y = 1
            };

            _frmMenuDetails.Add(_lblTitle);

            var _txtTitle = new TextField()
            {
                X     = Pos.Right(_lblTitle) + 2,
                Y     = Pos.Top(_lblTitle),
                Width = Dim.Fill()
            };

            _frmMenuDetails.Add(_txtTitle);

            var _lblHelp = new Label("Help:")
            {
                X = Pos.Left(_lblTitle),
                Y = Pos.Bottom(_lblTitle) + 1
            };

            _frmMenuDetails.Add(_lblHelp);

            var _txtHelp = new TextField()
            {
                X     = Pos.Left(_txtTitle),
                Y     = Pos.Top(_lblHelp),
                Width = Dim.Fill()
            };

            _frmMenuDetails.Add(_txtHelp);

            var _lblAction = new Label("Action:")
            {
                X = Pos.Left(_lblTitle),
                Y = Pos.Bottom(_lblHelp) + 1
            };

            _frmMenuDetails.Add(_lblAction);

            var _txtAction = new TextView()
            {
                ColorScheme = Colors.Dialog,
                X           = Pos.Left(_txtTitle),
                Y           = Pos.Top(_lblAction),
                Width       = Dim.Fill(),
                Height      = 5
            };

            _frmMenuDetails.Add(_txtAction);

            var _ckbIsTopLevel = new CheckBox("IsTopLevel")
            {
                X = Pos.Left(_lblTitle),
                Y = Pos.Bottom(_lblAction) + 5
            };

            _frmMenuDetails.Add(_ckbIsTopLevel);

            var _ckbSubMenu = new CheckBox("Has sub-menus")
            {
                X = Pos.Left(_lblTitle),
                Y = Pos.Bottom(_ckbIsTopLevel)
            };

            _frmMenuDetails.Add(_ckbSubMenu);
            _ckbIsTopLevel.Toggled = (e) => {
                if (_ckbIsTopLevel.Checked && _currentEditMenuBarItem.Parent != null)
                {
                    MessageBox.ErrorQuery("Invalid IsTopLevel", "Only menu bar can have top level menu item!", "Ok");
                    _ckbIsTopLevel.Checked = false;
                    return;
                }
                if (_ckbIsTopLevel.Checked)
                {
                    _ckbSubMenu.Checked = false;
                    _ckbSubMenu.SetNeedsDisplay();
                    _txtAction.ReadOnly = false;
                }
                else
                {
                    _txtAction.ReadOnly = true;
                }
            };
            _ckbSubMenu.Toggled = (e) => {
                if (_ckbSubMenu.Checked)
                {
                    _ckbIsTopLevel.Checked = false;
                    _ckbIsTopLevel.SetNeedsDisplay();
                    _txtAction.ReadOnly = true;
                }
                else
                {
                    _txtAction.ReadOnly = false;
                }
            };

            var _rChkLabels = new ustring [] { "NoCheck", "Checked", "Radio" };
            var _rbChkStyle = new RadioGroup(_rChkLabels)
            {
                X = Pos.Left(_lblTitle),
                Y = Pos.Bottom(_ckbSubMenu) + 1,
            };

            _frmMenuDetails.Add(_rbChkStyle);

            var _btnOk = new Button("Ok")
            {
                X       = Pos.Left(_lblTitle) + 20,
                Y       = Pos.Bottom(_rbChkStyle) + 1,
                Clicked = () => {
                    if (ustring.IsNullOrEmpty(_txtTitle.Text) && _currentEditMenuBarItem != null)
                    {
                        MessageBox.ErrorQuery("Invalid title", "Must enter a valid title!.", "Ok");
                    }
                    else if (_currentEditMenuBarItem != null)
                    {
                        var menuItem = new DynamicMenuItem(_txtTitle.Text, _txtHelp.Text, _txtAction.Text, _ckbIsTopLevel != null ? _ckbIsTopLevel.Checked : false, _ckbSubMenu != null ? _ckbSubMenu.Checked : false, _rbChkStyle.SelectedItem == 0 ? MenuItemCheckStyle.NoCheck : _rbChkStyle.SelectedItem == 1 ? MenuItemCheckStyle.Checked : MenuItemCheckStyle.Radio);
                        UpdateMenuItem(_currentEditMenuBarItem, menuItem, _lstMenus.SelectedItem);
                    }
                }
            };

            _frmMenuDetails.Add(_btnOk);

            var _btnCancel = new Button("Cancel")
            {
                X       = Pos.Right(_btnOk) + 3,
                Y       = Pos.Top(_btnOk),
                Clicked = () => {
                    _txtTitle.Text = ustring.Empty;
                }
            };

            _frmMenuDetails.Add(_btnCancel);

            Add(_frmMenuDetails);

            _btnAdd.Clicked = () => {
                if (MenuBar == null)
                {
                    MessageBox.ErrorQuery("Menu Bar Error", "Must add a MenuBar first!", "Ok");
                    _btnAddMenuBar.SetFocus();
                    return;
                }

                var item = EnterMenuItem(_currentMenuBarItem);
                if (ustring.IsNullOrEmpty(item.title))
                {
                    return;
                }

                if (!(_currentMenuBarItem is MenuBarItem))
                {
                    var parent = _currentMenuBarItem.Parent as MenuBarItem;
                    var idx    = parent.GetChildrenIndex(_currentMenuBarItem);
                    _currentMenuBarItem           = new MenuBarItem(_currentMenuBarItem.Title, new MenuItem [] { new MenuItem("_New", "", CreateAction(_currentEditMenuBarItem, new DynamicMenuItem())) }, _currentMenuBarItem.Parent);
                    _currentMenuBarItem.CheckType = item.checkStyle;
                    parent.Children [idx]         = _currentMenuBarItem;
                }
                else
                {
                    MenuItem newMenu     = CreateNewMenu(item, _currentMenuBarItem);
                    var      menuBarItem = _currentMenuBarItem as MenuBarItem;
                    if (menuBarItem == null)
                    {
                        menuBarItem = new MenuBarItem(_currentMenuBarItem.Title, new MenuItem [] { newMenu }, _currentMenuBarItem.Parent);
                    }
                    else if (menuBarItem.Children == null)
                    {
                        menuBarItem.Children = new MenuItem [] { newMenu };
                    }
                    else
                    {
                        var childrens = menuBarItem.Children;
                        Array.Resize(ref childrens, childrens.Length + 1);
                        childrens [childrens.Length - 1] = newMenu;
                        menuBarItem.Children             = childrens;
                    }
                    DataContext.Menus.Add(new DynamicMenuItemList(newMenu.Title, newMenu));
                    _lstMenus.MoveDown();
                }
            };

            _btnRemove.Clicked = () => {
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [_lstMenus.SelectedItem].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    childrens [_lstMenus.SelectedItem] = null;
                    int i = 0;
                    foreach (var c in childrens)
                    {
                        if (c != null)
                        {
                            childrens [i] = c;
                            i++;
                        }
                    }
                    Array.Resize(ref childrens, childrens.Length - 1);
                    if (childrens.Length == 0)
                    {
                        if (_currentMenuBarItem.Parent == null)
                        {
                            ((MenuBarItem)_currentMenuBarItem).Children = null;
                            _currentMenuBarItem.Action = CreateAction(_currentEditMenuBarItem, new DynamicMenuItem(_currentMenuBarItem.Title));
                        }
                        else
                        {
                            _currentMenuBarItem = new MenuItem(_currentMenuBarItem.Title, _currentMenuBarItem.Help, CreateAction(_currentEditMenuBarItem, new DynamicMenuItem(_currentEditMenuBarItem.Title)), null, _currentMenuBarItem.Parent);
                        }
                    }
                    else
                    {
                        ((MenuBarItem)_currentMenuBarItem).Children = childrens;
                    }
                    DataContext.Menus.RemoveAt(_lstMenus.SelectedItem);
                }
            };

            _btnMenuBarUp.Clicked = () => {
                var i        = _currentSelectedMenuBar;
                var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
                if (menuItem != null)
                {
                    var menus = _menuBar.Menus;
                    if (i > 0)
                    {
                        menus [i]               = menus [i - 1];
                        menus [i - 1]           = menuItem;
                        _currentSelectedMenuBar = i - 1;
                        _menuBar.SetNeedsDisplay();
                    }
                }
            };

            _btnMenuBarDown.Clicked = () => {
                var i        = _currentSelectedMenuBar;
                var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
                if (menuItem != null)
                {
                    var menus = _menuBar.Menus;
                    if (i < menus.Length - 1)
                    {
                        menus [i]               = menus [i + 1];
                        menus [i + 1]           = menuItem;
                        _currentSelectedMenuBar = i + 1;
                        _menuBar.SetNeedsDisplay();
                    }
                }
            };

            _btnUp.Clicked = () => {
                var i        = _lstMenus.SelectedItem;
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    if (i > 0)
                    {
                        childrens [i]             = childrens [i - 1];
                        childrens [i - 1]         = menuItem;
                        DataContext.Menus [i]     = DataContext.Menus [i - 1];
                        DataContext.Menus [i - 1] = new DynamicMenuItemList(menuItem.Title, menuItem);
                        _lstMenus.SelectedItem    = i - 1;
                    }
                }
            };

            _btnDown.Clicked = () => {
                var i        = _lstMenus.SelectedItem;
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    if (i < childrens.Length - 1)
                    {
                        childrens [i]             = childrens [i + 1];
                        childrens [i + 1]         = menuItem;
                        DataContext.Menus [i]     = DataContext.Menus [i + 1];
                        DataContext.Menus [i + 1] = new DynamicMenuItemList(menuItem.Title, menuItem);
                        _lstMenus.SelectedItem    = i + 1;
                    }
                }
            };

            _btnAddMenuBar.Clicked = () => {
                var item = EnterMenuItem(null);
                if (ustring.IsNullOrEmpty(item.title))
                {
                    return;
                }

                if (MenuBar == null)
                {
                    _menuBar = new MenuBar();
                    Add(_menuBar);
                }
                var newMenu = CreateNewMenu(item) as MenuBarItem;

                var menus = _menuBar.Menus;
                Array.Resize(ref menus, menus.Length + 1);
                menus [^ 1]                              = newMenu;
コード例 #2
0
        public DynamicMenuBarSample(ustring title) : base(title)
        {
            DataContext = new DynamicMenuItemModel();

            var _frmDelimiter = new FrameView("Shortcut Delimiter:")
            {
                X      = Pos.Center(),
                Y      = 3,
                Width  = 25,
                Height = 4
            };

            var _txtDelimiter = new TextField(MenuBar.ShortcutDelimiter.ToString())
            {
                X     = Pos.Center(),
                Width = 2,
            };

            _txtDelimiter.TextChanged += (_) => MenuBar.ShortcutDelimiter = _txtDelimiter.Text;
            _frmDelimiter.Add(_txtDelimiter);

            Add(_frmDelimiter);

            var _frmMenu = new FrameView("Menus:")
            {
                Y      = 7,
                Width  = Dim.Percent(50),
                Height = Dim.Fill()
            };

            var _btnAddMenuBar = new Button("Add a MenuBar")
            {
                Y = 1,
            };

            _frmMenu.Add(_btnAddMenuBar);

            var _btnMenuBarUp = new Button("^")
            {
                X = Pos.Center()
            };

            _frmMenu.Add(_btnMenuBarUp);

            var _btnMenuBarDown = new Button("v")
            {
                X = Pos.Center(),
                Y = Pos.Bottom(_btnMenuBarUp)
            };

            _frmMenu.Add(_btnMenuBarDown);

            var _btnRemoveMenuBar = new Button("Remove a MenuBar")
            {
                Y = 1
            };

            _btnRemoveMenuBar.X = Pos.AnchorEnd() - (Pos.Right(_btnRemoveMenuBar) - Pos.Left(_btnRemoveMenuBar));
            _frmMenu.Add(_btnRemoveMenuBar);

            var _btnPrevious = new Button("<")
            {
                X = Pos.Left(_btnAddMenuBar),
                Y = Pos.Top(_btnAddMenuBar) + 2
            };

            _frmMenu.Add(_btnPrevious);

            var _btnAdd = new Button(" Add  ")
            {
                Y = Pos.Top(_btnPrevious) + 2,
            };

            _btnAdd.X = Pos.AnchorEnd() - (Pos.Right(_btnAdd) - Pos.Left(_btnAdd));
            _frmMenu.Add(_btnAdd);

            var _btnNext = new Button(">")
            {
                X = Pos.X(_btnAdd),
                Y = Pos.Top(_btnPrevious),
            };

            _frmMenu.Add(_btnNext);

            var _lblMenuBar = new Label()
            {
                ColorScheme   = Colors.Dialog,
                TextAlignment = TextAlignment.Centered,
                X             = Pos.Right(_btnPrevious) + 1,
                Y             = Pos.Top(_btnPrevious),
                Width         = Dim.Fill() - Dim.Width(_btnAdd) - 1,
                Height        = 1
            };

            _frmMenu.Add(_lblMenuBar);
            _lblMenuBar.WantMousePositionReports = true;
            _lblMenuBar.CanFocus = true;

            var _lblParent = new Label()
            {
                TextAlignment = TextAlignment.Centered,
                X             = Pos.Right(_btnPrevious) + 1,
                Y             = Pos.Top(_btnPrevious) + 1,
                Width         = Dim.Fill() - Dim.Width(_btnAdd) - 1
            };

            _frmMenu.Add(_lblParent);

            var _btnPreviowsParent = new Button("..")
            {
                X = Pos.Left(_btnAddMenuBar),
                Y = Pos.Top(_btnPrevious) + 1
            };

            _frmMenu.Add(_btnPreviowsParent);

            _lstMenus = new ListView(new List <DynamicMenuItemList> ())
            {
                ColorScheme = Colors.Dialog,
                X           = Pos.Right(_btnPrevious) + 1,
                Y           = Pos.Top(_btnPrevious) + 2,
                Width       = _lblMenuBar.Width,
                Height      = Dim.Fill(),
            };
            _frmMenu.Add(_lstMenus);

            _lblMenuBar.TabIndex = _btnPrevious.TabIndex + 1;
            _lstMenus.TabIndex   = _lblMenuBar.TabIndex + 1;
            _btnNext.TabIndex    = _lstMenus.TabIndex + 1;
            _btnAdd.TabIndex     = _btnNext.TabIndex + 1;

            var _btnRemove = new Button("Remove")
            {
                X = Pos.Left(_btnAdd),
                Y = Pos.Top(_btnAdd) + 1
            };

            _frmMenu.Add(_btnRemove);

            var _btnUp = new Button("^")
            {
                X = Pos.Right(_lstMenus) + 2,
                Y = Pos.Top(_btnRemove) + 2
            };

            _frmMenu.Add(_btnUp);

            var _btnDown = new Button("v")
            {
                X = Pos.Right(_lstMenus) + 2,
                Y = Pos.Top(_btnUp) + 1
            };

            _frmMenu.Add(_btnDown);

            Add(_frmMenu);


            var _frmMenuDetails = new DynamicMenuBarDetails("Menu Details:")
            {
                X      = Pos.Right(_frmMenu),
                Y      = Pos.Top(_frmMenu),
                Width  = Dim.Fill(),
                Height = Dim.Fill(2)
            };

            Add(_frmMenuDetails);

            _btnMenuBarUp.Clicked += () => {
                var i        = _currentSelectedMenuBar;
                var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
                if (menuItem != null)
                {
                    var menus = _menuBar.Menus;
                    if (i > 0)
                    {
                        menus [i]               = menus [i - 1];
                        menus [i - 1]           = menuItem;
                        _currentSelectedMenuBar = i - 1;
                        _menuBar.SetNeedsDisplay();
                    }
                }
            };

            _btnMenuBarDown.Clicked += () => {
                var i        = _currentSelectedMenuBar;
                var menuItem = _menuBar != null && _menuBar.Menus.Length > 0 ? _menuBar.Menus [i] : null;
                if (menuItem != null)
                {
                    var menus = _menuBar.Menus;
                    if (i < menus.Length - 1)
                    {
                        menus [i]               = menus [i + 1];
                        menus [i + 1]           = menuItem;
                        _currentSelectedMenuBar = i + 1;
                        _menuBar.SetNeedsDisplay();
                    }
                }
            };

            _btnUp.Clicked += () => {
                var i        = _lstMenus.SelectedItem;
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    if (i > 0)
                    {
                        childrens [i]             = childrens [i - 1];
                        childrens [i - 1]         = menuItem;
                        DataContext.Menus [i]     = DataContext.Menus [i - 1];
                        DataContext.Menus [i - 1] = new DynamicMenuItemList(menuItem.Title, menuItem);
                        _lstMenus.SelectedItem    = i - 1;
                    }
                }
            };

            _btnDown.Clicked += () => {
                var i        = _lstMenus.SelectedItem;
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [i].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    if (i < childrens.Length - 1)
                    {
                        childrens [i]             = childrens [i + 1];
                        childrens [i + 1]         = menuItem;
                        DataContext.Menus [i]     = DataContext.Menus [i + 1];
                        DataContext.Menus [i + 1] = new DynamicMenuItemList(menuItem.Title, menuItem);
                        _lstMenus.SelectedItem    = i + 1;
                    }
                }
            };

            _btnPreviowsParent.Clicked += () => {
                if (_currentMenuBarItem != null && _currentMenuBarItem.Parent != null)
                {
                    var mi = _currentMenuBarItem;
                    _currentMenuBarItem = _currentMenuBarItem.Parent as MenuBarItem;
                    SetListViewSource(_currentMenuBarItem, true);
                    var i = ((MenuBarItem)_currentMenuBarItem).GetChildrenIndex(mi);
                    if (i > -1)
                    {
                        _lstMenus.SelectedItem = i;
                    }
                    if (_currentMenuBarItem.Parent != null)
                    {
                        DataContext.Parent = _currentMenuBarItem.Title;
                    }
                    else
                    {
                        DataContext.Parent = ustring.Empty;
                    }
                }
                else
                {
                    DataContext.Parent = ustring.Empty;
                }
            };


            var _btnOk = new Button("Ok")
            {
                X = Pos.Right(_frmMenu) + 20,
                Y = Pos.Bottom(_frmMenuDetails),
            };

            Add(_btnOk);

            var _btnCancel = new Button("Cancel")
            {
                X = Pos.Right(_btnOk) + 3,
                Y = Pos.Top(_btnOk),
            };

            _btnCancel.Clicked += () => {
                SetFrameDetails(_currentEditMenuBarItem);
            };
            Add(_btnCancel);

            _lstMenus.SelectedItemChanged += (e) => {
                SetFrameDetails();
            };

            _btnOk.Clicked += () => {
                if (ustring.IsNullOrEmpty(_frmMenuDetails._txtTitle.Text) && _currentEditMenuBarItem != null)
                {
                    MessageBox.ErrorQuery("Invalid title", "Must enter a valid title!.", "Ok");
                }
                else if (_currentEditMenuBarItem != null)
                {
                    var menuItem = new DynamicMenuItem(_frmMenuDetails._txtTitle.Text, _frmMenuDetails._txtHelp.Text,
                                                       _frmMenuDetails._txtAction.Text,
                                                       _frmMenuDetails._ckbIsTopLevel != null ? _frmMenuDetails._ckbIsTopLevel.Checked : false,
                                                       _frmMenuDetails._ckbSubMenu != null ? _frmMenuDetails._ckbSubMenu.Checked : false,
                                                       _frmMenuDetails._rbChkStyle.SelectedItem == 0 ? MenuItemCheckStyle.NoCheck :
                                                       _frmMenuDetails._rbChkStyle.SelectedItem == 1 ? MenuItemCheckStyle.Checked :
                                                       MenuItemCheckStyle.Radio,
                                                       _frmMenuDetails._txtShortcut.Text);
                    UpdateMenuItem(_currentEditMenuBarItem, menuItem, _lstMenus.SelectedItem);
                }
            };

            _btnAdd.Clicked += () => {
                if (MenuBar == null)
                {
                    MessageBox.ErrorQuery("Menu Bar Error", "Must add a MenuBar first!", "Ok");
                    _btnAddMenuBar.SetFocus();
                    return;
                }

                var frameDetails = new DynamicMenuBarDetails(null, _currentMenuBarItem != null);
                var item         = frameDetails.EnterMenuItem();
                if (item == null)
                {
                    return;
                }

                if (!(_currentMenuBarItem is MenuBarItem))
                {
                    var parent = _currentMenuBarItem.Parent as MenuBarItem;
                    var idx    = parent.GetChildrenIndex(_currentMenuBarItem);
                    _currentMenuBarItem           = new MenuBarItem(_currentMenuBarItem.Title, new MenuItem [] { }, _currentMenuBarItem.Parent);
                    _currentMenuBarItem.CheckType = item.checkStyle;
                    parent.Children [idx]         = _currentMenuBarItem;
                }
                else
                {
                    MenuItem newMenu     = CreateNewMenu(item, _currentMenuBarItem);
                    var      menuBarItem = _currentMenuBarItem as MenuBarItem;
                    if (menuBarItem == null)
                    {
                        menuBarItem = new MenuBarItem(_currentMenuBarItem.Title, new MenuItem [] { newMenu }, _currentMenuBarItem.Parent);
                    }
                    else if (menuBarItem.Children == null)
                    {
                        menuBarItem.Children = new MenuItem [] { newMenu };
                    }
                    else
                    {
                        var childrens = menuBarItem.Children;
                        Array.Resize(ref childrens, childrens.Length + 1);
                        childrens [childrens.Length - 1] = newMenu;
                        menuBarItem.Children             = childrens;
                    }
                    DataContext.Menus.Add(new DynamicMenuItemList(newMenu.Title, newMenu));
                    _lstMenus.MoveDown();
                }
            };

            _btnRemove.Clicked += () => {
                var menuItem = DataContext.Menus.Count > 0 ? DataContext.Menus [_lstMenus.SelectedItem].MenuItem : null;
                if (menuItem != null)
                {
                    var childrens = ((MenuBarItem)_currentMenuBarItem).Children;
                    childrens [_lstMenus.SelectedItem] = null;
                    int i = 0;
                    foreach (var c in childrens)
                    {
                        if (c != null)
                        {
                            childrens [i] = c;
                            i++;
                        }
                    }
                    Array.Resize(ref childrens, childrens.Length - 1);
                    if (childrens.Length == 0)
                    {
                        if (_currentMenuBarItem.Parent == null)
                        {
                            ((MenuBarItem)_currentMenuBarItem).Children = null;
                            //_currentMenuBarItem.Action = _frmMenuDetails.CreateAction (_currentEditMenuBarItem, new DynamicMenuItem (_currentMenuBarItem.Title));
                        }
                        else
                        {
                            _currentMenuBarItem = new MenuItem(_currentMenuBarItem.Title, _currentMenuBarItem.Help, _frmMenuDetails.CreateAction(_currentEditMenuBarItem, new DynamicMenuItem(_currentEditMenuBarItem.Title)), null, _currentMenuBarItem.Parent);
                        }
                    }
                    else
                    {
                        ((MenuBarItem)_currentMenuBarItem).Children = childrens;
                    }
                    DataContext.Menus.RemoveAt(_lstMenus.SelectedItem);
                    if (_lstMenus.Source.Count > 0 && _lstMenus.SelectedItem > _lstMenus.Source.Count - 1)
                    {
                        _lstMenus.SelectedItem = _lstMenus.Source.Count - 1;
                    }
                    _lstMenus.SetNeedsDisplay();
                    SetFrameDetails();
                }
            };

            _lstMenus.OpenSelectedItem += (e) => {
                _currentMenuBarItem = DataContext.Menus [e.Item].MenuItem;
                if (!(_currentMenuBarItem is MenuBarItem))
                {
                    MessageBox.ErrorQuery("Menu Open Error", "Must allows sub menus first!", "Ok");
                    return;
                }
                DataContext.Parent = _currentMenuBarItem.Title;
                DataContext.Menus  = new List <DynamicMenuItemList> ();
                SetListViewSource(_currentMenuBarItem, true);
                var menuBarItem = DataContext.Menus.Count > 0 ? DataContext.Menus [0].MenuItem : null;
                SetFrameDetails(menuBarItem);
            };

            _lstMenus.Enter += (_) => {
                var menuBarItem = DataContext.Menus.Count > 0 ? DataContext.Menus [_lstMenus.SelectedItem].MenuItem : null;
                SetFrameDetails(menuBarItem);
            };

            _btnNext.Clicked += () => {
                if (_menuBar != null && _currentSelectedMenuBar + 1 < _menuBar.Menus.Length)
                {
                    _currentSelectedMenuBar++;
                }
                SelectCurrentMenuBarItem();
            };

            _btnPrevious.Clicked += () => {
                if (_currentSelectedMenuBar - 1 > -1)
                {
                    _currentSelectedMenuBar--;
                }
                SelectCurrentMenuBarItem();
            };

            _lblMenuBar.Enter += (e) => {
                if (_menuBar?.Menus != null)
                {
                    _currentMenuBarItem = _menuBar.Menus [_currentSelectedMenuBar];
                    SetFrameDetails(_menuBar.Menus [_currentSelectedMenuBar]);
                }
            };

            _btnAddMenuBar.Clicked += () => {
                var frameDetails = new DynamicMenuBarDetails(null, false);
                var item         = frameDetails.EnterMenuItem();
                if (item == null)
                {
                    return;
                }

                if (MenuBar == null)
                {
                    _menuBar = new MenuBar();
                    Add(_menuBar);
                }
                var newMenu = CreateNewMenu(item) as MenuBarItem;

                var menus = _menuBar.Menus;
                Array.Resize(ref menus, menus.Length + 1);
                menus [^ 1]                              = newMenu;