def actionPerformed(self, e):
        bugs_tab = self.tabbed_panes[self.key].getComponentAt(1)
        tab_count = str(bugs_tab.getTabCount())

        request_tab = self.view.set_request_tab_pane(self.request_response)
        response_tab = self.view.set_response_tab_pane(self.request_response)
        bugs_tabbed_pane = self.view.set_bugs_tabbed_pane(request_tab, response_tab)

        bugs_tab.add(tab_count, bugs_tabbed_pane)
        index = bugs_tab.indexOfTab(tab_count)
        panel_tab = JPanel(GridBagLayout())
        panel_tab.setOpaque(False)
        label_title = JLabel(tab_count)

        # Create a button to close tab
        button_close = JButton("x")
        button_close.setToolTipText("Close tab")
        button_close.setOpaque(False);
        button_close.setContentAreaFilled(False);
        button_close.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0))
        button_close.setPreferredSize(Dimension(18, 18))
        button_close.setMargin(Insets(0, 0, 0, 0))
        button_close.setForeground(Color.gray)

        panel_tab.add(label_title)
        panel_tab.add(button_close)

        bugs_tab.setTabComponentAt(index, panel_tab)

        button_close.addMouseListener(CloseTab(button_close, bugs_tab))
Beispiel #2
0
 def init(self):
     jbNew= JButton( LoadDefaultXmlThrottlesLayoutAction() )
     jbNew.setIcon( NamedIcon("resources/Throttles.gif","resources/Throttles.gif") )
     jbNew.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
     jbNew.setToolTipText( jbNew.getText() )
     jbNew.setText( None )
     self.add(jbNew)
Beispiel #3
0
class DCCThrottle(Jynstrument, PropertyChangeListener, AddressListener, jmri.ThrottleListener):
    #Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"
    
    def init(self):
        self.getContext().addPropertyChangeListener(self) #ThrottleFrame change
        self.addressPanel = self.getContext().getCurrentThrottleFrame().getAddressPanel()
        self.addressPanel.addAddressListener(self) # change of throttle in Current frame
        self.panelThrottle = self.getContext().getCurrentThrottleFrame().getAddressPanel().getThrottle() # the throttle
        self.label = JButton(ImageIcon(self.getFolder() + "/DCCThrottle.png","DCCThrottle")) #label
        self.label.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
        self.add(self.label)
        # create a dcc throttle and request one from the ThrottleManager
        self.masterThrottle = None
        if ( jmri.InstanceManager.throttleManagerInstance().requestThrottle(listenToDCCThrottle, self) == False):
            print "Couldn't request a throttle for "+locoAddress        
        # Advanced functions
        self.advFunctions = AdvFunctions()

    def quit(self):
        if (self.masterThrottle != None):
            self.masterThrottle.removePropertyChangeListener(self)
            self.masterThrottle = None
    self.panelThrottle = None
        self.advFunctions = None
        if (self.addressPanel != None):
            self.addressPanel.removeAddressListener(self)
            self.addressPanel = None            
        self.getContext().removePropertyChangeListener(self)               
Beispiel #4
0
 def init(self):
     jbNew = JButton( PaneOpsProgAction() )
     jbNew.setIcon( NamedIcon("resources/decoderpro.gif","resources/decoderpro.gif") )
     jbNew.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
     jbNew.setToolTipText( jbNew.getText() )
     jbNew.setText( None )
     self.add(jbNew)
Beispiel #5
0
def getScreenPanel():
    global mainScreen
    global scrPanel
    if not scrPanel:
        mainScreen = JButton()
        cursorImg = BufferedImage(16,16,BufferedImage.TYPE_INT_ARGB)
        blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(cursorImg, Point(0,0), "blank cursor")
        mainScreen.setCursor(blankCursor)
        mainScreen.setPreferredSize(
                Dimension(700, 700))
        image = BufferedImage(700, 700, BufferedImage.TYPE_INT_ARGB)
        g = image.createGraphics()
        g.setColor(Color.BLACK)
        g.fillRect(0, 0, 700, 700)
        g.setColor(Color.WHITE)
        g.setFont(Font("Serif", Font.BOLD, 20))
        g.drawString("Move your mouse here to controlfocused device.", 50, 30)
        mainScreenImg = image
        mainScreen.setIcon(swing.ImageIcon(image))

        mouseListener = ScrMouseListener()
        mainScreen.addMouseListener(mouseListener)
        mainScreen.addMouseMotionListener(mouseListener)
        mainScreen.addMouseWheelListener(mouseListener)

        mainScreen.setFocusable(True)
        keyListener = ScrKeyListener()
        mainScreen.addKeyListener(keyListener)


        scrPanel = JPanel()
        scrPanel.setLayout(BoxLayout(scrPanel, BoxLayout.Y_AXIS))
        scrPanel.add(mainScreen)
        scrPanel.setFocusable(True)
    return scrPanel
Beispiel #6
0
 def init(self):
     jbNew = JButton(PaneOpsProgAction())
     jbNew.setIcon(
         NamedIcon("resources/decoderpro.gif", "resources/decoderpro.gif"))
     jbNew.addMouseListener(
         self.getMouseListeners()
         [0])  # In order to get the popupmenu on the button too
     jbNew.setToolTipText(jbNew.getText())
     jbNew.setText(None)
     self.add(jbNew)
class TabComponentCloseableMixin(object):
    
    def __init__(self):
        self.listeners = EventListenerList()
        self.close_button = JButton(actionPerformed=self._clicked)
        self.close_button.setText(unichr(0x00d7))  # multiplication sign
        self.close_button.border = None
        self.close_button.contentAreaFilled = False
        self.close_button.addMouseListener(TabComponentCloseableMixin.EventListener(self))
        self.add(self.close_button)
        super(TabComponentCloseableMixin, self).__init__()
        
    def addCloseListener(self, listener):
        self.listeners.add(TabComponentCloseListener, listener)

    def removeCloseListener(self, listener):
        self.listeners.remove(TabComponentCloseListener, listener)

    def mouseEntered(self, event):
        self.close_button.foreground = Color.red

    def mouseExited(self, event):
        self.close_button.foreground = Color.black

    def _clicked(self, event):   
        event = TabComponentClosedEvent(self)
        for listener in self.listeners.getListeners(TabComponentCloseListener):
            listener.tabClose(event)

    class EventListener(MouseAdapter):

        def __init__(self, parent):
            self.parent = parent

        def mouseEntered(self, event):
            self.parent.mouseEntered(event)

        def mouseExited(self, event):
            self.parent.mouseExited(event)
