/[enigma]/enigma/src/menus.cc
ViewVC logotype

Diff of /enigma/src/menus.cc

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.64.2.3 by dheck, Fri Sep 26 14:48:21 2003 UTC revision 1.64.2.4 by dheck, Sun Sep 28 20:46:34 2003 UTC
# Line 830  void OptionsMenu::draw_background(px::GC Line 830  void OptionsMenu::draw_background(px::GC
830  // Level menu  // Level menu
831  //----------------------------------------------------------------------  //----------------------------------------------------------------------
832  LevelMenu::LevelMenu(LevelPack *lp, unsigned long pos)  LevelMenu::LevelMenu(LevelPack *lp, unsigned long pos)
833  : newgame     (new TextButton("Start Game", this)),  : but_back       (new TextButton("Back", this)),
834    back        (new TextButton("Back", this)),    but_difficulty (new DifficultyButton),
835    m_nextlp    (new TextButton(">", this)),    but_levelpack  (new TextButton("Level Pack", this)),
836    m_prevlp    (new TextButton("<", this)),    lbl_lpinfo     (new Label("")),
837    m_difficulty(new DifficultyButton),    lbl_statistics (new Label("")),
838    m_lpbutton  (new TextButton("Level Pack", this)),    lbl_levelname  (new Label("")),
839    m_infobutton(new Label("")),    lbl_levelinfo  (new Label("")),
   m_levelinfo (new Label("")),  
   m_levelinfo2 (new Label("")),  
840    levelwidget (new LevelWidget(lp, 4, 3)),    levelwidget (new LevelWidget(lp, 4, 3)),
841    level_pack  (lp),    level_pack  (lp),
842    m_ilevelpack ()    m_ilevelpack ()
# Line 854  LevelMenu::LevelMenu(LevelPack *lp, unsi Line 852  LevelMenu::LevelMenu(LevelPack *lp, unsi
852          pgdown   = new ImageButton("ic-down", "ic-down1", this);          pgdown   = new ImageButton("ic-down", "ic-down1", this);
853          start    = new ImageButton("ic-top", "ic-top1", this);          start    = new ImageButton("ic-top", "ic-top1", this);
854          end      = new ImageButton("ic-bottom", "ic-bottom1", this);          end      = new ImageButton("ic-bottom", "ic-bottom1", this);
855          unsolved = new ImageButton("ic-unsolved", "ic-unsolved1", this);          but_unsolved = new ImageButton("ic-unsolved", "ic-unsolved1", this);
856          // new TextButton("Timer on")          // new TextButton("Timer on")
857    
858          BuildHList hlist1(this, Rect(10, Y3, BX, BY), 10);          BuildHList hlist1(this, Rect(10, Y3, BX, BY), 10);
859    
860          hlist1.add (m_lpbutton);          hlist1.add (but_levelpack);
861          hlist1.add (unsolved);          hlist1.add (but_unsolved);
862          hlist1.add (m_difficulty);          hlist1.add (but_difficulty);
863  //        hlist1.add (newgame);  //        hlist1.add (newgame);
864          hlist1.add (back);          hlist1.add (but_back);
865      }      }
866    
867      {      {
# Line 878  LevelMenu::LevelMenu(LevelPack *lp, unsi Line 876  LevelMenu::LevelMenu(LevelPack *lp, unsi
876          add (end, r);          add (end, r);
877      }      }
878    
879      add (m_infobutton, Rect (325,Y2,305,28));      add (lbl_lpinfo, Rect (325,Y2,305,28));
880      m_infobutton->set_alignment (HALIGN_RIGHT, VALIGN_TOP);      lbl_lpinfo->set_alignment (HALIGN_RIGHT, VALIGN_TOP);
881      add (m_levelinfo,  Rect (10,Y2,305, 28));      add (lbl_statistics, Rect (325, Y2+20, 305, 28));
882      m_levelinfo->set_alignment (HALIGN_LEFT, VALIGN_TOP);      lbl_statistics->set_alignment (HALIGN_RIGHT, VALIGN_TOP);
883      add (m_levelinfo2,  Rect (10,Y2+20,305, 28));      
884      m_levelinfo2->set_alignment (HALIGN_LEFT, VALIGN_TOP);      add (lbl_levelname,  Rect (10,Y2,305, 28));
885  //    add (levelwidget,  Rect (10,50,620,350));      lbl_levelname->set_alignment (HALIGN_LEFT, VALIGN_TOP);
886        add (lbl_levelinfo,  Rect (10,Y2+20,305, 28));
887        lbl_levelinfo->set_alignment (HALIGN_LEFT, VALIGN_TOP);
888        
889      add (levelwidget,  Rect (10,Y1,590,350));      add (levelwidget,  Rect (10,Y1,590,350));
890      levelwidget->set_listener(this);      levelwidget->set_listener(this);
891    
# Line 924  LevelMenu::on_event (const SDL_Event &e) Line 925  LevelMenu::on_event (const SDL_Event &e)
925  void  void
926  LevelMenu::on_action(Widget *w)  LevelMenu::on_action(Widget *w)
927  {  {
928      if (w == newgame || w==levelwidget) {      if (w==levelwidget) {
929          int ilevel = levelwidget->selected_level();          int ilevel = levelwidget->selected_level();
930                    
931          LevelPack *lp = enigma::LevelPacks[m_ilevelpack];          LevelPack *lp = enigma::LevelPacks[m_ilevelpack];
# Line 936  LevelMenu::on_action(Widget *w) Line 937  LevelMenu::on_action(Widget *w)
937          }          }
938          else          else
939              show_text("You are not allowed to play this level yet.");              show_text("You are not allowed to play this level yet.");
940      } else if (w == back) {      } else if (w == but_back) {
941          Menu::quit();          Menu::quit();
942      } else if (w == pgup) {      } else if (w == pgup) {
943          levelwidget->page_up();          levelwidget->page_up();
# Line 946  LevelMenu::on_action(Widget *w) Line 947  LevelMenu::on_action(Widget *w)
947          levelwidget->start();          levelwidget->start();
948      } else if (w == end) {      } else if (w == end) {
949          levelwidget->end();          levelwidget->end();
950      } else if (w == unsolved) {      } else if (w == but_unsolved) {
951          levelwidget->next_unsolved();          levelwidget->next_unsolved();
952      } else if (w == m_prevlp) {      } else if (w == but_levelpack) {
         set_levelpack (m_ilevelpack-1);  
     } else if (w == m_nextlp) {  
         set_levelpack (m_ilevelpack+1);  
     } else if (w == m_lpbutton) {  
953          LevelPackMenu lpm;          LevelPackMenu lpm;
954          lpm.center(video::GetScreen());          lpm.center(video::GetScreen());
955          if (lpm.manage(video::GetScreen())) {          if (lpm.manage(video::GetScreen())) {
# Line 963  LevelMenu::on_action(Widget *w) Line 960  LevelMenu::on_action(Widget *w)
960      }      }
961  }  }
962    
 #define BUFFERSIZE 200  
   
