def testJSlider(self): slider = JSlider(0, 10, 5) self.group.bind(slider, 'value', self.dummy, 'value') assert self.dummy.value == 5 slider.setValue(3) assert self.dummy.value == 3
def __init__(self, view, name, func, label=None): core.DataViewComponent.__init__(self, label) self.view = view self.name = name self.func = func self.label_height = 18 self.resize_border = 2 self.popup_hide_limit = JCheckBoxMenuItem('auto-hide limits', True, actionPerformed=self.toggle_autohide) self.popup.add(self.popup_hide_limit) self.show_limits = False self.auto_hide_limits = True self.limits_font = Font("Dialog", Font.PLAIN, 10) self.limit_width = 0 self.limit_hide_delay = 1000 self.limit_color_def = 0.3 self.limit_color_val = self.limit_color_def self.limit_color_step = (1 - self.limit_color_def) / 10 self.limit_hide_timer = Timer(self.limit_hide_delay / 10, None, actionPerformed=self.hide_limits) self.limit_hide_timer.setRepeats(False) self.popup.add(JPopupMenu.Separator()) self.popup.add(JMenuItem('zero', actionPerformed=self.zero)) self.popup.add(JMenuItem('set value', actionPerformed=self.set_value)) self.filename = None self.popup.add(JMenuItem('set from file...', actionPerformed=self.set_from_file)) self.popup.add(JPopupMenu.Separator()) self.popup.add(JMenuItem('increase range', actionPerformed=self.increase_range)) self.popup.add(JMenuItem('decrease range', actionPerformed=self.decrease_range)) self.scale_factor = 0.01 self.range = 1.0 self.data = self.view.watcher.watch(name, func) values = self.data.get_first() self.sliders = [] self.labels = [] for i, v in enumerate(values): vv = int(v * 100 / self.range) if vv > 100: vv = 100 if vv < -100: vv = -100 slider = JSlider(JSlider.VERTICAL, -100, 100, vv, stateChanged=lambda event, index=i: self.slider_moved(index)) slider.background = Color.white self.add(slider) self.sliders.append(slider) label = JLabel('0.00') self.add(label) self.labels.append(label) slider.addMouseListener(self) self.setSize(len(values) * 40 + 40, 200) self.addComponentListener(self) self.componentResized(None)
def __init__(self, extender): self._callbacks = extender._callbacks self._helpers = extender._callbacks.getHelpers() self._callbacks.registerScannerCheck(self) # Creamos el contenedor de paneles. self.contenedor = JTabbedPane() # Campos del sub-tab 1 (mash up) self._tab1_nombre = JTextField() self._tab1_apellido = JTextField() self._tab1_FNacimiento = JTextField() self._tab1_mascota = JTextField() self._tab1_otro = JTextField() self._tab1_feedback_ta = JTextArea('This may take a while . . .') self._tab1_feedback_ta.setEditable(False) self._tab1_feedback_sp = JScrollPane(self._tab1_feedback_ta) self._tab1_minsize = JSlider(4, 16, 6) self._tab1_minsize.setMajorTickSpacing(1) self._tab1_minsize.setPaintLabels(True) self._tab1_maxsize = JSlider(4, 16, 10) self._tab1_maxsize.setMajorTickSpacing(1) self._tab1_maxsize.setPaintLabels(True) self._tab1_specialchars = JTextField('!,@,#,$,&,*') self._tab1_transformations = JCheckBox('1337 mode') self._tab1_firstcapital = JCheckBox('first capital letter') # Campos del sub-tab 2 (redirect) self._tab2_JTFa = JTextField() self._tab2_JTFaa = JTextField() self._tab2_JTFb = JTextField() self._tab2_JTFbb = JTextField() self._tab2_boton = JButton(' Redirect is Off ', actionPerformed=self.switch_redirect) self._tab2_boton.background = Color.lightGray self._tab2_encendido = False # Campos del sub-tab 3 (loader) self._tab3_urls_ta = JTextArea(15, 5) self._tab3_urls_sp = JScrollPane(self._tab3_urls_ta) # Campos del sub-tab 4 (headers) self._tab4_tabla_model = DefaultTableModel() self._tab4_headers_dict = {} # Campos del sub-tab 5 (reverse ip) self._tab5_target = JTextArea(15, 5) self._tab5_target_sp = JScrollPane(self._tab5_target)
def addSlider(self): #adds a new slider at the bottom of the window. slider = JSlider() self.add( slider, BorderLayout.SOUTH ) #this is the best way I could find to make sure the slider appears somewhere consistent. self.ySize = self.ySize + 20 #the problem, sadly, is that all of the sliders and buttons and stuff appear at the SAME PLACE, overlapping. self.setSize(self.xSize, self.ySize)
def __init__(self, interpreter, debugger, debugPanel): self.interpreter = interpreter self.debugger = debugger self.debugPanel = debugPanel # Build our slider! self.slider = JSlider(JSlider.HORIZONTAL, debugger.MIN_SPEED, debugger.MAX_SPEED, debugger.speed, stateChanged=self._sliderSpeedChanged) # Label the slider! self.sliderLabels = labels = Hashtable() labels.put(debugger.MIN_SPEED, JLabel("Slow")) labels.put(debugger.MAX_SPEED, JLabel("Fast")) self.slider.labelTable = labels self.slider.paintLabels = True # Build some buttons! self.buttonInsets = Insets(0, 0, 0, 0) self.watchButton = self.makeDebuggerButton( self.debugPanel.watchVariable, 'images/plus.jpg') self.unwatchButton = self.makeDebuggerButton( self.debugPanel.unwatchVariable, 'images/minus.jpg') self.fullspeedButton = self.makeDebuggerButton( self.debugPanel.fullSpeed, 'images/fullspeed.jpg') self.stopButton = self.makeDebuggerButton(self.interpreter.stopAction, 'images/stop.jpg') # Display them all! self.setLayout(BoxLayout(self, BoxLayout.X_AXIS)) self.add(self.slider) self.add(self.watchButton) self.add(self.unwatchButton) self.add(self.fullspeedButton) self.add(self.stopButton) # Connect the slider to the debugger! self.debugger.onSpeedSet.connect(self._showSpeedSetting) self.debugger.onStart.connect(self._lockControls) self.debugger.onStop.connect(self._unlockControls)
def initComponents(self): #print("initComponents 1: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) self.setLayout(BoxLayout(self, BoxLayout.Y_AXIS)) self.label2 = JLabel() self.label2.setText("Minimum percentage of segments with speech") self.label3 = JLabel() self.label3.setText("Minimum total duration of segment with speech (s)") #sliderGetAction = lambda slider: slider.getValue() self.minPercVoiced = JSlider()#stateChanged=self.makeGuiCallback("minPercVoiced", sliderGetAction)) self.minPercVoiced.setMajorTickSpacing(20) self.minPercVoiced.setMinorTickSpacing(5) self.minPercVoiced.setPaintLabels(True) self.minPercVoiced.setPaintTicks(True) self.minTotalVoiced = JSlider()#stateChanged=self.makeGuiCallback("minTotalVoiced", sliderGetAction)) self.minTotalVoiced.setMajorTickSpacing(60) self.minTotalVoiced.setMaximum(180) self.minTotalVoiced.setMinorTickSpacing(10) self.minTotalVoiced.setPaintLabels(True) self.minTotalVoiced.setPaintTicks(True) #print("initComponents 2: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) #checkboxGetAction = lambda checkbox: checkbox.isSelected() self.runVadTranscriber = JCheckBox("Transcribe files with speech detected ? (slow)")#, #actionPerformed=self.makeGuiCallback("runVadTranscriber", checkboxGetAction)) self.showTextSegmentStartTime = JCheckBox("Show text segment start time ?") self.add(self.label2) self.add(self.minPercVoiced) self.add(self.label3) self.add(self.minTotalVoiced) self.add(self.showTextSegmentStartTime) self.add(self.runVadTranscriber) self.vadTranscriberLanguage = makeLanguageSelectionComboBox(self, "english")
def __init__(self, interpreter, debugger, debugPanel): self.interpreter = interpreter self.debugger = debugger self.debugPanel = debugPanel # Build our slider! self.slider = JSlider(JSlider.HORIZONTAL, debugger.MIN_SPEED, debugger.MAX_SPEED, debugger.speed, stateChanged=self._sliderSpeedChanged ) # Label the slider! self.sliderLabels = labels = Hashtable() labels.put(debugger.MIN_SPEED, JLabel("Slow")) labels.put(debugger.MAX_SPEED, JLabel("Fast")) self.slider.labelTable = labels self.slider.paintLabels = True # Build some buttons! self.buttonInsets = Insets(0, 0, 0, 0) self.watchButton = self.makeDebuggerButton( self.debugPanel.watchVariable, 'images/plus.jpg' ) self.unwatchButton = self.makeDebuggerButton( self.debugPanel.unwatchVariable, 'images/minus.jpg' ) self.fullspeedButton = self.makeDebuggerButton( self.debugPanel.fullSpeed, 'images/fullspeed.jpg' ) self.stopButton = self.makeDebuggerButton( self.interpreter.stopAction, 'images/stop.jpg' ) # Display them all! self.setLayout(BoxLayout(self, BoxLayout.X_AXIS)) self.add(self.slider) self.add(self.watchButton) self.add(self.unwatchButton) self.add(self.fullspeedButton) self.add(self.stopButton) # Connect the slider to the debugger! self.debugger.onSpeedSet.connect(self._showSpeedSetting) self.debugger.onStart.connect(self._lockControls) self.debugger.onStop.connect(self._unlockControls)
def initComponents(self): self.setLayout(GridBagLayout()) gbc = GridBagConstraints() gbc.anchor = GridBagConstraints.NORTHWEST gbc.gridx = 0 gbc.gridy = 0 descriptionLabel = JLabel("FEA - Forensics Email Analysis") self.add(descriptionLabel, gbc) gbc.gridy = 1 self.cbNSLookup = JCheckBox( "Perform DNS Lookup on email domains", actionPerformed=self.cbNSLookupActionPerformed) self.cbNSLookup.setSelected(True) self.add(self.cbNSLookup, gbc) # TODO: include option to browse for text file with list of emails to exclude from analysis numberThreadsLabel = JLabel( "Maximum number of threads for DNS Lookup task: ") gbc.gridy = 2 self.add(numberThreadsLabel, gbc) self.numberThreadsSlider = JSlider( JSlider.HORIZONTAL, 1, 16, 8, stateChanged=self.sliderActionPerformed) self.numberThreadsSlider.setMajorTickSpacing(1) self.numberThreadsSlider.setPaintLabels(True) self.numberThreadsSlider.setPaintTicks(True) self.numberThreadsSlider.setSnapToTicks(True) self.numberThreadsSlider.setToolTipText( "set maximum number of concurrent threads when performing DNS lookup on email domains" ) gbc.gridy = 5 gbc.gridwidth = 15 gbc.gridheight = 1 gbc.fill = GridBagConstraints.BOTH gbc.weightx = 0 gbc.weighty = 0 gbc.anchor = GridBagConstraints.NORTHWEST gbc.gridy = 3 self.add(self.numberThreadsSlider, gbc) self.cbGenerateExcel = JCheckBox( "Generate Excel format report (more detailed)", actionPerformed=self.cbGenerateExcelActionPerformed) self.cbGenerateExcel.setSelected(True) gbc.gridy = 4 self.add(self.cbGenerateExcel, gbc) self.cbGenerateCSV = JCheckBox( "Generate CSV format report (plaintext)", actionPerformed=self.cbGenerateCSVActionPerformed) self.cbGenerateCSV.setSelected(True) gbc.gridy = 5 self.add(self.cbGenerateCSV, gbc) gbc.gridy = 6 self.cbWayback = JCheckBox( "Perform Wayback Machine Lookup on email domains (WARNING: can be a slow process!)", actionPerformed=self.cbWaybackActionPerformed) self.cbWayback.setSelected(True) self.add(self.cbWayback, gbc)
class FEA_ConfigPanel(JPanel): numThreads = 8 generateXLS = True generateCSV = True doNSLookup = True doWBLookup = True cbNSLookup = None cbGenerateExcel = None cbGenerateCSV = None cbWayback = None def __init__(self): self.initComponents() # get previous settings selected by the user if (ModuleSettings.getConfigSetting("FEA", "doNSLookup") != None) and ( ModuleSettings.getConfigSetting("FEA", "doNSLookup") != ""): if ModuleSettings.getConfigSetting("FEA", "doNSLookup"): self.cbNSLookup.setSelected(True) self.doNSLookup = True else: self.cbNSLookup.setSelected(False) self.doNSLookup = False if (ModuleSettings.getConfigSetting("FEA", "generateCSV") != None) and (ModuleSettings.getConfigSetting( "FEA", "generateCSV") != ""): if ModuleSettings.getConfigSetting("FEA", "generateCSV"): self.cbGenerateCSV.setSelected(True) self.generateCSV = True else: self.cbGenerateCSV.setSelected(False) self.generateCSV = False if (ModuleSettings.getConfigSetting("FEA", "generateXLS") != None) and (ModuleSettings.getConfigSetting( "FEA", "generateXLS") != ""): if ModuleSettings.getConfigSetting("FEA", "generateXLS"): self.cbGenerateExcel.setSelected(True) self.generateXLS = True else: self.cbGenerateExcel.setSelected(False) self.generateXLS = False if (ModuleSettings.getConfigSetting("FEA", "numThreads") != None) and ( ModuleSettings.getConfigSetting("FEA", "numThreads") != ""): self.numThreads = ModuleSettings.getConfigSetting( "FEA", "numThreads") self.numberThreadsSlider.setValue(self.numThreads) else: self.numThreads = self.numberThreadsSlider.getValue() def addStatusLabel(self, msg): gbc = GridBagConstraints() gbc.anchor = GridBagConstraints.NORTHWEST gbc.gridx = 0 gbc.gridy = 7 lab = JLabel(msg) self.add(lab, gbc) def getDoNSLookup(self): return self.doNSLookup def getGenerateCSV(self): return self.generateCSV def getGenerateXLS(self): return self.generateXLS def getDoWBLookup(self): return self.doWBLookup def getNumThreads(self): return self.numThreads def initComponents(self): self.setLayout(GridBagLayout()) gbc = GridBagConstraints() gbc.anchor = GridBagConstraints.NORTHWEST gbc.gridx = 0 gbc.gridy = 0 descriptionLabel = JLabel("FEA - Forensics Email Analysis") self.add(descriptionLabel, gbc) gbc.gridy = 1 self.cbNSLookup = JCheckBox( "Perform DNS Lookup on email domains", actionPerformed=self.cbNSLookupActionPerformed) self.cbNSLookup.setSelected(True) self.add(self.cbNSLookup, gbc) # TODO: include option to browse for text file with list of emails to exclude from analysis numberThreadsLabel = JLabel( "Maximum number of threads for DNS Lookup task: ") gbc.gridy = 2 self.add(numberThreadsLabel, gbc) self.numberThreadsSlider = JSlider( JSlider.HORIZONTAL, 1, 16, 8, stateChanged=self.sliderActionPerformed) self.numberThreadsSlider.setMajorTickSpacing(1) self.numberThreadsSlider.setPaintLabels(True) self.numberThreadsSlider.setPaintTicks(True) self.numberThreadsSlider.setSnapToTicks(True) self.numberThreadsSlider.setToolTipText( "set maximum number of concurrent threads when performing DNS lookup on email domains" ) gbc.gridy = 5 gbc.gridwidth = 15 gbc.gridheight = 1 gbc.fill = GridBagConstraints.BOTH gbc.weightx = 0 gbc.weighty = 0 gbc.anchor = GridBagConstraints.NORTHWEST gbc.gridy = 3 self.add(self.numberThreadsSlider, gbc) self.cbGenerateExcel = JCheckBox( "Generate Excel format report (more detailed)", actionPerformed=self.cbGenerateExcelActionPerformed) self.cbGenerateExcel.setSelected(True) gbc.gridy = 4 self.add(self.cbGenerateExcel, gbc) self.cbGenerateCSV = JCheckBox( "Generate CSV format report (plaintext)", actionPerformed=self.cbGenerateCSVActionPerformed) self.cbGenerateCSV.setSelected(True) gbc.gridy = 5 self.add(self.cbGenerateCSV, gbc) gbc.gridy = 6 self.cbWayback = JCheckBox( "Perform Wayback Machine Lookup on email domains (WARNING: can be a slow process!)", actionPerformed=self.cbWaybackActionPerformed) self.cbWayback.setSelected(True) self.add(self.cbWayback, gbc) def cbWaybackActionPerformed(self, event): source = event.getSource() if (source.isSelected()): ModuleSettings.setConfigSetting("FEA", "doWBLookup", "true") self.doWBLookup = True else: ModuleSettings.setConfigSetting("FEA", "doNSLookup", "false") self.doWBLookup = False def cbNSLookupActionPerformed(self, event): source = event.getSource() if (source.isSelected()): ModuleSettings.setConfigSetting("FEA", "doNSLookup", "true") self.doNSLookup = True self.cbWayback.setEnabled(True) else: ModuleSettings.setConfigSetting("FEA", "doNSLookup", "false") self.doNSLookup = False self.cbWayback.setSelected(False) self.cbWayback.setEnabled(False) self.doWBLookup = False def cbGenerateExcelActionPerformed(self, event): source = event.getSource() if (source.isSelected()): ModuleSettings.setConfigSetting("FEA", "generateXLS", "true") self.generateXLS = True else: ModuleSettings.setConfigSetting("FEA", "generateXLS", "false") self.generateXLS = False def cbGenerateCSVActionPerformed(self, event): source = event.getSource() if (source.isSelected()): ModuleSettings.setConfigSetting("FEA", "generateCSV", "true") self.generateCSV = True else: ModuleSettings.setConfigSetting("FEA", "generateCSV", "false") self.generateCSV = False def sliderActionPerformed(self, event): source = event.getSource() self.numThreads = source.getValue() ModuleSettings.setConfigSetting("FEA", "numThreads", self.numThreads) self.addStatusLabel("number of threads set: " + str(self.numThreads))
class AudioPlayerFrame(JmriJFrame): # Define the range for position values # By default, this is -10 to +10 range = 10 # Calculate slider range posMinMax = int(10**Audio.DECIMAL_PLACES) # Define controls playButton = JButton("Play") stopButton = JButton("Stop") pauseButton = JButton("Pause") refreshButton = JButton("Refresh") rangeSpinner = JSpinner(SpinnerNumberModel(range, 1, 100, 1)) sourceCombo = JComboBox() positionXSlider = JSlider() positionYSlider = JSlider() positionZSlider = JSlider() # Reference to AudioSource source = None # Define various constants PLAY = "AUDIO.PLAY" PAUSE = "AUDIO.PAUSE" RESUME = "AUDIO.RESUME" STOP = "AUDIO.STOP" REFRESH = "AUDIO.REFRESH" SELECT = "Select source from list" POSX = "X" POSY = "Y" POSZ = "Z" def __init__(self): # Setup controls - buttons first self.playButton.preferredSize = self.refreshButton.preferredSize self.playButton.actionCommand = self.PLAY self.playButton.actionPerformed = self.whenButtonClicked self.pauseButton.preferredSize = self.refreshButton.preferredSize self.pauseButton.actionCommand = self.PAUSE self.pauseButton.actionPerformed = self.whenButtonClicked self.stopButton.preferredSize = self.refreshButton.preferredSize self.stopButton.actionCommand = self.STOP self.stopButton.actionPerformed = self.whenButtonClicked self.refreshButton.actionCommand = self.REFRESH self.refreshButton.actionPerformed = self.whenButtonClicked # Now combobox and text field self.sourceCombo.itemStateChanged = self.whenSourceChanged self.updateSourcesList() self.rangeSpinner.stateChanged = self.whenRangeChanged # Now sliders ticksMajor = int(self.posMinMax / 4) ticksMinor = int(ticksMajor / 5) labels = Hashtable(3) labels.put(-self.posMinMax, JLabel("Left")) labels.put(0, JLabel("Centre")) labels.put(self.posMinMax, JLabel("Right")) self.positionXSlider.labelTable = labels self.positionXSlider.minimum = -self.posMinMax self.positionXSlider.maximum = self.posMinMax self.positionXSlider.majorTickSpacing = ticksMajor self.positionXSlider.minorTickSpacing = ticksMinor self.positionXSlider.paintTicks = True self.positionXSlider.paintLabels = True self.positionXSlider.snapToTicks = True self.positionXSlider.value = 0 self.positionXSlider.stateChanged = self.whenSliderXChanged labels = Hashtable(3) labels.put(-self.posMinMax, JLabel("Behind")) labels.put(0, JLabel("Centre")) labels.put(self.posMinMax, JLabel("In-front")) self.positionYSlider.labelTable = labels self.positionYSlider.minimum = -self.posMinMax self.positionYSlider.maximum = self.posMinMax self.positionYSlider.majorTickSpacing = ticksMajor self.positionYSlider.minorTickSpacing = ticksMinor self.positionYSlider.paintTicks = True self.positionYSlider.paintLabels = True self.positionYSlider.snapToTicks = True self.positionYSlider.value = 0 self.positionYSlider.orientation = JSlider.VERTICAL self.positionYSlider.stateChanged = self.whenSliderYChanged labels = Hashtable(3) labels.put(-self.posMinMax, JLabel("Below")) labels.put(0, JLabel("Centre")) labels.put(self.posMinMax, JLabel("Above")) self.positionZSlider.labelTable = labels self.positionZSlider.minimum = -self.posMinMax self.positionZSlider.maximum = self.posMinMax self.positionZSlider.majorTickSpacing = ticksMajor self.positionZSlider.minorTickSpacing = ticksMinor self.positionZSlider.paintTicks = True self.positionZSlider.paintLabels = True self.positionZSlider.snapToTicks = True self.positionZSlider.value = 0 self.positionZSlider.orientation = JSlider.VERTICAL self.positionZSlider.stateChanged = self.whenSliderZChanged # Setup frame self.title = "Simple JMRI Audio Player" self.contentPane.layout = BoxLayout(self.contentPane, BoxLayout.Y_AXIS) # Add controls to frame - combo & buttons first p = JPanel(FlowLayout(FlowLayout.LEADING)) p.add(self.sourceCombo) p.add(self.refreshButton) p.add(self.playButton) p.add(self.pauseButton) p.add(self.stopButton) #p.add(JLabel("Range")) #p.add(self.rangeSpinner) self.add(p) self.add(Box.createVerticalGlue()) # Now sliders p = JPanel(FlowLayout(FlowLayout.LEADING)) label = JLabel("Y Position") label.UI = VerticalLabelUI() # Default behaviour is anti-clockwise p.add(label) p.add(self.positionYSlider) p2 = JPanel() p2.layout = BoxLayout(p2, BoxLayout.Y_AXIS) p3 = JPanel() p3.add(JLabel("Range")) p3.add(self.rangeSpinner) p2.add(p3) #p2.add(Box.createVerticalGlue()) p3 = JPanel() p3.layout = BoxLayout(p3, BoxLayout.Y_AXIS) label = JLabel("X Position") label.alignmentX = JLabel.CENTER_ALIGNMENT p3.add(label) p3.add(self.positionXSlider) p2.add(p3) p.add(p2) label = JLabel("Z Position") label.UI = VerticalLabelUI() p.add(label) p.add(self.positionZSlider) self.add(p) # Finally pack and show self.pack() self.show() def updateSourcesList(self): # Clear the ComboBox self.sourceCombo.removeAllItems() # Now populate self.sourceCombo.addItem(self.SELECT) # Retrieve system name list of AudioSources for source in audio.getSystemNameList(Audio.SOURCE): # Add available sources to the list self.sourceCombo.addItem(source) def whenRangeChanged(self, event): # store value & update sliders self.range = self.rangeSpinner.value self.updateSliders() def whenSourceChanged(self, event): # Only do something when an item is selected if event.getStateChange() == ItemEvent.SELECTED: # Stop playing source self.stopSource() if (event.getItem() != self.SELECT): # Set reference to source self.source = audio.provideAudio(event.getItem()) # Enable buttons & update sliders self.enableControls(True) self.updateSliders() else: # Clear reference to source self.source = None # Disable buttons self.enableControls(False) def whenButtonClicked(self, event): # Get the action command command = event.getActionCommand() # Execute appropriate action if self.source != None: if command == self.PLAY: self.pauseButton.actionCommand = self.PAUSE self.pauseButton.text = "Pause" self.playSource() elif command == self.PAUSE: self.pauseButton.actionCommand = self.RESUME self.pauseButton.text = "Resume" self.pauseSource() elif command == self.RESUME: self.pauseButton.actionCommand = self.PAUSE self.pauseButton.text = "Pause" self.resumeSource() elif command == self.STOP: self.pauseButton.actionCommand = self.PAUSE self.pauseButton.text = "Pause" self.stopSource() elif command == self.REFRESH: self.updateSourcesList() else: print "No action defined!" def playSource(self): if self.source != None: self.source.play() def pauseSource(self): if self.source != None: self.source.pause() def resumeSource(self): if self.source != None: self.source.resume() def stopSource(self): if self.source != None: self.source.stop() def whenSliderXChanged(self, event): self.changePosition( self.POSX, (float(self.positionXSlider.value) / self.posMinMax * self.range)) def whenSliderYChanged(self, event): self.changePosition( self.POSY, (float(self.positionYSlider.value) / self.posMinMax * self.range)) def whenSliderZChanged(self, event): self.changePosition( self.POSZ, (float(self.positionZSlider.value) / self.posMinMax * self.range)) def changePosition(self, which, value): if self.source != None: # Get the current position pos = self.source.getPosition() # Determine which axis to alter if which == self.POSX: pos.x = value elif which == self.POSY: pos.y = value elif which == self.POSZ: pos.z = value # Now change the position self.source.position = pos def updateSliders(self): # Get the current position pos = self.source.getPosition() # Update sliders self.positionXSlider.value = int(pos.x * self.posMinMax / self.range) self.positionYSlider.value = int(pos.y * self.posMinMax / self.range) self.positionZSlider.value = int(pos.z * self.posMinMax / self.range) def enableControls(self, enable): self.playButton.enabled = enable self.pauseButton.enabled = enable self.stopButton.enabled = enable self.positionXSlider.enabled = enable self.positionYSlider.enabled = enable self.positionZSlider.enabled = enable self.rangeSpinner.enabled = enable
class DebugControlPanel(JPanel): BUTTON_SIZE = (50, 50) def __init__(self, interpreter, debugger, debugPanel): self.interpreter = interpreter self.debugger = debugger self.debugPanel = debugPanel # Build our slider! self.slider = JSlider(JSlider.HORIZONTAL, debugger.MIN_SPEED, debugger.MAX_SPEED, debugger.speed, stateChanged=self._sliderSpeedChanged) # Label the slider! self.sliderLabels = labels = Hashtable() labels.put(debugger.MIN_SPEED, JLabel("Slow")) labels.put(debugger.MAX_SPEED, JLabel("Fast")) self.slider.labelTable = labels self.slider.paintLabels = True # Build some buttons! self.buttonInsets = Insets(0, 0, 0, 0) self.watchButton = self.makeDebuggerButton( self.debugPanel.watchVariable, 'images/plus.jpg') self.unwatchButton = self.makeDebuggerButton( self.debugPanel.unwatchVariable, 'images/minus.jpg') self.fullspeedButton = self.makeDebuggerButton( self.debugPanel.fullSpeed, 'images/fullspeed.jpg') self.stopButton = self.makeDebuggerButton(self.interpreter.stopAction, 'images/stop.jpg') # Display them all! self.setLayout(BoxLayout(self, BoxLayout.X_AXIS)) self.add(self.slider) self.add(self.watchButton) self.add(self.unwatchButton) self.add(self.fullspeedButton) self.add(self.stopButton) # Connect the slider to the debugger! self.debugger.onSpeedSet.connect(self._showSpeedSetting) self.debugger.onStart.connect(self._lockControls) self.debugger.onStop.connect(self._unlockControls) def makeDebuggerButton(self, action, icon): imageIcon = JESResources.makeIcon(icon) return JButton(action, text=None, icon=imageIcon, margin=self.buttonInsets) @threadsafe def _sliderSpeedChanged(self, event): # These two event listeners could hypothetically go into # mutual recursion. To keep them from doing so, neither of them # trigger the other event unless the value actually changed. # This ensures they stop recursing after a single round. value = self.slider.getValue() if self.debugger.speed != value: self.debugger.setSpeed(value) @threadsafe def _showSpeedSetting(self, debugger, newSpeed, **_): if self.slider.getValue() != newSpeed: self.slider.setValue(newSpeed) @threadsafe def _lockControls(self, debugger, **_): self.debugPanel.watchVariable.enabled = False self.debugPanel.unwatchVariable.enabled = False self.debugPanel.fullSpeed.enabled = True @threadsafe def _unlockControls(self, debugger, **_): self.debugPanel.watchVariable.enabled = True self.debugPanel.unwatchVariable.enabled = True self.debugPanel.fullSpeed.enabled = False
class VadCheckModuleSettingsPanel(IngestModuleIngestJobSettingsPanel): # Note, we can't use a self.settings instance variable. # Rather, self.local_settings is used. # https://wiki.python.org/jython/UserGuide#javabean-properties # Jython Introspector generates a property - 'settings' on the basis # of getSettings() defined in this class. Since only getter function # is present, it creates a read-only 'settings' property. This auto- # generated read-only property overshadows the instance-variable - # 'settings' # We get passed in a previous version of the settings so that we can # prepopulate the UI # TODO: Update this for your UI def __init__(self, settings): #print("init: " + settings.getSetting("runVadTranscriber") + " " + settings.getSetting("minPercVoiced") + " " + settings.getSetting("minTotalVoiced")) #print("init local_settings: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) self.local_settings = GenericIngestModuleJobSettings() #initComponents will initialize sliders which will call lambdas for updating settings using current values in sliders #which would overwrite settings. self.initComponents() #print("init local_settings 2: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) #now safe to set settings self.local_settings = settings #print("init 2: " + self.local_settings.getSetting("runVadTranscriber") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) self.customizeComponents() _logger = Logger.getLogger(VadCheckModuleFactory.moduleName) def log(self, level, msg): self._logger.logp(level, self.__class__.__name__, inspect.stack()[1][3], msg) # def makeGuiCallback(self, key, guiGetAction): # def callback(event): # #self.log(Level.INFO, "setting key = " + key + " val =" + str(event.getSource().getValue())) # value = str(guiGetAction(event.getSource())) # print("setting key = " + key + " val =" + value) # self.local_settings.setSetting(key, value) # print("test in settings key = " + key + " val =" + self.local_settings.getSetting(key)) # return callback def initComponents(self): #print("initComponents 1: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) self.setLayout(BoxLayout(self, BoxLayout.Y_AXIS)) self.label2 = JLabel() self.label2.setText("Minimum percentage of segments with speech") self.label3 = JLabel() self.label3.setText("Minimum total duration of segment with speech (s)") #sliderGetAction = lambda slider: slider.getValue() self.minPercVoiced = JSlider()#stateChanged=self.makeGuiCallback("minPercVoiced", sliderGetAction)) self.minPercVoiced.setMajorTickSpacing(20) self.minPercVoiced.setMinorTickSpacing(5) self.minPercVoiced.setPaintLabels(True) self.minPercVoiced.setPaintTicks(True) self.minTotalVoiced = JSlider()#stateChanged=self.makeGuiCallback("minTotalVoiced", sliderGetAction)) self.minTotalVoiced.setMajorTickSpacing(60) self.minTotalVoiced.setMaximum(180) self.minTotalVoiced.setMinorTickSpacing(10) self.minTotalVoiced.setPaintLabels(True) self.minTotalVoiced.setPaintTicks(True) #print("initComponents 2: " + self.local_settings.getSetting("vadAggressivness") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) #checkboxGetAction = lambda checkbox: checkbox.isSelected() self.runVadTranscriber = JCheckBox("Transcribe files with speech detected ? (slow)")#, #actionPerformed=self.makeGuiCallback("runVadTranscriber", checkboxGetAction)) self.showTextSegmentStartTime = JCheckBox("Show text segment start time ?") self.add(self.label2) self.add(self.minPercVoiced) self.add(self.label3) self.add(self.minTotalVoiced) self.add(self.showTextSegmentStartTime) self.add(self.runVadTranscriber) self.vadTranscriberLanguage = makeLanguageSelectionComboBox(self, "english") #this is needed because of https://bugs.jython.org/issue1749824 #class ComboActionListener(ActionListener): # def actionPerformed(self, e): # value = e.getSource().getSelectedItem() # self.local_settings.setSetting(key, value) #self.vadTranscriberLanguage.actionListener = ComboActionListener() #local_settings is of type https://github.com/sleuthkit/autopsy/blob/bbdea786db487c781edf2cf9032a2ba3166e97e0/Core/src/org/sleuthkit/autopsy/ingest/GenericIngestModuleJobSettings.java def customizeComponents(self): def setValue(key, default, stringToPythonObj, guiSetAction): string = self.local_settings.getSetting(key) #print("customizeComponents " + key + " stored value was " + str(string)) #print("string is None " + str(string is None) + " stringToPythonObj(string) " + str(stringToPythonObj(string))) checkedValue = default if string is None else stringToPythonObj(string) obj = getattr(self, key) guiSetAction(obj, checkedValue) #self.log(Level.INFO, "setValue for key " + key + " " + str(checkedValue)) sliderSetAction = lambda obj, val: obj.setValue(val) checkBoxSetAction = lambda obj, val: obj.setSelected(val) comboBoxSetAction = lambda obj, val: obj.setSelectedItem(val) setValue("minPercVoiced", minPercVoicedDefault, int, sliderSetAction) setValue("minTotalVoiced", minTotalVoicedDefault, int, sliderSetAction) setValue("runVadTranscriber", runVadTranscriberDefault, eval, checkBoxSetAction) setValue("showTextSegmentStartTime", showTextSegmentStartTimeDefault, eval, checkBoxSetAction) setValue("vadTranscriberLanguage", runVadTranscriberDefault, lambda x: x, comboBoxSetAction) # Return the settings used #note: exceptions thrown here will be caught and not logged. def getSettings(self): #print("getSettings: " + self.local_settings.getSetting("runVadTranscriber") + " " + self.local_settings.getSetting("minPercVoiced") + " " + self.local_settings.getSetting("minTotalVoiced")) self.local_settings.setSetting("minPercVoiced", str(self.minPercVoiced.getValue())) self.local_settings.setSetting("minTotalVoiced", str(self.minTotalVoiced.getValue())) self.local_settings.setSetting("runVadTranscriber", str(self.runVadTranscriber.isSelected())) self.local_settings.setSetting("showTextSegmentStartTime", str(self.showTextSegmentStartTime.isSelected())) self.local_settings.setSetting("vadTranscriberLanguage", str(self.vadTranscriberLanguage.getSelectedItem())) return self.local_settings
class SliderListener(ChangeListener): def __init__(self, view): self.view = view def stateChanged(self, evt): s = evt.getSource() self.view.update(s.getValue()) frame = JFrame("Mesh taken from " + xmlDir + "* directories") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) canvas = MyView(xmlDir) frame.add(canvas, BorderLayout.CENTER) jSlider1 = JSlider() jSlider1.setValue(0) jSlider1.setMaximum(canvas.getMaxIndex()) jSlider1.setPaintLabels(True) jSlider1.addChangeListener(SliderListener(canvas)) frame.add(jSlider1, BorderLayout.SOUTH) frame.setSize(800, 600) frame.setVisible(True) class MyKeyListener(KeyListener): def __init__(self, view, slider): self.view = view self.slider = slider
class Mi_Extension(IHttpListener, IScannerCheck): def __init__(self, extender): self._callbacks = extender._callbacks self._helpers = extender._callbacks.getHelpers() self._callbacks.registerScannerCheck(self) # Creamos el contenedor de paneles. self.contenedor = JTabbedPane() # Campos del sub-tab 1 (mash up) self._tab1_nombre = JTextField() self._tab1_apellido = JTextField() self._tab1_FNacimiento = JTextField() self._tab1_mascota = JTextField() self._tab1_otro = JTextField() self._tab1_feedback_ta = JTextArea('This may take a while . . .') self._tab1_feedback_ta.setEditable(False) self._tab1_feedback_sp = JScrollPane(self._tab1_feedback_ta) self._tab1_minsize = JSlider(4, 16, 6) self._tab1_minsize.setMajorTickSpacing(1) self._tab1_minsize.setPaintLabels(True) self._tab1_maxsize = JSlider(4, 16, 10) self._tab1_maxsize.setMajorTickSpacing(1) self._tab1_maxsize.setPaintLabels(True) self._tab1_specialchars = JTextField('!,@,#,$,&,*') self._tab1_transformations = JCheckBox('1337 mode') self._tab1_firstcapital = JCheckBox('first capital letter') # Campos del sub-tab 2 (redirect) self._tab2_JTFa = JTextField() self._tab2_JTFaa = JTextField() self._tab2_JTFb = JTextField() self._tab2_JTFbb = JTextField() self._tab2_boton = JButton(' Redirect is Off ', actionPerformed=self.switch_redirect) self._tab2_boton.background = Color.lightGray self._tab2_encendido = False # Campos del sub-tab 3 (loader) self._tab3_urls_ta = JTextArea(15, 5) self._tab3_urls_sp = JScrollPane(self._tab3_urls_ta) # Campos del sub-tab 4 (headers) self._tab4_tabla_model = DefaultTableModel() self._tab4_headers_dict = {} # Campos del sub-tab 5 (reverse ip) self._tab5_target = JTextArea(15, 5) self._tab5_target_sp = JScrollPane(self._tab5_target) def create(self): # Estilo general para todas las sub-tab. gBC = GridBagConstraints() gBC.fill = GridBagConstraints.BOTH gBC.ipadx = 5 gBC.ipady = 5 gBC.insets = Insets(0, 5, 5, 5) gBC.weightx = 0.5 #gBC.weighty = 0.7 ####################################### ### Creamos la primera sub-tab. (MASHUP) ####################################### tab_1 = JPanel(GridBagLayout()) tab_1_jlabelAyuda = JLabel( '<html><i>•Tip: This Mashup receive one or more keywords in order to generate a list of possible passwords</i></html>' ) tab_1_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_1.add( JLabel('<html><font color=green><i>Income:</i></font></html>'), gBC) gBC.gridy = 1 tab_1.add(JLabel('<html><b>• Name:</b></html>'), gBC) gBC.gridy = 2 tab_1.add(self._tab1_nombre, gBC) gBC.gridy = 3 tab_1.add(JLabel('<html><b>• Surname:</b></html>'), gBC) gBC.gridy = 4 tab_1.add(self._tab1_apellido, gBC) gBC.gridy = 5 tab_1.add(JLabel('<html><b>• Birthdate: (DDMMYYYY)</b></html>'), gBC) gBC.gridy = 6 tab_1.add(self._tab1_FNacimiento, gBC) gBC.gridy = 7 tab_1.add(JLabel('<html><b>• Pet:</b></html>'), gBC) gBC.gridy = 8 tab_1.add(self._tab1_mascota, gBC) gBC.gridy = 9 tab_1.add(JLabel('<html><b>• Anyother:</b></html>'), gBC) gBC.gridy = 10 tab_1.add(self._tab1_otro, gBC) gBC.gridy = 11 tab_1.add(JLabel('<html><b>• Passwd Min Size:</b></html>'), gBC) gBC.gridy = 12 tab_1.add(self._tab1_minsize, gBC) gBC.gridy = 13 tab_1.add(JLabel('<html><b>• Passwd Max Size:</b></html>'), gBC) gBC.gridy = 14 tab_1.add(self._tab1_maxsize, gBC) gBC.gridy = 15 tab_1.add( JLabel( '<html><b>• Especial Chars: (comma separated)</b></html>' ), gBC) gBC.gridy = 16 tab_1.add(self._tab1_specialchars, gBC) gBC.gridy = 17 tab_1.add(self._tab1_transformations, gBC) gBC.gridy = 18 tab_1.add(self._tab1_firstcapital, gBC) gBC.gridy = 19 tab_1.add(JButton('Mashup!', actionPerformed=self.mashup), gBC) gBC.gridy = 20 gBC.gridwidth = 3 tab_1.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.gridy = 21 gBC.gridwidth = 3 tab_1.add(tab_1_jlabelAyuda, gBC) gBC.gridwidth = 1 gBC.gridx = 1 gBC.gridy = 0 gBC.gridheight = 20 gBC.weightx = 0 tab_1.add(JSeparator(SwingConstants.VERTICAL), gBC) gBC.gridheight = 1 gBC.weightx = 0.5 gBC.gridx = 2 gBC.gridy = 0 tab_1.add( JLabel('<html><font color=green><i>Outcome:</i></font></html>'), gBC) gBC.gridy = 1 gBC.gridwidth = 2 gBC.gridheight = 18 tab_1.add(self._tab1_feedback_sp, gBC) gBC.gridwidth = 1 gBC.gridheight = 1 gBC.gridy = 19 tab_1.add( JButton('Copy to clipboard!', actionPerformed=self.cpy_clipboard), gBC) ####################################### ### Creamos la segunda sub-tab. (REDIRECT) ####################################### tab_2 = JPanel(GridBagLayout()) tab_2_jlabelAyuda = JLabel( '<html><i>•Tip: This Redirect receive a pair of hosts x,y in order to redirect from x to y.</i></html>' ) tab_2_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_2.add( JLabel('<html><b>• From: (i.e. www.facebook.com)</b></html>'), gBC) gBC.gridx = 1 gBC.gridy = 0 tab_2.add(self._tab2_JTFa, gBC) gBC.gridx = 2 gBC.gridy = 0 tab_2.add( JLabel('<html><b>• To: (i.e. www.myhomepage.es)</b></html>'), gBC) gBC.gridx = 3 gBC.gridy = 0 tab_2.add(self._tab2_JTFaa, gBC) gBC.gridx = 0 gBC.gridy = 1 gBC.gridwidth = 4 tab_2.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.gridx = 0 gBC.gridy = 2 tab_2.add(JLabel('<html><b>• From:</b></html>'), gBC) gBC.gridx = 1 gBC.gridy = 2 tab_2.add(self._tab2_JTFb, gBC) gBC.gridx = 2 gBC.gridy = 2 tab_2.add(JLabel('<html><b>• To:</b></html>'), gBC) gBC.gridx = 3 gBC.gridy = 2 tab_2.add(self._tab2_JTFbb, gBC) gBC.gridx = 0 gBC.gridy = 3 gBC.gridwidth = 4 tab_2.add(self._tab2_boton, gBC) gBC.gridwidth = 1 gBC.gridx = 0 gBC.gridy = 4 gBC.gridwidth = 4 gBC.insets = Insets(100, 10, 5, 10) tab_2.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridx = 0 gBC.gridy = 5 gBC.gridwidth = 4 tab_2.add(tab_2_jlabelAyuda, gBC) gBC.gridwidth = 1 ####################################### ### Creamos la tercera sub-tab. (LOADER) ####################################### tab_3 = JPanel(GridBagLayout()) tab_3_jlabelAyuda = JLabel( '<html><i>•Tip: This Loader receive a list of Hosts or IPs that will be added to the Burp Scope.</i></html>' ) tab_3_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_3.add( JLabel( '<html><font color=green><i>List of targets: (i.e. http://www.mytargetweb.com)</i></font></html>' ), gBC) gBC.gridy = 1 gBC.gridheight = 10 gBC.weighty = 0.5 tab_3.add(self._tab3_urls_sp, gBC) gBC.gridheight = 1 gBC.weighty = 0 gBC.gridy = 11 tab_3.add( JButton('Load Into Target => Scope!', actionPerformed=self.loader), gBC) gBC.gridy = 12 gBC.gridwidth = 5 gBC.insets = Insets(100, 10, 5, 10) tab_3.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridy = 13 tab_3.add(tab_3_jlabelAyuda, gBC) ####################################### ### Creamos la cuarta sub-tab. (HEADERS) ####################################### tab_4_jlabelAyuda = JLabel( "<html><i>•Tip: This Headers records all unique headers that appear in every host, check out the security headers.</i></html>" ) tab_4_jlabelAyuda.setFont(Font("Serif", 0, 12)) tab_4_jLabelRecomendacion = JLabel( "<html>•<b>Server</b>: Don't give away much information.<br> •<b>Content-Security-Policy</b>: Protect your site from XSS attacks by whitelisting sources of approved content.<br> •<b>Strict-Transport-Security</b>: Enforce the browser to use HTTPS.<br> •<b>Public-Key-Pins</b>: Protect your site from MITM attacks.<br> •<b>X-Content-Type-Options</b>: the valid value is -> nosniff .<br> •<b>X-Frame-Options</b>: tells the browser whether you want to allow your site to be framed or not.<br> •<b>X-XSS-Protection</b>: the best value is -> 1; mode=block .</html>" ) tab_4_jLabelRecomendacion.setFont(Font("Dialog", 0, 13)) tab_4 = JPanel(GridBagLayout()) splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT) tab_4_top = JPanel(GridBagLayout()) tab_4_bottom = JPanel(GridBagLayout()) gBC_table = GridBagConstraints() gBC_table.fill = GridBagConstraints.BOTH gBC_table.ipadx = 5 gBC_table.ipady = 5 gBC_table.insets = Insets(5, 10, 5, 10) gBC_table.weightx = 1 gBC_table.weighty = 1 tabla_datos = [] tabla_headers = ('Severity', 'Header', 'Value', 'Host') self._tab4_tabla_model = DefaultTableModel(tabla_datos, tabla_headers) tabla_ej = JTable(self._tab4_tabla_model) tabla_example = JScrollPane(tabla_ej, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) gBC_table.gridx = 0 gBC_table.gridy = 0 gBC_table.gridheight = 5 tab_4_top.add(tabla_example, gBC_table) gBC_table.gridheight = 1 gBC_table.weightx = 0.5 gBC_table.weighty = 0 gBC_table.gridwidth = 2 gBC_table.gridx = 0 gBC_table.gridy = 0 tab_4_bottom.add(JSeparator(), gBC_table) gBC_table.gridy = 1 tab_4_bottom.add(tab_4_jlabelAyuda, gBC_table) gBC_table.gridy = 2 tab_4_bottom.add(tab_4_jLabelRecomendacion, gBC_table) splitpane.setTopComponent(tab_4_top) splitpane.setBottomComponent(tab_4_bottom) gBC_table.weightx = 1 gBC_table.weighty = 1 gBC_table.gridx = 0 gBC_table.gridy = 0 tab_4.add(splitpane, gBC_table) ####################################### ### Creamos la quinta sub-tab. (ACTIVE SCAN) ####################################### tab_5 = JPanel(GridBagLayout()) tab_5_jlabelAyuda = JLabel( '<html><i>•Tip: This Quick Scan receive a list of targets and launch an active scan.</i></html>' ) tab_5_jlabelAyuda.setFont(Font("Serif", 0, 12)) tab_5_jlabelWarning = JLabel( '<html><font color=red><i>•Warning: Active scanning generates large numbers of requests which are malicious in form and which may result in compromise of the application. You should use this scanning mode with caution, only with the explicit permission of the application owner. For more information, read the documentation of active scan, Burp Suite.</font></i></html>' ) tab_5_jlabelWarning.setFont(Font("Dialog", 0, 13)) gBC.gridx = 0 gBC.gridy = 0 tab_5.add( JLabel( '<html><font color=green><i>List of targets: (i.e. http://192.168.1.1/index.html)</i></font></html>' ), gBC) gBC.gridy = 1 gBC.gridheight = 8 gBC.weighty = 0.5 tab_5.add(self._tab5_target_sp, gBC) gBC.gridheight = 1 gBC.weighty = 0 gBC.gridy = 9 tab_5.add(JButton('Launch Scan!', actionPerformed=self.do_active_scan), gBC) gBC.gridy = 10 gBC.gridwidth = 5 gBC.insets = Insets(100, 10, 5, 10) tab_5.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridy = 11 tab_5.add(tab_5_jlabelAyuda, gBC) gBC.gridy = 12 tab_5.add(tab_5_jlabelWarning, gBC) ####################################### ### Creamos la ultima sub-tab. ####################################### tab_about = JPanel(GridBagLayout()) gBC_about = GridBagConstraints() gBC_about.fill = GridBagConstraints.HORIZONTAL gBC_about.ipadx = 5 gBC_about.ipady = 5 gBC_about.insets = Insets(5, 10, 5, 10) gBC_about.weightx = 1 gBC_about.weighty = 1 Jlabel1 = JLabel('<html><b>Plug-in L-Tools</b></html>') Jlabel1.setFont(Font("Dialog", 1, 18)) jlabel2 = JLabel( '<html>This Plug-in provides utilities for pentesters, researchers and developers, in order to support their work.</html>' ) jlabel3 = JLabel('<html><b>CC-BY 4.0, 2017. Gino Angles</b></html>') jlabel3.setFont(Font("Dialog", 1, 14)) jlabel4 = JLabel('<html><b>License</b></html>') jlabel4.setFont(Font("Dialog", 1, 14)) jlabel5 = JLabel( '<html><img alt="Licensed under a Creative Commons BY" style="border-width:0" src="https://licensebuttons.net/l/by/4.0/88x31.png"></html>' ) jlabel6 = JLabel( '<html>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.</html>' ) jlabel7 = JLabel('<html><b>Dependencies</b></html>') jlabel7.setFont(Font("Dialog", 1, 14)) jlabel8 = JLabel('Jython +2.7') jlabel9 = JLabel('http://www.jython.org') gBC_about.gridx = 0 gBC_about.gridy = 0 tab_about.add(Jlabel1, gBC_about) gBC_about.gridy = 1 tab_about.add(jlabel2, gBC_about) gBC_about.gridy = 2 tab_about.add(jlabel3, gBC_about) gBC_about.gridy = 3 gBC_about.gridwidth = 5 tab_about.add(JSeparator(), gBC_about) gBC_about.gridwidth = 1 gBC_about.gridy = 4 tab_about.add(jlabel4, gBC_about) gBC_about.gridy = 5 tab_about.add(jlabel5, gBC_about) gBC_about.gridy = 6 tab_about.add(jlabel6, gBC_about) gBC_about.gridy = 7 gBC_about.gridwidth = 5 tab_about.add(JSeparator(), gBC_about) gBC_about.gridwidth = 1 gBC_about.gridy = 8 tab_about.add(jlabel7, gBC_about) gBC_about.gridy = 9 tab_about.add(jlabel8, gBC_about) gBC_about.gridy = 10 tab_about.add(jlabel9, gBC_about) # Añadimos los sub-tab al contenedor y lo devolvemos. self.contenedor.addTab('Mashup', tab_1) self.contenedor.addTab('Redirect', tab_2) self.contenedor.addTab('Loader', tab_3) self.contenedor.addTab('Headers', tab_4) self.contenedor.addTab('Quick Scan', tab_5) self.contenedor.addTab('About', tab_about) return self.contenedor # Funcion que copia el contenido de texto al clipboard. def cpy_clipboard(self, event): toolkit = Toolkit.getDefaultToolkit() clipboard = toolkit.getSystemClipboard() clipboard.setContents(StringSelection(self._tab1_feedback_ta.text), None) JOptionPane.showMessageDialog(self.contenedor, "Output copied to clipboard", "Information", JOptionPane.INFORMATION_MESSAGE) return # Funcion que instancia la clase Masher() y hace el mashup del sub-tab1 (mashup). def mashup(self, event): if self._tab1_minsize.value > self._tab1_maxsize.value: self._callbacks.issueAlert( 'Mashup=> min size have to be bigger than max size.') else: estado_JCH_trans = self._tab1_transformations.isSelected() especial_chars = self._tab1_specialchars.text.split(",") mymash = Masher(self._tab1_minsize.value, self._tab1_maxsize.value, especial_chars, estado_JCH_trans) reverse_name = self._tab1_nombre.text[::-1] if self._tab1_firstcapital.isSelected(): lista_palabras = [ self._tab1_nombre.text.title(), self._tab1_apellido.text.title(), self._tab1_FNacimiento.text, self._tab1_mascota.text.title(), self._tab1_otro.text.title(), reverse_name.title() ] else: lista_palabras = [ self._tab1_nombre.text, self._tab1_apellido.text, self._tab1_FNacimiento.text, self._tab1_mascota.text, self._tab1_otro.text, reverse_name ] while "" in lista_palabras: lista_palabras.remove("") rdo_rdo = mymash.mashup(lista_palabras, self._tab1_FNacimiento.text) self._tab1_feedback_ta.text = "\n".join(rdo_rdo) return # Funcion que activa/desactiva el redirect. def switch_redirect(self, event): if not self._tab2_encendido: self._tab2_boton.text = ' Redirect is On ' self._tab2_boton.background = Color.gray self._tab2_encendido = True # Registramos la instancia del escuchador http. self._callbacks.registerHttpListener(self) else: self._tab2_boton.text = ' Redirect is Off ' self._tab2_boton.background = Color.lightGray self._tab2_encendido = False # Borramos la instancia del escuchador http. self._callbacks.removeHttpListener(self) return # @override def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): if messageIsRequest and self._tab2_encendido: serviceHttp = messageInfo.getHttpService() if messageInfo.getHttpService().getHost() == self._tab2_JTFa.text: if self._tab2_JTFaa.text == '': self._tab2_JTFaa.text = 'localhost' messageInfo.setHttpService( self._helpers.buildHttpService(self._tab2_JTFaa.text, serviceHttp.getPort(), serviceHttp.getProtocol())) elif messageInfo.getHttpService().getHost( ) == self._tab2_JTFb.text: if self._tab2_JTFbb.text == '': self._tab2_JTFbb.text = 'localhost' messageInfo.setHttpService( self._helpers.buildHttpService(self._tab2_JTFbb.text, serviceHttp.getPort(), serviceHttp.getProtocol())) return # Funcion que carga el textArea de URL a Scope. def loader(self, event): lista_url = self._tab3_urls_ta.text.split("\n") for newUrl in lista_url: self._callbacks.includeInScope(URL(newUrl)) return # @override def doPassiveScan(self, request_response): _response = request_response.getResponse() _request = request_response.getRequest() _httpService = request_response.getHttpService() _url = request_response.getHttpService().getHost() info_response = self._helpers.analyzeResponse(_response) info_request = self._helpers.analyzeRequest(_httpService, _request) headers = info_response.getHeaders() _fullUrl = info_request.getUrl().toString() for head in headers: head_w1 = head.split("\n") for head_w2 in head_w1: head_w3 = head_w2.split(":") if len(head_w3) > 1: head_w3[0].encode('ascii', 'ignore') head_w3[1].encode('ascii', 'ignore') key = "%s-%s" % (_url, head_w3[0]) if key not in self._tab4_headers_dict: critical = self.analizeHeader(head_w3[0]) fila_tabla = [ critical, head_w3[0], head_w3[1], _fullUrl ] self._tab4_headers_dict[key] = fila_tabla self._tab4_tabla_model.addRow(fila_tabla) return # devuelve cuan importante es la cabecera HTTP. def analizeHeader(self, header): if header == "Content-Security-Policy": return "High" elif header == "X-Content-Type-Options": return "High" elif header == "X-Frame-Options": return "High" elif header == "X-XSS-Protection": return "High" elif header == "Strict-Transport-Security": return "High" elif header == "Public-Key-Pins": return "High" elif header == "Access-Control-Allow-Origin": return "High" elif header == "X-Permitted-Cross-Domain-Policies": return "High" elif header == "X-Powered-By": return "Information" elif header == "Server": return "Information" elif header == "Referrer-Policy": return "Medium" else: return " " # realiza un escaner al host/s apuntado. def do_active_scan(self, event): _lista_urls = self._tab5_target.text.split("\n") for _x_url in _lista_urls: _target_url = URL(_x_url) _target_request = self._helpers.buildHttpRequest(_target_url) _host = _target_url.getHost() _port = _target_url.getDefaultPort() _isHttps = True if _target_url.getProtocol() == "https" else False try: self._callbacks.doActiveScan(_host, _port, _isHttps, _target_request) except: pass return
def main(): activeLayers=getActiveLayers() if len(activeLayers)==0: JOptionPane.showMessageDialog(None, "Add and activate at least one vector layer in the view. Retry!", "Batch Transparency", JOptionPane.WARNING_MESSAGE) return else: numFLyrVect=0 for i in range(len(activeLayers)): if activeLayers[i].getClass().getCanonicalName()=="com.iver.cit.gvsig.fmap.layers.FLyrVect": numFLyrVect=numFLyrVect+1 if numFLyrVect==0: JOptionPane.showMessageDialog(None, "You have to add and activate at least one vector layer in the view. Retry!", "Batch Transparency", JOptionPane.WARNING_MESSAGE) return else: global frame, outCheckbox, fillCheckbox, slider frame = JFrame("Batch Transparency", defaultCloseOperation=JFrame.DISPOSE_ON_CLOSE, bounds=(100, 100, 450, 80), layout=FlowLayout(), resizable=0) outCheckbox = JCheckBox("outline", 1) fillCheckbox = JCheckBox("fill", 1) # Create a horizontal slider with min=0, max=100, value=50 slider = JSlider() slider.setPreferredSize(Dimension(200, 50)) slider.setValue(100) slider.setMajorTickSpacing(25) slider.setMinorTickSpacing(5) slider.setPaintTicks(1) slider.setPaintLabels(1) applyButton = JButton("Apply", actionPerformed=action) acceptButton = JButton("Accept", actionPerformed=accept) frame.add(outCheckbox) frame.add(fillCheckbox) frame.add(slider) frame.add(applyButton) frame.add(acceptButton) frame.show() return
def getGUI(sym_dict): global frame, outCheckbox, fillCheckbox, slider, colorTF, widthTF frame = JFrame("Border Symbology", defaultCloseOperation=JFrame.DISPOSE_ON_CLOSE, bounds=(100, 100, 450, 200), layout=FlowLayout(), resizable=0) colorL = JLabel('Color: ') colorTF = JTextField(20) color = sym_dict["color"] color = Color(color.getRed(), color.getGreen(), color.getBlue(), sym_dict["alpha"]) colorTF.setBackground(color) colorTF.setText(color.toString()) colorB = JButton('...', actionPerformed=colorChooser) frame.add(colorL) frame.add(colorTF) frame.add(colorB) widthL = JLabel('Width: ') widthTF = JTextField(3) widthTF.setText(str(sym_dict["width"])) frame.add(widthL) frame.add(widthTF) alphaL = JLabel('Transparency: ') frame.add(alphaL) # Create a horizontal slider with min=0, max=100, value=50 slider = JSlider() slider.setPreferredSize(Dimension(200, 50)) slider.setValue(sym_dict["alpha"]*100/255) slider.setMajorTickSpacing(25) slider.setMinorTickSpacing(5) slider.setPaintTicks(1) slider.setPaintLabels(1) applyButton = JButton("Apply", actionPerformed=action) acceptButton = JButton("Accept", actionPerformed=accept) frame.add(slider) frame.add(applyButton) frame.add(acceptButton) frame.show()
self.remove(oldViewable) return index class SliderListener(ChangeListener): def __init__(self, view): self.view = view def stateChanged(self, evt): s = evt.getSource() self.view.update(s.getValue()) frame = JFrame("Mesh taken from "+xmlDir+"* directories") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) canvas = MyView(xmlDir) frame.add(canvas, BorderLayout.CENTER) jSlider1 = JSlider() jSlider1.setValue(0) jSlider1.setMaximum(canvas.getMaxIndex()) jSlider1.setPaintLabels(True) jSlider1.addChangeListener(SliderListener(canvas)) frame.add(jSlider1, BorderLayout.SOUTH) frame.setSize(800,600) frame.setVisible(True) class MyKeyListener(KeyListener): def __init__(self, view, slider): self.view = view self.slider = slider def keyTyped(self, e): pass
class DebugControlPanel(JPanel): BUTTON_SIZE = (50, 50) def __init__(self, interpreter, debugger, debugPanel): self.interpreter = interpreter self.debugger = debugger self.debugPanel = debugPanel # Build our slider! self.slider = JSlider(JSlider.HORIZONTAL, debugger.MIN_SPEED, debugger.MAX_SPEED, debugger.speed, stateChanged=self._sliderSpeedChanged ) # Label the slider! self.sliderLabels = labels = Hashtable() labels.put(debugger.MIN_SPEED, JLabel("Slow")) labels.put(debugger.MAX_SPEED, JLabel("Fast")) self.slider.labelTable = labels self.slider.paintLabels = True # Build some buttons! self.buttonInsets = Insets(0, 0, 0, 0) self.watchButton = self.makeDebuggerButton( self.debugPanel.watchVariable, 'images/plus.jpg' ) self.unwatchButton = self.makeDebuggerButton( self.debugPanel.unwatchVariable, 'images/minus.jpg' ) self.fullspeedButton = self.makeDebuggerButton( self.debugPanel.fullSpeed, 'images/fullspeed.jpg' ) self.stopButton = self.makeDebuggerButton( self.interpreter.stopAction, 'images/stop.jpg' ) # Display them all! self.setLayout(BoxLayout(self, BoxLayout.X_AXIS)) self.add(self.slider) self.add(self.watchButton) self.add(self.unwatchButton) self.add(self.fullspeedButton) self.add(self.stopButton) # Connect the slider to the debugger! self.debugger.onSpeedSet.connect(self._showSpeedSetting) self.debugger.onStart.connect(self._lockControls) self.debugger.onStop.connect(self._unlockControls) def makeDebuggerButton(self, action, icon): imageIcon = JESResources.makeIcon(icon) return JButton(action, text=None, icon=imageIcon, margin=self.buttonInsets) @threadsafe def _sliderSpeedChanged(self, event): # These two event listeners could hypothetically go into # mutual recursion. To keep them from doing so, neither of them # trigger the other event unless the value actually changed. # This ensures they stop recursing after a single round. value = self.slider.getValue() if self.debugger.speed != value: self.debugger.setSpeed(value) @threadsafe def _showSpeedSetting(self, debugger, newSpeed, **_): if self.slider.getValue() != newSpeed: self.slider.setValue(newSpeed) @threadsafe def _lockControls(self, debugger, **_): self.debugPanel.watchVariable.enabled = False self.debugPanel.unwatchVariable.enabled = False self.debugPanel.fullSpeed.enabled = True @threadsafe def _unlockControls(self, debugger, **_): self.debugPanel.watchVariable.enabled = True self.debugPanel.unwatchVariable.enabled = True self.debugPanel.fullSpeed.enabled = False
def __init__(self, view): JPanel.__init__(self) self.view = view self.background = Color.white self.config_panel_height = 60 mainPanel = JPanel(background=self.background, layout=BorderLayout()) mainPanel.border = self.RoundedBorder() configPanel = JPanel(background=self.background, visible=False) self.layout = BorderLayout() self.add(mainPanel, BorderLayout.NORTH) self.add(configPanel, BorderLayout.SOUTH) self.config_button = JButton(Icon.arrowdown, rolloverIcon=ShadedIcon.arrowdown, toolTipText='configure', actionPerformed=self.configure, borderPainted=False, focusPainted=False, contentAreaFilled=False) self.add(self.config_button) self.configPanel = configPanel self.slider = JSlider(0, 1, 0, background=self.background) self.slider.snapToTicks = True mainPanel.add(self.slider) self.slider.addChangeListener(self) self.min_time = JLabel(' 0.0000 ', opaque=True, background=self.background) self.max_time = JLabel(' 0.0000 ', opaque=True, background=self.background) self.left_panel = JPanel(background=self.background) self.left_panel.add(JButton(Icon.restart, rolloverIcon=ShadedIcon.restart, toolTipText='restart', actionPerformed=self.start, borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.left_panel.add(self.min_time) self.left_panel.add(JButton(icon=Icon.start, rolloverIcon=ShadedIcon.start, toolTipText='jump to beginning', actionPerformed=lambda x: self.slider.setValue(self.slider.minimum), borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.right_panel = JPanel(background=self.background) self.right_panel.add(JButton(icon=Icon.end, rolloverIcon=ShadedIcon.end, toolTipText='jump to end', actionPerformed=lambda x: self.slider.setValue(self.slider.maximum), borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.right_panel.add(self.max_time) self.playpause_button = JButton(Icon.play, actionPerformed=self.pause, rolloverIcon=ShadedIcon.play, toolTipText='continue', borderPainted=False, focusPainted=False, contentAreaFilled=False) self.right_panel.add(self.playpause_button) mainPanel.add(self.left_panel, BorderLayout.WEST) mainPanel.add(self.right_panel, BorderLayout.EAST) pdf = JPanel(layout=BorderLayout(), opaque=False) pdf.add(JButton(Icon.pdf, rolloverIcon=ShadedIcon.pdf, toolTipText='save pdf', actionPerformed=self.save_pdf, borderPainted=False, focusPainted=False, contentAreaFilled=False)) pdf.add(JLabel('pdf', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) pdf.maximumSize = pdf.preferredSize configPanel.add(pdf) self.data = JPanel(layout=BorderLayout(), opaque=False) self.data.add(JButton(Icon.data, rolloverIcon=ShadedIcon.data, toolTipText='examine data', actionPerformed=self.show_data, borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.data.add(JLabel('data', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) self.data.maximumSize = self.data.preferredSize configPanel.add(self.data) mode = JPanel(layout=BorderLayout(), opaque=False) cb = JComboBox(['default', 'rate', 'direct']) if self.view.network.mode in [SimulationMode.DEFAULT, SimulationMode.PRECISE]: cb.setSelectedIndex(0) elif self.view.network.mode in [SimulationMode.RATE]: cb.setSelectedIndex(1) elif self.view.network.mode in [SimulationMode.DIRECT, SimulationMode.APPROXIMATE]: cb.setSelectedIndex(2) cb.addActionListener(self) self.mode_combobox = cb mode.add(cb) mode.add(JLabel('mode'), BorderLayout.NORTH) mode.maximumSize = mode.preferredSize configPanel.add(mode) dt = JPanel(layout=BorderLayout(), opaque=False) cb = JComboBox(['0.001', '0.0005', '0.0002', '0.0001']) cb.setSelectedIndex(0) self.view.dt = float(cb.getSelectedItem()) cb.addActionListener(self) self.dt_combobox = cb dt.add(cb) dt.add(JLabel('time step'), BorderLayout.NORTH) dt.maximumSize = dt.preferredSize configPanel.add(dt) rate = JPanel(layout=BorderLayout(), opaque=False) self.rate_combobox = JComboBox(['fastest', '1x', '0.5x', '0.2x', '0.1x', '0.05x', '0.02x', '0.01x', '0.005x', '0.002x', '0.001x']) self.rate_combobox.setSelectedIndex(4) self.view.set_target_rate(self.rate_combobox.getSelectedItem()) self.rate_combobox.addActionListener(self) rate.add(self.rate_combobox) rate.add(JLabel('speed'), BorderLayout.NORTH) rate.maximumSize = rate.preferredSize configPanel.add(rate) spin1 = JPanel(layout=BorderLayout(), opaque=False) self.record_time_spinner = JSpinner(SpinnerNumberModel((self.view.timelog.tick_limit - 1) * self.view.dt, 0.1, 100, 1), stateChanged=self.tick_limit) spin1.add(self.record_time_spinner) spin1.add(JLabel('recording time'), BorderLayout.NORTH) spin1.maximumSize = spin1.preferredSize configPanel.add(spin1) spin2 = JPanel(layout=BorderLayout(), opaque=False) self.filter_spinner = JSpinner(SpinnerNumberModel(self.view.tau_filter, 0, 0.5, 0.01), stateChanged=self.tau_filter) spin2.add(self.filter_spinner) spin2.add(JLabel('filter'), BorderLayout.NORTH) spin2.maximumSize = spin2.preferredSize configPanel.add(spin2) spin3 = JPanel(layout=BorderLayout(), opaque=False) self.time_shown_spinner = JSpinner(SpinnerNumberModel(self.view.time_shown, 0.01, 50, 0.1), stateChanged=self.time_shown) spin3.add(self.time_shown_spinner) spin3.add(JLabel('time shown'), BorderLayout.NORTH) spin3.maximumSize = spin3.preferredSize configPanel.add(spin3) spin4 = JPanel(layout=BorderLayout(), opaque=False) self.freq_spinner = JSpinner(SpinnerNumberModel(1000.0/self.view.data_update_period, 1, 50, 1), stateChanged=self.update_frequency) spin4.add(self.freq_spinner) spin4.add(JLabel('freq (Hz)'), BorderLayout.NORTH) spin4.maximumSize = spin4.preferredSize configPanel.add(spin4) layout = JPanel(layout=BorderLayout(), opaque=False) layout.add(JButton(icon=Icon.save, rolloverIcon=ShadedIcon.save, actionPerformed=self.save, borderPainted=False, focusPainted=False, contentAreaFilled=False, margin=java.awt.Insets(0, 0, 0, 0), toolTipText='save layout'), BorderLayout.WEST) layout.add(JButton(icon=Icon.restore, rolloverIcon=ShadedIcon.restore, actionPerformed=self.restore, borderPainted=False, focusPainted=False, contentAreaFilled=False, margin=java.awt.Insets(0, 0, 0, 0), toolTipText='restore layout'), BorderLayout.EAST) layout.add(JLabel('layout', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) layout.maximumSize = layout.preferredSize configPanel.add(layout) configPanel.setPreferredSize(java.awt.Dimension(20, self.config_panel_height)) configPanel.visible = False for c in [dt, rate, spin1, spin2, spin3]: c.border = javax.swing.border.EmptyBorder(0, 10, 0, 10)
class TimeControl(JPanel, ChangeListener, ActionListener): def __init__(self, view): JPanel.__init__(self) self.view = view self.background = Color.white self.config_panel_height = 60 mainPanel = JPanel(background=self.background, layout=BorderLayout()) mainPanel.border = self.RoundedBorder() configPanel = JPanel(background=self.background, visible=False) self.layout = BorderLayout() self.add(mainPanel, BorderLayout.NORTH) self.add(configPanel, BorderLayout.SOUTH) self.config_button = JButton(Icon.arrowdown, rolloverIcon=ShadedIcon.arrowdown, toolTipText='configure', actionPerformed=self.configure, borderPainted=False, focusPainted=False, contentAreaFilled=False) self.add(self.config_button) self.configPanel = configPanel self.slider = JSlider(0, 1, 0, background=self.background) self.slider.snapToTicks = True mainPanel.add(self.slider) self.slider.addChangeListener(self) self.min_time = JLabel(' 0.0000 ', opaque=True, background=self.background) self.max_time = JLabel(' 0.0000 ', opaque=True, background=self.background) self.left_panel = JPanel(background=self.background) self.left_panel.add(JButton(Icon.restart, rolloverIcon=ShadedIcon.restart, toolTipText='restart', actionPerformed=self.start, borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.left_panel.add(self.min_time) self.left_panel.add(JButton(icon=Icon.start, rolloverIcon=ShadedIcon.start, toolTipText='jump to beginning', actionPerformed=lambda x: self.slider.setValue(self.slider.minimum), borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.right_panel = JPanel(background=self.background) self.right_panel.add(JButton(icon=Icon.end, rolloverIcon=ShadedIcon.end, toolTipText='jump to end', actionPerformed=lambda x: self.slider.setValue(self.slider.maximum), borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.right_panel.add(self.max_time) self.playpause_button = JButton(Icon.play, actionPerformed=self.pause, rolloverIcon=ShadedIcon.play, toolTipText='continue', borderPainted=False, focusPainted=False, contentAreaFilled=False) self.right_panel.add(self.playpause_button) mainPanel.add(self.left_panel, BorderLayout.WEST) mainPanel.add(self.right_panel, BorderLayout.EAST) pdf = JPanel(layout=BorderLayout(), opaque=False) pdf.add(JButton(Icon.pdf, rolloverIcon=ShadedIcon.pdf, toolTipText='save pdf', actionPerformed=self.save_pdf, borderPainted=False, focusPainted=False, contentAreaFilled=False)) pdf.add(JLabel('pdf', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) pdf.maximumSize = pdf.preferredSize configPanel.add(pdf) self.data = JPanel(layout=BorderLayout(), opaque=False) self.data.add(JButton(Icon.data, rolloverIcon=ShadedIcon.data, toolTipText='examine data', actionPerformed=self.show_data, borderPainted=False, focusPainted=False, contentAreaFilled=False)) self.data.add(JLabel('data', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) self.data.maximumSize = self.data.preferredSize configPanel.add(self.data) mode = JPanel(layout=BorderLayout(), opaque=False) cb = JComboBox(['default', 'rate', 'direct']) if self.view.network.mode in [SimulationMode.DEFAULT, SimulationMode.PRECISE]: cb.setSelectedIndex(0) elif self.view.network.mode in [SimulationMode.RATE]: cb.setSelectedIndex(1) elif self.view.network.mode in [SimulationMode.DIRECT, SimulationMode.APPROXIMATE]: cb.setSelectedIndex(2) cb.addActionListener(self) self.mode_combobox = cb mode.add(cb) mode.add(JLabel('mode'), BorderLayout.NORTH) mode.maximumSize = mode.preferredSize configPanel.add(mode) dt = JPanel(layout=BorderLayout(), opaque=False) cb = JComboBox(['0.001', '0.0005', '0.0002', '0.0001']) cb.setSelectedIndex(0) self.view.dt = float(cb.getSelectedItem()) cb.addActionListener(self) self.dt_combobox = cb dt.add(cb) dt.add(JLabel('time step'), BorderLayout.NORTH) dt.maximumSize = dt.preferredSize configPanel.add(dt) rate = JPanel(layout=BorderLayout(), opaque=False) self.rate_combobox = JComboBox(['fastest', '1x', '0.5x', '0.2x', '0.1x', '0.05x', '0.02x', '0.01x', '0.005x', '0.002x', '0.001x']) self.rate_combobox.setSelectedIndex(4) self.view.set_target_rate(self.rate_combobox.getSelectedItem()) self.rate_combobox.addActionListener(self) rate.add(self.rate_combobox) rate.add(JLabel('speed'), BorderLayout.NORTH) rate.maximumSize = rate.preferredSize configPanel.add(rate) spin1 = JPanel(layout=BorderLayout(), opaque=False) self.record_time_spinner = JSpinner(SpinnerNumberModel((self.view.timelog.tick_limit - 1) * self.view.dt, 0.1, 100, 1), stateChanged=self.tick_limit) spin1.add(self.record_time_spinner) spin1.add(JLabel('recording time'), BorderLayout.NORTH) spin1.maximumSize = spin1.preferredSize configPanel.add(spin1) spin2 = JPanel(layout=BorderLayout(), opaque=False) self.filter_spinner = JSpinner(SpinnerNumberModel(self.view.tau_filter, 0, 0.5, 0.01), stateChanged=self.tau_filter) spin2.add(self.filter_spinner) spin2.add(JLabel('filter'), BorderLayout.NORTH) spin2.maximumSize = spin2.preferredSize configPanel.add(spin2) spin3 = JPanel(layout=BorderLayout(), opaque=False) self.time_shown_spinner = JSpinner(SpinnerNumberModel(self.view.time_shown, 0.01, 50, 0.1), stateChanged=self.time_shown) spin3.add(self.time_shown_spinner) spin3.add(JLabel('time shown'), BorderLayout.NORTH) spin3.maximumSize = spin3.preferredSize configPanel.add(spin3) spin4 = JPanel(layout=BorderLayout(), opaque=False) self.freq_spinner = JSpinner(SpinnerNumberModel(1000.0/self.view.data_update_period, 1, 50, 1), stateChanged=self.update_frequency) spin4.add(self.freq_spinner) spin4.add(JLabel('freq (Hz)'), BorderLayout.NORTH) spin4.maximumSize = spin4.preferredSize configPanel.add(spin4) layout = JPanel(layout=BorderLayout(), opaque=False) layout.add(JButton(icon=Icon.save, rolloverIcon=ShadedIcon.save, actionPerformed=self.save, borderPainted=False, focusPainted=False, contentAreaFilled=False, margin=java.awt.Insets(0, 0, 0, 0), toolTipText='save layout'), BorderLayout.WEST) layout.add(JButton(icon=Icon.restore, rolloverIcon=ShadedIcon.restore, actionPerformed=self.restore, borderPainted=False, focusPainted=False, contentAreaFilled=False, margin=java.awt.Insets(0, 0, 0, 0), toolTipText='restore layout'), BorderLayout.EAST) layout.add(JLabel('layout', horizontalAlignment=javax.swing.SwingConstants.CENTER), BorderLayout.NORTH) layout.maximumSize = layout.preferredSize configPanel.add(layout) configPanel.setPreferredSize(java.awt.Dimension(20, self.config_panel_height)) configPanel.visible = False for c in [dt, rate, spin1, spin2, spin3]: c.border = javax.swing.border.EmptyBorder(0, 10, 0, 10) def show_data(self, event): frame = JFrame('%s Data' % self.view.network.name) frame.visible = True frame.add(timeview.data.DataPanel(self.view)) frame.size = (500, 600) def forward_one_frame(self, event): self.slider.setValue(self.slider.value + 1) def backward_one_frame(self, event): self.slider.setValue(self.slider.value - 1) def set_max_time(self, maximum): self.slider.maximum = maximum self.max_time.text = ' %1.4f ' % (self.view.dt * maximum) def set_min_time(self, minimum): self.slider.minimum = minimum self.min_time.text = ' %1.4f ' % (self.view.dt * minimum) def stateChanged(self, event): self.view.current_tick = self.slider.value self.view.area.repaint() def start(self, event): self.view.restart = True def configure(self, event): view_state = self.view.frame.getExtendedState() if self.configPanel.visible: self.view.frame.setSize(self.view.frame.width, self.view.frame.height - self.config_panel_height) self.configPanel.visible = False self.config_button.icon = Icon.arrowdown self.config_button.rolloverIcon = ShadedIcon.arrowdown self.config_button.toolTipText = 'configure' else: if(view_state & self.view.frame.MAXIMIZED_BOTH == self.view.frame.MAXIMIZED_BOTH): self.view.frame.setSize(self.view.frame.width, self.view.frame.height) else: self.view.frame.setSize(self.view.frame.width, self.view.frame.height + self.config_panel_height) self.configPanel.visible = True self.config_button.icon = Icon.arrowup self.config_button.rolloverIcon = ShadedIcon.arrowup self.config_button.toolTipText = 'hide configuration' self.view.frame.setExtendedState(view_state) self.view.frame.layout.layoutContainer(self.view.frame) self.layout.layoutContainer(self) self.view.frame.layout.layoutContainer(self.view.frame) self.layout.layoutContainer(self) self.view.frame.layout.layoutContainer(self.view.frame) self.view.frame.repaint() def pause(self, event): self.view.paused = not self.view.paused if self.view.paused: self.playpause_button.icon = Icon.play self.playpause_button.rolloverIcon = ShadedIcon.play self.playpause_button.toolTipText = 'continue' else: self.playpause_button.icon = Icon.pause self.playpause_button.rolloverIcon = ShadedIcon.pause self.playpause_button.toolTipText = 'pause' def tau_filter(self, event): self.view.tau_filter = float(event.source.value) self.view.area.repaint() def time_shown(self, event): self.view.time_shown = float(event.source.value) self.view.area.repaint() def actionPerformed(self, event): dt = float(self.dt_combobox.getSelectedItem()) if dt != self.view.dt: self.view.dt = dt self.record_time_spinner.value = (self.view.timelog.tick_limit - 1) * self.view.dt self.dt_combobox.repaint() self.view.restart = True self.view.set_target_rate(self.rate_combobox.getSelectedItem()) if self.mode_combobox is not None: mode = self.mode_combobox.getSelectedItem() if mode == 'default': requested = SimulationMode.DEFAULT elif mode == 'rate': requested = SimulationMode.RATE elif mode == 'direct': requested = SimulationMode.DIRECT if requested != self.view.network.mode: self.view.requested_mode = requested def tick_limit(self, event): self.view.timelog.tick_limit = int(event.source.value / self.view.dt) + 1 def update_frequency(self, event): self.view.data_update_period = 1000.0 / event.source.value def save(self, event): self.view.save() def restore(self, event): self.view.restore() def save_pdf(self, event): from com.itextpdf.text.pdf import PdfWriter from com.itextpdf.text import Document fileChooser = JFileChooser() fileChooser.setSelectedFile(java.io.File('%s.pdf' % self.view.network.name)) if fileChooser.showSaveDialog(self) == JFileChooser.APPROVE_OPTION: f = fileChooser.getSelectedFile() doc = Document() writer = PdfWriter.getInstance(doc, java.io.FileOutputStream(f)) doc.open() cb = writer.getDirectContent() w = self.view.area.size.width h = self.view.area.size.height pw = 550 ph = 800 tp = cb.createTemplate(pw, ph) g2 = tp.createGraphicsShapes(pw, ph) at = java.awt.geom.AffineTransform() s = min(float(pw) / w, float(ph) / h) at.scale(s, s) g2.transform(at) self.view.area.pdftemplate = tp, s self.view.area.paint(g2) self.view.area.pdftemplate = None g2.dispose() cb.addTemplate(tp, 20, 0) doc.close() class RoundedBorder(javax.swing.border.AbstractBorder): def __init__(self): self.color = Color(0.7, 0.7, 0.7) def getBorderInsets(self, component): return java.awt.Insets(5, 5, 5, 5) def paintBorder(self, c, g, x, y, width, height): g.color = self.color g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) g.drawRoundRect(x, y, width - 1, height - 1, 10, 10)