summaryrefslogtreecommitdiffstats
path: root/src/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/widgets')
-rw-r--r--src/gui/widgets/qdialogbuttonbox.cpp145
1 files changed, 39 insertions, 106 deletions
diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp
index 5eac611..2ceeca7 100644
--- a/src/gui/widgets/qdialogbuttonbox.cpp
+++ b/src/gui/widgets/qdialogbuttonbox.cpp
@@ -49,11 +49,8 @@
#include "qdialogbuttonbox.h"
-
-#ifdef Q_WS_S60
+#ifdef QT_SOFTKEYS_ENABLED
#include <QtGui/qaction.h>
-#include <QtGui/qmenubar.h>
-#include <QtGui/qmenu.h>
#endif
@@ -271,8 +268,8 @@ public:
QList<QAbstractButton *> buttonLists[QDialogButtonBox::NRoles];
QHash<QPushButton *, QDialogButtonBox::StandardButton> standardButtonHash;
-#ifdef Q_WS_S60
- QList<QAction *> softkeyActions;
+#ifdef QT_SOFTKEYS_ENABLED
+ QHash<QAbstractButton *, QAction *> softKeyActions;
#endif
Qt::Orientation orientation;
@@ -293,9 +290,8 @@ public:
void addButtonsToLayout(const QList<QAbstractButton *> &buttonList, bool reverse);
void retranslateStrings();
const char *standardButtonText(QDialogButtonBox::StandardButton sbutton) const;
-#ifdef Q_WS_S60
- void addSoftKeyAction(QAbstractButton *button, QDialogButtonBox::ButtonRole role);
- void setSoftKeys();
+#ifdef QT_SOFTKEYS_ENABLED
+ QAction *createSoftKey(QAbstractButton *button, QDialogButtonBox::ButtonRole role);
#endif
};
@@ -473,7 +469,7 @@ void QDialogButtonBoxPrivate::layoutButtons()
if (center)
buttonLayout->addStretch();
-#ifdef Q_WS_S60
+#ifdef QT_SOFTKEYS_ENABLED
QWidget *dialog = 0;
QWidget *p = q;
while (p && !p->isWindow()) {
@@ -482,7 +478,7 @@ void QDialogButtonBoxPrivate::layoutButtons()
break;
}
if (dialog)
- q->hide();
+ q->setFixedSize(0, 0);
#endif
}
@@ -563,117 +559,42 @@ void QDialogButtonBoxPrivate::addButton(QAbstractButton *button, QDialogButtonBo
QObject::connect(button, SIGNAL(clicked()), q, SLOT(_q_handleButtonClicked()));
QObject::connect(button, SIGNAL(destroyed()), q, SLOT(_q_handleButtonDestroyed()));
buttonLists[role].append(button);
+#ifdef QT_SOFTKEYS_ENABLED
+ softKeyActions.insert(button, createSoftKey(button, role));
+#endif
if (doLayout)
layoutButtons();
}
-/*! \internal */
-#ifdef Q_WS_S60
-void QDialogButtonBoxPrivate::addSoftKeyAction(QAbstractButton *button, QDialogButtonBox::ButtonRole role)
+#ifdef QT_SOFTKEYS_ENABLED
+QAction* QDialogButtonBoxPrivate::createSoftKey(QAbstractButton *button, QDialogButtonBox::ButtonRole role)
{
Q_Q(QDialogButtonBox);
-
QAction::SoftKeyRole softkeyRole;
- QAction *buttonAction = new QAction(button->text(), q);
+
+ QAction *action = new QAction(button->text(), q);
switch (role) {
case ApplyRole:
case AcceptRole:
+ case YesRole:
+ case ActionRole:
+ case HelpRole:
softkeyRole = QAction::OkSoftKey;
break;
case RejectRole:
- softkeyRole = QAction::CancelSoftKey;
- break;
case DestructiveRole:
- softkeyRole = QAction::ExitSoftKey;
- break;
- case ActionRole:
- case HelpRole:
- softkeyRole = QAction::ViewSoftKey; //todo: uhh
- break;
- case YesRole:
- softkeyRole = QAction::SelectSoftKey;
- break;
case NoRole:
- softkeyRole = QAction::DeselectSoftKey;
- break;
case ResetRole:
- softkeyRole = QAction::BackSoftKey;
+ softkeyRole = QAction::CancelSoftKey;
break;
default:
break;
}
- QObject::connect(buttonAction, SIGNAL(triggered()), button, SIGNAL(clicked()));
- buttonAction->setSoftKeyRole(softkeyRole);
- softkeyActions.append(buttonAction);
-}
-
-/*! \internal */
-void QDialogButtonBoxPrivate::setSoftKeys()
-{
- Q_Q(QDialogButtonBox);
-
- QDialog *dialog = 0;
- QWidget *p = q;
- while (p && !p->isWindow()) {
- p = p->parentWidget();
- if ((dialog = qobject_cast<QDialog *>(p)))
- break;
- }
- if (dialog) {
- softkeyActions.clear();
- const int buttonCount = q->buttons().count();
- for (int i=0; i< buttonCount; i++){
- QAbstractButton *button = q->buttons().at(i);
- QDialogButtonBox::ButtonRole role = q->buttonRole(button);
- addSoftKeyAction(button, role);
- }
- //Need to re-arrange softkeys, if there are too many actions.
- if (softkeyActions.count() > 2){
- //FIXME- wait for Softkey API refactoring
- /*
- QAction *actionSoftKeyOption = new QAction(tr("Options"), this);
- actionSoftKeyOption->setSoftKeyRole(QAction::OptionsSoftKey);
- setSoftKey(actionSoftKeyOption);
-
- QMenuBar *menuBarOptions = new QMenuBar(q->parentWidget());
- menubarOptions->addActions(softkeyActions);
- buttonLayout->setMenuBar(menuBar);
- */
- //Set right softkey
- softkeyActions.clear();
- QAction::SoftKeyRole softKeyAction;
- QAbstractButton *lskButton;
- QList<QAbstractButton *> &searchList = buttonLists[DestructiveRole];
- if (searchList.count() > 0){
- lskButton = searchList.at(0);
- softKeyAction = QAction::ExitSoftKey;
- } else {
- searchList = buttonLists[RejectRole];
- if (searchList.count() > 0){
- lskButton = searchList.at(0);
- softKeyAction = QAction::CancelSoftKey;
- } else {
- searchList = buttonLists[NoRole];
- if (searchList.count() > 0) {
- lskButton = searchList.at(0);
- softKeyAction = QAction::DeselectSoftKey;
- } else {
- //no good candidates, rely on SoftKey API
- }
- }
- }
- QAction *leftSoftKeyAction = new QAction(lskButton->text(), dialog);
- leftSoftKeyAction->setSoftKeyRole(softKeyAction);
- QObject::connect(leftSoftKeyAction, SIGNAL(triggered()), lskButton, SIGNAL(clicked()));
- softkeyActions.append(leftSoftKeyAction);
- dialog->setSoftKeys(softkeyActions);
- } else {
- dialog->setSoftKeys(softkeyActions);
- }
- }
+ QObject::connect(action, SIGNAL(triggered()), button, SIGNAL(clicked()));
+ action->setSoftKeyRole(softkeyRole);
+ return action;
}
-
#endif
void QDialogButtonBoxPrivate::createStandardButtons(QDialogButtonBox::StandardButtons buttons)
@@ -767,6 +688,11 @@ void QDialogButtonBoxPrivate::retranslateStrings()
if (buttonText) {
QPushButton *button = it.key();
button->setText(QDialogButtonBox::tr(buttonText));
+#ifdef QT_SOFTKEYS_ENABLED
+ QAction *action = softKeyActions.value(button, 0);
+ if (action)
+ action->setText(button->text());
+#endif
}
++it;
}
@@ -1036,6 +962,13 @@ void QDialogButtonBox::removeButton(QAbstractButton *button)
}
}
}
+#ifdef QT_SOFTKEYS_ENABLED
+ QAction *action = d->softKeyActions.value(button, 0);
+ if (action) {
+ d->softKeyActions.remove(button);
+ delete action;
+ }
+#endif
if (!d->internalRemove)
button->setParent(0);
}
@@ -1261,15 +1194,15 @@ bool QDialogButtonBox::event(QEvent *event)
}
if (!hasDefault && firstAcceptButton)
firstAcceptButton->setDefault(true);
+#ifdef QT_SOFTKEYS_ENABLED
+ if (dialog)
+ dialog->addActions(d->softKeyActions.values());
+ else
+ addActions(d->softKeyActions.values());
+#endif
}else if (event->type() == QEvent::LanguageChange) {
d->retranslateStrings();
}
-#ifdef Q_WS_S60
- // Set the softkeys in polish, to avoid doing them several times, since each call causes flicker in the softkeys.
- else if (event->type() == QEvent::Polish) {
- d->setSoftKeys();
- }
-#endif
return QWidget::event(event);
}