/[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.61 by reallysoft, Sun Sep 7 09:50:51 2003 UTC revision 1.62 by dheck, Sun Sep 7 18:20:32 2003 UTC
# Line 38  using namespace gui; Line 38  using namespace gui;
38  using namespace px;  using namespace px;
39  using namespace OxydLib;  using namespace OxydLib;
40    
41    
42    //----------------------------------------------------------------------
43    // Helper classes
44    //----------------------------------------------------------------------
45    namespace
46    {
47        class BuildVList {
48            Rect r;
49            Menu *container;
50            int skip;
51        public:
52            BuildVList(Menu *cc, const px::Rect &rr, int s)
53                : r(rr), container(cc), skip(s)
54            {}
55    
56            Widget *add(Widget *w) {
57                container->add(w, r);
58                r.y += r.h+skip;
59                return w;
60            }
61    
62            Rect pos() const { return r; }
63        };
64    
65        class VTableBuilder {
66            Menu             *m_menu;
67            px::Rect          m_widgetsize;
68            int               m_hspacing, m_vspacing;
69            vector<Widget *>  m_widgets;
70            int               m_maxheight;
71        public:
72            VTableBuilder (Menu *menu, const px::Rect &widgetsize,
73                           int vspacing, int hspacing, int max_height)
74            : m_menu(menu), m_widgetsize(widgetsize)
75            {
76                m_hspacing = hspacing;
77                m_vspacing = vspacing;
78                m_maxheight = max_height;
79            }
80            
81            Widget *add (Widget *w) {
82                m_widgets.push_back(w);
83                return w;
84            }
85    
86            void finish() {
87                if (m_widgets.empty())
88                    return;
89                int ncolumns = m_widgets.size() / m_maxheight;
90                int nrows = m_widgets.size() / ncolumns;
91                int i=0;
92                int x=0;
93                for (int col = 0; col < ncolumns; col++) {
94                    int y=0;
95                    for (int row=0; row < nrows; row++, i++) {
96                        if (i == (int)m_widgets.size())
97                            goto done;
98                        px::Rect rr(x, y, m_widgetsize.w, m_widgetsize.h);
99                        m_menu->add(m_widgets[i], rr);
100    //                    m_widgets[i]->move (x, y);
101                        y += m_widgetsize.h + m_vspacing;
102                    }
103                    x += m_widgetsize.w + m_hspacing;
104                }
105              done:
106                return;
107            }
108        };
109    
110        class BuildHList {
111            Rect r;
112            Menu *container;
113            int skip;
114        public:
115            BuildHList(Menu *cc, const px::Rect &rr, int s)
116            : r(rr), container(cc), skip(s)
117            {}
118    
119            Widget * add(Widget *w) {
120                container->add(w, r);
121                r.x += r.w+skip;
122                return w;
123            }
124            Widget *add (Widget *w, int width) {
125                px::Rect rr(r.x, r.y, width, r.h);
126                container->add(w, rr);
127                r.x += width + skip;
128                return w;
129            }
130    
131            Rect pos() const { return r; }
132        };
133    }
134    
135  namespace  namespace
136  {  {
137    
# Line 120  namespace Line 214  namespace
214      };      };
215    
216    
217        class LevelPackMenu : public Menu {
218        public:
219            LevelPackMenu();
220    
221            void on_action(Widget *w);
222            void draw_background(px::GC &gc);
223            int get_selection() const { return m_selection; }
224    
225        private:
226            vector<Widget *> buttons;
227            int m_selection;
228        };
229    
230    
231      class LevelMenu;      class LevelMenu;
232    
233      class LevelWidget : public Widget {      class LevelWidget : public Widget {
# Line 292  namespace Line 400  namespace
400      };      };
401  }  }
402    
403    
404    //----------------------------------------------------------------------
405    // Level pack menu
406    //----------------------------------------------------------------------
407    
408    LevelPackMenu::LevelPackMenu()
409    : m_selection(-1)
410    {
411        VTableBuilder builder(this, Rect(0,0,150,40), 5,5, 4);
412    
413        for (unsigned i=0; i<enigma::LevelPacks.size(); ++i) {
414            LevelPack *lp = enigma::LevelPacks[i];
415            buttons.push_back(builder.add(new TextButton(lp->get_name(), this)));
416        }
417        builder.finish();
418    }
419    
420    void
421    LevelPackMenu::on_action(Widget *w)
422    {
423        for (unsigned i=0; i<buttons.size(); ++i)
424            if (buttons[i]==w) {
425                m_selection = i;
426                Menu::quit();
427            }
428    }
429    
430    void
431    LevelPackMenu::draw_background(px::GC &gc)
432    {
433        video::SetCaption("Enigma - Level Pack Menu");
434    //     sound::PlayMusic("sound/menu.s3m");
435    
436        blit(gc, 0,0, enigma::GetImage("menu_bg"));
437    }
438    
439    
440  //----------------------------------------------------------------------  //----------------------------------------------------------------------
441  // LevelWidget implementation  // LevelWidget implementation
442  //----------------------------------------------------------------------  //----------------------------------------------------------------------
# Line 974  namespace Line 1119  namespace
1119    
1120    
1121  //----------------------------------------------------------------------  //----------------------------------------------------------------------
 // Helper classes  
 //----------------------------------------------------------------------  
 namespace  
 {  
     class BuildVList {  
         Rect r;  
         Menu *container;  
         int skip;  
     public:  
         BuildVList(Menu *cc, const px::Rect &rr, int s)  
             : r(rr), container(cc), skip(s)  
         {}  
   
         Widget * add(Widget *w) {  
             container->add(w, r);  
             r.y += r.h+skip;  
             return w;  
         }  
   
         Rect pos() const { return r; }  
     };  
   
     class BuildHList {  
         Rect r;  
         Menu *container;  
         int skip;  
     public:  
         BuildHList(Menu *cc, const px::Rect &rr, int s)  
             : r(rr), container(cc), skip(s)  
         {}  
   
         Widget * add(Widget *w) {  
             container->add(w, r);  
             r.x += r.w+skip;  
             return w;  
         }  
         Widget *add (Widget *w, int width) {  
             px::Rect rr(r.x, r.y, width, r.h);  
             container->add(w, rr);  
             r.x += width + skip;  
             return w;  
         }  
   
         Rect pos() const { return r; }  
     };  
 }  
   
   
 //----------------------------------------------------------------------  
1122  // Options menu  // Options menu
1123  //----------------------------------------------------------------------  //----------------------------------------------------------------------
1124  OptionsMenu::OptionsMenu(px::Surface *background_)  OptionsMenu::OptionsMenu(px::Surface *background_)
# Line 1237  LevelMenu::on_action(Widget *w) Line 1333  LevelMenu::on_action(Widget *w)
1333      } else if (w == m_nextlp) {      } else if (w == m_nextlp) {
1334          set_levelpack (m_ilevelpack+1);          set_levelpack (m_ilevelpack+1);
1335      } else if (w == m_lpbutton) {      } else if (w == m_lpbutton) {
1336          set_levelpack ((m_ilevelpack+1) % enigma::LevelPacks.size());          LevelPackMenu lpm;
1337            lpm.center(video::GetScreen());
1338            if (lpm.manage(video::GetScreen())) {
1339                set_levelpack(lpm.get_selection());
1340            }
1341            invalidate_all();
1342    //        set_levelpack ((m_ilevelpack+1) % enigma::LevelPacks.size());
1343      }      }
1344  }  }
1345    

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

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