Clean up separation between plugins and app.
This commit is contained in:
		
							parent
							
								
									16baf6cdaf
								
							
						
					
					
						commit
						941f2d228c
					
				| @ -3,8 +3,7 @@ | |||||||
| [](https://github.com/shaunrd0/qtk/actions/workflows/all-builds.yml) | [](https://github.com/shaunrd0/qtk/actions/workflows/all-builds.yml) | ||||||
| [](https://github.com/shaunrd0/qtk/actions/workflows/linting.yml) | [](https://github.com/shaunrd0/qtk/actions/workflows/linting.yml) | ||||||
| 
 | 
 | ||||||
| Qtk is a Qt OpenGL graphics library created primarily for my own learning | Qtk is a Qt OpenGL graphics library that wraps some QOpenGL functionality in convenience classes | ||||||
| purposes. The library wraps some QOpenGL functionality in convenience classes |  | ||||||
| that allow rendering geometry in 2D and 3D using custom GLSL shader programs. | that allow rendering geometry in 2D and 3D using custom GLSL shader programs. | ||||||
| 
 | 
 | ||||||
| The Qtk desktop application provides a model loader using [Assimp](https://assimp.org/) within a Qt widget application. | The Qtk desktop application provides a model loader using [Assimp](https://assimp.org/) within a Qt widget application. | ||||||
|  | |||||||
| @ -9,8 +9,6 @@ | |||||||
| #include "qtkmainwindow.h" | #include "qtkmainwindow.h" | ||||||
| #include "ui_qtkmainwindow.h" | #include "ui_qtkmainwindow.h" | ||||||
| 
 | 
 | ||||||
| MainWindow * MainWindow::mainWindow_ = Q_NULLPTR; |  | ||||||
| 
 |  | ||||||
| /*******************************************************************************
 | /*******************************************************************************
 | ||||||
|  * Constructors / Destructors |  * Constructors / Destructors | ||||||
|  ******************************************************************************/ |  ******************************************************************************/ | ||||||
| @ -27,6 +25,10 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent) | |||||||
|   // Initialize static container for all active QtkWidgets
 |   // Initialize static container for all active QtkWidgets
 | ||||||
|   auto qtkWidgets = findChildren<Qtk::QtkWidget *>(); |   auto qtkWidgets = findChildren<Qtk::QtkWidget *>(); | ||||||
|   for (auto & qtkWidget : qtkWidgets) { |   for (auto & qtkWidget : qtkWidgets) { | ||||||
|  |     // NOTE: Set a temporary scene for the widget to use for initialization.
 | ||||||
|  |     // This should be replaced by loading a scene, or creating a new (unsaved)
 | ||||||
|  |     // scene when Qtk is opened.
 | ||||||
|  |     qtkWidget->setScene(new EmptyScene); | ||||||
|     views_.emplace(qtkWidget->getScene()->getSceneName(), qtkWidget); |     views_.emplace(qtkWidget->getScene()->getSceneName(), qtkWidget); | ||||||
| 
 | 
 | ||||||
|     // Add GUI 'view' toolbar option to show debug console.
 |     // Add GUI 'view' toolbar option to show debug console.
 | ||||||
| @ -36,8 +38,7 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent) | |||||||
|             &Qtk::Scene::sceneUpdated, |             &Qtk::Scene::sceneUpdated, | ||||||
|             this, |             this, | ||||||
|             &MainWindow::refreshScene); |             &MainWindow::refreshScene); | ||||||
|     connect(qtkWidget, |     connect(qtkWidget, &Qtk::QtkWidget::objectFocusChanged, | ||||||
|             &Qtk::QtkWidget::objectFocusChanged, |  | ||||||
|             ui_->qtk__ToolBox, |             ui_->qtk__ToolBox, | ||||||
|             &Qtk::ToolBox::updateFocus); |             &Qtk::ToolBox::updateFocus); | ||||||
|   } |   } | ||||||
| @ -70,10 +71,8 @@ MainWindow::~MainWindow() | |||||||
| 
 | 
 | ||||||
| MainWindow * MainWindow::getMainWindow() | MainWindow * MainWindow::getMainWindow() | ||||||
| { | { | ||||||
|   if (mainWindow_ == Q_NULLPTR) { |   static MainWindow window; | ||||||
|     mainWindow_ = new MainWindow; |   return &window; | ||||||
|   } |  | ||||||
|   return mainWindow_; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Qtk::QtkWidget * MainWindow::getQtkWidget(int64_t index) | Qtk::QtkWidget * MainWindow::getQtkWidget(int64_t index) | ||||||
|  | |||||||
| @ -22,6 +22,38 @@ namespace Ui | |||||||
|   class MainWindow; |   class MainWindow; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * An empty scene used for initializing all QtkWidgets within the MainWindow. | ||||||
|  |  * This serves as a temporary placeholder for QtkScene (for example), which is | ||||||
|  |  * defined in the separate qtk_gui target. The reason for this separation is to | ||||||
|  |  * support the use of QtkWidgets (the qtk_plugins target) within the Qt Designer | ||||||
|  |  * application without implementations provided in the Qtk Desktop Application. | ||||||
|  |  * | ||||||
|  |  * For the Qtk application, this should be replaced by loading the previous | ||||||
|  |  * scene or creating a new _unsaved_ scene when the application is opened. | ||||||
|  |  * Currently we have essentially hard-coded QtkScene to use as examples for | ||||||
|  |  * testing the application. This means that the only way to create or modify a | ||||||
|  |  * scene is to write code. Any modifications made in the application, such as | ||||||
|  |  * moving or resizing objects, will not persist and cannot be saved. | ||||||
|  |  * | ||||||
|  |  * For users of Qtk Designer Plugins, this means that installing | ||||||
|  |  * the `qtk_plugins` target to Qt Designer allows use all of the designer's | ||||||
|  |  * features to build an interface and position or resize a QtkWidget as needed. | ||||||
|  |  * The QtkWidget also appears as widget in the IDE's toolbars and can be added | ||||||
|  |  * to any new application easily, once the plugins are installed. | ||||||
|  |  * | ||||||
|  |  * Once the application is designed, you can define a custom scene and use the | ||||||
|  |  * Qtk API or Qt OpenGL funtions directly to render to it. | ||||||
|  |  * | ||||||
|  |  * Any application using a QtkWidget can set a custom scene in their main | ||||||
|  |  * function. See the MainWindow::MainWindow constructor as an example. | ||||||
|  |  */ | ||||||
|  | class EmptyScene : public Qtk::Scene { | ||||||
|  |   void init() override { | ||||||
|  |     setSceneName("Empty Scene"); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * MainWindow class to provide an example of using a QtkWidget within a Qt |  * MainWindow class to provide an example of using a QtkWidget within a Qt | ||||||
|  * window application. |  * window application. | ||||||
| @ -82,7 +114,6 @@ class MainWindow : public QMainWindow | |||||||
|     MainWindow(const MainWindow &) {}; |     MainWindow(const MainWindow &) {}; | ||||||
| 
 | 
 | ||||||
|     Ui::MainWindow * ui_ {}; |     Ui::MainWindow * ui_ {}; | ||||||
|     static MainWindow * mainWindow_; |  | ||||||
| 
 | 
 | ||||||
|     /**
 |     /**
 | ||||||
|      * Maps a scene name to the QtkWidget viewing it. |      * Maps a scene name to the QtkWidget viewing it. | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user