/// <summary> /// Shows popup if there is one, and sets the number of clicks to close /// to two. /// </summary> internal void Select() { if (!this.isPopUpShown && this.numMenuItems > 0 && this.isEnabled) { if (PopUpOpen != null) { PopUpOpen.Invoke(this); } this.isPopUpShown = true; this.popUpMenu.Populate(); if (Parent.GetType() == typeof(MenuBar)) // MenuBar parent { this.popUpMenu.X = AbsolutePosition.X; this.popUpMenu.Y = AbsolutePosition.Y + Height - 1; } else // PopUpMenu parent { this.popUpMenu.X = Parent.AbsolutePosition.X + Parent.Width - 1; this.popUpMenu.Y = AbsolutePosition.Y; } GUIManager.SetFocus(this.popUpMenu); GUIManager.Add(this.popUpMenu); AddHighlight(); this.numClicks = 0; } else { this.popUpMenu.BringToTop(); } }
/// <summary> /// Shows window in modal mode, no other controls can receive focus /// while window is open. /// </summary> public void Show(bool modal) { GUIManager.Add(this); if (modal) { GUIManager.SetModal(this); } }
/// <summary> /// Open listbox when button is pressed. /// </summary> /// <param name="args">Mouse event arguments.</param> protected void OnButtonMouseDown(MouseEventArgs args) { if (args.Button == MouseButtons.Left) { if (!this.isListBoxOpen && this.listBox.Count > 0) { this.listBox.X = AbsolutePosition.X; this.listBox.Y = AbsolutePosition.Y + Height - 1; this.listBox.Width = Width; GUIManager.Add(this.listBox); this.button.CurrentSkinState = SkinState.Pressed; this.isListBoxOpen = true; } else { CloseListBox(); } } }
protected override bool initGUI() { _guiMgr = new GUIManager(_screenMgr); _screenMgr.Components.Add(_guiMgr); _guiMgr.Initialize(); #region Shorthand GUI item creation // Create a MenuItem Func<UIComponent, String, MenuItem> create_mi = (UIComponent parent, String text) => { MenuItem mi = new MenuItem(_screenMgr, _guiMgr); mi.Text = text; if (parent is MenuBar) (parent as MenuBar).Add(mi); else if (parent is MenuItem) (parent as MenuItem).Add(mi); return mi; }; // Create a TextButton Func<UIComponent, String, int, int, int, int, TextButton> create_btn = (UIComponent parent, String text, int w, int h, int x, int y) => { TextButton btn = new TextButton(_screenMgr, _guiMgr); btn.Text = text; btn.Width = w; btn.Height = h; btn.X = x; btn.Y = y; if (parent is Dialog) (parent as Dialog).Add(btn); else if (parent is Window) (parent as Window).Add(btn); return btn; }; // Create a Dialog Func<String, int, int, int, int, Dialog> create_dialog = (String text, int w, int h, int x, int y) => { Dialog dialog = new Dialog(_screenMgr, _guiMgr); _guiMgr.Add(dialog); dialog.TitleText = text; dialog.Width = w; dialog.Height = h; dialog.X = x; dialog.Y = y; dialog.HasCloseButton = false; int bwidth = 50; int bheight = 20; int bxoffs = 10; int byoffs = dialog.Height - 60; // Ok button TextButton btnOk = create_btn( dialog, "Ok", bwidth, bheight, bxoffs, byoffs); btnOk.Click += delegate(UIComponent sender) { dialog.DialogResult = DialogResult.OK; dialog.CloseWindow(); }; // Cancel button TextButton btnCancel = create_btn( dialog, "Cancel", bwidth, bheight, bxoffs * 2 + bwidth, byoffs); btnCancel.Click += delegate(UIComponent sender) { dialog.DialogResult = DialogResult.Cancel; dialog.CloseWindow(); }; return dialog; }; // Create a text box Func<UIComponent, String, int, int, int, TextBox> create_textbox = (UIComponent parent, String text, int w, int x, int y) => { TextBox textBox = new TextBox(_screenMgr, _guiMgr); textBox.Width = w; textBox.X = x; textBox.Y = y; Label label = new Label(_screenMgr, _guiMgr); label.Text = text; label.Width = 100; label.Height = 50; label.X = x - label.Width; label.Y = y + 5; if (parent is Dialog) { (parent as Dialog).Add(textBox); (parent as Dialog).Add(label); } return textBox; }; #endregion { // Main menu bar MenuBar menuBar = new MenuBar(_screenMgr, _guiMgr); _guiMgr.Add(menuBar); //----------------------------------------------------------------- { // File MenuItem fileButton = create_mi(menuBar, "File"); //------------------------------------------------------------- { // New MenuItem newButton = create_mi(fileButton, "New"); newButton.Click += delegate(UIComponent sender) { Dialog d = create_dialog("New", 300, 200, 100, 100); TextBox rows = create_textbox(d, "Rows", 50, 150, 10); TextBox cols = create_textbox(d, "Cols", 50, 150, 40); TextBox tile = create_textbox(d, "Tile", 100, 150, 70); d.Close += delegate(UIComponent dsender) { switch (d.DialogResult) { case DialogResult.Cancel: return; case DialogResult.OK: int numRows = Convert.ToInt32(rows.Text); int numCols = Convert.ToInt32(cols.Text); _gameLevelMgr.newLevel(numRows, numCols, tile.Text); return; } }; }; } //------------------------------------------------------------- { // Save as MenuItem saveAsButton = create_mi(fileButton, "Save as"); saveAsButton.Click += delegate(UIComponent sender) { Dialog d = create_dialog("Save as", 300, 200, 100, 100); TextBox file = create_textbox(d, "Path", 200, 100, 50); d.Close += delegate(UIComponent dsender) { switch (d.DialogResult) { case DialogResult.Cancel: return; case DialogResult.OK: _gameLevelMgr.saveLevel(LEVEL_DIRECTORY + file.Text); return; } }; }; } //------------------------------------------------------------- { // Load MenuItem loadButton = create_mi(fileButton, "Load"); loadButton.Click += delegate(UIComponent sender) { Dialog d = create_dialog("Load", 300, 200, 100, 100); TextBox file = create_textbox(d, "File", 200, 100, 50); d.Close += delegate(UIComponent dsender) { switch (d.DialogResult) { case DialogResult.Cancel: return; case DialogResult.OK: _gameLevelMgr.loadLevel("levels\\" + file.Text); return; } }; }; } //------------------------------------------------------------- { // Quit to menu MenuItem quitButton = create_mi(fileButton, "Quit to menu"); quitButton.Click += delegate(UIComponent sender) { }; } } //----------------------------------------------------------------- { // Windows MenuItem windows = create_mi(menuBar, "Windows"); Func<String, int, int, int, int, Window> create_win = (String text, int w, int h, int x, int y) => { Window win = new Window(_screenMgr, _guiMgr); _guiMgr.Add(win); win.Width = w; win.Height = h; win.X = x; win.Y = y; win.TitleText = text; return win; }; //------------------------------------------------------------- { // Tile browser MenuItem tbrowser = create_mi(windows, "Tile Browser"); tbrowser.Click += delegate(UIComponent sender) { Window tbwin = create_win("Tile Browser", 300, 500, 400, 100); //----------------------------------------------------- { // Tile buttons TextButton stoneButton = create_btn(tbwin, "Stone", 60, 30, 10, 10); stoneButton.Click += delegate(UIComponent bsender) { Drawable tdrwble = _gameContentMgr.loadDrawable("tile_stone"); foreach (GameTile tile in _selection) tile.Entity.Drawable = tdrwble; }; TextButton grassButton = create_btn(tbwin, "Grass", 60, 30, 10, 50); grassButton.Click += delegate(UIComponent bsender) { Drawable tdrwble = _gameContentMgr.loadDrawable("tile_grass"); foreach (GameTile tile in _selection) tile.Entity.Drawable = tdrwble; }; TextButton rockButton = create_btn(tbwin, "Rock", 60, 30, 10, 90); rockButton.Click += delegate(UIComponent bsender) { Drawable tdrwble = _gameContentMgr.loadDrawable("tile_rock"); foreach (GameTile tile in _selection) tile.Entity.Drawable = tdrwble; }; TextButton sandButton = create_btn(tbwin, "Sand", 60, 30, 10, 130); sandButton.Click += delegate(UIComponent bsender) { Drawable tdrwble = _gameContentMgr.loadDrawable("tile_sand"); foreach (GameTile tile in _selection) tile.Entity.Drawable = tdrwble; }; TextButton stoneSandButton = create_btn(tbwin, "S-Sand", 60, 30, 10, 170); stoneSandButton.Click += delegate(UIComponent bsender) { Drawable tdrwble = _gameContentMgr.loadDrawable("tile_stonesand"); foreach (GameTile tile in _selection) tile.Entity.Drawable = tdrwble; }; } }; } //------------------------------------------------------------- { // Character browser MenuItem chrbrowser = create_mi(windows, "Character Browser"); chrbrowser.Click += delegate(UIComponent sender) { Window chrbwin = create_win("Character Browser", 300, 500, 400, 100); }; } //------------------------------------------------------------- { // Object browser MenuItem itembrowser = create_mi(windows, "Item Browser"); itembrowser.Click += delegate(UIComponent sender) { Window ibwin = create_win("Item Browser", 300, 500, 400, 100); //----------------------------------------------------- { // Item buttons TextButton tree1btn = create_btn(ibwin, "Tree1", 60, 30, 10, 10); tree1btn.Click += delegate(UIComponent bsender) { foreach (GameTile tile in _selection) { GameObject tree = _gameLevelMgr.createGameObject<GameObject>("tree" + _gameLevelMgr.GameObjectCount, "tree1"); tile.Node.attachChildNode(tree.Node); tree.Node.translateTo(tile.Node.PositionIsometric); } }; } }; } } //----------------------------------------------------------------- { // Tool bar Window toolBar = new Window(_screenMgr, _guiMgr); _guiMgr.Add(toolBar); toolBar.HasCloseButton = false; toolBar.Width = _screenMgr.GraphicsDevice.Viewport.Width; toolBar.Height = 60; toolBar.Y = menuBar.Y + menuBar.Height; toolBar.Resizable = false; toolBar.HasFullWindowMovableArea = false; toolBar.TitleBarHeight = 4; int btncount, btnx, btny, btnw, btnh; btncount = 0; btnx = 8; btny = 4; btnw = 60; btnh = 24; //------------------------------------------------------------- { // Deselect TextButton noneButton = create_btn(toolBar, "None", btnw, btnh, ((btnx + btnw) * btncount++), btny); noneButton.Click += delegate(UIComponent sender) { Tool = EditorTool.TOOL_NONE; }; } //------------------------------------------------------------- { // Select TextButton selectButton = create_btn(toolBar, "Select", btnw, btnh, ((btnx + btnw) * btncount++), btny); selectButton.Click += delegate(UIComponent sender) { Tool = EditorTool.TOOL_SELECT; }; } //------------------------------------------------------------- { // Zero TextButton zeroButton = create_btn(toolBar, "Zero", btnw, btnh, ((btnx + btnw) * btncount++), btny); zeroButton.Click += delegate(UIComponent sender) { batchElevation(0.0f); }; } //------------------------------------------------------------- { // Elevate TextButton elevateButton = create_btn(toolBar, "Elevate", btnw, btnh, ((btnx + btnw) * btncount++), btny); elevateButton.Click += delegate(UIComponent sender) { Tool = EditorTool.TOOL_ELEVATE; }; } //------------------------------------------------------------- { // Activate TextButton activateButton = create_btn(toolBar, "Activate", btnw, btnh, ((btnx + btnw) * btncount++), btny); activateButton.Click += delegate(UIComponent sender) { batchActivate(true); }; } //------------------------------------------------------------- { // Deactivate TextButton deactivateButton = create_btn(toolBar, "Deact", btnw, btnh, ((btnx + btnw) * btncount++), btny); deactivateButton.Click += delegate(UIComponent sender) { batchActivate(false); }; } } } return base.initGUI(); }