* img: toolkit image object (for example for gtk this would be GdkPixbuf*)
*/
void attachment_set_image(Attachment *attachment, void *img) {
- ui_image_ref(img);
- // TODO: replace this with new toolkit function for setting UiGeneric values
- if(attachment->ui->img->set) {
- attachment->ui->img->set(attachment->ui->img, img, UI_IMAGE_OBJECT_TYPE);
- } else {
- attachment->ui->img->value = img;
- attachment->ui->img->type = UI_IMAGE_OBJECT_TYPE;
- }
+ ui_image_ref(img); // TODO: is this needed?
+ ui_generic_set_image(attachment->ui->img, img);
}
int attachment_set_image_from_data(Attachment *attachment, cxmutstr data) {
#
$(COCOA_OBJPRE)%.o: cocoa/%.m
- $(CC) -o $@ -c -I../ucx -fobjc-arc $(CFLAGS) $(TK_CFLAGS) $<
+ $(CC) -o $@ -c -I../ucx -fobjc-arc $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
$(UI_LIB): $(OBJ)
$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
+$(UI_SHLIB): $(OBJ)
+ $(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
#import "Container.h"
#import <objc/runtime.h>
-UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
+UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
NSButton *button = [[NSButton alloc] init];
- if(args.label) {
- NSString *label = [[NSString alloc] initWithUTF8String:args.label];
+ if(args->label) {
+ NSString *label = [[NSString alloc] initWithUTF8String:args->label];
button.title = label;
}
- if(args.onclick) {
- EventData *event = [[EventData alloc] init:args.onclick userdata:args.onclickdata];
+ if(args->onclick) {
+ EventData *event = [[EventData alloc] init:args->onclick userdata:args->onclickdata];
event.obj = obj;
button.target = event;
button.action = @selector(handleEvent:);
*value = (int)state;
}
-UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs args, enum NSButtonType type) {
+UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs *args, enum NSButtonType type) {
NSButton *button = [[NSButton alloc] init];
[button setButtonType:type];
//[button setAllowsMixedState:YES];
- if(args.label) {
- NSString *label = [[NSString alloc] initWithUTF8String:args.label];
+ if(args->label) {
+ NSString *label = [[NSString alloc] initWithUTF8String:args->label];
button.title = label;
}
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *i = var->value;
i->obj = (__bridge void*)button;
i->set = ui_togglebutton_set;
}
- if(args.onchange) {
- EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata];
+ if(args->onchange) {
+ EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
event.get_eventdata = togglebutton_eventdata;
event.obj = obj;
event.var = var;
button.state = state;
}
-UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
return togglebutton_create(obj, args, NSButtonTypePushOnPushOff);
}
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
return togglebutton_create(obj, args, NSButtonTypeSwitch);
}
*value = (int)state;
}
-UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
NSSwitch *button = [[NSSwitch alloc] init];
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *i = var->value;
i->obj = (__bridge void*)button;
i->set = ui_switch_set;
}
- if(args.onchange) {
- EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata];
+ if(args->onchange) {
+ EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
event.get_eventdata = switch_eventdata;
event.obj = obj;
event.var = var;
}
}
-UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) {
UiRadioButton *button = [[UiRadioButton alloc] init];
- if(args.label) {
- button.title = [[NSString alloc] initWithUTF8String:args.label];
+ if(args->label) {
+ button.title = [[NSString alloc] initWithUTF8String:args->label];
}
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
button.var = var;
NSMutableArray *buttons = nil;
if(var) {
objc_setAssociatedObject(button, "radiogroup", buttons, OBJC_ASSOCIATION_RETAIN);
}
- if(args.onchange || var) {
- EventData *event = [[EventData alloc] init:args.onchange userdata:args.onchangedata];
+ if(args->onchange || var) {
+ EventData *event = [[EventData alloc] init:args->onchange userdata:args->onchangedata];
event.get_eventdata = radiobutton_eventdata;
event.obj = obj;
event.var = var;
};
#define UI_INIT_LAYOUT(args) (UiLayout) {\
- .fill = args.fill, \
- .hexpand = args.hexpand, \
- .vexpand = args.vexpand, \
- .hfill = args.hfill, \
- .vfill = args.vfill, \
- .colspan = args.colspan, \
- .rowspan = args.rowspan }
+ .fill = args->fill, \
+ .hexpand = args->hexpand, \
+ .vexpand = args->vexpand, \
+ .hfill = args->hfill, \
+ .vfill = args->vfill, \
+ .colspan = args->colspan, \
+ .rowspan = args->rowspan }
@protocol Container
/* -------------------- public container functions --------------------- */
-static UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, NSUserInterfaceLayoutOrientation orientation) {
- BoxContainer *box = [[BoxContainer alloc] init:orientation spacing:args.spacing];
+static UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, NSUserInterfaceLayoutOrientation orientation) {
+ BoxContainer *box = [[BoxContainer alloc] init:orientation spacing:args->spacing];
box.translatesAutoresizingMaskIntoConstraints = false;
// add box to the parent
return (__bridge void*)box;
}
-UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box_create(obj, args, NSUserInterfaceLayoutOrientationVertical);
}
-UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box_create(obj, args, NSUserInterfaceLayoutOrientationHorizontal);
}
-UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
GridLayout *grid = [[GridLayout alloc] init];
grid.translatesAutoresizingMaskIntoConstraints = false;
#import "Container.h"
#import <objc/runtime.h>
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
NSTextView *textview = [[NSTextView alloc] init];
textview.autoresizingMask = NSViewWidthSizable;
textview.minSize = NSMakeSize(0, 0);
ui_container_add(obj, scrollview, &layout, TRUE);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_TEXT);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT);
if(var) {
UiText *text = var->value;
text->obj = (__bridge void*)textview;
/* -------------------------- TextField -------------------------- */
-static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs args, BOOL password, BOOL frameless) {
+static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs *args, BOOL password, BOOL frameless) {
NSTextField *textfield;
if(password) {
textfield = [[NSSecureTextField alloc] init];
UiLayout layout = UI_INIT_LAYOUT(args);
ui_container_add(obj, textfield, &layout, FALSE);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
if(var) {
UiString *s = var->value;
if(s->value.ptr) {
return (__bridge void*)textfield;
}
-UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) {
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
return textfield_create(obj, args, FALSE, FALSE);
}
-UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
return textfield_create(obj, args, FALSE, TRUE);
}
-UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
return textfield_create(obj, args, TRUE, FALSE);
}
--- /dev/null
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2025 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "args.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include "../ui/container.h"
+
+/* ---------------------------- UiMenuItemArgs ---------------------------- */
+
+UiMenuItemArgs* ui_menuitem_args_new(void) {
+ UiMenuItemArgs *args = malloc(sizeof(UiMenuItemArgs));
+ memset(args, 0, sizeof(UiMenuItemArgs));
+ return args;
+}
+
+void ui_menuitem_args_set_label(UiMenuItemArgs *args, const char *label) {
+ args->label = strdup(label);
+}
+
+void ui_menuitem_args_set_stockid(UiMenuItemArgs *args, const char *stockid) {
+ args->stockid = strdup(stockid);
+}
+
+void ui_menuitem_args_set_icon(UiMenuItemArgs *args, const char *icon) {
+ args->icon = strdup(icon);
+}
+
+void ui_menuitem_args_set_onclick(UiMenuItemArgs *args, ui_callback callback) {
+ args->onclick = callback;
+}
+
+void ui_menuitem_args_set_onclickdata(UiMenuItemArgs *args, void *onclickdata) {
+ args->onclickdata = onclickdata;
+}
+
+void ui_menuitem_args_free(UiMenuItemArgs *args) {
+ free((void*)args->label);
+ free((void*)args->stockid);
+ free((void*)args->icon);
+ free(args);
+}
+
+
+/* ---------------------------- UiMenuToggleItemArgs ---------------------------- */
+
+UiMenuToggleItemArgs* ui_menutoggleitem_args_new(void) {
+ UiMenuToggleItemArgs *args = malloc(sizeof(UiMenuToggleItemArgs));
+ memset(args, 0, sizeof(UiMenuToggleItemArgs));
+ return args;
+}
+
+void ui_menutoggleitem_args_set_label(UiMenuToggleItemArgs *args, const char *label) {
+ args->label = strdup(label);
+}
+
+void ui_menutoggleitem_args_set_stockid(UiMenuToggleItemArgs *args, const char *stockid) {
+ args->stockid = strdup(stockid);
+}
+
+void ui_menutoggleitem_args_set_icon(UiMenuToggleItemArgs *args, const char *icon) {
+ args->icon = strdup(icon);
+}
+
+void ui_menutoggleitem_args_set_varname(UiMenuToggleItemArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_menutoggleitem_args_set_onchange(UiMenuToggleItemArgs *args, ui_callback callback) {
+ args->onchange = callback;
+}
+
+void ui_menutoggleitem_args_set_onchangedata(UiMenuToggleItemArgs *args, void *onclickdata) {
+ args->onchangedata = onclickdata;
+}
+
+void ui_menutoggleitem_args_free(UiMenuToggleItemArgs *args) {
+ free((void*)args->label);
+ free((void*)args->stockid);
+ free((void*)args->icon);
+ free((void*)args->varname);
+ free(args);
+}
+
+/* --------------------------- UiMenuItemListArgs --------------------------- */
+
+UiMenuItemListArgs* ui_menuitemlist_args_new(void) {
+ UiMenuItemListArgs *args = malloc(sizeof(UiMenuItemListArgs));
+ memset(args, 0, sizeof(UiMenuItemListArgs));
+ return args;
+}
+
+void ui_menuitemlist_args_set_varname(UiMenuItemListArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_menuitemlist_args_set_getvalue(UiMenuItemListArgs *args, ui_getvaluefunc func) {
+ args->getvalue = func;
+}
+
+void ui_menuitemlist_args_set_onselect(UiMenuItemListArgs *args, ui_callback callback) {
+ args->onselect = callback;
+}
+
+void ui_menuitemlist_args_set_onselectdata(UiMenuItemListArgs *args, void *data){
+ args->onselectdata = data;
+}
+
+void ui_menuitemlist_args_set_addseparator(UiMenuItemListArgs *args, UiBool value) {
+ args->addseparator = value;
+}
+
+void ui_menuitemlist_args_free(UiMenuItemListArgs *args){
+ free((void*)args->varname);
+ free(args);
+}
+
+
+/* ---------------------------- UiContainerArgs ---------------------------- */
+
+UiContainerArgs* ui_container_args_new(void) {
+ UiContainerArgs *args = malloc(sizeof(UiContainerArgs));
+ memset(args, 0, sizeof(UiContainerArgs));
+ return args;
+}
+
+void ui_container_args_set_fill(UiContainerArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+void ui_container_args_set_hexpand(UiContainerArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_container_args_set_vexpand(UiContainerArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_container_args_set_hfill(UiContainerArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_container_args_set_vfill(UiContainerArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_container_args_set_override_defaults(UiContainerArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_container_args_set_colspan(UiContainerArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_container_args_set_rolspan(UiContainerArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_container_args_set_def_hexpand(UiContainerArgs *args, UiBool value) {
+ args->def_hexpand = value;
+}
+
+
+void ui_container_args_set_def_vexpand(UiContainerArgs *args, UiBool value) {
+ args->def_vexpand = value;
+}
+
+
+void ui_container_args_set_def_hfill(UiContainerArgs *args, UiBool value) {
+ args->def_hfill = value;
+}
+
+
+void ui_container_args_set_def_vfill(UiContainerArgs *args, UiBool value) {
+ args->def_vfill = value;
+}
+
+
+void ui_container_args_set_name(UiContainerArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_container_args_set_style_class(UiContainerArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+
+void ui_container_args_set_margin(UiContainerArgs *args, int value) {
+ args->margin = value;
+}
+
+
+void ui_container_args_set_spacing(UiContainerArgs *args, int value) {
+ args->spacing = value;
+}
+
+
+void ui_container_args_set_columnspacing(UiContainerArgs *args, int value) {
+ args->columnspacing = value;
+}
+
+
+void ui_container_args_set_rowspacing(UiContainerArgs *args, int value) {
+ args->rowspacing = value;
+}
+
+
+void ui_container_args_free(UiContainerArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free(args);
+}
+
+
+/* ------------------------------- UiFrameArgs ------------------------------*/
+
+UiFrameArgs* ui_frame_args_new(void) {
+ UiFrameArgs *args = malloc(sizeof(UiFrameArgs));
+ memset(args, 0, sizeof(UiContainerArgs));
+ return args;
+}
+
+
+void ui_frame_args_set_fill(UiFrameArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_frame_args_set_hexpand(UiFrameArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_frame_args_set_vexpand(UiFrameArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_frame_args_set_hfill(UiFrameArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_frame_args_set_vfill(UiFrameArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_frame_args_set_override_defaults(UiFrameArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_frame_args_set_colspan(UiFrameArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_frame_args_set_rolspan(UiFrameArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_frame_args_set_name(UiFrameArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_frame_args_set_style_class(UiFrameArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+
+void ui_frame_args_set_margin(UiFrameArgs *args, int value) {
+ args->margin = value;
+}
+
+
+void ui_frame_args_set_spacing(UiFrameArgs *args, int value) {
+ args->spacing = value;
+}
+
+
+void ui_frame_args_set_columnspacing(UiFrameArgs *args, int value) {
+ args->columnspacing = value;
+}
+
+
+void ui_frame_args_set_rowspacing(UiFrameArgs *args, int value) {
+ args->rowspacing = value;
+}
+
+
+void ui_frame_args_set_expanded(UiFrameArgs *args, UiBool value) {
+ args->isexpanded = value;
+}
+
+
+void ui_frame_args_set_label(UiFrameArgs *args, const char *label) {
+ args->label = strdup(label);
+}
+
+
+void ui_frame_args_free(UiFrameArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->label);
+ free(args);
+}
+
+
+/* ---------------------------- UiButtonArgs -------------------------------*/
+
+UiButtonArgs* ui_button_args_new(void) {
+ UiButtonArgs *args = malloc(sizeof(UiButtonArgs));
+ memset(args, 0, sizeof(UiContainerArgs));
+ return args;
+}
+
+
+void ui_button_args_set_fill(UiButtonArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_button_args_set_hexpand(UiButtonArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_button_args_set_vexpand(UiButtonArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_button_args_set_hfill(UiButtonArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_button_args_set_vfill(UiButtonArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_button_args_set_override_defaults(UiButtonArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_button_args_set_colspan(UiButtonArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_button_args_set_rolspan(UiButtonArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_button_args_set_name(UiButtonArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_button_args_set_style_class(UiButtonArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_button_args_set_label(UiButtonArgs *args, const char *label){
+ args->label = strdup(label);
+}
+
+
+void ui_button_args_set_stockid(UiButtonArgs *args, const char *stockid){
+ args->stockid = strdup(stockid);
+}
+
+
+void ui_button_args_set_icon(UiButtonArgs *args, const char *icon){
+ args->icon = strdup(icon);
+}
+
+
+void ui_button_args_set_labeltype(UiButtonArgs *args, int labeltype){
+ args->labeltype = labeltype;
+}
+
+void ui_button_args_set_onclick(UiButtonArgs *args, ui_callback callback){
+ args->onclick = callback;
+}
+
+
+void ui_button_args_set_onclickdata(UiButtonArgs *args, void *onclickdata){
+ args->onclickdata = onclickdata;
+}
+
+void ui_button_args_set_groups(UiButtonArgs *args, int *groups){
+ // TODO
+}
+
+void ui_button_args_free(UiButtonArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->label);
+ free((void*)args->stockid);
+ free((void*)args->icon);
+ free((void*)args->groups);
+ free(args);
+}
+
+
+/* ------------------------- UiToggleArgs ----------------------------*/
+
+
+UiToggleArgs* ui_toggle_args_new(void) {
+ UiToggleArgs *args = malloc(sizeof(UiToggleArgs));
+ memset(args, 0, sizeof(UiContainerArgs));
+ return args;
+}
+
+
+void ui_toggle_args_set_fill(UiToggleArgs *args, UiBool fill) {
+ args->fill = fill ? UI_ON : UI_OFF;
+}
+
+
+void ui_toggle_args_set_hexpand(UiToggleArgs *args, UiBool value) {
+ args->hexpand = value;
+}
+
+
+void ui_toggle_args_set_vexpand(UiToggleArgs *args, UiBool value) {
+ args->vexpand = value;
+}
+
+
+void ui_toggle_args_set_hfill(UiToggleArgs *args, UiBool value) {
+ args->hfill = value;
+}
+
+
+void ui_toggle_args_set_vfill(UiToggleArgs *args, UiBool value) {
+ args->vfill = value;
+}
+
+
+void ui_toggle_args_set_override_defaults(UiToggleArgs *args, UiBool value) {
+ args->override_defaults = value;
+}
+
+
+void ui_toggle_args_set_colspan(UiToggleArgs *args, int colspan) {
+ args->colspan = colspan;
+}
+
+
+void ui_toggle_args_set_rolspan(UiToggleArgs *args, int rowspan) {
+ args->rowspan = rowspan;
+}
+
+
+void ui_toggle_args_set_name(UiToggleArgs *args, const char *name) {
+ args->name = strdup(name);
+}
+
+
+void ui_toggle_args_set_style_class(UiToggleArgs *args, const char *classname) {
+ args->style_class = strdup(classname);
+}
+
+void ui_toggle_args_set_label(UiToggleArgs *args, const char *label){
+ args->label = strdup(label);
+}
+
+
+void ui_toggle_args_set_stockid(UiToggleArgs *args, const char *stockid){
+ args->stockid = strdup(stockid);
+}
+
+
+void ui_toggle_args_set_icon(UiToggleArgs *args, const char *icon){
+ args->icon = strdup(icon);
+}
+
+
+void ui_toggle_args_set_labeltype(UiToggleArgs *args, int labeltype){
+ args->labeltype = labeltype;
+}
+
+void ui_toggle_args_set_onchange(UiToggleArgs *args, ui_callback callback){
+ args->onchange = callback;
+}
+
+
+void ui_toggle_args_set_onchangedata(UiToggleArgs *args, void *onchangedata){
+ args->onchangedata = onchangedata;
+}
+
+void ui_toggle_args_set_varname(UiToggleArgs *args, const char *varname) {
+ args->varname = strdup(varname);
+}
+
+void ui_toggle_args_set_value(UiToggleArgs *args, UiInteger *value) {
+ args->value = value;
+}
+
+void ui_toggle_args_set_enablegroup(UiToggleArgs *args, int group) {
+ args->enable_group = group;
+}
+
+void ui_toggle_args_set_groups(UiToggleArgs *args, int *groups){
+ // TODO
+}
+
+void ui_toggle_args_free(UiToggleArgs *args) {
+ free((void*)args->name);
+ free((void*)args->style_class);
+ free((void*)args->label);
+ free((void*)args->stockid);
+ free((void*)args->icon);
+ free((void*)args->varname);
+ free((void*)args->groups);
+ free(args);
+}
+
--- /dev/null
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2025 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UIC_ARGS_H
+#define UIC_ARGS_H
+
+#include "../ui/container.h"
+#include "../ui/button.h"
+#include "../ui/menu.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+UIEXPORT UiMenuItemArgs* ui_menuitem_args_new(void);
+UIEXPORT void ui_menuitem_args_set_label(UiMenuItemArgs *args, const char *label);
+UIEXPORT void ui_menuitem_args_set_stockid(UiMenuItemArgs *args, const char *stockid);
+UIEXPORT void ui_menuitem_args_set_icon(UiMenuItemArgs *args, const char *icon);
+UIEXPORT void ui_menuitem_args_set_onclick(UiMenuItemArgs *args, ui_callback callback);
+UIEXPORT void ui_menuitem_args_set_onclickdata(UiMenuItemArgs *args, void *onclickdata);
+UIEXPORT void ui_menuitem_args_free(UiMenuItemArgs *args);
+
+UIEXPORT UiMenuToggleItemArgs* ui_menutoggleitem_args_new(void);
+UIEXPORT void ui_menutoggleitem_args_set_label(UiMenuToggleItemArgs *args, const char *label);
+UIEXPORT void ui_menutoggleitem_args_set_stockid(UiMenuToggleItemArgs *args, const char *stockid);
+UIEXPORT void ui_menutoggleitem_args_set_icon(UiMenuToggleItemArgs *args, const char *icon);
+UIEXPORT void ui_menutoggleitem_args_set_varname(UiMenuToggleItemArgs *args, const char *varname);
+UIEXPORT void ui_menutoggleitem_args_set_onchange(UiMenuToggleItemArgs *args, ui_callback callback);
+UIEXPORT void ui_menutoggleitem_args_set_onchangedata(UiMenuToggleItemArgs *args, void *onclickdata);
+UIEXPORT void ui_menutoggleitem_args_free(UiMenuToggleItemArgs *args);
+
+UIEXPORT UiMenuItemListArgs* ui_menuitemlist_args_new(void);
+UIEXPORT void ui_menuitemlist_args_set_varname(UiMenuItemListArgs *args, const char *varname);
+UIEXPORT void ui_menuitemlist_args_set_getvalue(UiMenuItemListArgs *args, ui_getvaluefunc func);
+UIEXPORT void ui_menuitemlist_args_set_onselect(UiMenuItemListArgs *args, ui_callback callback);
+UIEXPORT void ui_menuitemlist_args_set_onselectdata(UiMenuItemListArgs *args, void *data);
+UIEXPORT void ui_menuitemlist_args_set_addseparator(UiMenuItemListArgs *args, UiBool value);
+UIEXPORT void ui_menuitemlist_args_free(UiMenuItemListArgs *args);
+
+UIEXPORT UiContainerArgs* ui_container_args_new(void);
+UIEXPORT void ui_container_args_set_fill(UiContainerArgs *args, UiBool fill);
+UIEXPORT void ui_container_args_set_hexpand(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_vexpand(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_hfill(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_vfill(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_override_defaults(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_colspan(UiContainerArgs *args, int colspan);
+UIEXPORT void ui_container_args_set_rolspan(UiContainerArgs *args, int rowspan);
+UIEXPORT void ui_container_args_set_def_hexpand(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_def_vexpand(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_def_hfill(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_def_vfill(UiContainerArgs *args, UiBool value);
+UIEXPORT void ui_container_args_set_name(UiContainerArgs *args, const char *name);
+UIEXPORT void ui_container_args_set_style_class(UiContainerArgs *args, const char *classname);
+UIEXPORT void ui_container_args_set_margin(UiContainerArgs *args, int value);
+UIEXPORT void ui_container_args_set_spacing(UiContainerArgs *args, int value);
+UIEXPORT void ui_container_args_set_columnspacing(UiContainerArgs *args, int value);
+UIEXPORT void ui_container_args_set_rowspacing(UiContainerArgs *args, int value);
+UIEXPORT void ui_container_args_free(UiContainerArgs *args);
+
+
+UIEXPORT UiFrameArgs* ui_frame_args_new(void);
+UIEXPORT void ui_frame_args_set_fill(UiFrameArgs *args, UiBool fill);
+UIEXPORT void ui_frame_args_set_hexpand(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_vexpand(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_hfill(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_vfill(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_override_defaults(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_colspan(UiFrameArgs *args, int colspan);
+UIEXPORT void ui_frame_args_set_rolspan(UiFrameArgs *args, int rowspan);
+UIEXPORT void ui_frame_args_set_name(UiFrameArgs *args, const char *name);
+UIEXPORT void ui_frame_args_set_style_class(UiFrameArgs *args, const char *classname);
+UIEXPORT void ui_frame_args_set_margin(UiFrameArgs *args, int value);
+UIEXPORT void ui_frame_args_set_spacing(UiFrameArgs *args, int value);
+UIEXPORT void ui_frame_args_set_columnspacing(UiFrameArgs *args, int value);
+UIEXPORT void ui_frame_args_set_rowspacing(UiFrameArgs *args, int value);
+UIEXPORT void ui_frame_args_set_expanded(UiFrameArgs *args, UiBool value);
+UIEXPORT void ui_frame_args_set_label(UiFrameArgs *args, const char *label);
+UIEXPORT void ui_frame_args_free(UiFrameArgs *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_button_args_set_vexpand(UiButtonArgs *args, UiBool value);
+UIEXPORT void ui_button_args_set_hfill(UiButtonArgs *args, UiBool value);
+UIEXPORT void ui_button_args_set_vfill(UiButtonArgs *args, UiBool value);
+UIEXPORT void ui_button_args_set_override_defaults(UiButtonArgs *args, UiBool value);
+UIEXPORT void ui_button_args_set_colspan(UiButtonArgs *args, int colspan);
+UIEXPORT void ui_button_args_set_rolspan(UiButtonArgs *args, int rowspan);
+UIEXPORT void ui_button_args_set_name(UiButtonArgs *args, const char *name);
+UIEXPORT void ui_button_args_set_style_class(UiButtonArgs *args, const char *classname);
+UIEXPORT void ui_button_args_set_label(UiButtonArgs *args, const char *label);
+UIEXPORT void ui_button_args_set_stockid(UiButtonArgs *args, const char *stockid);
+UIEXPORT void ui_button_args_set_icon(UiButtonArgs *args, const char *icon);
+UIEXPORT void ui_button_args_set_labeltype(UiButtonArgs *args, int labeltype);
+UIEXPORT void ui_button_args_set_onclick(UiButtonArgs *args, ui_callback callback);
+UIEXPORT void ui_button_args_set_onclickdata(UiButtonArgs *args, void *onclickdata);
+UIEXPORT void ui_button_args_set_groups(UiButtonArgs *args, int *groups);
+
+
+UIEXPORT UiToggleArgs* ui_toggle_args_new(void);
+UIEXPORT void ui_toggle_args_set_fill(UiToggleArgs *args, UiBool fill);
+UIEXPORT void ui_toggle_args_set_hexpand(UiToggleArgs *args, UiBool value);
+UIEXPORT void ui_toggle_args_set_vexpand(UiToggleArgs *args, UiBool value);
+UIEXPORT void ui_toggle_args_set_hfill(UiToggleArgs *args, UiBool value);
+UIEXPORT void ui_toggle_args_set_vfill(UiToggleArgs *args, UiBool value);
+UIEXPORT void ui_toggle_args_set_override_defaults(UiToggleArgs *args, UiBool value);
+UIEXPORT void ui_toggle_args_set_colspan(UiToggleArgs *args, int colspan);
+UIEXPORT void ui_toggle_args_set_rolspan(UiToggleArgs *args, int rowspan);
+UIEXPORT void ui_toggle_args_set_name(UiToggleArgs *args, const char *name);
+UIEXPORT void ui_toggle_args_set_style_class(UiToggleArgs *args, const char *classname);
+UIEXPORT void ui_toggle_args_set_label(UiToggleArgs *args, const char *label);
+UIEXPORT void ui_toggle_args_set_stockid(UiToggleArgs *args, const char *stockid);
+UIEXPORT void ui_toggle_args_set_icon(UiToggleArgs *args, const char *icon);
+UIEXPORT void ui_toggle_args_set_labeltype(UiToggleArgs *args, int labeltype);
+UIEXPORT void ui_toggle_args_set_onchange(UiToggleArgs *args, ui_callback callback);
+UIEXPORT void ui_toggle_args_set_onchangedata(UiToggleArgs *args, void *onchangedata);
+UIEXPORT void ui_toggle_args_set_varname(UiToggleArgs *args, const char *varname);
+UIEXPORT void ui_toggle_args_set_value(UiToggleArgs *args, UiInteger *value);
+UIEXPORT void ui_toggle_args_set_enablegroup(UiToggleArgs *args, int group);
+UIEXPORT void ui_toggle_args_set_groups(UiToggleArgs *args, int *groups);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* UIC_ARGS_H */
+
-void ui_menuitem_create(UiMenuItemArgs args) {
+void ui_menuitem_create(UiMenuItemArgs *args) {
UiMenuItem* item = malloc(sizeof(UiMenuItem));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_ITEM;
- item->label = nl_strdup(args.label);
- item->stockid = nl_strdup(args.stockid);
- item->icon = nl_strdup(args.icon);
- item->userdata = args.onclickdata;
- item->callback = args.onclick;
- item->groups = uic_copy_groups(args.groups, &item->ngroups);
+ item->label = nl_strdup(args->label);
+ item->stockid = nl_strdup(args->stockid);
+ item->icon = nl_strdup(args->icon);
+ item->userdata = args->onclickdata;
+ item->callback = args->onclick;
+ item->groups = uic_copy_groups(args->groups, &item->ngroups);
add_item((UiMenuItemI*)item);
}
add_item((UiMenuItemI*)item);
}
-void ui_menu_toggleitem_create(UiMenuToggleItemArgs args) {
+void ui_menu_toggleitem_create(UiMenuToggleItemArgs *args) {
UiMenuCheckItem *item = malloc(sizeof(UiMenuCheckItem));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_CHECK_ITEM;
- item->label = nl_strdup(args.label);
- item->stockid = nl_strdup(args.stockid);
- item->icon = nl_strdup(args.icon);
- item->varname = nl_strdup(args.varname);
- item->userdata = args.onchangedata;
- item->callback = args.onchange;
- item->groups = uic_copy_groups(args.groups, &item->ngroups);
+ item->label = nl_strdup(args->label);
+ item->stockid = nl_strdup(args->stockid);
+ item->icon = nl_strdup(args->icon);
+ item->varname = nl_strdup(args->varname);
+ item->userdata = args->onchangedata;
+ item->callback = args->onchange;
+ item->groups = uic_copy_groups(args->groups, &item->ngroups);
add_item((UiMenuItemI*)item);
}
-void ui_menu_radioitem_create(UiMenuToggleItemArgs args) {
+void ui_menu_radioitem_create(UiMenuToggleItemArgs *args) {
UiMenuCheckItem* item = malloc(sizeof(UiMenuCheckItem));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_RADIO_ITEM;
- item->label = nl_strdup(args.label);
- item->stockid = nl_strdup(args.stockid);
- item->icon = nl_strdup(args.icon);
- item->varname = nl_strdup(args.varname);
- item->userdata = args.onchangedata;
- item->callback = args.onchange;
- item->groups = uic_copy_groups(args.groups, &item->ngroups);
+ item->label = nl_strdup(args->label);
+ item->stockid = nl_strdup(args->stockid);
+ item->icon = nl_strdup(args->icon);
+ item->varname = nl_strdup(args->varname);
+ item->userdata = args->onchangedata;
+ item->callback = args->onchange;
+ item->groups = uic_copy_groups(args->groups, &item->ngroups);
add_item((UiMenuItemI*)item);
}
-void ui_menu_itemlist_create(UiMenuItemListArgs args) {
+void ui_menu_itemlist_create(UiMenuItemListArgs *args) {
UiMenuItemList*item = malloc(sizeof(UiMenuItemList));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_ITEM_LIST;
- item->getvalue = args.getvalue;
- item->callback = args.onselect;
- item->userdata = args.onselectdata;
- item->varname = nl_strdup(args.varname);
- item->addseparator = args.addseparator;
+ item->getvalue = args->getvalue;
+ item->callback = args->onselect;
+ item->userdata = args->onselectdata;
+ item->varname = nl_strdup(args->varname);
+ item->addseparator = args->addseparator;
add_item((UiMenuItemI*)item);
}
-void ui_menu_checkitemlist_create(UiMenuItemListArgs args) {
+void ui_menu_checkitemlist_create(UiMenuItemListArgs *args) {
UiMenuItemList* item = malloc(sizeof(UiMenuItemList));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_CHECKITEM_LIST;
- item->callback = args.onselect;
- item->userdata = args.onselectdata;
- item->varname = nl_strdup(args.varname);
+ item->callback = args->onselect;
+ item->userdata = args->onselectdata;
+ item->varname = nl_strdup(args->varname);
add_item((UiMenuItemI*)item);
}
-void ui_menu_radioitemlist_create(UiMenuItemListArgs args) {
+void ui_menu_radioitemlist_create(UiMenuItemListArgs *args) {
UiMenuItemList* item = malloc(sizeof(UiMenuItemList));
mitem_set_id(&item->item);
item->item.prev = NULL;
item->item.next = NULL;
item->item.type = UI_MENU_RADIOITEM_LIST;
- item->callback = args.onselect;
- item->userdata = args.onselectdata;
- item->varname = nl_strdup(args.varname);
+ item->callback = args->onselect;
+ item->userdata = args->onselectdata;
+ item->varname = nl_strdup(args->varname);
add_item((UiMenuItemI*)item);
}
COMMON_OBJ += document$(OBJ_EXT)
COMMON_OBJ += object$(OBJ_EXT)
COMMON_OBJ += types$(OBJ_EXT)
-COMMON_OBJ += menu$(OBJ_EXT)
COMMON_OBJ += properties$(OBJ_EXT)
COMMON_OBJ += menu$(OBJ_EXT)
COMMON_OBJ += toolbar$(OBJ_EXT)
COMMON_OBJ += ucx_properties$(OBJ_EXT)
COMMON_OBJ += threadpool$(OBJ_EXT)
COMMON_OBJ += condvar$(OBJ_EXT)
+COMMON_OBJ += args$(OBJ_EXT)
TOOLKITOBJS += $(COMMON_OBJ:%=$(COMMON_OBJPRE)uic_%)
TOOLKITSOURCE += $(COMMON_OBJ:%$(OBJ_EXT)=common/%.c)
return str ? strdup(str) : NULL;\r
}\r
\r
-static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs args, size_t *ngroups) {\r
+static UiToolbarItemArgs itemargs_copy(UiToolbarItemArgs *args, size_t *ngroups) {\r
UiToolbarItemArgs newargs;\r
- newargs.label = nl_strdup(args.label);\r
- newargs.stockid = nl_strdup(args.stockid);\r
- newargs.icon = nl_strdup(args.icon);\r
- newargs.onclick = args.onclick;\r
- newargs.onclickdata = args.onclickdata;\r
- newargs.groups = uic_copy_groups(args.groups, ngroups);\r
+ newargs.label = nl_strdup(args->label);\r
+ newargs.stockid = nl_strdup(args->stockid);\r
+ newargs.icon = nl_strdup(args->icon);\r
+ newargs.onclick = args->onclick;\r
+ newargs.onclickdata = args->onclickdata;\r
+ newargs.groups = uic_copy_groups(args->groups, ngroups);\r
return newargs;\r
}\r
\r
-void ui_toolbar_item_create(const char* name, UiToolbarItemArgs args) {\r
+void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args) {\r
UiToolbarItem* item = malloc(sizeof(UiToolbarItem));\r
item->item.type = UI_TOOLBAR_ITEM;\r
item->args = itemargs_copy(args, &item->ngroups);\r
}\r
\r
\r
-static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs args, size_t *ngroups) {\r
+static UiToolbarToggleItemArgs toggleitemargs_copy(UiToolbarToggleItemArgs *args, size_t *ngroups) {\r
UiToolbarToggleItemArgs newargs;\r
- newargs.label = nl_strdup(args.label);\r
- newargs.stockid = nl_strdup(args.stockid);\r
- newargs.icon = nl_strdup(args.icon);\r
- newargs.varname = nl_strdup(args.varname);\r
- newargs.onchange = args.onchange;\r
- newargs.onchangedata = args.onchangedata;\r
- newargs.groups = uic_copy_groups(args.groups, ngroups);\r
+ newargs.label = nl_strdup(args->label);\r
+ newargs.stockid = nl_strdup(args->stockid);\r
+ newargs.icon = nl_strdup(args->icon);\r
+ newargs.varname = nl_strdup(args->varname);\r
+ newargs.onchange = args->onchange;\r
+ newargs.onchangedata = args->onchangedata;\r
+ newargs.groups = uic_copy_groups(args->groups, ngroups);\r
return newargs;\r
}\r
\r
-void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs args) {\r
+void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args) {\r
UiToolbarToggleItem* item = malloc(sizeof(UiToolbarToggleItem));\r
item->item.type = UI_TOOLBAR_TOGGLEITEM;\r
item->args = toggleitemargs_copy(args, &item->ngroups);\r
cxMapPut(toolbar_items, name, item);\r
}\r
\r
-static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs args) {\r
+static UiToolbarMenuArgs menuargs_copy(UiToolbarMenuArgs *args) {\r
UiToolbarMenuArgs newargs;\r
- newargs.label = nl_strdup(args.label);\r
- newargs.stockid = nl_strdup(args.stockid);\r
- newargs.icon = nl_strdup(args.icon);\r
+ newargs.label = nl_strdup(args->label);\r
+ newargs.stockid = nl_strdup(args->stockid);\r
+ newargs.icon = nl_strdup(args->icon);\r
return newargs;\r
}\r
\r
-UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args) {\r
+UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args) {\r
UiToolbarMenuItem* item = malloc(sizeof(UiToolbarMenuItem));\r
item->item.type = UI_TOOLBAR_MENU;\r
memset(&item->menu, 0, sizeof(UiMenu));\r
#include "../ui/tree.h"
#include "types.h"
#include "context.h"
+#include "../ui/image.h"
}
}
+void ui_generic_set_image(UiGeneric *g, void *img) {
+ if(g->set) {
+ g->set(g, img, UI_IMAGE_OBJECT_TYPE);
+ } else {
+ if(g->value) {
+ ui_image_unref(g->value);
+ }
+ ui_image_ref(img);
+ g->value = img;
+ g->type = UI_IMAGE_OBJECT_TYPE;
+ }
+}
+
+void* ui_generic_get_image(UiGeneric *g) {
+ if(g->type) {
+ if(!strcmp(g->type, UI_IMAGE_OBJECT_TYPE)) {
+ return g->value;
+ } else {
+ return NULL;
+ }
+ }
+ return g->value;
+}
+
// private functions
void uic_int_copy(UiInteger *from, UiInteger *to) {
#
$(GTK_OBJPRE)%.o: gtk/%.c
- $(CC) -o $@ -c -I../ucx $(CFLAGS) $(TK_CFLAGS) $<
+ $(CC) -o $@ -c -I../ucx $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
$(UI_LIB): $(OBJ)
$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
-
+
+$(UI_SHLIB): $(OBJ)
+ $(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
return button;
}
-UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs args) {
+UIWIDGET ui_button_create(UiObject *obj, UiButtonArgs *args) {
UiObject* current = uic_current_obj(obj);
- GtkWidget *button = ui_create_button(obj, args.label, args.icon, args.onclick, args.onclickdata, 0, FALSE);
- ui_set_name_and_style(button, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, button, args.groups);
- UI_APPLY_LAYOUT1(current, args);
+ GtkWidget *button = ui_create_button(obj, args->label, args->icon, args->onclick, args->onclickdata, 0, FALSE);
+ 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);
return button;
}
}
}
-static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs args) {
+static UIWIDGET togglebutton_create(UiObject *obj, GtkWidget *widget, UiToggleArgs *args) {
UiObject* current = uic_current_obj(obj);
ui_setup_togglebutton(
obj,
widget,
- args.label,
- args.icon,
- args.varname,
- args.value,
- args.onchange,
- args.onchangedata,
- args.enable_group);
- ui_set_name_and_style(widget, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, widget, args.groups);
+ args->label,
+ args->icon,
+ args->varname,
+ args->value,
+ args->onchange,
+ args->onchangedata,
+ args->enable_group);
+ ui_set_name_and_style(widget, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, widget, args->groups);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, widget, FALSE);
return widget;
}
-UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
return togglebutton_create(obj, gtk_toggle_button_new(), args);
}
}
}
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
UiObject* current = uic_current_obj(obj);
- GtkWidget *widget = gtk_check_button_new_with_label(args.label);
+ GtkWidget *widget = gtk_check_button_new_with_label(args->label);
ui_bind_togglebutton(
obj,
widget,
ui_check_button_get,
ui_check_button_set,
- args.varname,
- args.value,
+ args->varname,
+ args->value,
(ui_toggled_func)ui_checkbox_callback,
- args.onchange,
- args.onchangedata,
+ args->onchange,
+ args->onchangedata,
(ui_toggled_func)ui_checkbox_enable_state,
- args.enable_group);
+ args->enable_group);
- ui_set_name_and_style(widget, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, widget, args.groups);
+ ui_set_name_and_style(widget, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, widget, args->groups);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, widget, FALSE);
return widget;
}
#else
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
return togglebutton_create(obj, gtk_check_button_new(), args);
}
#endif
-UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
#ifdef UI_GTK3
return NULL; // TODO
#else
free(data);
}
-UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
UiObject* current = uic_current_obj(obj);
GSList *rg = NULL;
UiInteger *rgroup;
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER);
UiBool first = FALSE;
if(var) {
}
}
- GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args.label);
- ui_set_name_and_style(rbutton, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, rbutton, args.groups);
+ GtkWidget *rbutton = RADIOBUTTON_NEW(rg, args->label);
+ ui_set_name_and_style(rbutton, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, rbutton, args->groups);
if(rgroup) {
#if GTK_MAJOR_VERSION >= 4
if(rg) {
rbdata);
}
- if(args.onchange) {
+ if(args->onchange) {
UiEventData *event = malloc(sizeof(UiEventData));
event->obj = obj;
- event->userdata = args.onchangedata;
- event->callback = args.onchange;
+ event->userdata = args->onchangedata;
+ event->callback = args->onchange;
event->value = 0;
event->customdata = NULL;
event);
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, rbutton, FALSE);
return rbutton;
return ret;
}
-UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type) {
+UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs *args, UiSubContainerType type) {
UiObject *current = uic_current_obj(obj);
UiContainer *ct = current->container;
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
- 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;
+ 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);
UiObject *newobj = uic_object_new(obj, box);
return widget;
}
-UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box_create(obj, args, UI_CONTAINER_VBOX);
}
-UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box_create(obj, args, UI_CONTAINER_HBOX);
}
return grid;
}
-UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
UiObject* current = uic_current_obj(obj);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
GtkWidget *widget;
- 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);
+ 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);
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->container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
uic_obj_add(obj, newobj);
return widget;
}
-UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args) {
+UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args) {
UiObject* current = uic_current_obj(obj);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
- GtkWidget *frame = gtk_frame_new(args.label);
+ GtkWidget *frame = gtk_frame_new(args->label);
UiObject *newobj = uic_object_new(obj, frame);
- GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+ GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
if(sub) {
FRAME_SET_CHILD(frame, sub);
} else {
return frame;
}
-UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args) {
+UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args) {
UiObject* current = uic_current_obj(obj);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
- GtkWidget *expander = gtk_expander_new(args.label);
- gtk_expander_set_expanded(GTK_EXPANDER(expander), args.isexpanded);
+ GtkWidget *expander = gtk_expander_new(args->label);
+ gtk_expander_set_expanded(GTK_EXPANDER(expander), args->isexpanded);
UiObject *newobj = uic_object_new(obj, expander);
- GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+ GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
if(sub) {
EXPANDER_SET_CHILD(expander, sub);
} else {
}
-UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) {
+UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) {
UiObject* current = uic_current_obj(obj);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
GtkWidget *sw = SCROLLEDWINDOW_NEW();
- ui_set_name_and_style(sw, args.name, args.style_class);
- GtkWidget *widget = ui_box_set_margin(sw, args.margin);
+ 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);
UiObject *newobj = uic_object_new(obj, sw);
- GtkWidget *sub = ui_subcontainer_create(args.subcontainer, newobj, args.spacing, args.columnspacing, args.rowspacing, args.margin);
+ GtkWidget *sub = ui_subcontainer_create(args->subcontainer, newobj, args->spacing, args->columnspacing, args->rowspacing, args->margin);
if(sub) {
SCROLLEDWINDOW_SET_CHILD(sw, sub);
} else {
return g_object_get_data(G_OBJECT(tabview), "ui_tabview");
}
+static void tabview_switch_page(
+ GtkNotebook *self,
+ GtkWidget *page,
+ guint page_num,
+ gpointer userdata)
+{
+ UiGtkTabView *tabview = userdata;
+ if(!tabview->onchange) {
+ return;
+ }
+
+ UiEvent event;
+ event.obj = tabview->obj;
+ event.window = event.obj->window;
+ event.document = event.obj->ctx->document;
+ event.set = ui_get_setop();
+ event.eventdata = NULL;
+ event.intval = page_num;
+
+ tabview->onchange(&event, tabview->onchange);
+}
+
+#if GTK_CHECK_VERSION(3, 10, 0)
+
+static void tabview_stack_changed(
+ GObject *object,
+ GParamSpec *pspec,
+ UiGtkTabView *tabview)
+{
+ if(!tabview->onchange) {
+ return;
+ }
+
+ UiEvent event;
+ event.obj = tabview->obj;
+ event.window = event.obj->window;
+ event.document = event.obj->ctx->document;
+ event.set = ui_get_setop();
+ event.eventdata = NULL;
+ event.intval = 0;
+
+ tabview->onchange(&event, tabview->onchange);
+}
+
+#endif
+
typedef int64_t(*ui_tabview_get_func)(UiInteger*);
typedef void (*ui_tabview_set_func)(UiInteger*, int64_t);
-UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
+UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs *args) {
UiGtkTabView *data = malloc(sizeof(UiGtkTabView));
- data->margin = args.margin;
- data->spacing = args.spacing;
- data->columnspacing = args.columnspacing;
- data->rowspacing = args.rowspacing;
+ memset(data, 0, sizeof(UiGtkTabView));
+ data->margin = args->margin;
+ data->spacing = args->spacing;
+ data->columnspacing = args->columnspacing;
+ data->rowspacing = args->rowspacing;
ui_tabview_get_func getfunc = NULL;
ui_tabview_set_func setfunc = NULL;
GtkWidget *widget = NULL;
GtkWidget *data_widget = NULL;
- switch(args.tabview) {
+ switch(args->tabview) {
case UI_TABVIEW_DOC: {
// TODO
break;
GtkWidget *sidebar = gtk_stack_sidebar_new();
BOX_ADD(widget, sidebar);
GtkWidget *stack = gtk_stack_new();
+ g_signal_connect(stack, "notify::visible-child", G_CALLBACK(tabview_stack_changed), data);
gtk_stack_set_transition_type (GTK_STACK(stack), GTK_STACK_TRANSITION_TYPE_SLIDE_UP_DOWN);
gtk_stack_sidebar_set_stack(GTK_STACK_SIDEBAR(sidebar), GTK_STACK(stack));
BOX_ADD_EXPAND(widget, stack);
case UI_TABVIEW_INVISIBLE: /* fall through */
case UI_TABVIEW_NAVIGATION_TOP2: {
widget = gtk_notebook_new();
+ g_signal_connect(
+ widget,
+ "switch-page",
+ G_CALLBACK(tabview_switch_page),
+ data);
data_widget = widget;
data->select_tab = ui_notebook_tab_select;
data->remove_tab = ui_notebook_tab_remove;
data->add_tab = ui_notebook_tab_add;
getfunc = ui_notebook_get;
setfunc = ui_notebook_set;
- if(args.tabview == UI_TABVIEW_INVISIBLE) {
+ if(args->tabview == UI_TABVIEW_INVISIBLE) {
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(widget), FALSE);
gtk_notebook_set_show_border(GTK_NOTEBOOK(widget), FALSE);
}
}
UiObject* current = uic_current_obj(obj);
- if(args.value || args.varname) {
- UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ if(args->value || args->varname) {
+ UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER);
UiInteger *i = var->value;
i->get = getfunc;
i->set = setfunc;
g_object_set_data(G_OBJECT(widget), "ui_tabview", data);
data->widget = data_widget;
- data->subcontainer = args.subcontainer;
+ data->subcontainer = args->subcontainer;
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, widget, TRUE);
UiObject *newobj = uic_object_new(obj, widget);
hb_set_part(obj, 1);
}
-UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_fallback_create(UiObject *obj, UiHeaderbarArgs *args) {
UiObject *current = uic_current_obj(obj);
UiContainer *ct = current->container;
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
- GtkWidget *box = ui_gtk_hbox_new(args.alt_spacing);
- ui_set_name_and_style(box, args.name, args.style_class);
+ 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);
UiObject *newobj = uic_object_new(obj, box);
#if GTK_CHECK_VERSION(3, 10, 0)
-UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
GtkWidget *headerbar = g_object_get_data(G_OBJECT(obj->widget), "ui_headerbar");
if(!headerbar) {
return ui_headerbar_fallback_create(obj, args);
#else
-UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
return ui_headerbar_fallback_create(obj, args);
}
/* -------------------- Sidebar -------------------- */
#ifdef UI_LIBADWAITA
-UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) {
+UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
GtkWidget *sidebar_toolbar_view = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar");
if(!sidebar_toolbar_view) {
fprintf(stderr, "Error: window is not configured for sidebar\n");
return NULL;
}
- GtkWidget *box = ui_gtk_vbox_new(args.spacing);
- ui_box_set_margin(box, args.margin);
+ GtkWidget *box = ui_gtk_vbox_new(args->spacing);
+ ui_box_set_margin(box, args->margin);
adw_toolbar_view_set_content(ADW_TOOLBAR_VIEW(sidebar_toolbar_view), box);
UiObject *newobj = uic_object_new(obj, box);
return box;
}
#else
-UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) {
+UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args) {
GtkWidget *sidebar_vbox = g_object_get_data(G_OBJECT(obj->widget), "ui_sidebar");
- GtkWidget *box = ui_gtk_vbox_new(args.spacing);
- ui_box_set_margin(box, args.margin);
+ GtkWidget *box = ui_gtk_vbox_new(args->spacing);
+ ui_box_set_margin(box, args->margin);
BOX_ADD_EXPAND(sidebar_vbox, box);
UiObject *newobj = uic_object_new(obj, box);
-static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs args) {
+static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSplitPaneArgs *args) {
UiObject* current = uic_current_obj(obj);
GtkWidget *pane0 = create_paned(orientation);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, pane0, TRUE);
- int max = args.max_panes == 0 ? 2 : args.max_panes;
+ int max = args->max_panes == 0 ? 2 : args->max_panes;
UiObject *newobj = uic_object_new(obj, pane0);
- newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args.initial_position);
+ newobj->container = ui_splitpane_container(obj, pane0, orientation, max, args->initial_position);
uic_obj_add(obj, newobj);
g_object_set_data(G_OBJECT(pane0), "ui_splitpane", newobj->container);
return pane0;
}
-UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs args) {
+UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
return splitpane_create(obj, UI_HORIZONTAL, args);
}
-UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs args) {
+UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args) {
return splitpane_create(obj, UI_VERTICAL, args);
}
free(container);
}
-UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs args) {
+UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args) {
UiObject *current = uic_current_obj(obj);
UiContainer *ct = current->container;
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
- 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;
+ 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);
UiGtkItemListContainer *container = malloc(sizeof(UiGtkItemListContainer));
container->parent = obj;
container->widget = box;
- container->container = ui_box_container(current, box, args.container);
- container->create_ui = args.create_ui;
- container->userdata = args.userdata;
- container->subcontainer = args.subcontainer;
+ container->container = ui_box_container(current, box, args->container);
+ container->create_ui = args->create_ui;
+ container->userdata = args->userdata;
+ container->subcontainer = args->subcontainer;
container->current_items = cxHashMapCreateSimple(CX_STORE_POINTERS);
container->current_items->collection.advanced_destructor = remove_item;
container->current_items->collection.destructor_data = container;
- container->margin = args.sub_margin;
- container->spacing = args.sub_spacing;
- container->columnspacing = args.sub_columnspacing;
- container->rowspacing = args.sub_rowspacing;
+ container->margin = args->sub_margin;
+ container->spacing = args->sub_spacing;
+ container->columnspacing = args->sub_columnspacing;
+ container->rowspacing = args->sub_rowspacing;
container->remove_items = TRUE;
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_LIST);
if(var) {
UiList *list = var->value;
list->obj = container;
int spacing;
int columnspacing;
int rowspacing;
+ ui_callback onchange;
+ void *onchangedata;
} UiGtkTabView;
void ui_frame_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill);
GtkWidget* ui_box_set_margin(GtkWidget *box, int margin);
-UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType type);
+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);
#endif
}
-UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
+UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs *args) {
UiObject* current = uic_current_obj(obj);
const char *css_class = NULL;
char *markup = NULL;
- if(args.label) {
+ if(args->label) {
#if GTK_MAJOR_VERSION < 3
- switch(args.style) {
+ switch(args->style) {
case UI_LABEL_STYLE_DEFAULT: break;
case UI_LABEL_STYLE_TITLE: {
- cxmutstr m = cx_asprintf("<b>%s</b>", args.label);
+ cxmutstr m = cx_asprintf("<b>%s</b>", args->label);
markup = m.ptr;
- args.label = NULL;
+ args->label = NULL;
}
case UI_LABEL_STYLE_SUBTITLE: {
break;
}
}
# else
- switch(args.style) {
+ switch(args->style) {
case UI_LABEL_STYLE_DEFAULT: break;
case UI_LABEL_STYLE_TITLE: {
css_class = "ui_label_title";
}
- GtkWidget *widget = gtk_label_new(args.label);
+ GtkWidget *widget = gtk_label_new(args->label);
if(markup) {
gtk_label_set_markup(GTK_LABEL(widget), markup);
free(markup);
WIDGET_ADD_CSS_CLASS(widget, css_class);
}
- switch(args.align) {
+ switch(args->align) {
case UI_ALIGN_DEFAULT: break;
case UI_ALIGN_LEFT: set_alignment(widget, 0, .5); break;
case UI_ALIGN_RIGHT: set_alignment(widget, 1, .5); break;
}
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
if(var) {
UiString* value = (UiString*)var->value;
value->obj = widget;
value->set = ui_label_set;
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, widget, FALSE);
return widget;
}
-UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) {
- args.align = UI_ALIGN_LEFT;
+UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) {
+ args->align = UI_ALIGN_LEFT;
return ui_label_create(obj, args);
}
-UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) {
- args.align = UI_ALIGN_RIGHT;
+UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) {
+ args->align = UI_ALIGN_RIGHT;
return ui_label_create(obj, args);
}
double max;
} UiProgressBarRange;
-UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
+UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) {
UiObject* current = uic_current_obj(obj);
GtkWidget *progressbar = gtk_progress_bar_new();
- if(args.max > args.min) {
+ if(args->max > args->min) {
UiProgressBarRange *range = malloc(sizeof(UiProgressBarRange));
- range->min = args.min;
- range->max = args.max;
+ range->min = args->min;
+ range->max = args->max;
g_signal_connect(
progressbar,
"destroy",
}
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_DOUBLE);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_DOUBLE);
if(var && var->value) {
UiDouble *value = var->value;
value->get = ui_progressbar_get;
ui_progressbar_set(value, value->value);
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, progressbar, FALSE);
return progressbar;
/* ------------------------- progress spinner ------------------------- */
-UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) {
+UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args) {
UiObject* current = uic_current_obj(obj);
GtkWidget *spinner = gtk_spinner_new();
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var && var->value) {
UiInteger *value = var->value;
value->get = ui_spinner_get;
ui_spinner_set(value, value->value);
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, spinner, FALSE);
return spinner;
#include "entry.h"
-UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
+UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) {
double min = 0;
double max = 1000;
UiObject* current = uic_current_obj(obj);
UiVar *var = NULL;
- if(args.varname) {
- var = uic_get_var(obj->ctx, args.varname);
+ if(args->varname) {
+ var = uic_get_var(obj->ctx, args->varname);
}
if(!var) {
- if(args.intvalue) {
- var = uic_widget_var(obj->ctx, current->ctx, args.intvalue, NULL, UI_VAR_INTEGER);
- } else if(args.doublevalue) {
- var = uic_widget_var(obj->ctx, current->ctx, args.doublevalue, NULL, UI_VAR_DOUBLE);
- } else if(args.rangevalue) {
- var = uic_widget_var(obj->ctx, current->ctx, args.rangevalue, NULL, UI_VAR_RANGE);
+ if(args->intvalue) {
+ var = uic_widget_var(obj->ctx, current->ctx, args->intvalue, NULL, UI_VAR_INTEGER);
+ } else if(args->doublevalue) {
+ var = uic_widget_var(obj->ctx, current->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE);
+ } else if(args->rangevalue) {
+ var = uic_widget_var(obj->ctx, current->ctx, args->rangevalue, NULL, UI_VAR_RANGE);
}
}
min = r->min;
max = r->max;
}
- if(args.step == 0) {
- args.step = 1;
+ if(args->step == 0) {
+ args->step = 1;
}
#ifdef UI_GTK2LEGACY
if(min == max) {
max = min + 1;
}
#endif
- GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args.step);
- ui_set_name_and_style(spin, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, spin, args.groups);
- gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args.digits);
+ GtkWidget *spin = gtk_spin_button_new_with_range(min, max, args->step);
+ ui_set_name_and_style(spin, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, spin, args->groups);
+ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), args->digits);
UiObserver **obs = NULL;
if(var) {
double value = 0;
event->obj = obj;
event->var = var;
event->observers = obs;
- event->callback = args.onchange;
- event->userdata = args.onchangedata;
+ event->callback = args->onchange;
+ event->userdata = args->onchangedata;
g_signal_connect(
spin,
G_CALLBACK(ui_destroy_vardata),
event);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, spin, FALSE);
return spin;
#endif
-UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
+UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args) {
UiObject *current = uic_current_obj(obj);
GtkWidget *drawingarea = gtk_drawing_area_new();
widget = eventbox;
#endif
- if(args.scrollarea) {
+ if(args->scrollarea) {
toplevel = SCROLLEDWINDOW_NEW();
SCROLLEDWINDOW_SET_CHILD(toplevel, widget);
- args.adjustwidgetsize = TRUE;
+ args->adjustwidgetsize = TRUE;
} else {
toplevel = widget;
}
UiImageViewer *imgviewer = malloc(sizeof(UiImageViewer));
memset(imgviewer, 0, sizeof(UiImageViewer));
imgviewer->obj = obj;
- imgviewer->onbuttonpress = args.onbuttonpress;
- imgviewer->onbuttonpressdata = args.onbuttonpressdata;
- imgviewer->onbuttonrelease = args.onbuttonrelease;
- imgviewer->onbuttonreleasedata = args.onbuttonreleasedata;
- if(args.image_padding > 0) {
- imgviewer->padding_left = args.image_padding;
- imgviewer->padding_right = args.image_padding;
- imgviewer->padding_top = args.image_padding;
- imgviewer->padding_bottom = args.image_padding;
+ imgviewer->onbuttonpress = args->onbuttonpress;
+ imgviewer->onbuttonpressdata = args->onbuttonpressdata;
+ imgviewer->onbuttonrelease = args->onbuttonrelease;
+ imgviewer->onbuttonreleasedata = args->onbuttonreleasedata;
+ if(args->image_padding > 0) {
+ imgviewer->padding_left = args->image_padding;
+ imgviewer->padding_right = args->image_padding;
+ imgviewer->padding_top = args->image_padding;
+ imgviewer->padding_bottom = args->image_padding;
} else {
- imgviewer->padding_left = args.image_padding_left;
- imgviewer->padding_right = args.image_padding_right;
- imgviewer->padding_top = args.image_padding_top;
- imgviewer->padding_bottom = args.image_padding_bottom;
+ imgviewer->padding_left = args->image_padding_left;
+ imgviewer->padding_right = args->image_padding_right;
+ imgviewer->padding_top = args->image_padding_top;
+ imgviewer->padding_bottom = args->image_padding_bottom;
}
- imgviewer->adjustwidgetsize = args.adjustwidgetsize;
- imgviewer->autoscale = args.autoscale;
- imgviewer->useradjustable = args.useradjustable;
+ imgviewer->adjustwidgetsize = args->adjustwidgetsize;
+ imgviewer->autoscale = args->autoscale;
+ imgviewer->useradjustable = args->useradjustable;
imgviewer->zoom_scale = 20;
g_object_set_data_full(G_OBJECT(drawingarea), "uiimageviewer", imgviewer, (GDestroyNotify)imageviewer_destroy);
- UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC);
+ UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_GENERIC);
imgviewer->var = var;
imgviewer->widget = drawingarea;
imgviewer,
NULL);
- if(args.useradjustable) {
+ if(args->useradjustable) {
gtk_widget_set_focusable(drawingarea, TRUE);
}
#endif
- if(args.contextmenu) {
- UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, widget);
+ if(args->contextmenu) {
+ UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, widget);
ui_widget_set_contextmenu(widget, menu);
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, toplevel, TRUE);
return toplevel;
return selection_model;
}
-static UiListView* create_listview(UiObject *obj, UiListArgs args) {
+static UiListView* create_listview(UiObject *obj, UiListArgs *args) {
UiListView *tableview = malloc(sizeof(UiListView));
memset(tableview, 0, sizeof(UiListView));
tableview->obj = obj;
- tableview->model = args.model;
- tableview->onactivate = args.onactivate;
- tableview->onactivatedata = args.onactivatedata;
- tableview->onselection = args.onselection;
- tableview->onselectiondata = args.onselectiondata;
- tableview->ondragstart = args.ondragstart;
- tableview->ondragstartdata = args.ondragstartdata;
- tableview->ondragcomplete = args.ondragcomplete;
- tableview->ondragcompletedata = args.ondragcompletedata;
- tableview->ondrop = args.ondrop;
- tableview->ondropdata = args.ondropsdata;
+ tableview->model = args->model;
+ tableview->onactivate = args->onactivate;
+ tableview->onactivatedata = args->onactivatedata;
+ tableview->onselection = args->onselection;
+ tableview->onselectiondata = args->onselectiondata;
+ tableview->ondragstart = args->ondragstart;
+ tableview->ondragstartdata = args->ondragstartdata;
+ tableview->ondragcomplete = args->ondragcomplete;
+ tableview->ondragcompletedata = args->ondragcompletedata;
+ tableview->ondrop = args->ondrop;
+ tableview->ondropdata = args->ondropsdata;
tableview->selection.count = 0;
tableview->selection.rows = NULL;
return tableview;
}
-UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
// to simplify things and share code with ui_table_create, we also
// use a UiModel for the listview
UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1);
- model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
- args.model = model;
+ model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
+ args->model = model;
GListStore *ls = g_list_store_new(G_TYPE_OBJECT);
UiListView *listview = create_listview(obj, args);
g_signal_connect(factory, "setup", G_CALLBACK(column_factory_setup), listview->columns);
g_signal_connect(factory, "bind", G_CALLBACK(column_factory_bind), listview->columns);
- GtkSelectionModel *selection_model = create_selection_model(listview, ls, args.multiselection);
+ GtkSelectionModel *selection_model = create_selection_model(listview, ls, args->multiselection);
GtkWidget *view = gtk_list_view_new(GTK_SELECTION_MODEL(selection_model), factory);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
// init listview
listview->widget = view;
list->setselection = ui_listview_setselection2;
ui_update_liststore(ls, list);
- } else if (args.static_elements && args.static_nelm > 0) {
- listview_copy_static_elements(listview, args.static_elements, args.static_nelm);
+ } else if (args->static_elements && args->static_nelm > 0) {
+ listview_copy_static_elements(listview, args->static_elements, args->static_nelm);
listview->model->getvalue = ui_strmodel_getvalue; // force strmodel
ui_update_liststore_static(ls, listview->elements, listview->nelm);
}
// event handling
- if(args.onactivate) {
+ if(args->onactivate) {
// columnview and listview can use the same callback function, because
// the first parameter (which is technically a different pointer type)
// is ignored
g_signal_connect(view, "activate", G_CALLBACK(ui_columnview_activate), listview);
}
- if(args.contextmenu) {
- UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view);
+ if(args->contextmenu) {
+ UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view);
ui_widget_set_contextmenu(view, menu);
}
GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, scroll_area, FALSE);
// ct->current should point to view, not scroll_area, to make it possible
return scroll_area;
}
-UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
// to simplify things and share code with ui_tableview_create, we also
// use a UiModel for the listview
UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1);
- model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
- args.model = model;
+ model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
+ args->model = model;
GListStore *ls = g_list_store_new(G_TYPE_OBJECT);
UiListView *listview = create_listview(obj, args);
GtkWidget *view = gtk_drop_down_new(G_LIST_MODEL(ls), NULL);
gtk_drop_down_set_factory(GTK_DROP_DOWN(view), factory);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
// init listview
listview->widget = view;
list->setselection = ui_combobox_setselection;
ui_update_liststore(ls, list);
- } else if (args.static_elements && args.static_nelm > 0) {
- listview_copy_static_elements(listview, args.static_elements, args.static_nelm);
+ } else if (args->static_elements && args->static_nelm > 0) {
+ listview_copy_static_elements(listview, args->static_elements, args->static_nelm);
listview->model->getvalue = ui_strmodel_getvalue; // force strmodel
ui_update_liststore_static(ls, listview->elements, listview->nelm);
}
// event handling
- if(args.onactivate) {
+ if(args->onactivate) {
g_signal_connect(view, "notify::selected", G_CALLBACK(ui_dropdown_notify), listview);
}
// add widget to parent
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, view, FALSE);
return view;
}
gtk_drop_down_set_selected(GTK_DROP_DOWN(dropdown), index);
}
-UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
GListStore *ls = g_list_store_new(G_TYPE_OBJECT);
// and list updates
UiListView *tableview = create_listview(obj, args);
- GtkSelectionModel *selection_model = create_selection_model(tableview, ls, args.multiselection);
+ GtkSelectionModel *selection_model = create_selection_model(tableview, ls, args->multiselection);
GtkWidget *view = gtk_column_view_new(GTK_SELECTION_MODEL(selection_model));
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
// init tableview
tableview->widget = view;
// create columns from UiModel
- UiModel *model = args.model;
+ UiModel *model = args->model;
int columns = model ? model->columns : 0;
tableview->columns = calloc(columns, sizeof(UiColData));
}
// event handling
- if(args.onactivate) {
+ if(args->onactivate) {
g_signal_connect(view, "activate", G_CALLBACK(ui_columnview_activate), tableview);
}
- if(args.contextmenu) {
- UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view);
+ if(args->contextmenu) {
+ UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view);
ui_widget_set_contextmenu(view, menu);
}
GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, scroll_area, FALSE);
// ct->current should point to view, not scroll_area, to make it possible
}
-UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_listview_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
// create treeview
GtkWidget *view = gtk_tree_view_new();
- ui_set_name_and_style(view, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, view, args.groups);
+ ui_set_name_and_style(view, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, view, args->groups);
GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", 0, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
#endif
UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1);
- model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
+ model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
UiList *list = var ? var->value : NULL;
GtkListStore *listmodel = create_list_store(list, model);
// add callback
UiTreeEventData *event = malloc(sizeof(UiTreeEventData));
event->obj = obj;
- event->activate = args.onactivate;
- event->activatedata = args.onactivatedata;
- event->selection = args.onselection;
- event->selectiondata = args.onselectiondata;
+ event->activate = args->onactivate;
+ event->activatedata = args->onactivatedata;
+ event->selection = args->onselection;
+ event->selectiondata = args->onselectiondata;
g_signal_connect(
view,
"destroy",
G_CALLBACK(ui_destroy_userdata),
event);
- if(args.onactivate) {
+ if(args->onactivate) {
g_signal_connect(
view,
"row-activated",
G_CALLBACK(ui_listview_activate_event),
event);
}
- if(args.onselection) {
+ if(args->onselection) {
GtkTreeSelection *selection = gtk_tree_view_get_selection(
GTK_TREE_VIEW(view));
g_signal_connect(
G_CALLBACK(ui_listview_selection_event),
event);
}
- if(args.contextmenu) {
- UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, view);
+ if(args->contextmenu) {
+ UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, view);
ui_widget_set_contextmenu(view, menu);
}
GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, scroll_area, FALSE);
// ct->current should point to view, not scroll_area, to make it possible
gtk_combo_box_set_active(GTK_COMBO_BOX(dropdown), index);
}
-UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_table_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
// create treeview
GtkWidget *view = gtk_tree_view_new();
- UiModel *model = args.model;
+ UiModel *model = args->model;
int columns = model ? model->columns : 0;
int addi = 0;
#endif
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
UiList *list = var ? var->value : NULL;
GtkListStore *listmodel = create_list_store(list, model);
tableview->widget = view;
tableview->var = var;
tableview->model = model;
- tableview->ondragstart = args.ondragstart;
- tableview->ondragstartdata = args.ondragstartdata;
- tableview->ondragcomplete = args.ondragcomplete;
- tableview->ondragcompletedata = args.ondragcompletedata;
- tableview->ondrop = args.ondrop;
- tableview->ondropdata = args.ondropsdata;
+ tableview->ondragstart = args->ondragstart;
+ tableview->ondragstartdata = args->ondragstartdata;
+ tableview->ondragcomplete = args->ondragcomplete;
+ tableview->ondragcompletedata = args->ondragcompletedata;
+ tableview->ondrop = args->ondrop;
+ tableview->ondropdata = args->ondropsdata;
tableview->selection.count = 0;
tableview->selection.rows = NULL;
g_signal_connect(
// add callback
UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData));
event->obj = obj;
- event->activate = args.onactivate;
- event->selection = args.onselection;
- event->activatedata = args.onactivatedata;
- event->selectiondata = args.onselectiondata;
- if(args.onactivate) {
+ event->activate = args->onactivate;
+ event->selection = args->onselection;
+ event->activatedata = args->onactivatedata;
+ event->selectiondata = args->onselectiondata;
+ if(args->onactivate) {
g_signal_connect(
view,
"row-activated",
G_CALLBACK(ui_listview_activate_event),
event);
}
- if(args.onselection) {
+ if(args->onselection) {
GtkTreeSelection *selection = gtk_tree_view_get_selection(
GTK_TREE_VIEW(view));
g_signal_connect(
// TODO: destroy callback
- if(args.ondragstart) {
- ui_listview_add_dnd(tableview, &args);
+ if(args->ondragstart) {
+ ui_listview_add_dnd(tableview, args);
}
- if(args.ondrop) {
- ui_listview_enable_drop(tableview, &args);
+ if(args->ondrop) {
+ ui_listview_enable_drop(tableview, args);
}
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
- if(args.multiselection) {
+ if(args->multiselection) {
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
}
GTK_POLICY_AUTOMATIC); // GTK_POLICY_ALWAYS
SCROLLEDWINDOW_SET_CHILD(scroll_area, view);
- if(args.contextmenu) {
- UIMENU menu = ui_contextmenu_create(args.contextmenu, obj, scroll_area);
+ if(args->contextmenu) {
+ UIMENU menu = ui_contextmenu_create(args->contextmenu, obj, scroll_area);
#if GTK_MAJOR_VERSION >= 4
ui_widget_set_contextmenu(scroll_area, menu);
#else
#endif
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, scroll_area, FALSE);
// ct->current should point to view, not scroll_area, to make it possible
/* --------------------------- ComboBox --------------------------- */
-UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs args) {
+UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs *args) {
UiObject* current = uic_current_obj(obj);
UiModel *model = ui_model(obj->ctx, UI_STRING, "", -1);
- model->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
+ model->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->list, args->varname, UI_VAR_LIST);
- GtkWidget *combobox = ui_create_combobox(obj, model, var, args.static_elements, args.static_nelm, args.onactivate, args.onactivatedata);
- ui_set_name_and_style(combobox, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, combobox, args.groups);
- UI_APPLY_LAYOUT1(current, args);
+ GtkWidget *combobox = ui_create_combobox(obj, model, var, args->static_elements, args->static_nelm, args->onactivate, args->onactivatedata);
+ ui_set_name_and_style(combobox, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, combobox, args->groups);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, combobox, FALSE);
current->container->current = combobox;
return combobox;
cxListAdd(sublists, &uisublist);
}
-UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) {
+UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args) {
UiObject* current = uic_current_obj(obj);
#ifdef UI_GTK3
#else
GtkWidget *listbox = gtk_list_box_new();
#endif
- if(!args.style_class) {
+ if(!args->style_class) {
#if GTK_MAJOR_VERSION >= 4
WIDGET_ADD_CSS_CLASS(listbox, "navigation-sidebar");
#else
GtkWidget *scroll_area = SCROLLEDWINDOW_NEW();
SCROLLEDWINDOW_SET_CHILD(scroll_area, listbox);
- ui_set_name_and_style(listbox, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, listbox, args.groups);
- UI_APPLY_LAYOUT1(current, args);
+ 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);
UiListBox *uilistbox = malloc(sizeof(UiListBox));
uilistbox->obj = obj;
uilistbox->listbox = GTK_LIST_BOX(listbox);
- uilistbox->getvalue = args.getvalue;
- uilistbox->onactivate = args.onactivate;
- uilistbox->onactivatedata = args.onactivatedata;
- uilistbox->onbuttonclick = args.onbuttonclick;
- uilistbox->onbuttonclickdata = args.onbuttonclickdata;
+ uilistbox->getvalue = args->getvalue;
+ uilistbox->onactivate = args->onactivate;
+ uilistbox->onactivatedata = args->onactivatedata;
+ uilistbox->onbuttonclick = args->onbuttonclick;
+ uilistbox->onbuttonclickdata = args->onbuttonclickdata;
uilistbox->sublists = cxArrayListCreateSimple(sizeof(UiListBoxSubList), 4);
uilistbox->sublists->collection.advanced_destructor = (cx_destructor_func2)sublist_destroy;
uilistbox->sublists->collection.destructor_data = obj;
uilistbox->first_row = NULL;
- if(args.sublists) {
+ if(args->sublists) {
// static sublist initalization
- if(args.numsublists == 0 && args.sublists) {
- args.numsublists = INT_MAX;
+ if(args->numsublists == 0 && args->sublists) {
+ args->numsublists = INT_MAX;
}
- for(int i=0;i<args.numsublists;i++) {
- UiSubList sublist = args.sublists[i];
+ for(int i=0;i<args->numsublists;i++) {
+ UiSubList sublist = args->sublists[i];
if(!sublist.varname && !sublist.value) {
break;
}
// fill items
ui_listbox_update(uilistbox, 0, cxListSize(uilistbox->sublists));
} else {
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.dynamic_sublist, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->dynamic_sublist, args->varname, UI_VAR_LIST);
if(var) {
UiList *list = var->value;
list->obj = uilistbox;
G_CALLBACK(ui_destroy_sourcelist),
uilistbox);
- if(args.onactivate) {
+ if(args->onactivate) {
g_signal_connect(
listbox,
"row-activated",
return buf;
}
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
UiObject* current = uic_current_obj(obj);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_TEXT);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_TEXT);
GtkWidget *text_area = gtk_text_view_new();
- ui_set_name_and_style(text_area, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, text_area, args.groups);
+ ui_set_name_and_style(text_area, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, text_area, args->groups);
gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(text_area), GTK_WRAP_WORD_CHAR);
g_signal_connect(
uitext->ctx = obj->ctx;
uitext->var = var;
uitext->last_selection_state = 0;
- uitext->onchange = args.onchange;
- uitext->onchangedata = args.onchangedata;
+ uitext->onchange = args->onchange;
+ uitext->onchangedata = args->onchangedata;
g_object_set_data(G_OBJECT(text_area), "ui_textarea", uitext);
gtk_text_view_set_right_margin(GTK_TEXT_VIEW(text_area), 2);
// add
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, scroll_area, TRUE);
// bind value
-static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs args) {
+static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool password, UiTextFieldArgs *args) {
GtkWidget *textfield = gtk_entry_new();
- ui_set_name_and_style(textfield, args.name, args.style_class);
- ui_set_widget_groups(obj->ctx, textfield, args.groups);
+ ui_set_name_and_style(textfield, args->name, args->style_class);
+ ui_set_widget_groups(obj->ctx, textfield, args->groups);
UiObject* current = uic_current_obj(obj);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
UiTextField *uitext = malloc(sizeof(UiTextField));
uitext->obj = obj;
uitext->var = var;
- uitext->onchange = args.onchange;
- uitext->onchangedata = args.onchangedata;
- uitext->onactivate = args.onactivate;
- uitext->onactivatedata = args.onactivatedata;
+ uitext->onchange = args->onchange;
+ uitext->onchangedata = args->onchangedata;
+ uitext->onactivate = args->onactivate;
+ uitext->onactivatedata = args->onactivatedata;
g_signal_connect(
textfield,
G_CALLBACK(ui_textfield_destroy),
uitext);
- if(args.width > 0) {
+ if(args->width > 0) {
// TODO: gtk4
#if GTK_MAJOR_VERSION <= 3
- gtk_entry_set_width_chars(GTK_ENTRY(textfield), args.width);
+ gtk_entry_set_width_chars(GTK_ENTRY(textfield), args->width);
#endif
}
if(frameless) {
gtk_entry_set_visibility(GTK_ENTRY(textfield), FALSE);
}
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, textfield, FALSE);
if(var) {
value->obj = GTK_ENTRY(textfield);
}
- if(args.onchange || var) {
+ if(args->onchange || var) {
g_signal_connect(
textfield,
"changed",
uitext);
}
- if(args.onactivate) {
+ if(args->onactivate) {
g_signal_connect(
textfield,
"activate",
return textfield;
}
-UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) {
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
return create_textfield(obj, FALSE, FALSE, args);
}
-UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, TRUE, FALSE, args);
}
-UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, FALSE, TRUE, args);
}
return FALSE;
}
-UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
+UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
UiObject* current = uic_current_obj(obj);
UiPathTextField *pathtf = malloc(sizeof(UiPathTextField));
memset(pathtf, 0, sizeof(UiPathTextField));
pathtf->obj = obj;
- pathtf->getpathelm = args.getpathelm;
- pathtf->getpathelmdata = args.getpathelmdata;
- pathtf->onactivate = args.onactivate;
- pathtf->onactivatedata = args.onactivatedata;
- pathtf->ondragcomplete = args.ondragcomplete;
- pathtf->ondragcompletedata = args.ondragcompletedata;
- pathtf->ondragstart = args.ondragstart;
- pathtf->ondragstartdata = args.ondragstartdata;
- pathtf->ondrop = args.ondrop;
- pathtf->ondropdata = args.ondropsdata;
+ pathtf->getpathelm = args->getpathelm;
+ pathtf->getpathelmdata = args->getpathelmdata;
+ pathtf->onactivate = args->onactivate;
+ pathtf->onactivatedata = args->onactivatedata;
+ pathtf->ondragcomplete = args->ondragcomplete;
+ pathtf->ondragcompletedata = args->ondragcompletedata;
+ pathtf->ondragstart = args->ondragstart;
+ pathtf->ondragstartdata = args->ondragstartdata;
+ pathtf->ondrop = args->ondrop;
+ pathtf->ondropdata = args->ondropsdata;
if(!pathtf->getpathelm) {
pathtf->getpathelm = default_pathelm_func;
pathtf->stack = gtk_stack_new();
gtk_widget_set_name(pathtf->stack, "path-textfield-box");
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, pathtf->stack, FALSE);
pathtf->entry_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_stack_set_visible_child(GTK_STACK(pathtf->stack), pathtf->entry_box);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
if (var) {
UiString* value = (UiString*)var->value;
value->obj = pathtf;
return bb;
}
-UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
+UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
UiObject* current = uic_current_obj(obj);
UiPathTextField *pathtf = malloc(sizeof(UiPathTextField));
memset(pathtf, 0, sizeof(UiPathTextField));
pathtf->obj = obj;
- pathtf->getpathelm = args.getpathelm;
- pathtf->getpathelmdata = args.getpathelmdata;
- pathtf->onactivate = args.onactivate;
- pathtf->onactivatedata = args.onactivatedata;
- pathtf->ondragcomplete = args.ondragcomplete;
- pathtf->ondragcompletedata = args.ondragcompletedata;
- pathtf->ondragstart = args.ondragstart;
- pathtf->ondragstartdata = args.ondragstartdata;
- pathtf->ondrop = args.ondrop;
- pathtf->ondropdata = args.ondropsdata;
+ pathtf->getpathelm = args->getpathelm;
+ pathtf->getpathelmdata = args->getpathelmdata;
+ pathtf->onactivate = args->onactivate;
+ pathtf->onactivatedata = args->onactivatedata;
+ pathtf->ondragcomplete = args->ondragcomplete;
+ pathtf->ondragcompletedata = args->ondragcompletedata;
+ pathtf->ondragstart = args->ondragstart;
+ pathtf->ondragstartdata = args->ondragstartdata;
+ pathtf->ondrop = args->ondrop;
+ pathtf->ondropdata = args->ondropsdata;
if(!pathtf->getpathelm) {
pathtf->getpathelm = default_pathelm_func;
G_CALLBACK(ui_path_textfield_destroy),
pathtf);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, eventbox, FALSE);
// hbox as parent for the GtkEntry and GtkButtonBox
G_CALLBACK(ui_path_textfield_key_press),
pathtf);
- UiVar* var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_STRING);
if (var) {
UiString* value = (UiString*)var->value;
value->obj = pathtf;
#ifdef UI_WEBVIEW
-UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) {
+UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args) {
UiObject* current = uic_current_obj(obj);
GtkWidget *webview = webkit_web_view_new();
- ui_set_name_and_style(webview, args.name, args.style_class);
+ ui_set_name_and_style(webview, args->name, args->style_class);
- UiVar *var = uic_widget_var(obj->ctx, current->ctx, args.value, args.varname, UI_VAR_GENERIC);
+ UiVar *var = uic_widget_var(obj->ctx, current->ctx, args->value, args->varname, UI_VAR_GENERIC);
if(var) {
WebViewData *data = malloc(sizeof(WebViewData));
memset(data, 0, sizeof(WebViewData));
}
}
- ui_set_widget_groups(obj->ctx, webview, args.groups);
- UI_APPLY_LAYOUT1(current, args);
+ ui_set_widget_groups(obj->ctx, webview, args->groups);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, webview, FALSE);
return webview;
const char *mimetype,
const char *encoding)
{
+ WebViewData *data0 = g->obj;
+ if(!data0) {
+ return;
+ }
+
WebViewData data;
+ memset(&data, 0, sizeof(WebViewData));
+ data.webview = data0->webview;
data.uri = (char*)uri;
data.content = (char*)content;
data.contentlength = contentlength;
#include "../common/object.h"
-UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) {
+UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) {
UiObject* current = uic_current_obj(obj);
UIWIDGET widget = create_widget(obj, args, userdata);
- UI_APPLY_LAYOUT1(current, args);
+ UI_APPLY_LAYOUT2(current, args);
current->container->add(current->container, widget, FALSE);
return widget;
#
$(MOTIF_OBJPRE)%.o: motif/%.c
- $(CC) -o $@ -c -I../ucx $(CFLAGS) $(TK_CFLAGS) $<
+ $(CC) -o $@ -c -I../ucx $(CFLAGS) $(SHLIB_CFLAGS) $(TK_CFLAGS) $<
$(UI_LIB): $(OBJ)
$(AR) $(ARFLAGS) $(UI_LIB) $(OBJ)
+
+$(UI_SHLIB): $(OBJ)
+ $(CC) -o $(UI_SHLIB) $(LDFLAGS) $(SHLIB_LDFLAGS) $(TK_LDFLAGS) $(OBJ) -L../build/lib -lucx
#include <Xm/XmAll.h>
-UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
+UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
Arg xargs[16];
int n = 0;
Widget parent = ctn->prepare(ctn, xargs, &n);
XmString label = NULL;
- if(args.label) {
- label = XmStringCreateLocalized((char*)args.label);
+ if(args->label) {
+ label = XmStringCreateLocalized((char*)args->label);
XtSetArg(xargs[n], XmNlabelString, label); n++;
}
- char *name = args.name ? (char*)args.name : "button";
+ char *name = args->name ? (char*)args->name : "button";
Widget button = XmCreatePushButton(parent, name, xargs, n);
XtManageChild(button);
ctn->add(ctn, button);
- ui_set_widget_groups(obj->ctx, button, args.groups);
+ ui_set_widget_groups(obj->ctx, button, args->groups);
- if(args.onclick) {
+ if(args->onclick) {
UiEventData *eventdata = malloc(sizeof(UiEventData));
- eventdata->callback = args.onclick;
- eventdata->userdata = args.onclickdata;
+ eventdata->callback = args->onclick;
+ eventdata->userdata = args->onclickdata;
eventdata->obj = obj;
eventdata->value = 0;
XtAddCallback(
event->callback(&e, event->userdata);
}
-UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
Arg xargs[16];
int n = 0;
XtSetArg(xargs[n], XmNindicatorOn, False); n++;
XmString label = NULL;
- if(args.label) {
- label = XmStringCreateLocalized((char*)args.label);
+ if(args->label) {
+ label = XmStringCreateLocalized((char*)args->label);
XtSetArg(xargs[n], XmNlabelString, label); n++;
}
- char *name = args.name ? (char*)args.name : "togglebutton";
+ char *name = args->name ? (char*)args->name : "togglebutton";
Widget button = XmCreateToggleButton(parent, name, xargs, n);
XtManageChild(button);
ctn->add(ctn, button);
- ui_set_widget_groups(obj->ctx, button, args.groups);
+ ui_set_widget_groups(obj->ctx, button, args->groups);
- ui_bind_togglebutton(obj, button, args.varname, args.value, args.onchange, args.onchangedata, args.enable_group);
+ ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_group);
XmStringFree(label);
return button;
}
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
Arg xargs[16];
int n = 0;
Widget parent = ctn->prepare(ctn, xargs, &n);
XmString label = NULL;
- if(args.label) {
- label = XmStringCreateLocalized((char*)args.label);
+ if(args->label) {
+ label = XmStringCreateLocalized((char*)args->label);
XtSetArg(xargs[n], XmNlabelString, label); n++;
}
- char *name = args.name ? (char*)args.name : "button";
+ char *name = args->name ? (char*)args->name : "button";
Widget button = XmCreateToggleButton(parent, name, xargs, n);
XtManageChild(button);
ctn->add(ctn, button);
- ui_set_widget_groups(obj->ctx, button, args.groups);
+ ui_set_widget_groups(obj->ctx, button, args->groups);
- ui_bind_togglebutton(obj, button, args.varname, args.value, args.onchange, args.onchangedata, args.enable_group);
+ ui_bind_togglebutton(obj, button, args->varname, args->value, args->onchange, args->onchangedata, args->enable_group);
XmStringFree(label);
return button;
}
-UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args) {
return ui_checkbox_create(obj, args);
}
event);
}
-UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) {
Arg xargs[16];
int n = 0;
Widget parent = ctn->prepare(ctn, xargs, &n);
XtSetArg(xargs[n], XmNindicatorType, XmONE_OF_MANY_ROUND); n++;
XmString label = NULL;
- if(args.label) {
- label = XmStringCreateLocalized((char*)args.label);
+ if(args->label) {
+ label = XmStringCreateLocalized((char*)args->label);
XtSetArg(xargs[n], XmNlabelString, label); n++;
}
- char *name = args.name ? (char*)args.name : "button";
+ char *name = args->name ? (char*)args->name : "button";
Widget button = XmCreateToggleButton(parent, name, xargs, n);
XtManageChild(button);
ctn->add(ctn, button);
- ui_set_widget_groups(obj->ctx, button, args.groups);
+ ui_set_widget_groups(obj->ctx, button, args->groups);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *value = var->value;
CxList *rb = value->obj;
// other buttons in the radio button group
UiVarEventData *event = malloc(sizeof(UiVarEventData));
event->obj = obj;
- event->callback = args.onchange;
- event->userdata = args.onchangedata;
+ event->callback = args->onchange;
+ event->userdata = args->onchangedata;
event->observers = NULL;
event->var = var;
- event->value = args.enable_group;
+ event->value = args->enable_group;
XtAddCallback(
button,
XmNvalueChangedCallback,
/* ---------------------------- Box Container ---------------------------- */
-static UIWIDGET box_create(UiObject *obj, UiContainerArgs args, UiBoxOrientation orientation) {
+static UIWIDGET box_create(UiObject *obj, UiContainerArgs *args, UiBoxOrientation orientation) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
int n = 0;
if(orientation == UI_BOX_VERTICAL) {
- //XtSetArg(xargs[n], gridRowSpacing, args.spacing); n++;
+ //XtSetArg(xargs[n], gridRowSpacing, args->spacing); n++;
} else {
- //XtSetArg(xargs[n], gridColumnSpacing, args.spacing); n++;
+ //XtSetArg(xargs[n], gridColumnSpacing, args->spacing); n++;
}
Widget parent = ctn->prepare(ctn, xargs, &n);
- Widget grid = XtCreateManagedWidget(args.name ? args.name : "boxcontainer", gridClass, parent, xargs, n);
+ Widget grid = XtCreateManagedWidget(args->name ? args->name : "boxcontainer", gridClass, parent, xargs, n);
ctn->add(ctn, grid);
UiContainerX *container = ui_box_container(obj, grid, orientation);
}
// public
-UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
return box_create(obj, args, UI_BOX_VERTICAL);
}
// public
-UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
return box_create(obj, args, UI_BOX_HORIZONTAL);
}
/* ---------------------------- Grid Container ---------------------------- */
// public
-UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
Arg xargs[16];
int n = 0;
UI_APPLY_LAYOUT(ctn->layout, args);
Widget parent = ctn->prepare(ctn, xargs, &n);
- XtSetArg(xargs[n], gridMargin, args.margin); n++;
- XtSetArg(xargs[n], gridColumnSpacing, args.columnspacing); n++;
- XtSetArg(xargs[n], gridRowSpacing, args.rowspacing); n++;
- Widget grid = XtCreateManagedWidget(args.name ? args.name : "gridcontainer", gridClass, parent, xargs, n);
+ XtSetArg(xargs[n], gridMargin, args->margin); n++;
+ XtSetArg(xargs[n], gridColumnSpacing, args->columnspacing); n++;
+ XtSetArg(xargs[n], gridRowSpacing, args->rowspacing); n++;
+ Widget grid = XtCreateManagedWidget(args->name ? args->name : "gridcontainer", gridClass, parent, xargs, n);
ctn->add(ctn, grid);
- UiContainerX *container = ui_grid_container(obj, grid, args.def_hexpand, args.def_vexpand, args.def_hfill, args.def_vfill);
+ UiContainerX *container = ui_grid_container(obj, grid, args->def_hexpand, args->def_vexpand, args->def_hfill, args->def_vfill);
uic_object_push_container(obj, container);
return grid;
}
}
-UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) {
+UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) {
Arg xargs[16];
int n = 0;
// - content (Frame)
UiMotifTabView *tabview = malloc(sizeof(UiMotifTabView));
memset(tabview, 0, sizeof(UiMotifTabView));
- char *name = args.name ? (char*)args.name : "tabview";
+ char *name = args->name ? (char*)args->name : "tabview";
XtSetArg(xargs[n], XmNuserData, tabview); n++;
Widget parent = ctn->prepare(ctn, xargs, &n);
Widget form = XmCreateForm(parent, name, xargs, n);
tabview->form = form;
tabview->tabbar = tabbar;
tabview->content = content;
- tabview->tabview = args.tabview;
- tabview->subcontainer = args.subcontainer;
+ tabview->tabview = args->tabview;
+ tabview->subcontainer = args->subcontainer;
tabview->select = ui_motif_tabview_select;
tabview->add = ui_motif_tabview_add_tab;
tabview->remove = ui_motif_tabview_remove;
ct->container.add = ui_tabview_container_add;
ct->tabview = tabview;
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *i = var->value;
i->obj = tabview;
}
- Widget child = ui_vbox_create(obj, (UiContainerArgs) { 0 });
+ Widget child = ui_vbox_create(obj, &(UiContainerArgs) { 0 });
if(tabview->current) {
XtUnmanageChild(child);
} else {
return (UiContainerX*)ctn;
}
-UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs args) {
+UIWIDGET ui_scrolledwindow_create(UiObject* obj, UiFrameArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
#endif
#define UI_APPLY_LAYOUT(layout, args) \
- layout.fill = args.fill; \
- layout.hexpand = args.hexpand; \
- layout.vexpand = args.vexpand; \
- layout.hfill = args.hfill; \
- layout.vfill = args.vfill; \
- layout.override_defaults = args.override_defaults; \
- layout.colspan = args.colspan; \
- layout.rowspan = args.rowspan
+ layout.fill = args->fill; \
+ layout.hexpand = args->hexpand; \
+ layout.vexpand = args->vexpand; \
+ layout.hfill = args->hfill; \
+ layout.vfill = args->vfill; \
+ layout.override_defaults = args->override_defaults; \
+ layout.colspan = args->colspan; \
+ layout.rowspan = args->rowspan
typedef enum UiBoxOrientation UiBoxOrientation;
#include "Grid.h"
-static UIWIDGET label_create(UiObject *obj, UiLabelArgs args, int align) {
+static UIWIDGET label_create(UiObject *obj, UiLabelArgs *args, int align) {
Arg xargs[16];
int n = 0;
XtSetArg(xargs[n], XmNalignment, align); n++;
XmString label = NULL;
- if(args.label) {
- label = XmStringCreateLocalized((char*)args.label);
+ if(args->label) {
+ label = XmStringCreateLocalized((char*)args->label);
XtSetArg(xargs[n], XmNlabelString, label); n++;
}
- char *name = args.name ? (char*)args.name : "label";
+ char *name = args->name ? (char*)args->name : "label";
Widget w = XmCreateLabel(parent, name, xargs, n);
XtManageChild(w);
ctn->add(ctn, w);
return w;
}
-UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) {
+UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) {
return label_create(obj, args, XmALIGNMENT_CENTER);
}
-UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) {
+UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) {
return label_create(obj, args, XmALIGNMENT_BEGINNING);
}
-UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) {
+UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) {
return label_create(obj, args, XmALIGNMENT_END);
}
XFillRectangle(dp, w, pb->gc, 0, 0, valueW, widget->core.height);
}
-UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
+UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args) {
Arg xargs[16];
int n = 0;
Widget parent = ctn->prepare(ctn, xargs, &n);
- char *name = args.name ? (char*)args.name : "progressbar";
+ char *name = args->name ? (char*)args->name : "progressbar";
Widget frame = XmCreateFrame(parent, name, xargs, n);
// create a button and get some informations about the height, shadow, highlight, ....
Widget drawingArea = XmCreateDrawingArea(frame, "progressbar_drawingarea", xargs, n);
XtManageChild(drawingArea);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_DOUBLE);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_DOUBLE);
UiProgressBar *progressbarData = malloc(sizeof(UiProgressBar));
progressbarData->widget = drawingArea;
- progressbarData->min = args.min;
- progressbarData->max = args.max == 0 ? 100 : args.max;
+ progressbarData->min = args->min;
+ progressbarData->max = args->max == 0 ? 100 : args->max;
progressbarData->value = 50;
progressbarData->var = var;
progressbarData->color = highlightColor;
}
-UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) {
+UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args) {
Arg xargs[16];
int n = 0;
XtSetArg(xargs[n], XmNalignment, XmALIGNMENT_END); n++;
XtSetArg(xargs[n], gridMinWidth, 40); n++;
- char *name = args.name ? (char*)args.name : "progresss_spinner";
+ char *name = args->name ? (char*)args->name : "progresss_spinner";
Widget w = XmCreateLabel(parent, name, xargs, n);
XtManageChild(w);
ctn->add(ctn, w);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *value = var->value;
value->obj = w;
#include "list.h"
#include "../common/object.h"
-UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args) {
Arg xargs[16];
int n = 0;
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- if(args.multiselection) {
+ if(args->multiselection) {
XtSetArg(xargs[n], XmNselectionPolicy, XmEXTENDED_SELECT); n++;
} else {
XtSetArg(xargs[n], XmNselectionPolicy, XmSINGLE_SELECT); n++;
}
- char *name = args.name ? (char*)args.name : "listview";
+ char *name = args->name ? (char*)args->name : "listview";
Widget parent = ctn->prepare(ctn, xargs, &n);
Widget widget = XmCreateScrolledList(parent, name, xargs, n);
XtManageChild(widget);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
UiListView *listview = malloc(sizeof(UiListView));
memset(listview, 0, sizeof(UiListView));
listview->obj = obj;
listview->widget = widget;
- listview->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
+ listview->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
listview->var = var;
- listview->onactivate = args.onactivate;
- listview->onactivatedata = args.onactivatedata;
- listview->onselection = args.onselection;
- listview->onselectiondata = args.onselectiondata;
+ listview->onactivate = args->onactivate;
+ listview->onactivatedata = args->onactivatedata;
+ listview->onselection = args->onselection;
+ listview->onselectiondata = args->onselectiondata;
if(var) {
UiList *list = var->value;
}
}
-UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs *args) {
Arg xargs[16];
int n = 0;
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- char *name = args.name ? (char*)args.name : "dropdown";
+ char *name = args->name ? (char*)args->name : "dropdown";
Widget parent = ctn->prepare(ctn, xargs, &n);
Widget widget = XmCreateDropDownList(parent, name, xargs, n);
XtManageChild(widget);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
UiListView *listview = malloc(sizeof(UiListView));
memset(listview, 0, sizeof(UiListView));
listview->obj = obj;
listview->widget = widget;
- listview->getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
+ listview->getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
listview->var = var;
- listview->onactivate = args.onactivate;
- listview->onactivatedata = args.onactivatedata;
- listview->onselection = args.onselection;
- listview->onselectiondata = args.onselectiondata;
+ listview->onactivate = args->onactivate;
+ listview->onactivatedata = args->onactivatedata;
+ listview->onselection = args->onselection;
+ listview->onselectiondata = args->onselectiondata;
if(var) {
UiList *list = var->value;
/* ------------------------------ Text Area ------------------------------ */
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
Arg xargs[16];
int n = 0;
UI_APPLY_LAYOUT(ctn->layout, args);
Widget parent = ctn->prepare(ctn, xargs, &n);
- char *name = args.name ? (char*)args.name : "textarea";
+ char *name = args->name ? (char*)args->name : "textarea";
XtSetArg(xargs[n], XmNwidth, 100); n++;
Widget widget = XmCreateScrolledText(parent, name, xargs, n);
XtManageChild(widget);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_TEXT);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_TEXT);
UiTextArea *textarea = malloc(sizeof(UiTextArea));
memset(textarea, 0, sizeof(UiTextArea));
/* ------------------------------ Text Field ------------------------------ */
-static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, int frameless, int password) {
+static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, int frameless, int password) {
Arg xargs[16];
int n = 0;
UI_APPLY_LAYOUT(ctn->layout, args);
Widget parent = ctn->prepare(ctn, xargs, &n);
- char *name = args.name ? (char*)args.name : "textfield";
+ char *name = args->name ? (char*)args->name : "textfield";
Widget textfield = XmCreateTextField(parent, name, xargs, n);
XtManageChild(textfield);
- ui_set_widget_groups(obj->ctx, textfield, args.groups);
+ ui_set_widget_groups(obj->ctx, textfield, args->groups);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
if(var) {
UiString *value = (UiString*)var->value;
value->obj = textfield;
return textfield;
}
-UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) {
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, FALSE, FALSE);
}
-UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, TRUE, FALSE);
}
-UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, FALSE, FALSE);
}
event->callback(&evt, event->userdata);
}
-UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
+UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args) {
Arg xargs[16];
int n = 0;
PathBar *pathbar = CreatePathBar(parent, xargs, n);
- if(!args.getpathelm) {
+ if(!args->getpathelm) {
pathbar->getpathelm= default_pathelm_func;
} else {
- pathbar->getpathelm = args.getpathelm;
- pathbar->getpathelmdata = args.getpathelmdata;
+ pathbar->getpathelm = args->getpathelm;
+ pathbar->getpathelmdata = args->getpathelmdata;
}
XtManageChild(pathbar->widget);
ctn->add(ctn, pathbar->widget);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
if (var) {
UiString* value = (UiString*)var->value;
value->obj = pathbar;
}
}
- if(args.onactivate) {
+ if(args->onactivate) {
UiEventData *eventdata = malloc(sizeof(UiEventData));
- eventdata->callback = args.onactivate;
- eventdata->userdata = args.onactivatedata;
+ eventdata->callback = args->onactivate;
+ eventdata->userdata = args->onactivatedata;
eventdata->obj = obj;
eventdata->value = 0;
#include "../common/object.h"
-UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) {
+UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) {
Arg xargs[64];
int n = 0;
UIEXPORT UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args) {
Arg xargs[64];
int n = 0;
- UiWidgetArgs a = *args;
UiContainerPrivate *ctn = ui_obj_container(obj);
- UI_APPLY_LAYOUT(ctn->layout, a);
+ UI_APPLY_LAYOUT(ctn->layout, args);
- char *name = a.name ? (char*)a.name : "separator";
+ char *name = args->name ? (char*)args->name : "separator";
Widget parent = ctn->prepare(ctn, xargs, &n);
Widget widget = XmCreateSeparator(parent, name, xargs, n);
XtManageChild(widget);
#include "container.h"
#include "toolkit.h"
-UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
+UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- QString str = QString::fromUtf8(args.label);
+ QString str = QString::fromUtf8(args->label);
QPushButton *button = new QPushButton(str);
- if(args.onclick) {
- UiEventWrapper *event = new UiEventWrapper(obj, args.onclick, args.onclickdata);
+ if(args->onclick) {
+ UiEventWrapper *event = new UiEventWrapper(obj, args->onclick, args->onclickdata);
button->connect(button, SIGNAL(clicked()), event, SLOT(slot()));
button->connect(button, SIGNAL(destroyed()), event, SLOT(destroy()));
}
}
}
-UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- QString str = QString::fromUtf8(args.label);
+ QString str = QString::fromUtf8(args->label);
QPushButton *button = new QPushButton(str);
button->setCheckable(true);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
- if(args.onchange) {
- UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+ if(args->onchange) {
+ UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
event->var = var;
event->customdata1 = button;
event->prepare_event = togglebutton_event;
}
-UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- QString str = QString::fromUtf8(args.label);
+ QString str = QString::fromUtf8(args->label);
QCheckBox *checkbox = new QCheckBox(str);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
- if(args.onchange) {
- UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+ if(args->onchange) {
+ UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
event->var = var;
event->customdata1 = checkbox;
event->prepare_event = checkbox_event;
}
}
-UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- QString str = QString::fromUtf8(args.label);
+ QString str = QString::fromUtf8(args->label);
QRadioButton *button = new QRadioButton(str);
button->setAutoExclusive(false);
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_INTEGER);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_INTEGER);
if(var) {
UiInteger *value = (UiInteger*)var->value;
QButtonGroup *buttonGroup = (QButtonGroup*)value->obj;
value->set = ui_radiobutton_set;
}
- UiEventWrapper *event = new UiEventWrapper(obj, args.onchange, args.onchangedata);
+ UiEventWrapper *event = new UiEventWrapper(obj, args->onchange, args->onchangedata);
event->var = var;
event->customdata1 = button;
event->prepare_event = togglebutton_event;
current = widget;
}
-UIWIDGET ui_box(UiObject *obj, UiContainerArgs args, QBoxLayout::Direction dir) {
+UIWIDGET ui_box(UiObject *obj, UiContainerArgs *args, QBoxLayout::Direction dir) {
UiContainerPrivate *ctn = (UiContainerPrivate*)ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
return widget;
}
-UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box(obj, args, QBoxLayout::TopToBottom);
}
-UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args) {
+UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args) {
return ui_box(obj, args, QBoxLayout::LeftToRight);
}
}
}
-UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
+UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args) {
UiContainerPrivate *ctn = (UiContainerPrivate*)ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
ui_container_add(obj, new UiGridContainer(
grid,
- args.margin,
- args.columnspacing,
- args.rowspacing,
- args.def_hexpand,
- args.def_vexpand,
- args.def_hfill,
- args.def_vfill));
+ args->margin,
+ args->columnspacing,
+ args->rowspacing,
+ args->def_hexpand,
+ args->def_vexpand,
+ args->def_hfill,
+ args->def_vfill));
return widget;
}
#include <QSplitter>
#define UI_APPLY_LAYOUT(layout, args) \
- layout.fill = args.fill; \
- layout.hexpand = args.hexpand; \
- layout.vexpand = args.vexpand; \
- layout.hfill = args.hfill; \
- layout.vfill = args.vfill; \
- layout.override_defaults = args.override_defaults; \
- layout.colspan = args.colspan; \
- layout.rowspan = args.rowspan
+ layout.fill = args->fill; \
+ layout.hexpand = args->hexpand; \
+ layout.vexpand = args->vexpand; \
+ layout.hfill = args->hfill; \
+ layout.vfill = args->vfill; \
+ layout.override_defaults = args->override_defaults; \
+ layout.colspan = args->colspan; \
+ layout.rowspan = args->rowspan
#define ui_reset_layout(layout) memset(&(layout), 0, sizeof(UiLayout))
#define ui_lb2bool(b) ((b) == UI_LAYOUT_TRUE ? TRUE : FALSE)
-UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
+UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
bool use_double = false;
UiVar *var = NULL;
- if(args.varname) {
- var = uic_get_var(obj->ctx, args.varname);
+ if(args->varname) {
+ var = uic_get_var(obj->ctx, args->varname);
if(var->type == UI_VAR_DOUBLE) {
use_double = true;
} else if(var->type == UI_VAR_RANGE) {
use_double = true;
} else if(var->type != UI_VAR_INTEGER) {
var = NULL;
- fprintf(stderr, "UI Error: var '%s' has wrong type (must be int/double/range)\n", args.varname);
+ fprintf(stderr, "UI Error: var '%s' has wrong type (must be int/double/range)\n", args->varname);
}
}
if(!var) {
- if(args.intvalue) {
- var = uic_widget_var(obj->ctx, obj->ctx, args.intvalue, NULL, UI_VAR_INTEGER);
- } else if(args.doublevalue) {
- var = uic_widget_var(obj->ctx, obj->ctx, args.doublevalue, NULL, UI_VAR_DOUBLE);
+ if(args->intvalue) {
+ var = uic_widget_var(obj->ctx, obj->ctx, args->intvalue, NULL, UI_VAR_INTEGER);
+ } else if(args->doublevalue) {
+ var = uic_widget_var(obj->ctx, obj->ctx, args->doublevalue, NULL, UI_VAR_DOUBLE);
use_double = true;
- } else if(args.rangevalue) {
- var = uic_widget_var(obj->ctx, obj->ctx, args.rangevalue, NULL, UI_VAR_RANGE);
+ } else if(args->rangevalue) {
+ var = uic_widget_var(obj->ctx, obj->ctx, args->rangevalue, NULL, UI_VAR_RANGE);
use_double = true;
} else {
- if(args.digits > 0) {
+ if(args->digits > 0) {
use_double = true;
}
}
QAbstractSpinBox *widget = nullptr;
if(use_double) {
QDoubleSpinBox *spinbox = new QDoubleSpinBox();
- spinbox->setDecimals(args.digits);
- if(args.step != 0) {
- spinbox->setSingleStep(args.step);
+ spinbox->setDecimals(args->digits);
+ if(args->step != 0) {
+ spinbox->setSingleStep(args->step);
}
widget = spinbox;
} else {
QSpinBox *spinbox = new QSpinBox();
- if(args.step != 0) {
- spinbox->setSingleStep(args.step);
+ if(args->step != 0) {
+ spinbox->setSingleStep(args->step);
}
widget = spinbox;
}
#include "ui/display.h"
-UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) {
+UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
- QString str = QString::fromUtf8(args.label);
+ QString str = QString::fromUtf8(args->label);
QLabel *widget = new QLabel(str);
Qt::AlignmentFlag align = Qt::AlignCenter;
- if(args.align == UI_ALIGN_LEFT) {
+ if(args->align == UI_ALIGN_LEFT) {
align = Qt::AlignLeft;
- } else if(args.align == UI_ALIGN_RIGHT) {
+ } else if(args->align == UI_ALIGN_RIGHT) {
align = Qt::AlignRight;
}
widget->setAlignment(align);
return widget;
}
-UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args) {
- args.align = UI_ALIGN_LEFT;
+UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args) {
+ args->align = UI_ALIGN_LEFT;
return ui_label_create(obj, args);
}
-UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args) {
- args.align = UI_ALIGN_RIGHT;
+UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) {
+ args->align = UI_ALIGN_RIGHT;
return ui_label_create(obj, args);
}
}
-UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
QListView *view = new QListView();
- ui_getvaluefunc getvalue = args.getvalue ? args.getvalue : ui_strmodel_getvalue;
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+ ui_getvaluefunc getvalue = args->getvalue ? args->getvalue : ui_strmodel_getvalue;
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
ListModel *model = new ListModel(obj, view, var, getvalue);
view->setModel(model);
list->obj = model;
}
- model->setActivationCallback(args.onactivate, args.onactivatedata);
- model->setSelectionCallback(args.onselection, args.onselectiondata);
+ model->setActivationCallback(args->onactivate, args->onactivatedata);
+ model->setSelectionCallback(args->onselection, args->onselectiondata);
QItemSelectionModel *s = view->selectionModel();
QObject::connect(
return view;
}
-UIWIDGET ui_table_create(UiObject* obj, UiListArgs args) {
+UIWIDGET ui_table_create(UiObject* obj, UiListArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
QTreeView *view = new QTreeView();
view->setItemsExpandable(false);
view->setRootIsDecorated(false);
- if(args.multiselection) {
+ if(args->multiselection) {
view->setSelectionMode(QAbstractItemView::ExtendedSelection);
}
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.list, args.varname, UI_VAR_LIST);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->list, args->varname, UI_VAR_LIST);
- TableModel *model = new TableModel(obj, view, var, args.model);
+ TableModel *model = new TableModel(obj, view, var, args->model);
view->setModel(model);
if(var) {
list->obj = model;
}
- model->setActivationCallback(args.onactivate, args.onactivatedata);
- model->setSelectionCallback(args.onselection, args.onselectiondata);
+ model->setActivationCallback(args->onactivate, args->onactivatedata);
+ model->setSelectionCallback(args->onselection, args->onselectiondata);
QItemSelectionModel *s = view->selectionModel();
QObject::connect(
MOC_DIR = ../build/ui/qt
OBJECTS_DIR = ../build/ui/qt
+QMAKE_CXXFLAGS += -I../ucx
+
QT += core gui widgets
DEFINES += UI_QT5
return document;
}
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
QTextDocument *document = nullptr;
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
if(var) {
UiText *value = (UiText*)var->value;
/* ------------------------------ TextField ------------------------------ */
-static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, bool password, bool frameless) {
+static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs *args, bool password, bool frameless) {
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
textfield->setEchoMode(QLineEdit::Password);
}
- UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args.value, args.varname, UI_VAR_STRING);
+ UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
if(var) {
UiString *value = (UiString*)var->value;
if(value->value.ptr) {
return textfield;
}
-UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args) {
+UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, false, false);
}
-UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, false, true);
}
-UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args) {
+UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args) {
return create_textfield(obj, args, true, false);
}
#include "container.h"
#include "../common/context.h"
-UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args) {
+UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args) {
UIWIDGET widget = create_widget(obj, args, userdata);
UiContainerPrivate *ctn = ui_obj_container(obj);
UI_APPLY_LAYOUT(ctn->layout, args);
separator->setFrameShadow(QFrame::Sunken);
UiContainerPrivate *ctn = ui_obj_container(obj);
- UI_APPLY_LAYOUT(ctn->layout, (*args));
+ UI_APPLY_LAYOUT(ctn->layout, args);
ctn->add(separator, false);
const int* groups;
} UiToggleArgs;
-#define ui_button(obj, ...) ui_button_create(obj, (UiButtonArgs){ __VA_ARGS__ } )
-#define ui_togglebutton(obj, ...) ui_togglebutton_create(obj, (UiToggleArgs){ __VA_ARGS__ } )
-#define ui_checkbox(obj, ...) ui_checkbox_create(obj, (UiToggleArgs){ __VA_ARGS__ } )
-#define ui_switch(obj, ...) ui_switch_create(obj, (UiToggleArgs){ __VA_ARGS__ } )
-#define ui_radiobutton(obj, ...) ui_radiobutton_create(obj, (UiToggleArgs){ __VA_ARGS__ } )
+#define ui_button(obj, ...) ui_button_create(obj, &(UiButtonArgs){ __VA_ARGS__ } )
+#define ui_togglebutton(obj, ...) ui_togglebutton_create(obj, &(UiToggleArgs){ __VA_ARGS__ } )
+#define ui_checkbox(obj, ...) ui_checkbox_create(obj, &(UiToggleArgs){ __VA_ARGS__ } )
+#define ui_switch(obj, ...) ui_switch_create(obj, &(UiToggleArgs){ __VA_ARGS__ } )
+#define ui_radiobutton(obj, ...) ui_radiobutton_create(obj, &(UiToggleArgs){ __VA_ARGS__ } )
-UIEXPORT UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args);
-UIEXPORT UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args);
-UIEXPORT UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args);
-UIEXPORT UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args);
-UIEXPORT UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args);
+UIEXPORT UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs *args);
+UIEXPORT UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs *args);
+UIEXPORT UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs *args);
+UIEXPORT UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs *args);
+UIEXPORT UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args);
const char *style_class;
UiTabViewType tabview;
+ ui_callback onchange;
+ void *onchangedata;
UiSubContainerType subcontainer;
#define UI_CTN(obj, ctn) for(ctn;ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_vbox(obj, ...) for(ui_vbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_hbox(obj, ...) for(ui_hbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_grid(obj, ...) for(ui_grid_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_frame(obj, ...) for(ui_frame_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_expander(obj, ...) for(ui_expander_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_scrolledwindow(obj, ...) for(ui_scrolledwindow_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_tabview(obj, ...) for(ui_tabview_create(obj, (UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_headerbar(obj, ...) for(ui_headerbar_create(obj, (UiHeaderbarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_sidebar(obj, ...) for(ui_sidebar_create(obj, (UiSidebarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-
-#define ui_vbox0(obj) for(ui_vbox_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_hbox0(obj) for(ui_hbox_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_grid0(obj) for(ui_grid_create(obj, (UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_frame0(obj) for(ui_frame_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_expander0(obj) for(ui_expande_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_scrolledwindow0(obj) for(ui_scrolledwindow_create(obj, (UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_tabview0(obj) for(ui_tabview_create(obj, (UiTabViewArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_headerbar0(obj) for(ui_headerbar_create(obj, (UiHeaderbarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_sidebar0(obj) for(ui_sidebar_create(obj, (UiSidebarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-
-#define ui_vbox_w(obj, w, ...) for(w = ui_vbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_hbox_w(obj, w, ...) for(w = ui_hbox_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_grid_w(obj, w, ...) for(w = ui_grid_create(obj, (UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_tabview_w(obj, w, ...) for(w = ui_tabview_create(obj, (UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_scrolledwindow_w(obj, w, ...) for(w = ui_scrolledwindow_create(obj, (UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-
-#define ui_hsplitpane(obj, ...) for(ui_hsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_vsplitpane(obj, ...) for(ui_vsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_hsplitpane0(obj) for(ui_hsplitpane_create(obj, (UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_vsplitpane0(obj) for(ui_vsplitpane_create(obj, (UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
-
-#define ui_hsplitpane_w(obj, w, ...) for(w = ui_hsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_vsplitpane_w(obj, w, ...) for(w = ui_vsplitpane_create(obj, (UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_vbox(obj, ...) for(ui_vbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_hbox(obj, ...) for(ui_hbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_grid(obj, ...) for(ui_grid_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_frame(obj, ...) for(ui_frame_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_expander(obj, ...) for(ui_expander_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_scrolledwindow(obj, ...) for(ui_scrolledwindow_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_tabview(obj, ...) for(ui_tabview_create(obj, &(UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_headerbar(obj, ...) for(ui_headerbar_create(obj, &(UiHeaderbarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_sidebar(obj, ...) for(ui_sidebar_create(obj, &(UiSidebarArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+
+#define ui_vbox0(obj) for(ui_vbox_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_hbox0(obj) for(ui_hbox_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_grid0(obj) for(ui_grid_create(obj, &(UiContainerArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_frame0(obj) for(ui_frame_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_expander0(obj) for(ui_expande_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_scrolledwindow0(obj) for(ui_scrolledwindow_create(obj, &(UiFrameArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_tabview0(obj) for(ui_tabview_create(obj, &(UiTabViewArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_headerbar0(obj) for(ui_headerbar_create(obj, &(UiHeaderbarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_sidebar0(obj) for(ui_sidebar_create(obj, &(UiSidebarArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+
+#define ui_vbox_w(obj, w, ...) for(w = ui_vbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_hbox_w(obj, w, ...) for(w = ui_hbox_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_grid_w(obj, w, ...) for(w = ui_grid_create(obj, &(UiContainerArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_tabview_w(obj, w, ...) for(w = ui_tabview_create(obj, &(UiTabViewArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_scrolledwindow_w(obj, w, ...) for(w = ui_scrolledwindow_create(obj, &(UiFrameArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+
+#define ui_hsplitpane(obj, ...) for(ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_vsplitpane(obj, ...) for(ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_hsplitpane0(obj) for(ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_vsplitpane0(obj) for(ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ 0 });ui_container_finish(obj);ui_container_begin_close(obj))
+
+#define ui_hsplitpane_w(obj, w, ...) for(w = ui_hsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
+#define ui_vsplitpane_w(obj, w, ...) for(w = ui_vsplitpane_create(obj, &(UiSplitPaneArgs){ __VA_ARGS__ });ui_container_finish(obj);ui_container_begin_close(obj))
#define ui_tab(obj, label) for(ui_tab_create(obj, label);ui_container_finish(obj);ui_container_begin_close(obj))
#define ui_headerbar_center(obj) for(ui_headerbar_center_create(obj);ui_container_finish(obj);ui_container_begin_close(obj))
#define ui_headerbar_end(obj) for(ui_headerbar_end_create(obj);ui_container_finish(obj);ui_container_begin_close(obj))
-#define ui_itemlist(obj, ...) ui_itemlist_create(obj, (UiItemListContainerArgs) { __VA_ARGS__} )
+#define ui_itemlist(obj, ...) ui_itemlist_create(obj, &(UiItemListContainerArgs) { __VA_ARGS__} )
UIEXPORT void ui_end(UiObject *obj); // deprecated
UIEXPORT void ui_end_new(UiObject *obj); // TODO: rename to ui_end
-UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs args);
-UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs args);
-UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args);
-UIEXPORT UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args);
-UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args);
-UIEXPORT UIWIDGET ui_scrolledwindow_create(UiObject *obj, UiFrameArgs args);
-
-UIEXPORT UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args);
+UIEXPORT UIWIDGET ui_vbox_create(UiObject *obj, UiContainerArgs *args);
+UIEXPORT UIWIDGET ui_hbox_create(UiObject *obj, UiContainerArgs *args);
+UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs *args);
+UIEXPORT UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs *args);
+UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs *args);
+UIEXPORT UIWIDGET ui_scrolledwindow_create(UiObject *obj, UiFrameArgs *args);
+
+UIEXPORT UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args);
UIEXPORT void ui_tab_create(UiObject *obj, const char* title);
UIEXPORT void ui_tabview_select(UIWIDGET tabview, int tab);
UIEXPORT void ui_tabview_remove(UIWIDGET tabview, int tab);
UIEXPORT UiObject* ui_tabview_add(UIWIDGET tabview, const char *name, int tab_index);
-UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args);
+UIEXPORT UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args);
UIEXPORT void ui_headerbar_start_create(UiObject *obj);
UIEXPORT void ui_headerbar_center_create(UiObject *obj);
UIEXPORT void ui_headerbar_end_create(UiObject *obj);
-UIEXPORT UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args);
+UIEXPORT UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs *args);
-UIEXPORT UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs args);
+UIEXPORT UIWIDGET ui_itemlist_create(UiObject *obj, UiItemListContainerArgs *args);
-UIEXPORT UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs args);
-UIEXPORT UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs args);
+UIEXPORT UIWIDGET ui_hsplitpane_create(UiObject *obj, UiSplitPaneArgs *args);
+UIEXPORT UIWIDGET ui_vsplitpane_create(UiObject *obj, UiSplitPaneArgs *args);
UIEXPORT void ui_splitpane_set_visible(UIWIDGET splitpane, int child_index, UiBool visible);
if(args.rowspan > 0) ui_layout_rowspan(obj, args.rowspan); \
/*force caller to add ';'*/(void)0
+#define UI_APPLY_LAYOUT2(obj, args) \
+ if(args->fill != UI_DEFAULT) ui_layout_fill(obj, args->fill == UI_ON ? 1 : 0 ); \
+ if(args->hexpand) ui_layout_hexpand(obj, 1); \
+ if(args->vexpand) ui_layout_vexpand(obj, 1); \
+ if(args->hfill) ui_layout_hfill(obj, 1); \
+ if(args->vfill) ui_layout_vfill(obj, 1); \
+ if(args->override_defaults) ui_layout_override_defaults(obj, 1); \
+ if(args->colspan > 0) ui_layout_colspan(obj, args->colspan); \
+ if(args->rowspan > 0) ui_layout_rowspan(obj, args->rowspan); \
+ /*force caller to add ';'*/(void)0
+
#ifdef __cplusplus
}
/* label widgets */
-#define ui_label(obj, ...) ui_label_create(obj, (UiLabelArgs) { __VA_ARGS__ })
-#define ui_llabel(obj, ...) ui_llabel_create(obj, (UiLabelArgs) { __VA_ARGS__ })
-#define ui_rlabel(obj, ...) ui_rlabel_create(obj, (UiLabelArgs) { __VA_ARGS__ })
+#define ui_label(obj, ...) ui_label_create(obj, &(UiLabelArgs) { __VA_ARGS__ })
+#define ui_llabel(obj, ...) ui_llabel_create(obj, &(UiLabelArgs) { __VA_ARGS__ })
+#define ui_rlabel(obj, ...) ui_rlabel_create(obj, &(UiLabelArgs) { __VA_ARGS__ })
-UIEXPORT UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args);
-UIEXPORT UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs args);
-UIEXPORT UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs args);
+UIEXPORT UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args);
+UIEXPORT UIWIDGET ui_llabel_create(UiObject* obj, UiLabelArgs *args);
+UIEXPORT UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args);
UIWIDGET ui_space_deprecated(UiObject *obj);
/* progress bar/spinner */
-#define ui_progressbar(obj, ...) ui_progressbar_create(obj, (UiProgressbarArgs) { __VA_ARGS__ } )
-#define ui_progressspinner(obj, ...) ui_progressspinner_create(obj, (UiProgressbarSpinnerArgs) { __VA_ARGS__ } )
+#define ui_progressbar(obj, ...) ui_progressbar_create(obj, &(UiProgressbarArgs) { __VA_ARGS__ } )
+#define ui_progressspinner(obj, ...) ui_progressspinner_create(obj, &(UiProgressbarSpinnerArgs) { __VA_ARGS__ } )
-UIEXPORT UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args);
-UIEXPORT UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args);
+UIEXPORT UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs *args);
+UIEXPORT UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args);
#ifdef __cplusplus
-UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args);
+UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs *args);
-#define ui_spinner(obj, ...) ui_spinner_create(obj, (UiSpinnerArgs){ __VA_ARGS__ } )
+#define ui_spinner(obj, ...) ui_spinner_create(obj, &(UiSpinnerArgs){ __VA_ARGS__ } )
void ui_spinner_setrange(UIWIDGET spinner, double min, double max);
void ui_spinner_setdigits(UIWIDGET spinner, int digits);
void *onbuttonreleasedata;
} UiImageViewerArgs;
-#define ui_imageviewer(obj, ...) ui_imageviewer_create(obj, (UiImageViewerArgs){ __VA_ARGS__ } )
+#define ui_imageviewer(obj, ...) ui_imageviewer_create(obj, &(UiImageViewerArgs){ __VA_ARGS__ } )
-UIEXPORT UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args);
+UIEXPORT UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs *args);
UIEXPORT UIWIDGET ui_imageviewer_reset(UIWIDGET w);
UIEXPORT UIWIDGET ui_imageviewer_set_autoscale(UIWIDGET w, UiBool set);
#define ui_menu(label) for(ui_menu_create(label);ui_menu_is_open();ui_menu_close())
-#define ui_menuitem(...) ui_menuitem_create((UiMenuItemArgs){ __VA_ARGS__ })
-#define ui_menu_toggleitem(...) ui_menu_toggleitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ })
-#define ui_menu_radioitem(...) ui_menu_radioitem_create((UiMenuToggleItemArgs){ __VA_ARGS__ })
-#define ui_menu_itemlist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS__ } )
-#define ui_menu_togglelist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS} )
-#define ui_menu_radiolist(...) ui_menu_itemlist_create((UiMenuItemListArgs) { __VA_ARGS} )
+#define ui_menuitem(...) ui_menuitem_create(&(UiMenuItemArgs){ __VA_ARGS__ })
+#define ui_menu_toggleitem(...) ui_menu_toggleitem_create(&(UiMenuToggleItemArgs){ __VA_ARGS__ })
+#define ui_menu_radioitem(...) ui_menu_radioitem_create(&(UiMenuToggleItemArgs){ __VA_ARGS__ })
+#define ui_menu_itemlist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS__ } )
+#define ui_menu_togglelist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS} )
+#define ui_menu_radiolist(...) ui_menu_itemlist_create(&(UiMenuItemListArgs) { __VA_ARGS} )
UIEXPORT void ui_menu_create(const char* label);
-UIEXPORT void ui_menuitem_create(UiMenuItemArgs args);
-UIEXPORT void ui_menu_toggleitem_create(UiMenuToggleItemArgs args);
-UIEXPORT void ui_menu_radioitem_create(UiMenuToggleItemArgs args);
+UIEXPORT void ui_menuitem_create(UiMenuItemArgs *args);
+UIEXPORT void ui_menu_toggleitem_create(UiMenuToggleItemArgs *args);
+UIEXPORT void ui_menu_radioitem_create(UiMenuToggleItemArgs *args);
UIEXPORT void ui_menuseparator();
-UIEXPORT void ui_menu_itemlist_create(UiMenuItemListArgs args);
-UIEXPORT void ui_menu_toggleitemlist_create(UiMenuItemListArgs args);
-UIEXPORT void ui_menu_radioitemlist_create(UiMenuItemListArgs args);
+UIEXPORT void ui_menu_itemlist_create(UiMenuItemListArgs *args);
+UIEXPORT void ui_menu_toggleitemlist_create(UiMenuItemListArgs *args);
+UIEXPORT void ui_menu_radioitemlist_create(UiMenuItemListArgs *args);
UIEXPORT void ui_menu_end(void); // TODO: private
void *ondropsdata;
} UiPathTextFieldArgs;
-#define ui_textarea(obj, ...) ui_textarea_create(obj, (UiTextAreaArgs) { __VA_ARGS__ })
+#define ui_textarea(obj, ...) ui_textarea_create(obj, &(UiTextAreaArgs) { __VA_ARGS__ })
-UIEXPORT UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args);
+UIEXPORT UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args);
UIEXPORT UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea);
UIEXPORT void ui_text_undo(UiText *value);
UIEXPORT void ui_text_redo(UiText *value);
-#define ui_textfield(obj, ...) ui_textfield_create(obj, (UiTextFieldArgs) { __VA_ARGS__ })
-#define ui_frameless_textfield(obj, ...) ui_frameless_field_create(obj, (UiTextFieldArgs) { __VA_ARGS__ })
-#define ui_passwordfield(obj, ...) ui_passwordfield_create(obj, (UiTextFieldArgs) { __VA_ARGS__ })
-#define ui_path_textfield(obj, ...) ui_path_textfield_create(obj, (UiPathTextFieldArgs) { __VA_ARGS__ } )
+#define ui_textfield(obj, ...) ui_textfield_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ })
+#define ui_frameless_textfield(obj, ...) ui_frameless_field_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ })
+#define ui_passwordfield(obj, ...) ui_passwordfield_create(obj, &(UiTextFieldArgs) { __VA_ARGS__ })
+#define ui_path_textfield(obj, ...) ui_path_textfield_create(obj, &(UiPathTextFieldArgs) { __VA_ARGS__ } )
-UIEXPORT UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs args);
-UIEXPORT UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs args);
-UIEXPORT UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs args);
+UIEXPORT UIWIDGET ui_textfield_create(UiObject *obj, UiTextFieldArgs *args);
+UIEXPORT UIWIDGET ui_frameless_textfield_create(UiObject* obj, UiTextFieldArgs *args);
+UIEXPORT UIWIDGET ui_passwordfield_create(UiObject* obj, UiTextFieldArgs *args);
-UIEXPORT UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args);
+UIEXPORT UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs *args);
#ifdef __cplusplus
}
UI_TOOLBAR_RIGHT
};
-#define ui_toolbar_item(name, ...) ui_toolbar_item_create(name, (UiToolbarItemArgs){ __VA_ARGS__ } )
-#define ui_toolbar_toggleitem(name, ...) ui_toolbar_toggleitem_create(name, (UiToolbarToggleItemArgs){ __VA_ARGS__ } )
+#define ui_toolbar_item(name, ...) ui_toolbar_item_create(name, &(UiToolbarItemArgs){ __VA_ARGS__ } )
+#define ui_toolbar_toggleitem(name, ...) ui_toolbar_toggleitem_create(name, &(UiToolbarToggleItemArgs){ __VA_ARGS__ } )
-#define ui_toolbar_menu(name, ...) for(ui_toolbar_menu_create(name, (UiToolbarMenuArgs){ __VA_ARGS__ });ui_menu_is_open();ui_menu_close())
-#define ui_toolbar_appmenu() for(ui_toolbar_menu_create(NULL, (UiToolbarMenuArgs){ 0 });ui_menu_is_open();ui_menu_close())
+#define ui_toolbar_menu(name, ...) for(ui_toolbar_menu_create(name, &(UiToolbarMenuArgs){ __VA_ARGS__ });ui_menu_is_open();ui_menu_close())
+#define ui_toolbar_appmenu() for(ui_toolbar_menu_create(NULL, &(UiToolbarMenuArgs){ 0 });ui_menu_is_open();ui_menu_close())
-UIEXPORT void ui_toolbar_item_create(const char* name, UiToolbarItemArgs args);
-UIEXPORT void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs args);
-UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs args);
+UIEXPORT void ui_toolbar_item_create(const char* name, UiToolbarItemArgs *args);
+UIEXPORT void ui_toolbar_toggleitem_create(const char* name, UiToolbarToggleItemArgs *args);
+UIEXPORT void ui_toolbar_menu_create(const char* name, UiToolbarMenuArgs *args);
UIEXPORT void ui_toolbar_add_default(const char *name, enum UiToolbarPos pos);
UIEXPORT char* ui_string_get(UiString *s);
UIEXPORT void ui_text_set(UiText *s, const char* value);
UIEXPORT char* ui_text_get(UiText *s);
+UIEXPORT void ui_generic_set_image(UiGeneric *g, void *img);
+UIEXPORT void* ui_generic_get_image(UiGeneric *g);
UIEXPORT void ui_var_set_int(UiContext *ctx, const char *name, int64_t value);
UIEXPORT int64_t ui_var_get_int(UiContext *ctx, const char *name);
UIEXPORT UiModel* ui_model_copy(UiContext *ctx, UiModel* model);
UIEXPORT void ui_model_free(UiContext *ctx, UiModel *mi);
-#define ui_listview(obj, ...) ui_listview_create(obj, (UiListArgs) { __VA_ARGS__ } )
-#define ui_table(obj, ...) ui_table_create(obj, (UiListArgs) { __VA_ARGS__ } )
-#define ui_combobox(obj, ...) ui_combobox_create(obj, (UiListArgs) { __VA_ARGS__ } )
-#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, (UiListArgs) { __VA_ARGS__ } )
-#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, (UiSourceListArgs) { __VA_ARGS__ } )
+#define ui_listview(obj, ...) ui_listview_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_table(obj, ...) ui_table_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_combobox(obj, ...) ui_combobox_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_breadcrumbbar(obj, ...) ui_breadcrumbbar_create(obj, &(UiListArgs) { __VA_ARGS__ } )
+#define ui_sourcelist(obj, ...) ui_sourcelist_create(obj, &(UiSourceListArgs) { __VA_ARGS__ } )
-UIEXPORT UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args);
-UIEXPORT UIWIDGET ui_table_create(UiObject* obj, UiListArgs args);
-UIEXPORT UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs args);
-UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject* obj, UiListArgs args);
+UIEXPORT UIWIDGET ui_listview_create(UiObject* obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_table_create(UiObject* obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_combobox_create(UiObject* obj, UiListArgs *args);
+UIEXPORT UIWIDGET ui_breadcrumbbar_create(UiObject* obj, UiListArgs *args);
UIEXPORT void ui_listview_select(UIWIDGET listview, int index);
UIEXPORT void ui_combobox_select(UIWIDGET dropdown, int index);
-UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args);
+UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs *args);
#ifdef __cplusplus
const int* groups;
} UiWebviewArgs;
-#define ui_webview(obj, ...) ui_webview_create(obj, (UiWebviewArgs){ __VA_ARGS__ } )
+#define ui_webview(obj, ...) ui_webview_create(obj, &(UiWebviewArgs){ __VA_ARGS__ } )
-UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args);
+UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs *args);
void ui_webview_load_url(UiGeneric *g, const char *url);
} UiWidgetArgs;
#ifdef UI_GTK
-typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata);
#elif defined(UI_QT)
-typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata);
#elif defined(UI_MOTIF)
-typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata, Widget parent, Arg *a, int n);
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata, Widget parent, Arg *a, int n);
#elif defined(UI_COCOA)
-typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+typedef UIWIDGET (*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata);
#elif defined(UI_WINUI)
-typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata);
#elif defined(UI_WIN32)
-typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs args, void *userdata);
+typedef UIWIDGET(*ui_createwidget_func)(UiObject *obj, UiWidgetArgs *args, void *userdata);
#endif
-UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs args);
+UIEXPORT UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widget, void *userdata, UiWidgetArgs *args);
-#define ui_customwidget(obj, create_widget, userdata, ...) ui_customwidget_create(obj, create_widget, userdata, (UiWidgetArgs) { __VA_ARGS__ })
+#define ui_customwidget(obj, create_widget, userdata, ...) ui_customwidget_create(obj, create_widget, userdata, &(UiWidgetArgs) { __VA_ARGS__ })
UIEXPORT UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *args);