The main focus of this design is to build simple yet extensible framework that allows speedy initial implementation and future extension. While it is still possible to build GUI without much frameworking, I believe future extendibility and maintainability would significantly increases if the foundation is designed right.


QADocumentController
 This class is pretty much the main controller of the application. Shows open dialog and opens the file with a document class, keeps track of all documents, provides recent files list etc.

QADocument
 Represents a document, manages the path, file type saving logic etc. as well as things like undo manager, window managers for that document.

AppBase::DocumentData
 Already defined. Used by the document class as the neutral capsulation of document's data structure.

QADocumentTemplate
 This class is pretty much the builder class of document. Each QADocument subclasses should provide a document template as well. The DocumentController class will keep the DocumentTemplate instances and open a given file or a new document using those builder classes.

QAFiletype
 This class is a container used to represent filetypes and their properties.

HuginModule
 Hugin Modules. Provides their views that inherits QWidget. Module classes act as controller classes; view classes is recommended to be as simple as possible and should only send user interaction to and receive data changes from the module class (eg. Module class should provide changeFOVto slot and FOVchangedTo signal which can be connected to whatever appropriate widget, no matter textbox or slider, in the view). It should be noted that modules are not meant to be shared between two different applications; if they only differ in how things are displayed, however, they should use the same set of modules (that's pretty much same as developing two GUI for one application). 

HuginModuleManager
 This class should be created with all the available modules in the very early stage of application initialisation. Thereafter, access to modules should be made through the manager, not through any other means.

HuginDocumentViewManager
 This is a version of window manager. Manages the views from modules and displays on appropriate windows according to the layout manager/profiles.

HuginDocumentViewLayout
 This class determines how to display views. The old GUI for example could be seen as main modules in tabs and utility modules (preview) in separate window. Several versions possible in the future. Start with simplest form that does not use layout profile.

HuginDocumentViewLayoutProfile
 This class specifies the role of modules. The modules are listed by major roles (main, sub, etc.), and main modules are further in groups (workflow, category etc). This determines how user would navigate modules. Modules can be listed more than once. To be user customisable. This optional and not required unless layout manager should allow redundancy in view's layout.

