view common/listeners/event_listener.py @ 1:4912a6f97c52

Various improvements to the build process including support for self-contained builds. * Note that despite all of these changes PARPG still does not run because asset paths are not standardized, * Modified the SCons script so that by default running `scons` with no arguments creates a self-contained "build" under a build subdirectory to make in-source testing easier. To install PARPG, use `scons install` instead. * Got rid of the binary launcher and replaced it with a shell script for unix and a batch script for Windows (batch script is untested). The binary turned out to be too much trouble to maintain. * Modified the parpg.settings module and parpg.main entry script so that PARPG searches through several default search paths for configuration file(s). PARPG thus no longer crashes if it can't find a configuration file in any particular search path, but will crash it if can't find any configuration files. * Paths supplied to parpg.main are now appended as search paths for the configuration file(s). * Changed the default configuration file name to "parpg.cfg" to simplify searches. * Created the site_scons directory tree where SCons extensions and tools should be placed. * Created a new SCons builder, CopyRecurse, which can copy only certain files and folders from a directory tree using filters (files and folders that start with a leading dot "." e.g. ".svn" are ignored by default). * Added the CPython SCons tool (stands for Compile-Python - I didn't name it!), which provides the InstallPython builder for pre-compiling python sources before they are installed. However, it is currently broken and only installs the python sources.
author M. George Hansen <technopolitica@gmail.com>
date Tue, 31 May 2011 02:46:20 -0700
parents 7a89ea5404b1
children 80672955ab70
line wrap: on
line source

#!/usr/bin/env python

#   This file is part of PARPG.

#   PARPG is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.

#   PARPG is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.

#   You should have received a copy of the GNU General Public License
#   along with PARPG.  If not, see <http://www.gnu.org/licenses/>.

"""This module contains the EventListener that receives events and distributes 
them to PARPG listeners"""

from fife import fife
import logging

logger = logging.getLogger('event_listener')

class EventListener(fife.IKeyListener, 
                   fife.ICommandListener, 
                   fife.IMouseListener, 
                   fife.ConsoleExecuter):
    """Class that receives all events and distributes them to the listeners"""
    def __init__(self, engine):
        """Initialize the instance"""
        self.event_manager = engine.getEventManager()

        fife.IKeyListener.__init__(self)
        self.event_manager.addKeyListener(self)
        fife.ICommandListener.__init__(self)
        self.event_manager.addCommandListener(self)
        fife.IMouseListener.__init__(self)
        self.event_manager.addMouseListener(self)
        fife.ConsoleExecuter.__init__(self)
        engine.getGuiManager().getConsole().setConsoleExecuter(self)
        
        self.listeners = {"Mouse" : [],                          
                          "Key" : [],
                          "Command" : [],
                          "ConsoleCommand" : [],
                          "Widget" : []}               
                
    def addListener(self, listener_type, listener):
        """Adds a listener"""
        if listener_type in self.listeners.iterkeys():
            if not listener in self.listeners[listener_type]:
                self.listeners[listener_type].append(listener)            
        else:
            logger.warning("Listener type "
                                  "'{0}' not supported".format(listener_type))
    
    def removeListener(self, listener_type, listener):
        """Removes a listener"""
        if listener_type in self.listeners.iterkeys():
            self.listeners[listener_type].remove(listener)
        else:
            logger.warning("Listener type "
                                  "'{0}' not supported".format(listener_type))
            
    def mousePressed(self, evt):
        """Called when a mouse button is pressed"""
        for listeners in self.listeners["Mouse"]:
            listeners.mousePressed(evt)

    def mouseReleased(self, evt):
        """Called when a mouse button is released"""
        for listeners in self.listeners["Mouse"]:
            listeners.mouseReleased(evt)

    def mouseEntered(self, evt):
        """Called when a mouse enters a region"""
        for listeners in self.listeners["Mouse"]:
            listeners.mouseEntered(evt)

    def mouseExited(self, evt):
        """Called when a mouse exits a region"""
        for listeners in self.listeners["Mouse"]:
            listeners.mouseExited(evt)

    def mouseClicked(self, evt):
        """Called after a mouse button is pressed and released"""
        for listeners in self.listeners["Mouse"]:
            listeners.mouseClicked(evt)

    def mouseWheelMovedUp(self, evt):
        """Called when the mouse wheel has been moved up"""
        for listeners in self.listeners["Mouse"]:
            listeners.mouseWheelMovedUp(evt)

    def mouseWheelMovedDown(self, evt):
        """Called when the mouse wheel has been moved down"""
        for listener in self.listeners["Mouse"]:
            listener.mouseWheelMovedDown(evt)

    def mouseMoved(self, evt):
        """Called when when the mouse has been moved"""
        for listener in self.listeners["Mouse"]:
            listener.mouseMoved(evt)

    def mouseDragged(self, evt):
        """Called when dragging the mouse"""
        for listener in self.listeners["Mouse"]:
            listener.mouseDragged(evt)

    def keyPressed(self, evt):
        """Called when a key is being pressed"""
        for listener in self.listeners["Key"]:
            listener.keyPressed(evt)

    def keyReleased(self, evt):
        """Called when a key is being released"""
        for listener in self.listeners["Key"]:
            listener.keyReleased(evt)

    def onCommand(self, command):
        """Called when a command is executed"""
        for listener in self.listeners["Command"]:
            listener.onCommand(command)

    def onToolsClick(self):
        """Called when the tools button has been clicked"""
        for listener in self.listeners["ConsoleCommand"]:
            listener.onToolsClick()

    def onConsoleCommand(self, command):
        """Called when a console command is executed"""
        for listener in self.listeners["ConsoleCommand"]:
            listener.onConsoleCommand(command)

    def onWidgetAction(self, evt):
        """Called when a widget action is executed"""
        for listener in self.listeners["Widget"]:
            listener.onWidgetAction(evt)