def init(self): w,h,aa,threads = (512, 512, 1, 2) canvas = RayTracePanel(w, h, aa, threads) self.getContentPane().add(JScrollPane(canvas)) #Save FileChooser #fcS = JFileChooser() #fcS.addChoosableFileFilter(FileNameExtensionFilter('Windows Bitmap (*.bmp)', ['bmp'])) #fcS.addChoosableFileFilter(FileNameExtensionFilter('JPEG / JFIF (*.jpg)', ['jpg'])) #fcS.addChoosableFileFilter(FileNameExtensionFilter('Portable Network Graphics (*.png)', ['png'])) #def saveFile(event): # '''Performed when the save button is pressed''' # result = fcS.showSaveDialog(frame) # if result == JFileChooser.APPROVE_OPTION: # file = fcS.getSelectedFile() # fname = file.getPath() # ext = fcS.getFileFilter().getExtensions()[0] # if not fname.endswith('.' + ext): # file = File(fname + '.' + ext) # canvas.saveToFile(file, ext) #Open FileChooser #fcO = JFileChooser() #fcO.addChoosableFileFilter(FileNameExtensionFilter('RayTrace Scene File (*.rts)', ['rts'])) #def openFile(event): # '''Performed when the open button is pressed''' # result = fcO.showOpenDialog(frame) # if result == JFileChooser.APPROVE_OPTION: # fname = fcO.getSelectedFile().getPath() # if fname.endswith('.rts'): # f = open(fname, 'rb') # newScene = SceneFactory().buildScene(f) # f.close() # Painter(canvas, newScene, openButton, saveButton, stopButton).start() def stop(event): '''Peformed when the stop button is pressed''' canvas.stopRendering() #Setup Menu menuBar = JMenuBar() menu = JMenu("File") menuBar.add(menu) openButton = JMenuItem("Open...", actionPerformed=openFile) openButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)) menu.add(openButton) #saveButton = JMenuItem("Save as...", actionPerformed=saveFile) #saveButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)) #menu.add(saveButton) menu.addSeparator() stopButton = JMenuItem('Stop Render', actionPerformed=stop) stopButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); stopButton.setEnabled(False) menu.add(stopButton) menu.addSeparator() #closeButton = JMenuItem('Close', actionPerformed=exit) #closeButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)) #menu.add(closeButton) self.setJMenuBar(menuBar)
def init(self): w, h, aa, threads = (512, 512, 1, 2) canvas = RayTracePanel(w, h, aa, threads) self.getContentPane().add(JScrollPane(canvas)) # Save FileChooser # fcS = JFileChooser() # fcS.addChoosableFileFilter(FileNameExtensionFilter('Windows Bitmap (*.bmp)', ['bmp'])) # fcS.addChoosableFileFilter(FileNameExtensionFilter('JPEG / JFIF (*.jpg)', ['jpg'])) # fcS.addChoosableFileFilter(FileNameExtensionFilter('Portable Network Graphics (*.png)', ['png'])) # def saveFile(event): # '''Performed when the save button is pressed''' # result = fcS.showSaveDialog(frame) # if result == JFileChooser.APPROVE_OPTION: # file = fcS.getSelectedFile() # fname = file.getPath() # ext = fcS.getFileFilter().getExtensions()[0] # if not fname.endswith('.' + ext): # file = File(fname + '.' + ext) # canvas.saveToFile(file, ext) # Open FileChooser # fcO = JFileChooser() # fcO.addChoosableFileFilter(FileNameExtensionFilter('RayTrace Scene File (*.rts)', ['rts'])) # def openFile(event): # '''Performed when the open button is pressed''' # result = fcO.showOpenDialog(frame) # if result == JFileChooser.APPROVE_OPTION: # fname = fcO.getSelectedFile().getPath() # if fname.endswith('.rts'): # f = open(fname, 'rb') # newScene = SceneFactory().buildScene(f) # f.close() # Painter(canvas, newScene, openButton, saveButton, stopButton).start() def stop(event): """Peformed when the stop button is pressed""" canvas.stopRendering() # Setup Menu menuBar = JMenuBar() menu = JMenu("File") menuBar.add(menu) openButton = JMenuItem("Open...", actionPerformed=openFile) openButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)) menu.add(openButton) # saveButton = JMenuItem("Save as...", actionPerformed=saveFile) # saveButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)) # menu.add(saveButton) menu.addSeparator() stopButton = JMenuItem("Stop Render", actionPerformed=stop) stopButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)) stopButton.setEnabled(False) menu.add(stopButton) menu.addSeparator() # closeButton = JMenuItem('Close', actionPerformed=exit) # closeButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)) # menu.add(closeButton) self.setJMenuBar(menuBar)
def __init__(self, gui): self.program = gui.program self.gui = gui # 5/14/09 Dorn: added these lines to allow the input manager to # communicated with the command window to read for input and raw_input self.inputManager = JESInputManager() self.inputManager.setCommandWindow(self) self.inMultiLineCommand = None self.setDocument(JESCommandWindowDocument.JESCommandWindowDocument(self)) self.document = self.getDocument() self.setCharacterAttributes(self.document.getTextAttrib(), TRUE) self.setBackground(colors.black) self.setForeground(colors.white) self.setCaretColor(colors.white) self.setCaretPosition(0) parentKeymap = self.getKeymap() commandKeymap = self.addKeymap("commandKeymap", parentKeymap) commandKeymap.addActionForKeyStroke(KeyStroke.getKeyStroke('\n'), makeAction(self.enter)) commandKeymap.addActionForKeyStroke(KeyStroke.getKeyStroke('UP'),makeAction(self.up)) commandKeymap.addActionForKeyStroke(KeyStroke.getKeyStroke('DOWN'),makeAction(self.down)) self.setKeymap(commandKeymap) #This is a flag for JESCommandWindowDocument's insertString method. It #indicates whether or not JES made the method call. self.currentPos = self.document.getLength() self.oldPos = self.currentPos #Text cleared with undo (used for redo) self.oldText = '' self.my_keymap = commandKeymap #Initialize command. Command holds the line or lines of commands #entered by the user that will be sent to the interpreter self.command = "" #initialize heldText. heldText holds the last text to be copied or cut. self.heldText = "" self.commandHistory = JESCommandHistory.JESCommandHistory() self.isSystem = TRUE self.setText(">>> ") self.isSystem = FALSE self.currentPos = self.document.getLength() self.oldPos = self.currentPos self.addFocusListener(self)
def createMenuBar(self): menuBar = JMenuBar() fileMenu = JMenu('File') data = [['Spam', self.spam], ['Eggs', self.eggs], ['Bacon', self.bacon]] bGroup = ButtonGroup() for name, handler in data: rb = JRadioButtonMenuItem(name, actionPerformed=handler, selected=(name == 'Spam')) bGroup.add(rb) fileMenu.add(rb) fileMenu.add(JSeparator()) # Using JSeparator() for name, handler in data: fileMenu.add(JCheckBoxMenuItem(name, actionPerformed=handler)) fileMenu.addSeparator() # Using addSeparator() exitItem = fileMenu.add( JMenuItem('Exit', KeyEvent.VK_X, actionPerformed=self.exit, accelerator=KeyStroke.getKeyStroke( 'x', InputEvent.ALT_DOWN_MASK))) menuBar.add(fileMenu) helpMenu = JMenu('Help') aboutItem = helpMenu.add( JMenuItem('About', KeyEvent.VK_A, actionPerformed=self.about)) menuBar.add(helpMenu) return menuBar
def makeComponents(self): # text specific operations self.randomUUIDButton = JButton("Generate random UUID", actionPerformed=self.randomUUIDPressed) self.clearButton = JButton("Clear", actionPerformed=self.clearPressed) self.runButton = JButton("Run as Jython", actionPerformed=self.runPressed) self.revertButton = JButton("Revert", actionPerformed=self.revertPressed) self.buttonPanel = Box(BoxLayout.X_AXIS) self.buttonPanel.add(Box.createRigidArea(Dimension(5,0))) self.buttonPanel.add(self.randomUUIDButton) self.buttonPanel.add(Box.createRigidArea(Dimension(5,0))) self.buttonPanel.add(self.clearButton) self.buttonPanel.add(Box.createRigidArea(Dimension(5,0))) self.buttonPanel.add(self.runButton) self.buttonPanel.add(Box.createRigidArea(Dimension(5,0))) self.buttonPanel.add(self.revertButton) self.buttonPanel.add(Box.createRigidArea(Dimension(5,0))) self.textEditor = JTextPane() self.textEditor.setFont(Font("monospaced", Font.PLAIN, 12)) #self.textEditor.setTabSize(4) # still inserts tabs instead of spaces TabKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, False) MyTabActionKey = Object() self.textEditor.getInputMap().put(TabKeyStroke, MyTabActionKey) actionMap = self.textEditor.getActionMap() actionMap.put(MyTabActionKey, AddFourSpacesAction()) self.layout = BorderLayout() self.add(self.buttonPanel, BorderLayout.NORTH) self.add(JScrollPane(self.textEditor), BorderLayout.CENTER)
def __initKeyMap(self): os_name = System.getProperty("os.name") if os_name.startswith("Win"): exit_key = KeyEvent.VK_Z else: exit_key = KeyEvent.VK_D keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_LEFT, InputEvent.META_DOWN_MASK, "jython.home", self.home), (KeyEvent.VK_UP, 0, "jython.up", self.history.historyUp), (KeyEvent.VK_DOWN, 0, "jython.down", self.history.historyDown), (KeyEvent.VK_PERIOD, 0, "jython.showPopup", self.showPopup), (KeyEvent.VK_ESCAPE, 0, "jython.hide", self.hide), ('(', 0, "jython.showTip", self.showTip), (')', 0, "jython.hideTip", self.hideTip), (exit_key, InputEvent.CTRL_MASK, "jython.exit", self.quit), (KeyEvent.VK_SPACE, InputEvent.CTRL_MASK, "jython.showPopup", self.showPopup), (KeyEvent.VK_SPACE, 0, "jython.space", self.spaceTyped), # Mac/Emacs keystrokes (KeyEvent.VK_A, InputEvent.CTRL_MASK, "jython.home", self.home), (KeyEvent.VK_E, InputEvent.CTRL_MASK, "jython.end", self.end), (KeyEvent.VK_K, InputEvent.CTRL_MASK, "jython.killToEndLine", self.killToEndLine), (KeyEvent.VK_Y, InputEvent.CTRL_MASK, "jython.paste", self.paste), ] keymap = JTextComponent.addKeymap("jython", self.text_pane.keymap) for (key, modifier, name, function) in keyBindings: keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.text_pane.keymap = keymap
def __init__(self, controller): # Give reference to controller to delegate action response self.controller = controller # All window components apart from the menu will go in the JFrame's # content pane self.setLayout(BorderLayout()) # Get key bindings configuration from settings key_strokes = self.controller.config['keystrokes'] # Configure key bindings for undo/redo # First decide when key bindings can be triggered: condition = JComponent.WHEN_IN_FOCUSED_WINDOW # InputMap maps key strokes to actions in string format (e.g. 'undo') # ActionMap maps string actions (e.g. 'undo') with a custom # AbstractAction subclass. pane = self.getContentPane() for action, key in key_strokes.iteritems(): key_stroke = KeyStroke.getKeyStroke( getattr(KeyEvent, key), Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) pane.getInputMap(condition).put(key_stroke, action) pane.getActionMap().put(action, KeyStrokeAction(self, action))
def createAction(callback, name, description=None, menu=None, mnemonic=None, accelerator=None, toolBar=None, menuItemType="standard"): action = CallbackAction(callback, name, description) if menu: if menuItemType == "standard": menuItem = JMenuItem(action) elif menuItemType == "checkbox": menuItem = JCheckBoxMenuItem(action) elif menuItemType == "radiobutton": menuItem = JRadioButtonMenuItem(action) else: internal_error("unsupported menu item type %s" % ` menuItemType `) menuItem = JMenuItem(action) if mnemonic: menuItem.setMnemonic(mnemonic) if accelerator: menuItem.setAccelerator( KeyStroke.getKeyStroke(ord(accelerator), Event.CTRL_MASK, 0)) menu.add(menuItem) action.setMenuItem(menuItem) if toolBar: toolbarButton = JButton(action) toolBar.add(toolbarButton) return action
def __init__(self, table, keyName): self.table = table ks = KeyStroke.getKeyStroke(keyName) self.up = keyName.find('UP') > -1 self.action = action = table.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).get(ks) self.original = table.getActionMap().get(action) self.table.getActionMap().put(action, self)
def __init__(self, frame): self.frame = frame # TODO do I need a reference to frame after the constructor? self.history = History(self) self.bs = 0 # what is this? # command buffer self.buffer = [] self.locals = {"gvSIG": sys.gvSIG} self.interp = Interpreter(self, self.locals) sys.stdout = StdOutRedirector(self) # create a textpane self.output = JTextPane(keyTyped=self.keyTyped, keyPressed=self.keyPressed) # TODO rename output to textpane # CTRL UP AND DOWN don't work keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_UP, 0, "jython.up", self.history.historyUp), (KeyEvent.VK_DOWN, 0, "jython.down", self.history.historyDown), (KeyEvent.VK_PERIOD, 0, "jython.showPopup", self.showPopup), (KeyEvent.VK_ESCAPE, 0, "jython.hide", self.hide), ("(", 0, "jython.showTip", self.showTip), (")", 0, "jython.hideTip", self.hideTip), # (KeyEvent.VK_UP, InputEvent.CTRL_MASK, DefaultEditorKit.upAction, self.output.keymap.getAction(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0))), # (KeyEvent.VK_DOWN, InputEvent.CTRL_MASK, DefaultEditorKit.downAction, self.output.keymap.getAction(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0))) ] # TODO rename newmap to keymap newmap = JTextComponent.addKeymap("jython", self.output.keymap) for (key, modifier, name, function) in keyBindings: newmap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.output.keymap = newmap self.doc = self.output.document # self.panel.add(BorderLayout.CENTER, JScrollPane(self.output)) self.__propertiesChanged() self.__inittext() self.initialLocation = self.doc.createPosition(self.doc.length - 1) # Don't pass frame to popups. JWindows with null owners are not focusable # this fixes the focus problem on Win32, but make the mouse problem worse self.popup = Popup(None, self.output) self.tip = Tip(None) # get fontmetrics info so we can position the popup metrics = self.output.getFontMetrics(self.output.getFont()) self.dotWidth = metrics.charWidth(".") self.textHeight = metrics.getHeight() # add some handles to our objects self.locals["console"] = self self.caret = self.output.getCaret()
def makeUI(model): # Components: table = JTable(model) jsp = JScrollPane(table) regex_label = JLabel("Search: ") regex_field = JTextField(20) base_path_label = JLabel("Base path:") base_path_field = JTextField(50) if base_path is not None: base_path_field.setText(base_path) # Panel for all components all = JPanel() all.setBorder(EmptyBorder(20, 20, 20, 20)) layout, c = GridBagLayout(), GC() all.setLayout(layout) # First row: label and regex text field add(all, regex_label, gridx=0, gridy=0) # with default constraints add(all, regex_field, gridx=1, gridy=0, fill=GC.HORIZONTAL, weightx=1.0) # Second row: the table add(all, jsp, gridx=0, gridy=1, fill=GC.BOTH, gridwidth=2, weightx=1.0, weighty=1.0) # full weights so it stretches when resizing # Third row: the base path add(all, base_path_label, gridx=0, gridy=2) add(all, base_path_field, gridx=1, gridy=2, fill=GC.HORIZONTAL, weightx=1.0) # Window frame frame = JFrame("File paths") frame.getContentPane().add(all) #frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) frame.addWindowListener(Closing()) frame.pack() frame.setVisible(True) # Listeners regex_field.addKeyListener(EnterListener(table)) table.addMouseListener(RowClickListener(base_path_field)) al = ArrowListener(table, regex_field) table.addKeyListener(al) regex_field.addKeyListener(al) # Instead of a KeyListener, use the input vs action map table.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "enter") table.getActionMap().put("enter", OpenImageFromTableCell()) # return model, table, regex_field, frame
def addAction(self, key, desc, cb): if " " in key: strokeString = key else: strokeString = "pressed " + key stroke = KeyStroke.getKeyStroke(strokeString) if stroke == None: raise ValueError("Invalid key: " + str(key)) self.inputMap.put(stroke, key) self.actionMap.put(key, MenuAction(cb, key, desc, self)) self.actionLabels[key] = JLabel(key + ": " + desc) self.actionLabels[key].setOpaque(True) self.frame.getContentPane().add(self.actionLabels[key])
def addAction(self, key, desc, cb): if " " in key: strokeString = key else: strokeString = "pressed "+key stroke = KeyStroke.getKeyStroke(strokeString) if stroke == None: raise ValueError("Invalid key: "+str(key)) self.inputMap.put(stroke, key) self.actionMap.put(key, MenuAction(cb, key, desc, self)) self.actionLabels[key] = JLabel(key+": "+desc) self.actionLabels[key].setOpaque(True) self.frame.getContentPane().add(self.actionLabels[key])
def __initKeyMap(self): os_name = System.getProperty("os.name") if os_name.startswith("Win"): exit_key = KeyEvent.VK_Z interrupt_key = KeyEvent.VK_PAUSE # BREAK else: exit_key = KeyEvent.VK_D interrupt_key = KeyEvent.VK_C keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_LEFT, InputEvent.META_DOWN_MASK, "jython.home", self.home), (KeyEvent.VK_UP, 0, "jython.up", self.history.historyUp), (KeyEvent.VK_DOWN, 0, "jython.down", self.history.historyDown), (KeyEvent.VK_PERIOD, 0, "jython.showPopup", self.showPopup), (KeyEvent.VK_ESCAPE, 0, "jython.hide", self.hide), ('(', 0, "jython.showTip", self.showTip), (')', 0, "jython.hideTip", self.hideTip), (exit_key, InputEvent.CTRL_MASK, "jython.exit", self.quit), (KeyEvent.VK_SPACE, InputEvent.CTRL_MASK, "jython.showPopup", self.showPopup), (KeyEvent.VK_SPACE, 0, "jython.space", self.spaceTyped), # explicitly set paste since we're overriding functionality (KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), "jython.paste", self.paste), # Mac/Emacs keystrokes (KeyEvent.VK_A, InputEvent.CTRL_MASK, "jython.home", self.home), (KeyEvent.VK_E, InputEvent.CTRL_MASK, "jython.end", self.end), (KeyEvent.VK_K, InputEvent.CTRL_MASK, "jython.killToEndLine", self.killToEndLine), (KeyEvent.VK_Y, InputEvent.CTRL_MASK, "jython.paste", self.paste), (interrupt_key, InputEvent.CTRL_MASK, "jython.keyboardInterrupt", self.keyboardInterrupt), ] keymap = JTextComponent.addKeymap("jython", self.text_pane.keymap) for (key, modifier, name, function) in keyBindings: keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.text_pane.keymap = keymap
def initKeyMap(self): import platform os_name = platform.java_ver()[-1][0] if os_name.startswith('Win'): exit_key = KeyEvent.VK_Z interrupt_key = KeyEvent.VK_PAUSE else: exit_key = KeyEvent.VK_D interrupt_key = KeyEvent.VK_C bindings = [ (KeyEvent.VK_ENTER, 0, 'jython.enter', self.enterAction), (KeyEvent.VK_DELETE, 0, 'jython.delete', self.deleteAction), (KeyEvent.VK_TAB, 0, 'jython.tab', self.tabAction), (KeyEvent.VK_HOME, 0, 'jython.home', self.homeAction), (KeyEvent.VK_LEFT, InputEvent.META_DOWN_MASK, 'jython.home', self.homeAction), (KeyEvent.VK_END, 0, 'jython.end', self.endAction), (KeyEvent.VK_RIGHT, InputEvent.META_DOWN_MASK, 'jython.end', self.endAction), (KeyEvent.VK_UP, 0, 'jython.up', self.history.historyUp), (KeyEvent.VK_DOWN, 0, 'jython.down', self.history.historyDown), (KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), 'jython.paste', self.pasteAction), (KeyEvent.VK_A, InputEvent.CTRL_MASK, 'jython.home', self.homeAction), (KeyEvent.VK_E, InputEvent.CTRL_MASK, 'jython.end', self.endAction), (KeyEvent.VK_K, InputEvent.CTRL_MASK, 'jython.deleteEndLine', self.deleteEndLineAction), (KeyEvent.VK_Y, InputEvent.CTRL_MASK, 'jython.paste', self.pasteAction), #(interrupt_key, InputEvent.CTRL_MASK, 'jython.keyboardInterrupt', self.keyboardInterruptAction), ] keymap = JTextComponent.addKeymap('jython', self.textpane.getKeymap()) for key, modifier, name, function in bindings: keymap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.textpane.keymap = keymap
def initKeyMap(self): import platform os_name = platform.java_ver()[-1][0] if os_name.startswith('Win'): exit_key = KeyEvent.VK_Z interrupt_key = KeyEvent.VK_PAUSE else: exit_key = KeyEvent.VK_D interrupt_key = KeyEvent.VK_C bindings = [ (KeyEvent.VK_ENTER, 0, 'jython.enter', self.enterAction), (KeyEvent.VK_DELETE, 0, 'jython.delete', self.deleteAction), (KeyEvent.VK_HOME, 0, 'jython.home', self.homeAction), (KeyEvent.VK_LEFT, InputEvent.META_DOWN_MASK, 'jython.home', self.homeAction), (KeyEvent.VK_END, 0, 'jython.end', self.endAction), (KeyEvent.VK_RIGHT, InputEvent.META_DOWN_MASK, 'jython.end', self.endAction), (KeyEvent.VK_UP, 0, 'jython.up', self.history.historyUp), (KeyEvent.VK_DOWN, 0, 'jython.down', self.history.historyDown), (KeyEvent.VK_V, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(), 'jython.paste', self.pasteAction), (KeyEvent.VK_A, InputEvent.CTRL_MASK, 'jython.home', self.homeAction), (KeyEvent.VK_E, InputEvent.CTRL_MASK, 'jython.end', self.endAction), (KeyEvent.VK_K, InputEvent.CTRL_MASK, 'jython.deleteEndLine', self.deleteEndLineAction), (KeyEvent.VK_Y, InputEvent.CTRL_MASK, 'jython.paste', self.pasteAction), #(interrupt_key, InputEvent.CTRL_MASK, 'jython.keyboardInterrupt', self.keyboardInterruptAction), ] keymap = JTextComponent.addKeymap('jython', self.textpane.getKeymap()) for key, modifier, name, function in bindings: keymap.addActionForKeyStroke( KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.textpane.keymap = keymap
def createAction(callback, name, description=None, menu=None, mnemonic=None, accelerator=None, toolBar=None, menuItemType="standard"): action = CallbackAction(callback, name, description) if menu: if menuItemType == "standard": menuItem = JMenuItem(action) elif menuItemType == "checkbox": menuItem = JCheckBoxMenuItem(action) elif menuItemType == "radiobutton": menuItem = JRadioButtonMenuItem(action) else: internal_error("unsupported menu item type %s" % `menuItemType`) menuItem = JMenuItem(action) if mnemonic: menuItem.setMnemonic(mnemonic) if accelerator: menuItem.setAccelerator(KeyStroke.getKeyStroke(ord(accelerator), Event.CTRL_MASK, 0)) menu.add(menuItem) action.setMenuItem(menuItem) if toolBar: toolbarButton = JButton(action) toolBar.add(toolbarButton) return action
def __init__(self, controller): self.logger = logging.getLogger("NammuController") self.setAlwaysOnTop(True) self.controller = controller self.pane = self.getContentPane() # Get key bindings configuration from settings key_strokes = self.controller.config['find_keystrokes'] # Configure key bindings for undo/redo # First decide when key bindings can be triggered: condition = JComponent.WHEN_IN_FOCUSED_WINDOW # InputMap maps key strokes to actions in string format (e.g. 'undo') # ActionMap maps string actions (e.g. 'undo') with a custom # AbstractAction subclass. pane = self.getContentPane() for action, key in key_strokes.iteritems(): key_stroke = KeyStroke.getKeyStroke( getattr(KeyEvent, key), Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) pane.getInputMap(condition).put(key_stroke, action) pane.getActionMap().put(action, KeyStrokeAction(self, action))
def createMenuBar(self): menuBar = JMenuBar() fileMenu = JMenu('File') exitItem = fileMenu.add( JMenuItem('Exit', KeyEvent.VK_X, actionPerformed=self.exit, accelerator=KeyStroke.getKeyStroke( KeyEvent.VK_X, ActionEvent.ALT_MASK))) menuBar.add(fileMenu) codeMenu = JMenu('Encoding') data = [['ANSI', KeyEvent.VK_A], ['UTF-8', KeyEvent.VK_U], ['UCS-2 Big Endian', KeyEvent.VK_B], ['UCS-2 Little Endian', KeyEvent.VK_L]] bGroup = ButtonGroup() for suffix, mnemonic in data: name = 'Encoding in ' + suffix rb = JRadioButtonMenuItem(name, mnemonic=mnemonic, selected=(suffix == 'ANSI')) bGroup.add(rb) codeMenu.add(rb) menuBar.add(codeMenu) viewMenu = JMenu('View') viewMenu.add(JCheckBoxMenuItem('Full screen')) viewMenu.add(JSeparator()) # Using JSeparator() # viewMenu.addSeparator() # Using addSeparator() # viewMenu.insertSeparator( 1 ) # viewMenu.add(JCheckBoxMenuItem('Word wrap')) menuBar.add(viewMenu) return menuBar
def run(scene, w=512, h=512, aa=1, threads=1): """Create GUI and perform ray-tracing.""" # Make Swing not look like garbage (so much) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) # Setup frame frame = JFrame("RayTracer", defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(w, h)) frame.setIconImage(ImageIcon("resources/icon.png").getImage()) canvas = RayTracePanel(w, h, aa, threads) frame.getContentPane().add(JScrollPane(canvas)) # Save FileChooser fcS = JFileChooser() fcS.addChoosableFileFilter(FileNameExtensionFilter("Windows Bitmap (*.bmp)", ["bmp"])) fcS.addChoosableFileFilter(FileNameExtensionFilter("JPEG / JFIF (*.jpg)", ["jpg"])) fcS.addChoosableFileFilter(FileNameExtensionFilter("Portable Network Graphics (*.png)", ["png"])) def saveFile(event): """Performed when the save button is pressed""" result = fcS.showSaveDialog(frame) if result == JFileChooser.APPROVE_OPTION: file = fcS.getSelectedFile() fname = file.getPath() ext = fcS.getFileFilter().getExtensions()[0] if not fname.endswith("." + ext): file = File(fname + "." + ext) canvas.saveToFile(file, ext) # Open FileChooser fcO = JFileChooser() fcO.addChoosableFileFilter(FileNameExtensionFilter("RayTrace Scene File (*.rts)", ["rts"])) def openFile(event): """Performed when the open button is pressed""" result = fcO.showOpenDialog(frame) if result == JFileChooser.APPROVE_OPTION: fname = fcO.getSelectedFile().getPath() if fname.endswith(".rts"): f = open(fname, "rb") newScene = SceneFactory().buildScene(f) f.close() Painter(canvas, newScene, openButton, saveButton, stopButton).start() def exit(event): """Performed when the exit button is pressed""" import sys sys.exit(0) def stop(event): """Peformed when the stop button is pressed""" canvas.stopRendering() # Setup Menu menuBar = JMenuBar() menu = JMenu("File") menuBar.add(menu) openButton = JMenuItem("Open...", actionPerformed=openFile) openButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)) menu.add(openButton) saveButton = JMenuItem("Save as...", actionPerformed=saveFile) saveButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)) menu.add(saveButton) menu.addSeparator() stopButton = JMenuItem("Stop Render", actionPerformed=stop) stopButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)) stopButton.setEnabled(False) menu.add(stopButton) menu.addSeparator() closeButton = JMenuItem("Close", actionPerformed=exit) closeButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)) menu.add(closeButton) frame.setJMenuBar(menuBar) # Finish initializing GUI self.pack()
def __init__(self, frame): self.frame = frame # TODO do I need a reference to frame after the constructor? self.history = History(self) self.bs = 0 # what is this? # command buffer self.buffer = [] self.locals = {"gvSIG": sys.gvSIG} self.interp = Interpreter(self, self.locals) sys.stdout = StdOutRedirector(self) # create a textpane self.output = JTextPane(keyTyped=self.keyTyped, keyPressed=self.keyPressed) # TODO rename output to textpane # CTRL UP AND DOWN don't work keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_UP, 0, "jython.up", self.history.historyUp), (KeyEvent.VK_DOWN, 0, "jython.down", self.history.historyDown), (KeyEvent.VK_PERIOD, 0, "jython.showPopup", self.showPopup), (KeyEvent.VK_ESCAPE, 0, "jython.hide", self.hide), ('(', 0, "jython.showTip", self.showTip), (')', 0, "jython.hideTip", self.hideTip), #(KeyEvent.VK_UP, InputEvent.CTRL_MASK, DefaultEditorKit.upAction, self.output.keymap.getAction(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0))), #(KeyEvent.VK_DOWN, InputEvent.CTRL_MASK, DefaultEditorKit.downAction, self.output.keymap.getAction(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0))) ] # TODO rename newmap to keymap newmap = JTextComponent.addKeymap("jython", self.output.keymap) for (key, modifier, name, function) in keyBindings: newmap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.output.keymap = newmap self.doc = self.output.document #self.panel.add(BorderLayout.CENTER, JScrollPane(self.output)) self.__propertiesChanged() self.__inittext() self.initialLocation = self.doc.createPosition(self.doc.length - 1) # Don't pass frame to popups. JWindows with null owners are not focusable # this fixes the focus problem on Win32, but make the mouse problem worse self.popup = Popup(None, self.output) self.tip = Tip(None) # get fontmetrics info so we can position the popup metrics = self.output.getFontMetrics(self.output.getFont()) self.dotWidth = metrics.charWidth('.') self.textHeight = metrics.getHeight() # add some handles to our objects self.locals['console'] = self self.caret = self.output.getCaret()
def run(scene, w=512, h=512, aa=1, threads=1): '''Create GUI and perform ray-tracing.''' #Make Swing not look like garbage (so much) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) #Setup frame frame = JFrame( "RayTracer", defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(w, h) ) frame.setIconImage(ImageIcon('resources/icon.png').getImage()) canvas = RayTracePanel(w, h, aa, threads) frame.getContentPane().add(JScrollPane(canvas)) #Save FileChooser fcS = JFileChooser() fcS.addChoosableFileFilter(FileNameExtensionFilter('Windows Bitmap (*.bmp)', ['bmp'])) fcS.addChoosableFileFilter(FileNameExtensionFilter('JPEG / JFIF (*.jpg)', ['jpg'])) fcS.addChoosableFileFilter(FileNameExtensionFilter('Portable Network Graphics (*.png)', ['png'])) def saveFile(event): '''Performed when the save button is pressed''' result = fcS.showSaveDialog(frame) if result == JFileChooser.APPROVE_OPTION: file = fcS.getSelectedFile() fname = file.getPath() ext = fcS.getFileFilter().getExtensions()[0] if not fname.endswith('.' + ext): file = File(fname + '.' + ext) canvas.saveToFile(file, ext) #Open FileChooser fcO = JFileChooser() fcO.addChoosableFileFilter(FileNameExtensionFilter('RayTrace Scene File (*.rts)', ['rts'])) def openFile(event): '''Performed when the open button is pressed''' result = fcO.showOpenDialog(frame) if result == JFileChooser.APPROVE_OPTION: fname = fcO.getSelectedFile().getPath() if fname.endswith('.rts'): f = open(fname, 'rb') newScene = SceneFactory().buildScene(f) f.close() Painter(canvas, newScene, openButton, saveButton).start() def exit(event): '''Performed when the exit button is pressed''' import sys sys.exit(0) #Setup Menu menuBar = JMenuBar() menu = JMenu("File") menuBar.add(menu) openButton = JMenuItem("Open...", actionPerformed=openFile) openButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)) menu.add(openButton) saveButton = JMenuItem("Save as...", actionPerformed=saveFile) saveButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)) menu.add(saveButton) menu.addSeparator() closeButton = JMenuItem('Close', actionPerformed=exit) closeButton.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)) menu.add(closeButton) frame.setJMenuBar(menuBar) #Finish initializing GUI frame.pack() #frame.setLocationRelativeTo(None) frame.setVisible(True) #Perform ray-tracing if scene is not None: Thread(Painter(canvas, scene, openButton, saveButton)).start()
def clientUI(self): '''ClientUI and Widget creation ''' # Colours foreground_colour = Color(30,57,68) background_colour = Color(247,246,242) window_background = Color(145,190,210) # Borders self.border2=BorderFactory.createLineBorder(foreground_colour,1, True) # Fonts self.font= Font("Ubuntu Light", Font.BOLD, 20) self.label_font= Font("Ubuntu Light", Font.BOLD, 17) self.label_2_font= Font( "Ubuntu Light",Font.BOLD, 12) self.btn_font=Font("Ubuntu Light", Font.BOLD, 15) # Set the layout parameters self.client_layout=GroupLayout(self.getContentPane()) self.getContentPane().setLayout(self.client_layout) self.getContentPane().setBackground(window_background) self.client_layout.setAutoCreateGaps(True) self.client_layout.setAutoCreateContainerGaps(True) self.setPreferredSize(Dimension(400, 450)) # Create widgets and assemble the GUI # Main display area self.main_content=JTextPane() self.main_content.setBackground(background_colour) #self.main_content.setForeground(foreground_colour) self.main_content.setEditable(False) # Message entry area self.message=JTextArea( 2,2, border=self.border2, font=self.label_font, keyPressed=self.returnKeyPress) self.message.requestFocusInWindow() self.message.setBackground(background_colour) self.message.setForeground(foreground_colour) self.message.setLineWrap(True) self.message.setWrapStyleWord(True) self.message.setBorder(BorderFactory.createEmptyBorder(3,3,3,3)) self.message.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), self.returnKeyPress) # BUttons quit_btn=JButton("Quit!", actionPerformed=ChatApp().closeEvent, border=self.border2, font=self.btn_font) go_btn=JButton("Send", actionPerformed=self.grabText, border=self.border2, font=self.btn_font) quit_btn.setBackground(background_colour) go_btn.setBackground(background_colour) quit_btn.setForeground(foreground_colour) go_btn.setForeground(foreground_colour) # Make scrollable self.scroll_content=JScrollPane(self.main_content) self.scroll_content.setPreferredSize(Dimension(150,275)) self.scroll_content.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER) self.scroll_content.setViewportView(self.main_content) self.scroll_content.setBackground(Color.WHITE) self.scroll_message=JScrollPane(self.message) self.scroll_message.setPreferredSize(Dimension(150,20)) self.scroll_message.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) # Test user label, still not updating after first round of messages self.user_label=JLabel(" Users online : %s "%(str(len(self.no_users))),JLabel.RIGHT, font=self.label_2_font) # Assemble the components # Horizontal layout self.client_layout.setHorizontalGroup(self.client_layout.createParallelGroup() .addComponent(self.scroll_content) .addGroup(self.client_layout.createParallelGroup(GroupLayout.Alignment.CENTER) .addComponent(self.scroll_message)) .addGroup(self.client_layout.createSequentialGroup() .addComponent(quit_btn) .addComponent(go_btn).addGap(20)) .addGroup(self.client_layout.createParallelGroup() .addComponent(self.user_label)) ) # Vertical layout self.client_layout.setVerticalGroup(self.client_layout.createSequentialGroup() .addGroup(self.client_layout.createParallelGroup() .addComponent(self.scroll_content)) .addComponent(self.scroll_message) .addGroup(self.client_layout.createParallelGroup() .addComponent(quit_btn) .addComponent(go_btn)) .addGroup(self.client_layout.createParallelGroup() .addComponent(self.user_label)) ) # Finalise the GUI self.client_layout.linkSize(SwingConstants.HORIZONTAL, [quit_btn,go_btn, self.user_label]) self.pack() self.message.requestFocusInWindow() self.setTitle(">>> Client %s <<<"%self.username) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) # Display the server greeting self.appendText('\n'+self.greeting+'\n')
def run(scene, w=512, h=512, aa=1, threads=1): '''Create GUI and perform ray-tracing.''' #Make Swing not look like garbage (so much) UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) #Setup frame frame = JFrame("RayTracer", defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(w, h)) frame.setIconImage(ImageIcon('resources/icon.png').getImage()) canvas = RayTracePanel(w, h, aa, threads) frame.getContentPane().add(JScrollPane(canvas)) #Save FileChooser fcS = JFileChooser() fcS.addChoosableFileFilter( FileNameExtensionFilter('Windows Bitmap (*.bmp)', ['bmp'])) fcS.addChoosableFileFilter( FileNameExtensionFilter('JPEG / JFIF (*.jpg)', ['jpg'])) fcS.addChoosableFileFilter( FileNameExtensionFilter('Portable Network Graphics (*.png)', ['png'])) def saveFile(event): '''Performed when the save button is pressed''' result = fcS.showSaveDialog(frame) if result == JFileChooser.APPROVE_OPTION: file = fcS.getSelectedFile() fname = file.getPath() ext = fcS.getFileFilter().getExtensions()[0] if not fname.endswith('.' + ext): file = File(fname + '.' + ext) canvas.saveToFile(file, ext) #Open FileChooser fcO = JFileChooser() fcO.addChoosableFileFilter( FileNameExtensionFilter('RayTrace Scene File (*.rts)', ['rts'])) def openFile(event): '''Performed when the open button is pressed''' result = fcO.showOpenDialog(frame) if result == JFileChooser.APPROVE_OPTION: fname = fcO.getSelectedFile().getPath() if fname.endswith('.rts'): f = open(fname, 'rb') newScene = SceneFactory().buildScene(f) f.close() Painter(canvas, newScene, openButton, saveButton).start() def exit(event): '''Performed when the exit button is pressed''' import sys sys.exit(0) #Setup Menu menuBar = JMenuBar() menu = JMenu("File") menuBar.add(menu) openButton = JMenuItem("Open...", actionPerformed=openFile) openButton.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK)) menu.add(openButton) saveButton = JMenuItem("Save as...", actionPerformed=saveFile) saveButton.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)) menu.add(saveButton) menu.addSeparator() closeButton = JMenuItem('Close', actionPerformed=exit) closeButton.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_F4, ActionEvent.ALT_MASK)) menu.add(closeButton) frame.setJMenuBar(menuBar) #Finish initializing GUI frame.pack() #frame.setLocationRelativeTo(None) frame.setVisible(True) #Perform ray-tracing if scene is not None: Thread(Painter(canvas, scene, openButton, saveButton)).start()
def control(key): return KeyStroke.getKeyStroke(keyCode(key), CONTROL_MASK)
def __init__(self, view): """ Constructor, initialized all the main variables and layout """ # Initializes variables self.view = view self.history = History(self) self.bs = 0 self.indenter = TabIndenter() self.exporterConsole = None self.executor = JythonExecutor.getExecutor() # Creates toolbar actions = [ ("Run.png", "jython.tooltip-run", self.runBuffer), \ ("RunToBuffer.png", "jython.tooltip-run-another", self.runBufferToWindow), \ ("RunAgain.png", "jython.tooltip-import", self.importBuffer), \ ("MultipleResults.png", "jython.tooltip-path", self.path), \ ("Open.png", "jython.tooltip-browse-path", self.browse), \ ("CopyToBuffer.png", "jython.tooltip-save-session", self.savesession), \ ("separator", None, None), \ ("Clear.png", "jython.tooltip-restart", self.restart), ("separator", None, None), ("Parse.png", "jython.tooltip-tabnanny", self.tabnanny), ("separator", None, None), ("Help.png", "jython.tooltip-about", self.about)] self.panel = JPanel(BorderLayout()) self.panel.add(BorderLayout.NORTH, ToolbarHandler(actions).createToolbar()) # Creates text pane and make keybindings # self.output = JTextPane(keyTyped = self.keyTyped, keyPressed = self.keyPressed, keyReleased = self.keyReleased) self.output = JTextPane(keyTyped=self.keyTyped, keyPressed=self.keyPressed) if jEdit.getBooleanProperty("options.jython.upDownFlag"): keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_UP, 0, "jython.up", self.history.historyUp), (KeyEvent.VK_DOWN, 0, "jython.down", self.history.historyDown), (KeyEvent.VK_UP, InputEvent.CTRL_MASK, DefaultEditorKit.upAction, self.output.keymap.getAction( KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0))), (KeyEvent.VK_DOWN, InputEvent.CTRL_MASK, DefaultEditorKit.downAction, self.output.keymap.getAction( KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0))) ] else: keyBindings = [ (KeyEvent.VK_ENTER, 0, "jython.enter", self.enter), (KeyEvent.VK_DELETE, 0, "jython.delete", self.delete), (KeyEvent.VK_HOME, 0, "jython.home", self.home), (KeyEvent.VK_UP, InputEvent.CTRL_MASK, "jython.historyup", \ self.history.historyUp), (KeyEvent.VK_DOWN, InputEvent.CTRL_MASK, "jython.historydown", \ self.history.historyDown) ] newmap = JTextComponent.addKeymap("jython", self.output.keymap) for (key, modifier, name, function) in keyBindings: newmap.addActionForKeyStroke(KeyStroke.getKeyStroke(key, modifier), ActionDelegator(name, function)) self.output.keymap = newmap self.doc = self.output.document self.panel.add(BorderLayout.CENTER, JScrollPane(self.output)) self.__propertiesChanged() self.__inittext() self.initialLocation = self.doc.createPosition(self.doc.length - 1)
def menu_with_accelerator(menuText, accelerator_pair): menu = JMenuItem(menuText) menu.setAccelerator(KeyStroke.getKeyStroke(*accelerator_pair)) return menu
def __init__(self, windowManager, commandConsoleFactory, subject, windowTitle): self._windowManager = windowManager self.onCloseRequestListener = None # EDIT MENU transferActionListener = _TransferActionListener() editMenu = JMenu( 'Edit' ) if Platform.getPlatform() is Platform.MAC: command_key_mask = ActionEvent.META_MASK else: command_key_mask = ActionEvent.CTRL_MASK; self.__editUndoItem = JMenuItem( 'Undo' ) undoAction = _action( 'undo', self.__onUndo ) self.__editUndoItem.setActionCommand( undoAction.getValue( Action.NAME ) ) self.__editUndoItem.addActionListener( undoAction ) self.__editUndoItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Z, command_key_mask ) ) self.__editUndoItem.setMnemonic( KeyEvent.VK_U ) editMenu.add( self.__editUndoItem ) self.__editRedoItem = JMenuItem( 'Redo' ) redoAction = _action( 'redo', self.__onRedo ) self.__editRedoItem.setActionCommand( redoAction.getValue( Action.NAME ) ) self.__editRedoItem.addActionListener( redoAction ) self.__editRedoItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Y, command_key_mask ) ) self.__editRedoItem.setMnemonic( KeyEvent.VK_R ) editMenu.add( self.__editRedoItem ) editMenu.addSeparator() editCutItem = JMenuItem( 'Cut' ) editCutItem.setActionCommand( TransferHandler.getCutAction().getValue( Action.NAME ) ) editCutItem.addActionListener( transferActionListener ) editCutItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_X, command_key_mask ) ) editCutItem.setMnemonic( KeyEvent.VK_T ) editMenu.add( editCutItem ) editCopyItem = JMenuItem( 'Copy' ) editCopyItem.setActionCommand( TransferHandler.getCopyAction().getValue( Action.NAME ) ) editCopyItem.addActionListener( transferActionListener ) editCopyItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_C, command_key_mask ) ) editCopyItem.setMnemonic( KeyEvent.VK_C ) editMenu.add( editCopyItem ) editPasteItem = JMenuItem( 'Paste' ) editPasteItem.setActionCommand( TransferHandler.getPasteAction().getValue( Action.NAME ) ) editPasteItem.addActionListener( transferActionListener ) editPasteItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_V, command_key_mask ) ) editPasteItem.setMnemonic( KeyEvent.VK_P ) editMenu.add( editPasteItem ) editMenu.addSeparator() self.__showUndoHistoryItem = JMenuItem( 'Show undo history' ) self.__showUndoHistoryItem.addActionListener( _action( 'Show undo history', self.__onShowUndoHistory ) ) editMenu.add( self.__showUndoHistoryItem ) # HELP MENU helpMenu = JMenu( 'Help' ) helpToggleTooltipHighlightsItem = JMenuItem( 'Toggle tooltip highlights' ) toggleTooltipHighlightsAction = _action( 'Toggle tooltip highlights', self.__onToggleTooltipHighlights ) helpToggleTooltipHighlightsItem.setActionCommand( toggleTooltipHighlightsAction.getValue( Action.NAME ) ) helpToggleTooltipHighlightsItem.addActionListener( toggleTooltipHighlightsAction ) helpToggleTooltipHighlightsItem.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_F2, 0 ) ) helpMenu.add( helpToggleTooltipHighlightsItem ) helpMenu.add( _action( 'Show all tip boxes', self.__onShowAllTipBoxes ) ) # MENU BAR menuBar = JMenuBar() menuBar.add( editMenu ) menuBar.add( helpMenu ) # BROWSER # Initialise here, as the browser listener may invoke methods upon the browser's creation class _BrowserListener (TabbedBrowser.TabbedBrowserListener): def createNewBrowserWindow(_self, subject): self._onOpenNewWindow( subject ) def onTabbledBrowserChangePage(_self, browser): pass def inspectFragment(fragment, sourceElement, triggeringEvent): return self._windowManager.world.inspectFragment( fragment, sourceElement, triggeringEvent ) def onChangeHistoryChanged(history): self.__refreshChangeHistoryControls( history ) self._browser = TabbedBrowser( self._windowManager.world.rootSubject, subject, inspectFragment, _BrowserListener(), commandConsoleFactory ) self._browser.getComponent().setPreferredSize( Dimension( 800, 600 ) ) changeHistory = self._browser.getChangeHistory() self._browser.getChangeHistory().addChangeHistoryListener(onChangeHistoryChanged) # MAIN PANEL windowPanel = JPanel() windowPanel.setLayout( BoxLayout( windowPanel, BoxLayout.Y_AXIS ) ) windowPanel.add( self._browser.getComponent() ) # WINDOW class _WindowLister (WindowListener): def windowActivated(listenerSelf, event): pass def windowClosed(listenerSelf, event): pass def windowClosing(listenerSelf, event): if self.onCloseRequestListener is not None: self.onCloseRequestListener( self ) def windowDeactivated(listenerSelf, event): pass def windowDeiconified(listenerSelf, event): pass def windowIconified(listenerSelf, event): pass def windowOpened(listenerSelf, event): pass self.__frame = JFrame( windowTitle ) self.__frame.setJMenuBar( menuBar ) self.__frame.add( windowPanel ) self.__frame.addWindowListener( _WindowLister() ) self.__frame.setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE ) self.__frame.pack() # Cause command history controls to refresh self.__refreshChangeHistoryControls( None )
def add_key_args(component, action_str, action, *args): # print(args) key_stroke = KeyStroke.getKeyStroke(*args) add_key_binding(component, action_str, action, key_stroke)
def new_item(title, cmd, key, mod=shortcut): item = JMenuItem(title, actionCommand=cmd) item.accelerator = KeyStroke.getKeyStroke(key, mod) item.addActionListener(self) return item
def keyStroke(key): return KeyStroke.getKeyStroke(keyCode(key), 0)
def controlShift(key): return KeyStroke.getKeyStroke(keyCode(key), CONTROL_MASK + InputEvent.SHIFT_MASK)
class UI: global dssFile mainWindow = ListSelection.getMainWindow() dssFileName = mainWindow.getDSSFilename() dssFile = HecDss.open(dssFileName) global frame, lbl_close, list_locations, chckbxShowLocationPlot, eventsTable, dm_events, dm_meltRate global swePaths, precipPaths, tempPaths, bList, meltRateTable, startDateField, endDateField frame = JFrame("Snow PAC - Parameter Aggregator & Calculator") # frame.setUndecorated(True) frame.setBackground(Color.WHITE) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setBounds(100, 100, 1110, 775) contentPane = JPanel() contentPane.setBackground(Color.WHITE) contentPane.setBorder(EmptyBorder(5, 5, 5, 5)) frame.setContentPane(contentPane) contentPane.setLayout(None) class MouseListener(MouseAdapter): # @Override def mousePressed(self, e): global xx global xy xx = e.getX() xy = e.getY() class MouseMotionListener(MouseMotionAdapter): # @Override def mouseDragged(self, arg0): x = arg0.getXOnScreen() y = arg0.getYOnScreen() frame.setLocation(x - xx, y - xy) mL = MouseListener() mML = MouseMotionListener() contentPane.addMouseListener(mL) contentPane.addMouseMotionListener(mML) if os.path.exists(img_dir + "/button.jpg"): btnIcon = ImageIcon(img_dir + "/button.jpg") else: btnIcon = ImageIcon(img_dir2 + "/button.jpg") scrollPane_events = JScrollPane() scrollPane_events.setBounds(270, 372, 403, 263) contentPane.add(scrollPane_events) scrollPane_locations = JScrollPane() scrollPane_locations.setBounds(270, 49, 403, 203) contentPane.add(scrollPane_locations) class deleteAction(AbstractAction): def actionPerformed(self, deleteEvent): # Get selected Rows and reverse list. Removes each row in list one at a time. # List is Reversed using [::-1], so it doesn't mess up the ordering as it deletes through the loop. for row in meltRateTable.getSelectedRows()[::-1]: dm_meltRate.removeRow(row) dm_meltRate.insertRow(row, [None, None]) scrollPane_table = JScrollPane() scrollPane_table.setBounds(708, 49, 338, 586) contentPane.add(scrollPane_table) meltRateTable = JTable() scrollPane_table.setViewportView(meltRateTable) scrollPane_table.setBorder(LineBorder(Color(1, 1, 1), 2, True)) meltRateTable.setFont(Font("Tahoma", Font.PLAIN, 11)) columns = ("ATI (Deg F-Day)", "Meltrate (Inches/Deg F-Day)") data = [] datarows = 100 data.append([0, None]) for i in range(datarows): data.append([None, None]) dm_meltRate = DefaultTableModel(data, columns) meltRateTable.setModel(dm_meltRate) meltRateTable.getColumnModel().getColumn(0).setPreferredWidth(154) meltRateTable.getColumnModel().getColumn(1).setResizable(False) meltRateTable.getColumnModel().getColumn(1).setPreferredWidth(154) meltRateTable.setCellSelectionEnabled(True) # Delete data from the table using the Delete Key. # meltRateTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); inputMap = meltRateTable.getInputMap(JComponent.WHEN_FOCUSED) actionMap = meltRateTable.getActionMap() deleteActionStr = "delete" inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), deleteActionStr) actionMap.put(deleteActionStr, deleteAction()) # jLabelStartDate = JLabel() # jLabelStartDate.setText("Optional Start Date:") # jLabelStartDate.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.") # jLabelStartDate.setBounds(420, 263, 120, 20); # jLabelStartDate.setFont( Font("Tahoma", Font.PLAIN, 12)) # contentPane.add(jLabelStartDate) # # startDateField = CalendarField(); # jLabelStartDate.setLabelFor(startDateField); # startDateField.setMargin(Insets(0, 4, 0, 0)); # startDateField.setBounds(540, 263, 118, 22); # startDateField.setFont(Font("Tahoma", Font.PLAIN, 12)); # startDateField.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.") # contentPane.add(startDateField); # # jLabelEndDate = JLabel() # jLabelEndDate.setText("Optional End Date:") # jLabelEndDate.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.") # jLabelEndDate.setBounds(420, 293, 120, 20); # jLabelEndDate.setFont( Font("Tahoma", Font.PLAIN, 12)) # contentPane.add(jLabelEndDate) # # endDateField = CalendarField(); # jLabelEndDate.setLabelFor(endDateField); # endDateField.setMargin(Insets(0, 4, 0, 0)); # endDateField.setBounds(540, 293, 118, 22); # endDateField.setFont(Font("Tahoma", Font.PLAIN, 12)); # endDateField.setToolTipText("Optional User Specified Date Range for Paired Data. If Specified, Will be Calculated for each Water Year.") # contentPane.add(endDateField); def recalcBtnSelect(event): global swePaths, precipPaths, tempPaths selectedLocations = list_locations.getSelectedValuesList() swePaths, precipPaths, tempPaths = Locations.getSelectedLocations( selectedLocations) pathsNoDPart, sList, pList, tList = CalcAtiMelt.processPathsLists( swePaths, precipPaths, tempPaths) dList = CalcAtiMelt.processPathsDatesList(pathsNoDPart) aList, mList = CalcAtiMelt.calcATIMelt(selectedLocations, sList, pList, tList, dList) # Write Melt-Cum and ATI Locations to DSS. CalcAtiMelt.writeAtiMelt(selectedLocations, dList, aList, mList) # Plot Locations if checkbox.selected = True. if chckbxShowLocationPlot.selected is True: # print '\nPLOT TEAM ACTIVATE' PlotAtiMelt.plotAtiMelt(selectedLocations) # Use optional specified dates if fields are not blank. # if startDateField.getText() and endDateField.getText() is not None: # pdStart, pdEnd = ProcessPD.getSpecifiedDates(startDateField, endDateField) # else: pdStart = None pdEnd = None # Create Paired Data for Selected Locations. ProcessPD.processPairedData(selectedLocations, dList, mList, aList, pdStart, pdEnd) # Populate the UI Paired Data Table. CalcPD.updatePDTable(dssFile, eventsTable, dm_events) # Close the DSS File. dssFile.close() def plotPDBtnSelect(event): selected_Events = eventsTable.getSelectedRows() # Print 'selected_Events: ', selected_Events # Sorting of the table by selecting the headers is doen by using: eventsTable.setAutoCreateRowSorter(True) # This sorts the table but does not update the table model. # To ensure sorting and selecting of resulting paths works properly, # we must convert our selection using: eventsTable.convertRowIndexToModel(event) selectedEvents = [] for event in selected_Events: selectedEvents.append(eventsTable.convertRowIndexToModel(event)) # print 'selectedEvents: ', selectedEvents PlotPD.plotPD(eventsTable, selectedEvents, dssFile) dssFile.close() def calcMeltRateBtnSelect(event): selected_Events = eventsTable.getSelectedRows() selectedEvents = [] for event in selected_Events: selectedEvents.append(eventsTable.convertRowIndexToModel(event)) meltRateList = CalcMeltRate.calcMeltRate(selectedEvents, eventsTable, meltRateTable, dssFile) CalcMeltRate.updateTable(meltRateTable, meltRateList, dm_meltRate) dssFile.close() locDict, bList = Locations.getPaths(dssFile) locList = Locations.getList(locDict) list_locations = JList(locList) scrollPane_locations.setViewportView(list_locations) list_locations.setBorder(LineBorder(Color(0, 0, 0), 2, True)) eventsTable = JTable() scrollPane_events.setViewportView(eventsTable) scrollPane_events.setBorder(LineBorder(Color(1, 1, 1), 2, True)) eventsTable.setFont(Font("Tahoma", Font.PLAIN, 11)) locationsList, eventsList = Locations.getPairedData(dssFile) columns = ("Location", "Event") data = [] for l, e in zip(locationsList, eventsList): data.append([l, e]) dm_events = DefaultTableModel(data, columns) eventsTable.setModel(dm_events) eventsTable.setAutoCreateRowSorter(True) eventsTable.getColumnModel().getColumn(0).setPreferredWidth(154) eventsTable.getColumnModel().getColumn(1).setResizable(False) eventsTable.getColumnModel().getColumn(1).setPreferredWidth(154) eventsTable.setRowSelectionAllowed(True) inputPanel = JPanel() inputPanel.setBorder(EmptyBorder(0, 0, 0, 0)) inputPanel.setBackground(Color(255, 255, 255)) inputPanel.setBounds(270, 11, 410, 27) contentPane.add(inputPanel) inputPanel.setLayout(None) inputPanel.setVisible(True) lbl_locations = JLabel( "DSS Locations that have PRECIP-INC, TEMPERATURE-AIR-AVG, and SWE. ") lbl_locations.setFont(Font("Tahoma", Font.PLAIN, 12)) lbl_locations.setBounds(0, 11, 410, 15) inputPanel.add(lbl_locations) btnRecalc = JButton(btnIcon, actionPerformed=recalcBtnSelect) btnRecalc.setText("Calculate Paired Data") btnRecalc.setFont(Font("Tahoma", Font.BOLD, 12)) btnRecalc.setForeground(Color.WHITE) btnRecalc.setBackground(Color.WHITE) btnRecalc.setBorderPainted(False) btnRecalc.setContentAreaFilled(False) btnRecalc.setFocusPainted(False) btnRecalc.setOpaque(True) btnRecalc.setVerticalTextPosition(SwingConstants.CENTER) btnRecalc.setHorizontalTextPosition(SwingConstants.CENTER) btnRecalc.setBounds(382, 293, 165, 54) contentPane.add(btnRecalc) leftPanel = JPanel() leftPanel.setBackground(Color.DARK_GRAY) leftPanel.setBounds(0, 0, 250, 780) contentPane.add(leftPanel) leftPanel.setLayout(None) lbl_castle = JLabel("") lbl_castle.setBounds(110, 678, 40, 25) leftPanel.add(lbl_castle) try: i_corps = ImageIO.read(File(img_dir + "/CorpsCastle.png")) except: i_corps = ImageIO.read(File(img_dir2 + "/CorpsCastle.png")) corpsCastle = i_corps.getScaledInstance(lbl_castle.getWidth(), lbl_castle.getHeight(), Image.SCALE_SMOOTH) lbl_castle.setVerticalAlignment(SwingConstants.TOP) lbl_castle.setIcon(ImageIcon(corpsCastle)) lbl_logo = JLabel("") lbl_logo.setBounds(18, 294, 218, 148) leftPanel.add(lbl_logo) try: snowLogo = ImageIO.read(File(img_dir + "/melted-snowman.png")) except: snowLogo = ImageIO.read(File(img_dir2 + "/melted-snowman.png")) dssLogo = snowLogo.getScaledInstance(lbl_logo.getWidth(), lbl_logo.getHeight(), Image.SCALE_SMOOTH) lbl_logo.setVerticalAlignment(SwingConstants.TOP) lbl_logo.setIcon(ImageIcon(dssLogo)) lbl_logo2 = JLabel("") lbl_logo2.setBounds(18, 11, 218, 148) leftPanel.add(lbl_logo2) try: snowPacLogo = ImageIO.read(File(img_dir + "/SnowPac.png")) except: snowPacLogo = ImageIO.read(File(img_dir2 + "/SnowPac.png")) snowPac = snowPacLogo.getScaledInstance(lbl_logo2.getWidth(), lbl_logo2.getHeight(), Image.SCALE_SMOOTH) lbl_logo2.setVerticalAlignment(SwingConstants.TOP) lbl_logo2.setIcon(ImageIcon(snowPac)) # lbl_close = JLabel("X") # # class CloseClickListener(MouseAdapter): # # @Override # def mouseEntered(self): # lbl_close.setBorder(LineBorder.createGrayLineBorder()) # # @Override # def mouseExited(self): # lbl_close.setBorder(None) # # @Override # def mouseClicked(self): # lbl_close.setBorder(BorderFactory.createLineBorder(Color.red)); # sys.exit(); # cL = CloseClickListener() # lbl_close.addMouseListener(cL) # # lbl_close.setHorizontalAlignment(SwingConstants.CENTER); # lbl_close.setForeground(Color(241, 57, 83)); # lbl_close.setFont(Font("Tahoma", Font.PLAIN, 18)); # lbl_close.setBounds(1071, 0, 37, 27); # contentPane.add(lbl_close); lblPxf = JLabel("Base Temperature (F):") lblPxf.setToolTipText("The temperature at which melt will occur.") lblPxf.setFont(Font("Tahoma", Font.PLAIN, 12)) lblPxf.setBounds(400, 263, 132, 15) contentPane.add(lblPxf) textField_8 = JTextField() textField_8.setFont(Font("Tahoma", Font.PLAIN, 12)) textField_8.setToolTipText("The temperature at which melt will occur.") textField_8.setText("32.0") textField_8.setBounds(548, 263, 40, 20) contentPane.add(textField_8) textField_8.setColumns(10) chckbxShowLocationPlot = JCheckBox("Plot Locations") chckbxShowLocationPlot.setToolTipText( "Will plot the Temp, Precip, SWE, ATI, and Melt for each selected location." ) chckbxShowLocationPlot.setSelected(True) chckbxShowLocationPlot.setBackground(Color.WHITE) chckbxShowLocationPlot.setFont(Font("Tahoma", Font.PLAIN, 12)) chckbxShowLocationPlot.setBounds(547, 310, 120, 23) contentPane.add(chckbxShowLocationPlot) lblEvents = JLabel("Paired Data") lblEvents.setBounds(270, 346, 72, 15) contentPane.add(lblEvents) lblEvents.setFont(Font("Tahoma", Font.PLAIN, 12)) # lblAtiThreshold = JLabel("ATI Threshold:"); # lblAtiThreshold.setToolTipText("Some Melt Events are small & can be ignored. The ATI Threshold is a value that must be reached for the event to be listed."); # lblAtiThreshold.setFont(Font("Tahoma", Font.PLAIN, 12)); # lblAtiThreshold.setBounds(500, 610, 82, 15); # contentPane.add(lblAtiThreshold); # textField_9 = JTextField(); # textField_9.setFont(Font("Tahoma", Font.PLAIN, 12)); # textField_9.setText("0.0"); # textField_9.setToolTipText("Some Melt Events are small & can be ignored. The ATI Threshold is a value that must be reached for the event to be listed."); # textField_9.setColumns(10); # textField_9.setBounds(600, 608, 60, 20); # contentPane.add(textField_9); btnPlot = JButton(btnIcon, actionPerformed=plotPDBtnSelect) btnPlot.setText("Plot Paired Data") btnPlot.setFont(Font("Tahoma", Font.BOLD, 12)) btnPlot.setForeground(Color.WHITE) btnPlot.setBackground(Color.WHITE) btnPlot.setBorderPainted(False) btnPlot.setContentAreaFilled(False) btnPlot.setFocusPainted(False) btnPlot.setOpaque(False) btnPlot.setVerticalTextPosition(SwingConstants.CENTER) btnPlot.setHorizontalTextPosition(SwingConstants.CENTER) btnPlot.setBounds(385, 657, 163, 54) contentPane.add(btnPlot) lblAtimeltrateTable = JLabel("ATI-Meltrate Table") lblAtimeltrateTable.setFont(Font("Tahoma", Font.PLAIN, 12)) lblAtimeltrateTable.setBounds(708, 10, 410, 15) contentPane.add(lblAtimeltrateTable) lblAtimeltrateTable2 = JLabel( "The first ATI value should be 0. ATI values must be ascending.") lblAtimeltrateTable2.setFont(Font("Tahoma", Font.PLAIN, 11)) lblAtimeltrateTable2.setBounds(708, 30, 410, 15) contentPane.add(lblAtimeltrateTable2) btnCalculateMeltrate = JButton(btnIcon, actionPerformed=calcMeltRateBtnSelect) btnCalculateMeltrate.setText("Calculate Meltrate") btnCalculateMeltrate.setFont(Font("Tahoma", Font.BOLD, 12)) btnCalculateMeltrate.setToolTipText( "Calculate Meltrate for ATI values in the ATI-Meltrate Table. Calculation will performed on the Paired Data Records Selected in the Paired Data Table." ) btnCalculateMeltrate.setForeground(Color.WHITE) btnCalculateMeltrate.setBackground(Color.WHITE) btnCalculateMeltrate.setBorderPainted(False) btnCalculateMeltrate.setContentAreaFilled(False) btnCalculateMeltrate.setFocusPainted(False) btnCalculateMeltrate.setOpaque(False) btnCalculateMeltrate.setVerticalTextPosition(SwingConstants.CENTER) btnCalculateMeltrate.setHorizontalTextPosition(SwingConstants.CENTER) btnCalculateMeltrate.setBounds(792, 657, 163, 54) contentPane.add(btnCalculateMeltrate) frame.setVisible(True) dssFile.close()