#pragma once #include "lts_multi_monitor_export.h" #include #include #include namespace LtsMultiMonitor { class LtsScreenBase; class MultiMonitorSelectorBase; class LtsScreenContainer; class LTSMULTIMONITOR_EXPORT LtsMultiMonitor : public QObject { Q_OBJECT public: static LtsMultiMonitor *getInstance(); bool selectScreen(QWidget *widget, LtsScreenContainer *swap = nullptr, bool putOnMainIfFree = true, bool ltsScreenNormalOnly = false, const QVector &irreplacableWidgets = {}); bool selectAndSwap(QWidget *widget); void setEnableMultiMonitorMode() { m_active = true; } void setDebugMultiMonitorMode() { m_debugMargins = true; } bool isActive() const { return m_active; } LtsScreenBase *widgetsScreen(QWidget *widget); void freezeMagicCorner(int screenId); void unfreezeMagicCorner(int screenId); bool putScreen(QWidget *widget, int screenId, int screenPart); bool putScreenAutomatically(QWidget *widget); static void place(QWidget *widget); void setSkipScreen(int screenId, int subScreenId = -1) { m_skipScreenId = screenId; m_subSkipScreenId = subScreenId; } LtsScreenBase *mainScreen() const { return m_mainScreen; } int screenCount() const; private slots: void screenDied(); private: LtsMultiMonitor(); ~LtsMultiMonitor(); static void cleanupLtsMultiMonitor(); void init(); bool cancelAndProcessIfInactive(QWidget *widget) const; static bool isWidgetSecondary(QWidget *widget) ; bool overlapBaseLayouts(QWidget *widget); bool isOverlapBaseLayouts() const; QVector m_screens; int m_nextScreenId { 0 }; LtsScreenBase *m_mainScreen; bool m_active; bool m_initialized; int m_skipScreenId; int m_subSkipScreenId; bool m_overlapBaseLayouts; bool m_debugMargins; signals: void signalQuitLoop(); void signalSelected(); void signalScreenCountChanged(int); void signalMakeAllSwole(); }; }