Beispiel #8
0
class USBThrottle(Jynstrument, PropertyChangeListener, AddressListener):
    #Property listener part: USB value
    def propertyChange(self, event):
        # Customize bellow for throttles calls:
        if (event.propertyName == "Value"):  # USB
            if (event.oldValue.getController() == self.desiredController):
                component = event.oldValue.getComponent().toString()
                value = event.newValue
                # Uncomment bellow line to see component name and its value
                # print "Component",component,"value changed to",value
                try:
                    # Change current ThrottleFrame
                    if ((component == self.driver.componentNextThrottleFrame)
                            and
                        (value == self.driver.valueNextThrottleFrame)):  #NEXT
                        self.getContext().nextThrottleFrame()
                    if ((component
                         == self.driver.componentPreviousThrottleFrame) and
                        (value == self.driver.valuePreviousThrottleFrame)
                        ):  #PREVIOUS
                        self.getContext().previousThrottleFrame()
                    if ((component
                         == self.driver.componentNextRunningThrottleFrame) and
                        (value == self.driver.valueNextRunningThrottleFrame)
                        ):  #NEXT RUNNING
                        self.getContext().nextRunningThrottleFrame()
                    if ((component
                         == self.driver.componentPreviousRunningThrottleFrame)
                            and
                        (value == self.driver.valuePreviousRunningThrottleFrame
                         )):  #PREVIOUS RUNNING
                        self.getContext().previousRunningThrottleFrame()
                except AttributeError:
                    pass

                if (self.throttle == None):
                    try:
                        # Browse through roster
                        if ((component
                             == self.driver.componentNextRosterBrowse) and
                            (value == self.driver.valueNextRoster)):  #NEXT
                            selectedIndex = self.addressPanel.getRosterSelectedIndex(
                            )
                            self.addressPanel.setVisible(True)
                            self.addressPanel.setIcon(False)
                            self.addressPanel.setRosterSelectedIndex(
                                selectedIndex + 1)
                        if ((component
                             == self.driver.componentPreviousRosterBrowse) and
                            (value
                             == self.driver.valuePreviousRoster)):  #PREVIOUS
                            selectedIndex = self.addressPanel.getRosterSelectedIndex(
                            )
                            self.addressPanel.setVisible(True)
                            self.addressPanel.setIcon(False)
                            self.addressPanel.setRosterSelectedIndex(
                                selectedIndex - 1)
                    except AttributeError:
                        pass
                    try:
                        # Request a throttle
                        if ((component == self.driver.componentRosterSelect)
                                and (value == self.driver.valueRosterSelect)):
                            self.addressPanel.selectRosterEntry()
                    except AttributeError:
                        pass

                # From there; current throttle control, hence require a throttle
                if (self.throttle != None):
                    # Release current throttle
                    try:
                        if ((component == self.driver.componentThrottleRelease)
                                and
                            (value == self.driver.valueThrottleRelease)):
                            self.addressPanel.dispatchAddress()
                    except AttributeError:
                        pass

                    try:
                        # Speed - dynamic controler (joystick going back to neutral position)
                        if ((component == self.driver.componentSpeedIncrease)
                                or
                            (component == self.driver.componentSpeedDecrease)
                                or (component == self.driver.componentSpeed)):
                            if ((component
                                 == self.driver.componentSpeedIncrease) and
                                (value == self.driver.valueSpeedIncrease)):
                                self.speedAction.setSpeedIncrement(0.03)
                            if ((component
                                 == self.driver.componentSpeedDecrease) and
                                (value == self.driver.valueSpeedDecrease)):
                                self.speedAction.setSpeedIncrement(-0.03)
                            if (component == self.driver.componentSpeed):
                                try:
                                    self.vsd = valueSpeedDivider * self.driver.componentSpeedMultiplier
                                except AttributeError:
                                    self.vsd = valueSpeedDivider
                                self.speedAction.setSpeedIncrement(value /
                                                                   self.vsd)
                            if (abs(value) > self.driver.valueSpeedTrigger):
                                self.speedTimer.start()
                            else:
                                self.speedTimer.stop()
                    except AttributeError:
                        self.speedTimer.stop(
                        )  # just in case, stop it, really should never get there

                    try:
                        # Speed v2 - static controler (lever on RailDriver or AAR105)
                        if (component == self.driver.componentSpeedSet):
                            # negative is lever front, positive is lever back
                            # limit range to only positive side of lever
                            if (value < self.driver.valueSpeedSetMinValue):
                                value = self.driver.valueSpeedSetMinValue
                            if (value > self.driver.valueSpeedSetMaxValue):
                                value = self.driver.valueSpeedSetMaxValue
                            # convert fraction of input to speed step
                            self.throttle.setSpeedSetting(
                                (value - self.driver.valueSpeedSetMinValue) /
                                (self.driver.valueSpeedSetMaxValue -
                                 self.driver.valueSpeedSetMinValue))
                            print "Slider Speed:", self.controlPanel.getDisplaySlider(
                            )
                    except AttributeError:
                        pass
                    # Direction
                    try:
                        if ((component
                             == self.driver.componentDirectionForward) and
                            (value == self.driver.valueDirectionForward)):
                            self.throttle.setIsForward(True)
                        if ((component
                             == self.driver.componentDirectionBackward) and
                            (value == self.driver.valueDirectionBackward)):
                            self.throttle.setIsForward(False)
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentDirectionSwitch)
                                and
                            (value == self.driver.valueDirectionSwitch)):
                            self.throttle.setIsForward(
                                not self.throttle.getIsForward())
                    except AttributeError:
                        pass

                    # Speed presets
                    try:  # STOP
                        if ((component == self.driver.componentStopSpeed)
                                and (value == self.driver.valueStopSpeed)):
                            if (Calendar.getInstance().getTimeInMillis() -
                                    self.lastTimeStopButton < delay4doubleTap):
                                self.throttle.setSpeedSetting(
                                    EStopSpeed)  # EStop on double tap
                            else:
                                self.throttle.setSpeedSetting(speedStopSpeed)
                            self.lastTimeStopButton = Calendar.getInstance(
                            ).getTimeInMillis()
                    except AttributeError:
                        pass
                    try:  # EStop
                        if ((component == self.driver.componentEStopSpeed)
                                and (value == self.driver.valueEStopSpeed)):
                            self.throttle.setSpeedSetting(EStopSpeed)
                    except AttributeError:
                        pass
                    try:  # EStop
                        if ((component == self.driver.componentEStopSpeedBis)
                                and (value == self.driver.valueEStopSpeedBis)):
                            self.throttle.setSpeedSetting(EStopSpeed)
                    except AttributeError:
                        pass
                    try:  # SLOW
                        if ((component == self.driver.componentSlowSpeed)
                                and (value == self.driver.valueSlowSpeed)):
                            self.throttle.setSpeedSetting(speedSlowSpeed)
                    except AttributeError:
                        pass
                    try:  # CRUISE
                        if ((component == self.driver.componentCruiseSpeed)
                                and (value == self.driver.valueCruiseSpeed)):
                            if (Calendar.getInstance().getTimeInMillis() -
                                    self.lastTimeCruiseButton <
                                    delay4doubleTap):  # EStop on double tap
                                self.throttle.setSpeedSetting(
                                    speedMaxSpeed)  # Max speed on double tap
                            else:
                                self.throttle.setSpeedSetting(speedCruiseSpeed)
                            self.lastTimeCruiseButton = Calendar.getInstance(
                            ).getTimeInMillis()
                    except AttributeError:
                        pass
                    try:  # MAX
                        if ((component == self.driver.componentMaxSpeed)
                                and (value == self.driver.valueMaxSpeed)):
                            self.throttle.setSpeedSetting(speedMaxSpeed)
                    except AttributeError:
                        pass

                    # Functions
                    try:
                        if ((component == self.driver.componentF0)
                                and (value == self.driver.valueF0)):
                            self.throttle.setF0(not self.throttle.getF0())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(0))
                                and (component == self.driver.componentF0)
                                and (value == self.driver.valueF0Off)):
                            self.throttle.setF0(not self.throttle.getF0())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF1)
                                and (value == self.driver.valueF1)):
                            self.throttle.setF1(not self.throttle.getF1())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(1))
                                and (component == self.driver.componentF1)
                                and (value == self.driver.valueF1Off)):
                            self.throttle.setF1(not self.throttle.getF1())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF2)
                                and (value == self.driver.valueF2)):
                            self.throttle.setF2(not self.throttle.getF2())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(2))
                                and (component == self.driver.componentF2)
                                and (value == self.driver.valueF2Off)):
                            self.throttle.setF2(not self.throttle.getF2())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF3)
                                and (value == self.driver.valueF3)):
                            self.throttle.setF3(not self.throttle.getF3())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(3))
                                and (component == self.driver.componentF3)
                                and (value == self.driver.valueF3Off)):
                            self.throttle.setF3(not self.throttle.getF3())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF4)
                                and (value == self.driver.valueF4)):
                            self.throttle.setF4(not self.throttle.getF4())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(4))
                                and (component == self.driver.componentF4)
                                and (value == self.driver.valueF4Off)):
                            self.throttle.setF4(not self.throttle.getF4())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF5)
                                and (value == self.driver.valueF5)):
                            self.throttle.setF5(not self.throttle.getF5())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(5))
                                and (component == self.driver.componentF5)
                                and (value == self.driver.valueF5Off)):
                            self.throttle.setF5(not self.throttle.getF5())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF6)
                                and (value == self.driver.valueF6)):
                            self.throttle.setF6(not self.throttle.getF6())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(6))
                                and (component == self.driver.componentF6)
                                and (value == self.driver.valueF6Off)):
                            self.throttle.setF6(not self.throttle.getF6())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF7)
                                and (value == self.driver.valueF7)):
                            self.throttle.setF7(not self.throttle.getF7())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(7))
                                and (component == self.driver.componentF7)
                                and (value == self.driver.valueF7Off)):
                            self.throttle.setF7(not self.throttle.getF7())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF8)
                                and (value == self.driver.valueF8)):
                            self.throttle.setF8(not self.throttle.getF8())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(8))
                                and (component == self.driver.componentF8)
                                and (value == self.driver.valueF8Off)):
                            self.throttle.setF8(not self.throttle.getF8())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF9)
                                and (value == self.driver.valueF9)):
                            self.throttle.setF9(not self.throttle.getF9())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(9))
                                and (component == self.driver.componentF9)
                                and (value == self.driver.valueF9Off)):
                            self.throttle.setF9(not self.throttle.getF9())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF10)
                                and (value == self.driver.valueF10)):
                            self.throttle.setF10(not self.throttle.getF10())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(10))
                                and (component == self.driver.componentF10)
                                and (value == self.driver.valueF10Off)):
                            self.throttle.setF10(not self.throttle.getF10())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF11)
                                and (value == self.driver.valueF11)):
                            self.throttle.setF11(not self.throttle.getF11())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(11))
                                and (component == self.driver.componentF11)
                                and (value == self.driver.valueF11Off)):
                            self.throttle.setF11(not self.throttle.getF11())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF12)
                                and (value == self.driver.valueF12)):
                            self.throttle.setF12(not self.throttle.getF12())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(12))
                                and (component == self.driver.componentF12)
                                and (value == self.driver.valueF12Off)):
                            self.throttle.setF12(not self.throttle.getF12())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF13)
                                and (value == self.driver.valueF13)):
                            self.throttle.setF13(not self.throttle.getF13())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(13))
                                and (component == self.driver.componentF13)
                                and (value == self.driver.valueF13Off)):
                            self.throttle.setF13(not self.throttle.getF13())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF14)
                                and (value == self.driver.valueF14)):
                            self.throttle.setF14(not self.throttle.getF14())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(14))
                                and (component == self.driver.componentF14)
                                and (value == self.driver.valueF14Off)):
                            self.throttle.setF14(not self.throttle.getF14())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF15)
                                and (value == self.driver.valueF15)):
                            self.throttle.setF15(not self.throttle.getF15())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(15))
                                and (component == self.driver.componentF15)
                                and (value == self.driver.valueF15Off)):
                            self.throttle.setF15(not self.throttle.getF15())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF16)
                                and (value == self.driver.valueF16)):
                            self.throttle.setF16(not self.throttle.getF16())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(16))
                                and (component == self.driver.componentF16)
                                and (value == self.driver.valueF16Off)):
                            self.throttle.setF16(not self.throttle.getF16())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF17)
                                and (value == self.driver.valueF17)):
                            self.throttle.setF17(not self.throttle.getF17())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(17))
                                and (component == self.driver.componentF17)
                                and (value == self.driver.valueF17Off)):
                            self.throttle.setF17(not self.throttle.getF17())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF18)
                                and (value == self.driver.valueF18)):
                            self.throttle.setF18(not self.throttle.getF18())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(18))
                                and (component == self.driver.componentF18)
                                and (value == self.driver.valueF18Off)):
                            self.throttle.setF18(not self.throttle.getF18())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF19)
                                and (value == self.driver.valueF19)):
                            self.throttle.setF19(not self.throttle.getF19())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(19))
                                and (component == self.driver.componentF19)
                                and (value == self.driver.valueF19Off)):
                            self.throttle.setF19(not self.throttle.getF19())
                    except AttributeError:
                        pass

                    try:
                        if ((component == self.driver.componentF20)
                                and (value == self.driver.valueF20)):
                            self.throttle.setF20(not self.throttle.getF20())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(20))
                                and (component == self.driver.componentF20)
                                and (value == self.driver.valueF20Off)):
                            self.throttle.setF20(not self.throttle.getF20())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF21)
                                and (value == self.driver.valueF21)):
                            self.throttle.setF21(not self.throttle.getF21())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(21))
                                and (component == self.driver.componentF21)
                                and (value == self.driver.valueF21Off)):
                            self.throttle.setF21(not self.throttle.getF21())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF22)
                                and (value == self.driver.valueF22)):
                            self.throttle.setF22(not self.throttle.getF22())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(22))
                                and (component == self.driver.componentF22)
                                and (value == self.driver.valueF22Off)):
                            self.throttle.setF22(not self.throttle.getF22())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF23)
                                and (value == self.driver.valueF23)):
                            self.throttle.setF23(not self.throttle.getF23())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(23))
                                and (component == self.driver.componentF23)
                                and (value == self.driver.valueF23Off)):
                            self.throttle.setF23(not self.throttle.getF23())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF24)
                                and (value == self.driver.valueF24)):
                            self.throttle.setF24(not self.throttle.getF24())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(24))
                                and (component == self.driver.componentF24)
                                and (value == self.driver.valueF24Off)):
                            self.throttle.setF24(not self.throttle.getF24())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF25)
                                and (value == self.driver.valueF25)):
                            self.throttle.setF25(not self.throttle.getF25())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(25))
                                and (component == self.driver.componentF25)
                                and (value == self.driver.valueF25Off)):
                            self.throttle.setF25(not self.throttle.getF25())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF26)
                                and (value == self.driver.valueF26)):
                            self.throttle.setF26(not self.throttle.getF26())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(26))
                                and (component == self.driver.componentF26)
                                and (value == self.driver.valueF26Off)):
                            self.throttle.setF26(not self.throttle.getF26())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF27)
                                and (value == self.driver.valueF27)):
                            self.throttle.setF27(not self.throttle.getF27())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(27))
                                and (component == self.driver.componentF27)
                                and (value == self.driver.valueF27Off)):
                            self.throttle.setF27(not self.throttle.getF27())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF28)
                                and (value == self.driver.valueF28)):
                            self.throttle.setF28(not self.throttle.getF28())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(28))
                                and (component == self.driver.componentF28)
                                and (value == self.driver.valueF28Off)):
                            self.throttle.setF28(not self.throttle.getF28())
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF29)
                                and (value == self.driver.valueF29)):
                            self.throttle.setF29(not self.throttle.getF29())
                        if ((self.roster != None)
                                and (not self.roster.getFunctionLockable(29))
                                and (component == self.driver.componentF29)
                                and (value == self.driver.valueF29Off)):
                            self.throttle.setF29(not self.throttle.getF29())
                    except AttributeError:
                        pass

        # Nothing to customize bellow this point
        if (event.propertyName == "ThrottleFrame"
            ):  # Current throttle frame changed
            self.speedTimer.stop()
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.throttle = self.addressPanel.getThrottle()
            self.roster = self.addressPanel.getRosterEntry()
            self.speedAction.setThrottle(self.throttle)
            event.newValue.getAddressPanel().addAddressListener(self)