963  void  void
964  LevelMenu::update_info()  LevelMenu::update_info()
965  {  {
966      char               txt[BUFFERSIZE];      char txt[200];
967      enigma::LevelPack *lp        = enigma::LevelPacks[m_ilevelpack];      enigma::LevelPack *lp        = enigma::LevelPacks[m_ilevelpack];
     int                iselected = levelwidget->selected_level();  
968    
969      if (const enigma::LevelInfo *li = lp->get_info (iselected)) {      // Display levelpack statistics (percentage of solved levels)
970        {
971            int numsolved = enigma::CountSolvedLevels (lp);
972            int pct = 0;
973            if (lp->size() > 0) {
974                pct = 100*numsolved / lp->size();
975            }
976            snprintf (txt, sizeof(txt), "%d%% solved", pct);
977            lbl_statistics->set_text(txt);
978        }
979        
980        int                iselected = levelwidget->selected_level();
981        if (const enigma::LevelInfo *li = lp->get_info (iselected))
982        {
983            // Display level name
984          if (options::WizardMode) {          if (options::WizardMode) {
985              snprintf (txt, sizeof(txt), "#%d: %s (%s)",              snprintf (txt, sizeof(txt), "#%d: %s (%s)",
986                        iselected+1, li->name.c_str(), li->filename.c_str());                        iselected+1, li->name.c_str(), li->filename.c_str());
# Line 980  LevelMenu::update_info() Line 988  LevelMenu::update_info()
988              snprintf (txt, sizeof(txt), "#%d: %s",              snprintf (txt, sizeof(txt), "#%d: %s",
989                        iselected+1, li->name.c_str());                        iselected+1, li->name.c_str());
990          }          }
991          m_levelinfo->set_text(txt);          lbl_levelname->set_text(txt);
         assert(strlen(txt)<BUFFERSIZE);  
992    
993            // Display best time
994          if (shown_text.length()) {          if (shown_text.length()) {
995              m_levelinfo2->set_text(shown_text);              lbl_levelinfo->set_text(shown_text);
996          }          }
997          else {          else {
998              int par_time = li->best_time;              int par_time = li->best_time;
# Line 1000  LevelMenu::update_info() Line 1008  LevelMenu::update_info()
1008              snprintf (txt, sizeof(txt), "Time to beat: %d:%02d",              snprintf (txt, sizeof(txt), "Time to beat: %d:%02d",
1009                        par_time/60, par_time % 60);                        par_time/60, par_time % 60);
1010    
1011              m_levelinfo2->set_text(txt);              lbl_levelinfo->set_text(txt);
             assert(strlen(txt)<BUFFERSIZE);  
1012          }          }
1013      }      }
1014  }  }
1015    
 #undef BUFFERSIZE  
   
1016  void  void
1017  LevelMenu::set_levelpack (unsigned index)  LevelMenu::set_levelpack (unsigned index)
1018  {  {
# Line 1020  LevelMenu::set_levelpack (unsigned index Line 1025  LevelMenu::set_levelpack (unsigned index
1025          char txt[100];          char txt[100];
1026          snprintf (txt, sizeof(txt), "%s: %d levels",          snprintf (txt, sizeof(txt), "%s: %d levels",
1027                    lp->get_name().c_str(), lp->size());                    lp->get_name().c_str(), lp->size());
1028          m_infobutton->set_text(txt);          lbl_lpinfo->set_text(txt);
1029    
1030          update_info();          update_info();
1031      }      }

Legend:
Removed from v.1.64.2.3  
changed lines
  Added in v.1.64.2.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26