summaryrefslogtreecommitdiffstats
path: root/installerbuilder
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 /installerbuilder
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>
Diffstat (limited to 'installerbuilder')
-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);