Ejemplo n.º 1
0
 def run(self):
     frame = JFrame('Spinner4',
                    layout=FlowLayout(),
                    defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
     frame.add(JSpinner(SpinnerDateModel()))
     frame.pack()
     frame.setVisible(1)
Ejemplo n.º 2
0
 def run(self):
     frame = JFrame('Spinner1',
                    layout=FlowLayout(),
                    defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
     daysOfWeek = [dow for dow in DFS().getWeekdays() if dow]
     frame.add(JSpinner(SpinnerListModel(daysOfWeek)))
     frame.pack()
     frame.setVisible(1)
Ejemplo n.º 3
0
 def run(self):
     frame = JFrame('JSpinnerDemo',
                    layout=FlowLayout(),
                    defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
     daysOfWeek = [dow for dow in DFS().getWeekdays() if dow]
     width = max([len(dow) for dow in daysOfWeek])
     spinner = JSpinner(SpinnerListModel(daysOfWeek))
     spinner.getEditor().getTextField().setColumns(width)
     frame.add(spinner)
     frame.pack()
     frame.setVisible(1)
Ejemplo n.º 4
0
 def run(self):
     frame = JFrame('Spinner5',
                    layout=FlowLayout(),
                    defaultCloseOperation=JFrame.EXIT_ON_CLOSE)
     frame.add(
         JSpinner(
             SpinnerDateModel(
                 Date(2000, 2, 1),  # zero origin month
                 None,  # minimum
                 None,  # maximum
                 Calendar.DAY_OF_MONTH  # Ignored by GUI
             )))
     frame.pack()
     frame.setVisible(1)
Ejemplo n.º 5
0
    def testJSpinner(self):
        valueDummy = DummyObject()
        nextValueDummy = DummyObject()
        prevValueDummy = DummyObject()
        spinnerModel = SpinnerNumberModel(3, 0, 5, 1)

        spinner = JSpinner(spinnerModel)
        self.group.bind(spinner, 'value', valueDummy, 'value')
        self.group.bind(spinner, 'nextValue', nextValueDummy, 'value')
        self.group.bind(spinner, 'previousValue', prevValueDummy, 'value')

        assert valueDummy.value == 3
        assert nextValueDummy.value == 4
        assert prevValueDummy.value == 2

        spinner.setValue(5)
        assert valueDummy.value == 5
        assert nextValueDummy.value is None
        assert prevValueDummy.value == 4

        spinner.setValue(0)
        assert valueDummy.value == 0
        assert nextValueDummy.value == 1
        assert prevValueDummy.value is None
Ejemplo n.º 6
0
 def __init__(self):
     DefaultTableCellRenderer.__init__(self)
     self.spinner = JSpinner(SpinnerListModel(choices))
Ejemplo n.º 7
0
 def __init__(self):
     DefaultCellEditor.__init__(self, JTextField())
     self.spinner = JSpinner(SpinnerListModel(choices))
     self.spinner.setEditor(JSpinner.ListEditor(self.spinner))
Ejemplo n.º 8
0
 def __init__(self):
     values = 'Bacon,Eggs,Spam'.split(',')
     self.spinner = JSpinner(SpinnerListModel(values))
     self.spinner.setEditor(JSpinner.ListEditor(self.spinner))
Ejemplo n.º 9
0
 def __init__(self):
     DefaultCellEditor.__init__(self, JTextField())
     values = 'Bacon,Eggs,Spam'.split(',')
     self.spinner = JSpinner(SpinnerListModel(values))
     self.spinner.setEditor(JSpinner.ListEditor(self.spinner))
Ejemplo n.º 10
0
class AudioPlayerFrame(JmriJFrame):

    # Define the range for position values
    # By default, this is -10 to +10
    range = 10

    # Calculate slider range
    posMinMax = int(10**Audio.DECIMAL_PLACES)

    # Define controls
    playButton = JButton("Play")
    stopButton = JButton("Stop")
    pauseButton = JButton("Pause")
    refreshButton = JButton("Refresh")
    rangeSpinner = JSpinner(SpinnerNumberModel(range, 1, 100, 1))
    sourceCombo = JComboBox()
    positionXSlider = JSlider()
    positionYSlider = JSlider()
    positionZSlider = JSlider()

    # Reference to AudioSource
    source = None

    # Define various constants
    PLAY = "AUDIO.PLAY"
    PAUSE = "AUDIO.PAUSE"
    RESUME = "AUDIO.RESUME"
    STOP = "AUDIO.STOP"
    REFRESH = "AUDIO.REFRESH"
    SELECT = "Select source from list"
    POSX = "X"
    POSY = "Y"
    POSZ = "Z"

    def __init__(self):

        # Setup controls - buttons first
        self.playButton.preferredSize = self.refreshButton.preferredSize
        self.playButton.actionCommand = self.PLAY
        self.playButton.actionPerformed = self.whenButtonClicked
        self.pauseButton.preferredSize = self.refreshButton.preferredSize
        self.pauseButton.actionCommand = self.PAUSE
        self.pauseButton.actionPerformed = self.whenButtonClicked
        self.stopButton.preferredSize = self.refreshButton.preferredSize
        self.stopButton.actionCommand = self.STOP
        self.stopButton.actionPerformed = self.whenButtonClicked
        self.refreshButton.actionCommand = self.REFRESH
        self.refreshButton.actionPerformed = self.whenButtonClicked

        # Now combobox and text field
        self.sourceCombo.itemStateChanged = self.whenSourceChanged
        self.updateSourcesList()
        self.rangeSpinner.stateChanged = self.whenRangeChanged

        # Now sliders
        ticksMajor = int(self.posMinMax / 4)
        ticksMinor = int(ticksMajor / 5)
        labels = Hashtable(3)
        labels.put(-self.posMinMax, JLabel("Left"))
        labels.put(0, JLabel("Centre"))
        labels.put(self.posMinMax, JLabel("Right"))
        self.positionXSlider.labelTable = labels
        self.positionXSlider.minimum = -self.posMinMax
        self.positionXSlider.maximum = self.posMinMax
        self.positionXSlider.majorTickSpacing = ticksMajor
        self.positionXSlider.minorTickSpacing = ticksMinor
        self.positionXSlider.paintTicks = True
        self.positionXSlider.paintLabels = True
        self.positionXSlider.snapToTicks = True
        self.positionXSlider.value = 0
        self.positionXSlider.stateChanged = self.whenSliderXChanged
        labels = Hashtable(3)
        labels.put(-self.posMinMax, JLabel("Behind"))
        labels.put(0, JLabel("Centre"))
        labels.put(self.posMinMax, JLabel("In-front"))
        self.positionYSlider.labelTable = labels
        self.positionYSlider.minimum = -self.posMinMax
        self.positionYSlider.maximum = self.posMinMax
        self.positionYSlider.majorTickSpacing = ticksMajor
        self.positionYSlider.minorTickSpacing = ticksMinor
        self.positionYSlider.paintTicks = True
        self.positionYSlider.paintLabels = True
        self.positionYSlider.snapToTicks = True
        self.positionYSlider.value = 0
        self.positionYSlider.orientation = JSlider.VERTICAL
        self.positionYSlider.stateChanged = self.whenSliderYChanged
        labels = Hashtable(3)
        labels.put(-self.posMinMax, JLabel("Below"))
        labels.put(0, JLabel("Centre"))
        labels.put(self.posMinMax, JLabel("Above"))
        self.positionZSlider.labelTable = labels
        self.positionZSlider.minimum = -self.posMinMax
        self.positionZSlider.maximum = self.posMinMax
        self.positionZSlider.majorTickSpacing = ticksMajor
        self.positionZSlider.minorTickSpacing = ticksMinor
        self.positionZSlider.paintTicks = True
        self.positionZSlider.paintLabels = True
        self.positionZSlider.snapToTicks = True
        self.positionZSlider.value = 0
        self.positionZSlider.orientation = JSlider.VERTICAL
        self.positionZSlider.stateChanged = self.whenSliderZChanged

        # Setup frame
        self.title = "Simple JMRI Audio Player"
        self.contentPane.layout = BoxLayout(self.contentPane, BoxLayout.Y_AXIS)

        # Add controls to frame - combo & buttons first
        p = JPanel(FlowLayout(FlowLayout.LEADING))
        p.add(self.sourceCombo)
        p.add(self.refreshButton)
        p.add(self.playButton)
        p.add(self.pauseButton)
        p.add(self.stopButton)
        #p.add(JLabel("Range"))
        #p.add(self.rangeSpinner)
        self.add(p)
        self.add(Box.createVerticalGlue())

        # Now sliders
        p = JPanel(FlowLayout(FlowLayout.LEADING))
        label = JLabel("Y Position")
        label.UI = VerticalLabelUI()  # Default behaviour is anti-clockwise
        p.add(label)
        p.add(self.positionYSlider)
        p2 = JPanel()
        p2.layout = BoxLayout(p2, BoxLayout.Y_AXIS)
        p3 = JPanel()
        p3.add(JLabel("Range"))
        p3.add(self.rangeSpinner)
        p2.add(p3)
        #p2.add(Box.createVerticalGlue())
        p3 = JPanel()
        p3.layout = BoxLayout(p3, BoxLayout.Y_AXIS)
        label = JLabel("X Position")
        label.alignmentX = JLabel.CENTER_ALIGNMENT
        p3.add(label)
        p3.add(self.positionXSlider)
        p2.add(p3)
        p.add(p2)
        label = JLabel("Z Position")
        label.UI = VerticalLabelUI()
        p.add(label)
        p.add(self.positionZSlider)
        self.add(p)

        # Finally pack and show
        self.pack()
        self.show()

    def updateSourcesList(self):
        # Clear the ComboBox
        self.sourceCombo.removeAllItems()
        # Now populate
        self.sourceCombo.addItem(self.SELECT)
        # Retrieve system name list of AudioSources
        for source in audio.getSystemNameList(Audio.SOURCE):
            # Add available sources to the list
            self.sourceCombo.addItem(source)

    def whenRangeChanged(self, event):
        # store value & update sliders
        self.range = self.rangeSpinner.value
        self.updateSliders()

    def whenSourceChanged(self, event):
        # Only do something when an item is selected
        if event.getStateChange() == ItemEvent.SELECTED:
            # Stop playing source
            self.stopSource()
            if (event.getItem() != self.SELECT):
                # Set reference to source
                self.source = audio.provideAudio(event.getItem())
                # Enable buttons & update sliders
                self.enableControls(True)
                self.updateSliders()
            else:
                # Clear reference to source
                self.source = None
                # Disable buttons
                self.enableControls(False)

    def whenButtonClicked(self, event):
        # Get the action command
        command = event.getActionCommand()
        # Execute appropriate action
        if self.source != None:
            if command == self.PLAY:
                self.pauseButton.actionCommand = self.PAUSE
                self.pauseButton.text = "Pause"
                self.playSource()
            elif command == self.PAUSE:
                self.pauseButton.actionCommand = self.RESUME
                self.pauseButton.text = "Resume"
                self.pauseSource()
            elif command == self.RESUME:
                self.pauseButton.actionCommand = self.PAUSE
                self.pauseButton.text = "Pause"
                self.resumeSource()
            elif command == self.STOP:
                self.pauseButton.actionCommand = self.PAUSE
                self.pauseButton.text = "Pause"
                self.stopSource()
        elif command == self.REFRESH:
            self.updateSourcesList()
        else:
            print "No action defined!"

    def playSource(self):
        if self.source != None:
            self.source.play()

    def pauseSource(self):
        if self.source != None:
            self.source.pause()

    def resumeSource(self):
        if self.source != None:
            self.source.resume()

    def stopSource(self):
        if self.source != None:
            self.source.stop()

    def whenSliderXChanged(self, event):
        self.changePosition(
            self.POSX,
            (float(self.positionXSlider.value) / self.posMinMax * self.range))

    def whenSliderYChanged(self, event):
        self.changePosition(
            self.POSY,
            (float(self.positionYSlider.value) / self.posMinMax * self.range))

    def whenSliderZChanged(self, event):
        self.changePosition(
            self.POSZ,
            (float(self.positionZSlider.value) / self.posMinMax * self.range))

    def changePosition(self, which, value):
        if self.source != None:
            # Get the current position
            pos = self.source.getPosition()
            # Determine which axis to alter
            if which == self.POSX:
                pos.x = value
            elif which == self.POSY:
                pos.y = value
            elif which == self.POSZ:
                pos.z = value
            # Now change the position
            self.source.position = pos

    def updateSliders(self):
        # Get the current position
        pos = self.source.getPosition()
        # Update sliders
        self.positionXSlider.value = int(pos.x * self.posMinMax / self.range)
        self.positionYSlider.value = int(pos.y * self.posMinMax / self.range)
        self.positionZSlider.value = int(pos.z * self.posMinMax / self.range)

    def enableControls(self, enable):
        self.playButton.enabled = enable
        self.pauseButton.enabled = enable
        self.stopButton.enabled = enable
        self.positionXSlider.enabled = enable
        self.positionYSlider.enabled = enable
        self.positionZSlider.enabled = enable
        self.rangeSpinner.enabled = enable
Ejemplo n.º 11
0
    def showStackOverlayWindow(self):
        all = JPanel()
        all.setLayout(MigLayout())

        self.imageIDs = WindowManager.getIDList()
        self.imageNames = []

        if self.imageIDs is None:
            IJ.error(
                "No open images",
                "Stack Overlay requires at least one image to be already open."
            )
            return

        for i in self.imageIDs:
            self.imageNames.append(WindowManager.getImage(i).getTitle())

        self.baseImageBox = JComboBox(self.imageNames)
        baseImageBoxLabel = JLabel("Base image")
        self.baseImageBox.setSelectedIndex(0)
        all.add(baseImageBoxLabel)
        all.add(self.baseImageBox, "wrap")

        self.overlayImageBox = JComboBox(self.imageNames)
        overlayImageBoxLabel = JLabel("Overlay image")
        if len(self.imageNames) > 1:
            self.overlayImageBox.setSelectedIndex(1)

        all.add(overlayImageBoxLabel)
        all.add(self.overlayImageBox, "wrap")

        all.add(JSeparator(SwingConstants.HORIZONTAL), "span, wrap")

        overlayStyleFrame = JPanel()
        overlayStyleFrame.setLayout(MigLayout())
        overlayStyleFrame.setBorder(
            BorderFactory.createCompoundBorder(
                BorderFactory.createTitledBorder("Overlay Style"),
                BorderFactory.createEmptyBorder(5, 5, 5, 5)))

        colorLabel = JLabel("Overlay color")
        self.overlayColorPreviewLabel = JLabel("           ")
        self.overlayColorPreviewLabel.setBorder(
            BorderFactory.createEmptyBorder(0, 0, 1, 0))
        self.overlayColorPreviewLabel.setOpaque(True)
        self.overlayColorPreviewLabel.setBackground(Color.red)
        self.overlayColor = Color.red
        colorPicker = JColorChooser()
        colorPicker.setPreviewPanel(self.overlayColorPreviewLabel)
        colorButton = JButton("Select color...",
                              actionPerformed=self.showColorChooser)

        opacityLabel = JLabel("Overlay opacity (%)")
        opacitySpinnerModel = SpinnerNumberModel(100, 0, 100, 1)
        self.opacitySpinner = JSpinner(opacitySpinnerModel)

        overlayStyleFrame.add(colorLabel)
        overlayStyleFrame.add(self.overlayColorPreviewLabel)
        overlayStyleFrame.add(colorButton, "wrap")

        overlayStyleFrame.add(opacityLabel)
        overlayStyleFrame.add(self.opacitySpinner, "wrap")

        all.add(overlayStyleFrame, "span, wrap")

        self.virtualStackCheckbox = JCheckBox("Use Virtual Stack", True)
        all.add(self.virtualStackCheckbox, "span, wrap")

        # TODO: add non-thermonuclear cancel button functionality
        overlayCancelButton = JButton("Cancel", actionPerformed=self.onQuit)
        overlayStartButton = JButton("Overlay images",
                                     actionPerformed=self.overlayImages)

        all.add(overlayCancelButton, "gapleft push")
        all.add(overlayStartButton, "gapleft push")

        self.frame = JFrame("Stack Overlay")
        self.frame.getContentPane().add(JScrollPane(all))
        self.frame.pack()
        self.frame.setLocationRelativeTo(None)
        self.frame.setVisible(True)