]> uap-core.de Git - note.git/commitdiff
simplify attachment_set_image main
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 9 Jun 2025 06:49:20 +0000 (08:49 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 9 Jun 2025 06:49:20 +0000 (08:49 +0200)
52 files changed:
application/attachment.c
ui/cocoa/Makefile
ui/cocoa/button.m
ui/cocoa/container.h
ui/cocoa/container.m
ui/cocoa/text.m
ui/common/args.c [new file with mode: 0644]
ui/common/args.h [new file with mode: 0644]
ui/common/menu.c
ui/common/objs.mk
ui/common/toolbar.c
ui/common/types.c
ui/gtk/Makefile
ui/gtk/button.c
ui/gtk/container.c
ui/gtk/container.h
ui/gtk/display.c
ui/gtk/entry.c
ui/gtk/image.c
ui/gtk/list.c
ui/gtk/text.c
ui/gtk/webview.c
ui/gtk/widget.c
ui/motif/Makefile
ui/motif/button.c
ui/motif/container.c
ui/motif/container.h
ui/motif/label.c
ui/motif/list.c
ui/motif/text.c
ui/motif/widget.c
ui/qt/button.cpp
ui/qt/container.cpp
ui/qt/container.h
ui/qt/entry.cpp
ui/qt/label.cpp
ui/qt/list.cpp
ui/qt/qt5.pro
ui/qt/text.cpp
ui/qt/widget.cpp
ui/ui/button.h
ui/ui/container.h
ui/ui/display.h
ui/ui/entry.h
ui/ui/image.h
ui/ui/menu.h
ui/ui/text.h
ui/ui/toolbar.h
ui/ui/toolkit.h
ui/ui/tree.h
ui/ui/webview.h
ui/ui/widget.h

index f222c212556223701e5a7cb9ccae1b299ebd63d6..c94dfe3b8168e34eb0cc025620a546553d78443b 100644 (file)
@@ -72,14 +72,8 @@ void attachment_create_ui_model(UiContext *ctx, Attachment *attachment, Note *no
  * 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) {
index 08304f42abf98d100bb13b40f2408868e0b0b402..a772b55fbe9b5ff2b8e94fc89eb1e8719a660780 100644 (file)
 #
 
 $(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
index e819fb05ece5eaf3f7b79ef38a7f1d3d9124f892..06793f30cf0fa0dfda8004483ca5757e6599b8eb 100644 (file)
 #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:);
@@ -59,17 +59,17 @@ static void togglebutton_eventdata(id button, UiVar *var, void **eventdata, int
     *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;
@@ -77,8 +77,8 @@ UIWIDGET togglebutton_create(UiObject* obj, UiToggleArgs args, enum NSButtonType
         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;
@@ -113,11 +113,11 @@ void ui_togglebutton_set(UiInteger *i, int64_t value) {
     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);
 }
 
@@ -127,10 +127,10 @@ static void switch_eventdata(id button, UiVar *var, void **eventdata, int *value
     *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;
@@ -138,8 +138,8 @@ UIWIDGET ui_switch_create(UiObject* obj, UiToggleArgs args) {
         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;
@@ -204,14 +204,14 @@ static void radiobutton_eventdata(id button, UiVar *var, void **eventdata, int *
     }
 }
 
-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) {
@@ -227,8 +227,8 @@ UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
         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;
index a024a1830e6b156a9284c226ed69244bccd723a0..b1796b5a31f7f0c3d98751d36ab839e9a87e797f 100644 (file)
@@ -56,13 +56,13 @@ struct UiLayout {
 };
 
 #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
index 99b18c937ed00ab442ad94e49d3311456a072759..6e9b46619e8a27c72a23d3b46b4035475f326e28 100644 (file)
@@ -95,8 +95,8 @@
 
 /* -------------------- 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
@@ -109,15 +109,15 @@ static UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, NSUserInterfa
     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;
     
index 7b9ba6e6d9f808643d922f150f19609b9f462820..1fe0ce379111dc2708d30eb4182ce7b5b3d7bfc7 100644 (file)
@@ -31,7 +31,7 @@
 #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);
@@ -45,7 +45,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
     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;
@@ -137,7 +137,7 @@ void ui_textarea_remove(UiText *text, int begin, int end) {
 
 /* -------------------------- 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];
@@ -152,7 +152,7 @@ static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs args, BOOL passw
     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) {
@@ -169,15 +169,15 @@ static UIWIDGET textfield_create(UiObject *obj, UiTextFieldArgs args, BOOL passw
     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);
 }
 
diff --git a/ui/common/args.c b/ui/common/args.c
new file mode 100644 (file)
index 0000000..f80692a
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+ * 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);
+}
+
diff --git a/ui/common/args.h b/ui/common/args.h
new file mode 100644 (file)
index 0000000..ae74837
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * 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 */
+
index 4b234181a533ebce8d53e504c1abc1371cc26e3b..31f81713e3c6e5a2d2a8afd6244f20ed2dc47f6c 100644 (file)
@@ -125,19 +125,19 @@ UIEXPORT void ui_menu_end(void) {
 
 
 
-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);
 }
@@ -152,79 +152,79 @@ void ui_menuseparator() {
     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);
 }
index bc1b385abe8977a874d0a26749ce68566879aced..586e88d2c079616fbdf93fd200f1459d0f966c27 100644 (file)
@@ -33,13 +33,13 @@ COMMON_OBJ = context$(OBJ_EXT)
 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)
index 0d86f1729c3f186549afc54687d2c8246d6db9c6..199dc41b254bae6381cc8dce8851f98e61f9f291 100644 (file)
@@ -49,18 +49,18 @@ static char* nl_strdup(const char* str) {
     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
@@ -68,34 +68,34 @@ void ui_toolbar_item_create(const char* name, UiToolbarItemArgs args) {
 }\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
index a704b8593f5e18198499207167e44a9035415c6e..b87cc3f6e7fdfc69dff26bb7ac1dad06b2a62dbc 100644 (file)
@@ -36,6 +36,7 @@
 #include "../ui/tree.h"
 #include "types.h"
 #include "context.h"
+#include "../ui/image.h"
 
 
 
@@ -404,6 +405,30 @@ char* ui_text_get(UiText* s) {
     }
 }
 
+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) {
index aba263f0e91884213deb445b8674d2a33d4dcd3d..d1979fb679363275ee0324300dc598bc6a5a4c83 100644 (file)
 #
 
 $(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
index b26a13056e951a3e8c88a13f9546ee396b612fa1..6a95150e84c003516054bcff7ccde4d1bb41d43c 100644 (file)
@@ -96,12 +96,12 @@ GtkWidget* ui_create_button(
     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;
 }
@@ -274,29 +274,29 @@ void ui_bind_togglebutton(
     }
 }
 
-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);
 }
 
