/[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.62 by dheck, Sun Sep 7 18:20:32 2003 UTC revision 1.63 by dheck, Fri Sep 12 21:49:45 2003 UTC
# Line 87  namespace Line 87  namespace
87              if (m_widgets.empty())              if (m_widgets.empty())
88                  return;                  return;
89              int ncolumns = m_widgets.size() / m_maxheight;              int ncolumns = m_widgets.size() / m_maxheight;
90              int nrows = m_widgets.size() / ncolumns;              int nrows = (m_widgets.size() + ncolumns - 1) / ncolumns;
91              int i=0;              int i=0;
92              int x=0;              int x=0;
93              for (int col = 0; col < ncolumns; col++) {              for (int col = 0; col < ncolumns; col++) {
# Line 154  namespace Line 154  namespace
154          LevelPreviewCacheElem& operator = (const LevelPreviewCacheElem& other);          LevelPreviewCacheElem& operator = (const LevelPreviewCacheElem& other);
155      public:      public:
156          LevelPreviewCacheElem(LevelPack *lp, unsigned idx_, int xsize, int ysize)          LevelPreviewCacheElem(LevelPack *lp, unsigned idx_, int xsize, int ysize)
157              : surface(0) , idx(idx_)          : surface(0) , idx(idx_)
158          {          {
159              surface = LevelPreview(lp, idx); // do not free, points to BackBuffer              surface = LevelPreview(lp, idx); // do not free, points to BackBuffer
160              if (surface) {              if (surface) {
# Line 243  namespace Line 243  namespace
243              listener = al;              listener = al;
244          }          }
245          void trigger_action() {          void trigger_action() {
             const LevelInfo *levelinfo = level_pack->get_info(iselected);  
             LevelStatus     *ls        = GetLevelStatus(level_pack->get_name(), levelinfo->filename);  
246    
247              if (iselected <= max_available || (ls && ls->finished >= Difficulty)) {              cache.clear();
248                  cache.clear();              if (listener) {
249                  if (listener) {                  listener->on_action(this);
250                      listener->on_action(this);                  recalc_available();
                     recalc_available();  
                 }  
             }  
             else {  
                 show_text("You are not allowed to play this level yet.");  
251              }              }
252          }          }
253    
# Line 546  LevelWidget::draw (px::GC &gc, const px: Line 539  LevelWidget::draw (px::GC &gc, const px:
539      const int hgap = Max(0, (get_w() - width*buttonw) / (width-1));      const int hgap = Max(0, (get_w() - width*buttonw) / (width-1));
540      const int vgap = Max(0, (get_h() - height*buttonh)/ (height-1));      const int vgap = Max(0, (get_h() - height*buttonh)/ (height-1));
541    
542      Font    *smallfnt    = enigma::GetFont("levelmenu");      Font    *smallfnt = enigma::GetFont("levelmenu");
543      Surface *img_easy    = enigma::GetImage("completed-easy");  
544      Surface *img_hard    = enigma::GetImage("completed");      Surface *img_easy        = enigma::GetImage("completed-easy");
545      Surface *img_changed = enigma::GetImage("changed");      Surface *img_hard        = enigma::GetImage("completed");
546      Surface *img_error   = enigma::GetImage("error");      Surface *img_changed     = enigma::GetImage("changed");
547        Surface *img_error       = enigma::GetImage("error");
548      Surface *img_unavailable = enigma::GetImage("unavailable");      Surface *img_unavailable = enigma::GetImage("unavailable");
549      Surface *img_unknown = enigma::GetImage("unknown");      Surface *img_unknown     = enigma::GetImage("unknown");
550    
551      unsigned i=ifirst;          // level index      unsigned i=ifirst;          // level index
552      for (int y=0; y<height; y++)      for (int y=0; y<height; y++)
# Line 614  LevelWidget::draw (px::GC &gc, const px: Line 608  LevelWidget::draw (px::GC &gc, const px:
608                  }                  }
609    
610                  // Shade unavailable levels                  // Shade unavailable levels
611                  if (i > (unsigned)max_available && finished<Difficulty)                  if (LevelIsLocked(level_pack, i))
612                      blit (gc, imgx, imgy, img_unavailable);                      blit (gc, imgx, imgy, img_unavailable);
613    
614                  // Draw solved/changed icons on top of level preview                  // Draw solved/changed icons on top of level preview
# Line 635  LevelWidget::draw (px::GC &gc, const px: Line 629  LevelWidget::draw (px::GC &gc, const px:
629          }          }
630      }      }
631    done_painting:    done_painting:
632      // Remove unused areas (if any) from the list      m_areas.resize (i-ifirst); // Remove unused areas (if any) from the list
 //     // `i' is the index of the last displayed level  
 //     while (ifirst + areas.size() > i)  
 //         areas.pop_back();  
     m_areas.resize (i-ifirst);  
633      return;      return;
634  }  }
635    
# Line 1313  LevelMenu::on_action(Widget *w) Line 1303  LevelMenu::on_action(Widget *w)
1303  {  {
1304      if (w == newgame || w==levelwidget) {      if (w == newgame || w==levelwidget) {
1305          int ilevel = levelwidget->selected_level();          int ilevel = levelwidget->selected_level();
1306          ilevel     = StartGame(enigma::LevelPacks[m_ilevelpack], ilevel);          
1307          invalidate_all();          LevelPack *lp = enigma::LevelPacks[m_ilevelpack];
1308          levelwidget->set_current(ilevel);          if (!LevelIsLocked (lp, ilevel))
1309            {
1310                ilevel = StartGame(lp, ilevel);
1311                invalidate_all();
1312                levelwidget->set_current(ilevel);
1313            }
1314            else
1315                show_text("You are not allowed to play this level yet.");
1316      } else if (w == back) {      } else if (w == back) {
1317          Menu::quit();          Menu::quit();
1318      } else if (w == pgup) {      } else if (w == pgup) {

Legend:
Removed from v.1.62  
changed lines
  Added in v.1.63

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