diff options
author | kh1 <karsten.heimrich@nokia.com> | 2011-11-25 14:18:49 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@nokia.com> | 2011-11-28 12:34:31 +0100 |
commit | d174995a01d9c67251696d4920486b0d20da7c48 (patch) | |
tree | 584df1054c7b16acaf08a1496bf20ede4c5d2ac6 | |
parent | 90d5e18b9b62b9b3be063967555e3cd45df792dc (diff) |
Add the possibility to have an settings button int the ui.
Added some more code to be able to properly relayout the
buttons after show/ hide of the settings button. We always
need to call this now since QWizard won't take care of our
own passed buttons.
Change-Id: I8dc957ba43b79239164ab1e9032ffbd86b095501
Reviewed-by: Niels Weber <niels.2.weber@nokia.com>
Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
-rw-r--r-- | installerbuilder/libinstaller/packagemanagergui.cpp | 85 | ||||
-rw-r--r-- | installerbuilder/libinstaller/packagemanagergui.h | 7 |
2 files changed, 87 insertions, 5 deletions
diff --git a/installerbuilder/libinstaller/packagemanagergui.cpp b/installerbuilder/libinstaller/packagemanagergui.cpp index bad452f8d..0a1026227 100644 --- a/installerbuilder/libinstaller/packagemanagergui.cpp +++ b/installerbuilder/libinstaller/packagemanagergui.cpp @@ -205,10 +205,12 @@ public: Private() : m_modified(false) , m_autoSwitchPage(true) + , m_showSettingsButton(false) { } bool m_modified; bool m_autoSwitchPage; + bool m_showSettingsButton; QMap<int, QWizardPage*> m_defaultPages; QMap<int, QString> m_defaultButtonText; @@ -281,6 +283,8 @@ PackageManagerGui::PackageManagerGui(PackageManagerCore *core, QWidget *parent) connect(m_core, SIGNAL(setAutomatedPageSwitchEnabled(bool)), this, SLOT(setAutomatedPageSwitchEnabled(bool))); + connect(this, SIGNAL(customButtonClicked(int)), this, SLOT(customButtonClicked(int))); + for (int i = QWizard::BackButton; i < QWizard::CustomButton1; ++i) d->m_defaultButtonText.insert(i, buttonText(QWizard::WizardButton(i))); @@ -586,6 +590,65 @@ void PackageManagerGui::showFinishedPage() qobject_cast<QPushButton*>(button(QWizard::CancelButton))->setEnabled(false); } +void PackageManagerGui::showSettingsButton(bool show) +{ + if (d->m_showSettingsButton == show) + return; + + d->m_showSettingsButton = show; + setOption(QWizard::HaveCustomButton1, show); + setButtonText(QWizard::CustomButton1, tr("Settings")); + + updateButtonLayout(); +} + +/*! + Force an update of our own button layout, needs to be called whenever a button option has been set. +*/ +void PackageManagerGui::updateButtonLayout() +{ + QVector<QWizard::WizardButton> buttons(12, QWizard::NoButton); + if (options() & QWizard::HaveHelpButton) + buttons[(options() & QWizard::HelpButtonOnRight) ? 11 : 0] = QWizard::HelpButton; + + buttons[1] = QWizard::Stretch; + if (options() & QWizard::HaveCustomButton1) { + buttons[1] = QWizard::CustomButton1; + buttons[2] = QWizard::Stretch; + } + + if (options() & QWizard::HaveCustomButton2) + buttons[3] = QWizard::CustomButton2; + + if (options() & QWizard::HaveCustomButton3) + buttons[4] = QWizard::CustomButton3; + + if (!(options() & QWizard::NoCancelButton)) + buttons[(options() & QWizard::CancelButtonOnLeft) ? 5 : 10] = QWizard::CancelButton; + + buttons[6] = QWizard::BackButton; + buttons[7] = QWizard::NextButton; + buttons[8] = QWizard::CommitButton; + buttons[9] = QWizard::FinishButton; + + setOption(QWizard::NoBackButtonOnLastPage, true); + setOption(QWizard::NoBackButtonOnStartPage, true); + + setButtonLayout(buttons.toList()); +} + +void PackageManagerGui::setSettingsButtonEnabled(bool enabled) +{ + if (QAbstractButton *btn = button(QWizard::CustomButton1)) + btn->setEnabled(enabled); +} + +void PackageManagerGui::customButtonClicked(int which) +{ + if (QWizard::WizardButton(which) == QWizard::CustomButton1 && d->m_showSettingsButton) + emit settingsButtonClicked(); +} + // -- PackageManagerPage @@ -1804,18 +1867,26 @@ void FinishedPage::entering() setCommitPage(true); if (packageManagerCore()->isUpdater() || packageManagerCore()->isPackageManager()) { #ifdef Q_WS_MAC - wizard()->setOption(QWizard::NoCancelButton, false); + gui()->setOption(QWizard::NoCancelButton, false); #endif + if (QAbstractButton *cancel = gui()->button(QWizard::CancelButton)) { + m_commitButton = cancel; + cancel->setEnabled(true); + cancel->setVisible(true); + } setButtonText(QWizard::CommitButton, tr("Restart")); - m_commitButton = gui()->button(QWizard::CancelButton); - gui()->button(QWizard::CancelButton)->setEnabled(true); setButtonText(QWizard::CancelButton, gui()->defaultButtonText(QWizard::FinishButton)); } else { if (packageManagerCore()->isInstaller()) m_commitButton = wizard()->button(QWizard::FinishButton); - wizard()->setOption(QWizard::NoCancelButton, true); + + gui()->setOption(QWizard::NoCancelButton, true); + if (QAbstractButton *cancel = gui()->button(QWizard::CancelButton)) + cancel->setVisible(false); } + gui()->updateButtonLayout(); + if (m_commitButton) { disconnect(m_commitButton, SIGNAL(clicked()), this, SLOT(handleFinishClicked())); connect(m_commitButton, SIGNAL(clicked()), this, SLOT(handleFinishClicked())); @@ -1844,9 +1915,13 @@ void FinishedPage::entering() void FinishedPage::leaving() { #ifdef Q_WS_MAC - wizard()->setOption(QWizard::NoCancelButton, true); + gui()->setOption(QWizard::NoCancelButton, true); + if (QAbstractButton *cancel = gui()->button(QWizard::CancelButton)) + cancel->setVisible(false); #endif + gui()->updateButtonLayout(); + setButtonText(QWizard::CommitButton, gui()->defaultButtonText(QWizard::CommitButton)); setButtonText(QWizard::CancelButton, gui()->defaultButtonText(QWizard::CancelButton)); } diff --git a/installerbuilder/libinstaller/packagemanagergui.h b/installerbuilder/libinstaller/packagemanagergui.h index 45f3ce630..45c075120 100644 --- a/installerbuilder/libinstaller/packagemanagergui.h +++ b/installerbuilder/libinstaller/packagemanagergui.h @@ -77,11 +77,17 @@ public: Q_INVOKABLE QString defaultButtonText(int wizardButton) const; Q_INVOKABLE void clickButton(int wizardButton, int delayInMs = 0); + Q_INVOKABLE void showSettingsButton(bool show); + Q_INVOKABLE void setSettingsButtonEnabled(bool enable); + + void updateButtonLayout(); + Q_SIGNALS: void interrupted(); void languageChanged(); void finishButtonClicked(); void gotRestarted(); + void settingsButtonClicked(); public Q_SLOTS: void cancelButtonClicked(); @@ -103,6 +109,7 @@ protected Q_SLOTS: private Q_SLOTS: void onLanguageChanged(); + void customButtonClicked(int which); protected: bool event(QEvent *event); |