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 }