Describes minimum required functionality of application object. The main goal of IApplication instance is to control all windows and forms, store global helper interfaces allowing to access commonly used values like mouse pointer position or style list, store platform related functionality either directly or through interfaces(like IKeyboard).

You can find more information in comments below.

class IApplication
    PlatformHandle m_hHandle;
    String m_sApplicationFileName;
    String m_sApplicationDirectory;
    String m_sModuleFileName;
    String m_sModuleDirectory;
    bool m_bDialogBoxes;
    bool m_bGlobal;
    IForm *m_pMainForm;
    IKeyboard *m_pKeyboard;
    IMouse *m_pMouse;
    ITranslate *m_pTranslate;
    IStyles *m_pStyles;
    IScreen *m_pScreen;
    ISystem *m_pSystem;
    IPicture *m_pPicture;
    IDialogs *m_pDialogs;
    IFileSystem *m_pFileSystem;
    INetwork *m_pNetwork;
    IEditor *m_pEditor;
    IDb *m_pDb;
    PlatformHandle const &Handle;
    String const &ApplicationFileName; // Application file name without path. Use to get *.exe file name 
    String const &ApplicationDirectory; // Application directory name with directory separator at the end. Use to get *.exe directory name 
    String const &ModuleFileName; // Module file name without path. Use to get *.dll(if application is created in dll) or *.exe file name 
    String const &ModuleDirectory; // Module directory name with directory separator at the end. Use to get *.dll(if application is created in dll) or *.exe directory name 
    bool const &DialogBoxes; // True if application should try to use forms in form of dialog boxes if possible. All forms from standard packages can do it. By default return false which means standard standalone forms will be used 
    bool const &Global; // Whether this application object controls entire application. By default true, which means application will be closed automatically when last form/window is closed. False should be returned only if the application is actually a part of bigger one and is used to show/manage as build-in interface of that bigger application. The example where application returns FALSE is integration of Form Builder with Visual Studio 
    IForm* const &MainForm; // Main form 
    IKeyboard* const &Keyboard; // Keyboard interface 
    IMouse* const &Mouse; // Mouse interface 
    ITranslate* const &Translate; // Translation interface 
    IStyles* const &Styles; // Styles interface 
    IScreen* const &Screen; // Screen interface 
    ISystem* const &System; // System interface 
    IPicture* const &Picture; // Picture interface 
    IDialogs* const &Dialogs; // System dialogs interface 
    IFileSystem* const &FileSystem; // Interface for working with file system 
    INetwork* const &Network; // Interfaces for working with network connections 
    IEditor* const &Editor; // Editor. Return nullptr almost always. Return instance of editor when the code is running under Form Builder 
    IDb* const &Db{ m_pDb }; // DataBase manager 

    void(*OnIdle)(); // Idle event callback. Called each time when application do nothing 

    virtual int getWindowCount() = 0; // Return count of registered windows in application 
    virtual IWindow *getWindow(const int index) = 0; // Return window by index 
    virtual IForm *getWindowForm(const int index) = 0; // Return form of window specified by index 

    virtual bool setMainForm(IForm *value) = 0; // Set main form 

    virtual int Run() = 0; // Run application. Return exit code(use it to return from WinMain) 
    virtual void ProcessMessages() = 0; // Receive and process all available for application messages from system 
    virtual void RepaintAll() = 0; // Repaint all visible forms 
    virtual IApplicationService *QueryService() = 0; // Return service 
    virtual IThread *CreateThread(const bool paused, IThreadListener *listener) = 0; // Create thread. Return nullptr if failed 

    template<class TForm> void CreateForm(TForm **var); // Create a form 

extern IApplication *Application; // Global variable filled when application instance is created or by GetPackage function in package. Only one instance should exists in entire application.
Namespace: nitisa
Include: Nitisa/Interfaces/IApplication.h