From 4ef9e4c70ca418a0358c6462261b3dc9039e3546 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Mon, 14 Nov 2016 12:23:59 +0100 Subject: [PATCH] feat(app): move code from `main.cpp` in `app/App.xpp` --- tests/src/app/App.cpp | 120 +++++++++++++++++++++++++++++++++++++++--- tests/src/app/App.hpp | 10 ++++ tests/src/main.cpp | 117 ---------------------------------------- 3 files changed, 124 insertions(+), 123 deletions(-) diff --git a/tests/src/app/App.cpp b/tests/src/app/App.cpp index f2ae51a30..795b117f8 100644 --- a/tests/src/app/App.cpp +++ b/tests/src/app/App.cpp @@ -1,11 +1,20 @@ -#include - -#include +#include +#include +#include +#include +#include #include +#include "../components/contacts/ContactsListProxyModel.hpp" +#include "../components/linphone/LinphoneCore.hpp" +#include "../components/notification/Notification.hpp" +#include "../components/settings/AccountSettingsModel.hpp" +#include "../components/timeline/TimelineModel.hpp" + #include "App.hpp" #define LANGUAGES_PATH ":/languages/" +#define WINDOW_ICON_PATH ":/assets/images/linphone.png" // =================================================================== @@ -13,10 +22,109 @@ App::App (int &argc, char **argv) : QApplication(argc, argv) { // Try to use default locale. Otherwise use english. if (m_translator.load(QString(LANGUAGES_PATH) + QLocale::system().name()) || m_translator.load(LANGUAGES_PATH "en")) { - this->installTranslator(&m_translator); + installTranslator(&m_translator); } else { - qWarning() << "No translation found."; + qWarning("No translation found."); } - this->setWindowIcon(QIcon(":/assets/images/linphone.png")); + setWindowIcon(QIcon(WINDOW_ICON_PATH)); + + // Provide `+custom` folders for custom components. + m_file_selector = new QQmlFileSelector(&m_engine); + m_file_selector->setExtraSelectors(QStringList("custom")); + + // Set modules paths. + m_engine.addImportPath(":/ui/modules"); + m_engine.addImportPath(":/ui/scripts"); + m_engine.addImportPath(":/ui/views"); + + // Register types and load context properties. + registerTypes(); + addContextProperties(); + + // Load main view. + m_engine.load(QUrl("qrc:/ui/views/App/MainWindow/MainWindow.qml")); + if (m_engine.rootObjects().isEmpty()) + qFatal("Unable to open main window."); + + // Enable TrayIconSystem. + if (!QSystemTrayIcon::isSystemTrayAvailable()) + qWarning("System tray not found on this system."); + else + setTrayIcon(); +} + +// ------------------------------------------------------------------- + +void App::registerTypes () { + qmlRegisterUncreatableType( + "Linphone", 1, 0, "Presence", "Presence is uncreatable" + ); + + ContactsListProxyModel::initContactsListModel(new ContactsListModel()); + qmlRegisterType("Linphone", 1, 0, "ContactsListProxyModel"); + + // Expose the static functions of ContactsListModel. + qmlRegisterSingletonType( + "Linphone", 1, 0, "ContactsListModel", + [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject *{ + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); + + return ContactsListProxyModel::getContactsListModel(); + } + ); +} + +void App::addContextProperties () { + QQmlContext *context = m_engine.rootContext(); + QQmlComponent component(&m_engine, QUrl("qrc:/ui/views/App/Calls/Calls.qml")); + + // Windows. + if (component.isError()) { + qWarning() << component.errors(); + } else { + // context->setContextProperty("CallsWindow", component.create()); + } + + // Models. + context->setContextProperty("AccountSettingsModel", new AccountSettingsModel()); + context->setContextProperty("TimelineModel", new TimelineModel()); + + // Other. + context->setContextProperty("LinphoneCore", LinphoneCore::getInstance()); + context->setContextProperty("Notification", new Notification()); +} + +void App::setTrayIcon () { + QQuickWindow *root = qobject_cast(m_engine.rootObjects().at(0)); + QMenu *menu = new QMenu(); + QSystemTrayIcon *tray_icon = new QSystemTrayIcon(root); + + // trayIcon: Right click actions. + QAction *quit_action = new QAction("Quit", root); + root->connect(quit_action, &QAction::triggered, qApp, &QCoreApplication::quit); + + QAction *restore_action = new QAction("Restore", root); + root->connect(restore_action, &QAction::triggered, root, &QQuickWindow::showNormal); + + // trayIcon: Left click actions. + root->connect(tray_icon, &QSystemTrayIcon::activated, [root](QSystemTrayIcon::ActivationReason reason) { + if (reason == QSystemTrayIcon::Trigger) { + if (root->visibility() == QWindow::Hidden) + root->showNormal(); + else + root->hide(); + } + }); + + // Build trayIcon menu. + menu->addAction(restore_action); + menu->addSeparator(); + menu->addAction(quit_action); + + tray_icon->setContextMenu(menu); + tray_icon->setIcon(QIcon(WINDOW_ICON_PATH)); + tray_icon->setToolTip("Linphone"); + tray_icon->show(); } diff --git a/tests/src/app/App.hpp b/tests/src/app/App.hpp index e27ab0c5e..bbc5409b5 100644 --- a/tests/src/app/App.hpp +++ b/tests/src/app/App.hpp @@ -2,14 +2,24 @@ #define APP_H_ #include +#include +#include #include +// =================================================================== + class App : public QApplication { public: App (int &argc, char **argv); virtual ~App () {} private: + void registerTypes (); + void addContextProperties (); + void setTrayIcon (); + + QQmlApplicationEngine m_engine; + QQmlFileSelector *m_file_selector; QTranslator m_translator; }; diff --git a/tests/src/main.cpp b/tests/src/main.cpp index 2e87716f6..0fdd1f370 100644 --- a/tests/src/main.cpp +++ b/tests/src/main.cpp @@ -1,130 +1,13 @@ -#include -#include -#include -#include -#include -#include -#include -#include - #include "app/App.hpp" #include "app/Logger.hpp" -#include "components/contacts/ContactsListProxyModel.hpp" -#include "components/linphone/LinphoneCore.hpp" -#include "components/notification/Notification.hpp" -#include "components/settings/AccountSettingsModel.hpp" -#include "components/timeline/TimelineModel.hpp" - -// =================================================================== - -void setTrayIcon (QQmlApplicationEngine &engine) { - QQuickWindow *root = qobject_cast(engine.rootObjects().at(0)); - QMenu *menu = new QMenu(); - QSystemTrayIcon *tray_icon = new QSystemTrayIcon(root); - - // trayIcon: Right click actions. - QAction *quit_action = new QAction("Quit", root); - root->connect(quit_action, &QAction::triggered, qApp, &QCoreApplication::quit); - - QAction *restore_action = new QAction("Restore", root); - root->connect(restore_action, &QAction::triggered, root, &QQuickWindow::showNormal); - - // trayIcon: Left click actions. - root->connect(tray_icon, &QSystemTrayIcon::activated, [root](QSystemTrayIcon::ActivationReason reason) { - if (reason == QSystemTrayIcon::Trigger) { - if (root->visibility() == QWindow::Hidden) - root->showNormal(); - else - root->hide(); - } - }); - - // Build trayIcon menu. - menu->addAction(restore_action); - menu->addSeparator(); - menu->addAction(quit_action); - - tray_icon->setContextMenu(menu); - tray_icon->setIcon(QIcon(":/assets/images/linphone.png")); - tray_icon->setToolTip("Linphone"); - tray_icon->show(); -} - -void registerTypes () { - qmlRegisterUncreatableType( - "Linphone", 1, 0, "Presence", "Presence is uncreatable" - ); - - ContactsListProxyModel::initContactsListModel(new ContactsListModel()); - qmlRegisterType("Linphone", 1, 0, "ContactsListProxyModel"); - - // Expose the static functions of ContactsListModel. - qmlRegisterSingletonType( - "Linphone", 1, 0, "ContactsListModel", - [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject *{ - Q_UNUSED(engine); - Q_UNUSED(scriptEngine); - - return ContactsListProxyModel::getContactsListModel(); - } - ); -} - -void addContextProperties (QQmlApplicationEngine &engine) { - QQmlContext *context = engine.rootContext(); - QQmlComponent component(&engine, QUrl("qrc:/ui/views/App/Calls/Calls.qml")); - - // Windows. - if (component.isError()) { - qWarning() << component.errors(); - } else { - // context->setContextProperty("CallsWindow", component.create()); - } - - // Models. - context->setContextProperty("AccountSettingsModel", new AccountSettingsModel()); - context->setContextProperty("TimelineModel", new TimelineModel()); - - // Other. - context->setContextProperty("LinphoneCore", LinphoneCore::getInstance()); - context->setContextProperty("Notification", new Notification()); -} // =================================================================== int main (int argc, char *argv[]) { qInstallMessageHandler(qmlLogger); - registerTypes(); - QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling); App app(argc, argv); - QQmlApplicationEngine engine; - - // Provide `+custom` folders for custom components. - QQmlFileSelector *selector = new QQmlFileSelector(&engine); - selector->setExtraSelectors(QStringList("custom")); - - // Set modules paths. - engine.addImportPath(":/ui/modules"); - engine.addImportPath(":/ui/scripts"); - engine.addImportPath(":/ui/views"); - - // Load context properties. - addContextProperties(engine); - - // Load main view. - engine.load(QUrl("qrc:/ui/views/App/MainWindow/MainWindow.qml")); - if (engine.rootObjects().isEmpty()) { - qWarning() << "Unable to open main window."; - return EXIT_FAILURE; - } - - // Enable TrayIconSystem. - if (!QSystemTrayIcon::isSystemTrayAvailable()) - qWarning() << "System tray not found on this system."; - else - setTrayIcon(engine); // Run! return app.exec();