#Jynstrument main and mandatory methods

    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"

    def init(self):
        self.getContext().addPropertyChangeListener(
            self)  #ThrottleFrame change
        self.getContext().getCurrentThrottleFrame().getAddressPanel(
        ).addAddressListener(self)  # change of throttle in Current frame
        self.addressPanel = self.getContext().getCurrentThrottleFrame(
        ).getAddressPanel()
        self.throttle = self.addressPanel.getThrottle()  # the throttle
        self.roster = self.addressPanel.getRosterEntry()  # roster entry if any
        self.speedAction = SpeedAction()  #Speed increase thread
        self.speedAction.setThrottle(self.throttle)
        self.speedTimer = Timer(
            valueSpeedTimerRepeat, self.speedAction
        )  # Very important to use swing Timer object (see Swing and multithreading doc)
        self.speedTimer.setRepeats(True)
        self.label = JButton(
            ImageIcon(self.getFolder() + "/USBControl.png",
                      "USBThrottle"))  #label
        self.label.addMouseListener(
            self.getMouseListeners()
            [0])  # In order to get the popupmenu on the button too
        self.add(self.label)
        self.model = jmri.jmrix.jinput.TreeModel.instance()  # USB
        self.desiredController = None
        self.ctrlMenuItem = []
        self.USBDriver = None
        self.driver = None
        mi = JCheckBoxMenuItem("None")
        self.getPopUpMenu().add(mi)
        mi.addItemListener(ControllerItemListener(None, self))
        self.ctrlMenuItem.append(mi)
        for ctrl in self.model.controllers():
            mi = JCheckBoxMenuItem(ctrl.getName())
            self.getPopUpMenu().add(mi)
            mi.addItemListener(ControllerItemListener(ctrl, self))
            self.ctrlMenuItem.append(mi)
        if (len(self.ctrlMenuItem) == 0):
            print "No matching USB device found"
        else:
            self.ctrlMenuItem[0].setSelected(
                True)  # by default connect to the first one
        self.model.addPropertyChangeListener(self)
        self.lastTimeStopButton = Calendar.getInstance().getTimeInMillis()
        self.lastTimeCruiseButton = Calendar.getInstance().getTimeInMillis()

# On quit clean up resources

    def quit(self):
        self.speedTimer.stop()
        for mi in self.ctrlMenuItem:
            self.getPopUpMenu().remove(mi)
        self.ctrlMenuItem = None
        self.speedAction = None
        self.speedTimer = None
        self.throttle = None
        self.addressPanel = None
        self.driver = None
        self.USBDriver = None
        self.getContext().removePropertyChangeListener(self)
        self.model.removePropertyChangeListener(self)
        self.getContext().getCurrentThrottleFrame().getAddressPanel(
        ).removeAddressListener(self)

# Menu entry changed for Current controller and update driver

    def setSelectedController(self, ctrl, item):
        for mi in self.ctrlMenuItem:
            if (mi != item):  # Force deselection of other ones
                mi.setSelected(False)
        self.desiredController = ctrl
        if (ctrl != None):
            sys.path.append(self.getFolder())  # Load a driver
            try:
                del self.driver
                del self.USBDriver
                dd = ctrl.getName()
                dd = dd.replace(" ", "")
                dd = dd.replace(".", "")
                dd = dd.replace("(", "")
                dd = dd.replace(")", "")
                dd = dd.replace("{", "")
                dd = dd.replace("}", "")
                dd = dd.replace("[", "")
                dd = dd.replace("]", "")
                self.USBDriver = __import__(dd)
            except ImportError:  # On error load a default one
                print "Driver \"" + dd + "\" not found in \"" + self.getFolder(
                ) + "\", loading default one"
                self.USBDriver = __import__("Default")
            reload(self.USBDriver)
            sys.path.remove(self.getFolder())
            self.driver = self.USBDriver.USBDriver()

    def setXml(self, elt):
        if (elt.getChildren("USBThrottle") == None):
            return
        ctrl = elt.getChildren("USBThrottle")[0].getAttributeValue(
            "DesiredController")
        if (ctrl == None):
            return
        for mi in self.ctrlMenuItem:
            if (mi.getText() == ctrl):
                mi.setSelected(True)
                break

    def getXml(self):
        elt = Element("USBThrottle")
        for mi in self.ctrlMenuItem:
            if (mi.isSelected()):
                elt.setAttribute("DesiredController", mi.getText())
                break
        return elt