@@ -333,39 +333,39 @@ static void ui_checkbox_enable_state(GtkCheckButton *widget, UiEventData *event)
     }
 }
 
-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
@@ -415,13 +415,13 @@ static void destroy_radiobutton(GtkWidget *w, UiRadioButtonData *data) {
     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) {
@@ -432,9 +432,9 @@ UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
         }
     }
     
-    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) {
@@ -476,11 +476,11 @@ UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
                 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;
         
@@ -496,7 +496,7 @@ UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
                 event);
     }
     
-    UI_APPLY_LAYOUT1(current, args);
+    UI_APPLY_LAYOUT2(current, args);
     current->container->add(current->container, rbutton, FALSE);
     
     return rbutton;
index 41c7924c45fec35c37547057e59aa9b53260e6a0..8ee7ee5480d740e43338e24737fefd9528571fb8 100644 (file)
@@ -420,14 +420,14 @@ GtkWidget* ui_box_set_margin(GtkWidget *box, int margin) {
     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);
@@ -437,11 +437,11 @@ UIWIDGET ui_box_create(UiObject *obj, UiContainerArgs args, UiSubContainerType t
     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);
 }
 
@@ -458,30 +458,30 @@ GtkWidget* ui_create_grid_widget(int colspacing, int rowspacing) {
     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 {
@@ -494,14 +494,14 @@ UIWIDGET ui_frame_create(UiObject *obj, UiFrameArgs args) {
     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 {
@@ -515,17 +515,17 @@ UIEXPORT UIWIDGET ui_expander_create(UiObject *obj, UiFrameArgs args) {
 }
 
 
-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 {
@@ -689,22 +689,69 @@ UiGtkTabView* ui_widget_get_tabview_data(UIWIDGET tabview) {
     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;
@@ -715,6 +762,7 @@ UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
             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);
@@ -734,13 +782,18 @@ UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
         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);
             }
@@ -749,8 +802,8 @@ UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
     }
     
     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;
@@ -759,9 +812,9 @@ UIWIDGET ui_tabview_create(UiObject* obj, UiTabViewArgs args) {
     
     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);
@@ -872,13 +925,13 @@ void ui_headerbar_end_create(UiObject *obj) {
     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);
@@ -917,7 +970,7 @@ void ui_headerbar_fallback_container_add(UiContainer *ct, GtkWidget *widget, UiB
 
 #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);
@@ -958,7 +1011,7 @@ void ui_headerbar_container_add(UiContainer *ct, GtkWidget *widget, UiBool fill)
 
 #else
 
-UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs args) {
+UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs *args) {
     return ui_headerbar_fallback_create(obj, args);  
 }
 
@@ -967,15 +1020,15 @@ UIWIDGET ui_headerbar_create(UiObject *obj, UiHeaderbarArgs 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);
@@ -985,11 +1038,11 @@ UIWIDGET ui_sidebar_create(UiObject *obj, UiSidebarArgs args) {
     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);
@@ -1019,18 +1072,18 @@ static GtkWidget* create_paned(UiOrientation orientation) {
 
 
 
-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);
@@ -1038,11 +1091,11 @@ static UIWIDGET splitpane_create(UiObject *obj, UiOrientation orientation, UiSpl
     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);
 }
 
@@ -1187,33 +1240,33 @@ static void destroy_itemlist_container(GtkWidget *w, UiGtkItemListContainer *con
     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;
index b39a3e4f4b485cd5368d98ecd0ceedb0e97ee831..6c254a4b18a6eff45fee4ef9a1a5e579ef13156e 100644 (file)
@@ -122,6 +122,8 @@ typedef struct UiGtkTabView {
     int spacing;
     int columnspacing;
     int rowspacing;
+    ui_callback onchange;
+    void *onchangedata;
 } UiGtkTabView;
 
 
@@ -173,7 +175,7 @@ UiContainer* ui_frame_container(UiObject *obj, GtkWidget *frame);
 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);
index 78ff754a5b28696443ec994d4cd411c55c5cbd1b..617273aaf3daceb9c673398d884442c0dbd7dd95 100644 (file)
@@ -46,19 +46,19 @@ static void set_alignment(GtkWidget *widget, float xalign, float yalign) {
 #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;
@@ -68,7 +68,7 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
                 }
             }
 #       else
