diff --git a/kerep b/kerep index 27be5be..70807ed 160000 --- a/kerep +++ b/kerep @@ -1 +1 @@ -Subproject commit 27be5beacdfda586f518ab05de050775ce7b5f54 +Subproject commit 70807ed22b4c34db247fd8fc1ca1c776dd27ab4c diff --git a/src/TUI/Dtsod/tui_dtsod.c b/src/TUI/Dtsod/tui_dtsod.c index 4ca742a..da6d3c5 100644 --- a/src/TUI/Dtsod/tui_dtsod.c +++ b/src/TUI/Dtsod/tui_dtsod.c @@ -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; } diff --git a/src/TUI/Dtsod/tui_dtsod.h b/src/TUI/Dtsod/tui_dtsod.h index 4a4703e..efe62af 100644 --- a/src/TUI/Dtsod/tui_dtsod.h +++ b/src/TUI/Dtsod/tui_dtsod.h @@ -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 -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 diff --git a/src/TUI/Grid.c b/src/TUI/Grid.c index d9c6dc4..6f36488 100644 --- a/src/TUI/Grid.c +++ b/src/TUI/Grid.c @@ -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; } diff --git a/src/TUI/Renderer.c b/src/TUI/Renderer.c index c58342c..3c3d17d 100644 --- a/src/TUI/Renderer.c +++ b/src/TUI/Renderer.c @@ -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; idata[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; yframeBuffer),_); + FrameBuffer_recreate(&renderer->frameBuffer); renderer->set=__Renderer_set; renderer->drawFrame=__Renderer_drawFrame; return renderer; diff --git a/src/TUI/TextBlock.c b/src/TUI/TextBlock.c index 29154a2..084d1c3 100644 --- a/src/TUI/TextBlock.c +++ b/src/TUI/TextBlock.c @@ -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; } diff --git a/src/TUI/UIElement.c b/src/TUI/UIElement.c index d0b38d8..09e9a97 100644 --- a/src/TUI/UIElement.c +++ b/src/TUI/UIElement.c @@ -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; } diff --git a/src/TUI/UIError.h b/src/TUI/UIError.h index 9bc1555..ee362ef 100644 --- a/src/TUI/UIError.h +++ b/src/TUI/UIError.h @@ -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 diff --git a/src/TUI/enums_getByName.c b/src/TUI/enums_getByName.c index c8ad4bb..ca3f2d4 100644 --- a/src/TUI/enums_getByName.c +++ b/src/TUI/enums_getByName.c @@ -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); -} \ No newline at end of file + 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); } diff --git a/src/TUI/tui.h b/src/TUI/tui.h index 6817b22..3c0e027 100644 --- a/src/TUI/tui.h +++ b/src/TUI/tui.h @@ -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); diff --git a/src/main.c b/src/main.c index 9418736..bf82778 100644 --- a/src/main.c +++ b/src/main.c @@ -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; itext=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; } diff --git a/view/example.tui.dtsod b/view/example.tui.dtsod index 5b5523d..bc5ee51 100644 --- a/view/example.tui.dtsod +++ b/view/example.tui.dtsod @@ -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 ]; -]; +}; diff --git a/view/main.tui.dtsod b/view/main.tui.dtsod index abe2af0..f1e6ca3 100644 --- a/view/main.tui.dtsod +++ b/view/main.tui.dtsod @@ -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 + ]; +};