/[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.17 by reallysoft, Sat Mar 29 01:25:54 2003 UTC revision 1.18 by dheck, Sat Mar 29 10:34:42 2003 UTC
# Line 1  Line 1 
1  /*  /*
2   * Copyright (C) 2002 Daniel Heck   * Copyright (C) 2002,2003 Daniel Heck
3   *   *
4   * This program is free software; you can redistribute it and/or   * This program is free software; you can redistribute it and/or
5   * modify it under the terms of the GNU General Public License   * modify it under the terms of the GNU General Public License
# Line 14  Line 14 
14   * You should have received a copy of the GNU General Public License along   * You should have received a copy of the GNU General Public License along
15   * with this program; if not, write to the Free Software Foundation, Inc.,   * with this program; if not, write to the Free Software Foundation, Inc.,
16   * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.   * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
17     *
18     * $Id$
19   */   */
20  #include "video.hh"  #include "video.hh"
21  #include "menus.hh"  #include "menus.hh"
# Line 100  namespace Line 102  namespace
102      public:      public:
103          LevelMenu(LevelPack *lp, unsigned ilevel_pack);          LevelMenu(LevelPack *lp, unsigned ilevel_pack);
104      private:      private:
105            void set_levelpack (int index);
106    
107          // Menu interface.          // Menu interface.
108          void draw_background(px::GC &gc);          void draw_background(px::GC &gc);
109    
# Line 116  namespace Line 120  namespace
120          Widget *newgame;          Widget *newgame;
121          Widget *back;          Widget *back;
122          Widget *m_nextlp, *m_prevlp; // Next/previous level pack          Widget *m_nextlp, *m_prevlp; // Next/previous level pack
123          Widget *m_lpbutton;     // Current level pack          TextButton *m_lpbutton; // Current level pack
124          LevelWidget *levelwidget;          LevelWidget *levelwidget;
125          LevelPack *level_pack;          LevelPack *level_pack;
126          unsigned m_ilevelpack;          unsigned m_ilevelpack;
# Line 209  LevelWidget::change_levelpack (LevelPack Line 213  LevelWidget::change_levelpack (LevelPack
213  void  void
214  LevelWidget::next_unsolved()  LevelWidget::next_unsolved()
215  {  {
216      int  curr  = iselected;      unsigned curr  = iselected;
217      int  next  = curr+1;      unsigned next  = curr+1;
218      bool found = false;      bool     found = false;
219    
220      while (next != curr) {      while (next != curr) {
221          if (next >= level_pack->size()) next = 0;          if (next >= level_pack->size()) next = 0;
# Line 612  namespace Line 616  namespace
616              r.x += r.w+skip;              r.x += r.w+skip;
617              return w;              return w;
618          }          }
619            Widget *add (Widget *w, int width) {
620                px::Rect rr(r.x, r.y, width, r.h);
621                container->add(w, rr);
622                r.x += width + skip;
623                return w;
624            }
625      };      };
626  }  }
627    
# Line 663  void OptionsMenu::draw_background(px::GC Line 673  void OptionsMenu::draw_background(px::GC
673  LevelMenu::LevelMenu(LevelPack *lp, unsigned ilevel_pack)  LevelMenu::LevelMenu(LevelPack *lp, unsigned ilevel_pack)
674  : newgame     (new TextButton("Start Game", this)),  : newgame     (new TextButton("Start Game", this)),
675    back        (new TextButton("Back", this)),    back        (new TextButton("Back", this)),
676    m_nextlp    (new TextButton("Next", this)),    m_nextlp    (new TextButton(">", this)),
677    m_prevlp    (new TextButton("Prev", this)),    m_prevlp    (new TextButton("<", this)),
678    m_lpbutton  (new TextButton("Game: ", this)),    m_lpbutton  (new TextButton("Game: ", this)),
679    levelwidget (new LevelWidget(lp, 4, 3)),    levelwidget (new LevelWidget(lp, 4, 3)),
680    level_pack  (lp),    level_pack  (lp),
681    m_ilevelpack (ilevel_pack)    m_ilevelpack ()
682  {  {
683        const int
684  #define BX 100                  // button xsize          BX=100,                 // button xsize
685  #define BY 28                   // button ysize          BY=28,                  // button ysize
686  #define SX 5                    // x spacing          SX=5,                   // x spacing
687  #define SY 2                    // y spacing          SY=2,                   // y spacing
688  #define OX (BX+SX)          OX=(BX+SX),
689  #define OY (BY+SY)          OY=(BY+SY),
690  #define RJ (605+SX)             // right justification          RJ=(605+SX),            // right justification
691  #define Y1 15                   // y position for top button row          Y1=15,                  // y position for top button row
692  #define Y2 410                  // y position for bottom button row          Y2=410;                 // y position for bottom button row
   
693      {      {
694          BuildHList hlist(this, Rect(RJ-3*OX, Y1, BX, BY), 5);          BuildHList hlist(this, Rect(RJ-370, Y1, BX, BY), 5);
695            hlist.add (m_prevlp, 30);
696          hlist.add (m_prevlp);          hlist.add (m_lpbutton, 300);
697          hlist.add (m_lpbutton);          hlist.add (m_nextlp, 30);
         hlist.add (m_nextlp);  
698      }      }
699    
700      {      {
# Line 721  LevelMenu::LevelMenu(LevelPack *lp, unsi Line 729  LevelMenu::LevelMenu(LevelPack *lp, unsi
729  //     add(levelwidget, Rect(10,10,600,480));  //     add(levelwidget, Rect(10,10,600,480));
730      levelwidget->set_listener(this);      levelwidget->set_listener(this);
731    
732  #undef BX      set_levelpack (ilevel_pack);
 #undef BY  
 #undef SX  
 #undef SY  
 #undef OX  
 #undef OY  
 #undef RJ  
 #undef Y1  
 #undef Y2  
733  }  }
734    
735  bool  bool
# Line 770  LevelMenu::on_action(Widget *w) Line 770  LevelMenu::on_action(Widget *w)
770          levelwidget->next_unsolved();          levelwidget->next_unsolved();
771      }      }
772      else if (w == m_prevlp) {      else if (w == m_prevlp) {
773          if (m_ilevelpack > 0) {          set_levelpack (m_ilevelpack-1);
774              m_ilevelpack -= 1;      }
             levelwidget->change_levelpack (enigma::LevelPacks[m_ilevelpack]);  
         }  
     }  