-            switch(args.style) {
+            switch(args->style) {
                 case UI_LABEL_STYLE_DEFAULT: break;
                 case UI_LABEL_STYLE_TITLE: {
                     css_class = "ui_label_title";
@@ -87,7 +87,7 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
     }
 
     
-    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);
@@ -97,7 +97,7 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
         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;
@@ -105,7 +105,7 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
     }
     
 
-    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;
@@ -113,19 +113,19 @@ UIWIDGET ui_label_create(UiObject *obj, UiLabelArgs args) {
         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);
 }
 
@@ -174,14 +174,14 @@ typedef struct UiProgressBarRange {
     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",
@@ -191,7 +191,7 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
     }
     
     
-    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;
@@ -200,7 +200,7 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
         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;
@@ -228,12 +228,12 @@ void ui_progressbar_set(UiDouble *d, double value) {
 
 /* ------------------------- 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;
@@ -242,7 +242,7 @@ UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args)
         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;
index 38ebe178406a567c021dce84c48b5e8163ec1ac7..ea02755bf320f8c83aba455d92ad1476087688fe 100644 (file)
 #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);
         }
     }
     
@@ -61,18 +61,18 @@ UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
         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;
@@ -115,8 +115,8 @@ UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
     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,
@@ -129,7 +129,7 @@ UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
             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;
index ea2f6bbaa7d988500c45a8d0dd218b31f4c43024..3a2550d020909bfc35e488666611d852e1ce14c0 100644 (file)
@@ -63,7 +63,7 @@ static gboolean imageviewer_draw(GtkWidget *widget, cairo_t *cr, gpointer userda
 
 #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();
@@ -78,10 +78,10 @@ UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
     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;
     }
@@ -89,29 +89,29 @@ UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
     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;
     
@@ -136,7 +136,7 @@ UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
             imgviewer,
             NULL);
     
-    if(args.useradjustable) {
+    if(args->useradjustable) {
         gtk_widget_set_focusable(drawingarea, TRUE);
     }
     
@@ -182,12 +182,12 @@ UIWIDGET ui_imageviewer_create(UiObject *obj, UiImageViewerArgs args) {
 
 #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;
index 978ab532780fcf7e823a7b11754a6cabeda3d8f8..2b2772c2bca96d77722bebbad9880e717ade2703 100644 (file)
@@ -189,34 +189,34 @@ static GtkSelectionModel* create_selection_model(UiListView *listview, GListStor
     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);
@@ -230,10 +230,10 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs 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;
@@ -256,21 +256,21 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
         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);
     }
     
@@ -282,7 +282,7 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
             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
@@ -292,14 +292,14 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
     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);
@@ -316,7 +316,7 @@ UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs 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;
@@ -339,19 +339,19 @@ UIWIDGET ui_combobox_create(UiObject *obj, UiListArgs args) {
         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;
 }
@@ -365,7 +365,7 @@ void ui_combobox_select(UIWIDGET dropdown, int index) {
     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);
@@ -375,10 +375,10 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     // 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;
@@ -393,7 +393,7 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     
     
     // create columns from UiModel
-    UiModel *model = args.model;
+    UiModel *model = args->model;
     int columns = model ? model->columns : 0;
     
     tableview->columns = calloc(columns, sizeof(UiColData));
@@ -439,11 +439,11 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     }
     
     // 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);
     }
     
@@ -455,7 +455,7 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
             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
@@ -780,13 +780,13 @@ static GtkListStore* create_list_store(UiList *list, UiModel *model) {
 }
 
 
-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);
@@ -803,9 +803,9 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
 #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);
@@ -835,24 +835,24 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
     // 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(
@@ -861,8 +861,8 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
                 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);
     }
     
@@ -875,7 +875,7 @@ UIWIDGET ui_listview_create(UiObject *obj, UiListArgs args) {
             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
@@ -896,13 +896,13 @@ void ui_combobox_select(UIWIDGET dropdown, int index) {
     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;
@@ -959,7 +959,7 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     
 #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);
@@ -977,12 +977,12 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     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(
@@ -1000,18 +1000,18 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     // 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(
@@ -1023,15 +1023,15 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
     // 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);
     }
     
@@ -1043,8 +1043,8 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
             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
@@ -1052,7 +1052,7 @@ UIWIDGET ui_table_create(UiObject *obj, UiListArgs args) {
 #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
@@ -1102,18 +1102,18 @@ void ui_listview_setselection(UiList *list, UiListSelection selection) {
 
 /* --------------------------- 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;
@@ -1758,7 +1758,7 @@ static void add_sublist(UiListBox *uilistbox, CxList *sublists, UiSubList *subli
     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
@@ -1766,7 +1766,7 @@ UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) {
 #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
@@ -1777,31 +1777,31 @@ UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) {
     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;
             }
@@ -1812,7 +1812,7 @@ UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) {
         // 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;
@@ -1834,7 +1834,7 @@ UIEXPORT UIWIDGET ui_sourcelist_create(UiObject *obj, UiSourceListArgs args) {
                 G_CALLBACK(ui_destroy_sourcelist),
                 uilistbox);
     
-    if(args.onactivate) {
+    if(args->onactivate) {
         g_signal_connect(
                 listbox,
                 "row-activated",
index 475543c765bb96281d903212e22dab81185cc04f..3e81342ae638d13d525fd65103e728f9cf94fec9 100644 (file)
@@ -107,13 +107,13 @@ static GtkTextBuffer* create_textbuffer(UiTextArea *textarea) {
     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(
@@ -127,8 +127,8 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
     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);
     
@@ -155,7 +155,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
     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
@@ -592,21 +592,21 @@ void ui_text_redo(UiText *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,
@@ -614,10 +614,10 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
                 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) {
@@ -628,7 +628,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
         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) {
@@ -647,7 +647,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
         value->obj = GTK_ENTRY(textfield);
     }
     
-    if(args.onchange || var) {
+    if(args->onchange || var) {
         g_signal_connect(
                 textfield,
                 "changed",
@@ -655,7 +655,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
                 uitext);
     }
     
-    if(args.onactivate) {
+    if(args->onactivate) {
         g_signal_connect(
                 textfield,
                 "activate",
@@ -666,15 +666,15 @@ static UIWIDGET create_textfield(UiObject *obj, UiBool frameless, UiBool passwor
     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);
 }
 
@@ -915,22 +915,22 @@ static gboolean ui_path_textfield_key_controller(
     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;
@@ -940,7 +940,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
     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);
@@ -973,7 +973,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
     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;
@@ -1076,22 +1076,22 @@ static GtkWidget* create_path_button_box() {
     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;
@@ -1112,7 +1112,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
             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
@@ -1137,7 +1137,7 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
             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;
index 9f3bebb95b63b7a11ac2694e5d93d04687f4e65e..1cd09aad1c139638331e4e922cc3e3f3b4f69114 100644 (file)
 
 #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));
@@ -59,8 +59,8 @@ UIWIDGET ui_webview_create(UiObject *obj, UiWebviewArgs args) {
         }
     }
     
-    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;
@@ -115,7 +115,14 @@ void ui_webview_load_content(
         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;
index 505bca6499eff47839e533897e5f24edf717a224..633b0f9a0e430c17b94092694e90aecc3b1898f0 100644 (file)
 
 #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;
index 3f7c064bce1ed3c6516300e8b6eaa9fa940a4d43..7f7b420c3a41e14b1eaa972e1296b6ee7052370b 100644 (file)
 #
 
 $(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
index 6ca74adf6c2c90de3b5ec68e1f0826d936f80195..b8ede8ba67c6faba261d8a37797708aee7aff6dd 100644 (file)
@@ -41,7 +41,7 @@
 #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;
     
@@ -51,22 +51,22 @@ UIWIDGET ui_button_create(UiObject* obj, UiButtonArgs args) {
     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(
@@ -96,7 +96,7 @@ void ui_push_button_callback(Widget widget, UiEventData *event, XtPointer d) {
     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;
     
@@ -108,25 +108,25 @@ UIWIDGET ui_togglebutton_create(UiObject* obj, UiToggleArgs args) {
     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;
     
@@ -136,25 +136,25 @@ UIWIDGET ui_checkbox_create(UiObject* obj, UiToggleArgs args) {
     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);
 }
 
@@ -343,7 +343,7 @@ void ui_bind_radiobutton(UiObject *obj, Widget rbutton, UiInteger *value, const
             event);
 }
 
-UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
+UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs *args) {
     Arg xargs[16];
     int n = 0;
     
@@ -353,19 +353,19 @@ UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
     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;
@@ -396,11 +396,11 @@ UIWIDGET ui_radiobutton_create(UiObject* obj, UiToggleArgs args) {
     // 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,
index 7658f118c179a4f4b00d484722c877026a119840..13377abf64211db2960c2a40ab153561ee4bd573 100644 (file)
@@ -43,7 +43,7 @@
 
 /* ---------------------------- 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);
     
@@ -51,13 +51,13 @@ static UIWIDGET box_create(UiObject *obj, UiContainerArgs args, UiBoxOrientation
     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);
@@ -67,12 +67,12 @@ static UIWIDGET box_create(UiObject *obj, UiContainerArgs args, UiBoxOrientation
 }
 
 // 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);
 }
 
@@ -129,7 +129,7 @@ void ui_box_container_add(UiContainerPrivate *ctn, Widget widget) {
 /* ---------------------------- 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;
     
@@ -137,13 +137,13 @@ UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs args) {
     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;
@@ -308,7 +308,7 @@ static void ui_tabbar_expose(Widget widget, XtPointer udata, XtPointer cdata) {
     }
 }
 
-UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) {
+UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs *args) {
     Arg xargs[16];
     int n = 0;
     
@@ -321,7 +321,7 @@ UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) {
     // - 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);
@@ -354,8 +354,8 @@ UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) {
     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;
@@ -369,7 +369,7 @@ UIWIDGET ui_tabview_create(UiObject *obj, UiTabViewArgs args) {
     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;
@@ -411,7 +411,7 @@ void ui_tab_create(UiObject *obj, const char* title) {
     }
     
     
-    Widget child = ui_vbox_create(obj, (UiContainerArgs) { 0 });
+    Widget child = ui_vbox_create(obj, &(UiContainerArgs) { 0 });
     if(tabview->current) {
         XtUnmanageChild(child);
     } else {
@@ -605,7 +605,7 @@ static UiContainerX* ui_scrolledwindow_container(UiObject *obj, Widget scrolledw
     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);
     
index 326f3d972d5ee7c50a194c3021c0653382867288..596e372329126909bbc86ca48fc02452020c285a 100644 (file)
@@ -39,14 +39,14 @@ extern "C" {
 #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;
 
index 3c4856ee61b2479ffb90152e42bf1893a70496bc..37d5da332ff3274bba21222a4538ab725d99fba1 100644 (file)
@@ -36,7 +36,7 @@
 
 #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;
     
@@ -47,12 +47,12 @@ static UIWIDGET label_create(UiObject *obj, UiLabelArgs args, int align) {
     
     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);
@@ -61,15 +61,15 @@ static UIWIDGET label_create(UiObject *obj, UiLabelArgs args, int align) {
     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);
 }
 
@@ -103,7 +103,7 @@ static void ui_progressbar_expose(Widget widget, UiProgressBar *pb, XtPointer c)
     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;
     
@@ -112,7 +112,7 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
     
     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, ....
@@ -137,12 +137,12 @@ UIWIDGET ui_progressbar_create(UiObject *obj, UiProgressbarArgs args) {
     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;
@@ -186,7 +186,7 @@ void ui_progressbar_set(UiDouble *d, double value) {
 }
 
 
-UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args) {
+UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs *args) {
     Arg xargs[16];
     int n = 0;
     
@@ -200,12 +200,12 @@ UIWIDGET ui_progressspinner_create(UiObject* obj, UiProgressbarSpinnerArgs args)
     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;
index f53cbb7b66b159742490afdc561d2ef411073f75..4a6a143486213652bc433d063fd16a29e8d02723 100644 (file)
 #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;
@@ -227,30 +227,30 @@ static void ui_dropdown_selection(
     }
 }
 
-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;
index bcb9be4efe79cc45fd7b73db29fcec36d868a128..08ade21f2da6e4065bef5a23c1dbefbed00226c8 100644 (file)
@@ -38,7 +38,7 @@
 
 /* ------------------------------ Text Area ------------------------------ */
 
-UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
+UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs *args) {
     Arg xargs[16];
     int n = 0;
     
@@ -48,12 +48,12 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs args) {
     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));
