ui/common/args.c

Sun, 20 Jul 2025 22:04:39 +0200

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sun, 20 Jul 2025 22:04:39 +0200
changeset 108
77254bd6dccb
child 109
c3dfcb8f0be7
permissions
-rw-r--r--

update toolkit, adjust UI code

/*
 * 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"


/* ---------------------------- UiDialogArgs ---------------------------- */

UiDialogArgs* ui_dialog_args_new(void) {
    UiDialogArgs *args = malloc(sizeof(UiDialogArgs));
    memset(args, 0, sizeof(UiDialogArgs));
    return args;
}

void ui_dialog_args_set_title(UiDialogArgs *args, const char *title) {
    args->title = strdup(title);
}

void ui_dialog_args_set_content(UiDialogArgs *args, const char *str) {
    args->content = strdup(str);
}

void ui_dialog_args_set_button1_label(UiDialogArgs *args, const char *label) {
    args->button1_label = strdup(label);
}

void ui_dialog_args_set_button2_label(UiDialogArgs *args, const char *label) {
    args->button2_label = strdup(label);
}

void ui_dialog_args_set_closebutton_label(UiDialogArgs *args, const char *label) {
    args->closebutton_label = strdup(label);
}

void ui_dialog_args_set_input_value(UiDialogArgs *args, const char *value) {
    args->input_value = strdup(value);
}

void ui_dialog_args_set_input(UiDialogArgs *args, UiBool input) {
    args->input = input;
}

void ui_dialog_args_set_password(UiDialogArgs *args, UiBool password) {
    args->password = password;
}

void ui_dialog_args_set_result(UiDialogArgs *args, ui_callback cb) {
    args->result = cb;
}

void ui_dialog_args_set_resultdata(UiDialogArgs *args, void *userdata) {
    args->resultdata = userdata;
}

void ui_dialog_args_free(UiDialogArgs *args) {
    free((void*)args->title);
    free((void*)args->button1_label);
    free((void*)args->button2_label);
    free((void*)args->content);
    free((void*)args->closebutton_label);
    free((void*)args->input_value);
    free(args);
}


/* -------------------------- UiDialogWindowArgs -------------------------- */

UiDialogWindowArgs* ui_dialogwindow_args_new(void) {
    UiDialogWindowArgs *args = malloc(sizeof(UiDialogWindowArgs));
    memset(args, 0, sizeof(UiDialogWindowArgs));
    return args;
}

void ui_dialogwindow_args_set_modal(UiDialogWindowArgs *args, UiTri value) {
    args->modal = value;
}

void ui_dialogwindow_args_set_titlebar_buttons(UiDialogWindowArgs *args, UiTri value) {
    args->titlebar_buttons = value;
}

void ui_dialogwindow_args_set_show_closebutton(UiDialogWindowArgs *args, UiTri value) {
    args->show_closebutton = value;
}

void ui_dialogwindow_args_set_title(UiDialogWindowArgs *args, const char *title) {
    args->title = strdup(title);
}

void ui_dialogwindow_args_set_lbutton1(UiDialogWindowArgs *args, const char *label) {
    args->lbutton1 = strdup(label);
}

void ui_dialogwindow_args_set_lbutton2(UiDialogWindowArgs *args, const char *label) {
    args->lbutton2 = strdup(label);
}

void ui_dialogwindow_args_set_rbutton3(UiDialogWindowArgs *args, const char *label) {
    args->rbutton3 = strdup(label);
}

void ui_dialogwindow_args_set_rbutton4(UiDialogWindowArgs *args, const char *label) {
    args->rbutton4 = strdup(label);
}

void ui_dialogwindow_args_set_lbutton1_states(UiDialogWindowArgs *args, const int *states) {
    // TODO
}

void ui_dialogwindow_args_set_lbutton2_states(UiDialogWindowArgs *args, const int *states) {
    // TODO
}

void ui_dialogwindow_args_set_rbutton3_states(UiDialogWindowArgs *args, const int *states) {
    // TODO
}

void ui_dialogwindow_args_set_rbutton4_states(UiDialogWindowArgs *args, const int *states) {
    // TODO
}

void ui_dialogwindow_args_set_default_button(UiDialogWindowArgs *args, int button) {
    args->default_button = button;
}

