def actionPerformed(self, e): bugs_tab = self.tabbed_panes[self.key].getComponentAt(1) tab_count = str(bugs_tab.getTabCount()) request_tab = self.view.set_request_tab_pane(self.request_response) response_tab = self.view.set_response_tab_pane(self.request_response) bugs_tabbed_pane = self.view.set_bugs_tabbed_pane(request_tab, response_tab) bugs_tab.add(tab_count, bugs_tabbed_pane) index = bugs_tab.indexOfTab(tab_count) panel_tab = JPanel(GridBagLayout()) panel_tab.setOpaque(False) label_title = JLabel(tab_count) # Create a button to close tab button_close = JButton("x") button_close.setToolTipText("Close tab") button_close.setOpaque(False); button_close.setContentAreaFilled(False); button_close.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)) button_close.setPreferredSize(Dimension(18, 18)) button_close.setMargin(Insets(0, 0, 0, 0)) button_close.setForeground(Color.gray) panel_tab.add(label_title) panel_tab.add(button_close) bugs_tab.setTabComponentAt(index, panel_tab) button_close.addMouseListener(CloseTab(button_close, bugs_tab))
def __init__(self, kconfig_file="Kconfig", config_file=".config", systemLogger=None): """[summary] Parameters ---------- kconfig_file : string (default: "Kconfig") The Kconfig configuration file config_file : string (default: ".config") The save file which will be used for loading and saving the settings systemLogger (default: None) A system logger object. If None then print statements are used for logging. """ global log if systemLogger: log = systemLogger # Load Kconfig configuration files self.kconfig = Kconfig(kconfig_file) setKConfig(self.kconfig) if os.path.isfile(config_file): log.info(self.kconfig.load_config(config_file)) elif os.path.isfile(".config"): log.info(self.kconfig.load_config(".config")) self.tree = KConfigTree(self.kconfig) self.tree.addTreeSelectionListener(self.treeSelectionChanged) jTreeSP = JScrollPane(self.tree) self.jta = JTextArea() self.jta.setEditable(False) jTextSP = JScrollPane(self.jta) toolPanel = JPanel() toolPanel.setLayout(BoxLayout(toolPanel, BoxLayout.X_AXIS)) toolPanel.setBorder(BorderFactory.createEmptyBorder(2, 0, 2, 0)) toolPanel.add(JLabel("Search: ")) jSearchPanel = JPanel() jSearchPanel.setLayout(BoxLayout(jSearchPanel, BoxLayout.X_AXIS)) self.jSearchField = JTextField() jSearchPanel.setBackground(self.jSearchField.getBackground()) jSearchPanel.setBorder(self.jSearchField.getBorder()) self.jSearchField.setBorder(None) self.jSearchField.getDocument().addDocumentListener( SearchListener(self.tree)) jSearchPanel.add(self.jSearchField) clearSearchButton = JButton(u'\u00d7', actionPerformed=self.clearSearch) d = clearSearchButton.getPreferredSize() clearSearchButton.setPreferredSize(Dimension(d.height, d.height)) clearSearchButton.setBackground(self.jSearchField.getBackground()) clearSearchButton.setBorder(None) clearSearchButton.setOpaque(False) clearSearchButton.setContentAreaFilled(False) clearSearchButton.setFocusPainted(False) jSearchPanel.add(clearSearchButton) toolPanel.add(jSearchPanel) self.showAllCheckBox = JCheckBox("Show all", actionPerformed=self.OnShowAllCheck) toolPanel.add(self.showAllCheckBox) splitPane = JSplitPane(JSplitPane.VERTICAL_SPLIT, jTreeSP, jTextSP) splitPane.setOneTouchExpandable(True) splitPane.setDividerLocation(300) treePanel = JPanel(BorderLayout()) treePanel.add(toolPanel, BorderLayout.NORTH) treePanel.add(splitPane, BorderLayout.CENTER) loadSavePanel = JPanel() loadSavePanel.setLayout(BoxLayout(loadSavePanel, BoxLayout.X_AXIS)) loadSavePanel.add( JButton("Load", actionPerformed=self.loadConfigDialog)) loadSavePanel.add( JButton("Save as", actionPerformed=self.writeConfigDialog)) self.rootPanel = JPanel() self.rootPanel.setLayout(BorderLayout()) self.rootPanel.add(loadSavePanel, BorderLayout.PAGE_START) self.rootPanel.add(treePanel, BorderLayout.CENTER)
class JTabPanel(JSplitPane, ActionListener, FocusListener): def __init__(self, ui): JSplitPane.__init__(self, JSplitPane.HORIZONTAL_SPLIT) self._ui = ui # create the executor object self._executor = Executor(self, ui.callbacks) #### # start Left Top split layout jLeftTopPanel = JPanel() jMenuPanel = JPanel() #Load button self.jLoad = JButton(Strings.jLoad_text) self.jLoad.addActionListener(self) #File name text field self.jFileName = JTextField(Strings.jFileName_default, 30) self.jFileName.setHorizontalAlignment(JTextField.CENTER) self.jFileName.setEditable(False) #Save button self.jSave = JButton(Strings.jSave_text) self.jSave.addActionListener(self) #Exit button self.jExit = JButton(Strings.jExit_text) self.jExit.addActionListener(self) #Wiki button (URL) self.jWiki = JButton(Strings.jWiki_title) self.jWiki.setToolTipText(Strings.jWiki_tooltip) self.jWiki.addActionListener(self) # make it borderless self.jWiki.setBorder(EmptyBorder(0, 0, 0, 0)) self.jWiki.setBorderPainted(False) self.jWiki.setContentAreaFilled(False) #Console text area jConsoleText = JTextArea() jConsoleText.setEditable(0) jConsoleText.setWrapStyleWord(1) jConsoleText.setRows(10) #set initial text jConsoleText.setText(Strings.jConsoleText_help) #make scrollable jScrollConsolePane = JScrollPane() jScrollConsolePane.setViewportView(jConsoleText) jMenuPanelLayout = GroupLayout(jMenuPanel) jMenuPanel.setLayout(jMenuPanelLayout) jMenuPanelLayout.setHorizontalGroup( jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING). addGroup(jMenuPanelLayout.createSequentialGroup().addContainerGap( ).addComponent(self.jLoad).addComponent( self.jFileName).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( self.jSave).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED). addComponent(self.jWiki).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( self.jExit).addContainerGap())) jMenuPanelLayout.setVerticalGroup( jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( jMenuPanelLayout.createSequentialGroup().addGroup( jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.jLoad).addComponent( self.jFileName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addComponent( self.jSave).addComponent( self.jWiki).addComponent( self.jExit)))) jLeftTopPanelLayout = GroupLayout(jLeftTopPanel) jLeftTopPanel.setLayout(jLeftTopPanelLayout) jLeftTopPanelLayout.setHorizontalGroup( jLeftTopPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( jMenuPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE).addComponent( jScrollConsolePane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767)) jLeftTopPanelLayout.setVerticalGroup( jLeftTopPanelLayout. createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( GroupLayout.Alignment.TRAILING, jLeftTopPanelLayout.createSequentialGroup().addComponent( jMenuPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( jScrollConsolePane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767))) # end Left Top split layout #### #### # start Left Down split layout jLeftDownPanel = JPanel() jMenu2Panel = JPanel() #Clear button self.jClear = JButton(Strings.jClear_text) self.jClear.setToolTipText(Strings.jClear_tooltip) self.jClear.addActionListener(self) #Run button self.jRun = JButton(Strings.jRun_text) self.jRun.setToolTipText(Strings.jRun_tooltip) self.jRun.addActionListener(self) #Variables text area jVarsPane = JTextPane() jVarsPane.setFont(Font('Monospaced', Font.PLAIN, 11)) jVarsPane.addFocusListener(self) # set initial value jVarsPane.setText(Strings.jVarsPane_header) # make scrollable jScrollpaneLeftDown = JScrollPane() jScrollpaneLeftDown.setViewportView(jVarsPane) jMenu2PanelLayout = GroupLayout(jMenu2Panel) jMenu2Panel.setLayout(jMenu2PanelLayout) jMenu2PanelLayout.setHorizontalGroup( jMenu2PanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( jMenu2PanelLayout.createSequentialGroup().addContainerGap( ).addComponent(self.jClear).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, 100, 32767).addComponent(self.jRun).addContainerGap())) jMenu2PanelLayout.setVerticalGroup( jMenu2PanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( jMenu2PanelLayout.createSequentialGroup().addGroup( jMenu2PanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.jClear).addComponent(self.jRun)))) jLeftDownPanelLayout = GroupLayout(jLeftDownPanel) jLeftDownPanel.setLayout(jLeftDownPanelLayout) jLeftDownPanelLayout.setHorizontalGroup( jLeftDownPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( jMenu2Panel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE).addComponent( jScrollpaneLeftDown, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767)) jLeftDownPanelLayout.setVerticalGroup( jLeftDownPanelLayout. createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( GroupLayout.Alignment.TRAILING, jLeftDownPanelLayout.createSequentialGroup().addComponent( jMenu2Panel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( jScrollpaneLeftDown, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767))) # end Left Down split layout #### #### # start Left layout jSplitPaneLeft = JSplitPane(JSplitPane.VERTICAL_SPLIT, jLeftTopPanel, jLeftDownPanel) jSplitPaneLeft.setDividerLocation(300) # end Left layout #### #### # start Right layout jScriptPane = JTextPane() jScriptPane.setFont(Font('Monospaced', Font.PLAIN, 11)) # set initial value jScriptPane.setText(Strings.jScriptPane_header) #jScriptPane.addMouseListener(self) jScrollPaneRight = JScrollPane() jScrollPaneRight.setViewportView(jScriptPane) # end Right layout #### self.setLeftComponent(jSplitPaneLeft) self.setRightComponent(jScrollPaneRight) self.setDividerLocation(450) #Exported variables self.jConsoleText = jConsoleText self.jScrollConsolePane = jScrollConsolePane self.jScriptPane = jScriptPane self.jVarsPane = jVarsPane def actionPerformed(self, event): #Load button was clicked #> opens the file chooser #> opens and parses the file #> populates the persistand value and script panes #> display path inside FileName field if self.jLoad == event.getSource(): if self.jFileName.getText() == Strings.jFileName_default: jFileChooser = JFileChooser() else: jFileChooser = JFileChooser(self.jFileName.getText()) result = jFileChooser.showOpenDialog(None) if result == JFileChooser.APPROVE_OPTION: selectedFile = jFileChooser.getSelectedFile() #Update the Tab Title if it contains a file name or default name currentTitle = self._ui.getTabName(self) currentFile = FileSystems.getDefault().getPath( self.jFileName.getText()).getFileName().toString() if self.jFileName.getText( ) == Strings.jFileName_default or currentTitle == currentFile: self._ui.setTabName( self, selectedFile.toPath().getFileName().toString()) # read from file (vars, script) = FileUtils.read(selectedFile.toPath()) if vars is None or script is None: # content could not be parsed JOptionPane.showMessageDialog(None, Strings.FileUtils_error, Strings.FileUtils_error, JOptionPane.ERROR_MESSAGE) else: # update var and scipt content self.jVarsPane.setText(vars) self.jScriptPane.setText(script) self._executor.init(vars) # update the File Name to the current choosen file self.jFileName.setText(selectedFile.getAbsolutePath()) #Save button clicked #> open the file chooser #> creates the file content #> writes the file on disk if self.jSave == event.getSource(): if self.jFileName.getText() == Strings.jFileName_default: jFileChooser = JFileChooser() else: jFileChooser = JFileChooser(self.jFileName.getText()) #self.jFileName.setText(selectedFile.getAbsolutePath()) result = jFileChooser.showSaveDialog(None) if result == JFileChooser.APPROVE_OPTION: selectedFile = jFileChooser.getSelectedFile() self.jFileName.setText(selectedFile.getAbsolutePath()) FileUtils.write(selectedFile.toPath(), self.jVarsPane.getText(), self.jScriptPane.getText()) #Wiki button clicked if self.jWiki == event.getSource(): uri = URI.create("https://github.com/DanNegrea/PyRules") if uri and Desktop.isDesktopSupported() and Desktop.getDesktop( ).isSupported(Desktop.Action.BROWSE): Desktop.getDesktop().browse(uri) #Exit button clicked if self.jExit == event.getSource(): result = JOptionPane.showConfirmDialog( None, Strings.jExit_confim_question, Strings.jExit_confim_title, JOptionPane.YES_NO_OPTION) if result == 0: self._ui.deleteTab(self) #Clear button clicked if self.jClear == event.getSource(): self.jConsoleText.setText("") self.log(self._executor.getVars(), "state") #Run once button clicked if self.jRun == event.getSource(): if self.isRequestFocusEnabled(): print "is RequestFocusEnabled" else: print "is NOT RequestFocusEnabled" if self.isFocusOwner(): print "is FocusOwner" else: print "is NOT FocusOwner" # request to init the vars (if edited) self.initVars() # request execution with toolFlag set to 999 (Run once) self.execute(999) def focusGained(self, event): pass #Reinitialize the state variables (Vars) def focusLost(self, event): if self.jVarsPane == event.getSource(): self.initVars() #Init the vars (persistant variables) def initVars(self): # get the text from the Vars pane end = self.jVarsPane.document.length varsText = self.jVarsPane.document.getText(0, end) # the executor initializes Vals if required self._executor.init(varsText) #Call the executor def execute(self, toolFlag, messageIsRequest=None, messageInfo=None): end = self.jScriptPane.document.length scriptText = self.jScriptPane.document.getText(0, end) self._executor.execute(scriptText, toolFlag, messageIsRequest, messageInfo) #Log the information into the console screen # type can be: # err - when printing errors # state - when printing the state variables (Vars) def log(self, obj, type=""): if type == "err": self.jConsoleText.append(Strings.jConsoleText_error) if type == "state": self.jConsoleText.append(Strings.jConsoleText_state) # if string just append. else use pformat from pprint if isinstance(obj, str): self.jConsoleText.append(obj + "\n") else: self.jConsoleText.append(pformat(obj) + "\n") # scroll to bottom verticalScrollBar = self.jScrollConsolePane.getVerticalScrollBar() verticalScrollBar.setValue(verticalScrollBar.getMaximum())
class ButtonPanel(Panel): playButton = None helpButton = None resetButton = None exitButton = None def __init__(self, inconsolePanel,dialogPanel): self.consolePanel = inconsolePanel self.dialogPanel = dialogPanel Panel.__init__(self, "gap 1px 1px, insets 0 0 0 0, flowy") def initUI(self): self.setBackground(Color(0, 50, 0)) self.playButtonS = ImageIcon('bin/gui/media/' + "playButton.png") self.helpButtonS = ImageIcon('bin/gui/media/' + "helpButton.png") self.resetButtonS = ImageIcon('bin/gui/media/' + "resetButton.png") self.exitButtonS = ImageIcon('bin/gui/media/' + "exitButton.png") self.playButtonU = ImageIcon('bin/gui/media/' + "playButton_unselected.png") self.helpButtonU = ImageIcon('bin/gui/media/' + "helpButton_unselected.png") self.resetButtonU = ImageIcon('bin/gui/media/' + "resetButton_unselected.png") self.exitButtonU = ImageIcon('bin/gui/media/' + "exitButton_unselected.png") class MouseHoverAdap(MouseAdapter): def __init__(self, butt, entImage, leaImage): self.entImage = entImage self.leaImage = leaImage self.butt = butt self.butt.setIcon(self.leaImage) def mouseEntered(self, m): self.butt.setIcon(self.entImage) #self.butt.repaint() def mouseExited(self, m): self.butt.setIcon(self.leaImage) #self.butt.repaint() self.playButton = JButton(self.playButtonS) self.playButton.setForeground(Color(0, 245, 0)) #self.playButton.setPreferredSize(Dimension(playButton.getIconWidth(), playButton.getIconHeight())) #self.playButton.setBackground(Color(125, 125, 25)) self.playButton.setMaximumSize(Dimension(self.playButtonS.getIconWidth(), self.playButtonS.getIconHeight())) self.playButton.setContentAreaFilled(False) self.helpButton = JButton(self.helpButtonS) self.helpButton.setForeground(Color(0, 235, 0)) self.helpButton.setMaximumSize(Dimension(self.helpButtonS.getIconWidth(), self.helpButtonS.getIconHeight())) self.helpButton.setContentAreaFilled(False) self.resetButton = JButton(self.resetButtonS) self.resetButton.setForeground(Color(0, 225, 0)) self.resetButton.setMaximumSize(Dimension(self.resetButtonS.getIconWidth(), self.resetButtonS.getIconHeight())) self.resetButton.setContentAreaFilled(False) self.exitButton = JButton(self.exitButtonS) self.exitButton.setForeground(Color(0, 215, 0)) self.exitButton.setContentAreaFilled(False) self.exitButton.setMaximumSize(Dimension(self.exitButtonS.getIconWidth(), self.exitButtonS.getIconHeight())) # self.playButton.addMouseListener(MouseHoverAdap(self.playButton, self.playButtonS, self.playButtonU)) # self.helpButton.addMouseListener(MouseHoverAdap(self.helpButton, self.helpButtonS, self.helpButtonU)) # self.resetButton.addMouseListener(MouseHoverAdap(self.resetButton, self.resetButtonS, self.resetButtonU)) # self.exitButton.addMouseListener(MouseHoverAdap(self.exitButton, self.exitButtonS, self.exitButtonU)) class PlayButtonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_play('')) self.playButton.addActionListener(PlayButtonActionListener()) class HelpBUttonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_hint('')) self.helpButton.addActionListener(HelpBUttonActionListener()) class ResetButtonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_reset('')) self.resetButton.addActionListener(ResetButtonActionListener()) class ExitButtonActionListener(ActionListener): def actionPerformed(button, e): System.exit(0) self.exitButton.addActionListener(ExitButtonActionListener()) def addUI(self): self.add(self.playButton, "push, grow") self.add(self.helpButton, "push, grow") self.add(self.resetButton, "push, grow") self.add(self.exitButton, "push, grow")
class ButtonPanel(Panel): playButton = None helpButton = None resetButton = None exitButton = None def __init__(self, inconsolePanel, dialogPanel): self.consolePanel = inconsolePanel self.dialogPanel = dialogPanel Panel.__init__(self, "gap 1px 1px, insets 0 0 0 0, flowy") def initUI(self): self.setBackground(Color(0, 50, 0)) self.playButtonS = ImageIcon('bin/gui/media/' + "playButton.png") self.helpButtonS = ImageIcon('bin/gui/media/' + "helpButton.png") self.resetButtonS = ImageIcon('bin/gui/media/' + "resetButton.png") self.exitButtonS = ImageIcon('bin/gui/media/' + "exitButton.png") self.playButtonU = ImageIcon('bin/gui/media/' + "playButton_unselected.png") self.helpButtonU = ImageIcon('bin/gui/media/' + "helpButton_unselected.png") self.resetButtonU = ImageIcon('bin/gui/media/' + "resetButton_unselected.png") self.exitButtonU = ImageIcon('bin/gui/media/' + "exitButton_unselected.png") class MouseHoverAdap(MouseAdapter): def __init__(self, butt, entImage, leaImage): self.entImage = entImage self.leaImage = leaImage self.butt = butt self.butt.setIcon(self.leaImage) def mouseEntered(self, m): self.butt.setIcon(self.entImage) #self.butt.repaint() def mouseExited(self, m): self.butt.setIcon(self.leaImage) #self.butt.repaint() self.playButton = JButton(self.playButtonS) self.playButton.setForeground(Color(0, 245, 0)) #self.playButton.setPreferredSize(Dimension(playButton.getIconWidth(), playButton.getIconHeight())) #self.playButton.setBackground(Color(125, 125, 25)) self.playButton.setMaximumSize( Dimension(self.playButtonS.getIconWidth(), self.playButtonS.getIconHeight())) self.playButton.setContentAreaFilled(False) self.helpButton = JButton(self.helpButtonS) self.helpButton.setForeground(Color(0, 235, 0)) self.helpButton.setMaximumSize( Dimension(self.helpButtonS.getIconWidth(), self.helpButtonS.getIconHeight())) self.helpButton.setContentAreaFilled(False) self.resetButton = JButton(self.resetButtonS) self.resetButton.setForeground(Color(0, 225, 0)) self.resetButton.setMaximumSize( Dimension(self.resetButtonS.getIconWidth(), self.resetButtonS.getIconHeight())) self.resetButton.setContentAreaFilled(False) self.exitButton = JButton(self.exitButtonS) self.exitButton.setForeground(Color(0, 215, 0)) self.exitButton.setContentAreaFilled(False) self.exitButton.setMaximumSize( Dimension(self.exitButtonS.getIconWidth(), self.exitButtonS.getIconHeight())) # self.playButton.addMouseListener(MouseHoverAdap(self.playButton, self.playButtonS, self.playButtonU)) # self.helpButton.addMouseListener(MouseHoverAdap(self.helpButton, self.helpButtonS, self.helpButtonU)) # self.resetButton.addMouseListener(MouseHoverAdap(self.resetButton, self.resetButtonS, self.resetButtonU)) # self.exitButton.addMouseListener(MouseHoverAdap(self.exitButton, self.exitButtonS, self.exitButtonU)) class PlayButtonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_play('')) self.playButton.addActionListener(PlayButtonActionListener()) class HelpBUttonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_hint('')) self.helpButton.addActionListener(HelpBUttonActionListener()) class ResetButtonActionListener(ActionListener): def actionPerformed(button, e): self.dialogPanel.speak(self.consolePanel.console.do_reset('')) self.resetButton.addActionListener(ResetButtonActionListener()) class ExitButtonActionListener(ActionListener): def actionPerformed(button, e): System.exit(0) self.exitButton.addActionListener(ExitButtonActionListener()) def addUI(self): self.add(self.playButton, "push, grow") self.add(self.helpButton, "push, grow") self.add(self.resetButton, "push, grow") self.add(self.exitButton, "push, grow")