00001 #include <SDL/SDL.h>
00002 #include <SDLSystem.h>
00003
00004 #include <InputSequencer.h>
00005 #include <InputNode.h>
00006 #include <InputContext.h>
00007 #include <ContextActor.h>
00008
00009 using namespace cmil;
00010
00011 class helloAction: public ModAction, CoordAction {
00012 public:
00013 helloAction(const std::string& name) : InputAction(name), ModAction(name), CoordAction(name) {}
00014
00015 void doPress() {
00016 std::cout << "hello! pressed " << std::endl;
00017 std::cout << std::endl;
00018 }
00019 void doRelease() {
00020 std::cout << "hello! released " << std::endl;
00021 std::cout << std::endl;
00022 }
00023
00024 void runCoord(unsigned long int x, unsigned long int y, int xrel, int yrel) {
00025 std::cout << "hello! x: " << x << " y: " << y << " xrel: " << xrel <<" yrel: " << yrel << std::endl;
00026 };
00027 };
00028
00030 class WidgetMouse : public SDL::DefaultMouse {
00031 public:
00032 WidgetMouse() : DefaultMouse("WidgetMouse") {
00033 setInput( "LeftButton", "WidgetLeftButton" );
00034 setInput( "MiddleButton", "WidgetMiddleButton");
00035 setInput( "RightButton", "WidgetRightButton" );
00036 setInput( "WheelUp", "WidgetWheelUp" );
00037 setInput( "WheelDown", "WidgetWheelDown" );
00038 setInput( "Motion" , "WidgetMotion");
00039 };
00040 };
00041
00042 class Application {
00043 public:
00044 Application() :
00045 m_actor(NULL),
00046 m_hello(new helloAction("hello action")),
00047 m_system(NULL),
00048 m_quit(false) {
00049 init();
00050 }
00051
00052 ~Application() {
00053 if(m_actor) delete m_actor;
00054 if(m_hello) delete m_hello;
00055 if(m_system) delete m_system;
00056 }
00057
00058 void quit() { m_quit = true; }
00059
00060 bool getQuit() const {
00061 return m_quit;
00062 }
00063
00064 void run() {
00065 while(!m_actor->getQuit()) {
00066 m_system->poll();
00067 SDL_Delay(1);
00068 }
00069
00070 SDL_Quit();
00071 }
00072
00073 private:
00074 void init() {
00075 if( SDL_Init( SDL_INIT_VIDEO ) < 0){
00076 fprintf( stderr, "Could not initialise SDL: %s\n", SDL_GetError() );
00077 exit( -1 );
00078 }
00079
00080 if( !SDL_SetVideoMode( 0, 0, 0, SDL_HWSURFACE | SDL_RESIZABLE ) ) {
00081 fprintf( stderr, "Could not set video mode: %s\n", SDL_GetError() );
00082 SDL_Quit();
00083 exit( -1 );
00084 }
00085
00086 SDL_WM_SetCaption("demoing cmil alpha 0.91", "demo");
00087 SDL_EnableUNICODE(1);
00088
00089 std::cout << "SDL initialized." << std::endl;
00090 std::cout << std::endl;
00091
00092 SDL::SDLSystem::Parameters params;
00093
00095
00096 params.add(SDL::Mice, new WidgetMouse());
00097 params.add(SDL::Keyboards);
00098
00099 m_system = new SDL::SDLSystem(params);
00100
00103
00104 m_actor = new ContextActor(m_system);
00105
00106 m_system -> attach(m_actor);
00107
00108 m_actor->addNormal( Ev("Keyboard", "F") << m_hello );
00109 m_actor->addNormal( Ev("Keyboard", "Ctrl") << Ev("Keyboard", "F") << m_hello );
00110 m_actor->addNormal( Ev("WidgetMouse", "WidgetMotion") << m_hello );
00111 m_actor->addNormal( Ev("WidgetMouse", "WidgetLeftButton") << m_hello );
00112 }
00113
00114 ContextActor* m_actor;
00115 helloAction* m_hello;
00116 System* m_system;
00117
00118 bool m_quit;
00119 };
00120
00121 int main() {
00122 Application myApp;
00123 myApp.run();
00124
00125 return 0;
00126 }