/* This file is part of the KDE project Copyright (C) 2005 Cedric Pasteur Copyright (C) 2004-2006 Jaroslaw Staniek This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "kexidbcheckbox.h" #include #include KexiDBCheckBox::KexiDBCheckBox(const QString &text, QWidget *parent, const char *name) : QCheckBox(text, parent, name), KexiFormDataItemInterface() , m_invalidState(false) , m_tristateChanged(false) , m_tristate(TristateDefault) { setFocusPolicy(QWidget::StrongFocus); updateTristate(); connect(this, SIGNAL(stateChanged(int)), this, SLOT(slotStateChanged(int))); } KexiDBCheckBox::~KexiDBCheckBox() { } void KexiDBCheckBox::setInvalidState( const QString& displayText ) { setEnabled(false); setState(NoChange); m_invalidState = true; //! @todo move this to KexiDataItemInterface::setInvalidStateInternal() ? if (focusPolicy() & TabFocus) setFocusPolicy(QWidget::ClickFocus); setText(displayText); } void KexiDBCheckBox::setEnabled(bool enabled) { if(enabled && m_invalidState) return; QCheckBox::setEnabled(enabled); } void KexiDBCheckBox::setReadOnly(bool readOnly) { setEnabled(!readOnly); } void KexiDBCheckBox::setValueInternal(const QVariant &add, bool removeOld) { Q_UNUSED(add); Q_UNUSED(removeOld); if (isTristateInternal()) setState( m_origValue.isNull() ? NoChange : (m_origValue.toBool() ? On : Off) ); else setState( m_origValue.toBool() ? On : Off ); } QVariant KexiDBCheckBox::value() { if (state()==NoChange) return QVariant(); return QVariant(state()==On, 1); } void KexiDBCheckBox::slotStateChanged(int ) { signalValueChanged(); } bool KexiDBCheckBox::valueIsNull() { return state() == NoChange; } bool KexiDBCheckBox::valueIsEmpty() { return false; } bool KexiDBCheckBox::isReadOnly() const { return !isEnabled(); } QWidget* KexiDBCheckBox::widget() { return this; } bool KexiDBCheckBox::cursorAtStart() { return false; //! \todo ? } bool KexiDBCheckBox::cursorAtEnd() { return false; //! \todo ? } void KexiDBCheckBox::clear() { setState(NoChange); } void KexiDBCheckBox::setTristate(KexiDBCheckBox::Tristate tristate) { m_tristateChanged = true; m_tristate = tristate; updateTristate(); } KexiDBCheckBox::Tristate KexiDBCheckBox::isTristate() const { return m_tristate; } bool KexiDBCheckBox::isTristateInternal() const { if (m_tristate == TristateDefault) return !dataSource().isEmpty(); return m_tristate == TristateOn; } void KexiDBCheckBox::updateTristate() { if (m_tristate == TristateDefault) { //! @todo the data source may be defined as NOT NULL... thus disallowing NULL state QCheckBox::setTristate( !dataSource().isEmpty() ); } else { QCheckBox::setTristate( m_tristate == TristateOn ); } } void KexiDBCheckBox::setDataSource(const QString &ds) { KexiFormDataItemInterface::setDataSource(ds); updateTristate(); } void KexiDBCheckBox::setDisplayDefaultValue(QWidget *widget, bool displayDefaultValue) { KexiFormDataItemInterface::setDisplayDefaultValue(widget, displayDefaultValue); // initialize display parameters for default / entered value KexiDisplayUtils::DisplayParameters * const params = displayDefaultValue ? m_displayParametersForDefaultValue : m_displayParametersForEnteredValue; // setFont(params->font); QPalette pal(palette()); // pal.setColor(QPalette::Active, QColorGroup::Text, params->textColor); pal.setColor(QPalette::Active, QColorGroup::Foreground, params->textColor); setPalette(pal); } #include "kexidbcheckbox.moc"