Exemple #1
0
class VideoViewIP(Jynstrument, ItemListener):
    def getExpectedContextClassName(self):
        # This Jynstrument likes to be in a ThrottleFrame and not anywhere else
        return "jmri.jmrit.throttle.ThrottleFrame"

    def init(self):
        Webcam.setDriver(IpCamDriver())
        self.setLayout(BorderLayout())
        self.miFill = JCheckBoxMenuItem("Fill window")
        self.miFill.addItemListener(self)
        self.getPopUpMenu().add(self.miFill)
        self.miMirror = JCheckBoxMenuItem("Mirror", True)
        self.miMirror.addItemListener(self)
        self.getPopUpMenu().add(self.miMirror)
        # Adjust bellow URL accordingly
        IpCamDeviceRegistry.register("MyTest",
                                     "http://localhost:8080/?action=stream",
                                     IpCamMode.PUSH)
        self.addCamPanel()

    def quit(
        self
    ):  # very important to clean up everything to make sure GC will collect us
        self.webcamPanel.stop()
        IpCamDeviceRegistry.unregisterAll()
        self.webcamPanel = None

    def addCamPanel(self):
        self.webcamPanel = WebcamPanel(Webcam.getWebcams().get(0))
        self.webcamPanel.setMirrored(self.miMirror.isSelected())
        if (self.miFill.isSelected()):
            self.webcamPanel.setFillArea(True)
        else:
            self.webcamPanel.setFitArea(True)
        self.add(self.webcamPanel, BorderLayout.CENTER)

# this is a good way to make sure that we're are actaully GCed

    def __del__(self):
        print "in destructor"

    def itemStateChanged(self, evt):
        if (evt.getSource() == self.miFill):
            if (evt.getStateChange() == java.awt.event.ItemEvent.SELECTED):
                self.webcamPanel.setFillArea(True)
            else:
                self.webcamPanel.setFitArea(True)
        if (evt.getSource() == self.miMirror):
            self.webcamPanel.setMirrored(self.miMirror.isSelected())
class FrameMethods(java.lang.Runnable):

    #---------------------------------------------------------------------------
    # Name: exit()
    # Role: Terminate the applicaiton
    #---------------------------------------------------------------------------
    def exit(self, event):
        sys.exit()

    #---------------------------------------------------------------------------
    # Name: findNot()
    # Role: Filter the text, removing lines containing specified text
    #---------------------------------------------------------------------------
    def findNot(self, data, text):
        return '\n'.join([
            line for line in data.splitlines() if line.lower().find(text) < 0
        ])

    #---------------------------------------------------------------------------
    # Name: parse()
    # Role: Parse the specified text, returning a string
    #---------------------------------------------------------------------------
    def parse(self, text):
        data = [line.split(' | ') for line in text.splitlines()]
        width = max([len(result) for result, sign, desc in data])
        return '\n'.join(
            ['%*s %s' % (width, result, sign) for result, sign, desc in data])

    #---------------------------------------------------------------------------
    # Name: run()
    # Role: Instantiate the user class
    # Note: Invoked by the Swing Event Dispatch Thread
    #---------------------------------------------------------------------------
    def run(self):
        frame = JFrame('FrameMethods',
                       size=(1000, 500),
                       locationRelativeTo=None,
                       layout=GridLayout(0, 2),
                       defaultCloseOperation=JFrame.EXIT_ON_CLOSE)

        self.one = self.parse(self.textFile('JFrame Methods.txt'))
        self.left = JTextArea(self.one,
                              20,
                              40,
                              editable=0,
                              font=Font('Courier', Font.PLAIN, 12))

        frame.add(JScrollPane(self.left))

        self.two = self.parse(self.textFile('JInternalFrame Methods.txt'))
        self.right = JTextArea(self.two,
                               20,
                               40,
                               editable=0,
                               font=Font('Courier', Font.PLAIN, 12))
        frame.add(JScrollPane(self.right))

        frame.setJMenuBar(self.makeMenu())

        frame.setVisible(1)

    #---------------------------------------------------------------------------
    # Name: makeMenu()
    # Role: Create and return the application menu bar
    #---------------------------------------------------------------------------
    def makeMenu(self):
        menuBar = JMenuBar(background=Color.blue, foreground=Color.white)

        showMenu = JMenu('Show', background=Color.blue, foreground=Color.white)

        self.deprecated = JCheckBoxMenuItem('Deprecated',
                                            1,
                                            actionPerformed=self.showItems)
        showMenu.add(self.deprecated)

        self.protected = JCheckBoxMenuItem('Protected',
                                           1,
                                           actionPerformed=self.showItems)
        showMenu.add(self.protected)

        showMenu.addSeparator()
        showMenu.add(JMenuItem('Exit', actionPerformed=self.exit))
        menuBar.add(showMenu)
        return menuBar

    #---------------------------------------------------------------------------
    # Name: showItems()
    # Role: Change the list of methods to be displayed
    #---------------------------------------------------------------------------
    def showItems(self, event):
        item = event.getActionCommand()
        one = self.one
        two = self.two
        if not self.deprecated.isSelected():
            one = self.findNot(one, 'deprecated')
            two = self.findNot(two, 'deprecated')
        if not self.protected.isSelected():
            one = self.findNot(one, 'protected')
            two = self.findNot(two, 'protected')
        self.left.setText(one)
        self.right.setText(two)

    #---------------------------------------------------------------------------
    # Name: textFile()
    # Role: Load and return the contents of specified file.
    #---------------------------------------------------------------------------
    def textFile(self, filename):
        result = ''
        try:
            f = open(filename)
            result = f.read()
            f.close()
        except:
            Type, value = sys.exc_info()[:2]
            result = '%s\n%s' % (Type, value)
        return result
