You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kexi/plugins/forms/widgets/kexidbcheckbox.cpp

176 lines
4.2 KiB

/* This file is part of the KDE project
Copyright (C) 2005 Cedric Pasteur <cedric.pasteur@free.fr>
Copyright (C) 2004-2006 Jaroslaw Staniek <js@iidea.pl>
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 <kexiutils/utils.h>
#include <kexidb/queryschema.h>
KexiDBCheckBox::KexiDBCheckBox(const TQString &text, TQWidget *parent, const char *name)
: TQCheckBox(text, parent, name), KexiFormDataItemInterface()
, m_invalidState(false)
, m_tristateChanged(false)
, m_tristate(TristateDefault)
{
setFocusPolicy(TQ_StrongFocus);
updateTristate();
connect(this, TQT_SIGNAL(stateChanged(int)), this, TQT_SLOT(slotStateChanged(int)));
}
KexiDBCheckBox::~KexiDBCheckBox()
{
}
void KexiDBCheckBox::setInvalidState( const TQString& displayText )
{
setEnabled(false);
setState(NoChange);
m_invalidState = true;
//! @todo move this to KexiDataItemInterface::setInvalidStateInternal() ?
if (focusPolicy() & TQ_TabFocus)
setFocusPolicy(TQ_ClickFocus);
setText(displayText);
}
void
KexiDBCheckBox::setEnabled(bool enabled)
{
if(enabled && m_invalidState)
return;
TQCheckBox::setEnabled(enabled);
}
void
KexiDBCheckBox::setReadOnly(bool readOnly)
{
setEnabled(!readOnly);
}
void KexiDBCheckBox::setValueInternal(const TQVariant &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 );
}
TQVariant
KexiDBCheckBox::value()
{
if (state()==NoChange)
return TQVariant();
return TQVariant(state()==On);
}
void KexiDBCheckBox::slotStateChanged(int )
{
signalValueChanged();
}
bool KexiDBCheckBox::valueIsNull()
{
return state() == NoChange;
}
bool KexiDBCheckBox::valueIsEmpty()
{
return false;
}
bool KexiDBCheckBox::isReadOnly() const
{
return !isEnabled();
}
TQWidget*
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
TQCheckBox::setTristate( !dataSource().isEmpty() );
}
else {
TQCheckBox::setTristate( m_tristate == TristateOn );
}
}
void KexiDBCheckBox::setDataSource(const TQString &ds)
{
KexiFormDataItemInterface::setDataSource(ds);
updateTristate();
}
void KexiDBCheckBox::setDisplayDefaultValue(TQWidget *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);
TQPalette pal(palette());
// pal.setColor(TQPalette::Active, TQColorGroup::Text, params->textColor);
pal.setColor(TQPalette::Active, TQColorGroup::Foreground, params->textColor);
setPalette(pal);
}
#include "kexidbcheckbox.moc"