summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2011-11-25 14:18:49 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2011-11-28 12:34:31 +0100
commitd174995a01d9c67251696d4920486b0d20da7c48 (patch)
tree584df1054c7b16acaf08a1496bf20ede4c5d2ac6
parent90d5e18b9b62b9b3be063967555e3cd45df792dc (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.cpp85
-rw-r--r--installerbuilder/libinstaller/packagemanagergui.h7
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);