protected override void Initialize() { _guiList = new List <IObject>(); MainInstance = this; // This is necessary for performance, it caches the resources before first use var caching = new ComboBox(); caching.Initialize(); caching.InitPropertyPanel(); MouseGUI.Load(); _fileMenu = new ComboBox(); _fileMenu.Position = new Point(32, 32); _fileMenu.Initialize(); _fileMenu.Editable = false; _fileMenu.AddName("File", Color.Black, Singleton.Font.GetFont(FontManager.FontType.LUCIDA_CONSOLE)); _fileMenu.AddNewItem("Save", () => { //TODO: }); _fileMenu.AddNewItem("Load", () => { _fileMenu.Hide(); // TODO: }); _fileMenu.AddNewItem("Export", () => { // TODO: _fileMenu.Hide(); }); _fileMenu.AddNewItem("Close", () => { Exit(); }); // Toolbox elements UIToolShelf = new Frame("UItoolboxTX", DrawPriority.NORMAL, MoveOption.STATIC); UIToolShelf.Position = new Point(32, 100); UIToolShelf.Initialize(); _toolShelfComboBox = new ComboBox(); _toolShelfComboBox.Initialize(); _toolShelfComboBox.Editable = true;; _toolShelfComboBox.DefaultOffset = new Point(8, 43); _toolShelfCheckbox = new CheckBox(); _toolShelfCheckbox.Initialize(); _toolShelfCheckbox.Text = "CheckBox"; _toolShelfCheckbox.Editable = true;; _toolShelfLabel = new Label(); _toolShelfLabel.Initialize(); _toolShelfLabel.TextColor = Color.White; _toolShelfLabel.Editable = true;; _toolShelfTextbox = new TextBox(); _toolShelfTextbox.Initialize(); _toolShelfTextbox.Selected = false; _toolShelfTextbox.Editable = true;; _toolShelfButton = new Button(); _toolShelfButton.Initialize(); _toolShelfButton.Editable = true;; _toolShelfButton.TextColor = Color.Black; _toolShelfToggle = new ToggleButton(); _toolShelfToggle.Initialize(); _toolShelfToggle.Editable = true;; _toolShelfToggle.Toggle = false; _toolShelfSlider = new SliderBar(); _toolShelfSlider.Initialize(); _toolShelfSlider.Editable = true;; _toolShelfMultilineTextbox = new MultiTextBox(); _toolShelfMultilineTextbox.Initialize(); _toolShelfMultilineTextbox.Editable = true;; UIToolShelf.AddItem(new Point(32, 32), _toolShelfTextbox); UIToolShelf.AddItem(new Point(32, 96), _toolShelfLabel); UIToolShelf.AddItem(new Point(32, 160), _toolShelfButton); UIToolShelf.AddItem(new Point(32, 224), _toolShelfComboBox); UIToolShelf.AddItem(new Point(32, 288), _toolShelfCheckbox); UIToolShelf.AddItem(new Point(32, 352), _toolShelfToggle); UIToolShelf.AddItem(new Point(16, 416), _toolShelfSlider); UIToolShelf.AddItem(new Point(16, 480), _toolShelfMultilineTextbox); Selection = new ElementSelection(); Selection.Initialize(); Selection.Editable = false; Selection.Position = Point.Zero; UIToolShelf.Show(); _mainFrameCaption = new Label("This is the Actual Window"); _mainFrameCaption.Initialize(); _mainFrameCaption.TextFont = Singleton.Font.GetFont(FontManager.FontType.GEORGIA); //Button btn = new Button(); //btn.Initialize(); //btn.Name = "btn1"; //btn.TextColor = Color.Black; //btn.Setup(); //Label lb = new Label("Hello World"); //lb.Initialize(); //lb.Name = "lb1"; //lb.TextColor = Color.White; //lb.Setup(); //ComboBox cb = new ComboBox(); //cb.Initialize(); //cb.Name = "cb1"; //cb.TextColor = Color.Black; //cb.Setup(); //SliderBar sb = new SliderBar(); //sb.Initialize(); //sb.Name = "sb1"; //sb.Setup(); //CheckBox ckb = new CheckBox(); //ckb.Initialize(); //ckb.Name = "ckb1"; //ckb.Text = "Checkbox"; //ckb.Setup(); //ToggleButton tb = new ToggleButton(); //tb.Initialize(); //tb.Name = "tb1"; //tb.Setup(); //TextBox txt = new TextBox(); //txt.Initialize(); //txt.Setup(); //txt.Name = "txt1"; //txt.Text = "Sample"; //MultiTextBox mtb = new MultiTextBox(); //mtb.Initialize(); //mtb.Setup(); //mtb.Name = "mtb1"; //RootContainer = new Grid(); //RootContainer.Position = new Point(568, 100); //RootContainer.Initialize(); //RootContainer.Setup(); //RootContainer.AddItem(new Point(100, 100), btn, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(100, 100), lb, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(100, 100), cb, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(100, 100), sb, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(200, 300), ckb, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(100, 100), txt, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(400, 300), tb, UIObject.DrawPriority.NORMAL); //RootContainer.AddItem(new Point(100, 300), mtb, UIObject.DrawPriority.NORMAL); ////items.AddRange(new UIObject[]{ ////btn, lb , cb, sb }); //try //{ // using (XmlWriter xmlWriter = XmlTool.OpenXmlWriter("Text2.XRML")) // { // XmlTool.Serialize(RootContainer, xmlWriter, XmlTool.AddException(typeof(Color), "PackedValue")); // } //} //catch (Exception ex) //{ //} // Live editing is already possible only by using the Text2.XRML file // A full fledged XML Editor will be implemented next try { using (var XmlReader = XmlTool.OpenXmlReader("Text2.XRML")) { RootContainer = (Grid)XmlTool.Deserialize(typeof(Grid), XmlReader, new XmlRootAttribute() { ElementName = "Grid", IsNullable = true }); } RootContainer.Initialize(); RootContainer.Setup(); RootContainer.Position = new Point(568, 100); List <Slot <UIObject> > backup = new List <Slot <UIObject> >(); backup = RootContainer.Slots.ToList(); // Temporary workaround to add items in the same order as it was saved // However it is not perfect yet backup = backup.OrderBy(s => s, Comparer <Slot <UIObject> > .Create((x, y) => (Point)x.Position > y.Position? 1 : (Point)x.Position < y.Position ? -1 : 0)).ToList(); for (int i = backup.Count - 1; i >= 0; i--) { backup[i].Item.Editable = true; backup[i].Item.Locked = false; RootContainer.Insert(backup[i]); } RootContainer.UpdateLayout(); RootContainer.Show(); } catch (Exception ex) { } using (TextReader reader = XmlTool.OpenTextReader("Text2.XRML")) { _xrml_text = reader.ReadToEnd(); } _guiList.Add(Selection); _guiList.Add(_fileMenu); _guiList.Add(UIToolShelf); _guiList.Add(RootContainer); base.Initialize(); }
protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } string xrml_current = ""; if (!string.IsNullOrEmpty(_xrml_text)) { using (TextReader reader = XmlTool.OpenTextReader("Text2.XRML")) { xrml_current = reader.ReadToEnd(); } if (_xrml_text != xrml_current) { try { using (XmlReader xmlReader = XmlTool.OpenXmlReader("Text2.XRML")) { RemoveContainer(); RootContainer = (IContainer)XmlTool.Deserialize(typeof(Grid), xmlReader); RootContainer.Position = new Point(568, 100); RootContainer.Initialize(); RootContainer.Setup(); List <Slot <UIObject> > backup = new List <Slot <UIObject> >(); backup = RootContainer.Slots.ToList(); // Temporary workaround to add items in the same order as it was saved // However it is not perfect yet backup = backup.OrderBy(s => s, Comparer <Slot <UIObject> > .Create((x, y) => (Point)x.Position > y.Position ? 1 : (Point)x.Position < y.Position ? -1 : 0)).ToList(); for (int i = backup.Count - 1; i >= 0; i--) { backup[i].Item.Editable = true; backup[i].Item.Locked = false; RootContainer.Insert(backup[i]); } RootContainer.AddSpriteRenderer(_spriteBatch); RootContainer.AddStringRenderer(_spriteBatch); RootContainer.Update(gameTime); RootContainer.UpdateLayout(); AddContainer(); } _xrml_text = xrml_current; } catch (Exception ex) { } } } if (Singleton.Input.KeyReleased(Keys.Escape)) { Exit(); } if (Singleton.Input.KeyReleased(Keys.Delete)) { RootContainer.RemoveItem(CurrentObject); RootContainer.RemoveSlot(CurrentObject); RootContainer.Update(gameTime); RootContainer.UpdateLayout(); } for (int i = _guiList.Count - 1; i >= 0; i--) { _guiList[i].Update(gameTime); } _fileMenu.Update(gameTime); Singleton.Input.Update(); MouseGUI.HitObject = null; for (int i = 0; i < _guiList.Count; i++) { MouseGUI.HitObject = _guiList[i].HitTest(MouseGUI.Position); if (MouseGUI.HitObject != null) { break; } } if (MouseGUI.HitObject != null) { if (MouseGUI.LeftWasPressed) { MouseGUI.Focus = MouseGUI.HitObject; MouseGUI.DragOffset = MouseGUI.Focus.Position - MouseGUI.Position; _fromContainer = RootContainer.Contains(MouseGUI.Focus) ? RootContainer : UIToolShelf; if (MouseGUI.Focus.Editable && RootContainer.Contains(MouseGUI.Focus)) { RootContainer.RemoveItem(MouseGUI.Focus); } } else { if (MouseGUI.Focus != null) { if (MouseGUI.Focus.Editable && MouseGUI.Focus.MoveState == MoveOption.DYNAMIC) { MouseGUI.Focus.Position = MouseGUI.Position + MouseGUI.DragOffset; MouseGUI.Focus.Update(gameTime); // TODO: Make sure this is inside the MainWindowFrame bounds if (MouseGUI.LeftIsPressed && RootContainer.Contains(MouseGUI.Position)) { Point newItemPosition = RootContainer.SimulateInsert(MouseGUI.Focus.Position - RootContainer.Position, MouseGUI.Focus); newItemPosition += RootContainer.Position; Point rightBarPosition = new Point(newItemPosition.X + MouseGUI.Focus.Width, newItemPosition.Y); Point leftBarPosition = new Point(newItemPosition.X, newItemPosition.Y); Point topBarPosition = new Point(newItemPosition.X, newItemPosition.Y); Point bottomBarPosition = new Point(newItemPosition.X, newItemPosition.Y + MouseGUI.Focus.Height); Selection.UpdatePosition(rightBarPosition, leftBarPosition, topBarPosition, bottomBarPosition); Selection.UpdateSize(MouseGUI.Focus); Selection.Show(); } } if (MouseGUI.LeftWasReleased) { Selection.Hide(); if (MouseGUI.Focus.Editable && RootContainer.Contains(MouseGUI.Focus) && _fromContainer != UIToolShelf) { CurrentObject = MouseGUI.Focus; RootContainer.RemoveSlot(MouseGUI.Focus); RootContainer.AddItem(MouseGUI.Focus.Position - RootContainer.Position, MouseGUI.Focus); RootContainer.Update(gameTime); RootContainer.UpdateLayout(); } if (MouseGUI.Focus is UIObject && !MouseGUI.Focus.Editable) { MouseGUI.Focus.MouseEvent.Click(); } if (MouseGUI.Focus.Editable && RootContainer.Contains(MouseGUI.Focus.Position) && _fromContainer == UIToolShelf) { CurrentObject = UIFactory <UIObject, IContainer> .CreateObject(MouseGUI.Focus.Position, MouseGUI.Focus, RootContainer); CurrentObject.InitPropertyPanel(); CurrentObject.AddSpriteRenderer(_mainBatch); CurrentObject.AddStringRenderer(_mainBatch); CurrentObject.AddPropertyRenderer(_mainBatch); RootContainer.Update(gameTime); RootContainer.UpdateLayout(); } if (MouseGUI.Focus.Locked) { CurrentObject = MouseGUI.Focus; } MouseGUI.ClearFocus(); } } } } if (MouseGUI.Focus != null && !MouseGUI.Focus.Locked) { if (MouseGUI.LeftIsPressed && _fromContainer != UIToolShelf) { if (MouseGUI.Position.X <= RootContainer.Rect.Left) { MouseGUI.Focus.Position = new Point(RootContainer.Rect.Left, MouseGUI.Position.Y); } if (MouseGUI.Position.X + MouseGUI.Focus.Width >= RootContainer.Rect.Right) { MouseGUI.Focus.Position = new Point(RootContainer.Rect.Right - MouseGUI.Focus.Width, MouseGUI.Position.Y); } if (MouseGUI.Position.Y + MouseGUI.Focus.Height >= RootContainer.Rect.Bottom) { MouseGUI.Focus.Position = new Point(MouseGUI.Position.X, RootContainer.Rect.Bottom - MouseGUI.Focus.Height); } if (MouseGUI.Position.Y - MouseGUI.Focus.Height <= RootContainer.Rect.Top) { MouseGUI.Focus.Position = new Point(MouseGUI.Position.X, RootContainer.Rect.Top); } MouseGUI.Focus.Update(gameTime); } } MouseGUI.Update(); base.Update(gameTime); }