From ad34694826fa5574b3708f34e499666f8e3d43b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Cie=C5=9Blak?= Date: Fri, 3 Feb 2023 17:36:07 +0100 Subject: [PATCH] chore(general): Deduplicate and move StatusWindow to StatusQ --- .../StatusQ}/statuswindow.h | 16 +---- .../include/StatusQ/typesregistration.h | 3 + ui/StatusQ/sandbox/CMakeLists.txt | 27 +++++++- ui/StatusQ/sandbox/main.qml | 2 +- ui/StatusQ/sandbox/sandboxapp.cpp | 4 +- ui/StatusQ/sandbox/statuswindow.cpp | 69 ------------------- ui/StatusQ/sandbox/statuswindow_mac.mm | 39 ----------- .../StatusQ/src/statuswindow.cpp | 11 ++- .../StatusQ/src/statuswindow_osx.mm | 2 +- .../StatusQ/src/statuswindow_other.cpp | 2 +- ui/StatusQ/src/typesregistration.cpp | 10 +++ ui/main.qml | 3 +- vendor/DOtherSide/lib/CMakeLists.txt | 29 +++++++- .../DOtherSide/DOtherSideStatusWindow.h | 41 ----------- vendor/DOtherSide/lib/src/DOtherSide.cpp | 6 +- 15 files changed, 86 insertions(+), 178 deletions(-) rename ui/StatusQ/{sandbox => include/StatusQ}/statuswindow.h (58%) create mode 100644 ui/StatusQ/include/StatusQ/typesregistration.h delete mode 100644 ui/StatusQ/sandbox/statuswindow.cpp delete mode 100644 ui/StatusQ/sandbox/statuswindow_mac.mm rename vendor/DOtherSide/lib/src/DOtherSideStatusWindow.cpp => ui/StatusQ/src/statuswindow.cpp (69%) rename vendor/DOtherSide/lib/src/DOtherSideStatusWindow_osx.mm => ui/StatusQ/src/statuswindow_osx.mm (96%) rename vendor/DOtherSide/lib/src/DOtherSideStatusWindow_other.cpp => ui/StatusQ/src/statuswindow_other.cpp (63%) create mode 100644 ui/StatusQ/src/typesregistration.cpp delete mode 100644 vendor/DOtherSide/lib/include/DOtherSide/DOtherSideStatusWindow.h diff --git a/ui/StatusQ/sandbox/statuswindow.h b/ui/StatusQ/include/StatusQ/statuswindow.h similarity index 58% rename from ui/StatusQ/sandbox/statuswindow.h rename to ui/StatusQ/include/StatusQ/statuswindow.h index 8b8bc1bef3..de1aa1f04a 100644 --- a/ui/StatusQ/sandbox/statuswindow.h +++ b/ui/StatusQ/include/StatusQ/statuswindow.h @@ -1,5 +1,4 @@ -#ifndef STATUSWINDOW_H -#define STATUSWINDOW_H +#pragma once #include #include @@ -11,10 +10,9 @@ class StatusWindow: public QQuickWindow Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged) public: - explicit StatusWindow(QQuickWindow *parent = nullptr); + explicit StatusWindow(QWindow *parent = nullptr); Q_INVOKABLE void toggleFullScreen(); - Q_INVOKABLE void updatePosition(); bool isFullScreen() const; @@ -25,16 +23,6 @@ signals: private: void removeTitleBar(); void showTitleBar(); -#ifdef Q_OS_WIN - void removeTitleBarWin(); - void showTitleBarWin(); -#elif defined Q_OS_MACOS - void removeTitleBarMac(); - void showTitleBarMac(); -#endif -private: bool m_isFullScreen; }; - -#endif // STATUSWINDOW_H diff --git a/ui/StatusQ/include/StatusQ/typesregistration.h b/ui/StatusQ/include/StatusQ/typesregistration.h new file mode 100644 index 0000000000..eec3d1583c --- /dev/null +++ b/ui/StatusQ/include/StatusQ/typesregistration.h @@ -0,0 +1,3 @@ +#pragma once + +void registerStatusQTypes(); diff --git a/ui/StatusQ/sandbox/CMakeLists.txt b/ui/StatusQ/sandbox/CMakeLists.txt index 2e08725698..9d042cc0b1 100644 --- a/ui/StatusQ/sandbox/CMakeLists.txt +++ b/ui/StatusQ/sandbox/CMakeLists.txt @@ -7,11 +7,29 @@ find_package( file(GLOB_RECURSE QML_FILES "../*.qml" "../qmldir") file(GLOB_RECURSE JS_FILES "../*.js") -file(GLOB_RECURSE HEADERS *.h) + +set(HEADERS sandboxapp.h) +set(SOURCES main.cpp sandboxapp.cpp) + +set(STATUSQ_DIR ..) +set(STATUSQ_HEADERS + ${STATUSQ_DIR}/include/StatusQ/statuswindow.h + ${STATUSQ_DIR}/include/StatusQ/typesregistration.h +) + +set(STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow.cpp + ${STATUSQ_DIR}/src/typesregistration.cpp +) + if(APPLE) - file(GLOB_RECURSE SOURCES *.cpp *.mm) + list(APPEND STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow_osx.mm + ) else() - file(GLOB_RECURSE SOURCES *.cpp) + list(APPEND STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow_other.cpp + ) endif() set(QRC_FILES qml.qrc ../src/statusq.qrc ../src/assets.qrc) @@ -21,11 +39,14 @@ add_executable( ${PROJECT_NAME} ${HEADERS} ${SOURCES} + ${STATUSQ_HEADERS} + ${STATUSQ_SOURCES} ${QRC_FILES} ${QRC_COMPILED} ${QML_FILES} ${JS_FILES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${STATUSQ_DIR}/include) target_compile_definitions(${PROJECT_NAME} PRIVATE SRC_DIR="${CMAKE_CURRENT_LIST_DIR}") target_link_libraries( diff --git a/ui/StatusQ/sandbox/main.qml b/ui/StatusQ/sandbox/main.qml index 2fb4d4d7b8..8e2a58ccb8 100644 --- a/ui/StatusQ/sandbox/main.qml +++ b/ui/StatusQ/sandbox/main.qml @@ -6,7 +6,7 @@ import QtQuick.Layouts 1.14 import Qt.labs.settings 1.0 import QtQml.Models 2.14 -import Sandbox 0.1 +import StatusQ 0.1 import StatusQ.Core 0.1 import StatusQ.Core.Theme 0.1 diff --git a/ui/StatusQ/sandbox/sandboxapp.cpp b/ui/StatusQ/sandbox/sandboxapp.cpp index 75e6593d27..85b9a0a686 100644 --- a/ui/StatusQ/sandbox/sandboxapp.cpp +++ b/ui/StatusQ/sandbox/sandboxapp.cpp @@ -5,7 +5,7 @@ #include #include -#include "statuswindow.h" +#include "StatusQ/typesregistration.h" SandboxApp::SandboxApp(int &argc, char **argv) : QGuiApplication(argc, argv) @@ -20,7 +20,7 @@ SandboxApp::SandboxApp(int &argc, char **argv) void SandboxApp::startEngine() { - qmlRegisterType("Sandbox", 0, 1, "StatusWindow"); + registerStatusQTypes(); #ifdef QT_DEBUG const QUrl url = QUrl::fromLocalFile(SRC_DIR + QStringLiteral("/main.qml")); diff --git a/ui/StatusQ/sandbox/statuswindow.cpp b/ui/StatusQ/sandbox/statuswindow.cpp deleted file mode 100644 index 58a7252803..0000000000 --- a/ui/StatusQ/sandbox/statuswindow.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "statuswindow.h" - -StatusWindow::StatusWindow(QQuickWindow *parent) - : QQuickWindow(parent) - , m_isFullScreen(false) -{ - removeTitleBar(); - - connect(this, &QQuickWindow::windowStateChanged, [&](Qt::WindowState windowState) { - if (windowState == Qt::WindowNoState) { - removeTitleBar(); - m_isFullScreen = false; - emit isFullScreenChanged(); - } else if (windowState == Qt::WindowFullScreen) { - m_isFullScreen = true; - emit isFullScreenChanged(); - showTitleBar(); - } - }); -} - -void StatusWindow::updatePosition() -{ - auto point = QPoint(screen()->geometry().center().x() - geometry().width() / 2, - screen()->geometry().center().y() - geometry().height() / 2); - if (point != this->position()) { - this->setPosition(point); - } -} - -void StatusWindow::toggleFullScreen() -{ - if (m_isFullScreen) { - showNormal(); - } else { - showFullScreen(); - } -} - -bool StatusWindow::isFullScreen() const -{ - return m_isFullScreen; -} - -void StatusWindow::removeTitleBar() -{ -#ifdef Q_OS_WIN - removeTitleBarWin(); -#elif defined Q_OS_MACOS - removeTitleBarMac(); -#endif -} - -void StatusWindow::showTitleBar() -{ -#ifdef Q_OS_WIN - showTitleBarWin(); -#elif defined Q_OS_MACOS - showTitleBarMac(); -#endif -} - -#ifdef Q_OS_WIN -void StatusWindow::removeTitleBarWin() -{} - -void StatusWindow::showTitleBarWin() -{} -#endif diff --git a/ui/StatusQ/sandbox/statuswindow_mac.mm b/ui/StatusQ/sandbox/statuswindow_mac.mm deleted file mode 100644 index b553b55f1e..0000000000 --- a/ui/StatusQ/sandbox/statuswindow_mac.mm +++ /dev/null @@ -1,39 +0,0 @@ -#include "statuswindow.h" - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -void StatusWindow::removeTitleBarMac() -{ - NSView *nsView = reinterpret_cast(this->winId()); - NSWindow *window = [nsView window]; - - window.titlebarAppearsTransparent = true; - window.titleVisibility = NSWindowTitleHidden; - window.styleMask |= NSWindowStyleMaskFullSizeContentView; - NSButton* close = [window standardWindowButton:NSWindowCloseButton]; - NSView* titleBarContainerView = close.superview.superview; - [titleBarContainerView setHidden:YES]; -} - -void StatusWindow::showTitleBarMac() -{ - NSView *nsView = reinterpret_cast(this->winId()); - NSWindow *window = [nsView window]; - - window.titlebarAppearsTransparent = true; - window.titleVisibility = NSWindowTitleHidden; - window.styleMask |= NSWindowStyleMaskFullSizeContentView; - NSButton* close = [window standardWindowButton:NSWindowCloseButton]; - NSView* titleBarContainerView = close.superview.superview; - [titleBarContainerView setHidden:NO]; -} diff --git a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow.cpp b/ui/StatusQ/src/statuswindow.cpp similarity index 69% rename from vendor/DOtherSide/lib/src/DOtherSideStatusWindow.cpp rename to ui/StatusQ/src/statuswindow.cpp index 1864d963be..3e471f14f6 100644 --- a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow.cpp +++ b/ui/StatusQ/src/statuswindow.cpp @@ -1,4 +1,4 @@ -#include "DOtherSide/DOtherSideStatusWindow.h" +#include "StatusQ/statuswindow.h" StatusWindow::StatusWindow(QWindow *parent) : QQuickWindow(parent), @@ -19,6 +19,15 @@ StatusWindow::StatusWindow(QWindow *parent) }); } +void StatusWindow::updatePosition() +{ + auto point = QPoint(screen()->geometry().center().x() - geometry().width() / 2, + screen()->geometry().center().y() - geometry().height() / 2); + if (point != this->position()) { + this->setPosition(point); + } +} + void StatusWindow::toggleFullScreen() { if (m_isFullScreen) { diff --git a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow_osx.mm b/ui/StatusQ/src/statuswindow_osx.mm similarity index 96% rename from vendor/DOtherSide/lib/src/DOtherSideStatusWindow_osx.mm rename to ui/StatusQ/src/statuswindow_osx.mm index 7fb5d4352b..ceeb4b09ef 100644 --- a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow_osx.mm +++ b/ui/StatusQ/src/statuswindow_osx.mm @@ -1,4 +1,4 @@ -#include "DOtherSide/DOtherSideStatusWindow.h" +#include "StatusQ/statuswindow.h" #include #include diff --git a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow_other.cpp b/ui/StatusQ/src/statuswindow_other.cpp similarity index 63% rename from vendor/DOtherSide/lib/src/DOtherSideStatusWindow_other.cpp rename to ui/StatusQ/src/statuswindow_other.cpp index dc1f4fe386..eed0b342d0 100644 --- a/vendor/DOtherSide/lib/src/DOtherSideStatusWindow_other.cpp +++ b/ui/StatusQ/src/statuswindow_other.cpp @@ -1,4 +1,4 @@ -#include "DOtherSide/DOtherSideStatusWindow.h" +#include "StatusQ/statuswindow.h" void StatusWindow::removeTitleBar() { diff --git a/ui/StatusQ/src/typesregistration.cpp b/ui/StatusQ/src/typesregistration.cpp new file mode 100644 index 0000000000..2549d8a33d --- /dev/null +++ b/ui/StatusQ/src/typesregistration.cpp @@ -0,0 +1,10 @@ +#include "StatusQ/typesregistration.h" + +#include "StatusQ/statuswindow.h" + +#include + +void registerStatusQTypes() +{ + qmlRegisterType("StatusQ", 0 , 1, "StatusWindow"); +} diff --git a/ui/main.qml b/ui/main.qml index 11d58cd8ff..f65c9cfc15 100644 --- a/ui/main.qml +++ b/ui/main.qml @@ -7,8 +7,6 @@ import QtQuick.Window 2.12 import QtQml 2.13 import QtQuick.Controls.Universal 2.12 -import DotherSide 0.1 - import utils 1.0 import shared 1.0 import shared.panels 1.0 @@ -17,6 +15,7 @@ import shared.popups 1.0 import mainui 1.0 import AppLayouts.Onboarding 1.0 +import StatusQ 0.1 import StatusQ.Core.Theme 0.1 StatusWindow { diff --git a/vendor/DOtherSide/lib/CMakeLists.txt b/vendor/DOtherSide/lib/CMakeLists.txt index 04715043f2..0698219c3b 100644 --- a/vendor/DOtherSide/lib/CMakeLists.txt +++ b/vendor/DOtherSide/lib/CMakeLists.txt @@ -18,13 +18,38 @@ macro(add_target name type) file(GLOB MONITORING_SOURCES src/Status/Monitoring/*.cpp) endif() + set(STATUSQ_DIR ../../../ui/StatusQ) + set(STATUSQ_HEADERS + ${STATUSQ_DIR}/include/StatusQ/statuswindow.h + ${STATUSQ_DIR}/include/StatusQ/typesregistration.h + ) + + set(STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow.cpp + ${STATUSQ_DIR}/src/typesregistration.cpp + ) + + if(APPLE) + list(APPEND STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow_osx.mm + ) + else() + list(APPEND STATUSQ_SOURCES + ${STATUSQ_DIR}/src/statuswindow_other.cpp + ) + endif() + if(APPLE) file(GLOB MM_FILES src/*.mm src/Status/*.mm) #prepend items because .mm files need build priority to override cpp impl list(INSERT SOURCES 0 ${MM_FILES}) endif() - add_library(${name} ${type} ${SOURCES} ${HEADERS} ${MONITORING_SOURCES} ${MONITORING_HEADERS}) + add_library(${name} ${type} + ${SOURCES} ${HEADERS} + ${MONITORING_SOURCES} ${MONITORING_HEADERS} + ${STATUSQ_HEADERS} ${STATUSQ_SOURCES} + ) if (WIN32) target_compile_definitions(${name} PRIVATE -DWIN32) @@ -32,7 +57,7 @@ macro(add_target name type) set_target_properties(${name} PROPERTIES CXX_STANDARD 11 AUTOMOC ON) - target_include_directories(${name} PUBLIC include include/Qt) + target_include_directories(${name} PUBLIC include include/Qt ${STATUSQ_DIR}/include) target_link_libraries(${name} PRIVATE Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Qml Qt5::Quick Qt5::Network Qt5::Multimedia SortFilterProxyModel) diff --git a/vendor/DOtherSide/lib/include/DOtherSide/DOtherSideStatusWindow.h b/vendor/DOtherSide/lib/include/DOtherSide/DOtherSideStatusWindow.h deleted file mode 100644 index 2776ab487c..0000000000 --- a/vendor/DOtherSide/lib/include/DOtherSide/DOtherSideStatusWindow.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef STATUSWINDOW_H -#define STATUSWINDOW_H - -#include -#include - -class StatusWindow: public QQuickWindow -{ - Q_OBJECT - - Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged) - -public: - - explicit StatusWindow(QWindow *parent = nullptr); - - Q_INVOKABLE void toggleFullScreen(); - - bool isFullScreen() const; - - Q_INVOKABLE void updatePosition() { - auto point = QPoint(screen()->geometry().center().x() - geometry().width() / 2, screen()->geometry().center().y() - geometry().height() / 2); - if (point != this->position()) { - this->setPosition(point); - } - } - -signals: - void isFullScreenChanged(); - void secondInstanceDetected(); - -private: - void removeTitleBar(); - void showTitleBar(); - void initCallbacks(); - -private: - bool m_isFullScreen; -}; - -#endif // STATUSWINDOW_H diff --git a/vendor/DOtherSide/lib/src/DOtherSide.cpp b/vendor/DOtherSide/lib/src/DOtherSide.cpp index fdc2f9a612..814e2d7973 100644 --- a/vendor/DOtherSide/lib/src/DOtherSide.cpp +++ b/vendor/DOtherSide/lib/src/DOtherSide.cpp @@ -63,7 +63,6 @@ #include "DOtherSide/DosQAbstractItemModel.h" #include "DOtherSide/DosQDeclarative.h" #include "DOtherSide/DosQQuickImageProvider.h" -#include "DOtherSide/DOtherSideStatusWindow.h" #include "DOtherSide/DOtherSideSingleInstance.h" #include "DOtherSide/DOtherSideStatusSyntaxHighlighter.h" @@ -76,6 +75,8 @@ #include "DOtherSide/Status/QClipboardProxy.h" #include "DOtherSide/Status/RXValidator.h" +#include "StatusQ/statuswindow.h" + #ifdef MONITORING #include #include "DOtherSide/Status/Monitoring/Monitor.h" @@ -88,7 +89,8 @@ namespace { void register_meta_types() { qRegisterMetaType>(); - qmlRegisterType("DotherSide", 0 , 1, "StatusWindow"); + + qmlRegisterType("StatusQ", 0 , 1, "StatusWindow"); qmlRegisterType("DotherSide", 0 , 1, "StatusSyntaxHighlighter"); qmlRegisterSingletonType("DotherSide", 0 , 1, "QClipboardProxy", &QClipboardProxy::qmlInstance); qmlRegisterType("DotherSide", 0, 1, "RXValidator");