Migration of QtMvvm from github
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

235 lines
7.3 KiB

/*!
@class QtMvvm::CoreApp
Every QtMvvm Application needs a core application that performs the application setup and
manages the ViewModels in order to present them. If you want to use QtMvvm, you need to perform
the following steps:
1. Create a custom App class in your core project and extend QtMvvm::CoreApp
2. Implement the CoreApp::startApp method (and possibly other virtual methods)
3. In your *GUI* Project, register the App by using the #QTMVVM_REGISTER_CORE_APP macro
Simple example for a custom CoreApp:
@code{.cpp}
class MyApp : public QtMvvm::CoreApp
{
Q_OBJECT
public:
explicit MyApp(QObject *parent = nullptr) :
CoreApp(parent)
{}
protected:
int startApp(const QStringList &arguments) override {
show<InitialViewModel>();
return EXIT_SUCCESS;
}
};
//optional: overwrite the coreApp macro:
#undef coreApp
#define coreApp static_cast<MyApp*>(QtMvvm::CoreApp::instance())
@endcode
Then in the GUI project add to, for example, the `main.cpp`:
@code{.cpp}
#include "myapp.h"
QTMVVM_REGISTER_CORE_APP(MyApp)
int main(int argc, char *argv[]) {
QApplication app(argc, argv); //registerApp() is called from here (and thus performRegistrations())
//...
return app.exec(); // bootApp() is called as soon as the eventloop starts (and thus startApp())
}
@endcode
When using the app that way, a 3-step startup is performed:
1. registerApp() and performRegistrations() are called as part of the QCoreApplication
constructor as first thing to register types etc. from the core application.
2. The rest of the main() in the GUI project runs to register further view related stuff and
register additional services etc.
3. The bootApp() and startApp() methods are called once the eventloop was entered in order to
actually start the application and show the first viewmodels. Once started, the appStarted()
signal is emitted as well.
*/
/*!
@fn QtMvvm::CoreApp::disableAutoBoot
In case you don't want your application be be started automatically whenQCoreApplication::exec
is called, you must call this method **before** The QCoreApplication (or any other application)
constructor is called:
@code{.cpp}
int main(int argc, char *argv[]) {
CoreApp::disableAutoBoot();
QApplication app(argc, argv);
//...
}
@endcode
In order to eventually start the app, simply call bootApp().
@sa CoreApp::bootApp, #QTMVVM_REGISTER_CORE_APP, CoreApp::registerApp
*/
/*!
@fn QtMvvm::CoreApp::registerApp
@attention This method is called automatically by the #QTMVVM_REGISTER_CORE_APP macro. If you
use the macro, don't call this method explicitly!
Internally it performs some initial registrations, calls performRegistrations() and then
schedules the automatic call of bootApp() if not disabled.
@sa #QTMVVM_REGISTER_CORE_APP, CoreApp::performRegistrations, CoreApp::bootApp,
CoreApp::disableAutoBoot
*/
/*!
@fn QtMvvm::CoreApp::show(const QVariantHash &)
@tparam TViewModel The type of the viewmodel to be presented
@param params A map of named parameters to be passed to the viewmodel
Creates a new instance of the Viewmodel class, creates to corresponding view and then shows it.
This is done via the IPresenter that is currently registered.
@sa ViewModel::show, CoreApp::showDialog
*/
/*!
@fn QtMvvm::CoreApp::show(const char *, const QVariantHash &)
@param viewModelName The name of the viewmodel to be presented
@param params A map of named parameters to be passed to the viewmodel
Creates a new instance of the Viewmodel class, creates to corresponding view and then shows it.
This is done via the IPresenter that is currently registered.
@sa ViewModel::show, CoreApp::showDialog
*/
/*!
@fn QtMvvm::CoreApp::show(const QMetaObject *, const QVariantHash &)
@param viewModelMetaObject The metaobject of the viewmodel to be presented
@param params A map of named parameters to be passed to the viewmodel
Creates a new instance of the Viewmodel class, creates to corresponding view and then shows it.
This is done via the IPresenter that is currently registered.
@sa ViewModel::show, CoreApp::showDialog
*/
/*!
@fn QtMvvm::CoreApp::showDialog
@param config The configuration of the message to be shown
@returns A message result to keep track of the shown dialog
The configuration is passed to the presenter in order to show a simple dialog. You can use the
returned object to monitor the dialog and receive the result.
@note By default, the returned object will delete itself automatically once the dialog has
been closed.
@sa CoreApp::show, MessageConfig, MessageResult
*/
/*!
@fn QtMvvm::CoreApp::bootApp
@attention This method is called automatically by the #QTMVVM_REGISTER_CORE_APP macro or the
registerApp() method, unless it has been deactivated before with disableAutoBoot(). Unless you
disabled the boot that way, don't call this method explicitly!
Internally it performs the actual start of the application and calls startApp() to start all
services and show the initial viewmodels.
If startApp() returned successfully, appStarted() is emitted and thus the startup completed.
@sa #QTMVVM_REGISTER_CORE_APP, CoreApp::startApp, CoreApp::disableAutoBoot,
CoreApp::appStarted
*/
/*!
@fn QtMvvm::CoreApp::performRegistrations
Is called by registerApp() (and thus automatically when using the #QTMVVM_REGISTER_CORE_APP
macro) in order to perform initial registrations of types etc. before any such code is beeing
executed for the gui projects.
@sa #QTMVVM_REGISTER_CORE_APP, CoreApp::registerApp, CoreApp::startApp
*/
/*!
@fn QtMvvm::CoreApp::startApp
@param arguments The command line arguments that have been passed to the application
@return An exit code as a result of the startup code
Is called by bootApp() (and thus automatically when using the #QTMVVM_REGISTER_CORE_APP
macro) in order to start the app logic and show initial viewmodels. Return `EXIT_SUCCESS` (0)
to indicate the start was successful. If any other value is returned, the application exits
with that value as return code.
@sa CoreApp::autoParse, #QTMVVM_REGISTER_CORE_APP, CoreApp::bootApp, CoreApp::closeApp,
CoreApp::performRegistrations
*/
/*!
@fn QtMvvm::CoreApp::closeApp
Is connected to the QCoreApplication::aboutToQuit signal and is called to clean up your
application. Using this method is more convenient as it is only called in case the startup
was successfull (returned `EXIT_SUCCESS`).
@sa CoreApp::startApp
*/
/*!
@fn QtMvvm::CoreApp::autoParse
@param parser A reference to the commandline parser to use
@param arguments The arguments to be parsed
@returns `true` If parsing was successfull and you can continue starting the App
Use this method in your startApp() implementation in order to automatically handle special
cases:
- Errors
- The Help option (`--help`)
- The Version option (`--version`)
For those three cases `false` is returned and a dialog of the specific GUI shown to the user
with either and error string, the help or the version information. To correctly use it, your
startApp() function should look like this:
@code{.cpp}
int MyApp::startApp(const QStringList &arguments)
{
QCommandLineParser parser;
parser.addVersionOption();
parser.addHelpOption();
//Add more options to setup the parser...
//shows help or version automatically
if(!autoParse(parser, arguments))
return EXIT_SUCCESS;
// actual startup code...
}
@endcode
@note It is important to return with `EXIT_SUCCESS` from the parser in order to actually show
the dialogs to the user. Returning any other value would simply silently quit the application.
@sa CoreApp::startApp
*/