/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. _spriteBatch = new SpriteBatch(GraphicsDevice); FontManager.Instance.SetContentManager(Content); _uiEditor = UI.LoadJSON("UIDescription/Editor/editor.json"); _uiEditor.SetSize( _graphics.PreferredBackBufferWidth, _graphics.PreferredBackBufferHeight ); _uiEditor.Start(); _modelEditor = new ViewModel(_uiEditor); //Callbacks _modelEditor.SetCallback("NewUI", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; if (button.Value == ButtonState.Pressed) { NewUI(); } }); _modelEditor.SetCallback("SaveUI", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; if (button.Value == ButtonState.Pressed) { SaveUI(); } }); var tree = _uiEditor.GetItem <Tree>("Tree"); _modelEditor.SetCallback("Tree", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var itemSelected = tree.GetItemSelected(); if (itemSelected == "UI") { } else { var parent = _uiEdit.GetItem(itemSelected); LoadProperties(parent); } }); _modelEditor.SetCallback("AddButton", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; var itemSelected = tree.GetItemSelected(); if (button.Value == ButtonState.Pressed && _uiEdit != null && itemSelected != null) { var newButton = new Button() { Name = Guid.NewGuid().ToString(), Width = 100, Height = 30, Text = "Button", Font = "Fonts/Arial-16", Color = Color.White }; if (itemSelected == "UI") { _uiEdit.AddItem(newButton); tree.AddItem(newButton.Name, itemSelected); } else { var parent = _uiEdit.GetItem(itemSelected); if (parent.Type == EnumControl.CONTAINER) { _uiEdit.AddItem(newButton, itemSelected); tree.AddItem(newButton.Name, itemSelected); } } } }); _modelEditor.SetCallback("AddTextbox", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; var itemSelected = tree.GetItemSelected(); if (button.Value == ButtonState.Pressed && _uiEdit != null && itemSelected != null) { var newTextbox = new Textbox() { Name = Guid.NewGuid().ToString(), Width = 140, Height = 40, Text = "Textbox", Background = "Textures/Controls/blue_button13", Font = "Fonts/Arial-16", Color = Color.Black }; if (itemSelected == "UI") { _uiEdit.AddItem(newTextbox); tree.AddItem(newTextbox.Name, itemSelected); } else { var parent = _uiEdit.GetItem(itemSelected); if (parent.Type == EnumControl.CONTAINER) { _uiEdit.AddItem(newTextbox, itemSelected); tree.AddItem(newTextbox.Name, itemSelected); } } } }); _modelEditor.SetCallback("AddProgressBar", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; var itemSelected = tree.GetItemSelected(); if (button.Value == ButtonState.Pressed && _uiEdit != null && itemSelected != null) { var newProgressBar = new ProgressBar() { Name = Guid.NewGuid().ToString(), Width = 140, Height = 50, Text = "", Value = 50, BackgroundColor = Color.Gray, Texture = "Textures/progressBar", Font = "Fonts/Arial-16", Color = Color.YellowGreen }; if (itemSelected == "UI") { _uiEdit.AddItem(newProgressBar); tree.AddItem(newProgressBar.Name, itemSelected); } else { var parent = _uiEdit.GetItem(itemSelected); if (parent.Type == EnumControl.CONTAINER) { _uiEdit.AddItem(newProgressBar, itemSelected); tree.AddItem(newProgressBar.Name, itemSelected); } } } }); _modelEditor.SetCallback("AddPanel", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; var itemSelected = tree.GetItemSelected(); if (button.Value == ButtonState.Pressed && _uiEdit != null && itemSelected != null) { var newPanel = new Panel() { Name = Guid.NewGuid().ToString(), Width = 140, Height = 50, Texture = "Textures/Controls/grey_panel", Color = Color.Gray }; if (itemSelected == "UI") { _uiEdit.AddItem(newPanel); tree.AddItem(newPanel.Name, itemSelected); } else { var parent = _uiEdit.GetItem(itemSelected); if (parent.Type == EnumControl.CONTAINER) { _uiEdit.AddItem(newPanel, itemSelected); tree.AddItem(newPanel.Name, itemSelected); } } } }); _modelEditor.SetCallback("SaveProperties", EnumCallback.ON_VALUE_CHANGE, (sender, e) => { var button = (UIElement <ButtonState>)sender; var itemSelected = tree.GetItemSelected(); if (button.Value == ButtonState.Pressed && _uiEdit != null && itemSelected != null && itemSelected != "UI") { var textboxX = _uiEditor.GetItem <Textbox>("TextboxX"); var textboxY = _uiEditor.GetItem <Textbox>("TextboxY"); var textboxWidth = _uiEditor.GetItem <Textbox>("TextboxWidth"); var textboxHeight = _uiEditor.GetItem <Textbox>("TextboxHeight"); var item = _uiEdit.GetItem(itemSelected); int value = (int)item.X; if (int.TryParse(textboxX.Text, out value)) { item.X = int.Parse(textboxX.Text); } value = (int)item.Y; if (int.TryParse(textboxY.Text, out value)) { item.Y = int.Parse(textboxY.Text); } value = (int)item.Width; if (int.TryParse(textboxWidth.Text, out value)) { item.Width = int.Parse(textboxWidth.Text); } value = (int)item.Height; if (int.TryParse(textboxHeight.Text, out value)) { item.Height = int.Parse(textboxHeight.Text); } } }); TextureManager.Instance.SetContentManager(Content); FontManager.Instance.SetContentManager(Content); var textureBlank = new Texture2D(_graphics.GraphicsDevice, 1, 1); Color[] tcolor = new Color[1]; textureBlank.GetData <Color>(tcolor); tcolor[0] = new Color(255, 255, 255, 255); textureBlank.SetData <Color>(tcolor); TextureManager.Instance.AddTexture("Blank", textureBlank); }