// UI
- ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .fill = UI_ON) {
+ ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .fill = TRUE) {
ui_tabview(obj, .hfill = TRUE, .hexpand = TRUE, .vfill = TRUE, .vexpand = TRUE) {
ui_tab(obj, "Groups") {
- ui_hbox(obj, .margin = 10, .spacing = 10, .fill = UI_ON) {
- ui_vbox(obj, .fill = UI_OFF) {
- ui_listview(obj, .list = wdata->tab1_groups, .getvalue = reslist_getvalue, .fill = UI_ON, .onactivate = nbconfig_grouplist_activate);
- ui_hbox(obj, .fill = UI_OFF) {
+ ui_hbox(obj, .margin = 10, .spacing = 10, .fill = TRUE) {
+ ui_vbox(obj, .fill = FALSE) {
+ ui_listview(obj, .list = wdata->tab1_groups, .getvalue = reslist_getvalue, .fill = TRUE, .onactivate = nbconfig_grouplist_activate);
+ ui_hbox(obj, .fill = FALSE) {
ui_button(obj, .icon = UI_ICON_NEW_FOLDER, .onclick = nbconfig_grouplist_add);
ui_button(obj, .icon = UI_ICON_DELETE, .onclick = nbconfig_grouplist_delete);
ui_button(obj, .icon = UI_ICON_GO_UP, .onclick = nbconfig_grouplist_move_up);
}
}
- ui_grid(obj, .columnspacing = 10, .rowspacing = 10, .fill = UI_ON, .def_vfill = TRUE) {
+ ui_grid(obj, .columnspacing = 10, .rowspacing = 10, .fill = TRUE, .def_vfill = TRUE) {
ui_rlabel(obj, .label = "Name");
ui_textfield(obj, .value = wdata->tab1_group_name, .onchange = nbconfig_grouplist_name_changed);
ui_newline(obj);
}
}
ui_tab(obj, "Notebooks") {
- ui_hbox(obj, .margin = 10, .spacing = 10, .fill = UI_ON) {
- ui_vbox(obj, .fill = UI_OFF) {
- ui_listview(obj, .list = wdata->tab2_notebooks, .getvalue = reslist_getvalue, .fill = UI_ON, .onactivate = nbconfig_notebooklist_activate);
- ui_hbox(obj, .fill = UI_OFF) {
+ ui_hbox(obj, .margin = 10, .spacing = 10, .fill = TRUE) {
+ ui_vbox(obj) {
+ ui_listview(obj, .list = wdata->tab2_notebooks, .getvalue = reslist_getvalue, .fill = TRUE, .onactivate = nbconfig_notebooklist_activate);
+ ui_hbox(obj) {
ui_button(obj, .icon = UI_ICON_NEW_FOLDER, .onclick = nbconfig_notebooklist_add);
ui_button(obj, .icon = UI_ICON_DELETE, .onclick = nbconfig_notebooklist_delete);
ui_button(obj, .icon = UI_ICON_GO_UP, .onclick = nbconfig_notebooklist_move_up);
}
}
- ui_grid(obj, .columnspacing = 10, .rowspacing = 10, .fill = UI_ON, .def_vfill = TRUE) {
+ ui_grid(obj, .columnspacing = 10, .rowspacing = 10, .fill = TRUE, .def_vfill = TRUE) {
ui_rlabel(obj, .label = "Group");
ui_combobox(obj, .list = wdata->tab2_groups, .getvalue = reslist_getvalue);
ui_newline(obj);
};
*/
ui_sidebar(obj) {
- ui_sourcelist(obj, .dynamic_sublist = wdata->notebooks, .getvalue = window_sidebar_getvalue, .onactivate = action_notebook_selected, .fill = UI_ON);
- ui_hbox(obj, .spacing = 2, .fill = UI_OFF) {
+ ui_sourcelist(obj, .dynamic_sublist = wdata->notebooks, .getvalue = window_sidebar_getvalue, .onactivate = action_notebook_selected, .fill = TRUE);
+ ui_hbox(obj, .spacing = 2) {
ui_button(obj, .icon = "folder-new-symbolic", .style_class = "flat", .onclick = action_notebook_add);
- ui_label(obj, .fill = UI_ON);
+ ui_label(obj, .fill = TRUE);
ui_button(obj, .icon = "emblem-system-symbolic", .style_class = "flat", .onclick = action_notebook_config);
}
}
- ui_hsplitpane_w(obj, wdata->splitpane, .initial_position = 500) {
+ ui_hsplitpane_w(obj, wdata->splitpane, .initial_position = 500, .fill = TRUE) {
// splitpane left: table
UiModel* model = ui_model(obj->ctx, UI_STRING, "Name", UI_STRING_FREE, "Last Modified", -1);
model->columnsize[0] = -1;
model->getvalue = window_notelist_getvalue;
- ui_table(obj, .model = model, .varname = "notes", .contextmenu = get_notelist_context_menu(), .multiselection = TRUE, .onselection = action_note_selected, .onactivate = action_note_activated);
+ ui_table(obj,
+ .model = model,
+ .varname = "notes",
+ .contextmenu = get_notelist_context_menu(),
+ .multiselection = TRUE,
+ .onselection = action_note_selected,
+ .onactivate = action_note_activated,
+ .fill = TRUE);
// splitpane right: content
ui_tabview_w(obj, wdata->document_tabview, .tabview = UI_TABVIEW_INVISIBLE, .varname = "note_type") {
}
ui_tab(obj, "textnote") {
- ui_vbox0(obj) {
- ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .def_vfill = TRUE, .fill = UI_OFF) {
+ ui_vbox(obj, .fill = TRUE) {
+ ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .def_vfill = TRUE) {
//ui_label(obj, .label = "Title", .vfill = TRUE);
ui_textfield(obj, .varname = "note_title", .onchange = action_note_title_changed, .hexpand = TRUE, .groups = UI_GROUPS(APP_STATE_NOTE_SELECTED));
ui_newline(obj);
}
- ui_hbox(obj, .style_class = "note_toolbar", .margin = 10, .spacing = 4, .fill = UI_OFF) {
+ ui_hbox(obj, .style_class = "note_toolbar", .margin = 10, .spacing = 4) {
ui_combobox(obj, .varname = "note_textnote_para", .onactivate = action_textnote_paragraph);
ui_togglebutton(obj, .icon = "format-text-bold", .varname = "note_textnote_strong", .onchange = action_textnote_style_strong);
ui_togglebutton(obj, .icon = "format-text-italic", .varname = "note_textnote_emphasis", .onchange = action_textnote_style_emphasis);
ui_button(obj, .icon = "insert-image");
ui_button(obj, .icon = "insert-link");
}
- ui_hbox_w(obj, wdata->attachments, .margin = 10, .fill = UI_OFF) {
+ ui_hbox_w(obj, wdata->attachments, .margin = 10) {
UIWIDGET sw;
ui_scrolledwindow_w(obj, sw, .name = "note_attachments_sw") {
ui_itemlist(obj, .varname = "note_attachments", .container = UI_CONTAINER_HBOX, .create_ui = attachment_item, .userdata = wdata);
window->notelist_isvisible = visible;
}
-void window_sidebar_getvalue(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata) {
+void window_sidebar_getvalue(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata) {
Resource *notebook = rowdata;
item->label = strdup(notebook->displayname ? notebook->displayname : notebook->nodename);
obj->window = wdata;
// Dialog UI
- ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .def_vfill = TRUE, .fill = UI_ON) {
+ ui_grid(obj, .margin = 10, .columnspacing = 10, .rowspacing = 10, .def_vfill = TRUE, .fill = TRUE) {
ui_rlabel(obj, .label = "Group");
ui_combobox(obj, .list = wdata->groups, .getvalue = nnd_group_value, .hfill = TRUE, .hexpand = TRUE);
ui_newline(obj);
MainWindow* window_init_data(UiObject *obj);
-void window_sidebar_getvalue(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
+void window_sidebar_getvalue(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
void window_notelist_setvisible(MainWindow *window, UiBool visible);
// transfer all registered memory
memcpy(&dest->registered[dest->registered_size], source->registered,
- sizeof(struct cx_mempool_foreign_memory_s) * source->size);
+ sizeof(struct cx_mempool_foreign_memory_s) * source->registered_size);
dest->registered_size += source->registered_size;
// register the old allocator with the new pool
};
struct UiLayout {
- UiTri fill;
+ UiBool fill;
//UiBool newline;
//char *label;
UiBool hexpand;
}
+/* ------------------------- UiLabelArgs ----------------------------*/
+
+
+UiLabelArgs* ui_label_args_new(void) {
+ UiLabelArgs *args = malloc(sizeof(UiLabelArgs));
+ memset(args, 0, sizeof(UiLabelArgs));
+ return args;
+}
+
+
+void ui_label_args_set_fill(UiLabelArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_label_args_set_hexpand(UiLabelArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_label_args_set_vexpand(UiLabelArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_label_args_set_hfill(UiLabelArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_label_args_set_vfill(UiLabelArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_label_args_set_override_defaults(UiLabelArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_label_args_set_colspan(UiLabelArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_label_args_set_rowspan(UiLabelArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_label_args_set_name(UiLabelArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_label_args_set_style_class(UiLabelArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_label_args_set_label(UiLabelArgs *args, const char *label){
+ args->label = strdup(label);
+}
+
+
+void ui_label_args_set_align(UiLabelArgs *args, UiAlignment align) {
+ args->align = align;
+}
+
+void ui_label_args_set_style(UiLabelArgs *args, UiLabelStyle style) {
+ args->style = style;
+}
+
+void ui_label_args_set_varname(UiLabelArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_label_args_set_value(UiLabelArgs *args, UiString *value) {
+ args->value = value;
+}
+
+void ui_label_args_free(UiLabelArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->label);
+ free((void*)args->varname);
+ free(args);
+}
+
+
+/* ------------------------- UiProgressbarArgs ----------------------------*/
+
+
+UiProgressbarArgs* ui_progressbar_args_new(void) {
+ UiProgressbarArgs *args = malloc(sizeof(UiProgressbarArgs));
+ memset(args, 0, sizeof(UiProgressbarArgs));
+ return args;
+}
+
+
+void ui_progressbar_args_set_fill(UiProgressbarArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_progressbar_args_set_hexpand(UiProgressbarArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_progressbar_args_set_vexpand(UiProgressbarArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_progressbar_args_set_hfill(UiProgressbarArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_progressbar_args_set_vfill(UiProgressbarArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_progressbar_args_set_override_defaults(UiProgressbarArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_progressbar_args_set_colspan(UiProgressbarArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_progressbar_args_set_rowspan(UiProgressbarArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_progressbar_args_set_name(UiProgressbarArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_progressbar_args_set_style_class(UiProgressbarArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_progressbar_args_set_min(UiProgressbarArgs *args, double min) {
+ args->min = min;
+}
+
+void ui_progressbar_args_set_max(UiProgressbarArgs *args, double max) {
+ args->max = max;
+}
+
+void ui_progressbar_args_set_varname(UiProgressbarArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_progressbar_args_set_value(UiProgressbarArgs *args, UiDouble *value) {
+ args->value = value;
+}
+
+void ui_progressbar_args_free(UiProgressbarArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->varname);
+ free(args);
+}
+
+
+/* ------------------------- UiProgressbarSpinnerArgs ----------------------------*/
+
+UiProgressbarSpinnerArgs* ui_progress_spinner_args_new(void) {
+ UiProgressbarSpinnerArgs *args = malloc(sizeof(UiProgressbarSpinnerArgs));
+ memset(args, 0, sizeof(UiProgressbarSpinnerArgs));
+ return args;
+}
+
+void ui_progress_spinner_args_set_fill(UiProgressbarSpinnerArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+void ui_progress_spinner_args_set_hexpand(UiProgressbarSpinnerArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+void ui_progress_spinner_args_set_vexpand(UiProgressbarSpinnerArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+void ui_progress_spinner_args_set_hfill(UiProgressbarSpinnerArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+void ui_progress_spinner_args_set_vfill(UiProgressbarSpinnerArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+void ui_progress_spinner_args_set_override_defaults(UiProgressbarSpinnerArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+void ui_progress_spinner_args_set_colspan(UiProgressbarSpinnerArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+void ui_progress_spinner_args_set_rowspan(UiProgressbarSpinnerArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+void ui_progress_spinner_args_set_name(UiProgressbarSpinnerArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+void ui_progress_spinner_args_set_style_class(UiProgressbarSpinnerArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_progress_spinner_args_set_varname(UiProgressbarSpinnerArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_progress_spinner_args_set_value(UiProgressbarSpinnerArgs *args, UiInteger *value) {
+ args->value = value;
+}
+
+void ui_progress_spinner_args_free(UiProgressbarSpinnerArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->varname);
+ free(args);
+}
+
+
/* ---------------------------- UiButtonArgs -------------------------------*/
UiButtonArgs* ui_button_args_new(void) {
}
+/* ------------------------- UiTextAreaArgs ----------------------------*/
+
+UiTextAreaArgs* ui_textarea_args_new(void) {
+ UiTextAreaArgs *args = malloc(sizeof(UiTextAreaArgs));
+ memset(args, 0, sizeof(UiTextAreaArgs));
+ return args;
+}
+
+
+void ui_textarea_args_set_fill(UiTextAreaArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_textarea_args_set_hexpand(UiTextAreaArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_textarea_args_set_vexpand(UiTextAreaArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_textarea_args_set_hfill(UiTextAreaArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_textarea_args_set_vfill(UiTextAreaArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_textarea_args_set_override_defaults(UiTextAreaArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_textarea_args_set_colspan(UiTextAreaArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_textarea_args_set_rowspan(UiTextAreaArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_textarea_args_set_name(UiTextAreaArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_textarea_args_set_style_class(UiTextAreaArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_textarea_args_set_onchange(UiTextAreaArgs *args, ui_callback callback){
+ args->onchange = callback;
+}
+
+
+void ui_textarea_args_set_onchangedata(UiTextAreaArgs *args, void *onchangedata){
+ args->onchangedata = onchangedata;
+}
+
+void ui_textarea_args_set_varname(UiTextAreaArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_textarea_args_set_value(UiTextAreaArgs *args, UiText *value) {
+ args->value = value;
+}
+
+void ui_textarea_args_set_groups(UiTextAreaArgs *args, int *groups){
+ // TODO
+}
+
+void ui_textarea_args_free(UiTextAreaArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->varname);
+ free((void*)args->groups);
+ free(args);
+}
+
+
+
+/* ------------------------- UiTextFieldArgs ----------------------------*/
+
+UiTextFieldArgs* ui_textfield_args_new(void) {
+ UiTextFieldArgs *args = malloc(sizeof(UiTextFieldArgs));
+ memset(args, 0, sizeof(UiTextFieldArgs));
+ return args;
+}
+
+
+void ui_textfield_args_set_fill(UiTextFieldArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_textfield_args_set_hexpand(UiTextFieldArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_textfield_args_set_vexpand(UiTextFieldArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_textfield_args_set_hfill(UiTextFieldArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_textfield_args_set_vfill(UiTextFieldArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_textfield_args_set_override_defaults(UiTextFieldArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_textfield_args_set_colspan(UiTextFieldArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_textfield_args_set_rowspan(UiTextFieldArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_textfield_args_set_name(UiTextFieldArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_textfield_args_set_style_class(UiTextFieldArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_textfield_args_set_onchange(UiTextFieldArgs *args, ui_callback callback){
+ args->onchange = callback;
+}
+
+
+void ui_textfield_args_set_onchangedata(UiTextFieldArgs *args, void *onchangedata){
+ args->onchangedata = onchangedata;
+}
+
+void ui_textfield_args_set_onactivate(UiTextFieldArgs *args, ui_callback callback){
+ args->onactivate = callback;
+}
+
+
+void ui_textfield_args_set_onactivatedata(UiTextFieldArgs *args, void *onactivatedata){
+ args->onactivatedata = onactivatedata;
+}
+
+void ui_textfield_args_set_varname(UiTextFieldArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_textfield_args_set_value(UiTextFieldArgs *args, UiString *value) {
+ args->value = value;
+}
+
+void ui_textfield_args_set_groups(UiTextFieldArgs *args, int *groups){
+ // TODO
+}
+
+void ui_textfield_args_free(UiTextFieldArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->varname);
+ free((void*)args->groups);
+ free(args);
+}
+
+
+/* ------------------------- UiWebviewArgs ----------------------------*/
+
+UiWebviewArgs* ui_webview_args_new(void) {
+ UiWebviewArgs *args = malloc(sizeof(UiWebviewArgs));
+ memset(args, 0, sizeof(UiWebviewArgs));
+ return args;
+}
+
+
+void ui_webview_args_set_fill(UiWebviewArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_webview_args_set_hexpand(UiWebviewArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_webview_args_set_vexpand(UiWebviewArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_webview_args_set_hfill(UiWebviewArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_webview_args_set_vfill(UiWebviewArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_webview_args_set_override_defaults(UiWebviewArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_webview_args_set_colspan(UiWebviewArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_webview_args_set_rowspan(UiWebviewArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_webview_args_set_name(UiWebviewArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_webview_args_set_style_class(UiWebviewArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_webview_args_set_varname(UiWebviewArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_webview_args_set_value(UiWebviewArgs *args, UiGeneric *value) {
+ args->value = value;
+}
+
+void ui_webview_args_set_groups(UiWebviewArgs *args, int *groups){
+ // TODO
+}
+
+void ui_webview_args_free(UiWebviewArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->varname);
+ free((void*)args->groups);
+ free(args);
+}
+
#define UIC_ARGS_H
#include "../ui/container.h"
+#include "../ui/display.h"
#include "../ui/button.h"
#include "../ui/menu.h"
#include "../ui/toolbar.h"
#include "../ui/tree.h"
+#include "../ui/text.h"
+#include "../ui/webview.h"
#ifdef __cplusplus
extern "C" {
UIEXPORT void ui_splitpane_args_set_max_panes(UiSplitPaneArgs *args, int max);
UIEXPORT void ui_splitpane_args_free(UiSplitPaneArgs *args);
+UIEXPORT UiLabelArgs* ui_label_args_new(void);
+UIEXPORT void ui_label_args_set_fill(UiLabelArgs *args, UiBool fill);
+UIEXPORT void ui_label_args_set_hexpand(UiLabelArgs *args, UiBool value);
+UIEXPORT void ui_label_args_set_vexpand(UiLabelArgs *args, UiBool value);
+UIEXPORT void ui_label_args_set_hfill(UiLabelArgs *args, UiBool value);
+UIEXPORT void ui_label_args_set_vfill(UiLabelArgs *args, UiBool value);
+UIEXPORT void ui_label_args_set_override_defaults(UiLabelArgs *args, UiBool value);
+UIEXPORT void ui_label_args_set_colspan(UiLabelArgs *args, int colspan);
+UIEXPORT void ui_label_args_set_rowspan(UiLabelArgs *args, int rowspan);
+UIEXPORT void ui_label_args_set_name(UiLabelArgs *args, const char *name);
+UIEXPORT void ui_label_args_set_style_class(UiLabelArgs *args, const char *classname);
+UIEXPORT void ui_label_args_set_label(UiLabelArgs *args, const char *label);
+UIEXPORT void ui_label_args_set_align(UiLabelArgs *args, UiAlignment align);
+UIEXPORT void ui_label_args_set_style(UiLabelArgs *args, UiLabelStyle style);
+UIEXPORT void ui_label_args_set_value(UiLabelArgs *args, UiString *value);
+UIEXPORT void ui_label_args_set_varname(UiLabelArgs *args, const char *varname);
+UIEXPORT void ui_label_args_free(UiLabelArgs *args);
+
+UIEXPORT UiProgressbarArgs* ui_progressbar_args_new(void);
+UIEXPORT void ui_progressbar_args_set_fill(UiProgressbarArgs *args, UiBool fill);
+UIEXPORT void ui_progressbar_args_set_hexpand(UiProgressbarArgs *args, UiBool value);
+UIEXPORT void ui_progressbar_args_set_vexpand(UiProgressbarArgs *args, UiBool value);
+UIEXPORT void ui_progressbar_args_set_hfill(UiProgressbarArgs *args, UiBool value);
+UIEXPORT void ui_progressbar_args_set_vfill(UiProgressbarArgs *args, UiBool value);
+UIEXPORT void ui_progressbar_args_set_override_defaults(UiProgressbarArgs *args, UiBool value);
+UIEXPORT void ui_progressbar_args_set_colspan(UiProgressbarArgs *args, int colspan);
+UIEXPORT void ui_progressbar_args_set_rowspan(UiProgressbarArgs *args, int rowspan);
+UIEXPORT void ui_progressbar_args_set_name(UiProgressbarArgs *args, const char *name);
+UIEXPORT void ui_progressbar_args_set_style_class(UiProgressbarArgs *args, const char *classname);
+UIEXPORT void ui_progressbar_args_set_min(UiProgressbarArgs *args, double min);
+UIEXPORT void ui_progressbar_args_set_max(UiProgressbarArgs *args, double max);
+UIEXPORT void ui_progressbar_args_set_value(UiProgressbarArgs *args, UiDouble *value);
+UIEXPORT void ui_progressbar_args_set_varname(UiProgressbarArgs *args, const char *varname);
+UIEXPORT void ui_progressbar_args_free(UiProgressbarArgs *args);
+
+UIEXPORT UiProgressbarSpinnerArgs* ui_progress_spinner_args_new(void);
+UIEXPORT void ui_progress_spinner_args_set_fill(UiProgressbarSpinnerArgs *args, UiBool fill);
+UIEXPORT void ui_progress_spinner_args_set_hexpand(UiProgressbarSpinnerArgs *args, UiBool value);
+UIEXPORT void ui_progress_spinner_args_set_vexpand(UiProgressbarSpinnerArgs *args, UiBool value);
+UIEXPORT void ui_progress_spinner_args_set_hfill(UiProgressbarSpinnerArgs *args, UiBool value);
+UIEXPORT void ui_progress_spinner_args_set_vfill(UiProgressbarSpinnerArgs *args, UiBool value);
+UIEXPORT void ui_progress_spinner_args_set_override_defaults(UiProgressbarSpinnerArgs *args, UiBool value);
+UIEXPORT void ui_progress_spinner_args_set_colspan(UiProgressbarSpinnerArgs *args, int colspan);
+UIEXPORT void ui_progress_spinner_args_set_rowspan(UiProgressbarSpinnerArgs *args, int rowspan);
+UIEXPORT void ui_progress_spinner_args_set_name(UiProgressbarSpinnerArgs *args, const char *name);
+UIEXPORT void ui_progress_spinner_args_set_style_class(UiProgressbarSpinnerArgs *args, const char *classname);
+UIEXPORT void ui_progress_spinner_args_set_value(UiProgressbarSpinnerArgs *args, UiInteger *value);
+UIEXPORT void ui_progress_spinner_args_set_varname(UiProgressbarSpinnerArgs *args, const char *varname);
+UIEXPORT void ui_progress_spinner_args_free(UiProgressbarSpinnerArgs *args);
+
UIEXPORT UiButtonArgs* ui_button_args_new(void);
UIEXPORT void ui_button_args_set_fill(UiButtonArgs *args, UiBool fill);
UIEXPORT void ui_button_args_set_hexpand(UiButtonArgs *args, UiBool value);
UIEXPORT void ui_sourcelist_args_set_onbuttonclickdata(UiSourceListArgs *args, void *userdata);
UIEXPORT void ui_sourcelist_args_free(UiSourceListArgs *args);
+UIEXPORT UiTextAreaArgs* ui_textarea_args_new(void);
+UIEXPORT void ui_textarea_args_set_fill(UiTextAreaArgs *args, UiBool fill);
+UIEXPORT void ui_textarea_args_set_hexpand(UiTextAreaArgs *args, UiBool value);
+UIEXPORT void ui_textarea_args_set_vexpand(UiTextAreaArgs *args, UiBool value);
+UIEXPORT void ui_textarea_args_set_hfill(UiTextAreaArgs *args, UiBool value);
+UIEXPORT void ui_textarea_args_set_vfill(UiTextAreaArgs *args, UiBool value);
+UIEXPORT void ui_textarea_args_set_override_defaults(UiTextAreaArgs *args, UiBool value);
+UIEXPORT void ui_textarea_args_set_colspan(UiTextAreaArgs *args, int colspan);
+UIEXPORT void ui_textarea_args_set_rowspan(UiTextAreaArgs *args, int rowspan);
+UIEXPORT void ui_textarea_args_set_name(UiTextAreaArgs *args, const char *name);
+UIEXPORT void ui_textarea_args_set_style_class(UiTextAreaArgs *args, const char *classname);
+UIEXPORT void ui_textarea_args_set_onchange(UiTextAreaArgs *args, ui_callback callback);
+UIEXPORT void ui_textarea_args_set_onchangedata(UiTextAreaArgs *args, void *onchangedata);
+UIEXPORT void ui_textarea_args_set_varname(UiTextAreaArgs *args, const char *varname);
+UIEXPORT void ui_textarea_args_set_value(UiTextAreaArgs *args, UiText *value);
+UIEXPORT void ui_textarea_args_set_groups(UiTextAreaArgs *args, int *groups);
+UIEXPORT void ui_textarea_args_free(UiTextAreaArgs *args);
+
+UIEXPORT UiTextFieldArgs* ui_textfield_args_new(void);
+UIEXPORT void ui_textfield_args_set_fill(UiTextFieldArgs *args, UiBool fill);
+UIEXPORT void ui_textfield_args_set_hexpand(UiTextFieldArgs *args, UiBool value);
+UIEXPORT void ui_textfield_args_set_vexpand(UiTextFieldArgs *args, UiBool value);
+UIEXPORT void ui_textfield_args_set_hfill(UiTextFieldArgs *args, UiBool value);
+UIEXPORT void ui_textfield_args_set_vfill(UiTextFieldArgs *args, UiBool value);
+UIEXPORT void ui_textfield_args_set_override_defaults(UiTextFieldArgs *args, UiBool value);
+UIEXPORT void ui_textfield_args_set_colspan(UiTextFieldArgs *args, int colspan);
+UIEXPORT void ui_textfield_args_set_rowspan(UiTextFieldArgs *args, int rowspan);
+UIEXPORT void ui_textfield_args_set_name(UiTextFieldArgs *args, const char *name);
+UIEXPORT void ui_textfield_args_set_style_class(UiTextFieldArgs *args, const char *classname);
+UIEXPORT void ui_textfield_args_set_onchange(UiTextFieldArgs *args, ui_callback callback);
+UIEXPORT void ui_textfield_args_set_onchangedata(UiTextFieldArgs *args, void *onchangedata);
+UIEXPORT void ui_textfield_args_set_onactivate(UiTextFieldArgs *args, ui_callback callback);
+UIEXPORT void ui_textfield_args_set_onactivatedata(UiTextFieldArgs *args, void *onactivatedata);
+UIEXPORT void ui_textfield_args_set_varname(UiTextFieldArgs *args, const char *varname);
+UIEXPORT void ui_textfield_args_set_value(UiTextFieldArgs *args, UiString *value);
+UIEXPORT void ui_textfield_args_set_groups(UiTextFieldArgs *args, int *groups);
+UIEXPORT void ui_textfield_args_free(UiTextFieldArgs *args);
+
+UIEXPORT UiWebviewArgs* ui_webview_args_new(void);
+UIEXPORT void ui_webview_args_set_fill(UiWebviewArgs *args, UiBool fill);
+UIEXPORT void ui_webview_args_set_hexpand(UiWebviewArgs *args, UiBool value);
+UIEXPORT void ui_webview_args_set_vexpand(UiWebviewArgs *args, UiBool value);
+UIEXPORT void ui_webview_args_set_hfill(UiWebviewArgs *args, UiBool value);
+UIEXPORT void ui_webview_args_set_vfill(UiWebviewArgs *args, UiBool value);
+UIEXPORT void ui_webview_args_set_override_defaults(UiWebviewArgs *args, UiBool value);
+UIEXPORT void ui_webview_args_set_colspan(UiWebviewArgs *args, int colspan);
+UIEXPORT void ui_webview_args_set_rowspan(UiWebviewArgs *args, int rowspan);
+UIEXPORT void ui_webview_args_set_name(UiWebviewArgs *args, const char *name);
+UIEXPORT void ui_webview_args_set_style_class(UiWebviewArgs *args, const char *classname);
+UIEXPORT void ui_webview_args_set_varname(UiWebviewArgs *args, const char *varname);
+UIEXPORT void ui_webview_args_set_value(UiWebviewArgs *args, UiGeneric *value);
+UIEXPORT void ui_webview_args_set_groups(UiWebviewArgs *args, int *groups);
+UIEXPORT void ui_webview_args_free(UiWebviewArgs *args);
+
#ifdef __cplusplus
}
#endif
ev.document = doc;
ev.obj = NULL;
ev.eventdata = NULL;
+ ev.eventdatatype = 0;
ev.intval = 0;
if(ctx->close_callback) {
ev.document = obj->ctx->document;
ev.obj = obj;
ev.eventdata = NULL;
+ ev.eventdatatype = 0;
ev.intval = 0;
obj->ctx->close_callback(&ev, obj->ctx->close_data);
}
event.document = job->obj->ctx->document;
event.intval = 0;
event.eventdata = NULL;
+ event.eventdatatype = 0;
job->finish_callback(&event, job->finish_data);
free(job);
return 0;
evt.window = NULL;
evt.document = NULL;
evt.eventdata = data;
+ evt.eventdatatype = UI_EVENT_DATA_POINTER;
evt.intval = 0;
while(observer) {
#include "wrapper.h"
#include "types.h"
#include <cx/list.h>
+#include <string.h>
/* ---------------------------- UiObject ---------------------------- */
}
+/* ---------------------------- UiSubListEventData ---------------------------- */
+
+UiList* ui_sublist_event_get_list(UiSubListEventData *event) {
+ return event->list;
+}
+
+int ui_sublist_event_get_sublist_index(UiSubListEventData *event) {
+ return event->sublist_index;
+}
+
+int ui_sublist_event_get_row_index(UiSubListEventData *event) {
+ return event->row_index;
+}
+
+void* ui_sublist_event_get_row_data(UiSubListEventData *event) {
+ return event->row_data;
+}
+
+void* ui_sublist_event_get_sublist_userdata(UiSubListEventData *event) {
+ return event->sublist_userdata;
+}
+
+void* ui_sublist_event_get_event_data(UiSubListEventData *event) {
+ return event->event_data;
+}
+
+
/* ---------------------------- UiEvent ---------------------------- */
UiObject* ui_event_get_obj(UiEvent *event) {
return event->eventdata;
}
+int ui_event_get_eventdatatype(UiEvent *event) {
+ return event->eventdatatype;
+}
+
int ui_event_get_int(UiEvent *event) {
return event->intval;
}
UIEXPORT void ui_srclist_remove(UiList *list, int index);
UIEXPORT void ui_srclist_clear(UiList *list);
UIEXPORT int ui_srclist_size(UiList *list);
+
+UIEXPORT UiList* ui_sublist_event_get_list(UiSubListEventData *event);
+UIEXPORT int ui_sublist_event_get_sublist_index(UiSubListEventData *event);
+UIEXPORT int ui_sublist_event_get_row_index(UiSubListEventData *event);
+UIEXPORT void* ui_sublist_event_get_row_data(UiSubListEventData *event);
+UIEXPORT void* ui_sublist_event_get_sublist_userdata(UiSubListEventData *event);
+UIEXPORT void* ui_sublist_event_get_event_data(UiSubListEventData *event);
UIEXPORT UiObject* ui_event_get_obj(UiEvent *event);
UIEXPORT void* ui_event_get_document(UiEvent *event);
UIEXPORT void* ui_event_get_windowdata(UiEvent *event);
UIEXPORT void* ui_event_get_eventdata(UiEvent *event);
+UIEXPORT int ui_event_get_eventdatatype(UiEvent *event);
UIEXPORT int ui_event_get_int(UiEvent *event);
UIEXPORT int ui_event_get_set(UiEvent *event);
event->callback = onclick;
event->value = event_value;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
button,
ui_set_name_and_style(button, args->name, args->style_class);
ui_set_widget_groups(obj->ctx, button, args->groups);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, button, FALSE);
+ current->container->add(current->container, button);
return button;
}
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = event->value;
e.set = ui_get_setop();
event->callback(&e, event->userdata);
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = event->var->value;
+ e.eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
e.intval = i->get(i);
e.set = ui_get_setop();
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = gtk_toggle_button_get_active(widget);
e.set = ui_get_setop();
event->callback(&e, event->userdata);
event->callback = onchange;
event->value = 0;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
widget,
event->callback = NULL;
event->value = enable_state;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
widget,
ui_set_widget_groups(obj->ctx, widget, args->groups);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, widget, FALSE);
+ current->container->add(current->container, widget);
return widget;
}
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = gtk_check_button_get_active(widget);
e.set = ui_get_setop();
event->callback(&e, event->userdata);
ui_set_widget_groups(obj->ctx, widget, args->groups);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, widget, FALSE);
+ current->container->add(current->container, widget);
return widget;
}
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = RADIOBUTTON_GET_ACTIVE(widget);
e.set = ui_get_setop();
event->callback(&e, event->userdata);
event->callback = args->onchange;
event->value = 0;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
rbutton,
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, rbutton, FALSE);
+ current->container->add(current->container, rbutton);
return rbutton;
}
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = i->get(i);
ui_notify_evt(i->observers, &e);
return (UiContainer*)ct;
}
-void ui_box_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_box_container_add(UiContainer *ct, GtkWidget *widget) {
UiBoxContainer *bc = (UiBoxContainer*)ct;
- if(ct->layout.fill != UI_LAYOUT_UNDEFINED) {
- fill = ui_lb2bool(ct->layout.fill);
- }
-
+ UiBool fill = ct->layout.fill;
if(bc->has_fill && fill) {
fprintf(stderr, "UiError: container has 2 filled widgets");
fill = FALSE;
}
#if GTK_MAJOR_VERSION >= 3
-void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_grid_container_add(UiContainer *ct, GtkWidget *widget) {
UiGridContainer *grid = (UiGridContainer*)ct;
if(ct->layout.newline) {
}
}
- if(ct->layout.fill != UI_LAYOUT_UNDEFINED) {
- fill = ui_lb2bool(ct->layout.fill);
- }
+ UiBool fill = ct->layout.fill;
if(ct->layout.hexpand) {
hexpand = TRUE;
hfill = TRUE;
}
#endif
#ifdef UI_GTK2
-void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_grid_container_add(UiContainer *ct, GtkWidget *widget) {
UiGridContainer *grid = (UiGridContainer*)ct;
if(ct->layout.newline) {
}
}
- if(ct->layout.fill != UI_LAYOUT_UNDEFINED) {
- fill = ui_lb2bool(ct->layout.fill);
- }
+ UiBool fill = ct->layout.fill;
if(ct->layout.hexpand) {
hexpand = TRUE;
hfill = TRUE;
return ct;
}
-void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_frame_container_add(UiContainer *ct, GtkWidget *widget) {
FRAME_SET_CHILD(ct->widget, widget);
}
return ct;
}
-void ui_expander_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_expander_container_add(UiContainer *ct, GtkWidget *widget) {
EXPANDER_SET_CHILD(ct->widget, widget);
}
-void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget) {
// TODO: check if the widget implements GtkScrollable
SCROLLEDWINDOW_SET_CHILD(ct->widget, widget);
ui_reset_layout(ct->layout);
return (UiContainer*)ct;
}
-void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget) {
UiGtkTabView *data = ui_widget_get_tabview_data(ct->widget);
if(!data) {
fprintf(stderr, "UI Error: widget is not a tabview");
GtkWidget *box = type == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing);
ui_set_name_and_style(box, args->name, args->style_class);
GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box;
- ct->add(ct, widget, TRUE);
+ ct->add(ct, widget);
UiObject *newobj = uic_object_new(obj, box);
newobj->container = ui_box_container(obj, box, type);
GtkWidget *grid = ui_create_grid_widget(args->columnspacing, args->rowspacing);
ui_set_name_and_style(grid, args->name, args->style_class);
widget = ui_box_set_margin(grid, args->margin);
- current->container->add(current->container, widget, TRUE);
+ current->container->add(current->container, widget);
UiObject *newobj = uic_object_new(obj, grid);
newobj->container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
newobj->widget = frame;
newobj->container = ui_frame_container(obj, frame);
}
- current->container->add(current->container, frame, FALSE);
+ current->container->add(current->container, frame);
uic_obj_add(obj, newobj);
return frame;
newobj->widget = expander;
newobj->container = ui_expander_container(obj, expander);
}
- current->container->add(current->container, expander, FALSE);
+ current->container->add(current->container, expander);
uic_obj_add(obj, newobj);
return expander;
GtkWidget *sw = SCROLLEDWINDOW_NEW();
ui_set_name_and_style(sw, args->name, args->style_class);
GtkWidget *widget = ui_box_set_margin(sw, args->margin);
- current->container->add(current->container, widget, TRUE);
+ current->container->add(current->container, widget);
UiObject *newobj = uic_object_new(obj, sw);
GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
event.document = event.obj->ctx->document;
event.set = ui_get_setop();
event.eventdata = NULL;
+ event.eventdatatype = 0;
event.intval = page_num;
tabview->onchange(&event, tabview->onchange);
event.document = event.obj->ctx->document;
event.set = ui_get_setop();
event.eventdata = NULL;
+ event.eventdatatype = 0;
event.intval = 0;
tabview->onchange(&event, tabview->onchange);
data->subcontainer = args->subcontainer;
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, widget, TRUE);
+ current->container->add(current->container, widget);
UiObject *newobj = uic_object_new(obj, widget);
newobj->container = ui_tabview_container(obj, widget);
GtkWidget *box = ui_gtk_hbox_new(args->alt_spacing);
ui_set_name_and_style(box, args->name, args->style_class);
- ct->add(ct, box, FALSE);
+ ct->add(ct, box);
UiObject *newobj = uic_object_new(obj, box);
newobj->container = ui_headerbar_fallback_container(obj, box);
return (UiContainer*)ct;
}
-void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget) {
UiHeaderbarContainer *hb = (UiHeaderbarContainer*)ct;
BOX_ADD(ct->widget, widget);
}
return (UiContainer*)ct;
}
-void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget) {
UiHeaderbarContainer *hb = (UiHeaderbarContainer*)ct;
if(hb->part == 0) {
UI_HEADERBAR_PACK_START(ct->widget, widget);
GtkWidget *pane0 = create_paned(orientation);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, pane0, TRUE);
+ current->container->add(current->container, pane0);
int max = args->max_panes == 0 ? 2 : args->max_panes;
return (UiContainer*)ct;
}
-void ui_splitpane_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill) {
+void ui_splitpane_container_add(UiContainer *ct, GtkWidget *widget) {
UiSplitPaneContainer *s = (UiSplitPaneContainer*)ct;
if(s->nchildren >= s->max) {
UiObject *item_obj = cxMapGet(ct->current_items, key);
if(item_obj) {
// re-add previously created widget
- ui_box_container_add(ct->container, item_obj->widget, FALSE);
+ ui_box_container_add(ct->container, item_obj->widget);
} else {
// create new widget and object for this list element
CxMempool *mp = cxMempoolCreateSimple(256);
ct->columnspacing,
ct->rowspacing,
ct->margin);
- ui_box_container_add(ct->container, obj->widget, FALSE);
+ ui_box_container_add(ct->container, obj->widget);
if(ct->create_ui) {
ct->create_ui(obj, index, elm, ct->userdata);
}
GtkWidget *box = args->container == UI_CONTAINER_VBOX ? ui_gtk_vbox_new(args->spacing) : ui_gtk_hbox_new(args->spacing);
ui_set_name_and_style(box, args->name, args->style_class);
GtkWidget *widget = args->margin > 0 ? ui_box_set_margin(box, args->margin) : box;
- ct->add(ct, widget, TRUE);
+ ct->add(ct, widget);
UiGtkItemListContainer *container = malloc(sizeof(UiGtkItemListContainer));
container->parent = obj;
void ui_layout_fill(UiObject *obj, UiBool fill) {
UiContainer *ct = uic_get_current_container(obj);
- ct->layout.fill = ui_bool2lb(fill);
+ ct->layout.fill = fill;
}
void ui_layout_hexpand(UiObject *obj, UiBool expand) {
#endif
#define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout))
-#define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE)
-#define ui_bool2lb(b) ((b) ? UI_LAYOUT_TRUE : UI_LAYOUT_FALSE)
-typedef void (*ui_container_add_f)(UiContainer*, GtkWidget*, UiBool);
+typedef void (*ui_container_add_f)(UiContainer*, GtkWidget*);
typedef struct UiDocumentView UiDocumentView;
-typedef enum UiLayoutBool {
- UI_LAYOUT_UNDEFINED = 0,
- UI_LAYOUT_TRUE,
- UI_LAYOUT_FALSE,
-} UiLayoutBool;
-
typedef struct UiLayout UiLayout;
struct UiLayout {
- UiLayoutBool fill;
+ UiBool fill;
UiBool newline;
char *label;
UiBool hexpand;
UIMENU menu;
GtkWidget *current;
- void (*add)(UiContainer*, GtkWidget*, UiBool);
+ void (*add)(UiContainer*, GtkWidget*);
UiLayout layout;
int close;
int margin);
UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame);
-void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_frame_container_add(UiContainer *ct, GtkWidget *widget);
GtkWidget* ui_box_set_margin(GtkWidget *box, int margin);
UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType type);
UiContainer* ui_box_container(UiObject *obj, GtkWidget *box, UiSubContainerType type);
-void ui_box_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_box_container_add(UiContainer *ct, GtkWidget *widget);
GtkWidget* ui_create_grid_widget(int colspacing, int rowspacing);
UiContainer* ui_grid_container(
UiBool def_vexpand,
UiBool def_hfill,
UiBool def_vfill);
-void ui_grid_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_grid_container_add(UiContainer *ct, GtkWidget *widget);
UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame);
-void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_frame_container_add(UiContainer *ct, GtkWidget *widget);
UiContainer* ui_expander_container(UiObject *obj, GtkWidget *expander);
-void ui_expander_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_expander_container_add(UiContainer *ct, GtkWidget *widget);
UiContainer* ui_scrolledwindow_container(UiObject *obj, GtkWidget *scrolledwindow);
-void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_scrolledwindow_container_add(UiContainer *ct, GtkWidget *widget);
UiContainer* ui_tabview_container(UiObject *obj, GtkWidget *tabview);
-void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_tabview_container_add(UiContainer *ct, GtkWidget *widget);
UiContainer* ui_splitpane_container(UiObject *obj, GtkWidget *pane, UiOrientation orientation, int max, int init);
-void ui_splitpane_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_splitpane_container_add(UiContainer *ct, GtkWidget *widget);
UiGtkTabView* ui_widget_get_tabview_data(UIWIDGET tabview);
#if GTK_CHECK_VERSION(3, 10, 0)
UiContainer* ui_headerbar_container(UiObject *obj, GtkWidget *headerbar);
-void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget);
#endif
UiContainer* ui_headerbar_fallback_container(UiObject *obj, GtkWidget *headerbar);
-void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
+void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget);
#ifdef __cplusplus
}
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, widget, FALSE);
+ current->container->add(current->container, widget);
return widget;
}
UIWIDGET ui_space_deprecated(UiObject *obj) {
GtkWidget *widget = gtk_label_new("");
UiContainer *ct = uic_get_current_container(obj);
- ct->add(ct, widget, TRUE);
+ ct->add(ct, widget);
return widget;
}
GtkWidget *widget = gtk_hseparator_new();
#endif
UiContainer *ct = uic_get_current_container(obj);
- ct->add(ct, widget, FALSE);
+ ct->add(ct, widget);
return widget;
}
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, progressbar, FALSE);
+ current->container->add(current->container, progressbar);
return progressbar;
}
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, spinner, FALSE);
+ current->container->add(current->container, spinner);
return spinner;
}
event);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, spin, FALSE);
+ current->container->add(current->container, spin);
return spin;
}
e.obj = event->obj;
e.window = event->obj->window;
e.document = event->obj->ctx->document;
- e.eventdata = &value;
+ e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = (int64_t)value;
if(event->callback) {
}
UiContainer *ct = uic_get_current_container(obj);
- ct->add(ct, widget, TRUE);
+ ct->add(ct, widget);
return widget;
}
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, toplevel, TRUE);
+ current->container->add(current->container, toplevel);
return toplevel;
}
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = NULL;
+ event.eventdatatype = 0;
event.intval = gtk_gesture_single_get_current_button(GTK_GESTURE_SINGLE(gesture));
event.set = 0;
callback(&event, userdata);
static void column_factory_bind( GtkListItemFactory *factory, GtkListItem *item, gpointer userdata) {
UiColData *col = userdata;
- UiList *list = col->listview->var->value;
+ UiList *list = col->listview->var ? col->listview->var->value : NULL;
ObjWrapper *obj = gtk_list_item_get_item(item);
UiModel *model = col->listview->model;
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, scroll_area, FALSE);
+ current->container->add(current->container, scroll_area);
// ct->current should point to view, not scroll_area, to make it possible
// to add a context menu
// add widget to parent
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, view, FALSE);
+ current->container->add(current->container, view);
return view;
}
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, scroll_area, FALSE);
+ current->container->add(current->container, scroll_area);
// ct->current should point to view, not scroll_area, to make it possible
// to add a context menu
event.window = event.obj->window;
event.intval = view->selection.count;
event.eventdata = &view->selection;
+ event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.set = ui_get_setop();
if(cb) {
cb(&event, cbdata);
event.window = event.obj->window;
event.intval = index;
event.eventdata = eventdata->data;
+ event.eventdatatype = UI_EVENT_DATA_LIST_ELM;
event.set = ui_get_setop();
view->onactivate(&event, view->onactivatedata);
}
event.window = event.obj->window;
event.intval = view->selection.count;
event.eventdata = &view->selection;
+ event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.set = ui_get_setop();
view->onactivate(&event, view->onactivatedata);
}
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = dnd;
+ event.eventdatatype = UI_EVENT_DATA_DND;
event.intval = 0;
event.set = ui_get_setop();
listview->ondragstart(&event, listview->ondragstartdata);
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = &dnd;
+ event.eventdatatype = UI_EVENT_DATA_DND;
event.intval = 0;
event.set = ui_get_setop();
listview->ondragcomplete(&event, listview->ondragcompletedata);
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = &dnd;
+ event.eventdatatype = UI_EVENT_DATA_DND;
event.intval = 0;
event.set = ui_get_setop();
listview->ondrop(&event, listview->ondropdata);
ui_set_name_and_style(listbox, args->name, args->style_class);
ui_set_widget_groups(obj->ctx, listbox, args->groups);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, scroll_area, TRUE);
+ current->container->add(current->container, scroll_area);
UiListBox *uilistbox = malloc(sizeof(UiListBox));
uilistbox->obj = obj;
void *elm = list->first(list);
while(elm) {
UiSubListItem item = { NULL, NULL, NULL, NULL, NULL, NULL };
- listbox->getvalue(sublist->userdata, elm, index, &item, listbox->getvaluedata);
+ if(listbox->getvalue) {
+ listbox->getvalue(list, sublist->userdata, elm, index, &item, listbox->getvaluedata);
+ } else {
+ item.label = strdup(elm);
+ }
// create listbox item
GtkWidget *row = create_listbox_row(listbox, sublist, &item, (int)index);
eventdata.sublist_index = sublist->index;
eventdata.row_index = data->value0;
eventdata.sublist_userdata = sublist->userdata;
- eventdata.row_data = ui_list_get(eventdata.list, eventdata.row_index);
+ eventdata.row_data = eventdata.list->get(eventdata.list, eventdata.row_index);
eventdata.event_data = data->customdata2;
UiEvent event;
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = &eventdata;
+ event.eventdatatype = UI_EVENT_DATA_SUBLIST;
event.intval = data->value0;
event.set = ui_get_setop();
event->callback = i->callback;
event->value = 0;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
action,
event->userdata = il->userdata;
event->callback = il->callback;
event->customdata = var;
+ event->customint = 0;
event->value = 0;
g_signal_connect(
evt.window = event->obj->window;
evt.document = event->obj->ctx->document;
evt.eventdata = event->customdata;
+ evt.eventdatatype = event->customint;
evt.intval = intval;
event->callback(&evt, event->userdata);
}
evt.window = event->obj->window;
evt.document = event->obj->ctx->document;
evt.eventdata = ui_list_get(list, index);
+ evt.eventdatatype = UI_EVENT_DATA_LIST_ELM;
evt.intval = index;
event->callback(&evt, event->userdata);
event->callback = f;
event->value = 0;
event->customdata = NULL;
+ event->customint = 0;
g_signal_connect(
G_OBJECT(scrollbar),
}
UiContainer *ct = uic_get_current_container(obj);
- ct->add(ct, scrollbar, FALSE);
+ ct->add(ct, scrollbar);
return scrollbar;
}
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = event->value;
event->callback(&e, event->userdata);
return TRUE;
// add
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, scroll_area, TRUE);
+ current->container->add(current->container, scroll_area);
// bind value
if(var) {
e.window = e.obj->window;
e.document = textarea->ctx->document;
e.eventdata = value;
+ e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE;
e.intval = 0;
e.set = ui_get_setop();
}
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, textfield, FALSE);
+ current->container->add(current->container, textfield);
if(var) {
UiString *value = var->value;
e.window = e.obj->window;
e.document = textfield->obj->ctx->document;
e.eventdata = value;
+ e.eventdatatype = UI_EVENT_DATA_TEXT_VALUE;
e.intval = 0;
e.set = ui_get_setop();
e.window = e.obj->window;
e.document = textfield->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = 0;
e.set = ui_get_setop();
textfield->onactivate(&e, textfield->onactivatedata);
evt.window = evt.obj->window;
evt.document = evt.obj->ctx->document;
evt.eventdata = elm->path;
+ evt.eventdatatype = UI_EVENT_DATA_STRING;
evt.intval = event->value0;
evt.set = ui_get_setop();
event->callback(&evt, event->userdata);
evt.window = obj->window;
evt.document = obj->ctx->document;
evt.eventdata = (char*)text;
+ evt.eventdatatype = UI_EVENT_DATA_STRING;
evt.intval = -1;
pathtf->onactivate(&evt, pathtf->onactivatedata);
}
gtk_widget_set_name(pathtf->stack, "path-textfield-box");
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, pathtf->stack, FALSE);
+ current->container->add(current->container, pathtf->stack);
pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
pathtf->entry = gtk_entry_new();
event->callback = item->args.onclick;
event->userdata = item->args.onclickdata;
event->customdata = NULL;
+ event->customint = 0;
event->value = 0;
g_signal_connect(
e.window = event->obj->window;
e.document = event->obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = gtk_toggle_tool_button_get_active(widget);
if(event->callback) {
event.document = job->obj->ctx->document;
event.intval = 0;
event.eventdata = NULL;
+ event.eventdatatype = 0;
job->finish_callback(&event, job->finish_data);
free(job);
ui_callback callback;
void *userdata;
int value;
+ int customint;
void *customdata;
} UiEventData;
ui_set_widget_groups(obj->ctx, webview, args->groups);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, webview, FALSE);
+ current->container->add(current->container, webview);
return webview;
}
UIWIDGET widget = create_widget(obj, args, userdata);
UI_APPLY_LAYOUT2(current, args);
- current->container->add(current->container, widget, FALSE);
+ current->container->add(current->container, widget);
return widget;
}
GtkWidget *widget = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL);
ui_set_name_and_style(widget, args->name, args->style_class);
UI_APPLY_LAYOUT1(current, (*args));
- current->container->add(current->container, widget, FALSE);
+ current->container->add(current->container, widget);
return widget;
}
evt.document = evt.obj->ctx->document;
evt.window = evt.obj->window;
evt.eventdata = NULL;
+ evt.eventdatatype = 0;
+ evt.eventdatatype = 0;
evt.intval = 0;
if(!strcmp(response, "btn1")) {
if(data->customdata) {
GtkWidget *entry = data->customdata;
evt.eventdata = (void*)ENTRY_GET_TEXT(GTK_ENTRY(entry));
+ evt.eventdatatype = UI_EVENT_DATA_STRING;
}
if(data->callback) {
event->callback = args.result;
event->userdata = args.resultdata;
event->customdata = NULL;
+ event->customint = 0;
event->value = 0;
event->obj = parent;
}
adw_alert_dialog_set_extra_child(ADW_ALERT_DIALOG(dialog), entry);
event->customdata = entry;
+ event->customint = 0;
}
g_signal_connect(
flist.files = NULL;
flist.nfiles = 0;
evt.eventdata = &flist;
+ evt.eventdatatype = UI_EVENT_DATA_FILE_LIST;
if(selection) {
flist = listmodel2filelist(selection);
event->callback = file_selected_callback;
event->userdata = cbdata;
event->customdata = NULL;
+ event->customint = 0;
event->value = mode;
event->obj = obj;
e.window = e.obj->window;
e.document = e.obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = XmToggleButtonGetState(w);
e.set = ui_get_setop();
e.window = e.obj->window;
e.document = e.obj->ctx->document;
e.eventdata = value;
+ e.eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
e.intval = v;
e.set = ui_get_setop();
typedef struct UiLayout UiLayout;
struct UiLayout {
- UiTri fill;
+ UiBool fill;
UiBool newline;
char *label;
UiBool hexpand;
event.window = obj->window;
event.document = obj->ctx->document;
event.eventdata = &sel;
+ event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.intval = sel.count > 0 ? sel.rows[0] : -1;
callback(&event, userdata);
}
event.window = event.obj->window;
event.document = event.obj->ctx->document;
event.eventdata = elm;
+ event.eventdatatype = UI_EVENT_DATA_LIST_ELM;
event.intval = index;
if(listview->onactivate) {
listview->onactivate(&event, listview->onactivatedata);
evt.window = evt.obj->window;
evt.document = evt.obj->ctx->document;
evt.eventdata = path;
+ evt.eventdatatype = UI_EVENT_DATA_STRING;
evt.intval = index;
event->callback(&evt, event->userdata);
}
event.document = job->obj->ctx->document;
event.intval = 0;
event.eventdata = NULL;
+ event.eventdatatype = 0;
job->finish_callback(&event, job->finish_data);
}
free(job);
button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
}
- ctn->add(button, false);
+ ctn->add(button);
return button;
}
event->intval = button->isChecked();
if(wrapper->var) {
event->eventdata = wrapper->var->value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
}
}
i->set = ui_togglebutton_set;
}
- ctn->add(button, false);
+ ctn->add(button);
return button;
}
event->intval = button->isChecked();
if(wrapper->var) {
event->eventdata = wrapper->var->value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
}
}
i->set = ui_checkbox_set;
}
- ctn->add(checkbox, false);
+ ctn->add(checkbox);
return checkbox;
}
if(wrapper->var) {
UiInteger *value = (UiInteger*)wrapper->var->value;
event->eventdata = value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
event->intval = value->get(value);
}
}
button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
- ctn->add(button, false);
+ ctn->add(button);
return button;
}
ui_reset_layout(layout);
}
-void UiBoxContainer::add(QWidget* widget, bool fill) {
- if(layout.fill != UI_LAYOUT_UNDEFINED) {
- fill = ui_lb2bool(layout.fill);
- }
-
+void UiBoxContainer::add(QWidget* widget) {
+ bool fill = layout.fill;
if(hasStretchedWidget && fill) {
fill = false;
fprintf(stderr, "UiError: container has 2 filled widgets");
}
- box->addWidget(widget, fill);
+ box->addWidget(widget);
if(!hasStretchedWidget) {
QSpacerItem *newspace = new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
QWidget *widget = new QWidget();
QBoxLayout *box = new QBoxLayout(dir);
widget->setLayout(box);
- ctn->add(widget, true);
+ ctn->add(widget);
ui_container_add(obj, new UiBoxContainer(box));
ui_reset_layout(layout);
}
-void UiGridContainer::add(QWidget* widget, bool fill) {
+void UiGridContainer::add(QWidget* widget) {
if(layout.newline) {
x = 0;
y++;
}
- int hexpand = false;
- int vexpand = false;
- int hfill = false;
- int vfill = false;
+ bool fill = layout.fill;
+ bool hexpand = false;
+ bool vexpand = false;
+ bool hfill = false;
+ bool vfill = false;
if(!layout.override_defaults) {
if(def_hexpand) {
hexpand = true;
}
}
- if(layout.fill != UI_LAYOUT_UNDEFINED) {
- fill = ui_lb2bool(layout.fill);
- }
if(layout.hexpand) {
hexpand = true;
//hfill = true;
QWidget *widget = new QWidget();
QGridLayout *grid = new QGridLayout();
widget->setLayout(grid);
- ctn->add(widget, true);
+ ctn->add(widget);
ui_container_add(obj, new UiGridContainer(
grid,
typedef struct UiLayout UiLayout;
struct UiLayout {
- UiTri fill;
+ UiBool fill;
UiBool newline;
char *label;
UiBool hexpand;
UiLayout layout;
UIWIDGET current;
- virtual void add(QWidget *widget, bool fill) = 0;
+ virtual void add(QWidget *widget) = 0;
virtual void end() {}
};
UiBoxContainer(QBoxLayout *box);
- virtual void add(QWidget *widget, bool fill);
+ virtual void add(QWidget *widget);
};
class UiGridContainer : public UiContainerPrivate {
bool def_hfill,
bool def_vfill);
- virtual void add(QWidget *widget, bool fill);
+ virtual void add(QWidget *widget);
virtual void end();
};
}
- ctn->add(widget, false);
+ ctn->add(widget);
return widget;
}
}
widget->setAlignment(align);
- ctn->add(widget, false);
+ ctn->add(widget);
return widget;
}
SLOT(selectionChanged(const QItemSelection &, const QItemSelection &)));
- ctn->add(view, false);
+ ctn->add(view);
return view;
}
SLOT(selectionChanged(const QItemSelection &, const QItemSelection &)));
- ctn->add(view, false);
+ ctn->add(view);
return view;
}
if(action->var) {
UiInteger *value = (UiInteger*)action->var->value;
event->eventdata = value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
event->intval = value->get(value);
}
}
void ui_checkableaction_prepare_event(UiEvent *event, UiAction *action) {
if(action->var) {
event->eventdata = action->var->value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
}
event->intval = action->isChecked();
}
event.window = obj->window;
event.document = obj->ctx->document;
event.eventdata = &sel;
+ event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.intval = sel.count;
event.set = ui_get_setop();
event.window = obj->window;
event.document = obj->ctx->document;
event.eventdata = &sel;
+ event.eventdatatype = UI_EVENT_DATA_LIST_SELECTION;
event.intval = sel.count;
event.set = ui_get_setop();
UI_APPLY_LAYOUT(ctn->layout, args);
QTextEdit *textarea = new QTextEdit();
- ctn->add(textarea, true);
+ ctn->add(textarea);
QTextDocument *document = nullptr;
UI_APPLY_LAYOUT(ctn->layout, args);
QLineEdit *textfield = new QLineEdit();
- ctn->add(textfield, false);
+ ctn->add(textfield);
if(password) {
textfield->setEchoMode(QLineEdit::Password);
event->intval = action->isChecked();
if(wrapper->var) {
event->eventdata = wrapper->var->value;
+ event->eventdatatype = UI_EVENT_DATA_INTEGER_VALUE;
}
}
e.window = obj->window;
e.document = obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = 0;
e.set = ui_get_setop();
if(prepare_event) {
e.window = obj->window;
e.document = obj->ctx->document;
e.eventdata = NULL;
+ e.eventdatatype = 0;
e.intval = 0;
e.set = ui_get_setop();
if(prepare_event) {
UIWIDGET widget = create_widget(obj, args, userdata);
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- ctn->add(widget, false);
+ ctn->add(widget);
return widget;
}
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- ctn->add(separator, false);
+ ctn->add(separator);
return separator;
}
#endif
typedef struct UiButtonArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiButtonArgs;
typedef struct UiToggleArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
typedef struct UiContainerArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiContainerArgs;
typedef struct UiFrameArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiFrameArgs;
typedef struct UiTabViewArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiTabViewArgs;
typedef struct UiHeaderbarArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiSidebarArgs;
typedef struct UiSplitPaneArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiSplitPaneArgs;
typedef struct UiItemListContainerArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
typedef enum UiLabelStyle UiLabelStyle;
typedef struct UiLabelArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiLabelArgs;
typedef struct UiProgressbarArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiProgressbarArgs;
typedef struct UiProgressbarSpinnerArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
typedef struct UiSpinnerArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
typedef struct UiImageViewerArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
#endif
typedef struct UiTextAreaArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
} UiTextAreaArgs;
typedef struct UiTextFieldArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
typedef struct UiPathTextFieldArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
#define UIEXPORT __declspec(dllexport)
-#define UIWIDGET void*
+typedef struct W32Widget {
+ HWND hwnd;
+} W32Widget;
+
+#define UIWIDGET W32Widget*
#define UIWINDOW void*
#define UIMENU void*
UI_OFF
} UiTri;
-
enum UiMouseEventType { UI_PRESS = 0, UI_PRESS2 };
typedef enum UiLabelType {
void *document;
void *window;
void *eventdata;
+ int eventdatatype;
int intval;
int set;
};
int intdata;
} UiCondVar;
+enum UiEventType {
+ UI_EVENT_DATA_NULL = 0,
+ UI_EVENT_DATA_POINTER,
+ UI_EVENT_DATA_STRING,
+ UI_EVENT_DATA_INTEGER_VALUE,
+ UI_EVENT_DATA_STRING_VALUE,
+ UI_EVENT_DATA_TEXT_VALUE,
+ UI_EVENT_DATA_DOUBLE_VALUE,
+ UI_EVENT_DATA_RANGE_VALUE,
+ UI_EVENT_DATA_LIST_SELECTION,
+ UI_EVENT_DATA_LIST_ELM,
+ UI_EVENT_DATA_DND,
+ UI_EVENT_DATA_SUBLIST,
+ UI_EVENT_DATA_FILE_LIST
+};
+
UIEXPORT void ui_init(const char *appname, int argc, char **argv);
UIEXPORT const char* ui_appname();
};
struct UiListArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
const int *groups;
};
-typedef void (*ui_sublist_getvalue_func)(void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
+typedef void (*ui_sublist_getvalue_func)(UiList *list, void *sublist_userdata, void *rowdata, int index, UiSubListItem *item, void *userdata);
struct UiSubList {
UiList *value;
};
struct UiSourceListArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
#endif
typedef struct UiWidgetArgs {
- UiTri fill;
+ UiBool fill;
UiBool hexpand;
UiBool vexpand;
UiBool hfill;
$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
$(UI_SHLIB): $(OBJ)
- $(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
+ $(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/$(BUILD_LIB_DIR) -lucx
--- /dev/null
+/*\r
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#include "button.h"\r
+\r
+UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) {\r
+ return NULL;\r
+}\r
--- /dev/null
+/*\r
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#ifndef BUTTON_H\r
+#define BUTTON_H\r
+\r
+#include "../ui/button.h"\r
+#include "container.h"\r
+\r
+#endif //BUTTON_H\r
--- /dev/null
+/*\r
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#include "container.h"\r
+\r
+\r
+/* ---------------------------- Box Container ---------------------------- */\r
+\r
+static UIWIDGET box_create(UiObject *obj, UiContainerArgs *args, UiBoxOrientation orientation) {\r
+ return NULL;\r
+}\r
+\r
+// public\r
+UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {\r
+ return box_create(obj, args, UI_BOX_VERTICAL);\r
+}\r
+\r
+// public\r
+UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {\r
+ return box_create(obj, args, UI_BOX_HORIZONTAL);\r
+}\r
+\r
+\r
--- /dev/null
+/*\r
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#ifndef CONTAINER_H\r
+\r
+#include "../ui/container.h"\r
+\r
+#define CONTAINER_H\r
+\r
+#define UI_APPLY_LAYOUT(layout, args) \\r
+ layout.fill = args->fill; \\r
+ layout.hexpand = args->hexpand; \\r
+ layout.vexpand = args->vexpand; \\r
+ layout.hfill = args->hfill; \\r
+ layout.vfill = args->vfill; \\r
+ layout.override_defaults = args->override_defaults; \\r
+ layout.colspan = args->colspan; \\r
+ layout.rowspan = args->rowspan\r
+\r
+typedef struct UiLayout UiLayout;\r
+\r
+struct UiLayout {\r
+ UiBool fill;\r
+ UiBool newline;\r
+ char *label;\r
+ UiBool hexpand;\r
+ UiBool vexpand;\r
+ UiBool hfill;\r
+ UiBool vfill;\r
+ UiBool override_defaults;\r
+ int width;\r
+ int colspan;\r
+ int rowspan;\r
+};\r
+\r
+enum UiBoxOrientation {\r
+ UI_BOX_VERTICAL = 0,\r
+ UI_BOX_HORIZONTAL\r
+};\r
+typedef enum UiBoxOrientation UiBoxOrientation;\r
+\r
+enum UiContainerType {\r
+ UI_CONTAINER_GENERIC = 0,\r
+ UI_CONTAINER_TABVIEW\r
+};\r
+typedef enum UiContainerType UiContainerType;\r
+\r
+typedef struct UiContainerPrivate UiContainerPrivate;\r
+\r
+typedef struct UiRect {\r
+ int x;\r
+ int y;\r
+ int width;\r
+ int height;\r
+} UiRect;\r
+\r
+\r
+struct UiContainerPrivate {\r
+ UiContainerX container;\r
+ void (*prepare)(UiContainerPrivate*, UiRect*);\r
+ void (*add)(UiContainerPrivate*, UiRect*, W32Widget*);\r
+ UiContainerType type;\r
+ UiLayout layout;\r
+};\r
+\r
+#endif //CONTAINER_H\r
--- /dev/null
+/*\r
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+\r
+#include "grid.h"\r
+\r
+#include "../../ucx/cx/array_list.h"\r
+#include "../common/context.h"\r
+\r
+UiGridLayout* ui_grid_container(UiObject *obj, HWND control, short padding, short columnspacing, short rowspacing) {\r
+ UiGridLayout *grid = cxZalloc(obj->ctx->allocator, sizeof(UiGridLayout));\r
+ grid->hwnd = control;\r
+ grid->widgets = cxArrayListCreate(obj->ctx->allocator, NULL, sizeof(GridElm), 32);\r
+ grid->padding = padding;\r
+ grid->columnspacing = columnspacing;\r
+ grid->rowspacing = rowspacing;\r
+ return grid;\r
+}\r
+\r
+void ui_grid_add_widget(\r
+ UiGridLayout *grid,\r
+ short x,\r
+ short y,\r
+ W32Widget *widget,\r
+ GridLayoutInfo *layout)\r
+{\r
+ GridElm elm;\r
+ elm.widget = widget;\r
+ elm.x = x;\r
+ elm.y = y;\r
+ elm.layout = *layout;\r
+ cxListAdd(grid->widgets, elm);\r
+}\r
+\r
+void ui_grid_layout(UiGridLayout *grid) {\r
+ // TODO\r
+}\r
--- /dev/null
+/*\r
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.\r
+ *\r
+ * Copyright 2025 Olaf Wintermann. All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions are met:\r
+ *\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ * notice, this list of conditions and the following disclaimer.\r
+ *\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ * notice, this list of conditions and the following disclaimer in the\r
+ * documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+#ifndef GRID_H\r
+#define GRID_H\r
+\r
+#include "container.h"\r
+#include <stdbool.h>\r
+#include <cx/array_list.h>\r
+\r
+typedef struct GridElm {\r
+ W32Widget *widget;\r
+ short x;\r
+ short y;\r
+ GridLayoutInfo layout;\r
+} GridElm;\r
+\r
+typedef struct GridLayoutInfo {\r
+ short margin_left;\r
+ short margin_right;\r
+ short margin_top;\r
+ short margin_bottom;\r
+ short colspan;\r
+ short rowspan;\r
+ short preferred_width;\r
+ short preferred_height;\r
+ bool hexpand;\r
+ bool vexpand;\r
+ bool hfill;\r
+ bool vfill;\r
+} GridLayoutInfo;\r
+\r
+typedef struct UiGridLayout {\r
+ HWND hwnd;\r
+\r
+ short padding;\r
+ short columnspacing;\r
+ short rowspacing;\r
+\r
+ /*\r
+ * list element type: GridElm\r
+ */\r
+ CxList *widgets;\r
+\r
+} UiGridLayout;\r
+\r
+UiGridLayout* ui_grid_container(UiObject *obj, HWND control, short padding, short columnspacing, short rowspacing);\r
+\r
+void ui_grid_add_widget(\r
+ UiGridLayout *grid,\r
+ short x,\r
+ short y,\r
+ W32Widget *widget,\r
+ GridLayoutInfo *layout);\r
+\r
+void ui_grid_layout(UiGridLayout *grid);\r
+\r
+#endif //GRID_H\r
WIN32OBJ = toolkit.obj
WIN32OBJ += window.obj
WIN32OBJ += image.obj
+WIN32OBJ += container.obj
+WIN32OBJ += button.obj
TOOLKITOBJS += $(WIN32OBJ:%=$(WIN32_OBJPRE)%)
TOOLKITSOURCE += $(WIN32OBJ:%.obj=win32/%.c)
static HINSTANCE hInstance;
-static const wchar_t *mainWindowClass = L"UiMainWindow";
+static const char *mainWindowClass = "UiMainWindow";
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch(uMsg) {
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- if(!RegisterClassEx(&wc)) {
+ if(!RegisterClassExA(&wc)) {
MessageBox(NULL, "RegisterClassEx failed", "Error", MB_ICONERROR);
exit(-1);
}
UiObject *obj = uic_object_new_toplevel();
obj->window = window_data;
- HWND hwnd = CreateWindowEx(
+ HWND hwnd = CreateWindowExA(
0,
- L"UiMainWindow",
- "Test",
+ "UiMainWindow",
+ title,
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT,
CW_USEDEFAULT,