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/linting.yml)
 | 
			
		||||
 | 
			
		||||
Qtk is a Qt OpenGL graphics library created primarily for my own learning
 | 
			
		||||
purposes. The library wraps some QOpenGL functionality in convenience classes
 | 
			
		||||
Qtk is a Qt OpenGL graphics library that wraps some QOpenGL functionality in convenience classes
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
@ -9,8 +9,6 @@
 | 
			
		||||
#include "qtkmainwindow.h"
 | 
			
		||||
#include "ui_qtkmainwindow.h"
 | 
			
		||||
 | 
			
		||||
MainWindow * MainWindow::mainWindow_ = Q_NULLPTR;
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 * Constructors / Destructors
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
@ -27,6 +25,10 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent)
 | 
			
		||||
  // Initialize static container for all active QtkWidgets
 | 
			
		||||
  auto qtkWidgets = findChildren<Qtk::QtkWidget *>();
 | 
			
		||||
  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);
 | 
			
		||||
 | 
			
		||||
    // Add GUI 'view' toolbar option to show debug console.
 | 
			
		||||
@ -36,8 +38,7 @@ MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent)
 | 
			
		||||
            &Qtk::Scene::sceneUpdated,
 | 
			
		||||
            this,
 | 
			
		||||
            &MainWindow::refreshScene);
 | 
			
		||||
    connect(qtkWidget,
 | 
			
		||||
            &Qtk::QtkWidget::objectFocusChanged,
 | 
			
		||||
    connect(qtkWidget, &Qtk::QtkWidget::objectFocusChanged,
 | 
			
		||||
            ui_->qtk__ToolBox,
 | 
			
		||||
            &Qtk::ToolBox::updateFocus);
 | 
			
		||||
  }
 | 
			
		||||
@ -70,10 +71,8 @@ MainWindow::~MainWindow()
 | 
			
		||||
 | 
			
		||||
MainWindow * MainWindow::getMainWindow()
 | 
			
		||||
{
 | 
			
		||||
  if (mainWindow_ == Q_NULLPTR) {
 | 
			
		||||
    mainWindow_ = new MainWindow;
 | 
			
		||||
  }
 | 
			
		||||
  return mainWindow_;
 | 
			
		||||
  static MainWindow window;
 | 
			
		||||
  return &window;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Qtk::QtkWidget * MainWindow::getQtkWidget(int64_t index)
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,38 @@ namespace Ui
 | 
			
		||||
  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
 | 
			
		||||
 * window application.
 | 
			
		||||
@ -82,7 +114,6 @@ class MainWindow : public QMainWindow
 | 
			
		||||
    MainWindow(const MainWindow &) {};
 | 
			
		||||
 | 
			
		||||
    Ui::MainWindow * ui_ {};
 | 
			
		||||
    static MainWindow * mainWindow_;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Maps a scene name to the QtkWidget viewing it.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user