Exemple #3
0
class VideoView(Jynstrument, ItemListener):

    def getExpectedContextClassName(self):
        # This Jynstrument likes to be in a ThrottleFrame and not anywhere else
        return "jmri.jmrit.throttle.ThrottleFrame"

    def init(self):
        self.setLayout( BorderLayout() )        
        self.miSelector =  JCheckBoxMenuItem ( "Show camera selector" )
        self.miSelector.addItemListener(self)
        self.miFill =  JCheckBoxMenuItem ( "Fill window" )
        self.miFill.addItemListener(self)
        self.miMirror =  JCheckBoxMenuItem ( "Mirror", True )
        self.miMirror.addItemListener(self)
        self.getPopUpMenu().add( self.miFill )
        self.getPopUpMenu().add( self.miSelector )
        self.getPopUpMenu().add( self.miMirror )
        self.webcam = Webcam.getDefault()
        self.addCamPanel()

    def quit(self):   # very important to clean up everything to make sure GC will collect us
        self.webcamPanel.stop()
        self.webcam.close()
        self.webcam = None

    def addCamPanel(self):
        self.webcam.close()
        self.webcam.setViewSize(WebcamResolution.VGA.getSize());
        self.webcamPanel = WebcamPanel(self.webcam)
        self.webcamPanel.setMirrored(self.miMirror.isSelected())
        if ( self.miFill.isSelected() ) :
            self.webcamPanel.setFillArea( True  )
        else :
            self.webcamPanel.setFitArea( True )
        self.add(self.webcamPanel, BorderLayout.CENTER)
        self.webcam.open()

# this is a good way to make sure that we're are actaully GCed 
    def __del__(self):  
        print "in destructor"

    def itemStateChanged(self, evt):
        if (evt.getSource() == self.miSelector ):
            if (evt.getStateChange() == java.awt.event.ItemEvent.SELECTED ) :                           
                self.picker = WebcamPicker();
                self.picker.addItemListener(self)
                self.add(self.picker, BorderLayout.PAGE_END)                
            else :
                self.remove(self.picker)                 
                self.picker = None                
                self.revalidate()
        if (evt.getSource() == self.miFill ):
            if (evt.getStateChange() == java.awt.event.ItemEvent.SELECTED ) :
                self.webcamPanel.setFillArea( True  )
            else :
                self.webcamPanel.setFitArea( True )
        if (evt.getSource() == self.miMirror ):
            self.webcamPanel.setMirrored(self.miMirror.isSelected())
        if (evt.getSource() == self.picker ):
            self.webcamPanel.stop()
            self.remove(self.webcamPanel)
            self.webcam.close()
            self.webcam = evt.getItem()
            self.addCamPanel()
            self.revalidate()