Skip to content

Controller

alekay2200 edited this page Sep 16, 2022 · 3 revisions

Resumen

En el módulo controller/abstract_controller.py se encuentra la clase abstracta Controller en la que se deben basar todos los controladores.

Este componente esta destinado a gestionar la lógica de cambios de vistas.

Controller(signals: Set[int])

Recibe el conjunto de señales que puede recibir.

arrive_signal(signal: int)

Función para controlar las señales que recibe el controlador.

get_signlas() -> Set[int]

Devuelve el conjunto de señales que puede recibir.

set_sys_manager(sys: System_Manager)

Se asigna un sistema al controlador.

Ejemplo implementación de controlador.

from controller.abstract_controller import Controller
from constants.views_ids import *
from constants.signals import *
from view.home_view import Home_View
from view.message_view import Message_View
from view.attraction_view import Attraction_View
from view.confirmation_view import Confirmation_View

class Band_Controller(Controller):

    def __init__(self):
        signals = {SIG_CHANGE_VIEW, SIG_RETURN}
        super().__init__(signals)
        

    def arrive_signal(self, signal: int, data = None):
        if self._system_manager is None: return # If no system manager do nothing
        
        if signal == SIG_CHANGE_VIEW:
            view_id = data
            if view_id == MESSAGE_ID:
                self._system_manager.change_view(Message_View(self._system_manager.get_display()))
            elif view_id == ATTRACTION_ID:
                self._system_manager.change_view(Attraction_View(self._system_manager.get_display()))
            elif view_id == CONFIRMATION_MENU_ID:
                self._system_manager.change_view(Confirmation_View(self._system_manager.get_display()))

        elif signal == SIG_RETURN:
            view_id = self._system_manager.get_view_id()
            if view_id == MESSAGE_ID or view_id == ATTRACTION_ID:
                self._system_manager.change_view(Home_View(self._system_manager.get_display()))

Clone this wiki locally