#AddressListener part: to listen for address changes in address panel (release, acquired)

    def notifyAddressChosen(self, address):
        pass

    def notifyAddressThrottleFound(self, throttle):
        self.speedTimer.stop()
        self.throttle = throttle
        self.speedAction.setThrottle(self.throttle)

    def notifyAddressReleased(self, address):
        self.speedTimer.stop()
        self.throttle = None
        self.speedAction.setThrottle(self.throttle)

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)
Beispiel #9
0
class WiimoteThrottle2(Jynstrument, PropertyChangeListener, AddressListener,
                       WiiDeviceDiscoveryListener, WiiRemoteListener,
                       Runnable):
    #Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"

    def init(self):
        self.getContext().addPropertyChangeListener(
            self)  #ThrottleFrame change
        self.addressPanel = self.getContext().getCurrentThrottleFrame(
        ).getAddressPanel()
        self.addressPanel.addAddressListener(
            self)  # change of throttle in Current frame
        self.throttle = self.getContext().getCurrentThrottleFrame(
        ).getAddressPanel().getThrottle()  # the throttle
        self.speedAction = SpeedAction()  #Speed increase thread
        self.speedAction.setThrottle(self.throttle)
        self.speedTimer = Timer(
            valueSpeedTimerRepeat, self.speedAction
        )  # Very important to use swing Timer object (see Swing and multithreading doc)
        self.speedTimer.setRepeats(True)
        self.label = JButton(
            ImageIcon(self.getFolder() + "/WiimoteThrottle2.png",
                      "WiiMote"))  #label
        self.label.addMouseListener(
            self.getMouseListeners()
            [0])  # In order to get the popupmenu on the button too
        self.add(self.label)
        self.lastTimeButton1 = Calendar.getInstance().getTimeInMillis()
        self.lastTimeButton2 = Calendar.getInstance().getTimeInMillis()
        self.advFunctions = AdvFunctions()
        self.lastTimeEStop = Calendar.getInstance().getTimeInMillis()
        self.wiiDevice = None
        self.sync = thread.allocate_lock()  # A lock protecting bellow self.evt
        self.evt = None
        java.lang.System.setProperty("bluecove.jsr82.psm_minimum_off", "true")
        # Required for Bluecove + WiiRemoteJ
        WiiRemoteJ.findRemotes(self, 1)  # Search for 1 Wiimote, and call back

    def quit(self):
        self.speedTimer.stop()
        WiiRemoteJ.stopFind()
        if ((self.wiiDevice != None) and (self.wiiDevice.isConnected())):
            self.wiiDevice.removeWiiRemoteListener(self)
            self.wiiDevice.disconnect()
        self.wiiDevice = None
        self.speedAction = None
        self.speedTimer = None
        self.throttle = None
        self.advFunctions = None
        self.getContext().removePropertyChangeListener(self)
        self.addressPanel.removeAddressListener(self)
        self.addressPanel = None

    #Wiimote discoverer events

    def findFinished(self, nb):
        print "Search finished, found ", nb, " wiimotes"

    def wiiDeviceDiscovered(self, evt):
        print "Found a Wiimote, number: ", evt.getNumber()
        self.wiiDevice = evt.getWiiDevice()
        ledLights = [False, False, False, False]
        ledLights[evt.getNumber() % 4] = True
        self.wiiDevice.setLEDLights(ledLights)
        self.wiiDevice.addWiiRemoteListener(self)

    #Wiimote events
    def buttonInputReceived(self, evt):
        #        print("Wiimote Button event: ", evt)
        self.sync.acquire()
        self.evt = evt
        self.sync.release()
        SwingUtilities.invokeLater(
            self
        )  # Delegate processing to Swing thread (when we are here, we're in the WiiRemoteJ driver thread)

    def run(self):
        self.sync.acquire()
        evt = self.evt
        self.sync.release()
        if (self.speedTimer != None):
            self.speedTimer.stop()  # In any case
        # ThrottleFrames
        if (evt.wasReleased(WRButtonEvent.RIGHT)):  # NEXT
            self.getContext().nextThrottleFrame()
        if (evt.wasReleased(WRButtonEvent.LEFT)):  # PREVIOUS
            self.getContext().previousThrottleFrame()
        if (evt.wasReleased(WRButtonEvent.UP)):  # NEXT RUNNING
            self.getContext().nextRunningThrottleFrame()
        if (evt.wasReleased(WRButtonEvent.DOWN)):  # PREVIOUS RUNNING
            self.getContext().previousRunningThrottleFrame()
        # No throttle assigned to current frame, browse through roster
        if (self.throttle == None):
            if (evt.wasReleased(
                    WRButtonEvent.HOME)):  # Assign selected roster entry
                self.addressPanel.selectRosterEntry()
                return
            if (evt.wasReleased(WRButtonEvent.PLUS)):  # Next roster entry
                selectedIndex = self.addressPanel.getRosterSelectedIndex()
                self.addressPanel.setIcon(False)
                self.addressPanel.setVisible(True)
                self.addressPanel.setRosterSelectedIndex(selectedIndex + 1)
                return
            if (evt.wasReleased(WRButtonEvent.MINUS)):  # Previous roster entry
                selectedIndex = self.addressPanel.getRosterSelectedIndex()
                self.addressPanel.setIcon(False)
                self.addressPanel.setVisible(True)
                self.addressPanel.setRosterSelectedIndex(selectedIndex - 1)
                return
        # Throttle assigned to current frame, control it
        if (self.throttle != None):
            # Speed control
            if (evt.isPressed(WRButtonEvent.B)):  # SPEED - increment
                self.speedAction.setSpeedIncrement(valueSpeedIncrement)
                self.speedTimer.start()
            if (evt.isPressed(WRButtonEvent.A)):  # SPEED - decrement
                self.speedAction.setSpeedIncrement(-valueSpeedIncrement)
                self.speedTimer.start()
            # EStop
            if (evt.isPressed(WRButtonEvent.PLUS
                              | WRButtonEvent.MINUS)):  # estop = + & -
                self.throttle.setSpeedSetting(speedEStopSpeed)
                self.lastTimeEStop = Calendar.getInstance().getTimeInMillis(
                )  # To cancel next inputs
                self.wiiDevice.vibrateFor(750)
            # Directions
            if (evt.wasReleased(WRButtonEvent.PLUS)):  # FORWARD
                self.throttle.setIsForward(True)
            if (evt.wasReleased(WRButtonEvent.MINUS)):  # BACKWARD
                self.throttle.setIsForward(False)
            # Home : F0
            if (evt.wasReleased(WRButtonEvent.HOME)):  # LIGHTS
                if not ((self.addressPanel.getRosterEntry() != None) and
                        (self.advFunctions.call(
                            self.addressPanel.getRosterEntry(), "0", False,
                            self.throttle) != None)):
                    self.throttle.setF0(not self.throttle.getF0())
            # Wiimote 1 & 2 buttons
            if (evt.isPressed(WRButtonEvent.ONE)):
                if not ((self.addressPanel.getRosterEntry() != None) and
                        (self.advFunctions.call(
                            self.addressPanel.getRosterEntry(), "1", True,
                            self.throttle) != None)):
                    pass  # default F1 not momentary (switch only on Release, do nothing here)
            if (evt.wasReleased(WRButtonEvent.ONE)):
                if not ((self.addressPanel.getRosterEntry() != None) and
                        (self.advFunctions.call(
                            self.addressPanel.getRosterEntry(), "1", False,
                            self.throttle) != None)):
                    self.throttle.setF1(
                        not self.throttle.getF1())  # default F1 not momentary
            if (evt.isPressed(WRButtonEvent.TWO)):
                if not ((self.addressPanel.getRosterEntry() != None) and
                        (self.advFunctions.call(
                            self.addressPanel.getRosterEntry(), "2", True,
                            self.throttle) != None)):
                    self.throttle.setF2(True)  # default F2 momentary
            if (evt.wasReleased(WRButtonEvent.TWO)):
                if not ((self.addressPanel.getRosterEntry() != None) and
                        (self.advFunctions.call(
                            self.addressPanel.getRosterEntry(), "2", False,
                            self.throttle) != None)):
                    self.throttle.setF2(False)

    def disconnected(self):
        self.wiiDevice = None
        print("Lost wiimote")

    def accelerationInputReceived(self, evt):
        pass

    def combinedInputReceived(self, evt):
        pass

    def extensionConnected(self, extension):
        pass

    def extensionDisconnected(self, extension):
        pass

    def extensionInputReceived(self, evt):
        pass

    def extensionPartiallyInserted(self):
        pass

    def extensionUnknown(self):
        pass

    def IRInputReceived(self, evt):
        pass

    def statusReported(self, evt):
        print("Wiimote status reported: ", evt)

#Property listener part

    def propertyChange(self, event):
        self.speedTimer.stop()
        if (event.propertyName == "ThrottleFrame"
            ):  # Current throttle frame changed
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.throttle = self.addressPanel.getThrottle()
            self.speedAction.setThrottle(self.throttle)
            self.addressPanel.addAddressListener(self)

