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