// {{{ this iWear header
/**
 * $Id$
 * $Revision$
 * $Author$
 * $Date$
 *
 * This file is part of The iWear Framework.
 * In particular this file is part of the Framework Core Library
 *
 * The iWear Framework is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by the
 * Free Software Foundation as in version 2 of the License.

 * 
 * The iWear Framework is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * The iWear Framework; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
// }}}

#ifndef __TESTAPPLICATION_H
#define __TESTAPPLICATION_H

#ifndef __APPLICATION_H
#include <iwear_uiservices/application.h>
#endif

namespace iwear {
    namespace uiservices {

    // --- Forward Declarations -- same namespace
    class TestFunctor;

/**
 * Testapplication
 * @author Carsten Rachuy
 */
class TestApplication : public virtual Application {

    friend class TestFunctor;


 public:

    /**
     * Contructor for our test application
     * @param application_service pointer to the application service
     * @param have_switch_button Should the application menu have
     *        a button to leave the application and switch to the 
     *        iWear application service? Default value is 'true'
     * @param have_quit_button Should the application menu have
     *        a button to quit the application? Default value is 'true'
     * @param have_up_button Should the application menu have
     *        a button to go up one level? Default value is 'true'
     */
    TestApplication(ApplicationService* application_service,
	    const std::string& dn = "testapplication",
	    const std::string& dd = "Just a little app to test on!",
		    bool have_switch_button = true,
		    bool have_quit_button = true,
		    bool have_up_button = true);


    /**
     * A special constructor which is required to load the test
     * application as a plugin (Development version)
     */
/*    TestApplication( void )
	: Application()
    {
	// Nothing yet to do
    }
*/

    /**
     * The destructor
     */
    virtual ~TestApplication(void);

    /**
     * This method is called when the application thread is started
     */
    virtual void Run(void);

 protected:
    
    virtual void Init_Application(void);
    
    virtual void Final_Application(void);

    virtual void set_default_configuration(void);

 private:

    TestFunctor* test_functor;

};

    } // namespace uiservices
} // namespace iwear


#endif // __TESTAPPLICATION_H

