#pragma once #include #include #include #include #include #include #include #include #include namespace NGL { class INGLLogger; } namespace DeveloperTools { class AppWidget; } namespace LtsSession { class LtsSession; struct DdsConnectionParams; class LTSSESSION_EXPORT LtsSessionManager : public QObject { Q_OBJECT public: LtsSessionManager(); ~LtsSessionManager(); LtsSession *createSession(const DdsConnectionParams &connParams, bool hasBaseLayout = true, bool payloads = true, bool hidden = false); LtsSession *getSession(IDL::PartitionType partitionType, int partitionId); bool init(const DdsConnectionParams &connParams, const QVector &dataPluginList, const QVector &guiPluginList, LtsAppDescriptor::App appId, const QString &workspaceId, bool headless, bool hidden); int sessionCount() const { return m_sessionMap.count(); } LtsAppDescriptor::App appId() const { return m_appId; } bool isHeadless() const { return m_headless; } QVector sessions(); void softQuit(); private: friend class DeveloperTools::DevDialog; friend class DeveloperTools::AppWidget; struct SessionKey { SessionKey(IDL::PartitionType pt = IDL::PartitionType::Any, int pId = 0) : partitionType(pt) , partitionId(pId) {} IDL::PartitionType partitionType; int partitionId; bool operator<(const SessionKey &o) const { if (partitionType != o.partitionType) return partitionType < o.partitionType; return partitionId < o.partitionId; } }; void logout(); void addPayloads(LtsSession *session); QMap m_sessionMap; QVector m_dataPluginList; QVector m_guiPluginList; LtsAppDescriptor::App m_appId; bool m_headless; NGL::INGLLogger &m_logger; private slots: void slotCloseSession(); signals: void signalStopBlock(); void signalLogout(); void signalQuit(); void signalInitializationFinished(); void signalInitializationAborted(); void hideAllOtherBLWs(QObject *caller); void taskSwitch(QObject *caller); }; }