From 2c402b0fcf78bebb73b9ccfbf1be7d05bc991ed7 Mon Sep 17 00:00:00 2001 From: jan Iversen Date: Wed, 11 Jul 2018 12:17:06 +0200 Subject: [PATCH] ssrf: combine subsurface-*-helper into subsurface-helper combine shared functions like init_ui and run_ui in one file Signed-off-by: Jan Iversen --- CMakeLists.txt | 1 - subsurface-desktop-helper.cpp | 46 ------------- subsurface-helper.cpp | 124 +++++++++++++++++++++++++++++++++- subsurface-mobile-helper.cpp | 98 --------------------------- 4 files changed, 122 insertions(+), 147 deletions(-) delete mode 100644 subsurface-desktop-helper.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 87c9db4e4..30c507e7b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -315,7 +315,6 @@ if(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "MobileExecutable") elseif(${SUBSURFACE_TARGET_EXECUTABLE} MATCHES "DesktopExecutable") set(SUBSURFACE_APP subsurface-desktop-main.cpp - subsurface-desktop-helper.cpp subsurface-helper.cpp ) source_group("Subsurface App" FILES ${SUBSURFACE_APP}) diff --git a/subsurface-desktop-helper.cpp b/subsurface-desktop-helper.cpp deleted file mode 100644 index da3c8d273..000000000 --- a/subsurface-desktop-helper.cpp +++ /dev/null @@ -1,46 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* qt-gui.cpp */ -/* Qt UI implementation */ -#include "core/display.h" -#include "desktop-widgets/mainwindow.h" -#include "core/qthelper.h" -#include "core/pluginmanager.h" - -#include -#include -#include -#include - -#include "core/qt-gui.h" - -void init_ui() -{ - init_qt_late(); - - PluginManager::instance().loadPlugins(); - - MainWindow *window = new MainWindow(); - window->setTitle(); -} - -void run_ui() -{ - register_qml_types(); - MainWindow::instance()->show(); - qApp->exec(); -} - -void exit_ui() -{ - delete MainWindow::instance(); - delete qApp; - free((void *)existing_filename); -} - -double get_screen_dpi() -{ - QDesktopWidget *mydesk = qApp->desktop(); - return mydesk->physicalDpiX(); -} - - diff --git a/subsurface-helper.cpp b/subsurface-helper.cpp index 6a2383f08..b58f8b4aa 100644 --- a/subsurface-helper.cpp +++ b/subsurface-helper.cpp @@ -1,21 +1,60 @@ // SPDX-License-Identifier: GPL-2.0 #include +#include +#include #include #include +#include "map-widget/qmlmapwidgethelper.h" +#include "qt-models/maplocationmodel.h" #include "core/qt-gui.h" #include "core/settings/qPref.h" +#include "core/ssrf.h" + #ifdef SUBSURFACE_MOBILE +#include +#include #include "mobile-widgets/qmlmanager.h" #include "mobile-widgets/qmlprefs.h" #include "qt-models/divelistmodel.h" #include "qt-models/gpslistmodel.h" +#include "qt-models/messagehandlermodel.h" #include "profile-widget/qmlprofile.h" #include "core/downloadfromdcthread.h" #include "qt-models/diveimportedmodel.h" +#include "mobile-widgets/qml/kirigami/src/kirigamiplugin.h" +#else +#include "desktop-widgets/mainwindow.h" +#include "core/pluginmanager.h" #endif -#include "map-widget/qmlmapwidgethelper.h" -#include "qt-models/maplocationmodel.h" + +QObject *qqWindowObject = NULL; + +void init_ui() +{ + init_qt_late(); +#ifndef SUBSURFACE_MOBILE + PluginManager::instance().loadPlugins(); + + MainWindow *window = new MainWindow(); + window->setTitle(); +#endif +} + +void exit_ui() +{ +#ifndef SUBSURFACE_MOBILE + delete MainWindow::instance(); +#endif + delete qApp; + free((void *)existing_filename); +} + +double get_screen_dpi() +{ + QDesktopWidget *mydesk = qApp->desktop(); + return mydesk->physicalDpiX(); +} void register_qml_types() { @@ -55,3 +94,84 @@ void register_qml_types() if (rc < 0) qDebug() << "ERROR: Cannot register MapLocation, QML will not work!!"; } + +void run_ui() +{ + register_qml_types(); + +#ifdef SUBSURFACE_MOBILE + QQmlApplicationEngine engine; + LOG_STP("run_ui qml engine started"); + KirigamiPlugin::getInstance().registerTypes(); +#if defined(__APPLE__) && !defined(Q_OS_IOS) + // when running the QML UI on a Mac the deployment of the QML Components seems + // to fail and the search path for the components is rather odd - simply the + // same directory the executable was started from /Contents/MacOS/ + // To work around this we need to manually copy the components at install time + // to Contents/Frameworks/qml and make sure that we add the correct import path + QStringList importPathList = engine.importPathList(); + Q_FOREACH(QString importPath, importPathList) { + if (importPath.contains("MacOS")) + engine.addImportPath(importPath.replace("MacOS", "Frameworks")); + } + qDebug() << "QML import path" << engine.importPathList(); +#endif + engine.addImportPath("qrc://imports"); + DiveListModel diveListModel; + LOG_STP("run_ui diveListModel started"); + DiveListSortModel *sortModel = new DiveListSortModel(0); + sortModel->setSourceModel(&diveListModel); + sortModel->setDynamicSortFilter(true); + sortModel->setSortRole(DiveListModel::DiveDateRole); + sortModel->sort(0, Qt::DescendingOrder); + LOG_STP("run_ui diveListModel sorted"); + GpsListModel gpsListModel; + QSortFilterProxyModel *gpsSortModel = new QSortFilterProxyModel(0); + gpsSortModel->setSourceModel(&gpsListModel); + gpsSortModel->setDynamicSortFilter(true); + gpsSortModel->setSortRole(GpsListModel::GpsWhenRole); + gpsSortModel->sort(0, Qt::DescendingOrder); + QQmlContext *ctxt = engine.rootContext(); + ctxt->setContextProperty("diveModel", sortModel); + ctxt->setContextProperty("gpsModel", gpsSortModel); + ctxt->setContextProperty("vendorList", vendorList); + set_non_bt_addresses(); + LOG_STP("run_ui set_non_bt_adresses"); + + ctxt->setContextProperty("connectionListModel", &connectionListModel); + ctxt->setContextProperty("logModel", MessageHandlerModel::self()); + + engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml"))); + LOG_STP("run_ui qml loaded"); + qqWindowObject = engine.rootObjects().value(0); + if (!qqWindowObject) { + fprintf(stderr, "can't create window object\n"); + exit(1); + } + QQuickWindow *qml_window = qobject_cast(qqWindowObject); + qml_window->setIcon(QIcon(":subsurface-mobile-icon")); + qqWindowObject->setProperty("messageText", QVariant("Subsurface-mobile startup")); + qDebug() << "qqwindow devicePixelRatio" << qml_window->devicePixelRatio() << qml_window->screen()->devicePixelRatio(); + QScreen *screen = qml_window->screen(); + QObject::connect(qml_window, &QQuickWindow::screenChanged, QMLManager::instance(), &QMLManager::screenChanged); + QMLManager *manager = QMLManager::instance(); + LOG_STP("run_ui qmlmanager instance started"); + // now that the log file is initialized... + show_computer_list(); + LOG_STP("run_ui show_computer_list"); + + manager->setDevicePixelRatio(qml_window->devicePixelRatio(), qml_window->screen()); + manager->dlSortModel = sortModel; + manager->screenChanged(screen); + qDebug() << "qqwindow screen has ldpi/pdpi" << screen->logicalDotsPerInch() << screen->physicalDotsPerInch(); +#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) + qml_window->setHeight(1200); + qml_window->setWidth(800); +#endif + qml_window->show(); + LOG_STP("run_ui running exec"); +#else + MainWindow::instance()->show(); +#endif + qApp->exec(); +} diff --git a/subsurface-mobile-helper.cpp b/subsurface-mobile-helper.cpp index fc0431ef9..1c7474022 100644 --- a/subsurface-mobile-helper.cpp +++ b/subsurface-mobile-helper.cpp @@ -9,7 +9,6 @@ #include #include -#include "core/qt-gui.h" #include #include @@ -25,8 +24,6 @@ #include "core/ssrf.h" -QObject *qqWindowObject = NULL; - void set_non_bt_addresses() { #if defined(Q_OS_ANDROID) connectionListModel.addAddress("FTDI"); @@ -40,101 +37,6 @@ void set_non_bt_addresses() { #endif } -void init_ui() -{ - init_qt_late(); -} - -void run_ui() -{ - LOG_STP("run_ui starting"); - register_qml_types(); - - QQmlApplicationEngine engine; - LOG_STP("run_ui qml engine started"); - KirigamiPlugin::getInstance().registerTypes(); -#if defined(__APPLE__) && !defined(Q_OS_IOS) - // when running the QML UI on a Mac the deployment of the QML Components seems - // to fail and the search path for the components is rather odd - simply the - // same directory the executable was started from /Contents/MacOS/ - // To work around this we need to manually copy the components at install time - // to Contents/Frameworks/qml and make sure that we add the correct import path - QStringList importPathList = engine.importPathList(); - Q_FOREACH(QString importPath, importPathList) { - if (importPath.contains("MacOS")) - engine.addImportPath(importPath.replace("MacOS", "Frameworks")); - } - qDebug() << "QML import path" << engine.importPathList(); -#endif - engine.addImportPath("qrc://imports"); - DiveListModel diveListModel; - LOG_STP("run_ui diveListModel started"); - DiveListSortModel *sortModel = new DiveListSortModel(0); - sortModel->setSourceModel(&diveListModel); - sortModel->setDynamicSortFilter(true); - sortModel->setSortRole(DiveListModel::DiveDateRole); - sortModel->sort(0, Qt::DescendingOrder); - LOG_STP("run_ui diveListModel sorted"); - GpsListModel gpsListModel; - QSortFilterProxyModel *gpsSortModel = new QSortFilterProxyModel(0); - gpsSortModel->setSourceModel(&gpsListModel); - gpsSortModel->setDynamicSortFilter(true); - gpsSortModel->setSortRole(GpsListModel::GpsWhenRole); - gpsSortModel->sort(0, Qt::DescendingOrder); - QQmlContext *ctxt = engine.rootContext(); - ctxt->setContextProperty("diveModel", sortModel); - ctxt->setContextProperty("gpsModel", gpsSortModel); - ctxt->setContextProperty("vendorList", vendorList); - set_non_bt_addresses(); - LOG_STP("run_ui set_non_bt_adresses"); - - ctxt->setContextProperty("connectionListModel", &connectionListModel); - ctxt->setContextProperty("logModel", MessageHandlerModel::self()); - - engine.load(QUrl(QStringLiteral("qrc:///qml/main.qml"))); - LOG_STP("run_ui qml loaded"); - qqWindowObject = engine.rootObjects().value(0); - if (!qqWindowObject) { - fprintf(stderr, "can't create window object\n"); - exit(1); - } - QQuickWindow *qml_window = qobject_cast(qqWindowObject); - qml_window->setIcon(QIcon(":subsurface-mobile-icon")); - qqWindowObject->setProperty("messageText", QVariant("Subsurface-mobile startup")); - qDebug() << "qqwindow devicePixelRatio" << qml_window->devicePixelRatio() << qml_window->screen()->devicePixelRatio(); - QScreen *screen = qml_window->screen(); - QObject::connect(qml_window, &QQuickWindow::screenChanged, QMLManager::instance(), &QMLManager::screenChanged); - QMLManager *manager = QMLManager::instance(); - LOG_STP("run_ui qmlmanager instance started"); - // now that the log file is initialized... - show_computer_list(); - LOG_STP("run_ui show_computer_list"); - - manager->setDevicePixelRatio(qml_window->devicePixelRatio(), qml_window->screen()); - manager->dlSortModel = sortModel; - manager->screenChanged(screen); - qDebug() << "qqwindow screen has ldpi/pdpi" << screen->logicalDotsPerInch() << screen->physicalDotsPerInch(); -#if !defined(Q_OS_ANDROID) && !defined(Q_OS_IOS) - qml_window->setHeight(1200); - qml_window->setWidth(800); -#endif - qml_window->show(); - LOG_STP("run_ui running exec"); - qApp->exec(); -} - -void exit_ui() -{ - delete qApp; - free((void *)existing_filename); -} - -double get_screen_dpi() -{ - QDesktopWidget *mydesk = qApp->desktop(); - return mydesk->physicalDpiX(); -} - bool haveFilesOnCommandLine() { return false;