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){ void UIDtsodFileModel_freeMembers(void* _fm){
UIDtsodFileModel* fm=_fm; UIDtsodFileModel* fm=_fm;
DtsodV24_free(fm->dtsod); DtsodV24_free(fm->dtsod);
free(fm->dtsod_text); // free(fm->dtsod_text);
free(fm->file_name); // free(fm->file_name);
} }
kt_define(UIDtsodFileModel, UIDtsodFileModel_freeMembers, NULL); 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_Maybe UIDtsodParser_parseText(UIDtsodParser* parser, char* file_name_placeholder, char* text){
UI_try(DtsodV24_deserialize(text), _m_dtsod, ;); UI_try(DtsodV24_deserialize(text), _m_dtsod, ;);
UIDtsodFileModel fm={ UIDtsodFileModel fm={
.file_name=cptr_copy(file_name_placeholder), .file_name=file_name_placeholder,
.dtsod_text=text, .dtsod_text=text,
.dtsod=_m_dtsod.value.VoidPtr .dtsod=_m_dtsod.value.VoidPtr
}; };
@ -82,9 +82,11 @@ kt_define(UIContext, _UIContext_freeMembers, NULL);
UI_Maybe UIElement_deserialize(Dtsod* dtsod){ UI_Maybe UIElement_deserialize(Dtsod* dtsod){
Unitype uni; char* type_name;
Dtsod_get_necessary(dtsod, "type"); Dtsod_tryGet_cptr(dtsod, "type", type_name, true);
UITDescriptor* ui_type=uni.VoidPtr; 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, ;); UI_try(ui_type->deserialize(dtsod), _m_ui, ;);
return _m_ui; return _m_ui;
} }
@ -96,16 +98,22 @@ UI_Maybe UIDtsodParser_constructUIContext(UIDtsodParser* parser){
} }
Autoarr_foreach(parser->file_models, fm, Autoarr_foreach(parser->file_models, fm,
Hashtable_foreach(fm.dtsod, dtsod_elem, i32 file_parser_version;
if(cptr_compare(dtsod_elem.key, "tui_dtsod_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);
} Hashtable_foreach(fm.dtsod, dtsod_elem,
else if(cptr_compare(dtsod_elem.key, "ui")) { if(cptr_compare(dtsod_elem.key, "ui")) {
Autoarr_Unitype* ui_ar=dtsod_elem.value.VoidPtr; Autoarr_Unitype* ui_ar=dtsod_elem.value.VoidPtr;
Autoarr_foreach(ui_ar, ui_el_dtsod, Autoarr_foreach(ui_ar, ui_el_dtsod,
UI_try(UIElement_deserialize(ui_el_dtsod.VoidPtr),_m_ui,;); UI_try(UIElement_deserialize(ui_el_dtsod.VoidPtr),_m_ui,;);
UIElement_Ptr new_el=_m_ui.value.VoidPtr; 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); 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; UIElement_Ptr new_el=_new_el;
Unitype u=UniPtr(new_el->ui_type->type->id, new_el, true); Unitype u=UniPtr(new_el->ui_type->type->id, new_el, true);
if(!Hashtable_tryAdd(context->ui_elements, new_el->name, u)) char* namespace_and_name=cptr_concat(namespace, "_", new_el->name);
UI_safethrow_msg(cptr_concat("element with name <", new_el->name, "> already exists in context"), ;); 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; return MaybeNull;
} }

View File

@ -25,6 +25,8 @@ example_namespace_text_box->text=string_fromCptr("text replaced");
////////////////////////////////////// //////////////////////////////////////
// UIDtsodParser // // UIDtsodParser //
////////////////////////////////////// //////////////////////////////////////
#define UIDtsodParser_version 1
typedef struct UIDtsodParser UIDtsodParser; typedef struct UIDtsodParser UIDtsodParser;
UIDtsodParser* UIDtsodParser_create(); 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; TYPE* NAMESPACE##_##NAME=_m_##NAMESPACE##_##NAME.value.VoidPtr;
///@return Maybe<void> ///@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) ); UI_THROWING_FUNC_DECL( UIElement_deserialize(Dtsod* dtsod) );
#define Dtsod_get_necessary(dtsod, key) \ #define __def_Dtsod_tryGet(dtsod, key, var_name, is_neccecary, TYPE, TYPE_ID, UNI_FIELD, code...) { \
if(!Hashtable_tryGet(dtsod, key, &uni)) \ Unitype uni; \
UI_safethrow(UIError_NullPtr, ;); 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 #if __cplusplus

View File

@ -5,7 +5,7 @@ static inline UIElement_Ptr* _Grid_getPtr(Grid* grid, u16 column, u16 row){
throw(ERR_WRONGINDEX); throw(ERR_WRONGINDEX);
if(column >= grid->columns) if(column >= grid->columns)
throw(ERR_WRONGINDEX); 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){ 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){ void Grid_freeMembers(void* _self){
Grid* self=(Grid*)_self; Grid* self=(Grid*)_self;
Grid_foreach(self, el, Grid_foreach(self, el,
if(el==NULL) // todo UI_throw // if(el==NULL)
throw(ERR_NULLPTR); // throw(ERR_NULLPTR);
UIElement_destroy(el); UIElement_destroy(el);
); );
free(self->ui_elements); free(self->content);
} }
UI_Maybe Grid_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea area){ 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){ UI_Maybe Grid_deserialize(Dtsod* dtsod){
Grid gr; Grid gr;
Unitype uni;
Autoarr(UIElement_Ptr)* content=Autoarr_create(UIElement_Ptr, 64, 8); Autoarr(UIElement_Ptr)* content=Autoarr_create(UIElement_Ptr, 64, 8);
u16 columns=0, rows=0;
UI_try(UIElement_deserializeBase(dtsod, &gr.base), _91875, ;); UI_try(UIElement_deserializeBase(dtsod, &gr.base), _91875, ;);
Dtsod_get_necessary(dtsod, "content"){ /*Autoarr(Unitype)* _content;
Autoarr(Unitype)* _content=uni.VoidPtr; Dtsod_tryGet_Autoarr(dtsod, "content", _content, true, {
Autoarr_foreach(_content, _row, Autoarr_foreach(_content, _row,
Autoarr(Unitype)* row=_row.VoidPtr; Autoarr(Unitype)* row=_row.VoidPtr;
Autoarr_foreach(row, _elem_d, 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; Dtsod* elem_dtsod=_elem_d.VoidPtr;
UI_try(UIElement_deserialize(elem_dtsod), _m_uie, ;); UI_try(UIElement_deserialize(elem_dtsod), _m_uie, ;);
Autoarr_add(content, (UIElement_Ptr)_m_uie.value.VoidPtr); 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)); Grid* ptr=malloc(sizeof(*ptr));
*ptr=gr; *ptr=gr;
return SUCCESS(UniHeapPtr(TextBlock, ptr)); return SUCCESS(UniHeapPtr(Grid, ptr));
} }
uit_define(Grid, Grid_freeMembers, NULL, Grid_draw, Grid_deserialize); 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=malloc(sizeof(Grid));
*grid=(Grid){ *grid=(Grid){
.base=_UIElement_initBaseDefault(name, &UITDescriptor_Grid), .base=_UIElement_initBaseDefault(name, &UITDescriptor_Grid),
.columns=columns, .columns=columns,
.rows=rows, .rows=rows,
.ui_elements=ui_elements .content=content
}; };
return grid; return grid;
} }

View File

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

View File

@ -1,8 +1,8 @@
#include "tui_internal.h" #include "tui_internal.h"
void TextBlock_freeMembers(void* _self){ void TextBlock_freeMembers(void* _self){
TextBlock* self=(TextBlock*)_self; // TextBlock* self=(TextBlock*)_self;
free(self->text.ptr); // free(self->text.ptr);
} }
UI_Maybe TextBlock_draw(Renderer* renderer, UIElement_Ptr _self, const DrawingArea area){ 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){ UI_Maybe TextBlock_deserialize(Dtsod* dtsod){
TextBlock tb; TextBlock tb;
Unitype uni;
UI_try(UIElement_deserializeBase(dtsod, &tb.base), _8751, ;); UI_try(UIElement_deserializeBase(dtsod, &tb.base), _8751, ;);
Dtsod_get_necessary(dtsod, "text"){ char* _text;
char* cptr=uni.VoidPtr; Dtsod_tryGet_cptr(dtsod, "text", _text, true);
tb.text=(string){.ptr=cptr, .length=cptr_length(cptr)}; tb.text=string_fromCptr(_text);
}
TextBlock* ptr=malloc(sizeof(*ptr)); TextBlock* ptr=malloc(sizeof(*ptr));
*ptr=tb; *ptr=tb;
return SUCCESS(UniHeapPtr(TextBlock, ptr)); 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_create(char* name, string text){
TextBlock* textBlock=malloc(sizeof(TextBlock)); TextBlock* textBlock=malloc(sizeof(TextBlock));
textBlock->base=_UIElement_initBaseDefault(name, &UITDescriptor_TextBlock); textBlock->base=_UIElement_initBaseDefault(name, &UITDescriptor_TextBlock);
textBlock->text=string_copy(text); textBlock->text=text;
return textBlock; 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){ UI_Maybe UIElement_deserializeBase(Dtsod* dtsod, UIElement* base){
Unitype uni; char* name;
Dtsod_get_necessary(dtsod, "name"); Dtsod_tryGet_cptr(dtsod, "name", name, true);
char* name=uni.VoidPtr;
Dtsod_get_necessary(dtsod, "type"); char* type_name;
UITDescriptor* ui_type=uni.VoidPtr; 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); *base=_UIElement_initBaseDefault(name, ui_type);
Dtsod_get_optional(dtsod, "min_width")
base->min_width=uni.UInt64; Dtsod_tryGet_i64(dtsod, "min_width", base->min_width, false);
Dtsod_get_optional(dtsod, "min_height") Dtsod_tryGet_i64(dtsod, "min_height", base->min_height, false);
base->min_height=uni.UInt64; Dtsod_tryGet_i64(dtsod, "width_scaling", base->width_scaling, false);
Dtsod_get_optional(dtsod, "width_scaling") Dtsod_tryGet_i64(dtsod, "height_scaling", base->height_scaling, false);
base->width_scaling=uni.UInt64; char *bg_color_name, *fg_color_name;
Dtsod_get_optional(dtsod, "height_scaling") Dtsod_tryGet_cptr(dtsod, "bg_color", bg_color_name, false,
base->height_scaling=uni.UInt64; set_color(bg_color_name, base->color);
Dtsod_get_optional(dtsod, "bg_color") );
set_color(uni.VoidPtr, base->color); Dtsod_tryGet_cptr(dtsod, "fg_color", fg_color_name, false,
Dtsod_get_optional(dtsod, "fg_color") set_color(fg_color_name, base->color);
set_color(uni.VoidPtr, base->color); );
base->border.color=base->color; base->border.color=base->color;
Dtsod_get_optional(dtsod, "border"){
Dtsod* border_dtsod=uni.VoidPtr; Dtsod* border_dtsod;
Dtsod_get_optional(border_dtsod, "top") Dtsod_tryGet_Hashtable(dtsod, "border", border_dtsod, false, {
set_border_thickness(uni.VoidPtr, base->border.top); char* border_thickness_str;
Dtsod_get_optional(border_dtsod, "bottom") Dtsod_tryGet_cptr(border_dtsod, "top", border_thickness_str, false,
set_border_thickness(uni.VoidPtr, base->border.bottom); set_border_thickness(border_thickness_str, base->border.top);
Dtsod_get_optional(border_dtsod, "left") );
set_border_thickness(uni.VoidPtr, base->border.left); Dtsod_tryGet_cptr(border_dtsod, "bottom", border_thickness_str, false,
Dtsod_get_optional(border_dtsod, "right") set_border_thickness(border_thickness_str, base->border.bottom);
set_border_thickness(uni.VoidPtr, base->border.right); );
Dtsod_get_optional(dtsod, "bg_color") Dtsod_tryGet_cptr(border_dtsod, "left", border_thickness_str, false,
set_color(uni.VoidPtr, base->border.color); set_border_thickness(border_thickness_str, base->border.left);
Dtsod_get_optional(dtsod, "fg_color") );
set_color(uni.VoidPtr, base->border.color); 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; return MaybeNull;
} }

View File

@ -12,7 +12,8 @@ PACKED_ENUM(UIError,
UIError_NullPtr, UIError_NullPtr,
UIError_InvalidHeight, UIError_InvalidWidth, UIError_InvalidHeight, UIError_InvalidWidth,
UIError_InvalidX, UIError_InvalidY, UIError_InvalidX, UIError_InvalidY,
UIError_PrintError UIError_PrintError,
UIError_InvalidVersion
) )
// this macros can be changed later to improve debugging // 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)); Hashtable_addMany(_colors_table, pairs, sizeof(pairs)/sizeof(KVPair));
} }
int termcolor_getByName(char* color_name){ Hashtable* _border_t_table=NULL;
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;
void UIBorderThickness_table_init(){ void UIBorderThickness_table_init(){
_UIBorderThickness_table=Hashtable_create(); _border_t_table=Hashtable_create();
KVPair pairs[]={ KVPair pairs[]={
enum_pair("hidden", UIBorder_Hidden), enum_pair("hidden", UIBorder_Hidden),
enum_pair("0", UIBorder_Hidden), enum_pair("0", UIBorder_Hidden),
@ -91,15 +83,7 @@ void UIBorderThickness_table_init(){
enum_pair("noborder", UiBorder_NoBorder), enum_pair("noborder", UiBorder_NoBorder),
enum_pair("no", UiBorder_NoBorder) enum_pair("no", UiBorder_NoBorder)
}; };
Hashtable_addMany(_UIBorderThickness_table, pairs, sizeof(pairs)/sizeof(KVPair)); Hashtable_addMany(_border_t_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;
} }
void UI_enum_tables_init(){ void UI_enum_tables_init(){
@ -109,5 +93,17 @@ void UI_enum_tables_init(){
void UI_enum_tables_free(){ void UI_enum_tables_free(){
Hashtable_free(_colors_table); 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; UIElement base;
u16 columns; u16 columns;
u16 rows; u16 rows;
UIElement_Ptr* ui_elements; /* UIElement[rows][columns] */ UIElement_Ptr* content; /* UIElement[rows][columns] */
) )
uit_declare(Grid); 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); UIElement_Ptr Grid_get(Grid* grid, u16 column, u16 row);
void Grid_set(Grid* grid, u16 column, u16 row, UIElement_Ptr value); void Grid_set(Grid* grid, u16 column, u16 row, UIElement_Ptr value);

View File

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

View File

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

View File

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