[Pkg-owncloud-commits] [owncloud-client] 42/333: Added Mac-specific settings dialog that looks more native

Sandro Knauß hefee-guest at moszumanska.debian.org
Thu Apr 17 23:16:31 UTC 2014


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 a51cb0982b506e4c3cfdccba3d4e644450a30523
Author: Denis Dzyubenko <denis at ddenis.info>
Date:   Fri Feb 14 03:02:59 2014 +0100

    Added Mac-specific settings dialog that looks more native
---
 .gitmodules                              |   3 +
 cmake/modules/QtVersionAbstraction.cmake |   8 +++
 src/3rdparty/qtmacgoodies                |   1 +
 src/CMakeLists.txt                       |  18 +++++
 src/mirall/accountsettings.cpp           |  19 +++++-
 src/mirall/owncloudgui.cpp               |  13 +++-
 src/mirall/owncloudgui.h                 |   5 ++
 src/mirall/protocolwidget.cpp            |   3 +
 src/mirall/settingsdialogmac.cpp         | 113 +++++++++++++++++++++++++++++++
 src/mirall/settingsdialogmac.h           |  45 ++++++++++++
 src/mirall/utility.cpp                   |  12 ++--
 11 files changed, 230 insertions(+), 10 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index 073864f..ebcd8db 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "doc/ocdoc"]
 	path = doc/ocdoc
 	url = https://github.com/owncloud/documentation
+[submodule "src/3rdparty/qtmacgoodies"]
+	path = src/3rdparty/qtmacgoodies
+	url = git://github.com/shadone/qtmacgoodies.git
diff --git a/cmake/modules/QtVersionAbstraction.cmake b/cmake/modules/QtVersionAbstraction.cmake
index 1d8403d..daf53a0 100644
--- a/cmake/modules/QtVersionAbstraction.cmake
+++ b/cmake/modules/QtVersionAbstraction.cmake
@@ -16,6 +16,9 @@ if( NOT BUILD_WITH_QT4 )
         find_package(Qt5Sensors QUIET)
         find_package(Qt5Xml QUIET)
 #        find_package(Qt5WebKitWidgets QUIET)
+if(APPLE)
+        find_package(Qt5MacExtras QUIET)
+endif()
 
         message(STATUS "Using Qt 5!")
 
@@ -31,6 +34,11 @@ if( NOT BUILD_WITH_QT4 )
         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
 #        set(CMAKE_CXX_FLAGS "${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
 
+if(APPLE)
+        include_directories(${Qt5MacExtras_INCLUDE_DIRS})
+        add_definitions(${Qt5MacExtras_DEFINITIONS})
+        set (QT_LIBRARIES ${QT_LIBRARIES} ${Qt5MacExtras_LIBRARIES})
+endif()
 
         macro(qt_wrap_ui)
             qt5_wrap_ui(${ARGN})
diff --git a/src/3rdparty/qtmacgoodies b/src/3rdparty/qtmacgoodies
new file mode 160000
index 0000000..ab7ee29
--- /dev/null
+++ b/src/3rdparty/qtmacgoodies
@@ -0,0 +1 @@
+Subproject commit ab7ee2915f491bca192ad2879547935d7c784c34
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 81b3ccf..3a4260e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -38,6 +38,13 @@ set(3rdparty_SRC
 3rdparty/QProgressIndicator/QProgressIndicator.cpp
 )
 
