Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/owncloud/client.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Dzyubenko <denis@ddenis.info>2014-02-14 06:02:59 +0400
committerDenis Dzyubenko <denis@ddenis.info>2014-02-18 05:22:16 +0400
commita51cb0982b506e4c3cfdccba3d4e644450a30523 (patch)
treec6a9e440bf90fad7f89b10f7140dbf6b3ecbfeb8
parente34122ad5454882cdd84d03981dcbc162534df1d (diff)
Added Mac-specific settings dialog that looks more native
-rw-r--r--.gitmodules3
-rw-r--r--cmake/modules/QtVersionAbstraction.cmake8
m---------src/3rdparty/qtmacgoodies0
-rw-r--r--src/CMakeLists.txt18
-rw-r--r--src/mirall/accountsettings.cpp19
-rw-r--r--src/mirall/owncloudgui.cpp13
-rw-r--r--src/mirall/owncloudgui.h5
-rw-r--r--src/mirall/protocolwidget.cpp3
-rw-r--r--src/mirall/settingsdialogmac.cpp113
-rw-r--r--src/mirall/settingsdialogmac.h45
-rw-r--r--src/mirall/utility.cpp12
11 files changed, 229 insertions, 10 deletions
diff --git a/.gitmodules b/.gitmodules
index 073864fee..ebcd8dbef 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 1d8403d99..daf53a067 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
+Subproject ab7ee2915f491bca192ad2879547935d7c784c3
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 81b3ccf37..3a4260e56 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 f320751c3..e8bbcc2be 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 47e07f145..56d535118 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 074433a24..c51e1e574 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 25ef6109b..516445b1c 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 000000000..0a3f7a79c
--- /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 000000000..fe8f2b417
--- /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 61942a486..3b8b69b3c 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();