File indexing completed on 2024-05-19 05:08:42

0001 /*
0002     SPDX-FileCopyrightText: 2006 Thomas Baumagrt <ipwizard@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com>
0004     SPDX-FileCopyrightText: 2021 Dawid Wróbel <me@dawidwrobel.com>
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "kmymoneywizard.h"
0009 #include "kmymoneywizard_p.h"
0010 
0011 // ----------------------------------------------------------------------------
0012 // QT Includes
0013 
0014 #include <QLabel>
0015 #include <QFont>
0016 #include <QList>
0017 #include <QPushButton>
0018 
0019 // ----------------------------------------------------------------------------
0020 // KDE Includes
0021 
0022 #include <KHelpClient>
0023 
0024 // ----------------------------------------------------------------------------
0025 // Project Includes
0026 
0027 #include "kmymoneywizardpage.h"
0028 
0029 
0030 KMyMoneyWizard::KMyMoneyWizard(QWidget *parent, bool modal, Qt::WindowFlags f) :
0031     QDialog(parent, f),
0032     d_ptr(new KMyMoneyWizardPrivate(this))
0033 {
0034     Q_D(KMyMoneyWizard);
0035     d->init(modal);
0036 }
0037 
0038 KMyMoneyWizard::KMyMoneyWizard(KMyMoneyWizardPrivate &dd, QWidget* parent, bool modal, Qt::WindowFlags f) :
0039     QDialog(parent, f),
0040     d_ptr(&dd)
0041 {
0042     Q_D(KMyMoneyWizard);
0043     d->init(modal);
0044 }
0045 
0046 KMyMoneyWizard::~KMyMoneyWizard()
0047 {
0048     Q_D(KMyMoneyWizard);
0049     delete d;
0050 }
0051 
0052 void KMyMoneyWizard::setTitle(const QString& txt)
0053 {
0054     this->setWindowTitle(txt);
0055 }
0056 
0057 void KMyMoneyWizard::addStep(const QString& text)
0058 {
0059     Q_D(KMyMoneyWizard);
0060     QLabel* step = new QLabel(text, d->m_stepFrame);
0061     step->setFrameStyle(QFrame::Panel | QFrame::Raised);
0062     step->setAlignment(Qt::AlignHCenter);
0063     step->setFrameStyle(QFrame::Box | QFrame::Sunken);
0064     step->setMargin(2);
0065     step->setPalette(d->m_stepPalette);
0066 
0067     d->m_steps.append(step);
0068     d->m_stepLayout->insertWidget(d->m_steps.count(), step);
0069 
0070     QFont font(step->font());
0071     font.setBold(true);
0072     QFontMetrics fm(font);
0073     int w = fm.horizontalAdvance(text) + 30;
0074     if (d->m_stepFrame->minimumWidth() < w) {
0075         d->m_stepFrame->setMinimumWidth(w);
0076     }
0077 }
0078 
0079 QList<KMyMoneyWizardPage*> KMyMoneyWizard::historyPages() const
0080 {
0081     Q_D(const KMyMoneyWizard);
0082     return d->m_history;
0083 }
0084 
0085 void KMyMoneyWizard::reselectStep()
0086 {
0087     Q_D(KMyMoneyWizard);
0088     d->selectStep(d->m_step);
0089 }
0090 
0091 void KMyMoneyWizard::setHelpContext(const QString& ctx)
0092 {
0093     Q_D(KMyMoneyWizard);
0094     d->m_helpContext = ctx;
0095 }
0096 
0097 void KMyMoneyWizard::backButtonClicked()
0098 {
0099     Q_D(KMyMoneyWizard);
0100     KMyMoneyWizardPage* oldPage = d->m_history.back();
0101     d->m_history.pop_back();
0102     oldPage->leavePage();
0103     oldPage->resetPage();
0104     d->switchPage(oldPage);
0105 }
0106 
0107 void KMyMoneyWizard::nextButtonClicked()
0108 {
0109     Q_D(KMyMoneyWizard);
0110     // make sure it is really complete. Some widgets only change state during focusOutEvent,
0111     // so we just create such an animal by changing the focus to the next button and
0112     // check again for completeness
0113     d->m_nextButton->setFocus();
0114     KMyMoneyWizardPage* oldPage = d->m_history.back();
0115     if (oldPage->isComplete()) {
0116         KMyMoneyWizardPage* newPage = oldPage->nextPage();
0117         d->m_history.append(newPage);
0118         newPage->enterPage();
0119         newPage->resetPage();
0120         d->switchPage(oldPage);
0121     }
0122 }
0123 
0124 void KMyMoneyWizard::helpButtonClicked()
0125 {
0126     Q_D(KMyMoneyWizard);
0127     KMyMoneyWizardPage* currentPage = d->m_history.back();
0128     QString ctx = currentPage->helpContext();
0129     if (ctx.isEmpty())
0130         ctx = d->m_helpContext;
0131     KHelpClient::invokeHelp(ctx);
0132 }
0133 
0134 void KMyMoneyWizard::completeStateChanged()
0135 {
0136     Q_D(KMyMoneyWizard);
0137     KMyMoneyWizardPage* currentPage = d->m_history.back();
0138     bool lastPage = currentPage->isLastPage();
0139 
0140     d->m_finishButton->setVisible(lastPage);
0141     d->m_nextButton->setVisible(!lastPage);
0142 
0143     QPushButton* button;
0144 
0145     button = lastPage ? d->m_finishButton : d->m_nextButton;
0146 
0147     auto rc = currentPage->isComplete();
0148     button->setEnabled(rc);
0149 
0150     d->m_backButton->setEnabled(d->m_history.count() > 1);
0151 }
0152 
0153 void KMyMoneyWizard::accept()
0154 {
0155     Q_D(KMyMoneyWizard);
0156     // make sure it is really complete. Some widgets only change state during focusOutEvent,
0157     // so we just create such an animal by changing the focus to the finish button and
0158     // check again for completeness.
0159     d->m_finishButton->setFocus();
0160     KMyMoneyWizardPage* page = d->m_history.back();
0161     if (page->isComplete())
0162         QDialog::accept();
0163 }
0164 
0165 void KMyMoneyWizard::selectNextPage()
0166 {
0167     nextButtonClicked();
0168 }
0169 
0170 void KMyMoneyWizard::selectPreviousPage()
0171 {
0172     backButtonClicked();
0173 }