Module Menu
[hide private]
[frames] | no frames]

Source Code for Module Menu

  1  #####################################################################
 
  2  # -*- coding: iso-8859-1 -*-                                        #
 
  3  #                                                                   #
 
  4  # Frets on Fire                                                     #
 
  5  # Copyright (C) 2006 Sami Kyöstilä                                  #
 
  6  #                                                                   #
 
  7  # This program is free software; you can redistribute it and/or     #
 
  8  # modify it under the terms of the GNU General Public License       #
 
  9  # as published by the Free Software Foundation; either version 2    #
 
 10  # of the License, or (at your option) any later version.            #
 
 11  #                                                                   #
 
 12  # This program is distributed in the hope that it will be useful,   #
 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of    #
 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     #
 
 15  # GNU General Public License for more details.                      #
 
 16  #                                                                   #
 
 17  # You should have received a copy of the GNU General Public License #
 
 18  # along with this program; if not, write to the Free Software       #
 
 19  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,        #
 
 20  # MA  02110-1301, USA.                                              #
 
 21  #####################################################################
 
 22  
 
 23  import pygame 
 24  from OpenGL.GL import * 
 25  import math 
 26  
 
 27  from View import Layer 
 28  from Input import KeyListener 
 29  import Data 
 30  import Theme 
 31  import Dialogs 
 32  import Player 
 33  
 
34 -class Choice:
35 - def __init__(self, text, callback, values = None, valueIndex = 0):
36 self.text = unicode(text) 37 self.callback = callback 38 self.values = values 39 self.valueIndex = valueIndex 40 41 if self.text.endswith(" >"): 42 self.text = text[:-2] 43 self.isSubMenu = True 44 else: 45 self.isSubMenu = isinstance(self.callback, Menu) or isinstance(self.callback, list)
46
47 - def trigger(self, engine = None):
48 if engine and isinstance(self.callback, list): 49 nextMenu = Menu(engine, self.callback) 50 elif engine and isinstance(self.callback, Menu): 51 nextMenu = self.callback 52 elif self.values: 53 nextMenu = self.callback(self.values[self.valueIndex]) 54 else: 55 nextMenu = self.callback() 56 if isinstance(nextMenu, Menu): 57 engine.view.pushLayer(nextMenu)
58
59 - def selectNextValue(self):
60 if self.values: 61 self.valueIndex = (self.valueIndex + 1) % len(self.values) 62 self.trigger()
63
64 - def selectPreviousValue(self):
65 if self.values: 66 self.valueIndex = (self.valueIndex - 1) % len(self.values) 67 self.trigger()
68
69 - def getText(self, selected):
70 if not self.values: 71 if self.isSubMenu: 72 return "%s >" % self.text 73 return self.text 74 if selected: 75 return "%s: %s%s%s" % (self.text, Data.LEFT, self.values[self.valueIndex], Data.RIGHT) 76 else: 77 return "%s: %s" % (self.text, self.values[self.valueIndex])
78 213