API Documentation
Loading...
Searching...
No Matches
QTModelManager.h
Go to the documentation of this file.
1/*--------------------------------------------------------------------------------------------
2Copyright (c) 2019, NDEVR LLC
3tyler.parke@ndevr.org
4 __ __ ____ _____ __ __ _______
5 | \ | | | __ \ | ___|\ \ / / | __ \
6 | \ | | | | \ \ | |___ \ \ / / | |__) |
7 | . \| | | |__/ / | |___ \ V / | _ /
8 | |\ |_|_____/__|_____|___\_/____| | \ \
9 |__| \__________________________________| \__\
10
11Subject to the terms of the Enterprise+ Agreement, NDEVR hereby grants
12Licensee a limited, non-exclusive, non-transferable, royalty-free license
13(without the right to sublicense) to use the API solely for the purpose of
14Licensee's internal development efforts to develop applications for which
15the API was provided.
16
17The above copyright notice and this permission notice shall be included in all
18copies or substantial portions of the Software.
19
20THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
21INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
22PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
23FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25DEALINGS IN THE SOFTWARE.
26
27Library: NDEVR
28File: QTModelManager
29Included in API: True
30Author(s): Tyler Parke
31 *-----------------------------------------------------------------------------------------**/
32#pragma once
33#include "DLLInfo.h"
34#include <NDEVR/SoftwareService.h>
35#include <NDEVR/PopupInfo.h>
36#include <NDEVR/SelectionTreeManager.h>
37#include <NDEVR/Model.h>
38#include <NDEVR/DesignObjectLookup.h>
39#include <NDEVR/SnapLocation.h>
40
41#include <NDEVR/UUID.h>
42#include <NDEVR/Dictionary.h>
43#include <QTimer>
44class QMenu;
45class QMimeData;
46namespace NDEVR
47{
48 struct FileRequest;
49 struct ExportRequest;
50 struct ShowPropertiesSettings;
51 class QTModelManagerView;
52 class QTDesignObject;
53 class WindowManager;
54 class VulkanSession;
55 class QCaptureManager;
56 class CachedFactoryIOThread;
57 class FileFormat;
58 class LibraryManager;
59 class ModelEditController;
60 class BasicThread;
61 class Thread;
62 class Project;
63 struct FactoryParameters;
64 class QTModelManager;
65 class ProjectFileManager;
66 class ContextMenuManager;
67 class DesignCommand;
68 class GraphicsSession;
69 class GraphicsDevice;
70 struct CaptureRequest;
71 /**--------------------------------------------------------------------------------------------------
72 \brief Used for interfacing with a Gaphics engine, such as Vulkan or OpenGL.
73 **/
74 class GraphicsManagerBase : public QObject, public SoftwareService
75 {
76 public:
77 virtual bool hasGraphicsSession(const DynamicPointer<GraphicsDevice>& device) = 0;
79 virtual void addGraphicsSession(DynamicPointer<GraphicsSession> session, bool add_cameras = true) = 0;
80 virtual bool requestHandleManagerUpdating() const = 0;
81 virtual void addRequest(const ConstPointer<CaptureRequest>& request) = 0;
82 virtual void executeRequest(const ConstPointer<CaptureRequest>& request) = 0;
83 virtual void removeRequest(const ConstPointer<CaptureRequest>& request) = 0;
84 virtual void clearAll() const = 0;
85 virtual bool canServiceCaptureRequests() const = 0;
86 };
87 /**--------------------------------------------------------------------------------------------------
88 \brief Stores a default rendering engine to be used with the application.
89 **/
100 /**--------------------------------------------------------------------------------------------------
101 \brief A wrapper around DesignObjectLookup that provides signal and slot functionality and adds
102 rendering capabilities to the model heirarchy.
103 **/
104 class NDEVR_API QTModelManager : public QObject, public DesignObjectLookup
105 {
106 Q_OBJECT
107 public:
109 QTModelManager(const QTModelManager& manager) = delete;
111 virtual void addScene(Scene object, bool ignore_application_scene = false) override;
112 virtual void addGeometry(Geometry object) override;
113 virtual void addModel(Model object) override;
114 virtual void addLayer(Model object) override;
115 virtual void addMaterial(Material object) override;
116 virtual LogManager* logManager() const override;
117#if NDEVR_VIEWPORT
118 virtual void addCamera(const DynamicPointer<Camera>& object) override;
119#endif
120 void deleteObject(UUID id) override;
121 virtual void eraseModel(UUID id) override;
122 virtual Model restoreModel(UUID id) override;
124
125 virtual void addCameraModel(const UUID& camera, const Model& object) override;
126
129
130 virtual void ShowProperties(const ShowPropertiesSettings& settings);
131
132
133 WindowManager* windowManager() { return m_window_manager; }
134 virtual void setWindowManager(WindowManager* manager) { m_window_manager = manager; }
135 ContextMenuManager* contextMenuManager() { return m_context_menu_manager; }
136
137 virtual Buffer<UUID> selected() const;
138
139
140 virtual void updateModelTopLevel(const Model& object) override;
141 virtual void update(const Time& time, const std::function<void()>& wait_callback) override;
142 virtual void setActiveProject(UUID project_id) override;
144
145 virtual bool canProcessMimeData(const QMimeData* data) const;
146 virtual void processMimeData(const QMimeData* data, PopupInfo origin = PopupInfo());
147 virtual void exportModels(ExportRequest request);
148 virtual void saveModel(FactoryParameters& file, bool is_blocking = false);
149 //virtual void loadModel(Buffer<FactoryParameters, uint04, ObjectAllocator<false>>& files, bool is_blocking = false);
150 virtual void setActiveLayer(UUID layer_id) override;
151 virtual void startQTUpdate(const TimeSpan& interval);
152 virtual void stopQTUpdate();
153 virtual void stopAll();
154 virtual void clearSelected() override;
155 virtual void setSelected(Buffer<UUID> ids) override;
156 virtual void appendSelected(Buffer<UUID> ids) override;
157 virtual void removeSelected(Buffer<UUID> ids);
158 ProjectFileManager* projectFileManager() { return m_project_file_manager; }
160 void setGraphicsManager(GraphicsManagerBase* graphics_manager) { m_graphics_manager = graphics_manager; };
161 virtual DesignTaskManager* taskManager() const override;
162 virtual bool hasBeenModified() const;
163 virtual void requestQTUpdate();
164 virtual void clearAll() override;
165 virtual bool hasUserSavedProject() const;
166 virtual void setProjectTimeZone();
167 void popSelected(const UUID& id, bool signal = true);
168 void addSelected(const UUID& id, bool signal = true);
169 void setRequestDeploymentCallback(const String& callback_name, const std::function<void(const UUID&)>& callback);
170 const Dictionary<String, std::function<void(const UUID&)>>& requestDeploymentCallbacks();
171 virtual bool useProjectFolders() const;
172 virtual void postCommand(const DynamicPointer<DesignCommand>& command) override;
173 virtual void runCommand(const DynamicPointer<DesignCommand>& command) override;
174 private:
175 virtual void _qtUpdate(const Time& time);
176 virtual void _qtUpdateDeleted(UUID model);
177 virtual void _qtUpdateDeleted();
178 virtual void _qtUpdateAdded();
179 virtual void _qtUpdateModified();
180 virtual void _qtUpdateModelModified(UUID model, Buffer<UUID>& ids);
181
182 public slots:
183 void popFocus();
185 void setFocus(UUID id);
186 protected slots:
187 void qtUpdate();
188 signals:
189 void canExitApplicationSignal(bool can_exit);
190 void canOpenProjectSignal(bool can_open_project);
191 void canImportFileSignal(bool can_import_file);
204 void onAddCameraObject(UUID camera, UUID object);
206 void onZoomToModel(SnapLocation location, UUID id, UUID camera);
207 void onZoomToModel(SnapLocation location, UUID id);
208
216
218
223 void onSelectedSignal(Buffer<UUID> ids, bool selected);
224 void onSwapSelectedSignal(Buffer<UUID> old_selected, Buffer<UUID> new_selected);
225 void onUpdateFocus(UUID id, bool focussed);
226 private slots:
227 void _cleanupMemory();
228 void _refreshModelList();
229 private:
230 void finishCommand(const DynamicPointer<DesignCommand>& command) override;
231 void refreshScene(UUID object, bool ignore_application_scene) override;
232 protected:
233#if NDEVR_VIEWPORT
234 SelectionTreeManager m_selection_tree_manager;
235#endif
248 WindowManager* m_window_manager = nullptr;
249 ProjectFileManager* m_project_file_manager = nullptr;
250 QTModelManagerView* m_manager_view = nullptr;
251 ContextMenuManager* m_context_menu_manager = nullptr;
252 GraphicsManagerBase* m_graphics_manager = nullptr;
254#if NDEVR_SUPPORTS_THREADING
255 CachedFactoryIOThread* m_write_thread = nullptr;
256#endif
260 };
261
262}
#define NDEVR_API
Definition DLLInfo.h:50
The equivelent of std::vector but with a bit more control. The basic array unit of the library.
Definition Buffer.hpp:56
A thread designed to read and write files using the FactoryIO interface. Thread will perform all acti...
Definition CachedFactoryIOThread.h:47
Provides a constant, unmodifiable pointer that has shared ownership of a dynamically allocated object...
Definition GraphicsPipeline.h:42
Manages setting up the context menu that is shown when the user right-clicks or accesses the ContextM...
Definition ContextMenuManager.h:51
A core class where all Design Objects including models, materials, and geometries are stored....
Definition DesignObjectLookup.h:65
Manages all active and inactive tasks for a DesignObjectLookup.
Definition DesignTask.h:28
A hash-based key-value store, useful for quick associative lookups. Key features include:
Definition Dictionary.h:61
Provides a modifiable pointer that has shared ownership of a dynamically allocated object.
Definition Pointer.hpp:320
A core class within the model heirarchy containing vertex-based data (Usually 3D data) within a set c...
Definition Geometry.h:64
Used for interfacing with a Gaphics engine, such as Vulkan or OpenGL.
Definition QTModelManager.h:75
virtual bool hasGraphicsSession(const DynamicPointer< GraphicsDevice > &device)=0
virtual void clearAll() const =0
virtual void addRequest(const ConstPointer< CaptureRequest > &request)=0
virtual const DynamicPointer< GraphicsSession > & graphicsSession(const DynamicPointer< GraphicsDevice > &device)=0
virtual void removeRequest(const ConstPointer< CaptureRequest > &request)=0
virtual void addGraphicsSession(DynamicPointer< GraphicsSession > session, bool add_cameras=true)=0
virtual void executeRequest(const ConstPointer< CaptureRequest > &request)=0
virtual bool requestHandleManagerUpdating() const =0
virtual bool canServiceCaptureRequests() const =0
Stores a default rendering engine to be used with the application.
Definition QTModelManager.h:91
virtual GraphicsManagerBase * createManager(QTModelManager *manager)=0
static GraphicsManagerFactory * s_factory
Definition QTModelManager.h:98
static GraphicsManagerFactory * DefaultFactory()
static void SetDefaultFactory(GraphicsManagerFactory *factory)
A class that has any number of children that also feed into the log. Can be used to easily collect lo...
Definition LogManager.h:14
Container responsible for storing and setting the appearance of a Model or Geometry within the NDEVR ...
Definition Material.h:51
A core class that represents a node on model heirarchy. This node may contain a Geometry or one or mo...
Definition Model.h:58
Manages writing to the NDV file and any folder operations for projects. Also responsible for creating...
Definition ProjectFileManager.h:32
A wrapper around DesignObjectLookup that provides signal and slot functionality and adds rendering ca...
Definition QTModelManager.h:105
virtual void stopAll()
void onSwapSelectedSignal(Buffer< UUID > old_selected, Buffer< UUID > new_selected)
virtual void addCameraModel(const UUID &camera, const Model &object) override
WindowManager * windowManager()
Definition QTModelManager.h:133
virtual DynamicPointer< QTDesignObject > getQTObject(UUID id)
bool m_is_updating
Definition QTModelManager.h:258
void onCommandExecutedSignal(UUID id)
GraphicsManagerBase * graphicsManager()
void setFocus(UUID id)
void setRequestDeploymentCallback(const String &callback_name, const std::function< void(const UUID &)> &callback)
void onDeleteModel(UUID id)
virtual DynamicPointer< LibraryManager > libraryManager()
void onZoomToModel(SnapLocation location, UUID id, UUID camera)
Buffer< UUID > m_selected_object
Definition QTModelManager.h:244
virtual void addModel(Model object) override
void onDeleteCommand(UUID id)
void onUpdateFocus(UUID id, bool focussed)
Buffer< UUID > m_added_objects
Definition QTModelManager.h:241
void onDeleteGeometry(UUID id)
void onZoomToModel(SnapLocation location, UUID id)
void onAddCamera(UUID id)
void onActiveProjectChanged(UUID id)
Time m_last_audit_time
Definition QTModelManager.h:237
void addLayerSignal(Buffer< UUID > id)
QTModelManager(const QTModelManager &manager)=delete
void onShowPropertiesRequested(UUID object)
virtual DesignTaskManager * taskManager() const override
virtual void ShowProperties(const ShowPropertiesSettings &settings)
Buffer< UUID > m_top_level_change
Definition QTModelManager.h:246
void popSelected(const UUID &id, bool signal=true)
Buffer< UUID > m_objects_to_remove
Definition QTModelManager.h:245
virtual void removeSelected(Buffer< UUID > ids)
ContextMenuManager * contextMenuManager()
Definition QTModelManager.h:135
ProjectFileManager * projectFileManager()
Definition QTModelManager.h:158
virtual void saveModel(FactoryParameters &file, bool is_blocking=false)
virtual bool hasBeenModified() const
void onDeleteObject(UUID id)
virtual bool useProjectFolders() const
virtual void startQTUpdate(const TimeSpan &interval)
void onDeleteObjects(Buffer< UUID > ids)
virtual void exportModels(ExportRequest request)
virtual void addLayer(Model object) override
void activeLayerChangedSignal(UUID id)
void onObjectUpdatedSignal(const Buffer< UUID > &ids)
Time m_last_qt_update_time
Definition QTModelManager.h:236
virtual void setWindowManager(WindowManager *manager)
Definition QTModelManager.h:134
virtual void clearSelected() override
virtual Model restoreModel(UUID id) override
QTimer m_auto_save_timer
Definition QTModelManager.h:240
virtual LogManager * logManager() const override
virtual bool canProcessMimeData(const QMimeData *data) const
void onRefreshObject(UUID id)
void deleteObject(UUID id) override
virtual void setActiveLayer(UUID layer_id) override
void onAddCommand(UUID id)
Dictionary< UUID, DynamicPointer< QTDesignObject > > m_qt_design_objects
Definition QTModelManager.h:247
virtual QTModelManagerView * modelManagerView()
const Dictionary< String, std::function< void(const UUID &)> > & requestDeploymentCallbacks()
virtual void requestQTUpdate()
Buffer< UUID > m_deleted_objects
Definition QTModelManager.h:242
virtual void updateModelTopLevel(const Model &object) override
virtual void processMimeData(const QMimeData *data, PopupInfo origin=PopupInfo())
void onDeleteMaterial(UUID id)
virtual void clearAll() override
UUID m_focused_object
Definition QTModelManager.h:238
void onUpdateCommand(UUID id)
void setGraphicsManager(GraphicsManagerBase *graphics_manager)
Definition QTModelManager.h:160
bool m_needs_cleanup
Definition QTModelManager.h:257
void onAddMaterial(Buffer< UUID > id)
void onAddCameraObject(UUID camera, UUID object)
virtual void setActiveProject(UUID project_id) override
void canOpenProjectSignal(bool can_open_project)
virtual Buffer< DynamicPointer< QTDesignObject > > getQTObjectsByID(const Buffer< UUID > &ids)
virtual void eraseModel(UUID id) override
void onAddGeometry(Buffer< UUID > id)
void onDeleteCamera(UUID id)
void layerUpdatedSignal(UUID id)
virtual void setSelected(Buffer< UUID > ids) override
virtual Buffer< UUID > selected() const
virtual void appendSelected(Buffer< UUID > ids) override
void canImportFileSignal(bool can_import_file)
virtual void stopQTUpdate()
virtual void addScene(Scene object, bool ignore_application_scene=false) override
void addSelected(const UUID &id, bool signal=true)
virtual void setProjectTimeZone()
void onAddScene(Buffer< UUID > id)
virtual void addMaterial(Material object) override
QTimer m_launch_timer
Definition QTModelManager.h:239
virtual void postCommand(const DynamicPointer< DesignCommand > &command) override
DynamicPointer< LibraryManager > m_library_manager
Definition QTModelManager.h:253
virtual void update(const Time &time, const std::function< void()> &wait_callback) override
void canExitApplicationSignal(bool can_exit)
void onModelTopLevelChange(Buffer< UUID > id)
void onAddModel(Buffer< UUID > id)
Buffer< UUID > m_erased_objects
Definition QTModelManager.h:243
void onSelectedSignal(Buffer< UUID > ids, bool selected)
virtual void addGeometry(Geometry object) override
virtual bool hasUserSavedProject() const
Dictionary< String, std::function< void(const UUID &)> > m_request_deployment_callbacks
Definition QTModelManager.h:259
virtual void runCommand(const DynamicPointer< DesignCommand > &command) override
A Qt compatible ItemModel for interfacing with a DesignObjectLookup.
Definition QTModelManagerView.h:44
The root Model that is responsible for storing the underlying data for all Scene Models.
Definition Model.h:492
Software Services provide an interface for adding to or changing the software behavior via functional...
Definition SoftwareService.h:9
Software Service Managers take a Software service to modify the behavior of the software.
Definition SoftwareService.h:15
The core String class for the NDEVR API.
Definition String.h:69
Represents a timestamp with utilities for manipulation and conversion.
Definition Time.h:54
Stores a time span, or difference between two times, with an optional start time.
Definition TimeSpan.h:46
A universally unique identifier (UUID) is a 128-bit number used to identify information in computer s...
Definition UUID.h:60
Manages all windows and logic surrounding dialogs and views for displaying and managing any environme...
Definition WindowManager.h:68
Definition ACIColor.h:37
SnapLocation
A list of directions that a view can be pointed relative to an object or scene.
Definition ViewLocation.h:40
Stores information related to exporting specific data from the software.
Definition ExportRequest.h:10
A container of input information that is to be filled with output information by an IOFactory.
Definition IOFactory.h:61
Class which is used to pass arguments and requests for creating a popup dialog or widget....
Definition PopupInfo.h:15
Stores settings for setting up and displaying a DesignObjectDialog such as whether the dialog is part...
Definition ShowPropertySettings.h:25