[Pkg-owncloud-commits] [owncloud-client] 138/484: SettingsDialog: use QWidgetAction for the toolbar so the extension works
Sandro Knauß
hefee-guest at moszumanska.debian.org
Wed Dec 16 00:37:30 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 42a6b242c770d46dbd650b7f314f3bb8a65d1233
Author: Olivier Goffart <ogoffart at woboq.com>
Date: Fri Oct 23 16:19:40 2015 +0200
SettingsDialog: use QWidgetAction for the toolbar so the extension works
When the toolbar is full because there is no enough room, make the extension
of the toolbar work, by using QWidgetAction::createWidget instead of
QToolBar::insertWidget
There should not be prolem when the window is too narrow.
Relates #3832
---
src/gui/settingsdialog.cpp | 65 +++++++++++++++++++++++++++-------------------
src/gui/settingsdialog.h | 3 ---
2 files changed, 39 insertions(+), 29 deletions(-)
diff --git a/src/gui/settingsdialog.cpp b/src/gui/settingsdialog.cpp
index 94e8867..d8c83ce 100644
--- a/src/gui/settingsdialog.cpp
+++ b/src/gui/settingsdialog.cpp
@@ -44,8 +44,11 @@ namespace {
"QToolBar { background: %1; margin: 0; padding: 0; border: none; border-bottom: 1px solid %2; spacing: 0; } "
"QToolBar QToolButton { background: %1; border: none; border-bottom: 1px solid %2; margin: 0; padding: 5px; } "
"QToolBar QToolButton:checked { background: %3; color: %4; }";
+
+ static const float buttonSizeRatio = 1.618; // golden ratio
}
+
namespace OCC {
//
@@ -79,19 +82,19 @@ SettingsDialog::SettingsDialog(ownCloudGui *gui, QWidget *parent) :
// all buttons must have the same size in order to keep a good layout
_protocolAction = createColorAwareAction(QLatin1String(":/client/resources/activity.png"), tr("Activity"));
_actionGroup->addAction(_protocolAction);
- addActionToToolBar(_protocolAction);
+ _toolBar->addAction(_protocolAction);
ProtocolWidget *protocolWidget = new ProtocolWidget;
_ui->stack->addWidget(protocolWidget);
QAction *generalAction = createColorAwareAction(QLatin1String(":/client/resources/settings.png"), tr("General"));
_actionGroup->addAction(generalAction);
- addActionToToolBar(generalAction);
+ _toolBar->addAction(generalAction);
GeneralSettings *generalSettings = new GeneralSettings;
_ui->stack->addWidget(generalSettings);
QAction *networkAction = createColorAwareAction(QLatin1String(":/client/resources/network.png"), tr("Network"));
_actionGroup->addAction(networkAction);
- addActionToToolBar(networkAction);
+ _toolBar->addAction(networkAction);
NetworkSettings *networkSettings = new NetworkSettings;
_ui->stack->addWidget(networkSettings);
@@ -190,18 +193,10 @@ void SettingsDialog::accountAdded(AccountState *s)
{
auto height = _toolBar->sizeHint().height();
auto accountAction = createColorAwareAction(QLatin1String(":/client/resources/account.png"),
- s->shortDisplayNameForSettings(height * 1.618)); // Golden ratio
+ s->account()->displayName());
accountAction->setToolTip(s->account()->displayName());
-
- QToolButton* accountButton = new QToolButton;
- accountButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- accountButton->setDefaultAction(accountAction);
- accountButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
- accountButton->setMinimumWidth(height * 1.3);
-
- QAction* toolbarAction = _toolBar->insertWidget(_toolBar->actions().at(0), accountButton);
- _toolbarAccountActions.insert(accountAction, toolbarAction);
-
+ accountAction->setIconText(s->shortDisplayNameForSettings(height * buttonSizeRatio));
+ _toolBar->insertAction(_toolBar->actions().at(0), accountAction);
auto accountSettings = new AccountSettings(s, this);
_ui->stack->insertWidget(0 , accountSettings);
_actionGroup->addAction(accountAction);
@@ -220,8 +215,7 @@ void SettingsDialog::accountRemoved(AccountState *s)
continue;
}
if (as->accountsState() == s) {
- _toolBar->removeAction(_toolbarAccountActions.value(it.key()));
- _toolbarAccountActions.remove(it.key());
+ _toolBar->removeAction(it.key());
delete it.key();
delete it.value();
@@ -263,23 +257,42 @@ QIcon SettingsDialog::createColorAwareIcon(const QString &name)
return QIcon(QPixmap::fromImage(img));
}
+class ToolButtonAction : public QWidgetAction
+{
+public:
+ explicit ToolButtonAction(const QIcon &icon, const QString &text, QObject* parent)
+ : QWidgetAction(parent) {
+ setText(text);
+ setIcon(icon);
+ }
+
+
+ QWidget* createWidget(QWidget* parent) Q_DECL_OVERRIDE {
+
+ auto toolbar = qobject_cast<QToolBar*>(parent);
+ if (!toolbar) {
+ // this means we are in the extention menu, no special action here
+ return 0;
+ }
+
+ QToolButton* btn = new QToolButton(parent);
+ btn->setDefaultAction(this);
+ btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
+// btn->setMinimumWidth(qMax<int>(parent->sizeHint().height() * buttonSizeRatio,
+// btn->sizeHint().width()));
+ return btn;
+ }
+};
+
QAction *SettingsDialog::createColorAwareAction(const QString &iconPath, const QString &text)
{
// all buttons must have the same size in order to keep a good layout
QIcon coloredIcon = createColorAwareIcon(iconPath);
- QAction *action = new QAction(coloredIcon, text, this);
+ QAction *action = new ToolButtonAction(coloredIcon, text, this);
action->setCheckable(true);
action->setProperty("iconPath", iconPath);
return action;
}
-void SettingsDialog::addActionToToolBar(QAction *action) {
- QToolButton* btn = new QToolButton;
- btn->setDefaultAction(action);
- btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- btn->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
- _toolBar->addWidget(btn);
- btn->setMinimumWidth(_toolBar->sizeHint().height() * 1.3);
-}
-
} // namespace OCC
diff --git a/src/gui/settingsdialog.h b/src/gui/settingsdialog.h
index 3b8e0c6..bc57763 100644
--- a/src/gui/settingsdialog.h
+++ b/src/gui/settingsdialog.h
@@ -68,7 +68,6 @@ private:
void customizeStyle();
QIcon createColorAwareIcon(const QString &name);
QAction *createColorAwareAction(const QString &iconName, const QString &fileName);
- void addActionToToolBar(QAction *action);
Ui::SettingsDialog * const _ui;
QActionGroup* _actionGroup;
@@ -76,8 +75,6 @@ private:
QHash<QAction*, QWidget*> _actionGroupWidgets;
QToolBar* _toolBar;
- // Maps the actions from the action group to the toolbar actions
- QHash<QAction*, QAction*> _toolbarAccountActions;
QAction * _protocolAction;
ownCloudGui *_gui;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list