#AddressListener part: to listen for address changes in address panel (release, acquired)

    def notifyAddressChosen(self, address):
        pass

    def notifyAddressThrottleFound(self, throttle):
        self.speedTimer.stop()
        self.throttle = throttle
        self.speedAction.setThrottle(self.throttle)

    def notifyAddressReleased(self, address):
        self.speedTimer.stop()
        self.throttle = None
        self.speedAction.setThrottle(self.throttle)

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)
Beispiel #10
0
class USBThrottle(Jynstrument, PropertyChangeListener, AddressListener):
#Property listener part: USB value
    def propertyChange(self, event):
        # Customize bellow for throttles calls:
        if (event.propertyName == "Value") :  # USB
            if (event.oldValue.getController() == self.desiredController ) :
                component = event.oldValue.getComponent().toString()
                value = event.newValue
                # Uncomment bellow line to see component name and its value
                # print "Component",component,"value changed to",value
                try:
                    # Change current ThrottleFrame
                    if ((component == self.driver.componentNextThrottleFrame) and (value == self.driver.valueNextThrottleFrame)) : #NEXT
                        self.getContext().nextThrottleFrame()
                    if  ((component == self.driver.componentPreviousThrottleFrame) and (value == self.driver.valuePreviousThrottleFrame)) : #PREVIOUS
                        self.getContext().previousThrottleFrame()
                    if ((component == self.driver.componentNextRunningThrottleFrame) and (value == self.driver.valueNextRunningThrottleFrame)) : #NEXT RUNNING
                        self.getContext().nextRunningThrottleFrame()
                    if  ((component == self.driver.componentPreviousRunningThrottleFrame) and (value == self.driver.valuePreviousRunningThrottleFrame)) : #PREVIOUS RUNNING
                        self.getContext().previousRunningThrottleFrame()  
                except AttributeError:
                    pass
                
                if (self.throttle == None) :
                    try:
                        # Browse through roster
                        if ((component == self.driver.componentNextRosterBrowse) and (value == self.driver.valueNextRoster)): #NEXT
                            selectedIndex = self.addressPanel.getRosterSelectedIndex()
                            self.addressPanel.setVisible(True)
                            self.addressPanel.setIcon(False)
                            self.addressPanel.setRosterSelectedIndex(selectedIndex + 1)
                        if ((component == self.driver.componentPreviousRosterBrowse) and (value == self.driver.valuePreviousRoster)) : #PREVIOUS
                            selectedIndex = self.addressPanel.getRosterSelectedIndex()
                            self.addressPanel.setVisible(True)
                            self.addressPanel.setIcon(False)                            
                            self.addressPanel.setRosterSelectedIndex(selectedIndex - 1)
                    except AttributeError:
                        pass
                    try:
                        # Request a throttle
                        if ((component == self.driver.componentRosterSelect) and (value == self.driver.valueRosterSelect)):
                            self.addressPanel.selectRosterEntry()
                    except AttributeError:
                        pass
                        
                # From there; current throttle control, hence require a throttle
                if (self.throttle != None) :
                    # Release current throttle
                    try:
                        if ((component == self.driver.componentThrottleRelease) and (value == self.driver.valueThrottleRelease)):
                            self.addressPanel.dispatchAddress()
                    except AttributeError:
                        pass
                    
                    try:
                        # Speed - dynamic controler (joystick going back to neutral position)
                        if ((component == self.driver.componentSpeedIncrease) or (component == self.driver.componentSpeedDecrease) or (component == self.driver.componentSpeed)):
                            if ((component == self.driver.componentSpeedIncrease) and (value == self.driver.valueSpeedIncrease)) :
                                self.speedAction.setSpeedIncrement( 0.03 )
                            if ((component == self.driver.componentSpeedDecrease) and (value == self.driver.valueSpeedDecrease)) :
                                self.speedAction.setSpeedIncrement( -0.03 )
                            if (component == self.driver.componentSpeed) :
                                try:
                                    self.vsd = valueSpeedDivider * self.driver.componentSpeedMultiplier
                                except AttributeError:
                                    self.vsd = valueSpeedDivider
                                self.speedAction.setSpeedIncrement(value / self.vsd)
                            if ( abs(value) > self.driver.valueSpeedTrigger ) :
                                self.speedTimer.start()
                            else :
                                self.speedTimer.stop()
                    except AttributeError:
                        self.speedTimer.stop() # just in case, stop it, really should never get there
                    
                    try:
                        # Speed v2 - static controler (lever on RailDriver or AAR105)
                        if (component == self.driver.componentSpeedSet):
                            # negative is lever front, positive is lever back
                            # limit range to only positive side of lever
                            if (value < self.driver.valueSpeedSetMinValue) : value = self.driver.valueSpeedSetMinValue
                            if (value > self.driver.valueSpeedSetMaxValue) : value = self.driver.valueSpeedSetMaxValue
                            # convert fraction of input to speed step
                            self.throttle.setSpeedSetting((value-self.driver.valueSpeedSetMinValue)/(self.driver.valueSpeedSetMaxValue-self.driver.valueSpeedSetMinValue))
                            print "Slider Speed:", self.controlPanel.getDisplaySlider()
                    except AttributeError:
                        pass
                    # Direction
                    try:
                        if ((component == self.driver.componentDirectionForward) and (value == self.driver.valueDirectionForward)) :
                            self.throttle.setIsForward(True)
                        if ((component == self.driver.componentDirectionBackward) and (value == self.driver.valueDirectionBackward)) :
                            self.throttle.setIsForward(False)
                    except AttributeError:
                        pass                    
                    try:                    
                        if ((component == self.driver.componentDirectionSwitch) and (value == self.driver.valueDirectionSwitch)) :
                            self.throttle.setIsForward(not self.throttle.getIsForward())
                    except AttributeError:
                        pass
                    
                    # Speed presets
                    try:  # STOP
                        if ((component == self.driver.componentStopSpeed) and (value == self.driver.valueStopSpeed)) :
                            if ( Calendar.getInstance().getTimeInMillis() - self.lastTimeStopButton < delay4doubleTap ) : 
                                self.throttle.setSpeedSetting(EStopSpeed) # EStop on double tap
                            else:
                                self.throttle.setSpeedSetting(speedStopSpeed)
                            self.lastTimeStopButton = Calendar.getInstance().getTimeInMillis()
                    except AttributeError:
                        pass
                    try:   # EStop
                        if ((component == self.driver.componentEStopSpeed) and (value == self.driver.valueEStopSpeed)):
                            self.throttle.setSpeedSetting(EStopSpeed)
                    except AttributeError:
                        pass
                    try:   # EStop
                        if ((component == self.driver.componentEStopSpeedBis) and (value == self.driver.valueEStopSpeedBis)):
                            self.throttle.setSpeedSetting(EStopSpeed)
                    except AttributeError:
                        pass
                    try:   # SLOW
                        if ((component == self.driver.componentSlowSpeed) and (value == self.driver.valueSlowSpeed)) :
                            self.throttle.setSpeedSetting(speedSlowSpeed)
                    except AttributeError:
                        pass
                    try:   # CRUISE
                        if ((component == self.driver.componentCruiseSpeed) and (value == self.driver.valueCruiseSpeed)) :
                            if ( Calendar.getInstance().getTimeInMillis() - self.lastTimeCruiseButton < delay4doubleTap ) : # EStop on double tap
                                self.throttle.setSpeedSetting(speedMaxSpeed) # Max speed on double tap
                            else:
                                self.throttle.setSpeedSetting(speedCruiseSpeed)
                            self.lastTimeCruiseButton = Calendar.getInstance().getTimeInMillis()
                    except AttributeError:
                        pass
                    try:   # MAX
                        if ((component == self.driver.componentMaxSpeed) and (value == self.driver.valueMaxSpeed)) :
                            self.throttle.setSpeedSetting(speedMaxSpeed)
                    except AttributeError:
                        pass
                        
                    # Functions
                    try:
                        if ((component == self.driver.componentF0) and (value == self.driver.valueF0)) :
                            self.throttle.setF0( not self.throttle.getF0() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(0)) and (component == self.driver.componentF0) and (value == self.driver.valueF0Off)) :
                            self.throttle.setF0( not self.throttle.getF0() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF1) and (value == self.driver.valueF1)) :
                            self.throttle.setF1( not self.throttle.getF1() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(1)) and (component == self.driver.componentF1) and (value == self.driver.valueF1Off)) :
                            self.throttle.setF1( not self.throttle.getF1() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF2) and (value == self.driver.valueF2)) :
                            self.throttle.setF2( not self.throttle.getF2() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(2)) and (component == self.driver.componentF2) and (value == self.driver.valueF2Off)) :
                            self.throttle.setF2( not self.throttle.getF2() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF3) and (value == self.driver.valueF3)) :
                            self.throttle.setF3( not self.throttle.getF3() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(3)) and (component == self.driver.componentF3) and (value == self.driver.valueF3Off)) :
                            self.throttle.setF3( not self.throttle.getF3() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF4) and (value == self.driver.valueF4)) :
                            self.throttle.setF4( not self.throttle.getF4() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(4)) and (component == self.driver.componentF4) and (value == self.driver.valueF4Off)) :
                            self.throttle.setF4( not self.throttle.getF4() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF5) and (value == self.driver.valueF5)) :
                            self.throttle.setF5( not self.throttle.getF5() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(5)) and (component == self.driver.componentF5) and (value == self.driver.valueF5Off)) :
                            self.throttle.setF5( not self.throttle.getF5() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF6) and (value == self.driver.valueF6)) :
                            self.throttle.setF6( not self.throttle.getF6() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(6)) and (component == self.driver.componentF6) and (value == self.driver.valueF6Off)) :
                            self.throttle.setF6( not self.throttle.getF6() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF7) and (value == self.driver.valueF7)) :
                            self.throttle.setF7( not self.throttle.getF7() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(7)) and (component == self.driver.componentF7) and (value == self.driver.valueF7Off)) :
                            self.throttle.setF7( not self.throttle.getF7() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF8) and (value == self.driver.valueF8)) :
                            self.throttle.setF8( not self.throttle.getF8() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(8)) and (component == self.driver.componentF8) and (value == self.driver.valueF8Off)) :
                            self.throttle.setF8( not self.throttle.getF8() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF9) and (value == self.driver.valueF9)) :
                            self.throttle.setF9( not self.throttle.getF9() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(9)) and (component == self.driver.componentF9) and (value == self.driver.valueF9Off)) :
                            self.throttle.setF9( not self.throttle.getF9() )
                    except AttributeError:
                        pass  
                    try:
                        if ((component == self.driver.componentF10) and (value == self.driver.valueF10)) :
                            self.throttle.setF10( not self.throttle.getF10() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(10)) and (component == self.driver.componentF10) and (value == self.driver.valueF10Off)) :
                            self.throttle.setF10( not self.throttle.getF10() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF11) and (value == self.driver.valueF11)) :
                            self.throttle.setF11( not self.throttle.getF11() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(11)) and (component == self.driver.componentF11) and (value == self.driver.valueF11Off)) :
                            self.throttle.setF11( not self.throttle.getF11() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF12) and (value == self.driver.valueF12)) :
                            self.throttle.setF12( not self.throttle.getF12() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(12)) and (component == self.driver.componentF12) and (value == self.driver.valueF12Off)) :
                            self.throttle.setF12( not self.throttle.getF12() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF13) and (value == self.driver.valueF13)) :
                            self.throttle.setF13( not self.throttle.getF13() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(13)) and (component == self.driver.componentF13) and (value == self.driver.valueF13Off)) :
                            self.throttle.setF13( not self.throttle.getF13() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF14) and (value == self.driver.valueF14)) :
                            self.throttle.setF14( not self.throttle.getF14() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(14)) and (component == self.driver.componentF14) and (value == self.driver.valueF14Off)) :
                            self.throttle.setF14( not self.throttle.getF14() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF15) and (value == self.driver.valueF15)) :
                            self.throttle.setF15( not self.throttle.getF15() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(15)) and (component == self.driver.componentF15) and (value == self.driver.valueF15Off)) :
                            self.throttle.setF15( not self.throttle.getF15() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF16) and (value == self.driver.valueF16)) :
                            self.throttle.setF16( not self.throttle.getF16() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(16)) and (component == self.driver.componentF16) and (value == self.driver.valueF16Off)) :
                            self.throttle.setF16( not self.throttle.getF16() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF17) and (value == self.driver.valueF17)) :
                            self.throttle.setF17( not self.throttle.getF17() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(17)) and (component == self.driver.componentF17) and (value == self.driver.valueF17Off)) :
                            self.throttle.setF17( not self.throttle.getF17() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF18) and (value == self.driver.valueF18)) :
                            self.throttle.setF18( not self.throttle.getF18() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(18)) and (component == self.driver.componentF18) and (value == self.driver.valueF18Off)) :
                            self.throttle.setF18( not self.throttle.getF18() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF19) and (value == self.driver.valueF19)) :
                            self.throttle.setF19( not self.throttle.getF19() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(19)) and (component == self.driver.componentF19) and (value == self.driver.valueF19Off)) :
                            self.throttle.setF19( not self.throttle.getF19() )
                    except AttributeError:
                        pass   
                    
                    try:
                        if ((component == self.driver.componentF20) and (value == self.driver.valueF20)) :
                            self.throttle.setF20( not self.throttle.getF20() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(20)) and (component == self.driver.componentF20) and (value == self.driver.valueF20Off)) :
                            self.throttle.setF20( not self.throttle.getF20() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF21) and (value == self.driver.valueF21)) :
                            self.throttle.setF21( not self.throttle.getF21() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(21)) and (component == self.driver.componentF21) and (value == self.driver.valueF21Off)) :
                            self.throttle.setF21( not self.throttle.getF21() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF22) and (value == self.driver.valueF22)) :
                            self.throttle.setF22( not self.throttle.getF22() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(22)) and (component == self.driver.componentF22) and (value == self.driver.valueF22Off)) :
                            self.throttle.setF22( not self.throttle.getF22() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF23) and (value == self.driver.valueF23)) :
                            self.throttle.setF23( not self.throttle.getF23() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(23)) and (component == self.driver.componentF23) and (value == self.driver.valueF23Off)) :
                            self.throttle.setF23( not self.throttle.getF23() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF24) and (value == self.driver.valueF24)) :
                            self.throttle.setF24( not self.throttle.getF24() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(24)) and (component == self.driver.componentF24) and (value == self.driver.valueF24Off)) :
                            self.throttle.setF24( not self.throttle.getF24() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF25) and (value == self.driver.valueF25)) :
                            self.throttle.setF25( not self.throttle.getF25() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(25)) and (component == self.driver.componentF25) and (value == self.driver.valueF25Off)) :
                            self.throttle.setF25( not self.throttle.getF25() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF26) and (value == self.driver.valueF26)) :
                            self.throttle.setF26( not self.throttle.getF26() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(26)) and (component == self.driver.componentF26) and (value == self.driver.valueF26Off)) :
                            self.throttle.setF26( not self.throttle.getF26() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF27) and (value == self.driver.valueF27)) :
                            self.throttle.setF27( not self.throttle.getF27() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(27)) and (component == self.driver.componentF27) and (value == self.driver.valueF27Off)) :
                            self.throttle.setF27( not self.throttle.getF27() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF28) and (value == self.driver.valueF28)) :
                            self.throttle.setF28( not self.throttle.getF28() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(28)) and (component == self.driver.componentF28) and (value == self.driver.valueF28Off)) :
                            self.throttle.setF28( not self.throttle.getF28() )
                    except AttributeError:
                        pass
                    try:
                        if ((component == self.driver.componentF29) and (value == self.driver.valueF29)) :
                            self.throttle.setF29( not self.throttle.getF29() )
                        if ((self.roster != None) and (not self.roster.getFunctionLockable(29)) and (component == self.driver.componentF29) and (value == self.driver.valueF29Off)) :
                            self.throttle.setF29( not self.throttle.getF29() )
                    except AttributeError:
                        pass
                        
        # Nothing to customize bellow this point
        if (event.propertyName == "ThrottleFrame") :  # Current throttle frame changed
            self.speedTimer.stop()
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.throttle = self.addressPanel.getThrottle()
            self.roster = self.addressPanel.getRosterEntry()
            self.speedAction.setThrottle( self.throttle )
            event.newValue.getAddressPanel().addAddressListener(self)

#Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"
    
    def init(self):
        self.getContext().addPropertyChangeListener(self) #ThrottleFrame change
        self.getContext().getCurrentThrottleFrame().getAddressPanel().addAddressListener(self) # change of throttle in Current frame
        self.addressPanel = self.getContext().getCurrentThrottleFrame().getAddressPanel()
        self.throttle = self.addressPanel.getThrottle() # the throttle
        self.roster = self.addressPanel.getRosterEntry() # roster entry if any
        self.speedAction =  SpeedAction()  #Speed increase thread
        self.speedAction.setThrottle( self.throttle )
        self.speedTimer = Timer(valueSpeedTimerRepeat, self.speedAction ) # Very important to use swing Timer object (see Swing and multithreading doc)
        self.speedTimer.setRepeats(True)
        self.label = JButton(ImageIcon(self.getFolder() + "/USBControl.png","USBThrottle")) #label
        self.label.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
        self.add(self.label)
        self.model = jmri.jmrix.jinput.TreeModel.instance() # USB
        self.desiredController = None
        self.ctrlMenuItem = []
        self.USBDriver = None
        self.driver = None
        mi = JCheckBoxMenuItem ("None")
        self.getPopUpMenu().add( mi )
        mi.addItemListener( ControllerItemListener(None, self) )
        self.ctrlMenuItem.append(mi)
        for ctrl in self.model.controllers(): 
            mi = JCheckBoxMenuItem (ctrl.getName())
            self.getPopUpMenu().add( mi )
            mi.addItemListener( ControllerItemListener(ctrl, self) )
            self.ctrlMenuItem.append(mi)
        if ( len(self.ctrlMenuItem) == 0 ):
            print "No matching USB device found"
        else:
            self.ctrlMenuItem[0].setSelected(True)  # by default connect to the first one
        self.model.addPropertyChangeListener(self)
        self.lastTimeStopButton = Calendar.getInstance().getTimeInMillis()
        self.lastTimeCruiseButton = Calendar.getInstance().getTimeInMillis()

# On quit clean up resources       
    def quit(self):
        self.speedTimer.stop()
        for mi in self.ctrlMenuItem :
            self.getPopUpMenu().remove( mi )
        self.ctrlMenuItem = None
        self.speedAction = None
        self.speedTimer = None
        self.throttle = None
        self.addressPanel = None
        self.driver = None
        self.USBDriver = None
        self.getContext().removePropertyChangeListener(self)
        self.model.removePropertyChangeListener(self)
        self.getContext().getCurrentThrottleFrame().getAddressPanel().removeAddressListener(self)

