mirror of
https://git.checksum.fail/alec/erythros
synced 2025-12-13 06:29:54 +02:00
System/Libraries/Widget: Initial support for ListViewWidget
This commit is contained in:
@@ -232,18 +232,12 @@ class VerticalScrollBarWidget : Widget {
|
||||
I64 value;
|
||||
};
|
||||
|
||||
class @list_view_item
|
||||
{
|
||||
@list_view_item* prev;
|
||||
@list_view_item* next;
|
||||
Context2D* icon;
|
||||
U8 text[1024];
|
||||
};
|
||||
|
||||
class ListViewWidget : Widget {
|
||||
BitmapFont* font;
|
||||
U32 color;
|
||||
@list_view_item* items;
|
||||
I64 index;
|
||||
JsonArray* columns;
|
||||
JsonArray* items;
|
||||
};
|
||||
|
||||
class TabPanelTab {
|
||||
@@ -650,6 +644,42 @@ Bool @widget_input_handle_key(BitmapFontTextInputWidget* widget)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
U0 @widget_listview_select_row(ListViewWidget* widget)
|
||||
{
|
||||
if (widget->index > -1 && widget->items && widget->items->length && widget->index < widget->items->length) {
|
||||
widget->items->o(widget->index)->set("selected", 1);
|
||||
}
|
||||
}
|
||||
|
||||
Bool @widget_listview_handle_key(ListViewWidget* widget)
|
||||
{
|
||||
I64 key = Keyboard.active_key;
|
||||
I64 tS = Keyboard.active_key_tS;
|
||||
I64 i;
|
||||
if (key && tS != Keyboard.last_key_tS) {
|
||||
if (!KeyDown(SC_SHIFT)) {
|
||||
// Clear selection
|
||||
for (i = 0; i < widget->items->length; i++) {
|
||||
widget->items->o(i)->set("selected", 0);
|
||||
}
|
||||
}
|
||||
switch (key) {
|
||||
case SC_CURSOR_UP:
|
||||
widget->index = Max(0, widget->index - 1);
|
||||
@widget_listview_select_row(widget);
|
||||
break;
|
||||
case SC_CURSOR_DOWN:
|
||||
widget->index = Min(widget->items->length - 1, widget->index + 1);
|
||||
@widget_listview_select_row(widget);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
Widget* @widget_create_widget(Window* win, I64 type, I64 x, I64 y, I64 width,
|
||||
I64 height)
|
||||
{
|
||||
@@ -750,7 +780,9 @@ Widget* @widget_create_widget(Window* win, I64 type, I64 x, I64 y, I64 width,
|
||||
break;
|
||||
case WIDGET_TYPE_LISTVIEW:
|
||||
widget(ListViewWidget*)->color = Color(0, 0, 0);
|
||||
widget(ListViewWidget*)->items = CAlloc(sizeof(@list_view_item));
|
||||
widget(ListViewWidget*)->columns = Json.CreateArray(Fs);
|
||||
widget(ListViewWidget*)->items = Json.CreateArray(Fs);
|
||||
widget(ListViewWidget*)->index = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -874,7 +906,9 @@ U0 @widget_init_widget(Widget* widget, Window* win, I64 type, I64 x, I64 y,
|
||||
break;
|
||||
case WIDGET_TYPE_LISTVIEW:
|
||||
widget(ListViewWidget*)->color = Color(0, 0, 0);
|
||||
widget(ListViewWidget*)->items = CAlloc(sizeof(@list_view_item));
|
||||
widget(ListViewWidget*)->columns = Json.CreateArray(Fs);
|
||||
widget(ListViewWidget*)->items = Json.CreateArray(Fs);
|
||||
widget(ListViewWidget*)->index = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user