Wed, 07 Jan 2015 17:25:33 +0100
added button and box container (Qt)
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2014 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 <stdio.h> #include "container.h" #include <QSpacerItem> /* -------------------- UiBoxContainer -------------------- */ UiBoxContainer::UiBoxContainer(QBoxLayout* box) { 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); } 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); } /* -------------------- layout functions -------------------- */ void ui_layout_fill(UiObject *obj, UiBool fill) { UiContainer *ct = uic_get_current_container(obj); ct->layout.fill = ui_bool2lb(fill); }