fixed all errors

This commit is contained in:
Timerix22 2023-05-24 03:03:02 +06:00
parent 4e2376f251
commit e48f7cd6b5
13 changed files with 209 additions and 143 deletions

2
kerep

@ -1 +1 @@
Subproject commit 27be5beacdfda586f518ab05de050775ce7b5f54
Subproject commit 70807ed22b4c34db247fd8fc1ca1c776dd27ab4c

View File

@ -9,8 +9,8 @@
void UIDtsodFileModel_freeMembers(void* _fm){
UIDtsodFileModel* fm=_fm;
DtsodV24_free(fm->dtsod);
free(fm->dtsod_text);
free(fm->file_name);
// free(fm->dtsod_text);
// free(fm->file_name);
}
kt_define(UIDtsodFileModel, UIDtsodFileModel_freeMembers, NULL);
@ -58,7 +58,7 @@ UI_Maybe UIDtsodParser_parseFile(UIDtsodParser* parser, char* file_path){
UI_Maybe UIDtsodParser_parseText(UIDtsodParser* parser, char* file_name_placeholder, char* text){
UI_try(DtsodV24_deserialize(text), _m_dtsod, ;);
UIDtsodFileModel fm={
.file_name=cptr_copy(file_name_placeholder),
.file_name=file_name_placeholder,
.dtsod_text=text,
.dtsod=_m_dtsod.value.VoidPtr
};
@ -82,9 +82,11 @@ kt_define(UIContext, _UIContext_freeMembers, NULL);
UI_Maybe UIElement_deserialize(Dtsod* dtsod){
Unitype uni;
Dtsod_get_necessary(dtsod, "type");
UITDescriptor* ui_type=uni.VoidPtr;
char* type_name;
Dtsod_tryGet_cptr(dtsod, "type", type_name, true);
UITDescriptor* ui_type=UITDescriptor_getByName(type_name);
if(ui_type==NULL)
UI_safethrow_msg(cptr_concat("invalid type '", type_name, "'"), ;);
UI_try(ui_type->deserialize(dtsod), _m_ui, ;);
return _m_ui;
}
@ -96,16 +98,22 @@ UI_Maybe UIDtsodParser_constructUIContext(UIDtsodParser* parser){
}
Autoarr_foreach(parser->file_models, fm,
Hashtable_foreach(fm.dtsod, dtsod_elem,
if(cptr_compare(dtsod_elem.key, "tui_dtsod_version")){
i32 file_parser_version;
Dtsod_tryGet_i64(fm.dtsod, "parser_version", file_parser_version, true);
if(file_parser_version!=UIDtsodParser_version){
UI_safethrow(UIError_InvalidVersion,;);
}
char* file_namespace;
Dtsod_tryGet_cptr(fm.dtsod, "namespace", file_namespace, true);
}
else if(cptr_compare(dtsod_elem.key, "ui")) {
Hashtable_foreach(fm.dtsod, dtsod_elem,
if(cptr_compare(dtsod_elem.key, "ui")) {
Autoarr_Unitype* ui_ar=dtsod_elem.value.VoidPtr;
Autoarr_foreach(ui_ar, ui_el_dtsod,
UI_try(UIElement_deserialize(ui_el_dtsod.VoidPtr),_m_ui,;);
UIElement_Ptr new_el=_m_ui.value.VoidPtr;
UI_try( UIContext_add(parser->context, new_el), _a76515, ;);
UI_try( UIContext_add(parser->context, file_namespace, new_el), _a76515, ;);
);
}
);
@ -132,10 +140,12 @@ UI_Maybe _UIContext_get(UIContext* context, char* name, ktid type_id){
return SUCCESS(val);
}
UI_Maybe UIContext_add(UIContext* context, _UIElement_Ptr _new_el){
UI_Maybe UIContext_add(UIContext* context, char* namespace, _UIElement_Ptr _new_el){
UIElement_Ptr new_el=_new_el;
Unitype u=UniPtr(new_el->ui_type->type->id, new_el, true);
if(!Hashtable_tryAdd(context->ui_elements, new_el->name, u))
UI_safethrow_msg(cptr_concat("element with name <", new_el->name, "> already exists in context"), ;);
char* namespace_and_name=cptr_concat(namespace, "_", new_el->name);
if(!Hashtable_tryAdd(context->ui_elements, namespace_and_name, u))
UI_safethrow_msg(cptr_concat("element with name <", new_el->name, "> already exists in context"),
free(namespace_and_name));
return MaybeNull;
}

View File

@ -25,6 +25,8 @@ example_namespace_text_box->text=string_fromCptr("text replaced");
//////////////////////////////////////
// UIDtsodParser //
//////////////////////////////////////
#define UIDtsodParser_version 1
typedef struct UIDtsodParser UIDtsodParser;
UIDtsodParser* UIDtsodParser_create();
@ -56,7 +58,7 @@ UI_THROWING_FUNC_DECL(_UIContext_get(UIContext* context, char* name, ktid type_i
TYPE* NAMESPACE##_##NAME=_m_##NAMESPACE##_##NAME.value.VoidPtr;
///@return Maybe<void>
UI_THROWING_FUNC_DECL(UIContext_add(UIContext* context, _UIElement_Ptr new_el));
UI_THROWING_FUNC_DECL(UIContext_add(UIContext* context, char* namespace, _UIElement_Ptr new_el));
//////////////////////////////////////
@ -68,12 +70,43 @@ UI_THROWING_FUNC_DECL(UIContext_add(UIContext* context, _UIElement_Ptr new_el));
UI_THROWING_FUNC_DECL( UIElement_deserialize(Dtsod* dtsod) );
#define Dtsod_get_necessary(dtsod, key) \
if(!Hashtable_tryGet(dtsod, key, &uni)) \
UI_safethrow(UIError_NullPtr, ;);
#define __def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, TYPE, TYPE_ID, UNI_FIELD, code...) { \
Unitype uni; \
if(Hashtable_tryGet(dtsod, key, &uni)) { \
if(!UniCheckTypeId(uni, TYPE_ID)) \
UI_safethrow_msg(cptr_concat("tried to get '",key,"' of type '",#TYPE, \
"', but got invalid type id '",toString_i64(uni.typeId),"'"), ;); \
var_name=uni.UNI_FIELD; \
{ code; } \
} \
else if(is_neccecary) \
UI_safethrow_msg(cptr_concat("can't find key '", key, "'"), ;); \
}
#define Dtsod_tryGet_i64(dtsod, key, var_name, is_neccecary, code...) \
__def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, i64, ktid_name(i64), Int64, code)
#define Dtsod_tryGet_u64(dtsod, key, var_name, is_neccecary, code...) \
__def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, u64, ktid_name(u64), UInt64, code)
#define Dtsod_tryGet_f64(dtsod, key, var_name, is_neccecary, code...) \
__def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, f64, ktid_name(f64), Float64, code)
#define Dtsod_tryGet_bool(dtsod, key, var_name, is_neccecary, code...) \
__def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, bool, ktid_name(bool), Bool, code)
#define Dtsod_tryGet_ptr(dtsod, key, type, var_name, is_neccecary, code...) \
__def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, type*, ktid_ptrName(type), VoidPtr, code)
#define Dtsod_tryGet_cptr(dtsod, key, var_name, is_neccecary, code...) \
Dtsod_tryGet_ptr(dtsod, key, char, var_name, is_neccecary, code)
#define Dtsod_tryGet_Hashtable(dtsod, key, var_name, is_neccecary, code...) \
Dtsod_tryGet_ptr(dtsod, key, Hashtable, var_name, is_neccecary, code)
#define Dtsod_tryGet_Autoarr(dtsod, key, var_name, is_neccecary, code...) \
Dtsod_tryGet_ptr(dtsod, key, Autoarr(Unitype), var_name, is_neccecary, code)
#define Dtsod_get_optional(dtsod, key) \
if(Hashtable_tryGet(dtsod, key, &uni))
#if __cplusplus

View File

@ -5,7 +5,7 @@ static inline UIElement_Ptr* _Grid_getPtr(Grid* grid, u16 column, u16 row){
throw(ERR_WRONGINDEX);
if(column >= grid->columns)
throw(ERR_WRONGINDEX);
return grid->ui_elements + grid->columns*row + column;
return grid->content + grid->columns*row + column;
}
UIElement_Ptr Grid_get(Grid* grid, u16 column, u16 row){
@ -19,11 +19,11 @@ void Grid_set(Grid* grid, u16 column, u16 row, UIElement_Ptr value){
void Grid_freeMembers(void* _self){
Grid* self=(Grid*)_self;
Grid_foreach(self, el,
if(el==NULL) // todo UI_throw
throw(ERR_NULLPTR);
// if(el==NULL)
// throw(ERR_NULLPTR);
UIElement_destroy(el);
);
free(self->ui_elements);
free(self->content);
}
UI_Maybe Grid_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea area){
@ -38,37 +38,46 @@ UI_Maybe Grid_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea ar
UI_Maybe Grid_deserialize(Dtsod* dtsod){
Grid gr;
Unitype uni;
Autoarr(UIElement_Ptr)* content=Autoarr_create(UIElement_Ptr, 64, 8);
u16 columns=0, rows=0;
UI_try(UIElement_deserializeBase(dtsod, &gr.base), _91875, ;);
Dtsod_get_necessary(dtsod, "content"){
Autoarr(Unitype)* _content=uni.VoidPtr;
/*Autoarr(Unitype)* _content;
Dtsod_tryGet_Autoarr(dtsod, "content", _content, true, {
Autoarr_foreach(_content, _row,
Autoarr(Unitype)* row=_row.VoidPtr;
Autoarr_foreach(row, _elem_d,
if(!UniCheckTypePtr(_elem_d,Hashtable))
UI_safethrow_msg(
cptr_concat("expected type 'Hashtable', but have got type id '",
toString_i64(_elem_d.typeId),"'"),
Autoarr_freeWithoutMembers(content, true));
Dtsod* elem_dtsod=_elem_d.VoidPtr;
UI_try(UIElement_deserialize(elem_dtsod), _m_uie, ;);
Autoarr_add(content, (UIElement_Ptr)_m_uie.value.VoidPtr);
)
);
}
});*/
gr.content=Autoarr_toArray(content);
Autoarr_freeWithoutMembers(content, true);
gr.columns=columns;
gr.rows=rows;
Grid* ptr=malloc(sizeof(*ptr));
*ptr=gr;
return SUCCESS(UniHeapPtr(TextBlock, ptr));
return SUCCESS(UniHeapPtr(Grid, ptr));
}
uit_define(Grid, Grid_freeMembers, NULL, Grid_draw, Grid_deserialize);
Grid* Grid_create(char* name, u16 columns, u16 rows, UIElement_Ptr* ui_elements){
Grid* Grid_create(char* name, u16 columns, u16 rows, UIElement_Ptr* content){
Grid* grid=malloc(sizeof(Grid));
*grid=(Grid){
.base=_UIElement_initBaseDefault(name, &UITDescriptor_Grid),
.columns=columns,
.rows=rows,
.ui_elements=ui_elements
.content=content
};
return grid;
}

View File

@ -12,8 +12,7 @@ void FrameBuffer_freeMembers(void* _self){
kt_define(FrameBuffer, FrameBuffer_freeMembers, NULL);
/// creates new frame buffer and fills it with spaces
UI_THROWING_FUNC_DECL(FrameBuffer_create(FrameBuffer* fb));
Maybe FrameBuffer_create(FrameBuffer* fb){
void FrameBuffer_recreate(FrameBuffer* fb){
if(!term_getSize(&fb->size)){
fb->size=term_default_size;
//TODO log error
@ -26,8 +25,6 @@ Maybe FrameBuffer_create(FrameBuffer* fb){
for(u32 i=0; i<length; i++)
fb->data[i]=TCI(TERMCHAR(' '), kp_bgGray|kp_fgGray);
return MaybeNull;
}
void Renderer_freeMembers(void * _self){
@ -54,7 +51,7 @@ UI_Maybe __Renderer_drawFrame(Renderer* self){
// save current buffer
FrameBuffer buf=self->frameBuffer;
// recreate frame buffer
UI_try(FrameBuffer_create(&self->frameBuffer),_,;);
FrameBuffer_recreate(&self->frameBuffer);
for(u16 y=0; y<buf.size.rows; y++){
for(u16 x=0; x<buf.size.cols; x++){
@ -86,7 +83,7 @@ kt_define(Renderer, Renderer_freeMembers, NULL);
Renderer* Renderer_create(){
Renderer* renderer=malloc(sizeof(Renderer));
tryLast(FrameBuffer_create(&renderer->frameBuffer),_);
FrameBuffer_recreate(&renderer->frameBuffer);
renderer->set=__Renderer_set;
renderer->drawFrame=__Renderer_drawFrame;
return renderer;

View File

@ -1,8 +1,8 @@
#include "tui_internal.h"
void TextBlock_freeMembers(void* _self){
TextBlock* self=(TextBlock*)_self;
free(self->text.ptr);
// TextBlock* self=(TextBlock*)_self;
// free(self->text.ptr);
}
UI_Maybe TextBlock_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea area){
@ -20,15 +20,13 @@ UI_Maybe TextBlock_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingAr
UI_Maybe TextBlock_deserialize(Dtsod* dtsod){
TextBlock tb;
Unitype uni;
UI_try(UIElement_deserializeBase(dtsod, &tb.base), _8751, ;);
Dtsod_get_necessary(dtsod, "text"){
char* cptr=uni.VoidPtr;
tb.text=(string){.ptr=cptr, .length=cptr_length(cptr)};
}
char* _text;
Dtsod_tryGet_cptr(dtsod, "text", _text, true);
tb.text=string_fromCptr(_text);
TextBlock* ptr=malloc(sizeof(*ptr));
*ptr=tb;
return SUCCESS(UniHeapPtr(TextBlock, ptr));
}
@ -39,6 +37,6 @@ uit_define(TextBlock, TextBlock_freeMembers, NULL,TextBlock_draw, TextBlock_dese
TextBlock* TextBlock_create(char* name, string text){
TextBlock* textBlock=malloc(sizeof(TextBlock));
textBlock->base=_UIElement_initBaseDefault(name, &UITDescriptor_TextBlock);
textBlock->text=string_copy(text);
textBlock->text=text;
return textBlock;
}

View File

@ -45,40 +45,53 @@ UI_Maybe UIElement_validate(UIElement_Ptr u, DrawingArea a){
UI_Maybe UIElement_deserializeBase(Dtsod* dtsod, UIElement* base){
Unitype uni;
Dtsod_get_necessary(dtsod, "name");
char* name=uni.VoidPtr;
Dtsod_get_necessary(dtsod, "type");
UITDescriptor* ui_type=uni.VoidPtr;
char* name;
Dtsod_tryGet_cptr(dtsod, "name", name, true);
char* type_name;
Dtsod_tryGet_cptr(dtsod, "type", type_name, true);
UITDescriptor* ui_type=UITDescriptor_getByName(type_name);
if(ui_type==NULL)
UI_safethrow_msg(cptr_concat("invalid type '", type_name, "'"), ;);
*base=_UIElement_initBaseDefault(name, ui_type);
Dtsod_get_optional(dtsod, "min_width")
base->min_width=uni.UInt64;
Dtsod_get_optional(dtsod, "min_height")
base->min_height=uni.UInt64;
Dtsod_get_optional(dtsod, "width_scaling")
base->width_scaling=uni.UInt64;
Dtsod_get_optional(dtsod, "height_scaling")
base->height_scaling=uni.UInt64;
Dtsod_get_optional(dtsod, "bg_color")
set_color(uni.VoidPtr, base->color);
Dtsod_get_optional(dtsod, "fg_color")
set_color(uni.VoidPtr, base->color);
Dtsod_tryGet_i64(dtsod, "min_width", base->min_width, false);
Dtsod_tryGet_i64(dtsod, "min_height", base->min_height, false);
Dtsod_tryGet_i64(dtsod, "width_scaling", base->width_scaling, false);
Dtsod_tryGet_i64(dtsod, "height_scaling", base->height_scaling, false);
char *bg_color_name, *fg_color_name;
Dtsod_tryGet_cptr(dtsod, "bg_color", bg_color_name, false,
set_color(bg_color_name, base->color);
);
Dtsod_tryGet_cptr(dtsod, "fg_color", fg_color_name, false,
set_color(fg_color_name, base->color);
);
base->border.color=base->color;
Dtsod_get_optional(dtsod, "border"){
Dtsod* border_dtsod=uni.VoidPtr;
Dtsod_get_optional(border_dtsod, "top")
set_border_thickness(uni.VoidPtr, base->border.top);
Dtsod_get_optional(border_dtsod, "bottom")
set_border_thickness(uni.VoidPtr, base->border.bottom);
Dtsod_get_optional(border_dtsod, "left")
set_border_thickness(uni.VoidPtr, base->border.left);
Dtsod_get_optional(border_dtsod, "right")
set_border_thickness(uni.VoidPtr, base->border.right);
Dtsod_get_optional(dtsod, "bg_color")
set_color(uni.VoidPtr, base->border.color);
Dtsod_get_optional(dtsod, "fg_color")
set_color(uni.VoidPtr, base->border.color);
}
Dtsod* border_dtsod;
Dtsod_tryGet_Hashtable(dtsod, "border", border_dtsod, false, {
char* border_thickness_str;
Dtsod_tryGet_cptr(border_dtsod, "top", border_thickness_str, false,
set_border_thickness(border_thickness_str, base->border.top);
);
Dtsod_tryGet_cptr(border_dtsod, "bottom", border_thickness_str, false,
set_border_thickness(border_thickness_str, base->border.bottom);
);
Dtsod_tryGet_cptr(border_dtsod, "left", border_thickness_str, false,
set_border_thickness(border_thickness_str, base->border.left);
);
Dtsod_tryGet_cptr(border_dtsod, "right", border_thickness_str, false,
set_border_thickness(border_thickness_str, base->border.right);
);
char *bg_color_name, *fg_color_name;
Dtsod_tryGet_cptr(dtsod, "bg_color", bg_color_name, false,
set_color(bg_color_name, base->border.color);
);
Dtsod_tryGet_cptr(dtsod, "fg_color", fg_color_name, false,
set_color(fg_color_name, base->border.color);
);
});
return MaybeNull;
}

View File

@ -12,7 +12,8 @@ PACKED_ENUM(UIError,
UIError_NullPtr,
UIError_InvalidHeight, UIError_InvalidWidth,
UIError_InvalidX, UIError_InvalidY,
UIError_PrintError
UIError_PrintError,
UIError_InvalidVersion
)
// this macros can be changed later to improve debugging

View File

@ -67,18 +67,10 @@ void termcolor_table_init(){
Hashtable_addMany(_colors_table, pairs, sizeof(pairs)/sizeof(KVPair));
}
int termcolor_getByName(char* color_name){
char* color_name_lower=cptr_toLower(color_name);
Unitype uni;
if(!Hashtable_tryGet(_colors_table, color_name_lower, &uni))
return -1;
return uni.UInt64;
}
Hashtable* _UIBorderThickness_table=NULL;
Hashtable* _border_t_table=NULL;
void UIBorderThickness_table_init(){
_UIBorderThickness_table=Hashtable_create();
_border_t_table=Hashtable_create();
KVPair pairs[]={
enum_pair("hidden", UIBorder_Hidden),
enum_pair("0", UIBorder_Hidden),
@ -91,15 +83,7 @@ void UIBorderThickness_table_init(){
enum_pair("noborder", UiBorder_NoBorder),
enum_pair("no", UiBorder_NoBorder)
};
Hashtable_addMany(_UIBorderThickness_table, pairs, sizeof(pairs)/sizeof(KVPair));
}
int UIBorderThickness_getByName(char* name){
char* name_lower=cptr_toLower(name);
Unitype uni;
if(!Hashtable_tryGet(_UIBorderThickness_table, name_lower, &uni))
return -1;
return uni.UInt64;
Hashtable_addMany(_border_t_table, pairs, sizeof(pairs)/sizeof(KVPair));
}
void UI_enum_tables_init(){
@ -109,5 +93,17 @@ void UI_enum_tables_init(){
void UI_enum_tables_free(){
Hashtable_free(_colors_table);
Hashtable_free(_UIBorderThickness_table);
}
Hashtable_free(_border_t_table);
}
int enum_getByName(Hashtable* table, char* name){
char* name_lower=cptr_toLower(name);
Unitype uni;
if(!Hashtable_tryGet(table, name_lower, &uni))
return -1;
free(name_lower);
return uni.UInt64;
}
int termcolor_getByName(char* name){ return enum_getByName(_colors_table, name); }
int UIBorderThickness_getByName(char* name){ return enum_getByName(_border_t_table, name); }

View File

@ -154,11 +154,11 @@ STRUCT(Grid,
UIElement base;
u16 columns;
u16 rows;
UIElement_Ptr* ui_elements; /* UIElement[rows][columns] */
UIElement_Ptr* content; /* UIElement[rows][columns] */
)
uit_declare(Grid);
Grid* Grid_create(char* name, u16 columns, u16 rows, UIElement_Ptr* ui_elements);
Grid* Grid_create(char* name, u16 columns, u16 rows, UIElement_Ptr* content);
UIElement_Ptr Grid_get(Grid* grid, u16 column, u16 row);
void Grid_set(Grid* grid, u16 column, u16 row, UIElement_Ptr value);

View File

@ -10,6 +10,13 @@
#define EMBEDDED_RESOURCE_POSTFIX view
#include "generated/view.h"
void on_exit(){
Scolte_free();
kt_free();
term_resetColors();
term_cursorHide(false);
}
// Maybe tryReadFile(char* filePath){
// if(!file_exists(filePath))
// kprintf("file doesnt exist, creating new\n");
@ -26,7 +33,7 @@ UI_Maybe test_example_ui_build() {
// ui from dtsod build example
UIDtsodParser* p=UIDtsodParser_create();
for(int i=0; i<EmbeddedResourceFile_table_view_count; i++){
for(unsigned int i=0; i<EmbeddedResourceFile_table_view_count; i++){
EmbeddedResourceFile rs=EmbeddedResourceFile_table_view[i];
UI_try(UIDtsodParser_parseText(p, rs.path, rs.data),
_91624, UIDtsodParser_destroy(p));
@ -34,8 +41,9 @@ UI_Maybe test_example_ui_build() {
UI_try(UIDtsodParser_constructUIContext(p), _m_ui_context, UIDtsodParser_destroy(p));
UIContext* ui_context=_m_ui_context.value.VoidPtr;
UIDtsodParser_destroy(p);
UIContext_get(ui_context, example_namespace, text_box, TextBlock, UIContext_destroy(ui_context));
example_namespace_text_box->text=string_fromCptr("text replaced");
UIContext_get(ui_context, example, textblock, TextBlock, UIContext_destroy(ui_context));
example_textblock->text=string_fromCptr("text replaced");
UIContext_destroy(ui_context);
return MaybeNull;
}
@ -49,8 +57,8 @@ i32 main(const i32 argc, const char* const* argv){
kprintf("\e[93msetlocale failed! (%i)\n", errno);
}
// term_cursorHide(true);
// term_clear();
term_cursorHide(true);
term_clear();
// kerep type system
kt_beginInit();
@ -68,31 +76,29 @@ i32 main(const i32 argc, const char* const* argv){
// create file
/* char* filePath= argc>1 ? argv[argc-1] : "new_file.txt";
tryLast(tryReadFile(filePath), _m_text);
tryLast(tryReadFile(filePath), _m_text, on_exit());
char* text=(char*)_m_text.value.VoidPtr;
fputs(text,stdout); */
// render ui
Renderer* renderer=Renderer_create();
TextBlock* testTextBlock=TextBlock_create("TextBlock1", string_fromCptr("some example text"));
Autoarr(UIElement_Ptr)* grid_content=Autoarr_create(UIElement_Ptr, 1, 64);
Autoarr_add(grid_content, (UIElement_Ptr)testTextBlock);
Grid* mainGrid=Grid_create("MainGrid", 1,1, Autoarr_toArray(grid_content));
Autoarr_free(grid_content, true);
tryLast(UIElement_draw(renderer, (UIElement_Ptr)mainGrid, ((DrawingArea){.x=10, .y=4, .h=7, .w=24})),_);
tryLast(Renderer_drawFrame(renderer),_2);
// free ui memory
UIElement_destroy((UIElement_Ptr)mainGrid);
Renderer_destroy(renderer);
// Renderer* renderer=Renderer_create();
// TextBlock* testTextBlock=TextBlock_create("TextBlock1", string_fromCptr("some example text"));
// Autoarr(UIElement_Ptr)* grid_content=Autoarr_create(UIElement_Ptr, 1, 64);
// Autoarr_add(grid_content, (UIElement_Ptr)testTextBlock);
// Grid* mainGrid=Grid_create("MainGrid", 1,1, Autoarr_toArray(grid_content));
// Autoarr_free(grid_content, true);
// tryLast(UIElement_draw(renderer, (UIElement_Ptr)mainGrid,
// ((DrawingArea){.x=10, .y=4, .h=7, .w=24})),
// _, on_exit());
// tryLast(Renderer_drawFrame(renderer),_2);
// // free ui memory
// UIElement_destroy((UIElement_Ptr)mainGrid);
// Renderer_destroy(renderer);
// TODO signal( SIGWINCH, redraw );
// tryLast(test_example_ui_build(), _6981751);
tryLast(test_example_ui_build(), _6981751, on_exit());
// exit
Scolte_free();
kt_free();
term_resetColors();
term_cursorHide(false);
on_exit();
return 0;
}

View File

@ -1,9 +1,9 @@
TUI_version: 1;
namespace: "example_namespace"
parser_version: 1;
namespace: "example";
$ui: {
name: "UIElement",
type: "UIElement",
name: "textblock",
type: "TextBlock",
min_width: 4,
max_width: 4,
width_scaling: 0,
@ -17,15 +17,16 @@ $ui: {
right: "double",
fg_color: "dark_cyan",
bg_color: "gray";
};
},
text: "UwU",
};
$ui: [
$ui: {
name: "Grid",
type: "Grid",
content: [
// column
[ "@UIElement" ], // row
[ "@namespace.element1" ], // row
# column
[ "@UIElement" ], # row
[ "@namespace.element1" ], # row
];
];
};

View File

@ -1,10 +1,12 @@
TUI_version: 1;
parser_version: 1;
namespace: "main";
grid: [
name: "Grid",
$ui: {
name: "main_grid",
type: "Grid",
// column
[ "@namespace.element0" ], // row
[ "@namespace.element1" ], // row
];
content: [
# column
[ "@namespace.element0" ], # row
[ "@namespace.element1" ], # row
];
};