void ui_dialogwindow_args_set_width(UiDialogWindowArgs *args, int width) {
    args->width = width;
}

void ui_dialogwindow_args_set_height(UiDialogWindowArgs *args, int height) {
    args->height = height;
}

void ui_dialogwindow_args_set_onclick(UiDialogWindowArgs *args, ui_callback cb) {
    args->onclick = cb;
}

void ui_dialogwindow_args_set_onclickdata(UiDialogWindowArgs *args, void *userdata) {
    args->onclickdata = userdata;
}

void ui_dialogwindow_args_free(UiDialogWindowArgs *args) {
    free((void*)args->title);
    free((void*)args->lbutton1);
    free((void*)args->lbutton2);
    free((void*)args->rbutton3);
    free((void*)args->rbutton4);
    free((void*)args->lbutton1_groups);
    free((void*)args->lbutton2_groups);
    free((void*)args->rbutton3_groups);
    free((void*)args->rbutton4_groups);
    free(args);
}


/* ---------------------------- 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);
}

/* --------------------------- UiToolbarItemArgs --------------------------- */

UiToolbarItemArgs* ui_toolbar_item_args_new(void) {
    UiToolbarItemArgs *args = malloc(sizeof(UiToolbarItemArgs));
    memset(args, 0, sizeof(UiToolbarItemArgs));
    return args;
}

void ui_toolbar_item_args_set_label(UiToolbarItemArgs *args, const char *label) {
    args->label = strdup(label);
}

void ui_toolbar_item_args_set_stockid(UiToolbarItemArgs *args, const char *stockid) {
    args->stockid = strdup(stockid);
}

void ui_toolbar_item_args_set_icon(UiToolbarItemArgs *args, const char *icon) {
    args->icon = strdup(icon);
}

void ui_toolbar_item_args_set_onclick(UiToolbarItemArgs *args, ui_callback callback) {
    args->onclick = callback;
}

void ui_toolbar_item_args_set_onclickdata(UiToolbarItemArgs *args, void *onclickdata) {
    args->onclickdata = onclickdata;
}

void ui_toolbar_item_args_set_groups(UiToolbarItemArgs *args, int *groups) {
    // TODO
}
void ui_toolbar_item_args_free(UiToolbarItemArgs *args) {
    free((void*)args->label);
    free((void*)args->stockid);
    free((void*)args->icon);
    free(args);
}

/* ---------------------------- UiToolbarToggleItemArgs ---------------------------- */

UiToolbarToggleItemArgs* ui_toolbar_toggleitem_args_new(void) {
    UiToolbarToggleItemArgs *args = malloc(sizeof(UiToolbarToggleItemArgs));
    memset(args, 0, sizeof(UiToolbarToggleItemArgs));
    return args;
}


void ui_toolbar_toggleitem_args_set_label(UiToolbarToggleItemArgs *args, const char *label) {
    args->label = strdup(label);
}


void ui_toolbar_toggleitem_args_set_stockid(UiToolbarToggleItemArgs *args, const char *stockid) {
    args->stockid = strdup(stockid);
}


void ui_toolbar_toggleitem_args_set_icon(UiToolbarToggleItemArgs *args, const char *icon) {
    args->icon = strdup(icon);
}


void ui_toolbar_toggleitem_args_set_varname(UiToolbarToggleItemArgs *args, const char *varname) {
    args->varname = strdup(varname);
}


void ui_toolbar_toggleitem_args_set_onchange(UiToolbarToggleItemArgs *args, ui_callback callback) {
    args->onchange = callback;
}


void ui_toolbar_toggleitem_args_set_onchangedata(UiToolbarToggleItemArgs *args, void *onchangedata) {
    args->onchangedata = onchangedata;
}


void ui_toolbar_toggleitem_args_set_groups(UiToolbarToggleItemArgs *args, int *groups) {
    // TODO
}


void ui_toolbar_toggleitem_args_free(UiToolbarToggleItemArgs *args) {
    free((void*)args->label);
    free((void*)args->stockid);
    free((void*)args->icon);
    free((void*)args->varname);
    free(args);
}

/* ---------------------------- UiToolbarMenuArgs ---------------------------- */


