WSF
Environment.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2018 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11#ifndef ENVIRONMENT_HPP
12#define ENVIRONMENT_HPP
13
14class QFileInfo;
15
16#include <QApplication>
17#include <QPainter>
18#include <QTextDocument>
19
20#include "Signals.hpp"
21#include "UtCallbackHolder.hpp"
22#include "ViExport.hpp"
23#include "VtkInterface.hpp"
24#include "WkfEnvironment.hpp"
25
26#if defined(wizEnv)
27#undef wizEnv
28#endif
29#define wizEnv static_cast<wizard::Environment&>(wizard::Environment::GetInstance())
30
32
33namespace wizard
34{
35class Project;
36class ProjectWorkspace;
37class TextSource;
38struct ToolDef;
39
40// Determine when the application loses and gains focus; send the ApplicationActivated() event
41class ActivationFilter : public QObject
42{
43public:
45
46 explicit ActivationFilter(QObject* aParent = nullptr)
47 : QObject(aParent)
48 , mAppHasFocus(true)
49 {
50 }
51
52 bool eventFilter(QObject* obj, QEvent* event) override
53 {
54 if (event->type() == QEvent::FocusOut || event->type() == QEvent::FocusIn)
55 {
56 QFocusEvent* evt = (QFocusEvent*)event;
57 if (evt->reason() == Qt::ActiveWindowFocusReason)
58 {
59 bool hasFocusNow = nullptr != QApplication::activeWindow();
60 if (hasFocusNow != mAppHasFocus)
61 {
62 mAppHasFocus = hasFocusNow;
63 if (mAppHasFocus)
64 {
65 static bool activating = false;
66 if (!activating) // avoid reentering
67 {
68 activating = true;
69 wizSignals->ApplicationActivated();
70 activating = false;
71 }
72 }
73 }
74 }
75 }
76 return QObject::eventFilter(obj, event);
77 }
78};
79
80class ShutdownFilter : public QObject
81{
82public:
83 explicit ShutdownFilter(QObject* aParent = nullptr)
84 : QObject(aParent)
85 {
86 }
87
88 bool eventFilter(QObject* obj, QEvent* aEvent) override;
89};
90
91class VI_EXPORT Environment : public QObject
92{
93 Q_OBJECT
94
95public:
97 ~Environment() override;
98
99 static Environment& GetInstance();
100
101 static void Create();
102 static bool Exists() { return mInstancePtr != nullptr; }
103
104 void StartUp();
105 void Shutdown();
106
107 void UpdateMenus();
108
109 void PopulateRecents();
110
111 bool LoadScenario(const QStringList& aFiles);
112
113 void FileOpen();
114
115 void OpenUrl(const QUrl& aUrl);
116 void ProjectSettingsOpen(Project& aProject);
117
118 void MarginClickAction(Qt::MouseButton aButton, TextSource* aSource, size_t aLineNumber);
119 void MarginDraw(const QString& aSourcePath, QPainter& aPainter, const QMap<size_t, QPoint>& aVisibleLineMap);
120 void GetHighlightLines(const QString& aSourcePath, QList<size_t>& aLineList);
121 void LoadProject(const QUrl& aUrl);
123 void CopyFocusedData();
124 void UpdatePlatform(const QString& aPlatformName);
125 void DeletePlatform(const QString& aPlatformName);
127
129
130 void Undo();
131 void Redo();
132 void ClearUndo();
134 void BeginUndoCapture() noexcept;
137 bool IsCapturingUndo() const noexcept;
139 void EndUndoCapture() noexcept;
140
144 void RequestSelectPlatform(const QString& aPlatformName);
145
147 void SetVtkMoveMode(wizard::VtkInterface::MoveMode aMoveMode) noexcept;
149 wizard::VtkInterface::MoveMode GetVtkMoveMode() const noexcept;
150
153 void SetMapCloseConnection(const QMetaObject::Connection& aConnection) noexcept;
156 QMetaObject::Connection GetMapCloseConnection() const noexcept;
157
158signals:
159 void MarginClick(Qt::MouseButton aButton, const QString& aSourcePtr, size_t aLineNumber);
160 void MarginDrawRequest(const QString& aSourcePath, QPainter& aPainter, const QMap<size_t, QPoint>& aVisibleLineMap);
161 void HighlightLinesRequest(const QString& aSourcePath, QList<size_t>& aLineList);
163 void PlatformUpdated(const QString& aPlatformName);
164 void PlatformDeleted(const QString& aPlatformName);
166
167private:
168 void ActionsForFileRequested(const QFileInfo& aFileInfo, QMenu* aMenu);
169 void Execute(const QFileInfo& aFile, const ToolDef& aTool);
170 void ProcessTags(QString& aString, const QFileInfo& aFile) const;
171 bool MakeExecutable(QString& aExe, QStringList& aArgs) const;
172
173 static Environment* mInstancePtr;
174
175 std::unique_ptr<ProjectWorkspace> mWorkspacePtr;
176 std::unique_ptr<VtkInterface> mVtkInterfacePtr;
177
179 QMetaObject::Connection mMapCloseConnection;
180
181 WsfStandardApplication* mWsfApplicationPtr;
182};
183} // namespace wizard
184#endif // ENVIRONMENT_HPP
wizard::Signals * wizSignals
Definition Signals.cpp:19
#define VI_EXPORT
Definition ViExport.hpp:38
Definition WsfStandardApplication.hpp:27
bool eventFilter(QObject *obj, QEvent *event) override
Definition Environment.hpp:52
ActivationFilter(QObject *aParent=nullptr)
Definition Environment.hpp:46
bool mAppHasFocus
Definition Environment.hpp:44
void MarginDrawRequest(const QString &aSourcePath, QPainter &aPainter, const QMap< size_t, QPoint > &aVisibleLineMap)
void MarginClick(Qt::MouseButton aButton, const QString &aSourcePtr, size_t aLineNumber)
void UpdatePlatform(const QString &aPlatformName)
Definition Environment.cpp:450
void DeletePlatform(const QString &aPlatformName)
Definition Environment.cpp:455
static void Create()
Definition Environment.cpp:92
WsfStandardApplication & GetWsfStandardApplication()
Definition Environment.cpp:460
void EndUndoCapture() noexcept
Notifies the EditorManager to stop capturing many changes to consider as one change.
Definition Environment.cpp:497
QMetaObject::Connection GetMapCloseConnection() const noexcept
Definition Environment.cpp:522
void SetVtkMoveMode(wizard::VtkInterface::MoveMode aMoveMode) noexcept
Sets the MoveMode in the VtkInterface.
Definition Environment.cpp:507
void HighlightLinesRequest(const QString &aSourcePath, QList< size_t > &aLineList)
void Undo()
Definition Environment.cpp:472
static bool Exists()
Definition Environment.hpp:102
void PlatformUpdated(const QString &aPlatformName)
bool IsCapturingUndo() const noexcept
Definition Environment.cpp:492
void Redo()
Definition Environment.cpp:477
void BeginUndoCapture() noexcept
Notifies the EditorManager to start capturing many changes to consider as one change.
Definition Environment.cpp:487
wizard::VtkInterface::MoveMode GetVtkMoveMode() const noexcept
Gets the MoveMode in the VtkInterface.
Definition Environment.cpp:512
static Environment & GetInstance()
Definition Environment.cpp:86
void ClearUndo()
Definition Environment.cpp:482
void RequestSelectPlatform(const QString &aPlatformName)
Definition Environment.cpp:502
void CopyFocusedData()
Definition Environment.cpp:445
Environment()
Definition Environment.cpp:52
void PlatformDeleted(const QString &aPlatformName)
void SetMapCloseConnection(const QMetaObject::Connection &aConnection) noexcept
Definition Environment.cpp:517
void WsfStandardApplicationPendingDestruction()
Definition ProjectWorkspace.hpp:48
A WSF 'project'. Manages WSF sources files in a WSF project.
Definition Project.hpp:66
ShutdownFilter(QObject *aParent=nullptr)
Definition Environment.hpp:83
bool eventFilter(QObject *obj, QEvent *aEvent) override
Definition Environment.cpp:527
Definition TextSource.hpp:48
Definition VtkInterface.hpp:41
Template specialization for wsf::comm::Address. Allows usage of Address in std::unordered_map/set.
Definition WsfCommAddress.hpp:185
Definition Runner.hpp:22
Definition ToolPrefObject.hpp:21
Copyrights Multiple, All Rights Reserved