Exemple #1
0
    def _select(self):
        """
        Apply selected option.
        
        :return: 
        """
        assert isinstance(self._actual, Menu)

        try:
            option = self._actual._option[self._actual._index][1]
        except:
            return

        a = isinstance(option, _locals.PymenuAction)
        b = str(type(option)) == "<class 'pygameMenu.locals" \
                                 "._PymenuAction'>"

        # If element is a Menu
        if isinstance(option, Menu):
            actual = self
            self._actual._actual = option._actual
            self._actual._prev = actual
            self._actual._prev_draw = self.draw
            self.draw = option.draw
        # If option is a PyMenuAction
        elif a or b:
            # Back to menu
            if _locals._eq_action(option, _locals.PYGAME_MENU_BACK):
                self.reset(1)
            # Close menu
            elif _locals._eq_action(option, _locals.PYGAME_MENU_CLOSE):
                self.disable()
                self._closelocked = False
                closefun = self._actual._onclose
                if closefun is not None:
                    if _locals._eq_action(closefun, _locals.PYGAME_MENU_RESET):
                        self.reset(100)
                    elif _locals._eq_action(closefun,
                                            _locals.PYGAME_MENU_BACK):
                        self.reset(1)
                    elif _locals._eq_action(closefun,
                                            _locals.PYGAME_MENU_EXIT):
                        exit()
                    elif isinstance(onclose, type(None)):
                        closefun()
            # Exit program
            elif _locals._eq_action(option, _locals.PYGAME_MENU_EXIT):
                exit()
        # If element is a function
        elif isinstance(option, types.FunctionType) or callable(option):
            if len(self._actual._option[self._actual._index][2]) > 0:
                if type(self._actual._option[self._actual._index][2]) is tuple:
                    option(*self._actual._option[self._actual._index][2])
                else:
                    option(self._actual._option[self._actual._index][2])
            else:
                option()
        # If null type
        elif isinstance(option, type(None)):
            pass
        # If element is a selector
        elif isinstance(option, _Selector):
            option.apply()
Exemple #2
0
    def _main(self, events=None):
        """
        Main function of the loop.
        
        :param events: Pygame events
        :return: None
        """
        if self._actual._dopause:  # If menu pauses game then apply function
            self._bgfun()
        self.draw()
        if events is None:
            events = _pygame.event.get()
        for event in events:
            if event.type == _pygame.locals.QUIT:
                exit()
            elif event.type == _pygame.locals.KEYDOWN:
                if event.key == _ctrl.MENU_CTRL_DOWN:
                    self._down()
                elif event.key == _ctrl.MENU_CTRL_UP:
                    self._up()
                elif event.key == _ctrl.MENU_CTRL_ENTER:
                    self._select()
                    if not self._actual._dopause:
                        return True
                elif event.key == _ctrl.MENU_CTRL_LEFT:
                    self._left()
                elif event.key == _ctrl.MENU_CTRL_RIGHT:
                    self._right()
                elif event.key == _ctrl.MENU_CTRL_BACK:
                    self.reset(1)
                elif event.key == _ctrl.MENU_CTRL_CLOSE_MENU and \
                        not self._closelocked:
                    onclose = self._actual._onclose
                    close = True
                    if not isinstance(onclose, type(None)):
                        a = isinstance(onclose, _locals.PymenuAction)
                        b = str(type(
                            onclose)) == "<class 'pygameMenu.locals" \
                                         "._PymenuAction'>"
                        if a or b:
                            if _locals._eq_action(onclose,
                                                  _locals.PYGAME_MENU_RESET):
                                self.reset(100)
                            elif _locals._eq_action(onclose,
                                                    _locals.PYGAME_MENU_BACK):
                                self.reset(1)
                            elif _locals._eq_action(onclose,
                                                    _locals.PYGAME_MENU_EXIT):
                                exit()
                            elif _locals._eq_action(
                                    onclose,
                                    _locals.PYGAME_MENU_DISABLE_CLOSE):
                                close = False
                        elif isinstance(onclose, types.FunctionType):
                            onclose()
                    else:
                        close = False
                    if close:
                        self.disable()
                        return True

        _pygame.display.flip()
        self._closelocked = False
        return False