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.
204 lines
5.7 KiB
204 lines
5.7 KiB
/***************************************************************************
|
|
kmymoneycategory.cpp - description
|
|
-------------------
|
|
begin : Mon Jul 10 2006
|
|
copyright : (C) 2006 by Thomas Baumgart
|
|
email : Thomas Baumgart <ipwizard@users.sourceforge.net>
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// QT Includes
|
|
|
|
#include <tqrect.h>
|
|
#include <tqpainter.h>
|
|
#include <tqpalette.h>
|
|
#include <tqlayout.h>
|
|
#include <tqtimer.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// KDE Includes
|
|
|
|
#include <klocale.h>
|
|
#include <kpushbutton.h>
|
|
#include <kdebug.h>
|
|
#include <kiconloader.h>
|
|
#include <kguiitem.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Project Includes
|
|
|
|
#include "kmymoneycategory.h"
|
|
#include <kmymoney/mymoneyfile.h>
|
|
#include "kmymoneyaccountcompletion.h"
|
|
|
|
class KMyMoneyCategory::Private
|
|
{
|
|
public:
|
|
Private() :
|
|
splitButton(0),
|
|
frame(0),
|
|
recursive(false) {}
|
|
|
|
KPushButton* splitButton;
|
|
TQFrame* frame;
|
|
bool recursive;
|
|
};
|
|
|
|
KMyMoneyCategory::KMyMoneyCategory(TQWidget* parent, const char * name, bool splitButton) :
|
|
KMyMoneyCombo(true, parent, name),
|
|
d(new Private)
|
|
{
|
|
if(splitButton) {
|
|
d->frame = new TQFrame(0);
|
|
d->frame->setFocusProxy(this);
|
|
TQHBoxLayout* tqlayout = new TQHBoxLayout(d->frame);
|
|
// make sure not to use our own overridden version of reparent() here
|
|
KMyMoneyCombo::reparent(d->frame, getWFlags() & ~WType_Mask, TQPoint(0, 0), true);
|
|
if(parent)
|
|
d->frame->reparent(parent, TQPoint(0, 0), true);
|
|
|
|
// create button
|
|
KGuiItem splitButtonItem("",
|
|
TQIconSet(KGlobal::iconLoader()->loadIcon("split_transaction", KIcon::Small,
|
|
KIcon::SizeSmall)), "", "");
|
|
d->splitButton = new KPushButton(splitButtonItem, d->frame, "splitButton");
|
|
|
|
tqlayout->addWidget(this, 5);
|
|
tqlayout->addWidget(d->splitButton);
|
|
}
|
|
|
|
m_completion = new kMyMoneyAccountCompletion(this, 0);
|
|
connect(m_completion, TQT_SIGNAL(itemSelected(const TQString&)), this, TQT_SLOT(slotItemSelected(const TQString&)));
|
|
connect(this, TQT_SIGNAL(textChanged(const TQString&)), m_completion, TQT_SLOT(slotMakeCompletion(const TQString&)));
|
|
}
|
|
|
|
KMyMoneyCategory::~KMyMoneyCategory()
|
|
{
|
|
// make sure to wipe out the frame, button and tqlayout
|
|
if(d->frame && !d->frame->parentWidget())
|
|
d->frame->deleteLater();
|
|
|
|
delete d;
|
|
}
|
|
|
|
KPushButton* KMyMoneyCategory::splitButton(void) const
|
|
{
|
|
return d->splitButton;
|
|
}
|
|
|
|
void KMyMoneyCategory::setPalette(const TQPalette& palette)
|
|
{
|
|
if(d->frame)
|
|
d->frame->setPalette(palette);
|
|
KMyMoneyCombo::setPalette(palette);
|
|
}
|
|
|
|
void KMyMoneyCategory::reparent(TQWidget *parent, WFlags w, const TQPoint& pos, bool showIt)
|
|
{
|
|
if(d->frame)
|
|
d->frame->reparent(parent, w, pos, showIt);
|
|
else
|
|
KMyMoneyCombo::reparent(parent, w, pos, showIt);
|
|
}
|
|
|
|
kMyMoneyAccountSelector* KMyMoneyCategory::selector(void) const
|
|
{
|
|
return dynamic_cast<kMyMoneyAccountSelector*>(KMyMoneyCombo::selector());
|
|
}
|
|
|
|
void KMyMoneyCategory::setCurrentTextById(const TQString& id)
|
|
{
|
|
if(!id.isEmpty())
|
|
setCurrentText(MyMoneyFile::instance()->accountToCategory(id));
|
|
else
|
|
setCurrentText();
|
|
setSuppressObjectCreation(false);
|
|
}
|
|
|
|
void KMyMoneyCategory::slotItemSelected(const TQString& id)
|
|
{
|
|
setCurrentTextById(id);
|
|
|
|
m_completion->hide();
|
|
|
|
if(m_id != id) {
|
|
m_id = id;
|
|
emit itemSelected(id);
|
|
}
|
|
}
|
|
|
|
void KMyMoneyCategory::focusOutEvent(TQFocusEvent *ev)
|
|
{
|
|
if(isSplitTransaction()) {
|
|
KComboBox::focusOutEvent(ev);
|
|
} else {
|
|
KMyMoneyCombo::focusOutEvent(ev);
|
|
}
|
|
}
|
|
|
|
void KMyMoneyCategory::focusInEvent(TQFocusEvent *ev)
|
|
{
|
|
KMyMoneyCombo::focusInEvent(ev);
|
|
|
|
// make sure, we get a clean state before we automagically move the focus to
|
|
// some other widget (like for 'split transaction'). We do this by delaying
|
|
// the emission of the focusIn signal until the next run of the event loop.
|
|
TQTimer::singleShot(0, this, TQT_SIGNAL(focusIn()));
|
|
}
|
|
|
|
void KMyMoneyCategory::setSplitTransaction(void)
|
|
{
|
|
setCurrentText(i18n("Split transaction (category replacement)", "Split transaction"));
|
|
setSuppressObjectCreation(true);
|
|
}
|
|
|
|
bool KMyMoneyCategory::isSplitTransaction(void) const
|
|
{
|
|
return currentText() == i18n("Split transaction (category replacement)", "Split transaction");
|
|
}
|
|
|
|
void KMyMoneyCategory::setEnabled(bool enable)
|
|
{
|
|
if(d->recursive || !d->frame) {
|
|
KMyMoneyCombo::setEnabled(enable);
|
|
|
|
} else if(d->frame) {
|
|
d->recursive = true;
|
|
d->frame->setEnabled(enable);
|
|
d->recursive = false;
|
|
}
|
|
}
|
|
|
|
void KMyMoneyCategory::setDisabled(bool disable)
|
|
{
|
|
setEnabled(!disable);
|
|
}
|
|
|
|
KMyMoneySecurity::KMyMoneySecurity(TQWidget* parent, const char * name) :
|
|
KMyMoneyCategory(parent, name, false)
|
|
{
|
|
}
|
|
|
|
KMyMoneySecurity::~KMyMoneySecurity()
|
|
{
|
|
}
|
|
|
|
void KMyMoneySecurity::setCurrentTextById(const TQString& id)
|
|
{
|
|
if(!id.isEmpty())
|
|
KMyMoneyCategory::setCurrentText(MyMoneyFile::instance()->account(id).name());
|
|
else
|
|
KMyMoneyCategory::setCurrentText();
|
|
}
|
|
|
|
#include "kmymoneycategory.moc"
|