using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MrAG { public partial class Gui { public class Base { #region actions public Action OnLeftMousePress; public Action OnLeftMouseRelease; public Action OnLeftMouseClick; public Action OnLeftDoubleMouseClick; public Action OnRightMousePress; public Action OnRightMouseRelease; public Action OnRightMouseClick; public Action OnRightDoubleMouseClick; public Action OnMiddleMousePress; public Action OnMiddleMouseRelease; public Action OnMiddleMouseClick; public Action OnMiddleDoubleMouseClick; public Action OnScrollUp; public Action OnScrollDown; public Action OnKeyPress; public Action OnFocus; public Action OnUnFocus; public Action OnMove; public Action OnResize; public Action OnParent; public Action OnRemove; public Action OnUpdate; public Action OnDraw; public Action OnArgumentedLeftMousePress; public Action OnArgumentedLeftMouseRelease; public Action OnArgumentedLeftMouseClick; public Action OnArgumentedLeftDoubleMouseClick; public Action OnArgumentedRightMousePress; public Action OnArgumentedRightMouseRelease; public Action OnArgumentedRightMouseClick; public Action OnArgumentedRightDoubleMouseClick; public Action OnArgumentedMiddleMousePress; public Action OnArgumentedMiddleMouseRelease; public Action OnArgumentedMiddleMouseClick; public Action OnArgumentedMiddleDoubleMouseClick; public Action OnArgumentedScrollUp; public Action OnArgumentedScrollDown; public Action OnArgumentedKeyPress; public Action OnArgumentedFocus; public Action OnArgumentedUnFocus; public Action OnArgumentedMove; public Action OnArgumentedResize; public Action OnArgumentedParent; public Action OnArgumentedRemove; public Action OnArgumentedUpdate; public Action OnArgumentedDraw; #endregion public List Children = new List(); public object Tag; public bool Removed; public bool Enabled = true; public bool HasFocus{ get{ return MrAG.Gui.CurrentFocus == this; } set{ if (value){ this.SetFocus(); }else{ if (this.HasFocus){ MrAG.Gui.CurrentFocus = null; } } } } private int ParrentOffsetX; private int ParrentOffsetY; #region Interal Get/Set private int _X; private int _Y; private int _Width; private int _Height; private Gui.Base _parent; private bool _render = true; public bool Render{ get { return this._render; } set{ this._render = value; foreach (MrAG.Gui.Base pnl in this.Children) pnl.Render = this._render; } } public int X{ get{return this._X;} set{this.SetX(value);} } public int Y{ get{return this._Y;} set{this.SetY(value);} } public int Width{ get{return this._Width;} set{this.SetWidth(value);} } public int Height{ get{return this._Height;} set{this.SetHeight(value);} } public Gui.Base Parent{ set{ this.SetParent(value); } get{ return this._parent; } } #endregion public Base() { MrAG.Gui.AddObject(this); } public virtual void SetPos(int x, int y) { if (this.Removed) return; if (this.Parent != null) { this.ParrentOffsetX = x; this.ParrentOffsetY = y; x += this.Parent.X; y += this.Parent.Y; } this._X = x; this._Y = y; if (this.OnMove != null) this.OnMove.Invoke(); for (int i = 0; i < this.Children.Count; i++) { this.Children[i].SetPos(this.Children[i].ParrentOffsetX, this.Children[i].ParrentOffsetY); } } public virtual void SetSize(int w, int h) { if (this.Removed) return; this._Width = w; this._Height = h; if (this.OnResize != null) this.OnResize.Invoke(); } public virtual void Center() { if (this.Removed) return; if (this.Parent != null){ this.X = (this.Parent.Width / 2) - (this.Width / 2); this.Y = (this.Parent.Height / 2) - (this.Height / 2); }else{ this.X = (MrAG.Gui.MainForm.Width / 2) - (this.Width / 2); this.Y = (MrAG.Gui.MainForm.Height / 2) - (this.Height / 2); } } public virtual void CenterX() { if (this.Removed) return; if (this.Parent != null){ this.X = (this.Parent.Width / 2) - (this.Width / 2); }else{ this.X = (MrAG.Gui.MainForm.Width / 2) - (this.Width / 2); } } public virtual void CenterY() { if (this.Removed) return; if (this.Parent != null){ this.Y = (this.Parent.Height / 2) - (this.Height / 2); }else{ this.Y = (MrAG.Gui.MainForm.Height / 2) - (this.Height / 2); } } public virtual void SetParent(Gui.Base obj) { if (this.Removed) return; if (this._parent == obj) return; if (this._parent != null) { this._parent.Children.Remove(this); this._parent = null; } else { MrAG.Gui.RemoveObject(this); } this.Removed = false; this._parent = obj; this._parent.Children.Add(this); if (this.OnParent != null) this.OnParent.Invoke(); } public virtual void Remove() { this.Removed = true; MrAG.Gui.RemoveObject(this); if (this.OnRemove != null) this.OnRemove.Invoke(); } public virtual void BringToFront() { if (this.Removed) return; if (this.Parent != null) { this.Parent.BringToFront(); this.Parent.Children.Remove(this); this.Parent.Children.Add(this); } else { MrAG.Gui.RemoveObject(this); MrAG.Gui.AddObject(this); } MrAG.Gui.BroughtToFront = true; } public virtual bool Hovering() { if (this.Removed) return false; int x = MrAG.Gui.CurMouseState.X; int y = MrAG.Gui.CurMouseState.Y; return x >= this.X && x <= this.X + this.Width && y >= this.Y && y <= this.Y + this.Height; } //TODO: Recode this... public virtual bool IsActive() { if (this.Removed) return false; return Hovering() && Microsoft.Xna.Framework.Input.Mouse.GetState().LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed; } public virtual void Update(){ if (this.Removed) return; if (this.Render) { bool preftofront = MrAG.Gui.BroughtToFront; MrAG.Gui.BroughtToFront = false; for (int i = 0; i < this.Children.Count; i++){ this.Children[i].Update(); if (BroughtToFront){ MrAG.Gui.BroughtToFront = false; i--; } } MrAG.Gui.BroughtToFront = preftofront; if (this.OnUpdate != null) this.OnUpdate.Invoke(); } } public virtual void Draw(){ if (this.Removed) return; if (this.Render) { bool preftofront = MrAG.Gui.BroughtToFront; MrAG.Gui.BroughtToFront = false; for (int i = 0; i < this.Children.Count; i++){ if (this.Children[i].Render) this.Children[i].Draw(); if (BroughtToFront){ MrAG.Gui.BroughtToFront = false; i--; } } MrAG.Gui.BroughtToFront = preftofront; if (this.OnDraw != null) this.OnDraw.Invoke(); } } public virtual void ClearChildren(){ if (this.Removed) return; for (int i = 0;i < this.Children.Count; i++){ this.Children[i].Remove(); i--; } } public virtual void LeftMousePress(int x, int y) {} public virtual void RightMousePress(int x, int y) {} public virtual void MiddleMousePress(int x, int y) {} public virtual void LeftMouseRelease(int x, int y) {} public virtual void RightMouseRelease(int x, int y) {} public virtual void MiddleMouseRelease(int x, int y) {} public virtual void LeftMouseClick(int x, int y) {} public virtual void RightMouseClick(int x, int y) {} public virtual void MiddleMouseClick(int x, int y) {} public virtual void LeftDoubleMouseClick(int x, int y) { this.LeftMouseClick(x, y); } public virtual void RightDoubleMouseClick(int x, int y) { this.RightMouseClick(x, y); } public virtual void MiddleDoubleMouseClick(int x, int y) { this.MiddleMouseClick(x, y); } public virtual void DoClick(int x, int y, MouseKey mouseKey) {} public virtual void DoDoubleClick(int x, int y, MouseKey mouseKey) {} public virtual void FocusGained() {} public virtual void FocusLost() {} public virtual void DoScrollUp() {} public virtual void DoScrollDown() {} public virtual void SetX(int x) { this.SetPos(x, this.Parent != null ? this.ParrentOffsetY : this.Y); } public virtual void SetY(int y) { this.SetPos(this.Parent != null ? this.ParrentOffsetX : this.X, y); } public virtual void SetWidth(int w){ this.SetSize(w, this.Height); } public virtual void SetHeight(int h){ this.SetSize(this.Width, h); } public virtual void SetFocus() { MrAG.Gui.CurrentFocus = this; } public virtual void KeyPress(MrAG.Gui.Key key) {} } } }