IApplication



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
{
protected:
    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;
public:
    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

    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