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.
364 lines
11 KiB
364 lines
11 KiB
/***************************************************************************
|
|
knewuserwizard.cpp
|
|
-------------------
|
|
begin : Sat Feb 18 2006
|
|
copyright : (C) 2006 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. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include <locale.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// QT Includes
|
|
|
|
#include <tqpixmap.h>
|
|
#include <tqbitmap.h>
|
|
#include <tqcheckbox.h>
|
|
#include <tqpushbutton.h>
|
|
#include <tqdir.h>
|
|
#include <tqlabel.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// KDE Includes
|
|
|
|
#include <tdelocale.h>
|
|
#include <tdelistview.h>
|
|
#include <kstandarddirs.h>
|
|
#include <klineedit.h>
|
|
#include <ktextedit.h>
|
|
#include <kuser.h>
|
|
#include <kurlrequester.h>
|
|
#include <tdeio/netaccess.h>
|
|
#include <kurl.h>
|
|
#include <tdeabc/addressee.h>
|
|
#include <tdeabc/stdaddressbook.h>
|
|
#include <tdemessagebox.h>
|
|
#include <kactivelabel.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Project Includes
|
|
|
|
#include "knewuserwizard.h"
|
|
#include "knewuserwizard_p.h"
|
|
#include <kmymoney/mymoneysecurity.h>
|
|
#include <kmymoney/mymoneyfile.h>
|
|
#include <kmymoney/kguiutils.h>
|
|
#include <kmymoney/kmymoneyaccounttree.h>
|
|
#include <kmymoney/mymoneypayee.h>
|
|
#include <kmymoney/mymoneymoney.h>
|
|
#include <kmymoney/mymoneyinstitution.h>
|
|
#include <kmymoney/mymoneyaccount.h>
|
|
#include <kmymoney/kmymoneydateinput.h>
|
|
#include <kmymoney/kmymoneyedit.h>
|
|
#include <kmymoney/kaccounttemplateselector.h>
|
|
|
|
#include "../../kmymoney2.h"
|
|
#include "../../kmymoneyglobalsettings.h"
|
|
|
|
using namespace NewUserWizard;
|
|
|
|
static int stepCount;
|
|
|
|
NewUserWizard::Wizard::Wizard(TQWidget *parent, const char *name, bool modal, WFlags flags) :
|
|
KMyMoneyWizard(parent, name, modal, flags),
|
|
m_introPage(0)
|
|
{
|
|
bool isFirstTime = KMyMoneyGlobalSettings::firstTimeRun();
|
|
|
|
stepCount = 1;
|
|
|
|
setTitle(i18n("KMyMoney New File Setup"));
|
|
if(isFirstTime)
|
|
addStep(i18n("Introduction"));
|
|
addStep(i18n("Personal Data"));
|
|
addStep(i18n("Select Currency"));
|
|
addStep(i18n("Select Accounts"));
|
|
addStep(i18n("Set preferences"));
|
|
addStep(i18n("Finish"));
|
|
|
|
if(isFirstTime)
|
|
m_introPage = new IntroPage(this);
|
|
m_generalPage = new GeneralPage(this);
|
|
m_currencyPage = new CurrencyPage(this);
|
|
m_accountPage = new AccountPage(this);
|
|
m_categoriesPage = new CategoriesPage(this);
|
|
m_preferencePage = new PreferencePage(this);
|
|
m_filePage = new FilePage(this);
|
|
|
|
m_accountPage->m_haveCheckingAccountButton->setChecked(true);
|
|
if(isFirstTime)
|
|
setFirstPage(m_introPage);
|
|
else
|
|
setFirstPage(m_generalPage);
|
|
|
|
setHelpContext("firsttime-3");
|
|
}
|
|
|
|
MyMoneyPayee NewUserWizard::Wizard::user(void) const
|
|
{
|
|
return m_generalPage->user();
|
|
}
|
|
|
|
TQString NewUserWizard::Wizard::url(void) const
|
|
{
|
|
return m_filePage->m_dataFileEdit->url();
|
|
}
|
|
|
|
MyMoneyInstitution NewUserWizard::Wizard::institution(void) const
|
|
{
|
|
MyMoneyInstitution inst;
|
|
if(m_accountPage->m_haveCheckingAccountButton->isChecked()) {
|
|
if(m_accountPage->m_institutionNameEdit->text().length()) {
|
|
inst.setName(m_accountPage->m_institutionNameEdit->text());
|
|
if(m_accountPage->m_institutionNumberEdit->text().length())
|
|
inst.setSortcode(m_accountPage->m_institutionNumberEdit->text());
|
|
}
|
|
}
|
|
return inst;
|
|
}
|
|
|
|
MyMoneyAccount NewUserWizard::Wizard::account(void) const
|
|
{
|
|
MyMoneyAccount acc;
|
|
if(m_accountPage->m_haveCheckingAccountButton->isChecked()) {
|
|
acc.setName(m_accountPage->m_accountNameEdit->text());
|
|
if(m_accountPage->m_accountNumberEdit->text().length())
|
|
acc.setNumber(m_accountPage->m_accountNumberEdit->text());
|
|
acc.setOpeningDate(m_accountPage->m_openingDateEdit->date());
|
|
acc.setCurrencyId(m_baseCurrency.id());
|
|
acc.setAccountType(MyMoneyAccount::Checkings);
|
|
}
|
|
return acc;
|
|
}
|
|
|
|
MyMoneyMoney NewUserWizard::Wizard::openingBalance(void) const
|
|
{
|
|
return m_accountPage->m_openingBalanceEdit->value();
|
|
}
|
|
|
|
MyMoneySecurity NewUserWizard::Wizard::baseCurrency(void) const
|
|
{
|
|
return m_baseCurrency;
|
|
}
|
|
|
|
TQValueList<MyMoneyTemplate> NewUserWizard::Wizard::templates(void) const
|
|
{
|
|
return m_categoriesPage->selectedTemplates();
|
|
}
|
|
|
|
IntroPage::IntroPage(Wizard* wizard, const char* name) :
|
|
KIntroPageDecl(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
}
|
|
|
|
KMyMoneyWizardPage* IntroPage::nextPage(void) const
|
|
{
|
|
return m_wizard->m_generalPage;
|
|
}
|
|
|
|
GeneralPage::GeneralPage(Wizard* wizard, const char* name) :
|
|
UserInfo(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
m_userNameEdit->setFocus();
|
|
TDEABC::StdAddressBook *ab = TDEABC::StdAddressBook::self(true);
|
|
connect(ab, TQT_SIGNAL(addressBookChanged(AddressBook*)), this, TQT_SLOT(slotAddressBookLoaded()));
|
|
connect(m_loadAddressButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotLoadFromKABC()));
|
|
m_loadAddressButton->setEnabled(false);
|
|
}
|
|
|
|
void GeneralPage::slotAddressBookLoaded(void)
|
|
{
|
|
TDEABC::StdAddressBook *ab = TDEABC::StdAddressBook::self();
|
|
if (!ab)
|
|
return;
|
|
|
|
m_loadAddressButton->setEnabled(!ab->whoAmI().isEmpty());
|
|
}
|
|
|
|
void GeneralPage::slotLoadFromKABC(void)
|
|
{
|
|
TDEABC::StdAddressBook *ab = TDEABC::StdAddressBook::self();
|
|
if (!ab)
|
|
return;
|
|
|
|
TDEABC::Addressee addr = ab->whoAmI();
|
|
if ( addr.isEmpty() ) {
|
|
KMessageBox::sorry(this, i18n("Unable to load data, because no contact has been associated with the owner of the standard addressbook."), i18n("Addressbook import"));
|
|
return;
|
|
}
|
|
|
|
m_userNameEdit->setText( addr.formattedName() );
|
|
m_emailEdit->setText( addr.preferredEmail() );
|
|
|
|
TDEABC::PhoneNumber phone = addr.phoneNumber( TDEABC::PhoneNumber::Home );
|
|
m_telephoneEdit->setText( phone.number() );
|
|
|
|
TDEABC::Address a = addr.address( TDEABC::Address::Home );
|
|
TQString sep;
|
|
if(!a.country().isEmpty() && !a.region().isEmpty())
|
|
sep = " / ";
|
|
m_countyEdit->setText(TQString("%1%2%3").arg(a.country(), sep, a.region()));
|
|
m_postcodeEdit->setText( a.postalCode() );
|
|
m_townEdit->setText( a.locality() );
|
|
m_streetEdit->setText( a.street() );
|
|
}
|
|
|
|
KMyMoneyWizardPage* GeneralPage::nextPage(void) const
|
|
{
|
|
return m_wizard->m_currencyPage;
|
|
}
|
|
|
|
CurrencyPage::CurrencyPage(Wizard* wizard, const char* name) :
|
|
Currency(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
TQListViewItem *first = 0;
|
|
TQValueList<MyMoneySecurity> list = MyMoneyFile::instance()->currencyList();
|
|
TQValueList<MyMoneySecurity>::const_iterator it;
|
|
|
|
TQString localCurrency(localeconv()->int_curr_symbol);
|
|
localCurrency.truncate(3);
|
|
|
|
TQString baseCurrency = MyMoneyFile::instance()->baseCurrency().id();
|
|
|
|
// construct a transparent 16x16 pixmap
|
|
TQPixmap empty(16, 16);
|
|
empty.setMask(TQBitmap(16, 16, true));
|
|
|
|
m_currencyList->clear();
|
|
for(it = list.begin(); it != list.end(); ++it) {
|
|
TQListViewItem* p = insertCurrency(*it);
|
|
if((*it).id() == baseCurrency) {
|
|
first = p;
|
|
p->setPixmap(0, TQPixmap( locate("icon","hicolor/16x16/apps/kmymoney2.png")));
|
|
} else {
|
|
p->setPixmap(0, empty);
|
|
}
|
|
if(!first && (*it).id() == localCurrency)
|
|
first = p;
|
|
}
|
|
|
|
if(first == 0)
|
|
first = m_currencyList->firstChild();
|
|
if(first != 0) {
|
|
m_currencyList->setCurrentItem(first);
|
|
m_currencyList->setSelected(first, true);
|
|
m_currencyList->ensureItemVisible(first);
|
|
}
|
|
}
|
|
|
|
void CurrencyPage::enterPage(void)
|
|
{
|
|
m_currencyList->setFocus();
|
|
}
|
|
|
|
|
|
KMyMoneyWizardPage* CurrencyPage::nextPage(void) const
|
|
{
|
|
m_wizard->m_baseCurrency = MyMoneyFile::instance()->security(selectedCurrency());
|
|
m_wizard->m_accountPage->m_accountCurrencyLabel->setText(m_wizard->m_baseCurrency.tradingSymbol());
|
|
return m_wizard->m_accountPage;
|
|
}
|
|
|
|
AccountPage::AccountPage(Wizard* wizard, const char* name) :
|
|
KAccountPageDecl(wizard, name),
|
|
WizardPage<Wizard>(stepCount, this, wizard, name) // don't inc. the step count here
|
|
{
|
|
m_mandatoryGroup->add(m_accountNameEdit);
|
|
connect(m_mandatoryGroup, TQT_SIGNAL(stateChanged()), object(), TQT_SIGNAL(completeStateChanged()));
|
|
connect(m_haveCheckingAccountButton, TQT_SIGNAL(toggled(bool)), object(), TQT_SIGNAL(completeStateChanged()));
|
|
m_accountNameEdit->setFocus();
|
|
m_openingDateEdit->setDate(TQDate(TQDate::currentDate().year(),1,1));
|
|
}
|
|
|
|
KMyMoneyWizardPage* AccountPage::nextPage(void) const
|
|
{
|
|
return m_wizard->m_categoriesPage;
|
|
}
|
|
|
|
bool AccountPage::isComplete(void) const
|
|
{
|
|
return !m_haveCheckingAccountButton->isChecked() || m_mandatoryGroup->isEnabled();
|
|
}
|
|
|
|
CategoriesPage::CategoriesPage(Wizard* wizard, const char* name) :
|
|
Accounts(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
}
|
|
|
|
KMyMoneyWizardPage* CategoriesPage::nextPage(void) const
|
|
{
|
|
return m_wizard->m_preferencePage;
|
|
}
|
|
|
|
TQValueList<MyMoneyTemplate> CategoriesPage::selectedTemplates(void) const
|
|
{
|
|
return m_templateSelector->selectedTemplates();
|
|
}
|
|
|
|
PreferencePage::PreferencePage(Wizard* wizard, const char* name) :
|
|
KPreferencePageDecl(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
connect(m_openConfigButton, TQT_SIGNAL(clicked()), kmymoney2, TQT_SLOT(slotSettings()));
|
|
}
|
|
|
|
KMyMoneyWizardPage* PreferencePage::nextPage(void) const
|
|
{
|
|
return m_wizard->m_filePage;
|
|
}
|
|
|
|
FilePage::FilePage(Wizard* wizard, const char* name) :
|
|
KFilePageDecl(wizard),
|
|
WizardPage<Wizard>(stepCount++, this, wizard, name)
|
|
{
|
|
m_mandatoryGroup->add(m_dataFileEdit->lineEdit());
|
|
connect(m_mandatoryGroup, TQT_SIGNAL(stateChanged()), object(), TQT_SIGNAL(completeStateChanged()));
|
|
|
|
KUser user;
|
|
m_dataFileEdit->setShowLocalProtocol(false);
|
|
m_dataFileEdit->setURL(TQString("%1/%2.kmy").arg(TQDir::homeDirPath(), user.loginName()));
|
|
|
|
// allow selection of non-existing files
|
|
m_dataFileEdit->setMode(KFile::File);
|
|
}
|
|
|
|
bool FilePage::isComplete(void) const
|
|
{
|
|
bool rc = m_mandatoryGroup->isEnabled();
|
|
m_existingFileLabel->hide();
|
|
m_finishLabel->show();
|
|
if(rc) {
|
|
// if a filename is present, check that
|
|
// a) the file does not exist
|
|
// b) the directory does exist
|
|
rc = !TDEIO::NetAccess::exists(m_dataFileEdit->url(), false, m_wizard);
|
|
if(rc) {
|
|
TQRegExp exp("(.*)/(.*)");
|
|
rc = false;
|
|
if(exp.search(m_dataFileEdit->url()) != -1) {
|
|
if(exp.cap(2).length() > 0) {
|
|
rc = TDEIO::NetAccess::exists(exp.cap(1), true, m_wizard);
|
|
}
|
|
}
|
|
}
|
|
m_existingFileLabel->setHidden(rc);
|
|
m_finishLabel->setShown(rc);
|
|
}
|
|
return rc;
|
|
}
|
|
|
|
#include "knewuserwizard.moc"
|