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))
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)
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)
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)
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
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)
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)
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)
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)
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)
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)
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)