--- a/ui/qt/container.cpp Wed Mar 26 20:27:20 2025 +0100 +++ b/ui/qt/container.cpp Wed Mar 26 20:39:04 2025 +0100 @@ -33,224 +33,3 @@ #include <QStackedWidget> -/* -------------------- UiBoxContainer -------------------- */ - -UiBoxContainer::UiBoxContainer(QBoxLayout* box) { - this->current = NULL; - this->menu = NULL; - this->box = box; - box->setContentsMargins(QMargins(0,0,0,0)); - box->setSpacing(0); - - ui_reset_layout(layout); -} - -void UiBoxContainer::add(QWidget* widget, bool fill) { - if(layout.fill != UI_LAYOUT_UNDEFINED) { - fill = ui_lb2bool(layout.fill); - } - - if(hasStretchedWidget && fill) { - fill = false; - fprintf(stderr, "UiError: container has 2 filled widgets"); - } - - box->addWidget(widget, fill); - - if(!hasStretchedWidget) { - QSpacerItem *newspace = new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); - box->removeItem(space); - box->addSpacerItem(newspace); - space = newspace; - } - - if(fill) { - hasStretchedWidget = true; - } - ui_reset_layout(layout); - current = widget; -} - -UIWIDGET ui_box(UiObject *obj, QBoxLayout::Direction dir) { - UiContainer *ct = uic_get_current_container(obj); - QWidget *widget = new QWidget(); - QBoxLayout *box = new QBoxLayout(dir); - widget->setLayout(box); - ct->add(widget, true); - - UiObject *newobj = uic_object_new(obj, widget); - newobj->container = new UiBoxContainer(box); - uic_obj_add(obj, newobj); - - return widget; -} - -UIWIDGET ui_vbox(UiObject *obj) { - return ui_box(obj, QBoxLayout::TopToBottom); -} - -UIWIDGET ui_hbox(UiObject *obj) { - return ui_box(obj, QBoxLayout::LeftToRight); -} - - - -/* -------------------- UiGridContainer -------------------- */ - -UiGridContainer::UiGridContainer(QGridLayout* grid, int margin, int columnspacing, int rowspacing) { - this->current = NULL; - this->menu = NULL; - this->grid = grid; - grid->setContentsMargins(QMargins(margin, margin, margin, margin)); - grid->setHorizontalSpacing(columnspacing); - grid->setVerticalSpacing(rowspacing); - ui_reset_layout(layout); -} - -void UiGridContainer::add(QWidget* widget, bool fill) { - if(layout.newline) { - x = 0; - y++; - } - - Qt::Alignment alignment = Qt::AlignTop; - grid->setColumnStretch(x, layout.hexpand ? 1 : 0); - if(layout.vexpand) { - grid->setRowStretch(y, 1); - alignment = 0; - } else { - grid->setRowStretch(y, 0); - } - - int gwidth = layout.gridwidth > 0 ? layout.gridwidth : 1; - - grid->addWidget(widget, y, x, 1, gwidth, alignment); - x += gwidth; - - ui_reset_layout(layout); - current = widget; -} - -UIWIDGET ui_grid(UiObject *obj) { - return ui_grid_sp(obj, 0, 0, 0); -} - -UIWIDGET ui_grid_sp(UiObject *obj, int margin, int columnspacing, int rowspacing) { - UiContainer *ct = uic_get_current_container(obj); - QWidget *widget = new QWidget(); - QGridLayout *grid = new QGridLayout(); - widget->setLayout(grid); - ct->add(widget, true); - - UiObject *newobj = uic_object_new(obj, widget); - newobj->container = new UiGridContainer(grid, margin, columnspacing, rowspacing); - uic_obj_add(obj, newobj); - - return widget; -} - - -/* -------------------- UiTabViewContainer -------------------- */ - -UiTabViewContainer::UiTabViewContainer(QTabWidget* tabwidget) { - this->current = NULL; - this->menu = NULL; - this->tabwidget = tabwidget; -} - -void UiTabViewContainer::add(QWidget* widget, bool fill) { - QString str = QString::fromUtf8(layout.label); - tabwidget->addTab(widget, str); -} - - -/* -------------------- UiStackContainer -------------------- */ - -UiStackContainer::UiStackContainer(QStackedWidget *stack) { - this->stack = stack; -} - -void UiStackContainer::add(QWidget* widget, bool fill) { - stack->addWidget(widget); - current = widget; -} - -UIWIDGET ui_tabview(UiObject *obj) { - QStackedWidget *tabwidget = new QStackedWidget(); - - UiContainer *ct = uic_get_current_container(obj); - ct->add(tabwidget, true); - - UiObject *tabviewobj = uic_object_new(obj, tabwidget); - tabviewobj->container = new UiStackContainer(tabwidget); - uic_obj_add(obj, tabviewobj); - - return tabwidget; -} - -void ui_tab(UiObject *obj, char *title) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.label = title; - ui_vbox(obj); -} - -void ui_select_tab(UIWIDGET tabview, int tab) { - QStackedWidget *w = (QStackedWidget*)tabview; - w->setCurrentIndex(tab); -} - - -/* -------------------- UiSidebarContainer -------------------- */ - -UiSidebarContainer::UiSidebarContainer(QSplitter *splitter) { - this->splitter = splitter; -} - -UIWIDGET ui_sidebar(UiObject *obj) { - QSplitter *splitter = new QSplitter(Qt::Horizontal); - UiContainer *ct = uic_get_current_container(obj); - ct->add(splitter, true); - - UiObject *left = uic_object_new(obj, splitter); - left->container = new UiSidebarContainer(splitter); - - UiObject *right = uic_object_new(obj, splitter); - right->container = new UiSidebarContainer(splitter); - - uic_obj_add(obj, right); - uic_obj_add(obj, left); - - return splitter; -} - -void UiSidebarContainer::add(QWidget *widget, bool fill) { - splitter->addWidget(widget); -} - - -/* -------------------- layout functions -------------------- */ - -void ui_layout_fill(UiObject *obj, UiBool fill) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.fill = ui_bool2lb(fill); -} - -void ui_layout_hexpand(UiObject *obj, UiBool expand) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.hexpand = expand; -} - -void ui_layout_vexpand(UiObject *obj, UiBool expand) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.vexpand = expand; -} - -void ui_layout_gridwidth(UiObject *obj, int width) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.gridwidth = width; -} - -void ui_newline(UiObject *obj) { - UiContainer *ct = uic_get_current_container(obj); - ct->layout.newline = TRUE; -}