# Menu entry changed for Current controller and update driver
    def setSelectedController(self, ctrl, item):
        for mi in self.ctrlMenuItem :
            if ( mi != item ):  # Force deselection of other ones
                mi.setSelected(False)
        self.desiredController = ctrl
        if (ctrl != None) :
            sys.path.append(self.getFolder()) # Load a driver
            try:
                del self.driver
                del self.USBDriver
                dd=ctrl.getName()
                dd=dd.replace(" ", "")
                dd=dd.replace(".", "")
                dd=dd.replace("(", "")
                dd=dd.replace(")", "")
                dd=dd.replace("{", "")
                dd=dd.replace("}", "")
                dd=dd.replace("[", "")
                dd=dd.replace("]", "")              
                self.USBDriver = __import__(dd)           
            except ImportError:  # On error load a default one
                print "Driver \""+ dd +"\" not found in \""+self.getFolder()+"\", loading default one"
                self.USBDriver =  __import__("Default")
            reload(self.USBDriver)
            sys.path.remove(self.getFolder())
            self.driver = self.USBDriver.USBDriver()
    
    def setXml(self, elt):
        if (elt.getChildren("USBThrottle") == None):
            return
        ctrl = elt.getChildren("USBThrottle")[0].getAttributeValue("DesiredController")
        if (ctrl == None):
            return
        for mi in self.ctrlMenuItem :
            if ( mi.getText() == ctrl ):
                mi.setSelected(True)
                break
    
    def getXml(self):
       elt = Element("USBThrottle")
       for mi in self.ctrlMenuItem :
           if (mi.isSelected()) :
               elt.setAttribute("DesiredController", mi.getText())
               break
       return elt

