SDK/MrAG/Gui/MessageBox.cs

177 lines
9.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace MrAG {
public partial class Gui {
public class MessageBox : Base {
private string Title;
private string Text;
private MrAG.Gui.Frame Frame;
private MrAG.Gui.Label Label;
public MrAG.Gui.Button[] Buttons;
private Action<object>[] ButtonActions_ArgLeftMouseClick;
private Action<object>[] ButtonActions_ArgLeftMousePress;
private Action<object>[] ButtonActions_ArgLeftMouseRelease;
private Action<object>[] ButtonActions_ArgRightMouseClick;
private Action<object>[] ButtonActions_ArgRightMousePress;
private Action<object>[] ButtonActions_ArgRightMouseRelease;
private Action<object>[] ButtonActions_ArgMiddleMouseClick;
private Action<object>[] ButtonActions_ArgMiddleMousePress;
private Action<object>[] ButtonActions_ArgMiddleMouseRelease;
public void SetTitle(string text){
this.Frame.Text = text;
Vector2 textsize = MrAG.Draw.GetTextSize(text);
if (textsize.X > this.Frame.Width){
this.Frame.SetSize((int)textsize.X + 20, this.Frame.Height);
this.Frame.Center();
}
}
public void SetText(string text){
this.Label.Text = text;
Vector2 textsize = MrAG.Draw.GetTextSize(text);
if (textsize.X > this.Frame.Width){
this.Frame.SetSize((int)textsize.X + 20, this.Frame.Height);
this.Frame.Center();
}
this.Label.CenterX();
}
public MessageBox(string title, string text) {
this.Title = title;
this.Text = text;
this.Setup();
}
public MessageBox(string title, string text, MrAG.Gui.Button[] bts) {
this.Title = title;
this.Text = text;
this.Buttons = bts;
this.Setup();
}
public override void Remove() {
this.Frame.Remove();
base.Remove();
}
private void Setup() {
Vector2 titlesize = MrAG.Draw.GetTextSize(this.Title);
Vector2 textsize = MrAG.Draw.GetTextSize(this.Text);
this.Frame = new MrAG.Gui.Frame();
this.Frame.SetSize((int)textsize.X + 20, (int)textsize.Y + 42);
this.Frame.Text = this.Title;
this.Label = new MrAG.Gui.Label();
this.Label.Text = this.Text;
this.Label.SetParent(this.Frame);
this.Label.SetY(0);
this.Label.AlignmentX = MrAG.Draw.TextAlignmentX.Center;
this.SetParent(this.Frame);
if (this.Buttons == null) {
MrAG.Gui.Button okbtn = new Button();
okbtn.SetParent(this.Frame);
okbtn.SetSize(100, 20);
okbtn.CenterX();
okbtn.SetY(this.Frame.Height - 20);
okbtn.Text = "Ok";
okbtn.OnLeftMouseClick = new Action(delegate {
this.Frame.Remove();
});
this.Buttons = new Button[] { okbtn };
} else {
int curx = 10;
this.ButtonActions_ArgLeftMouseClick = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgLeftMousePress = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgLeftMouseRelease = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgRightMouseClick = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgRightMousePress = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgRightMouseRelease = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgMiddleMouseClick = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgMiddleMousePress = new Action<object>[this.Buttons.Length];
this.ButtonActions_ArgMiddleMouseRelease = new Action<object>[this.Buttons.Length];
for (int i = 0; i < this.Buttons.Length; i++) {
this.Buttons[i].SetParent(this.Frame);
this.Buttons[i].SetY(this.Frame.Height - 22);
this.Buttons[i].SetX(curx);
this.Buttons[i].SetSize(100, 20);
this.ButtonActions_ArgLeftMouseClick[i] = this.Buttons[i].OnArgumentedLeftMouseClick;
this.ButtonActions_ArgLeftMousePress[i] = this.Buttons[i].OnArgumentedLeftMousePress;
this.ButtonActions_ArgLeftMouseRelease[i] = this.Buttons[i].OnArgumentedLeftMouseRelease;
this.ButtonActions_ArgRightMouseClick[i] = this.Buttons[i].OnArgumentedRightMouseClick;
this.ButtonActions_ArgRightMousePress[i] = this.Buttons[i].OnArgumentedRightMousePress;
this.ButtonActions_ArgRightMouseRelease[i] = this.Buttons[i].OnArgumentedRightMouseRelease;
this.ButtonActions_ArgMiddleMouseClick[i] = this.Buttons[i].OnArgumentedMiddleMouseClick;
this.ButtonActions_ArgMiddleMousePress[i] = this.Buttons[i].OnArgumentedMiddleMousePress;
this.ButtonActions_ArgMiddleMouseRelease[i] = this.Buttons[i].OnArgumentedMiddleMouseRelease;
this.Buttons[i].OnArgumentedLeftMouseClick = new Action<object>(this.btn_ArgLeftMouseClick);
this.Buttons[i].OnArgumentedLeftMousePress = new Action<object>(this.btn_ArgLeftMousePress);
this.Buttons[i].OnArgumentedLeftMouseRelease = new Action<object>(this.btn_ArgLeftMouseRelease);
this.Buttons[i].OnArgumentedRightMouseClick = new Action<object>(this.btn_ArgRightMouseClick);
this.Buttons[i].OnArgumentedRightMousePress = new Action<object>(this.btn_ArgRightMousePress);
this.Buttons[i].OnArgumentedRightMouseRelease = new Action<object>(this.btn_ArgRightMouseRelease);
this.Buttons[i].OnArgumentedMiddleMouseClick = new Action<object>(this.btn_ArgMiddleMouseClick);
this.Buttons[i].OnArgumentedMiddleMousePress = new Action<object>(this.btn_ArgMiddleMousePress);
this.Buttons[i].OnArgumentedMiddleMouseRelease = new Action<object>(this.btn_ArgMiddleMouseRelease);
this.Buttons[i].Tag = i;
curx += this.Buttons[i].Width + 10;
}
if (curx > this.Frame.Width) {
this.Frame.SetWidth(curx);
}
}
this.Frame.Center();
this.Label.CenterX();
}
private void btn_action(Action<object> act, object sender) {
if (act != null){
act.Invoke(sender);
this.Frame.Remove();
}
}
private void btn_ArgLeftMouseClick(object sender) { this.btn_action(this.ButtonActions_ArgLeftMouseClick[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgLeftMousePress(object sender) { this.btn_action(this.ButtonActions_ArgLeftMousePress[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgLeftMouseRelease(object sender) { this.btn_action(this.ButtonActions_ArgLeftMouseRelease[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgRightMouseClick(object sender) { this.btn_action(this.ButtonActions_ArgRightMouseClick[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgRightMousePress(object sender) { this.btn_action(this.ButtonActions_ArgRightMousePress[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgRightMouseRelease(object sender) { this.btn_action(this.ButtonActions_ArgRightMouseRelease[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgMiddleMouseClick(object sender) { this.btn_action(this.ButtonActions_ArgMiddleMouseClick[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgMiddleMousePress(object sender) { this.btn_action(this.ButtonActions_ArgMiddleMousePress[(int)(sender as MrAG.Gui.Base).Tag], sender); }
private void btn_ArgMiddleMouseRelease(object sender) { this.btn_action(this.ButtonActions_ArgMiddleMouseRelease[(int)(sender as MrAG.Gui.Base).Tag], sender); }
}
}
}