/* -*- 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(toggled(bool)), this, SLOT(state_change(bool))); } 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(bool) { 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); } bool CheckGroupBox::setKeyboardFocus() { QVector< Widget* >::iterator i = children.begin(); while(i != children.end()) { Widget *w = *i; if(w) { if(w->setKeyboardFocus()) return true; } i++; } return false; }