+if (APPLE)
+        list(APPEND 3rdparty_SRC
+        3rdparty/qtmacgoodies/src/macpreferenceswindow.mm
+        3rdparty/qtmacgoodies/src/macstandardicon.mm
+        )
+endif()
+
 set(3rdparty_HEADER
 3rdparty/qtsingleapplication/qtlocalpeer.h
 3rdparty/qtsingleapplication/qtsingleapplication.h
@@ -46,6 +53,13 @@ set(3rdparty_HEADER
 3rdparty/QProgressIndicator/QProgressIndicator.h
 )
 
+if (APPLE)
+        list(APPEND 3rdparty_HEADER
+        3rdparty/qtmacgoodies/src/macpreferenceswindow.h
+        3rdparty/qtmacgoodies/src/macstandardicon.h
+        )
+endif()
+
 qt_wrap_cpp(3rdparty_MOC ${3rdparty_HEADER})
 
 if(NOT WIN32)
@@ -60,6 +74,7 @@ set(3rdparty_INC
     ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/QProgressIndicator
     ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/fancylineedit
     ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qjson
+    ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/qtmacgoodies/src
     )
 
 set(libsync_SRCS
@@ -314,6 +329,9 @@ IF( APPLE )
     list(APPEND mirall_SRCS mirall/cocoainitializer_mac.mm)
     list(APPEND mirall_HEADERS mirall/cocoainitializer.h)
 
+    list(APPEND mirall_SRCS mirall/settingsdialogmac.cpp)
+    list(APPEND mirall_HEADERS mirall/settingsdialogmac.h)
+
     if(SPARKLE_FOUND)
        # Define this, we need to check in updater.cpp
        add_definitions( -DHAVE_SPARKLE )
diff --git a/src/mirall/accountsettings.cpp b/src/mirall/accountsettings.cpp
index f320751..e8bbcc2 100644
--- a/src/mirall/accountsettings.cpp
+++ b/src/mirall/accountsettings.cpp
@@ -67,7 +67,11 @@ AccountSettings::AccountSettings(QWidget *parent) :
 
     ui->_folderList->setItemDelegate( delegate );
     ui->_folderList->setModel( _model );
+#if defined(Q_OS_MAC)
+    ui->_folderList->setMinimumWidth( 400 );
+#else
     ui->_folderList->setMinimumWidth( 300 );
+#endif
     ui->_folderList->setEditTriggers( QAbstractItemView::NoEditTriggers );
 
     ui->_buttonRemove->setEnabled(false);
@@ -424,9 +428,18 @@ void AccountSettings::slotEnableCurrentFolder()
             if( f && folderEnabled ) {
                 // check if a sync is still running and if so, ask if we should terminate.
                 if( f->isBusy() ) { // its still running
-                    int reply = QMessageBox::question( 0, tr("Sync Running"),
-                                                       tr("The syncing operation is running.<br/>Do you want to terminate it?"),
-                                                       QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes );
+#if defined(Q_OS_MAC)
+                    QWidget *parent = this;
+                    Qt::WindowFlags flags = Qt::Sheet;
+#else
+                    QWidget *parent = 0;
+                    Qt::WindowFlags flags = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint; // default flags
+#endif
+                    QMessageBox msgbox(QMessageBox::Question, tr("Sync Running"),
+                                       tr("The syncing operation is running.<br/>Do you want to terminate it?"),
+                                       QMessageBox::Yes | QMessageBox::No, parent, flags);
+                    msgbox.setDefaultButton(QMessageBox::Yes);
+                    int reply = msgbox.exec();
                     if ( reply == QMessageBox::Yes )
                         terminate = true;
                     else
diff --git a/src/mirall/owncloudgui.cpp b/src/mirall/owncloudgui.cpp
index 47e07f1..56d5351 100644
--- a/src/mirall/owncloudgui.cpp
+++ b/src/mirall/owncloudgui.cpp
@@ -19,7 +19,11 @@
 #include "mirall/utility.h"
 #include "mirall/progressdispatcher.h"
 #include "mirall/owncloudsetupwizard.h"
-#include "mirall/settingsdialog.h"
+#if defined(Q_OS_MAC)
+#    include "mirall/settingsdialogmac.h"
+#else
+#    include "mirall/settingsdialog.h"
+#endif
 #include "mirall/logger.h"
 #include "mirall/logbrowser.h"
 #include "mirall/account.h"
@@ -473,7 +477,12 @@ void ownCloudGui::slotShowGuiMessage(const QString &title, const QString &messag
 void ownCloudGui::slotShowSettings()
 {
     if (_settingsDialog.isNull()) {
-        _settingsDialog = new SettingsDialog(this);
+        _settingsDialog =
+#if defined(Q_OS_MAC)
+                new SettingsDialogMac(this);
+#else
+                new SettingsDialog(this);
+#endif
         _settingsDialog->setAttribute( Qt::WA_DeleteOnClose, true );
         _settingsDialog->show();
     }
diff --git a/src/mirall/owncloudgui.h b/src/mirall/owncloudgui.h
index 074433a..c51e1e5 100644
--- a/src/mirall/owncloudgui.h
+++ b/src/mirall/owncloudgui.h
@@ -28,6 +28,7 @@
 namespace Mirall {
 
 class SettingsDialog;
+class SettingsDialogMac;
 class Application;
 class LogBrowser;
 
@@ -77,7 +78,11 @@ private:
     void setupActions();
 
     QPointer<Systray> _tray;
+#if defined(Q_OS_MAC)
+    QPointer<SettingsDialogMac> _settingsDialog;
+#else
     QPointer<SettingsDialog> _settingsDialog;
+#endif
     QPointer<LogBrowser>_logBrowser;
        // tray's menu
     QMenu *_contextMenu;
diff --git a/src/mirall/protocolwidget.cpp b/src/mirall/protocolwidget.cpp
index 25ef610..516445b 100644
--- a/src/mirall/protocolwidget.cpp
+++ b/src/mirall/protocolwidget.cpp
@@ -58,6 +58,9 @@ ProtocolWidget::ProtocolWidget(QWidget *parent) :
     _ui->_treeWidget->setRootIsDecorated(false);
     _ui->_treeWidget->setTextElideMode(Qt::ElideMiddle);
     _ui->_treeWidget->header()->setObjectName("ActivityListHeader");
+#if defined(Q_OS_MAC)
+    _ui->_treeWidget->setMinimumWidth(400);
+#endif
 
     connect(this, SIGNAL(guiLog(QString,QString)), Logger::instance(), SIGNAL(guiLog(QString,QString)));
 
diff --git a/src/mirall/settingsdialogmac.cpp b/src/mirall/settingsdialogmac.cpp
new file mode 100644
index 0000000..0a3f7a7
--- /dev/null
+++ b/src/mirall/settingsdialogmac.cpp
@@ -0,0 +1,113 @@
+#include "settingsdialogmac.h"
+
+#include "macstandardicon.h"
+
+#include "mirall/folderman.h"
+#include "mirall/theme.h"
+#include "mirall/generalsettings.h"
+#include "mirall/networksettings.h"
+#include "mirall/accountsettings.h"
+#include "mirall/mirallconfigfile.h"
+#include "mirall/progressdispatcher.h"
+#include "mirall/owncloudgui.h"
+#include "mirall/protocolwidget.h"
+
+#include <QLabel>
+#include <QStandardItemModel>
+#include <QPushButton>
+#include <QDebug>
+#include <QSettings>
+
+namespace Mirall {
+
+SettingsDialogMac::SettingsDialogMac(ownCloudGui *gui, QWidget *parent)
+    : MacPreferencesWindow(parent)
+{
+    setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
+
+    setObjectName("SettingsMac"); // required as group for saveGeometry call
+
+    setWindowTitle(tr("%1").arg(Theme::instance()->appNameGUI()));
+
+    _accountSettings = new AccountSettings;
+    QIcon icon = Theme::instance()->syncStateIcon(SyncResult::Undefined, true);
+    _accountIdx = addPreferencesPanel(icon, tr("Account"), _accountSettings);
+
+    QIcon protocolIcon(QLatin1String(":/mirall/resources/activity.png"));
+    _protocolWidget = new ProtocolWidget;
+    _protocolIdx = addPreferencesPanel(protocolIcon, tr("Activity"), _protocolWidget);
+
+    QIcon generalIcon = MacStandardIcon::icon(MacStandardIcon::PreferencesGeneral);
+    GeneralSettings *generalSettings = new GeneralSettings;
+    addPreferencesPanel(generalIcon, tr("General"), generalSettings);
+
+    QIcon networkIcon = MacStandardIcon::icon(MacStandardIcon::Network);
+    NetworkSettings *networkSettings = new NetworkSettings;
+    addPreferencesPanel(networkIcon, tr("Network"), networkSettings);
+
+    FolderMan *folderMan = FolderMan::instance();
+    connect( folderMan, SIGNAL(folderSyncStateChange(QString)),
+             this, SLOT(slotSyncStateChange(QString)));
+
+    QuotaInfo *quotaInfo = gui->quotaInfo();
+    connect( quotaInfo, SIGNAL(quotaUpdated(qint64,qint64)),
+             _accountSettings, SLOT(slotUpdateQuota(qint64,qint64)));
+    _accountSettings->slotUpdateQuota(quotaInfo->lastQuotaTotalBytes(), quotaInfo->lastQuotaUsedBytes());
+    connect( _accountSettings, SIGNAL(folderChanged()), gui, SLOT(slotFoldersChanged()));
+    connect( _accountSettings, SIGNAL(openFolderAlias(const QString&)),
+             gui, SLOT(slotFolderOpenAction(QString)));
+
+    connect( ProgressDispatcher::instance(), SIGNAL(progressInfo(QString, Progress::Info)),
+             _accountSettings, SLOT(slotSetProgress(QString, Progress::Info)) );
+    connect( ProgressDispatcher::instance(), SIGNAL(progressSyncProblem(QString,Progress::SyncProblem)),
+             _accountSettings, SLOT(slotProgressProblem(QString,Progress::SyncProblem)) );
+
+    QAction *showLogWindow = new QAction(this);
+    showLogWindow->setShortcut(QKeySequence("F12"));
+    connect(showLogWindow, SIGNAL(triggered()), gui, SLOT(slotToggleLogBrowser()));
+    addAction(showLogWindow);
+
+    MirallConfigFile cfg;
+    cfg.restoreGeometry(this);
+}
+
+void SettingsDialogMac::slotSyncStateChange(const QString& alias)
+{
+    FolderMan *folderMan = FolderMan::instance();
+    SyncResult state = folderMan->accountStatus(folderMan->map().values());
+    QIcon accountIcon = Theme::instance()->syncStateIcon(state.status());
+    setPreferencesPanelIcon(_accountIdx, accountIcon);
+
+    Folder *folder = folderMan->folder(alias);
+    if( folder ) {
+        _accountSettings->slotUpdateFolderState(folder);
+    }
+}
+
+void SettingsDialogMac::setGeneralErrors(const QStringList &errors)
+{
+    if( _accountSettings ) {
+        _accountSettings->setGeneralErrors(errors);
+    }
+}
+
+void SettingsDialogMac::closeEvent(QCloseEvent *event)
+{
+    MirallConfigFile cfg;
+    cfg.saveGeometry(this);
+    MacPreferencesWindow::closeEvent(event);
+}
+
+void SettingsDialogMac::slotRefreshResultList()
+{
+    if( _protocolWidget ) {
+        _protocolWidget->initializeList();
+    }
+}
+
+void SettingsDialogMac::showActivityPage()
+{
+    setCurrentPanelIndex(_protocolIdx);
+}
+
+}
diff --git a/src/mirall/settingsdialogmac.h b/src/mirall/settingsdialogmac.h
new file mode 100644
index 0000000..fe8f2b4
--- /dev/null
+++ b/src/mirall/settingsdialogmac.h
@@ -0,0 +1,45 @@
+#ifndef SETTINGSDIALOGMAC_H
+#define SETTINGSDIALOGMAC_H
+
+#include "mirall/progressdispatcher.h"
+#include "macpreferenceswindow.h"
+
+class QStandardItemModel;
+class QListWidgetItem;
+
+namespace Mirall {
+
+class AccountSettings;
+class ProtocolWidget;
+class Application;
+class FolderMan;
+class ownCloudGui;
+
+class SettingsDialogMac : public MacPreferencesWindow
+{
+    Q_OBJECT
+
+public:
+    explicit SettingsDialogMac(ownCloudGui *gui, QWidget *parent = 0);
+
+    void setGeneralErrors( const QStringList& errors );
+
+public slots:
+    void slotSyncStateChange(const QString& alias);
+    void slotRefreshResultList();
+    void showActivityPage();
+
+private:
+    void closeEvent(QCloseEvent *event);
+
+    AccountSettings *_accountSettings;
+    QListWidgetItem *_accountItem;
+    ProtocolWidget  *_protocolWidget;
+
+    int _accountIdx;
+    int _protocolIdx;
+};
+
+}
+
+#endif // SETTINGSDIALOGMAC_H
diff --git a/src/mirall/utility.cpp b/src/mirall/utility.cpp
index 61942a4..3b8b69b 100644
--- a/src/mirall/utility.cpp
+++ b/src/mirall/utility.cpp
@@ -166,11 +166,13 @@ void Utility::raiseDialog( QWidget *raiseWidget )
     if( raiseWidget ) {
 #if defined(Q_OS_WIN) || defined (Q_OS_MAC)
         Qt::WindowFlags eFlags = raiseWidget->windowFlags();
-        eFlags |= Qt::WindowStaysOnTopHint;
-        raiseWidget->setWindowFlags(eFlags);
-        raiseWidget->show();
-        eFlags &= ~Qt::WindowStaysOnTopHint;
-        raiseWidget->setWindowFlags(eFlags);
+        if (!(eFlags & Qt::WindowStaysOnTopHint)) {
+            eFlags |= Qt::WindowStaysOnTopHint;
+            raiseWidget->setWindowFlags(eFlags);
+            raiseWidget->show();
+            eFlags &= ~Qt::WindowStaysOnTopHint;
+            raiseWidget->setWindowFlags(eFlags);
+        }
 #endif
         raiseWidget->show();
         raiseWidget->raise();

-- 
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