#include #include #include #include #include mogltk::widgets::Root * Root; mogltk::widgets::Frame * Frame; mogltk::widgets::Menu * MainMenu; CODE_BEGINS class frame : public mogltk::widget { public: frame(mogltk::shape * sh, mogltk::widget * father) : widget(father, 2, 2, father->GetW() - 4, father->GetH() - 4, 0, "MyFrame", sh) { } protected: virtual void draw() { } virtual bool process_event(int mx, int my, mogltk::event_t event) { return false; } }; class timer : public mogltk::widget { public: timer() : widget(Root, 0, 0, 0, 0, 0, "Timer", 0), tick(0) { set_timed_event(100); } protected: virtual bool process_event(int, int, mogltk::event_t event) { if (event == mogltk::E_TIMER) { set_timed_event(100); tick = (tick + 1) % 4; switch (tick) { case 0: MainMenu->SetCaption(0, "/"); break; case 1: MainMenu->SetCaption(0, "-"); break; case 2: MainMenu->SetCaption(0, "\\"); break; case 3: MainMenu->SetCaption(0, "I"); break; } return true; } return false; } private: int tick; }; class quit : public mogltk::widgets::action { public: virtual void do_action(mogltk::widget * w) { mogltk::engine::quit(); } } action_quit; class about : public mogltk::widgets::action { public: virtual void do_action(mogltk::widget * w) { new mogltk::widgets::MsgBox(w->Shaper(), w->Father(), "About...", "Dalos version 0.1 - OpenGL version\n" "Copyright (C) 2004 Nicolas \"Pixel\" Noble\n" "\n" "Thanks and greetings fly to (no particular order)\n" "GreatSkaori, Orphis, Ti Dragon, Yaz0r, S-O-R,\n" "Meradrin, SkeuD, Moogle, InVerse, LavosSpawn\n" "\n" "And to all I forgot!\n" ); } } about_dialog; virtual int startup() throw (GeneralException) { mogltk::widgets::ContextMenu * c; mogltk::base * gl = new mogltk::glbase(); mogltk::shape * sh = new mogltk::glshape(); mogltk::engine::setcursorvisible(true); mogltk::engine::setappactive(true); Root = new mogltk::widgets::Root(sh); MainMenu = new mogltk::widgets::Menu(sh, Root); Frame = new mogltk::widgets::Frame(sh, Root, 0, MainMenu->GetH(), Root->GetW() - 1, Root->GetH() - MainMenu->GetH() - 1); new frame(sh, Frame); MainMenu->addnode("/", 0); c = MainMenu->createsub("File"); c->addnode("Load", 0); c->addnode("Save", 0); c->addline(); c->addnode("Quit", &action_quit); c = MainMenu->createsub("Execution"); c->addnode("Run", 0); c = MainMenu->createsub("Help"); c->addnode("About", &about_dialog); new timer(); Root->mainloop(); return 0; } CODE_ENDS