UiToolbarMenuArgs* ui_toolbar_menu_args_new(void) {
    UiToolbarMenuArgs *args = malloc(sizeof(UiToolbarMenuArgs));
    memset(args, 0, sizeof(UiToolbarMenuArgs));
    return args;
}


void ui_toolbar_menu_args_set_label(UiToolbarMenuArgs *args, const char *label) {
    args->label = strdup(label);
}


void ui_toolbar_menu_args_set_stockid(UiToolbarMenuArgs *args, const char *stockid) {
    args->stockid = strdup(stockid);
}


void ui_toolbar_menu_args_set_icon(UiToolbarMenuArgs *args, const char *icon) {
    args->icon = strdup(icon);
}


void ui_toolbar_menu_args_free(UiToolbarMenuArgs *args) {
    free((void*)args->label);
    free((void*)args->stockid);
    free((void*)args->icon);
    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_rowspan(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_rowspan(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);
}


/* ---------------------------- UiSidebarArgs -------------------------------*/

UiSidebarArgs* ui_sidebar_args_new(void) {
    UiSidebarArgs *args = malloc(sizeof(UiSidebarArgs));
    memset(args, 0, sizeof(UiSidebarArgs));
    return args;
}


void ui_sidebar_args_set_name(UiSidebarArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_sidebar_args_set_style_class(UiSidebarArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}


void ui_sidebar_args_set_margin(UiSidebarArgs *args, int value) {
    args->margin = value;
}


void ui_sidebar_args_set_spacing(UiSidebarArgs *args, int value) {
    args->spacing = value;
}


void ui_sidebar_args_free(UiSidebarArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free(args);
}


/* --------------------------- UiSplitPaneArgs ------------------------------*/

UiSplitPaneArgs* ui_splitpane_args_new(void) {
    UiSplitPaneArgs *args = malloc(sizeof(UiSplitPaneArgs));
    memset(args, 0, sizeof(UiSplitPaneArgs));
    return args;
}


void ui_splitpane_args_set_fill(UiSplitPaneArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_splitpane_args_set_hexpand(UiSplitPaneArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_splitpane_args_set_vexpand(UiSplitPaneArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_splitpane_args_set_hfill(UiSplitPaneArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_splitpane_args_set_vfill(UiSplitPaneArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_splitpane_args_set_override_defaults(UiSplitPaneArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_splitpane_args_set_colspan(UiSplitPaneArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_splitpane_args_set_rowspan(UiSplitPaneArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_splitpane_args_set_name(UiSplitPaneArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_splitpane_args_set_style_class(UiSplitPaneArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}


void ui_splitpane_args_set_margin(UiSplitPaneArgs *args, int value) {
    args->margin = value;
}


void ui_splitpane_args_set_spacing(UiSplitPaneArgs *args, int value) {
    args->spacing = value;
}


void ui_splitpane_args_set_columnspacing(UiSplitPaneArgs *args, int value) {
    args->columnspacing = value;
}


void ui_splitpane_args_set_rowspacing(UiSplitPaneArgs *args, int value) {
    args->rowspacing = value;
}


void ui_splitpane_args_set_initial_position(UiSplitPaneArgs *args, int pos) {
    args->initial_position = pos;
}


void ui_splitpane_args_set_varname(UiSplitPaneArgs *args, const char *varname) {
    args->varname = strdup(varname);
}


void ui_splitpane_args_set_value(UiSplitPaneArgs *args, UiInteger *value) {
    args->value = value;
}

void ui_splitpane_args_set_max_panes(UiSplitPaneArgs *args, int max) {
    args->max_panes = max;
}


void ui_splitpane_args_free(UiSplitPaneArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free(args);
}


/* ------------------------- UiLabelArgs ----------------------------*/


UiLabelArgs* ui_label_args_new(void) {
    UiLabelArgs *args = malloc(sizeof(UiLabelArgs));
    memset(args, 0, sizeof(UiLabelArgs));
    return args;
}


void ui_label_args_set_fill(UiLabelArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_label_args_set_hexpand(UiLabelArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_label_args_set_vexpand(UiLabelArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_label_args_set_hfill(UiLabelArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_label_args_set_vfill(UiLabelArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_label_args_set_override_defaults(UiLabelArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_label_args_set_colspan(UiLabelArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_label_args_set_rowspan(UiLabelArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_label_args_set_name(UiLabelArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_label_args_set_style_class(UiLabelArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_label_args_set_label(UiLabelArgs *args, const char *label){
    args->label = strdup(label);
}


void ui_label_args_set_align(UiLabelArgs *args, UiAlignment align) {
    args->align = align;
}

void ui_label_args_set_style(UiLabelArgs *args, UiLabelStyle style) {
    args->style = style;
}

void ui_label_args_set_varname(UiLabelArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_label_args_set_value(UiLabelArgs *args, UiString *value) {
    args->value = value;
}

void ui_label_args_free(UiLabelArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->label);
    free((void*)args->varname);
    free(args);
}


/* ------------------------- UiProgressbarArgs ----------------------------*/


UiProgressbarArgs* ui_progressbar_args_new(void) {
    UiProgressbarArgs *args = malloc(sizeof(UiProgressbarArgs));
    memset(args, 0, sizeof(UiProgressbarArgs));
    return args;
}


void ui_progressbar_args_set_fill(UiProgressbarArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_progressbar_args_set_hexpand(UiProgressbarArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_progressbar_args_set_vexpand(UiProgressbarArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_progressbar_args_set_hfill(UiProgressbarArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_progressbar_args_set_vfill(UiProgressbarArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_progressbar_args_set_override_defaults(UiProgressbarArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_progressbar_args_set_colspan(UiProgressbarArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_progressbar_args_set_rowspan(UiProgressbarArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_progressbar_args_set_name(UiProgressbarArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_progressbar_args_set_style_class(UiProgressbarArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_progressbar_args_set_min(UiProgressbarArgs *args, double min) {
    args->min = min;
}

void ui_progressbar_args_set_max(UiProgressbarArgs *args, double max) {
    args->max = max;
}

void ui_progressbar_args_set_varname(UiProgressbarArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_progressbar_args_set_value(UiProgressbarArgs *args, UiDouble *value) {
    args->value = value;
}

void ui_progressbar_args_free(UiProgressbarArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free(args);
}


/* ------------------------- UiProgressbarSpinnerArgs ----------------------------*/

UiProgressbarSpinnerArgs* ui_progress_spinner_args_new(void) {
    UiProgressbarSpinnerArgs *args = malloc(sizeof(UiProgressbarSpinnerArgs));
    memset(args, 0, sizeof(UiProgressbarSpinnerArgs));
    return args;
}

void ui_progress_spinner_args_set_fill(UiProgressbarSpinnerArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}

void ui_progress_spinner_args_set_hexpand(UiProgressbarSpinnerArgs *args, UiBool value) {
    args->hexpand = value;
}

void ui_progress_spinner_args_set_vexpand(UiProgressbarSpinnerArgs *args, UiBool value) {
    args->vexpand = value;
}

void ui_progress_spinner_args_set_hfill(UiProgressbarSpinnerArgs *args, UiBool value) {
    args->hfill = value;
}

void ui_progress_spinner_args_set_vfill(UiProgressbarSpinnerArgs *args, UiBool value) {
    args->vfill = value;
}

void ui_progress_spinner_args_set_override_defaults(UiProgressbarSpinnerArgs *args, UiBool value) {
    args->override_defaults = value;
}

void ui_progress_spinner_args_set_colspan(UiProgressbarSpinnerArgs *args, int colspan) {
    args->colspan = colspan;
}

void ui_progress_spinner_args_set_rowspan(UiProgressbarSpinnerArgs *args, int rowspan) {
    args->rowspan = rowspan;
}

void ui_progress_spinner_args_set_name(UiProgressbarSpinnerArgs *args, const char *name) {
    args->name = strdup(name);
}

void ui_progress_spinner_args_set_style_class(UiProgressbarSpinnerArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_progress_spinner_args_set_varname(UiProgressbarSpinnerArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_progress_spinner_args_set_value(UiProgressbarSpinnerArgs *args, UiInteger *value) {
    args->value = value;
}

void ui_progress_spinner_args_free(UiProgressbarSpinnerArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free(args);
}


/* ---------------------------- UiButtonArgs -------------------------------*/

UiButtonArgs* ui_button_args_new(void) {
    UiButtonArgs *args = malloc(sizeof(UiButtonArgs));
    memset(args, 0, sizeof(UiButtonArgs));
    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_rowspan(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(UiToggleArgs));
    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_rowspan(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);
}


/* ------------------------- UiListArgs ----------------------------*/

UiListArgs* ui_list_args_new(void) {
    UiListArgs *args = malloc(sizeof(UiListArgs));
    memset(args, 0, sizeof(UiListArgs));
    return args;
}

void ui_list_args_set_fill(UiListArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}

void ui_list_args_set_hexpand(UiListArgs *args, UiBool value) {
    args->hexpand = value;
}

void ui_list_args_set_vexpand(UiListArgs *args, UiBool value) {
    args->vexpand = value;
}

void ui_list_args_set_hfill(UiListArgs *args, UiBool value) {
    args->hfill = value;
}

void ui_list_args_set_vfill(UiListArgs *args, UiBool value) {
    args->vfill = value;
}

void ui_list_args_set_override_defaults(UiListArgs *args, UiBool value) {
    args->override_defaults = value;
}

void ui_list_args_set_colspan(UiListArgs *args, int colspan) {
    args->colspan = colspan;
}

void ui_list_args_set_rowspan(UiListArgs *args, int rowspan) {
    args->rowspan = rowspan;
}

void ui_list_args_set_name(UiListArgs *args, const char *name) {
    args->name = strdup(name);
}

void ui_list_args_set_style_class(UiListArgs *args, const char *classname) {
    args->style_class = classname;
}

void ui_list_args_set_varname(UiListArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_list_args_set_value(UiListArgs *args, UiList *value) {
    args->list = value;
}

void ui_list_args_set_model(UiListArgs *args, UiModel *model) {
    args->model = model;
}

void ui_list_args_set_static_elements(UiListArgs *args, char **strarray, size_t nelm) {
    char **array = calloc(nelm, sizeof(char*));
    for(int i=0;i<nelm;i++) {
        array[i] = strdup(strarray[i]);
    }
    args->static_elements = array;
    args->static_nelm = nelm;
}

void ui_list_args_set_getvalue_func(UiListArgs *args, ui_getvaluefunc getvalue) {
    args->getvalue = getvalue;
}

void ui_list_args_set_getvalue_func2(UiListArgs *args, ui_getvaluefunc2 getvalue) {
    args->getvalue2 = getvalue;
}

void ui_list_args_set_getvalue_data(UiListArgs *args, void *userdata) {
    args->getvalue2data = userdata;
}

void ui_list_args_set_onactivate(UiListArgs *args, ui_callback callback) {
    args->onactivate = callback;
}

void ui_list_args_set_onactivatedata(UiListArgs *args, void *userdata) {
    args->onactivatedata = userdata;
}

void ui_list_args_set_onselection(UiListArgs *args, ui_callback callback) {
    args->onselection = callback;
}

void ui_list_args_set_onselectiondata(UiListArgs *args, void *userdata) {
    args->onselectiondata = userdata;
}

void ui_list_args_set_ondragstart(UiListArgs *args, ui_callback callback) {
    args->ondragstart = callback;
}

void ui_list_args_set_ondragstartdata(UiListArgs *args, void *userdata) {
    args->ondragstartdata = userdata;
}

void ui_list_args_set_ondragcomplete(UiListArgs *args, ui_callback callback) {
    args->ondragcomplete = callback;
}

void ui_list_args_set_ondragcompletedata(UiListArgs *args, void *userdata) {
    args->ondragcompletedata = userdata;
}

void ui_list_args_set_ondrop(UiListArgs *args, ui_callback callback) {
    args->ondrop = callback;
}

void ui_list_args_set_ondropdata(UiListArgs *args, void *userdata) {
    args->ondropdata = userdata;
}

void ui_list_args_set_multiselection(UiListArgs *args, UiBool multiselection) {
    args->multiselection = multiselection;
}

void ui_list_args_set_contextmenu(UiListArgs *args, UiMenuBuilder *menubuilder) {
    args->contextmenu = menubuilder;
}

void ui_list_args_set_groups(UiListArgs *args, int *groups) {
    // TODO
}

void ui_list_args_free(UiListArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    if(args->static_elements) {
        for(int i=0;i<args->static_nelm;i++) {
            free(args->static_elements[i]);
        }
        free(args->static_elements);
    }
    free(args);
}



/* ---------------------- SurceList ------------------------------------- */

UiSourceListArgs* ui_sourcelist_args_new(void) {
    UiSourceListArgs *args = malloc(sizeof(UiSourceListArgs));
    memset(args, 0, sizeof(UiSourceListArgs));
    return args;
}


void ui_sourcelist_args_set_fill(UiSourceListArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_sourcelist_args_set_hexpand(UiSourceListArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_sourcelist_args_set_vexpand(UiSourceListArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_sourcelist_args_set_hfill(UiSourceListArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_sourcelist_args_set_vfill(UiSourceListArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_sourcelist_args_set_override_defaults(UiSourceListArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_sourcelist_args_set_colspan(UiSourceListArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_sourcelist_args_set_rowspan(UiSourceListArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_sourcelist_args_set_name(UiSourceListArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_sourcelist_args_set_style_class(UiSourceListArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

UIEXPORT void ui_sourcelist_args_set_static_sublists(UiSourceListArgs *args, UiSubList *sublists, size_t numsublists) {
    args->sublists = calloc(numsublists, sizeof(UiSubList));
    memcpy(args->sublists, sublists, numsublists * sizeof(UiSubList));
    args->numsublists = numsublists;
}

void ui_sourcelist_args_set_varname(UiSourceListArgs *args, const char *varname) {
    args->varname = strdup(varname);
}


void ui_sourcelist_args_set_dynamic_sublists(UiSourceListArgs *args, UiList *value) {
    args->dynamic_sublist = value;
}


void ui_sourcelist_args_set_getvalue_func(UiSourceListArgs *args, ui_sublist_getvalue_func getvalue) {
    args->getvalue = getvalue;
}

void ui_sourcelist_args_set_getvalue_userdata(UiSourceListArgs *args, void *userdata) {
    args->getvaluedata = userdata;
}

void ui_sourcelist_args_set_onactivate(UiSourceListArgs *args, ui_callback callback) {
    args->onactivate = callback;
}


void ui_sourcelist_args_set_onactivatedata(UiSourceListArgs *args, void *userdata) {
    args->onactivatedata = userdata;
}


void ui_sourcelist_args_set_onbuttonclick(UiSourceListArgs *args, ui_callback callback) {
    args->onbuttonclick = callback;
    
}


void ui_sourcelist_args_set_onbuttonclickdata(UiSourceListArgs *args, void *userdata) {
    args->onbuttonclickdata = userdata;
}


void ui_sourcelist_args_free(UiSourceListArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free((void*)args->sublists);
    free(args);
}


/* ------------------------- UiTextAreaArgs ----------------------------*/

UiTextAreaArgs* ui_textarea_args_new(void) {
    UiTextAreaArgs *args = malloc(sizeof(UiTextAreaArgs));
    memset(args, 0, sizeof(UiTextAreaArgs));
    return args;
}


void ui_textarea_args_set_fill(UiTextAreaArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_textarea_args_set_hexpand(UiTextAreaArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_textarea_args_set_vexpand(UiTextAreaArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_textarea_args_set_hfill(UiTextAreaArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_textarea_args_set_vfill(UiTextAreaArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_textarea_args_set_override_defaults(UiTextAreaArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_textarea_args_set_colspan(UiTextAreaArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_textarea_args_set_rowspan(UiTextAreaArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_textarea_args_set_name(UiTextAreaArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_textarea_args_set_style_class(UiTextAreaArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_textarea_args_set_onchange(UiTextAreaArgs *args, ui_callback callback){
    args->onchange = callback;
}


void ui_textarea_args_set_onchangedata(UiTextAreaArgs *args, void *onchangedata){
    args->onchangedata = onchangedata;
}

void ui_textarea_args_set_varname(UiTextAreaArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_textarea_args_set_value(UiTextAreaArgs *args, UiText *value) {
    args->value = value;
}

void ui_textarea_args_set_groups(UiTextAreaArgs *args, int *groups){
    // TODO
}

void ui_textarea_args_free(UiTextAreaArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free((void*)args->groups);
    free(args);
}



/* ------------------------- UiTextFieldArgs ----------------------------*/

UiTextFieldArgs* ui_textfield_args_new(void) {
    UiTextFieldArgs *args = malloc(sizeof(UiTextFieldArgs));
    memset(args, 0, sizeof(UiTextFieldArgs));
    return args;
}


void ui_textfield_args_set_fill(UiTextFieldArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_textfield_args_set_hexpand(UiTextFieldArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_textfield_args_set_vexpand(UiTextFieldArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_textfield_args_set_hfill(UiTextFieldArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_textfield_args_set_vfill(UiTextFieldArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_textfield_args_set_override_defaults(UiTextFieldArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_textfield_args_set_colspan(UiTextFieldArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_textfield_args_set_rowspan(UiTextFieldArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_textfield_args_set_name(UiTextFieldArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_textfield_args_set_style_class(UiTextFieldArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_textfield_args_set_onchange(UiTextFieldArgs *args, ui_callback callback){
    args->onchange = callback;
}


void ui_textfield_args_set_onchangedata(UiTextFieldArgs *args, void *onchangedata){
    args->onchangedata = onchangedata;
}

void ui_textfield_args_set_onactivate(UiTextFieldArgs *args, ui_callback callback){
    args->onactivate = callback;
}


void ui_textfield_args_set_onactivatedata(UiTextFieldArgs *args, void *onactivatedata){
    args->onactivatedata = onactivatedata;
}

void ui_textfield_args_set_varname(UiTextFieldArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_textfield_args_set_value(UiTextFieldArgs *args, UiString *value) {
    args->value = value;
}

void ui_textfield_args_set_groups(UiTextFieldArgs *args, int *groups){
    // TODO
}

void ui_textfield_args_free(UiTextFieldArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free((void*)args->groups);
    free(args);
}


/* ------------------------- UiWebviewArgs ----------------------------*/

UiWebviewArgs* ui_webview_args_new(void) {
    UiWebviewArgs *args = malloc(sizeof(UiWebviewArgs));
    memset(args, 0, sizeof(UiWebviewArgs));
    return args;
}


void ui_webview_args_set_fill(UiWebviewArgs *args, UiBool fill) {
    args->fill = fill ? UI_ON : UI_OFF;
}


void ui_webview_args_set_hexpand(UiWebviewArgs *args, UiBool value) {
    args->hexpand = value;
}


void ui_webview_args_set_vexpand(UiWebviewArgs *args, UiBool value) {
    args->vexpand = value;
}


void ui_webview_args_set_hfill(UiWebviewArgs *args, UiBool value) {
    args->hfill = value;
}


void ui_webview_args_set_vfill(UiWebviewArgs *args, UiBool value) {
    args->vfill = value;
}


void ui_webview_args_set_override_defaults(UiWebviewArgs *args, UiBool value) {
    args->override_defaults = value;
}


void ui_webview_args_set_colspan(UiWebviewArgs *args, int colspan) {
    args->colspan = colspan;
}


void ui_webview_args_set_rowspan(UiWebviewArgs *args, int rowspan) {
    args->rowspan = rowspan;
}


void ui_webview_args_set_name(UiWebviewArgs *args, const char *name) {
    args->name = strdup(name);
}


void ui_webview_args_set_style_class(UiWebviewArgs *args, const char *classname) {
    args->style_class = strdup(classname);
}

void ui_webview_args_set_varname(UiWebviewArgs *args, const char *varname) {
    args->varname = strdup(varname);
}

void ui_webview_args_set_value(UiWebviewArgs *args, UiGeneric *value) {
    args->value = value;
}

void ui_webview_args_set_groups(UiWebviewArgs *args, int *groups){
    // TODO
}

void ui_webview_args_free(UiWebviewArgs *args) {
    free((void*)args->name);
    free((void*)args->style_class);
    free((void*)args->varname);
    free((void*)args->groups);
    free(args);
}

mercurial