
#ifndef __WFX_LANG_WFXAPPLICATION_H__
#define __WFX_LANG_WFXAPPLICATION_H__

#include <WFX/WFXIncludes.h>
#include <WFX/lang/WFXSystem.h>
#include <WFX/util/CommandParams.h>


namespace WFX {

    namespace lang {

        /**
         * WFXApplication class
         * Any application intending to use WFX needs to extend this
         * class.
         */
        class WFXApplication {
            public:
                /**
                 * CTor
                 * passes the given arguments to the SettingsManager and saves
                 * the command line parameters
                 */
                WFXApplication(int argc, char *argv[]);
                WFXApplication();
                
                virtual ~WFXApplication();

            protected:
                /** CommandParams */
                WFX::util::CommandParams Params;

                /** the System */
                WFX::lang::WFXSystem* System;

                /** starts the Application */
                virtual void run() = 0; 

                /** exits the program */
                virtual void exit() = 0;
                
            private:
                /**
                 * private method called by constructors
                 */
                void init();
        };

    }
    
}

#endif //include guard