@@ -383,7 +383,7 @@ void ui_text_redo(UiText *value) {
 
 /* ------------------------------ 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;
     
@@ -399,13 +399,13 @@ static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, int framel
     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;
@@ -420,15 +420,15 @@ static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, int framel
     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);
 }
 
@@ -965,7 +965,7 @@ static void pathbar_activate(void *data, char *path, int index) {
     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;
     
@@ -977,18 +977,18 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
     
 
     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;
@@ -1002,10 +1002,10 @@ UIWIDGET ui_path_textfield_create(UiObject* obj, UiPathTextFieldArgs args) {
         }
     }
     
-    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;
         
index e8b566aafc16a9722ea80ff0085819eef949167e..18e2a8ebb30862d746173a059e421ab670e1a64b 100644 (file)
@@ -37,7 +37,7 @@
 #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;
     
@@ -56,12 +56,11 @@ UIWIDGET ui_customwidget_create(UiObject *obj, ui_createwidget_func create_widge
 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);
index 827279c00a799c7b4e6e6000f5b31ecd259642ed..f563d21cc7e2960132b768cc26c89d599ba9f774 100644 (file)
 #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()));
     }
@@ -56,18 +56,18 @@ static void togglebutton_event(UiEvent *event, UiEventWrapper *wrapper) {
     }
 }
 
-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;
@@ -115,17 +115,17 @@ static void checkbox_event(UiEvent *event, UiEventWrapper *wrapper) {
 }
 
 
-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;
@@ -173,15 +173,15 @@ static void radiobutton_event(UiEvent *event, UiEventWrapper *wrapper) {
     }
 }
 
-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;
@@ -198,7 +198,7 @@ UIWIDGET ui_radiobutton_create(UiObject *obj, UiToggleArgs args) {
         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;
index bf5bf93b7270f3f574e77e69d4ceeb4bc2d35529..b4392ffc272971d555a18a15e9760dd7e2b498c2 100644 (file)
@@ -86,7 +86,7 @@ void UiBoxContainer::add(QWidget* widget, bool fill) {
     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);
     
@@ -100,11 +100,11 @@ UIWIDGET ui_box(UiObject *obj, UiContainerArgs args, QBoxLayout::Direction dir)
     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);
 }
 
@@ -233,7 +233,7 @@ void UiGridContainer::end() {
     }
 }
 
-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);
     
@@ -244,13 +244,13 @@ UIEXPORT UIWIDGET ui_grid_create(UiObject *obj, UiContainerArgs 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;
 }
index 16ced63893ba9ec67d5d477e4c090deca64e4437..bb5190873b429053242f9d5efd7fcd3b8f361049 100644 (file)
 #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)
index 2dee2e7f1d1b5e35c330dcc647d6cb7a91d8690a..69d7552fec5acd23725b0006637e8632310664cc 100644 (file)
 
 
 
-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;
             }
         }
@@ -73,15 +73,15 @@ UIWIDGET ui_spinner_create(UiObject *obj, UiSpinnerArgs args) {
     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;
     }
index 49917d0b39afb6f01c6bc22a61a3adf32dedeba1..b8130642cf8db30d9106c0d78e87083a3ecfb535 100644 (file)
 #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);
@@ -52,12 +52,12 @@ UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs args) {
     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);
 }
index 6ab288a53da871339aaaf0b04adca5f1f69b1b69..3b404cf6ab69823dd839992a4ded3bca1215916e 100644 (file)
@@ -38,14 +38,14 @@ extern "C" void* ui_strmodel_getvalue(void *elm, int column) {
 }
 
 
-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);
@@ -58,8 +58,8 @@ UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) {
         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(
@@ -74,20 +74,20 @@ UIWIDGET ui_listview_create(UiObject* obj, UiListArgs args) {
     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) {
@@ -98,8 +98,8 @@ UIWIDGET ui_table_create(UiObject* obj, UiListArgs args) {
         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(
index a97ef1cfb3252a6b8c26cddbf2b1be020a0fabd2..a465fac2e41f66a4ffe07bb26b9924bb951aa9fb 100644 (file)
@@ -33,6 +33,8 @@ DESTDIR = ../build/lib
 MOC_DIR = ../build/ui/qt
 OBJECTS_DIR = ../build/ui/qt
 
+QMAKE_CXXFLAGS += -I../ucx
+
 QT += core gui widgets
 
 DEFINES += UI_QT5
index fb3f6567621ff4c6c5865e92a0ac4822782c9467..5ef157ccbb9ced48ea98c128109a58a250808fa0 100644 (file)
@@ -57,7 +57,7 @@ static QTextDocument* get_or_create_doc(UiText *value) {
     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);
     
@@ -66,7 +66,7 @@ UIWIDGET ui_textarea_create(UiObject *obj, UiTextAreaArgs 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;
         
@@ -210,7 +210,7 @@ void ui_textarea_remove(UiText *text, int begin, int end) {
 
 /* ------------------------------ 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);
     
@@ -221,7 +221,7 @@ static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, bool passw
         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) {
@@ -241,15 +241,15 @@ static UIWIDGET create_textfield(UiObject *obj, UiTextFieldArgs args, bool passw
     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);
 }
 
index 25fb84bd04b6320d45243d4129c2886563d91345..f275efd06ccd7d91b5101beb00abb7b54d3df88c 100644 (file)
@@ -31,7 +31,7 @@
 #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);
@@ -45,7 +45,7 @@ UIWIDGET ui_separator_create(UiObject *obj, UiWidgetArgs *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);
     
index 7123858199c8248a3ce0ff0d7a5b5d391611fdec..57144b9d2beb006b9b92342ef65362fe9fd94888 100644 (file)
@@ -82,17 +82,17 @@ typedef struct UiToggleArgs {
     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);
 
 
 
index 3f828ea6b219c9b598917fda72da67254a5b6198..51c15bd34cfd4b96729e16f701a78b7d6d9a9b19 100644 (file)
@@ -116,6 +116,8 @@ typedef struct UiTabViewArgs {
     const char *style_class;
 
     UiTabViewType tabview;
+    ui_callback onchange;
+    void *onchangedata;
 
     UiSubContainerType subcontainer;
     
@@ -235,39 +237,39 @@ struct UiContainerX {
 
 #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))
 
@@ -275,35 +277,35 @@ struct UiContainerX {
 #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);
 
@@ -342,6 +344,17 @@ UIEXPORT int ui_container_finish(UiObject *obj);
     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
 }
index 8ed861b6e9030e836ed9e61bd3ee6dc4dc65ab81..6e2b5799e659013fa03bb5b29b85584d857dea7e 100644 (file)
@@ -113,24 +113,24 @@ typedef struct UiProgressbarSpinnerArgs {
 
 /* 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
index 5c8990a98f59d0d3b44ec50bea733e28e8d30ab2..3e0a99f51f22894552bcfdbdd228d8f9e7da6f42 100644 (file)
@@ -62,9 +62,9 @@ typedef struct UiSpinnerArgs {
 
 
     
-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);
index 7217caa5185e995c5375d4e4dd057d285dba3ed4..49e57ab6583a0326f76c399ee931f349c27ef7f8 100644 (file)
@@ -75,9 +75,9 @@ typedef struct UiImageViewerArgs {
     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);
index 2e7b6b1cacee2ffe5c3f715047c2e0df91d8e4b2..3f805b886e78278683a87c048d1d32d83d760d93 100644 (file)
@@ -69,23 +69,23 @@ typedef struct UiMenuItemListArgs {
 
 #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
 
index 5c40df5ba1f35e05f72ddafdf32f08bf2fddbf74..22002351dc3265c739f5af60caedb43ff3aefe62 100644 (file)
@@ -119,25 +119,25 @@ typedef struct UiPathTextFieldArgs {
     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
 }
index 05093219cefb2975cba4d3325e6323a534bdfcbb..4b42af2a2e92c5d1c4fb309f9332c3aef1521f98 100644 (file)
@@ -71,16 +71,16 @@ enum UiToolbarPos {
        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);
 
index 2af07c5406e381b78976b793aae3dea8ece61a8c..39d4c7338e0949719206bdb2c2e37adc84eb3c82 100644 (file)
@@ -558,6 +558,8 @@ UIEXPORT void ui_string_set(UiString *s, const char *value);
 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);
index 8217cf601512b023957c91817430d0cbfbc483d1..5f4b157eaa53cbf31de37715a851bd7bfef12a65 100644 (file)
@@ -240,21 +240,21 @@ UIEXPORT UiModel* ui_model(UiContext *ctx, ...);
 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
index 98be28c01d19f276987cd9b77bd53da97bb1b621..36f77f97a7d0a67491e4bd39c0bbe446f4668960 100644 (file)
@@ -56,9 +56,9 @@ typedef struct UiWebviewArgs {
     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);
 
index e08233dfef0c289c56e2a7598f0a05df5ac9a0f1..7e96ab63081925523b1eedde00f9c6dd3579f5e3 100644 (file)
@@ -48,21 +48,21 @@ typedef struct UiWidgetArgs {
 } 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);