В настоящее время я пытаюсь закодировать библиотеку графического интерфейса в love2dcs, однако мне было интересно, как бы я мог структурировать классы таким образом, чтобы я мог объявить элементы графического интерфейса следующим образом ..
public static class Editor
{
Window MainWindow
public static void Init()
{
MainWindow = new Window("Window0", "", 0, 0, 256, 240) //List of Widgets
{
new Window("Window1", "", 0, 0, 256, 240), //List of Widgets
new Window("Window2", "", 0, 0, 256, 16) //List of Widgets
{
//String
new TextEdit("TextEdit1", "Hello", 0, 0,256, 16) = "HelloWorld0"
}
};
//1st way to check for window2 press
GetWidget("Window2").Pressed += OnWindow2Pressed()
}
public static void Update()
{
MainWindow.Update();
//2nd way to check for window2 press
if (MainWindow.IsPressed("Window2"))
{
GetWidget("TextEdit1").Value = "HelloWorld1!";
}
}
public static void Render()
{
MainWindow.Render();
}
private static void OnWindow2Pressed()
{
Window window2 = GetWidget("Window2");
GetWidget("Window2").Add
(
new TextEdit("TextEdit1", "Hello", 0, 0+(window2.Value.Count*16), 256, 16) = "HelloWorld3"
);
}
}
если кто-нибудь знает, как это сделать, и может опубликовать некоторый код о том, как настроить класс виджета для приема параметров типа, чтобы это работало, я был бы очень благодарен
РЕДАКТИРОВАТЬ : это большевопрос о структуре классов, а как мне сделать это вопрос
проблема здесь в том, что я не могу напрямую наследовать от List, потому что мне нужно было бы указать тип виджета и тип значения
EDIT2 : поэтому есть попытка сделать это, но мне не нравится, что я пытаюсь неявно привести к окну из WidgetList.
public class WidgetList : List<Widget>
{
public Widget Widget { get; set; }
public WidgetList(Widget widget)
{
widget = Widget;
}
public static implicit operator Widget(WidgetList widgetList)
{
return widgetList.Widget;
}
}
public class Widget
{
//Child Widgets
public Widget Parent { get; private set; } = null;
public WidgetList Children { get; private set; } = null;
//Callers
private Widget(string name, string text, int x, int y, int w, int h)
{
Children = new WidgetList(this);
Name = name;
Text = text;
X = x;
Y = y;
W = w;
H = h;
OnCreate();
}
public static WidgetList New(string name, string text, int x, int y, int w, int h)
{
return new WidgetList(new Widget(name, text, x, y, w, h));
}
}
public class Test
{
public static Window Window;
public static void Do()
{
Window = Window.New("Window0", "", 0, 0, 256, 240) //List of Widgets
{
Window.New("Window1", "", 0, 0, 256, 240), //List of Widgets
Window.New("Window1", "", 0, 0, 256, 240) //List of Widgets
};
}
}