fixed all errors
This commit is contained in:
parent
4e2376f251
commit
e48f7cd6b5
2
kerep
2
kerep
@ -1 +1 @@
|
|||||||
Subproject commit 27be5beacdfda586f518ab05de050775ce7b5f54
|
Subproject commit 70807ed22b4c34db247fd8fc1ca1c776dd27ab4c
|
||||||
@ -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;
|
||||||
else if(cptr_compare(dtsod_elem.key, "ui")) {
|
Dtsod_tryGet_cptr(fm.dtsod, "namespace", file_namespace, true);
|
||||||
|
|
||||||
|
Hashtable_foreach(fm.dtsod, dtsod_elem,
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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); }
|
||||||
|
|||||||
@ -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);
|
||||||
|
|
||||||
|
|||||||
52
src/main.c
52
src/main.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
];
|
];
|
||||||
];
|
};
|
||||||
|
|||||||
@ -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
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user