#AddressListener part: to listen for address changes in address panel (release, acquired)
    def notifyAddressChosen(self, address):
        pass
        
    def notifyAddressThrottleFound(self, throttle):
        self.speedTimer.stop() 
        self.throttle = throttle
        self.speedAction.setThrottle( self.throttle )
            
    def notifyAddressReleased(self, address):
        self.speedTimer.stop()
        self.throttle = None
        self.speedAction.setThrottle( self.throttle )

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)
Beispiel #11
0
class DCCThrottle(Jynstrument, PropertyChangeListener, AddressListener,
                  jmri.ThrottleListener):
    #Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"

    def init(self):
        self.getContext().addPropertyChangeListener(
            self)  #ThrottleFrame change
        self.addressPanel = self.getContext().getCurrentThrottleFrame(
        ).getAddressPanel()
        self.addressPanel.addAddressListener(
            self)  # change of throttle in Current frame
        self.panelThrottle = self.getContext().getCurrentThrottleFrame(
        ).getAddressPanel().getThrottle()  # the throttle
        self.label = JButton(
            ImageIcon(self.getFolder() + "/DCCThrottle.png",
                      "DCCThrottle"))  #label
        self.label.addMouseListener(
            self.getMouseListeners()
            [0])  # In order to get the popupmenu on the button too
        self.add(self.label)
        # create a dcc throttle and request one from the ThrottleManager
        self.masterThrottle = None
        if (jmri.InstanceManager.throttleManagerInstance().requestThrottle(
                listenToDCCThrottle, self) == False):
            print "Couldn't request a throttle for " + locoAddress
        # Advanced functions
        self.advFunctions = AdvFunctions()

    def quit(self):
        if (self.masterThrottle != None):
            self.masterThrottle.removePropertyChangeListener(self)
            self.masterThrottle = None
        self.panelThrottle = None
        self.advFunctions = None
        if (self.addressPanel != None):
            self.addressPanel.removeAddressListener(self)
            self.addressPanel = None
        self.getContext().removePropertyChangeListener(self)

    #Property listener part
    def propertyChange(self, event):
        if (event.propertyName == "ThrottleFrame"
            ):  # Current throttle frame changed
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.panelThrottle = self.addressPanel.getThrottle()
            self.addressPanel.addAddressListener(self)
            return
        if (self.panelThrottle == None):
            return
        if (event.propertyName == "IsForward"):
            self.panelThrottle.setIsForward(event.newValue)
            return
        if (event.propertyName == "SpeedSetting"):
            self.panelThrottle.setSpeedSetting(event.newValue)
            return
        if (event.propertyName == "F0"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "0",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF0(event.newValue)
            return
        if (event.propertyName == "F1"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "1",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF1(event.newValue)
            return
        if (event.propertyName == "F2"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "2",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF2(event.newValue)
            return
        if (event.propertyName == "F3"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "3",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF3(event.newValue)
            return
        if (event.propertyName == "F4"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "4",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF4(event.newValue)
            return
        if (event.propertyName == "F5"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "5",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF5(event.newValue)
            return
        if (event.propertyName == "F6"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "6",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF6(event.newValue)
            return
        if (event.propertyName == "F7"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "7",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF7(event.newValue)
            return
        if (event.propertyName == "F8"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "8",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF8(event.newValue)
            return
        if (event.propertyName == "F9"):
            if (self.addressPanel.getRosterEntry() !=
                    None) and (self.advFunctions.call(
                        self.addressPanel.getRosterEntry(), "9",
                        event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF9(event.newValue)
            return

    #ThrottleListener part (real dccThrottle)
    def notifyThrottleFound(self, dccThrottle):
        self.masterThrottle = dccThrottle
        self.masterThrottle.addPropertyChangeListener(self)

    def notifyFailedThrottleRequest(self, locoAddress, reason):
        self.masterThrottle = None
        # Sleep a bit and try again
        try:
            time.sleep(1)
        except BaseException:
            pass
        if (jmri.InstanceManager.throttleManagerInstance().requestThrottle(
                listenToDCCThrottle, self) == False):
            print "Couldn't request a throttle for " + locoAddress

    def notifyStealThrottleRequired(self, locoAddress):
        jmri.InstanceManager.throttleManagerInstance().stealThrottleRequest(
            locoAddress, self, True)

    #AddressListener part: to listen for address changes in address panel (release, acquired)
    def notifyAddressChosen(self, address):
        pass

    def notifyAddressThrottleFound(self, throt):
        self.panelThrottle = throt

    def notifyAddressReleased(self, address):
        self.panelThrottle = None

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)
Beispiel #12
0
class WiimoteThrottle(Jynstrument, PropertyChangeListener, AddressListener, WiiDeviceDiscoveryListener, WiiRemoteListener, Runnable):
    #Wiimote discoverer events
    def findFinished(self, nb):
        print "Search finished, found ",nb ," wiimotes"

    def wiiDeviceDiscovered(self, evt):
        print "Found a Wiimote, number: ", evt.getNumber()
        self.wiiDevice = evt.getWiiDevice()
        ledLights = [False, False, False, False]
        ledLights[evt.getNumber()%4] = True
        self.wiiDevice.setLEDLights(ledLights)
        self.wiiDevice.addWiiRemoteListener(self)

    #Wiimote events        
    def buttonInputReceived(self, evt):
#        print("Wiimote Button event: ", evt)
        self.sync.acquire()
        self.evt = evt
        self.sync.release()
        SwingUtilities.invokeLater(self) # Delegate processing to Swing thread (when we are here, we're in the WiiRemoteJ driver thread)

    def run(self):
        self.sync.acquire()
        evt = self.evt
        self.sync.release()
        if (self.speedTimer != None):
            self.speedTimer.stop() # In any case
        # ThrottleFrames
        if ( evt.wasReleased(WRButtonEvent.RIGHT) ): # NEXT
             self.getContext().nextThrottleFrame()
        if ( evt.wasReleased(WRButtonEvent.LEFT) ):  # PREVIOUS
            self.getContext().previousThrottleFrame()
        if ( evt.wasReleased(WRButtonEvent.UP) ): # NEXT RUNNING
             self.getContext().nextRunningThrottleFrame()
        if ( evt.wasReleased(WRButtonEvent.DOWN) ):  # PREVIOUS RUNNING
            self.getContext().previousRunningThrottleFrame()  
        # No throttle assigned to current frame, browse through roster      
        if (self.throttle == None):
            if ( evt.wasReleased(WRButtonEvent.HOME) ):  # Assign selected roster entry
                self.addressPanel.selectRosterEntry()
                return
            if ( evt.wasReleased(WRButtonEvent.PLUS) ):  # Next roster entry
                selectedIndex = self.addressPanel.getRosterSelectedIndex()
                self.addressPanel.setIcon(False)
                self.addressPanel.setVisible(True)
                self.addressPanel.setRosterSelectedIndex(selectedIndex + 1)
                return
            if ( evt.wasReleased(WRButtonEvent.MINUS) ):  # Previous roster entry
                selectedIndex = self.addressPanel.getRosterSelectedIndex()
                self.addressPanel.setIcon(False)
                self.addressPanel.setVisible(True)
                self.addressPanel.setRosterSelectedIndex(selectedIndex - 1)
                return
        # Throttle assigned to current frame, control it  
        if (self.throttle != None):
            if ( evt.wasReleased(WRButtonEvent.HOME) ):  # LIGHTS
                self.throttle.setF0( not self.throttle.getF0() )
                return
            if ( evt.wasReleased(WRButtonEvent.PLUS) ):  # FORWARD
                self.throttle.setIsForward(True)
                return
            if ( evt.wasReleased(WRButtonEvent.MINUS) ):  # BACKWARD
                self.throttle.setIsForward(False)
                return
            # Speed control
            if ( evt.isPressed(WRButtonEvent.B) ): # SPEED - increment
                self.speedAction.setSpeedIncrement( valueSpeedIncrement )
                self.speedTimer.start()
                return
            if ( evt.isPressed(WRButtonEvent.A) ): # SPEED - decrement
                self.speedAction.setSpeedIncrement( -valueSpeedIncrement )
                self.speedTimer.start()
                return
            # EStop
            if ( evt.isPressed( WRButtonEvent.ONE | WRButtonEvent.TWO ) ): # estop = button1 + button2
                self.throttle.setSpeedSetting( speedEStopSpeed )
                self.lastTimeEStop = Calendar.getInstance().getTimeInMillis() # To cancel next inputs
                self.wiiDevice.vibrateFor(750)
                return
            # Speed presets
            if (Calendar.getInstance().getTimeInMillis() - self.lastTimeEStop > delay4double): # Delay for nothing after EStop
                if (( evt.wasReleased(WRButtonEvent.TWO) ) and           #STOP = button2 x2 or (button2 and CurrentSpeed = slow speed)
                    ( (Calendar.getInstance().getTimeInMillis() - self.lastTimeButton2 < delay4double) or ( self.throttle.getSpeedSetting() == speedSlowSpeed ))):  
                    self.throttle.setSpeedSetting( speedStopSpeed )
                    return
                if ( evt.wasReleased(WRButtonEvent.TWO) ):               # SLOW SPEED = button2
                    self.throttle.setSpeedSetting( speedSlowSpeed )
                    self.lastTimeButton2 = Calendar.getInstance().getTimeInMillis()
                    return
                if (( evt.wasReleased(WRButtonEvent.ONE) ) and           # MAX SPEED = button1x2 or (button1 and CurrentSpeed = cruise speed)
                    ( (Calendar.getInstance().getTimeInMillis() - self.lastTimeButton1 < delay4double) or ( self.throttle.getSpeedSetting() == speedCruiseSpeed ))): 
                    self.throttle.setSpeedSetting( speedMaxSpeed )
                    return
                if ( evt.wasReleased( WRButtonEvent.ONE) ):              # CRUISE SPEED = button1
                    self.throttle.setSpeedSetting( speedCruiseSpeed )
                    self.lastTimeButton1 = Calendar.getInstance().getTimeInMillis()
                    return

    def disconnected(self):
        self.wiiDevice = None
        print("Lost wiimote")
        
    def accelerationInputReceived(self, evt):
        pass
    def combinedInputReceived(self, evt):
        pass
    def	extensionConnected(self, extension):
        pass          
    def	extensionDisconnected(self, extension):
        pass          
    def extensionInputReceived(self, evt):
        pass
    def	extensionPartiallyInserted(self):
        pass
    def extensionUnknown(self):
        pass
    def IRInputReceived(self, evt):
        pass
    def statusReported(self, evt):
        print("Wiimote status reported: ", evt)

#Property listener part
    def propertyChange(self, event):
        self.speedTimer.stop()                     
        if (event.propertyName == "ThrottleFrame") :  # Current throttle frame changed
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.throttle = self.addressPanel.getThrottle()
            self.speedAction.setThrottle( self.throttle )
            self.addressPanel.addAddressListener(self)

#Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"
    
    def init(self):
        self.getContext().addPropertyChangeListener(self) #ThrottleFrame change
        self.addressPanel=self.getContext().getCurrentThrottleFrame().getAddressPanel();
        self.addressPanel.addAddressListener(self) # change of throttle in Current frame
        self.throttle = self.getContext().getCurrentThrottleFrame().getAddressPanel().getThrottle() # the throttle
        self.speedAction =  SpeedAction()  #Speed increase thread
        self.speedAction.setThrottle( self.throttle )
        self.speedTimer = Timer(valueSpeedTimerRepeat, self.speedAction ) # Very important to use swing Timer object (see Swing and multithreading doc)
        self.speedTimer.setRepeats(True)
        self.label = JButton(ImageIcon(self.getFolder() + "/WiimoteThrottle.png","WiiMote")) #label
        self.label.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
        self.add(self.label)
        self.lastTimeButton1 = Calendar.getInstance().getTimeInMillis()
        self.lastTimeButton2 = Calendar.getInstance().getTimeInMillis()
        self.lastTimeEStop = Calendar.getInstance().getTimeInMillis()
        self.wiiDevice = None
        self.sync = thread.allocate_lock() # A lock protecting bellow self.evt
        self.evt = None
        java.lang.System.setProperty("bluecove.jsr82.psm_minimum_off", "true"); # Required for Bluecove + WiiRemoteJ
        WiiRemoteJ.findRemotes(self, 1) # Search for 1 Wiimote, and call back
       
    def quit(self):
        self.speedTimer.stop() 
        WiiRemoteJ.stopFind()
        if ((self.wiiDevice != None) and (self.wiiDevice.isConnected())):
            self.wiiDevice.removeWiiRemoteListener(self)
            self.wiiDevice.disconnect()
        self.wiiDevice = None
        self.speedAction = None
        self.speedTimer = None
        self.throttle = None
        self.getContext().removePropertyChangeListener(self)
        self.addressPanel.removeAddressListener(self)
        self.addressPanel = None

#AddressListener part: to listen for address changes in address panel (release, acquired)
    def notifyAddressChosen(self, address):
        pass
        
    def notifyAddressThrottleFound(self, throttle):
        self.speedTimer.stop() 
        self.throttle = throttle
        self.speedAction.setThrottle( self.throttle )
            
    def notifyAddressReleased(self, address):
        self.speedTimer.stop()
        self.throttle = None
        self.speedAction.setThrottle( self.throttle )

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)
Beispiel #13
0
class DCCThrottle(Jynstrument, PropertyChangeListener, AddressListener, jmri.ThrottleListener):
    #Jynstrument main and mandatory methods
    def getExpectedContextClassName(self):
        return "jmri.jmrit.throttle.ThrottleWindow"
    
    def init(self):
        self.getContext().addPropertyChangeListener(self) #ThrottleFrame change
        self.addressPanel = self.getContext().getCurrentThrottleFrame().getAddressPanel()
        self.addressPanel.addAddressListener(self) # change of throttle in Current frame
        self.panelThrottle = self.getContext().getCurrentThrottleFrame().getAddressPanel().getThrottle() # the throttle
        self.label = JButton(ImageIcon(self.getFolder() + "/DCCThrottle.png","DCCThrottle")) #label
        self.label.addMouseListener(self.getMouseListeners()[0]) # In order to get the popupmenu on the button too
        self.add(self.label)
        # create a dcc throttle and request one from the ThrottleManager
        self.masterThrottle = None
        if ( jmri.InstanceManager.throttleManagerInstance().requestThrottle(listenToDCCThrottle, self) == False):
            print "Couldn't request a throttle for "+locoAddress        
        # Advanced functions
        self.advFunctions = AdvFunctions()

    def quit(self):
        if (self.masterThrottle != None):
            self.masterThrottle.removePropertyChangeListener(self)
            self.masterThrottle = None
	self.panelThrottle = None
        self.advFunctions = None
        if (self.addressPanel != None):
            self.addressPanel.removeAddressListener(self)
            self.addressPanel = None            
        self.getContext().removePropertyChangeListener(self)               

    #Property listener part
    def propertyChange(self, event):
        if (event.propertyName == "ThrottleFrame") :  # Current throttle frame changed
            event.oldValue.getAddressPanel().removeAddressListener(self)
            self.addressPanel = event.newValue.getAddressPanel()
            self.panelThrottle = self.addressPanel.getThrottle()
            self.addressPanel.addAddressListener(self)
            return
        if(self.panelThrottle == None):
            return
        if(event.propertyName == "IsForward"):
           self.panelThrottle.setIsForward(event.newValue)
           return
        if(event.propertyName == "SpeedSetting"):
            self.panelThrottle.setSpeedSetting(event.newValue)
            return
        if(event.propertyName == "F0"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "0", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF0(event.newValue)
            return
        if(event.propertyName == "F1"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "1", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF1(event.newValue)
            return
        if(event.propertyName == "F2"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "2", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF2(event.newValue)
            return
        if(event.propertyName == "F3"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "3", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF3(event.newValue)
            return
        if(event.propertyName == "F4"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "4", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF4(event.newValue)
            return
        if(event.propertyName == "F5"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "5", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF5(event.newValue)
            return
        if(event.propertyName == "F6"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "6", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF6(event.newValue)
            return
        if(event.propertyName == "F7"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "7", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF7(event.newValue)
            return
        if(event.propertyName == "F8"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "8", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF8(event.newValue)
            return
        if(event.propertyName == "F9"):
            if (self.addressPanel.getRosterEntry() != None) and (self.advFunctions.call(self.addressPanel.getRosterEntry(), "9", event.newValue, self.panelThrottle) != None):
                return
            self.panelThrottle.setF9(event.newValue)
            return
            
    #ThrottleListener part (real dccThrottle)
    def notifyThrottleFound(self, dccThrottle):        
        self.masterThrottle = dccThrottle
        self.masterThrottle.addPropertyChangeListener(self)
    
    def notifyFailedThrottleRequest(self, locoAddress, reason):
        self.masterThrottle = None
        # Sleep a bit and try again
        time.sleep(1)
        if ( jmri.InstanceManager.throttleManagerInstance().requestThrottle(listenToDCCThrottle, self) == False):
            print "Couldn't request a throttle for "+locoAddress     
    
    #AddressListener part: to listen for address changes in address panel (release, acquired)
    def notifyAddressChosen(self, address):
        pass

    def notifyAddressThrottleFound(self, throt):
        self.panelThrottle = throt

    def notifyAddressReleased(self, address):
        self.panelThrottle = None

    def notifyConsistAddressChosen(self, address, isLong):
        self.notifyAddressChosen(address)

    def notifyConsistAddressThrottleFound(self, throttle):
        self.notifyAddressThrottleFound(throttle)

    def notifyConsistAddressReleased(self, address, isLong):
        self.notifyAddressReleased(address)