775      else if (w == m_nextlp) {      else if (w == m_nextlp) {
776          if (m_ilevelpack < enigma::LevelPacks.size() - 1) {          set_levelpack (m_ilevelpack+1);
             m_ilevelpack += 1;  
             levelwidget->change_levelpack (enigma::LevelPacks[m_ilevelpack]);  
         }  
777      }      }
778  }  }
779    
780  void  void
781    LevelMenu::set_levelpack (int index)
782    {
783        if (index >= 0 && index < enigma::LevelPacks.size()) {
784            m_ilevelpack = index;
785            levelwidget->change_levelpack (enigma::LevelPacks[m_ilevelpack]);
786    
787            char txt[100];
788            snprintf (txt, sizeof(txt), "Level pack:  %s",
789                      enigma::LevelPacks[index]->name().c_str());
790            m_lpbutton->set_text (txt);
791        }
792    }
793    
794    
795    void
796  LevelMenu::draw_background(px::GC &gc)  LevelMenu::draw_background(px::GC &gc)
797  {  {
798      video::SetCaption("Enigma - Level Menu");      video::SetCaption("Enigma - Level Menu");
# Line 825  LevelPackMenu::on_action(Widget *w) Line 834  LevelPackMenu::on_action(Widget *w)
834              invalidate_all();              invalidate_all();
835          }          }
836    
837      if( w == back)      if (w == back)
838              Menu::quit();          Menu::quit();
839  }  }
840    
841  void  void

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

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