From b3767ccfb8129c89bd1dbf5fe3a76edeabe3a827 Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 10 Mar 2011 10:16:42 +0000 Subject: New checkgroupbox widget. --- client/widgets/checkgroupbox.cc | 139 ++++++++++++++++++++++++++++++++++++++++ client/widgets/checkgroupbox.h | 62 ++++++++++++++++++ client/widgets/widget.cc | 5 ++ 3 files changed, 206 insertions(+) create mode 100644 client/widgets/checkgroupbox.cc create mode 100644 client/widgets/checkgroupbox.h (limited to 'client/widgets') diff --git a/client/widgets/checkgroupbox.cc b/client/widgets/checkgroupbox.cc new file mode 100644 index 0000000..becb151 --- /dev/null +++ b/client/widgets/checkgroupbox.cc @@ -0,0 +1,139 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set et sw=2 ts=2: */ +/*************************************************************************** + * checkgroupbox.cc + * + * Thu Mar 10 10:51:10 CET 2011 + * Copyright 2011 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Pracro is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "checkgroupbox.h" + +#include + +#include "common.h" + +CheckGroupBox::CheckGroupBox(QDomNode &node, MacroWindow *macrowindow) + : Widget(node, macrowindow) +{ + // + // From GroupBox + // + groupbox = new QGroupBox(); + groupbox->setCheckable(true); + widget = groupbox; + + setCommonAttributes(groupbox, node); + setCommonLayout(groupbox, node); + + QDomElement elem = node.toElement(); + + if(elem.hasAttribute("caption")) { + groupbox->setTitle(elem.attribute("caption")); + } + + addChildren(node, groupbox->layout()); + + // + // From CheckBox + // + changedByUser = true; + + if(elem.hasAttribute("truevalue")) { + truevalue = elem.attribute("truevalue"); + } else { + truevalue = "true"; + } + + if(elem.hasAttribute("falsevalue")) { + falsevalue = elem.attribute("falsevalue"); + } else { + falsevalue = "false"; + } + + connect(groupbox, SIGNAL(stateChanged(int)), this, SLOT(state_change(int))); +} + +CheckGroupBox::~CheckGroupBox() +{ + // delete groupbox; +} + +QString CheckGroupBox::value() +{ + if(groupbox->isChecked()) return truevalue; + return falsevalue; +} + +void CheckGroupBox::setValue(QString value, QString source) +{ + if(isUserSource(source)) emit wasChanged(); + + changedByUser = false; + + bool old = groupbox->isChecked(); + + if(value == truevalue) { + groupbox->setChecked(true); + } else if(value == falsevalue) { + groupbox->setChecked(false); + } else { + printf("Unknown checkbox value: %s\n", value.toStdString().c_str()); + } + + // If set operation did not change the value we must invocate the code manually. + if(old == groupbox->isChecked()) state_change(0); + + // setInitialValue(value); + + changedByUser = true; +} + +void CheckGroupBox::state_change(int) +{ + emit eventOnChange(); + if(changedByUser) emit wasChanged(); +} + +bool CheckGroupBox::checked() +{ + return value() == truevalue; +} + +void CheckGroupBox::setChecked(bool checked) +{ + setValue(checked ? truevalue : falsevalue); +} + +void CheckGroupBox::setWdgValid(bool valid) +{ + QPalette palette; + + if(valid) { + // valid string + palette.setBrush(QPalette::Base, QBrush(QColor(255, 255, 255))); + } else { + // invalid string + palette.setBrush(QPalette::Base, QBrush(QColor(230, 200, 200))); + } + + groupbox->setPalette(palette); +} diff --git a/client/widgets/checkgroupbox.h b/client/widgets/checkgroupbox.h new file mode 100644 index 0000000..db6a063 --- /dev/null +++ b/client/widgets/checkgroupbox.h @@ -0,0 +1,62 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set et sw=2 ts=2: */ +/*************************************************************************** + * checkgroupbox.h + * + * Thu Mar 10 10:51:10 CET 2011 + * Copyright 2011 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Pracro is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#ifndef __PRACRO_CHECKGROUPBOX_H__ +#define __PRACRO_CHECKGROUPBOX_H__ + +#include "widget.h" +#include + +class QGroupBox; +class CheckGroupBox : public Widget +{ +Q_OBJECT +public: + CheckGroupBox(QDomNode &node, MacroWindow *macrowindow); + ~CheckGroupBox(); + + QString value(); + void setValue(QString value, QString source = ""); + + void setWdgValid(bool valid); + + bool checked(); + void setChecked(bool checked); + +public slots: + void state_change(int); + +private: + QString truevalue; + QString falsevalue; + + bool changedByUser; + + QGroupBox *groupbox; +}; + +#endif/*__PRACRO_CHECKGROUPBOX_H__*/ diff --git a/client/widgets/widget.cc b/client/widgets/widget.cc index dbce00c..1fefae8 100644 --- a/client/widgets/widget.cc +++ b/client/widgets/widget.cc @@ -319,6 +319,11 @@ void Widget::createWidget(QDomNode &xml_node, QLayout *layout) widget = frame; } + } else if(xml_elem.tagName() == "checkgroupbox") { + + CheckGroupBox *chkgrpbox = new CheckGroupBox(xml_elem, macrowindow); + widget = chkgrpbox; + } else if(xml_elem.tagName() == "label") { Label *label = new Label(xml_elem, macrowindow); -- cgit v1.2.3