class myAnimFrame: """ Supporting class for animations. """ def desty(self, event): self.display.destroy() self.frame.dispose() def __init__(self, display, widget, width, height, title): from javax.swing import JFrame, JPanel from java.awt import BorderLayout, FlowLayout self.display = display self.panel = JPanel(BorderLayout()) self.panel2 = JPanel(FlowLayout()) self.panel2.add(widget) self.panel.add("North", self.panel2) self.panel.add("Center",self.display.getComponent()) self.frame = JFrame(title, windowClosing=self.desty) self.pane = self.frame.getContentPane() self.pane.add(self.panel) self.frame.setSize(width,height) self.frame.pack() self.frame.show()
class _AccountAdder: def __init__(self, contactslist): self.contactslist = contactslist self.mainframe = JFrame("Add New Contact") self.account = JComboBox(self.contactslist.clientsByName.keys()) self.contactname = JTextField() self.buildpane() def buildpane(self): buttons = JPanel() buttons.add(JButton("OK", actionPerformed=self.add)) buttons.add(JButton("Cancel", actionPerformed=self.cancel)) acct = JPanel(GridLayout(1, 2), doublebuffered) acct.add(JLabel("Account")) acct.add(self.account) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.Y_AXIS)) mainpane.add(self.contactname) mainpane.add(acct) mainpane.add(buttons) self.mainframe.pack() self.mainframe.show() #action listeners def add(self, ae): acct = self.contactslist.clientsByName[self.account.getSelectedItem()] acct.addContact(self.contactname.getText()) self.mainframe.dispose() def cancel(self, ae): self.mainframe.dispose()
class myAnimFrame: """ Supporting class for animations. """ def desty(self, event): self.display.destroy() self.frame.dispose() def __init__(self, display, widget, width, height, title): from javax.swing import JFrame, JPanel from java.awt import BorderLayout, FlowLayout self.display = display self.panel = JPanel(BorderLayout()) self.panel2 = JPanel(FlowLayout()) self.panel2.add(widget) self.panel.add("North", self.panel2) self.panel.add("Center", self.display.getComponent()) self.frame = JFrame(title, windowClosing=self.desty) self.pane = self.frame.getContentPane() self.pane.add(self.panel) self.frame.setSize(width, height) self.frame.pack() self.frame.show()
def test_swing(): frame = JFrame("Hello Jython") button = JButton("Pulsar", actionPerformed = hello) frame.add(button) frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setSize(200, 100) frame.show()
class ConversationWindow(Conversation): """A GUI window of a conversation with a specific person""" def __init__(self, person, chatui): """ConversationWindow(basesupport.AbstractPerson:person)""" Conversation.__init__(self, person, chatui) self.mainframe = JFrame("Conversation with "+person.name) self.display = JTextArea(columns=100, rows=15, editable=0, lineWrap=1) self.typepad = JTextField() self.buildpane() self.lentext = 0 def buildpane(self): buttons = JPanel(doublebuffered) buttons.add(JButton("Send", actionPerformed=self.send)) buttons.add(JButton("Hide", actionPerformed=self.hidewindow)) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.Y_AXIS)) mainpane.add(JScrollPane(self.display)) self.typepad.actionPerformed = self.send mainpane.add(self.typepad) mainpane.add(buttons) def show(self): self.mainframe.pack() self.mainframe.show() def hide(self): self.mainframe.hide() def sendText(self, text): self.displayText("\n"+self.person.client.name+": "+text) Conversation.sendText(self, text) def showMessage(self, text, metadata=None): self.displayText("\n"+self.person.name+": "+text) def contactChangedNick(self, person, newnick): Conversation.contactChangedNick(self, person, newnick) self.mainframe.setTitle("Conversation with "+newnick) #GUI code def displayText(self, text): self.lentext = self.lentext + len(text) self.display.append(text) self.display.setCaretPosition(self.lentext) #actionlisteners def hidewindow(self, ae): self.hide() def send(self, ae): text = self.typepad.getText() self.typepad.setText("") if text != "" and text != None: self.sendText(text)
def run_fn(event): log_window = JFrame('Galahad Log') log_text_area = JTextArea() log_text_area.editable = False log_window.setSize(400, 500) log_window.add(log_text_area) log_window.show() log_text_area.append('sdfsdfsdfsdfsd %d' % 3)
class ConversationWindow(Conversation): """A GUI window of a conversation with a specific person""" def __init__(self, person, chatui): """ConversationWindow(basesupport.AbstractPerson:person)""" Conversation.__init__(self, person, chatui) self.mainframe = JFrame("Conversation with " + person.name) self.display = JTextArea(columns=100, rows=15, editable=0, lineWrap=1) self.typepad = JTextField() self.buildpane() self.lentext = 0 def buildpane(self): buttons = JPanel(doublebuffered) buttons.add(JButton("Send", actionPerformed=self.send)) buttons.add(JButton("Hide", actionPerformed=self.hidewindow)) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.Y_AXIS)) mainpane.add(JScrollPane(self.display)) self.typepad.actionPerformed = self.send mainpane.add(self.typepad) mainpane.add(buttons) def show(self): self.mainframe.pack() self.mainframe.show() def hide(self): self.mainframe.hide() def sendText(self, text): self.displayText("\n" + self.person.client.name + ": " + text) Conversation.sendText(self, text) def showMessage(self, text, metadata=None): self.displayText("\n" + self.person.name + ": " + text) def contactChangedNick(self, person, newnick): Conversation.contactChangedNick(self, person, newnick) self.mainframe.setTitle("Conversation with " + newnick) #GUI code def displayText(self, text): self.lentext = self.lentext + len(text) self.display.append(text) self.display.setCaretPosition(self.lentext) #actionlisteners def hidewindow(self, ae): self.hide() def send(self, ae): text = self.typepad.getText() self.typepad.setText("") if text != "" and text != None: self.sendText(text)
def show_plot_in_frame(mainPanel): """ embeds panel containing plots in a closable frame clears the panel background to white """ fr=JFrame() fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) fr.getContentPane().add(mainPanel) fr.setSize(1100,850); mainPanel.setSize(1100,850); mainPanel.setBackground(Color.WHITE); fr.show(); return fr
def show_plot_in_frame(mainPanel): """ embeds panel containing plots in a closable frame clears the panel background to white """ fr = JFrame() fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) fr.getContentPane().add(mainPanel) fr.setSize(1100, 850) mainPanel.setSize(1100, 850) mainPanel.setBackground(Color.WHITE) fr.show() return fr
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()
def show_gui(): """ Shows a GUI to select dss files to compare and select an input file """ from javax.swing import JPanel, JFrame, JButton, SpringLayout, JTextBox from javax.swing.border import LineBorder textBox1 = JTextBox() textBox2 = JTextBox() file1ChooseButton = JButton("Choose File") file2ChooseButton = JButton("Choose File") contentPane = JPanel(SpringLayout()) contentPane.setBorder(LineBorder(Color.blue)) contentPane.add(JLabel("Alternative DSS File")) contentPane.add(textBox1) contentPane.add(file1ChooseButton) contentPane.add(JLabel("Base DSS File")) contentPane.add(textBox2) contentPane.add(file2ChooseButton) fr = JFrame("Calsim Report Generator") fr.contentPane().add(contentPane) fr.pack();fr.show();
class correctionTable(TextPanel): """A class that displays an imagePlus and a resultstable. Resultstable and imp are linked in such a way that click on a table row shows the imps respective timeframe.""" def __init__(self, cell, mF, title="Results"): # add mF? # Call constructor of superclass TextPanel.__init__(self) # pass menue for setting save active/inactive self.cell = cell self.mF = mF # Create a window to show the content in self.window = JFrame() self.window.add(self) self.window.setTitle(title) # Add event listeners for keyboard and mouse responsiveness self.addKeyListener(ListenToKey()) self.addMouseListener(ListenToMouse()) # TODO: unpacking info out of cell object should be done in cell object itself and accessible e. g. via getData() self.imp = self.openImp(self.cell.getMeasTifPath()) csvFile = open(self.cell.getCsvPath()) lines = csvFile.readlines() heads = lines.pop(0) self.setColumnHeadings("Frame\tDistance\tAnaphase") self.XYZtable = [] for line in lines: # load file lines in textPanel. frame, timepoint, dist, ch0x, ch0y, ch0z, ch0vol, ch1x, ch1y, ch1z, ch1vol = line.split(",") self.append(frame + "\t" + dist + "\t" ) self.XYZtable.append((ch0x, ch0y, ch0z, ch0vol, ch1x, ch1y, ch1z, ch1vol)) self.setSelection(0,0) # int startline, int endline self.changeFrame() self.mF.setSaveInactive() self.requestFocus() self.window.setSize(Dimension(220, 600)) x = int(self.imp.getWindow().getLocation().getX()) + int(self.imp.getWindow().getWidth()) + 10 self.window.setLocation(x, int(self.imp.getWindow().getLocation().getY()) ) self.window.show() # Methods implementing KeyAdapter and MouseListener #... no multiple inheritance for Java classes? # - - - - Event driven methods - - - - # ------------------------------------ def changeFrame(self): if self.getSelectionEnd() >= 0: frame, dist, AOCol = self.getLine(self.getSelectionEnd()).split("\t") self.imp.setSlice(int(frame)+1) def setAnaphase(self): frame, Distance, x = self.getLine(self.getSelectionEnd()).split("\t") #set anaphase onset self.cell.setAnOn(frame) for i in range(self.getLineCount()): # very unelegantly solved, but it works. blFr, blDist, blAOCol = self.getLine(i).split("\t") self.setLine(i, blFr + "\t" + blDist + "\t") frame, distance, AOCol = self.getLine(self.getSelectionEnd()).split("\t") # get old line self.setLine(self.getSelectionEnd(), frame + "\t" + distance + "\tX") # setFocus back to tw,tp self.mF.setSaveActive() print "Anaphase set to", self.cell.getAnOn() def delVal(self): frame, distance, AOCol = self.getLine(self.getSelectionEnd()).split("\t") self.setLine(self.getSelectionEnd(), frame + "\tNA" + "\t" + AOCol) # - other methods def openImp(self, path): imp = ImagePlus(path) # open associated tif file imp.show() imp.getWindow().setLocationAndSize(280, 120, imp.getWidth()*4, imp.getHeight()*4) # int x, int y, int width, int height return imp def getImp(self): return self.imp def getXYZtable(self): return self.XYZtable def closeWindows(self): self.imp.close() WindowManager.removeWindow(self.window) self.window.dispose()
#------------------------------------------------------------------------------- # Name: Welcome.py # From: Swing for Jython # By: Robert A. (Bob) Gibson [rag] # ISBN-13: 978-1-4824-0818-2 (paperback) # ISBN-13: 978-1-4824-0817-5 (electronic) # website: http://www.apress.com/978148420818 # Role: A simple, and straightforward script showing how to create a frame # Note: If executed using wsadmin, the script terminates immediately. # Using the close icon ('X' in top right corner) does not terminate # the script, so closing the command prompt window is suggested. # Usage: wsadmin -f Welcome.py # or # jython Welcome.py # History: # date who ver Comment # -------- --- --- ---------- # 14/10/21 rag 0.0 New - ... #------------------------------------------------------------------------------- from javax.swing import JFrame win = JFrame( 'Welcome to Jython Swing' ) win.size = ( 400, 100 ) win.show()
def doall(locations, fileobs, filerun1, filerun2, stime, etime, imageDir='d:/temp', weights=None, filter_type="AVE", normalize=False): obs = HecDss.open(fileobs, True) obs.setTimeWindow(stime, etime) run1 = HecDss.open(filerun1, True) run1.setTimeWindow(stime, etime) if filerun2 != None: run2 = HecDss.open(filerun2, True) run2.setTimeWindow(stime, etime) else: run2 = None rms1 = 0 rms1_min, rms1_max = 0, 0 rms2 = 0 rms2_min, rms2_max = 0, 0 rmsmap = {} #run2=None sumwts = 0 average_interval = None for l in locations: data1 = get_matching(obs, 'A=%s C=%s E=15MIN' % (l, type)) if data1 == None: data1 = get_matching(obs, 'A=%s C=%s E=1DAY' % (l, type)) if data1 == None: data1 = get_matching(obs, 'A=%s C=%s E=IR-DAY' % (l, type)) if data1 == None: data1 = get_matching(obs, 'A=%s C=%s E=1HOUR' % (l, type)) drun1 = get_matching(run1, 'B=%s C=%s' % (l, type)) if run2 != None: drun2 = get_matching(run2, 'B=%s C=%s' % (l, type)) else: drun2 = None avg_intvl = "1DAY" if data1 != None: if average_interval != None: dobsd = TimeSeriesMath(data1).transformTimeSeries( average_interval, None, filter_type, 0) else: dobsd = TimeSeriesMath(data1) if normalize: dobsd = dobsd.divide(TimeSeriesMath(data1).mean()) dobsm = TimeSeriesMath(data1).transformTimeSeries( avg_intvl, None, filter_type, 0) dobsm_max = TimeSeriesMath(data1).transformTimeSeries( avg_intvl, None, "MAX", 0) dobsm_max.data.fullName = dobsm_max.data.fullName + "MAX" dobsm_min = TimeSeriesMath(data1).transformTimeSeries( avg_intvl, None, "MIN", 0) dobsm_min.data.fullName = dobsm_min.data.fullName + "MIN" if normalize: dobsm = dobsm.divide(TimeSeriesMath(data1).mean()) if drun1 == None: continue else: if average_interval != None: drun1d = TimeSeriesMath(drun1).transformTimeSeries( average_interval, None, filter_type, 0) else: drun1d = TimeSeriesMath(drun1) if normalize: drun1d = drun1d.divide(TimeSeriesMath(drun1).mean()) if drun2 != None: if average_interval != None: drun2d = TimeSeriesMath(drun2).transformTimeSeries( average_interval, None, filter_type, 0) else: drun2d = TimeSeriesMath(drun2) if normalize: drun2d = drun2d.divide(TimeSeriesMath(drun2).mean()) drun1m = TimeSeriesMath(drun1).transformTimeSeries( avg_intvl, None, filter_type, 0) drun1m_max = TimeSeriesMath(drun1).transformTimeSeries( avg_intvl, None, "MAX", 0) drun1m_min = TimeSeriesMath(drun1).transformTimeSeries( avg_intvl, None, "MIN", 0) if normalize: drun1m = drun1m.divide(TimeSeriesMath(drun1).mean()) if drun2 != None: drun2m = TimeSeriesMath(drun2).transformTimeSeries( avg_intvl, None, filter_type, 0) drun2m_max = TimeSeriesMath(drun2).transformTimeSeries( avg_intvl, None, "MAX", 0) drun2m_min = TimeSeriesMath(drun2).transformTimeSeries( avg_intvl, None, "MIN", 0) if normalize: drun2m = drun2m.divide(TimeSeriesMath(drun2).mean()) else: drun2m = None if weights != None: sumwts = sumwts + weights[l] lrms1 = calculate_rms(drun1m.data, dobsm.data) * weights[l] lrms1_min = calculate_rms(drun1m_min.data, dobsm_min.data) * weights[l] lrms1_max = calculate_rms(drun1m_max.data, dobsm_max.data) * weights[l] rms1 = rms1 + lrms1 rms1_min = rms1_min + lrms1_min rms1_max = rms1_max + lrms1_max lrms2 = calculate_rms(drun2m.data, dobsm.data) * weights[l] lrms2_min = calculate_rms(drun2m_min.data, dobsm_min.data) * weights[l] lrms2_max = calculate_rms(drun2m_max.data, dobsm_max.data) * weights[l] rmsmap[ l] = lrms1, lrms2, lrms1_min, lrms2_min, lrms1_max, lrms2_max rms2 = rms2 + lrms2 rms2_min = rms2_min + lrms2_min rms2_max = rms2_max + lrms2_max plotd = newPlot("Hist vs New Geom [%s]" % l) if data1 != None: plotd.addData(dobsd.data) plotd.addData(drun1d.data) if drun2 != None: plotd.addData(drun2d.data) plotd.showPlot() legend_label = plotd.getLegendLabel(drun1d.data) legend_label.setText(legend_label.getText() + " [" + str(int(lrms1 * 100) / 100.) + "," + str(int(lrms1_min * 100) / 100.) + "," + str(int(lrms1_max * 100) / 100.) + "]") legend_label = plotd.getLegendLabel(drun2d.data) legend_label.setText(legend_label.getText() + " [" + str(int(lrms2 * 100) / 100.) + "," + str(int(lrms2_min * 100) / 100.) + "," + str(int(lrms2_max * 100) / 100.) + "]") plotd.setVisible(False) xaxis = plotd.getViewport(0).getAxis("x1") vmin = xaxis.getViewMin() + 261500. # hardwired to around july 1, 2008 xaxis.setViewLimits(vmin, vmin + 10000.) if data1 != None: pline = plotd.getCurve(dobsd.data) pline.setLineVisible(1) pline.setLineColor("blue") pline.setSymbolType(Symbol.SYMBOL_CIRCLE) pline.setSymbolsVisible(0) pline.setSymbolSize(3) pline.setSymbolSkipCount(0) pline.setSymbolFillColor(pline.getLineColorString()) pline.setSymbolLineColor(pline.getLineColorString()) g2dPanel = plotd.getPlotpanel() g2dPanel.revalidate() g2dPanel.paintGfx() plotm = newPlot("Hist vs New Geom Monthly [%s]" % l) plotm.setSize(1800, 1200) if data1 != None: plotm.addData(dobsm.data) #plotm.addData(dobsm_max.data) #plotm.addData(dobsm_min.data) plotm.addData(drun1m.data) #plotm.addData(drun1m_max.data) #plotm.addData(drun1m_min.data) if drun2 != None: plotm.addData(drun2m.data) #plotm.addData(drun2m_max.data) #plotm.addData(drun2m_min.data) plotm.showPlot() if data1 != None: pline = plotm.getCurve(dobsm.data) pline.setLineVisible(1) pline.setLineColor("blue") pline.setSymbolType(Symbol.SYMBOL_CIRCLE) pline.setSymbolsVisible(0) pline.setSymbolSize(3) pline.setSymbolSkipCount(0) pline.setSymbolFillColor(pline.getLineColorString()) pline.setSymbolLineColor(pline.getLineColorString()) plotm.setVisible(False) if data1 != None: plots = do_regression_plots(dobsm, drun1m, drun2m) if plots != None: spanel = plots.getPlotpanel() removeToolbar(spanel) mpanel = plotm.getPlotpanel() removeToolbar(mpanel) dpanel = plotd.getPlotpanel() removeToolbar(dpanel) from javax.swing import JPanel, JFrame from java.awt import GridBagLayout, GridBagConstraints mainPanel = JPanel() mainPanel.setLayout(GridBagLayout()) c = GridBagConstraints() c.fill = c.BOTH c.weightx, c.weighty = 0.5, 1 c.gridx, c.gridy, c.gridwidth, c.gridheight = 0, 0, 10, 4 if data1 != None: if plots != None: pass #mainPanel.add(spanel,c) c.gridx, c.gridy, c.gridwidth, c.gridheight = 0, 0, 10, 4 c.weightx, c.weighty = 1, 1 mainPanel.add(mpanel, c) c.gridx, c.gridy, c.gridwidth, c.gridheight = 0, 4, 10, 6 mainPanel.add(dpanel, c) fr = JFrame() fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) fr.getContentPane().add(mainPanel) fr.setSize(1100, 850) fr.show() mainPanel.setSize(1100, 850) mainPanel.setBackground(Color.WHITE) #import time; time.sleep(5) saveToPNG(mainPanel, imageDir + l + ".png") if weights != None: rms1 = (rms1 + rms1_min + rms1_max) / sumwts rms2 = (rms2 + rms2_min + rms2_max) / sumwts print 'RMS Run 1: %f' % rms1 print 'RMS Run 2: %f' % rms2 for loc in rmsmap.keys(): print loc, rmsmap[loc]
def doall(locations, fileobs,filerun1,filerun2,stime,etime,imageDir='d:/temp',weights=None,filter_type="AVE",normalize=False): obs=HecDss.open(fileobs,True) obs.setTimeWindow(stime,etime) run1=HecDss.open(filerun1,True) run1.setTimeWindow(stime,etime) if filerun2 != None: run2=HecDss.open(filerun2,True) run2.setTimeWindow(stime,etime) else: run2=None rms1=0 rms1_min,rms1_max=0,0 rms2=0 rms2_min,rms2_max=0,0 rmsmap={} #run2=None sumwts=0 average_interval=None; for l in locations: data1=get_matching(obs,'A=%s C=%s E=15MIN'%(l,type)) if data1 == None: data1=get_matching(obs,'A=%s C=%s E=1DAY'%(l,type)) if data1 == None: data1=get_matching(obs,'A=%s C=%s E=IR-DAY'%(l,type)) if data1 == None: data1=get_matching(obs,'A=%s C=%s E=1HOUR'%(l,type)) drun1=get_matching(run1,'B=%s C=%s'%(l,type)) if run2 != None: drun2=get_matching(run2, 'B=%s C=%s'%(l,type)) else: drun2=None avg_intvl="1DAY" if data1 != None: if average_interval != None: dobsd=TimeSeriesMath(data1).transformTimeSeries(average_interval, None, filter_type, 0) else: dobsd=TimeSeriesMath(data1) if normalize: dobsd=dobsd.divide(TimeSeriesMath(data1).mean()) dobsm=TimeSeriesMath(data1).transformTimeSeries(avg_intvl, None, filter_type, 0) dobsm_max=TimeSeriesMath(data1).transformTimeSeries(avg_intvl, None, "MAX", 0) dobsm_max.data.fullName=dobsm_max.data.fullName+"MAX" dobsm_min=TimeSeriesMath(data1).transformTimeSeries(avg_intvl, None, "MIN", 0) dobsm_min.data.fullName=dobsm_min.data.fullName+"MIN" if normalize: dobsm=dobsm.divide(TimeSeriesMath(data1).mean()) if drun1==None: continue; else: if average_interval != None: drun1d=TimeSeriesMath(drun1).transformTimeSeries(average_interval, None, filter_type, 0) else: drun1d=TimeSeriesMath(drun1) if normalize: drun1d=drun1d.divide(TimeSeriesMath(drun1).mean()) if drun2 != None: if average_interval != None: drun2d=TimeSeriesMath(drun2).transformTimeSeries(average_interval, None, filter_type, 0) else: drun2d=TimeSeriesMath(drun2) if normalize: drun2d=drun2d.divide(TimeSeriesMath(drun2).mean()) drun1m=TimeSeriesMath(drun1).transformTimeSeries(avg_intvl, None, filter_type, 0) drun1m_max=TimeSeriesMath(drun1).transformTimeSeries(avg_intvl, None, "MAX", 0) drun1m_min=TimeSeriesMath(drun1).transformTimeSeries(avg_intvl, None, "MIN", 0) if normalize: drun1m=drun1m.divide(TimeSeriesMath(drun1).mean()) if drun2 != None: drun2m=TimeSeriesMath(drun2).transformTimeSeries(avg_intvl, None, filter_type, 0) drun2m_max=TimeSeriesMath(drun2).transformTimeSeries(avg_intvl, None, "MAX", 0) drun2m_min=TimeSeriesMath(drun2).transformTimeSeries(avg_intvl, None, "MIN", 0) if normalize: drun2m=drun2m.divide(TimeSeriesMath(drun2).mean()) else: drun2m=None if weights != None: sumwts=sumwts+weights[l] lrms1 = calculate_rms(drun1m.data, dobsm.data)*weights[l] lrms1_min=calculate_rms(drun1m_min.data,dobsm_min.data)*weights[l] lrms1_max=calculate_rms(drun1m_max.data,dobsm_max.data)*weights[l] rms1=rms1+lrms1 rms1_min=rms1_min+lrms1_min rms1_max=rms1_max+lrms1_max lrms2 = calculate_rms(drun2m.data,dobsm.data)*weights[l] lrms2_min=calculate_rms(drun2m_min.data,dobsm_min.data)*weights[l] lrms2_max=calculate_rms(drun2m_max.data,dobsm_max.data)*weights[l] rmsmap[l] = lrms1,lrms2,lrms1_min,lrms2_min,lrms1_max,lrms2_max rms2=rms2+lrms2 rms2_min=rms2_min+lrms2_min rms2_max=rms2_max+lrms2_max plotd = newPlot("Hist vs New Geom [%s]"%l) if data1 != None: plotd.addData(dobsd.data) plotd.addData(drun1d.data) if drun2 != None: plotd.addData(drun2d.data) plotd.showPlot() legend_label = plotd.getLegendLabel(drun1d.data) legend_label.setText(legend_label.getText()+" ["+str(int(lrms1*100)/100.)+","+str(int(lrms1_min*100)/100.)+","+str(int(lrms1_max*100)/100.)+"]") legend_label = plotd.getLegendLabel(drun2d.data) legend_label.setText(legend_label.getText()+" ["+str(int(lrms2*100)/100.)+","+str(int(lrms2_min*100)/100.)+","+str(int(lrms2_max*100)/100.)+"]") plotd.setVisible(False) xaxis=plotd.getViewport(0).getAxis("x1") vmin =xaxis.getViewMin()+261500. # hardwired to around july 1, 2008 xaxis.setViewLimits(vmin,vmin+10000.) if data1 != None: pline = plotd.getCurve(dobsd.data) pline.setLineVisible(1) pline.setLineColor("blue") pline.setSymbolType(Symbol.SYMBOL_CIRCLE) pline.setSymbolsVisible(0) pline.setSymbolSize(3) pline.setSymbolSkipCount(0) pline.setSymbolFillColor(pline.getLineColorString()) pline.setSymbolLineColor(pline.getLineColorString()) g2dPanel = plotd.getPlotpanel() g2dPanel.revalidate(); g2dPanel.paintGfx(); plotm = newPlot("Hist vs New Geom Monthly [%s]"%l) plotm.setSize(1800,1200) if data1 != None: plotm.addData(dobsm.data) #plotm.addData(dobsm_max.data) #plotm.addData(dobsm_min.data) plotm.addData(drun1m.data) #plotm.addData(drun1m_max.data) #plotm.addData(drun1m_min.data) if drun2 != None: plotm.addData(drun2m.data) #plotm.addData(drun2m_max.data) #plotm.addData(drun2m_min.data) plotm.showPlot() if data1 != None: pline = plotm.getCurve(dobsm.data) pline.setLineVisible(1) pline.setLineColor("blue") pline.setSymbolType(Symbol.SYMBOL_CIRCLE) pline.setSymbolsVisible(0) pline.setSymbolSize(3) pline.setSymbolSkipCount(0) pline.setSymbolFillColor(pline.getLineColorString()) pline.setSymbolLineColor(pline.getLineColorString()) plotm.setVisible(False) if data1 != None: plots=do_regression_plots(dobsm,drun1m,drun2m) if plots != None: spanel = plots.getPlotpanel() removeToolbar(spanel) mpanel = plotm.getPlotpanel() removeToolbar(mpanel) dpanel = plotd.getPlotpanel() removeToolbar(dpanel) from javax.swing import JPanel,JFrame from java.awt import GridBagLayout, GridBagConstraints mainPanel = JPanel() mainPanel.setLayout(GridBagLayout()) c=GridBagConstraints() c.fill=c.BOTH c.weightx,c.weighty=0.5,1 c.gridx,c.gridy,c.gridwidth,c.gridheight=0,0,10,4 if data1 != None: if plots != None: pass #mainPanel.add(spanel,c) c.gridx,c.gridy,c.gridwidth,c.gridheight=0,0,10,4 c.weightx,c.weighty=1,1 mainPanel.add(mpanel,c) c.gridx,c.gridy,c.gridwidth,c.gridheight=0,4,10,6 mainPanel.add(dpanel,c) fr=JFrame() fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) fr.getContentPane().add(mainPanel) fr.setSize(1100,850); fr.show(); mainPanel.setSize(1100,850); mainPanel.setBackground(Color.WHITE); #import time; time.sleep(5) saveToPNG(mainPanel,imageDir+l+".png") if weights != None: rms1=(rms1+rms1_min+rms1_max)/sumwts rms2=(rms2+rms2_min+rms2_max)/sumwts print 'RMS Run 1: %f'%rms1 print 'RMS Run 2: %f'%rms2 for loc in rmsmap.keys(): print loc, rmsmap[loc]
class JyTwitter(object): def __init__(self): self.frame = JFrame("Jython Twitter") self.frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE) self.loginPanel = JPanel(GridLayout(0, 2)) self.frame.add(self.loginPanel) self.usernameField = JTextField('', 15) self.loginPanel.add(JLabel("username:"******"password:"******"Please Log in") self.loginPanel.add(self.message) self.frame.pack() self.frame.visible = True def login(self, event): self.message.text = "Attempting to Log in..." self.frame.show() username = self.usernameField.text try: self.api = twitter.Api(username, self.passwordField.text) self.timeline(username) self.loginPanel.visible = False self.message.text = "Logged in" except: self.message.text = "Log in failed." raise self.frame.size = 400, 800 self.frame.show() def timeline(self, username): timeline = self.api.GetFriendsTimeline(username) self.resultPanel = JPanel() self.resultPanel.layout = BoxLayout(self.resultPanel, BoxLayout.Y_AXIS) for s in timeline: self.showTweet(s) scrollpane = JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER) scrollpane.preferredSize = 400, 800 scrollpane.viewport.view = self.resultPanel self.frame.add(scrollpane) def showTweet(self, status): user = status.user p = JPanel() # image grabbing seems very expensive, good place for a callback? p.add(JLabel(ImageIcon(URL(user.profile_image_url)))) p.add( JTextArea(text=status.text, editable=False, wrapStyleWord=True, lineWrap=True, alignmentX=Component.LEFT_ALIGNMENT, size=(300, 1))) self.resultPanel.add(p)
class NewAccountGUI: def __init__(self, amgui): self.amgui = amgui self.am = amgui.acctmanager self.buildgwinfo() self.autologin = JCheckBox("Automatically Log In") self.acctname = JTextField() self.gwoptions = JPanel(doublebuffered) self.gwoptions.border = TitledBorder("Gateway Options") self.buildgwoptions("Twisted") self.mainframe = JFrame("New Account Window") self.buildpane() def buildgwinfo(self): self.gateways = { "Twisted": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField("twistedmatrix.com"), "port": JTextField("8787"), "service": JTextField("twisted.words"), "persp": JTextField() }, "AIM": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField("toc.oscar.aol.com"), "port": JTextField("9898") }, "IRC": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField(), "port": JTextField("6667"), "channels": JTextField() } } self.displayorder = { "Twisted": [["Identity Name", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"], ["Service Name", "service"], ["Perspective Name", "persp"]], "AIM": [["Screen Name", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"]], "IRC": [["Nickname", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"], ["Channels", "channels"]] } def buildgwoptions(self, gw): self.gwoptions.removeAll() self.gwoptions.layout = GridLayout(len(self.gateways[gw]), 2) for mapping in self.displayorder[gw]: self.gwoptions.add(JLabel(mapping[0])) self.gwoptions.add(self.gateways[gw][mapping[1]]) def buildpane(self): gw = JPanel(GridLayout(1, 2), doublebuffered) gw.add(JLabel("Gateway")) self.gwlist = JComboBox( self.gateways.keys()) #, actionPerformed=self.changegw) self.gwlist.setSelectedItem("Twisted") gw.add(self.gwlist) stdoptions = JPanel(GridLayout(2, 2), doublebuffered) stdoptions.border = TitledBorder("Standard Options") stdoptions.add(JLabel()) stdoptions.add(self.autologin) stdoptions.add(JLabel("Account Name")) stdoptions.add(self.acctname) buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(JButton("OK", actionPerformed=self.addaccount)) buttons.add(JButton("Cancel", actionPerformed=self.cancel)) mainpane = self.mainframe.getContentPane() mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) mainpane.add(gw) mainpane.add(self.gwoptions) mainpane.add(stdoptions) mainpane.add(buttons) def show(self): self.mainframe.setLocation(100, 100) self.mainframe.pack() self.mainframe.show() #actionlisteners def changegw(self, ae): self.buildgwoptions(self.gwlist.getSelectedItem()) self.mainframe.pack() self.mainframe.show() def addaccount(self, ae): gwselection = self.gwlist.getSelectedItem() gw = self.gateways[gwselection] name = gw["ident"].text passwd = gw["passwd"].text host = gw["host"].text port = int(gw["port"].text) autologin = self.autologin.isSelected() acctname = self.acctname.text if gwselection == "Twisted": sname = gw["service"].text perspective = gw["persp"].text self.am.addAccount( PBAccount(acctname, autologin, name, passwd, host, port, [[stype, sname, perspective]])) elif gwselection == "AIM": self.am.addAccount( TOCAccount(acctname, autologin, name, passwd, host, port)) elif gwselection == "IRC": channels = gw["channels"].text self.am.addAccount( IRCAccount(acctname, autologin, name, passwd, host, port, channels)) self.amgui.update() print "Added new account" self.mainframe.dispose() def cancel(self, ae): print "Cancelling new account creation" self.mainframe.dispose()
class AccountManagementGUI: def __init__(self): self.acctmanager = AccountManager() self.mainframe = JFrame("Account Manager") self.chatui = None self.headers = ["Account Name", "Status", "Autologin", "Gateway"] self.data = UneditableTableModel([], self.headers) self.table = JTable(self.data) self.table.columnSelectionAllowed = 0 # cannot select columns self.table.selectionMode = ListSelectionModel.SINGLE_SELECTION self.connectbutton = JButton("Connect", actionPerformed=self.connect) self.dconnbutton = JButton("Disconnect", actionPerformed=self.disconnect) self.deletebutton = JButton("Delete", actionPerformed=self.deleteAccount) self.buildpane() self.mainframe.pack() self.mainframe.show() def buildpane(self): buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(self.connectbutton) buttons.add(self.dconnbutton) buttons.add(JButton("New", actionPerformed=self.addNewAccount)) buttons.add(self.deletebutton) buttons.add(JButton("Quit", actionPerformed=self.quit)) mainpane = self.mainframe.getContentPane() mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) mainpane.add(JScrollPane(self.table)) mainpane.add(buttons) self.update() def update(self): self.data.setDataVector(self.acctmanager.getSnapShot(), self.headers) if self.acctmanager.isEmpty(): self.deletebutton.setEnabled(0) self.connectbutton.setEnabled(0) self.dconnbutton.setEnabled(0) else: self.deletebutton.setEnabled(1) if not 1 in self.acctmanager.getConnectionInfo(): # all disconnected self.dconnbutton.setEnabled(0) self.connectbutton.setEnabled(1) elif not 0 in self.acctmanager.getConnectionInfo(): # all connected self.dconnbutton.setEnabled(1) self.connectbutton.setEnabled(0) else: self.dconnbutton.setEnabled(1) self.connectbutton.setEnabled(1) # callable button actions def connect(self, ae): print "Trying to connect" row = self.table.getSelectedRow() if row < 0: print "Trying to connect to an account but no account selected" else: acctname = self.data.getValueAt(row, 0) if not self.chatui: self.chatui = twisted.words.im.jychat.JyChatUI() self.acctmanager.connect(acctname, self.chatui) self.update() def disconnect(self, ae): print "Trying to disconnect" row = self.table.getSelectedRow() if row < 0: print "Trying to logoff an account but no account was selected." else: acctname = self.data.getValueAt(row, 0) self.acctmanager.disconnect(acctname) self.update() def addNewAccount(self, ae): print "Starting new account creation" NewAccountGUI(self).show() def deleteAccount(self, ae): print "Deleting account" row = self.table.getSelectedRow() if row < 0: print "Trying to delete an account but no account selected" else: acctname = self.data.getValueAt(row, 0) self.acctmanager.delAccount(acctname) self.update() def quit(self, ae): self.acctmanager.quit() sys.exit()
# Introduction to Jython from javax.swing import JFrame, JLabel frame = JFrame("Hello, Jython!", defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size = (200, 200) ) label = JLabel("Hello, Jython") frame.add(label) frame.show()
#Auto generated by installer import vutils; from vutils import * import getopt,xgui,sys from java.lang import System if __name__=='__main__': optlist, args = getopt.getopt(sys.argv[1:],'f:d') vhome = System.getProperty('vista_home') sep = System.getProperty('file.separator') if vhome != None: func_file = vhome+sep+'lib'+sep+'Lib'+sep+'vfuncs.py' try: execfile(func_file) except: pass # print 'Loading functions from: ', func_file file = None for option in optlist: if option[0] == '-f': file = option[1] elif option[0] == '-d': xgui._debug = 1 else: pass if file!=None and len(file)==0: file=None #xgui.MainGui(file) from javax.swing import JFrame fr=JFrame("Test") fr.show(); print 'Start xgui '
class GroupConversationWindow(GroupConversation): """A GUI window of a conversation witha group of people""" def __init__(self, group, chatui): GroupConversation.__init__(self, group, chatui) self.mainframe = JFrame(self.group.name) self.headers = ["Member"] self.memberdata = UneditableTableModel([], self.headers) self.display = JTextArea(columns=100, rows=15, editable=0, lineWrap=1) self.typepad = JTextField() self.buildpane() self.lentext = 0 def show(self): self.mainframe.pack() self.mainframe.show() def hide(self): self.mainframe.hide() def showGroupMessage(self, sender, text, metadata=None): self.displayText(sender + ": " + text) def setGroupMembers(self, members): GroupConversation.setGroupMembers(self, members) self.updatelist() def setTopic(self, topic, author): topictext = "Topic: " + topic + ", set by " + author self.mainframe.setTitle(self.group.name + ": " + topictext) self.displayText(topictext) def memberJoined(self, member): GroupConversation.memberJoined(self, member) self.updatelist() def memberChangedNick(self, oldnick, newnick): GroupConversation.memberChangedNick(self, oldnick, newnick) self.updatelist() def memberLeft(self, member): GroupConversation.memberLeft(self, member) self.updatelist() #GUI code def buildpane(self): buttons = JPanel(doublebuffered) buttons.add(JButton("Hide", actionPerformed=self.hidewindow)) memberpane = JTable(self.memberdata) memberframe = JScrollPane(memberpane) chat = JPanel(doublebuffered) chat.setLayout(BoxLayout(chat, BoxLayout.Y_AXIS)) chat.add(JScrollPane(self.display)) self.typepad.actionPerformed = self.send chat.add(self.typepad) chat.add(buttons) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.X_AXIS)) mainpane.add(chat) mainpane.add(memberframe) def displayText(self, text): self.lentext = self.lentext + len(text) self.display.append(text) self.display.setCaretPosition(self.lentext) def updatelist(self): self.memberdata.setDataVector([self.members], self.headers) #actionListener def send(self, ae): text = self.typepad.getText() self.typepad.setText("") if text != "" and text != None: GroupConversation.sendText(self, text) def hidewindow(self, ae): self.hide()
class ContactsListGUI(ContactsList): """A GUI object that displays a contacts list""" def __init__(self, chatui): ContactsList.__init__(self, chatui) self.clientsByName = {} self.mainframe = JFrame("Contacts List") self.headers = ["Contact", "Status", "Idle", "Account"] self.data = UneditableTableModel([], self.headers) self.table = JTable(self.data, columnSelectionAllowed = 0, #cannot select columns selectionMode = ListSelectionModel.SINGLE_SELECTION) self.buildpane() self.mainframe.pack() self.mainframe.show() def setContactStatus(self, person): ContactsList.setContactStatus(self, person) self.update() def registerAccountClient(self, client): ContactsList.registerAccountClient(self, client) if not client.accountName in self.clientsByName.keys(): self.clientsByName[client.accountName] = client def unregisterAccount(self, client): ContactsList.unregisterAccountClient(self, client) if client.accountName in self.clientsByName.keys(): del self.clientsByName[client.accountName] def contactChangedNick(self, person, newnick): ContactsList.contactChangedNick(self, person, newnick) self.update() #GUI code def buildpane(self): buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(JButton("Send Message", actionPerformed=self.message)) buttons.add(JButton("Add Contact", actionPerformed=self.addContact)) #buttons.add(JButton("Quit", actionPerformed=self.quit)) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.Y_AXIS)) mainpane.add(JScrollPane(self.table)) mainpane.add(buttons) self.update() def update(self): contactdata = [] for contact in self.onlineContacts.values(): if contact.status == AWAY: stat = "(away)" else: stat = "(active)" contactdata.append([contact.name, stat, contact.getIdleTime(), contact.client.accountName]) self.data.setDataVector(contactdata, self.headers) #callable actionlisteners def message(self, ae): row = self.table.getSelectedRow() if row < 0: print "Trying to send IM to person, but no person selected" else: person = self.onlineContacts[self.data.getValueAt(row, 0)] self.chat.getConversation(person) def addContact(self, ae): _AccountAdder(self) def quit(self, ae): sys.exit()
class Browser: def __init__(self, repository): self.repository = repository # want a better solution, with domains, perhaps user specifies self.currentUserReference = System.getProperty("user.name") self.currentRecord = None self.window = JFrame("Pointrel browser", windowClosing=self.exit) self.window.contentPane.layout = BorderLayout() # redundant as the default self.window.bounds = (100, 100, 800, 600) self.menuBar = JMenuBar() self.window.JMenuBar = self.menuBar fileMenu = JMenu("File") fileMenu.add(JMenuItem("Open...", actionPerformed=self.open)) fileMenu.add(JMenuItem("Reload", actionPerformed=self.reloadPressed)) fileMenu.addSeparator() fileMenu.add(JMenuItem("Import from other repository...", actionPerformed=self.importFromOtherRepository)) fileMenu.addSeparator() fileMenu.add(JMenuItem("Close", actionPerformed=self.close)) self.menuBar.add(fileMenu) exportMenu = JMenu("Export") exportMenu.add(JMenuItem("Choose current export file...", actionPerformed=self.exportChooseCurrentFile)) exportMenu.addSeparator() exportMenu.add(JMenuItem("Export selected record", actionPerformed=self.exportSelectedRecord)) exportMenu.add(JMenuItem("Export record history for selected attribute", actionPerformed=self.exportAllRecordsForSelectedAttribute)) exportMenu.addSeparator() exportMenu.add(JMenuItem("Export current records for all attributes of selected entity", actionPerformed=self.exportLatestRecordsForSelectedEntity)) exportMenu.add(JMenuItem("Export entire record history for all attributes of selected entity", actionPerformed=self.exportAllRecordsForSelectedEntity)) self.menuBar.add(exportMenu) self.exportFileName = "export.pointrel" #self.reloadButton = JButton("Reload Repository", actionPerformed=self.reloadPressed) self.entitiesList = JList(DefaultListModel(), mouseClicked=self.entitiesListClicked) self.entitiesList.model.addElement("root") self.entitiesList.mousePressed = self.entitiesListMousePressed self.entitiesList.mouseReleased = self.entitiesListMousePressed self.attributesList = JList(DefaultListModel(), mouseClicked=self.attributesListClicked) self.versionsList = JList(DefaultListModel(), mouseClicked=self.versionsListClicked) self.listPanel = JPanel(layout=GridLayout(1, 2)) self.listPanel.add(JScrollPane(self.entitiesList)) self.listPanel.add(JScrollPane(self.attributesList)) self.listPanel.add(JScrollPane(self.versionsList)) self.navigationPanel = JPanel(layout=BorderLayout()) #self.navigationPanel.add(self.reloadButton, BorderLayout.NORTH) self.navigationPanel.add(self.listPanel, BorderLayout.CENTER) self.entityTextField = JTextField(preferredSize=(200,20)) self.attributeTextField = JTextField(preferredSize=(200,20)) self.deletedButton = JCheckBox("Deleted", actionPerformed=self.deletedPressed) # only one right now -- and no support for switching editor panels yet examples = ["pointrel:text/utf-8", ] self.valueTypeComboBox = JComboBox(examples, preferredSize=(200,20), editable=True) self.attributePanel = Box(BoxLayout.X_AXIS) self.attributePanel.add(Box.createRigidArea(Dimension(5,0))) self.attributePanel.add(JLabel("Entity:")) self.attributePanel.add(Box.createRigidArea(Dimension(2,0))) self.attributePanel.add(self.entityTextField) self.attributePanel.add(Box.createRigidArea(Dimension(5,0))) self.attributePanel.add(JLabel("Attribute:")) self.attributePanel.add(Box.createRigidArea(Dimension(2,0))) self.attributePanel.add(self.attributeTextField) self.attributePanel.add(Box.createRigidArea(Dimension(5,0))) self.attributePanel.add(JLabel("Value type:")) self.attributePanel.add(Box.createRigidArea(Dimension(2,0))) self.attributePanel.add(self.valueTypeComboBox) self.attributePanel.add(Box.createRigidArea(Dimension(5,0))) self.attributePanel.add(self.deletedButton) self.attributePanel.add(Box.createRigidArea(Dimension(5,0))) self.showAllDeletedButton = JCheckBox("Show all deleted", actionPerformed=self.showAllDeletedPressed) self.statusText = JTextField(preferredSize=(100,20)) self.saveButton = JButton("Save", actionPerformed=self.savePressed) self.normalSaveButtonColor = self.saveButton.background self.changedSaveButtonColor = Color.YELLOW self.statusPanel = Box(BoxLayout.X_AXIS) self.statusPanel.add(Box.createRigidArea(Dimension(5,0))) self.statusPanel.add(self.showAllDeletedButton) self.statusPanel.add(Box.createRigidArea(Dimension(25,0))) self.statusPanel.add(JLabel("Message:") ) self.statusPanel.add(Box.createRigidArea(Dimension(2,0))) self.statusPanel.add(self.statusText) self.statusPanel.add(Box.createRigidArea(Dimension(5,0))) self.statusPanel.add(self.saveButton) self.statusPanel.add(Box.createRigidArea(Dimension(1,0))) self.currentEditorPanel = EditorPanel_text_utf_8(self, "pointrel:text/utf-8") self.topPanel = Box(BoxLayout.Y_AXIS) self.topPanel.add(Box.createRigidArea(Dimension(0,5))) self.topPanel.add(self.attributePanel) self.topPanel.add(Box.createRigidArea(Dimension(0,5))) self.editorPanel = JPanel(layout=BorderLayout()) self.editorPanel.add(self.topPanel, BorderLayout.NORTH) self.editorPanel.add(self.currentEditorPanel, BorderLayout.CENTER) self.editorPanel.add(self.statusPanel, BorderLayout.SOUTH) self.browserPanel = JSplitPane(JSplitPane.VERTICAL_SPLIT) self.browserPanel.add(self.navigationPanel) self.browserPanel.add(self.editorPanel) self.window.contentPane.add(self.browserPanel, BorderLayout.CENTER) self.setTitleForRepository() self.window.show() # background timer for updating save button color self.timer = Timer(1000, CallbackActionListener(self.timerEvent)) self.timer.initialDelay = 1000 self.timer.start() def close(self, event): System.exit(0) def open(self, event): dialog = FileDialog(self.window) fileName = dialog.go(PointrelFileTypes) if not fileName: return repository = Repository(fileName) self.repository = repository self.currentRecord = None self.clearAllEntityNames() self.refreshBrowser() self.setTitleForRepository() def setTitleForRepository(self): self.window.title = "Pointrel browser on %s" % self.repository.fileName def setStatus(self, messageText): self.statusText.text = messageText def getCurrentEntityName(self): return self.entityTextField.text def setCurrentEntityName(self, newAttributeName): self.entityTextField.text = newAttributeName def getCurrentAttributeName(self): return self.attributeTextField.text def setCurrentAttributeName(self, newAttributeName): self.attributeTextField.text = newAttributeName def getCurrentValueType(self): #return self.valueTypeComboBox.selectedItem return self.valueTypeComboBox.editor.editorComponent.text def setCurrentValueType(self, newValueType): self.valueTypeComboBox.selectedItem = newValueType # PDF FIX __ NEED TO CHANGE EDITOR TYPE def reportStatistics(self): contents = self.currentEditorPanel.getCurrentValueBytes() words = len(contents.split()) lines = contents.count('\n') characters = len(contents) report = "%d lines; %d words; %d characters" % (lines, words, characters) self.setStatus(report) def timerEvent(self, event): self.manageSaveButtonColor() self.reportStatistics() def exit(self, event=None): System.exit(0) def reloadPressed(self, event): print "reloading repository; ", self.repository.reload() self.refreshBrowser() print "done" def importCodeFromRepository(self, name, globals=None, locals=None, fromlist=None): # seems to fail with stack overflow if print while importing while trying jconsole (it reassigns stdio) debug = 0 self.importLevel += 1 if debug: print " " * self.importLevel, if debug: print "importCodeFromRepository", name try: if debug: print " " * self.importLevel, if debug: print " globals: ", globals if debug: print " " * self.importLevel, if debug: print " locals", locals if debug: print " " * self.importLevel, if debug: print " fromlist", fromlist except UnboundLocalError: if debug: print " " * self.importLevel, if debug: print "unbound error" # Fast path: see if the module has already been imported. # though this is wrong -- as need to check repository if code has been changed # broken as does not consider fromlist #try: # return sys.modules[name] #except KeyError: # pass # check if local module record = self.repository.findLatestRecordForEntityAttribute(self.contextUUID, name + ".py") if record: if debug: print " " * self.importLevel, if debug: print " Loading from repository" #file = StringIO.StringIO(record.valueBytes) #try: #module = imp.load_source(name, name, file) #print module modifiedName = self.contextUUID[7:] + "." + name modifiedName = modifiedName.replace("-", "_") if debug: print "modifiedName", modifiedName if debug: print "sys.module.items", sys.modules.items() try: module = sys.modules[modifiedName] except KeyError: module = None # use the latest if this one is not if module: if module.__pointrelIdentifier__ != record.identifierString: module = None if not module: file = ByteArrayInputStream(record.valueBytes) module = imp.load_module(modifiedName, file, modifiedName + ".py", (".py", "r", imp.PY_SOURCE)) module.__pointrelIdentifier__ = record.identifierString if fromlist: if debug: print " " * self.importLevel, if debug: print "processing fromlist" for fromItemName in fromlist: if debug: print " " * self.importLevel, if debug: print "fromitemname", fromItemName if fromItemName == "*": for moduleItemName in dir(module): if debug: print " " * self.importLevel, if debug: print "moduleItemName", moduleItemName if moduleItemName[1] != '_': result = getattr(module, moduleItemName) #print " " * self.importLevel, #print "result", result #print " " * self.importLevel, #print "globals", globals globals[moduleItemName] = result else: result = getattr(module, fromItemName) globals[fromItemName] = result if debug: print "finished set", fromItemName #finally: # file.close() if debug: print " " * self.importLevel, if debug: print " Done loading" self.importLevel -= 1 result = module else: if debug: print " " * self.importLevel, if debug: print "default loading", name, fromlist try: result = self.oldimport(name, globals, locals, fromlist) except UnboundLocalError: # deal with strange Jython error result = self.oldimport(name) self.importLevel -= 1 return result def importFromOtherRepository(self, event): dialog = FileDialog(self.window, loadOrSave="load") fileName = dialog.go(PointrelFileTypes) if not fileName: return print "Importing from: ", fileName self.repository.importRecordsFromAnotherRepository(fileName) print "Done with import" self.refreshBrowser() def exportChooseCurrentFile(self, event): dialog = FileDialog(self.window, loadOrSave="save") fileName = dialog.go(PointrelFileTypes) if not fileName: return self.exportFileName = fileName print "File selected for exports:", self.exportFileName def exportSelectedRecord(self, event): if not self.currentRecord: print "No record selected" return oldRecords = [self.currentRecord] print "Exporting current record to repository %s" % self.exportFileName repository = Repository(self.exportFileName) repository.addRecordsFromAnotherRepository(oldRecords) print "Done" def exportAllRecordsForSelectedAttribute(self, event): entityName = self.getCurrentEntityName() if not entityName: print "No entity selected" return attributeName = self.getCurrentAttributeName() if not attributeName: print "No attribute selected" return print "Exporting all records for entity '%s' attribute '%s' to repository %s" % (entityName, attributeName, self.exportFileName) oldRecords = self.repository.findAllRecordsForEntityAttribute(entityName, attributeName) oldRecords.reverse() repository = Repository(self.exportFileName) repository.addRecordsFromAnotherRepository(oldRecords) print "Done" def exportLatestRecordsForSelectedEntity(self, event): entityName = self.getCurrentEntityName() if not entityName: print "No entity selected" return print "Exporting latest records for all entity '%s' attributes to repository %s" % (entityName, self.exportFileName) oldRecords = self.repository.findLatestRecordsForAllEntityAttributes(entityName) oldRecords.reverse() repository = Repository(self.exportFileName) repository.addRecordsFromAnotherRepository(oldRecords) print "Done" def exportAllRecordsForSelectedEntity(self, event): entityName = self.getCurrentEntityName() if not entityName: print "No entity selected" return print "Exporting all records for entity '%s' to repository %s" % (entityName, self.exportFileName) oldRecords = self.repository.findAllRecordsForEntity(entityName) oldRecords.reverse() repository = Repository(self.exportFileName) repository.addRecordsFromAnotherRepository(oldRecords) print "Done" def setCurrentRecord(self, aRecord): self.currentRecord = aRecord if aRecord: self.setCurrentEntityName(aRecord.entity) self.entityTextField.caretPosition = 0 self.setCurrentAttributeName(aRecord.attribute) self.attributeTextField.caretPosition = 0 self.setCurrentValueType(aRecord.valueType) self.currentEditorPanel.setCurrentValueBytes(aRecord.valueBytes) self.deletedButton.model.setSelected(aRecord.deleted) else: entityName = self.entitiesList.selectedValue if entityName == None: entityName = "" self.setCurrentEntityName(entityName) self.entityTextField.caretPosition = 0 self.setCurrentAttributeName("") self.setCurrentValueType(DefaultValueType) self.currentEditorPanel.setCurrentValueBytes("") self.deletedButton.model.selected = False def manageSaveButtonColor(self): if self.isCurrentRecordChanged(): self.saveButton.background = self.changedSaveButtonColor else: self.saveButton.background = self.normalSaveButtonColor def isCurrentRecordChanged(self): if not self.currentRecord: if self.getCurrentAttributeName() or self.currentEditorPanel.getCurrentValueBytes(): return True return False if self.getCurrentEntityName() != self.currentRecord.entity: return True if self.getCurrentAttributeName() != self.currentRecord.attribute: return True if self.getCurrentValueType() != self.currentRecord.valueType: return True if self.currentEditorPanel.isChangedFromOriginal(): return True # funky comparison because may be booleans and integers? # decided not to test as not really linked to save button #if (self.deletedButton.model.selected and not self.currentRecord.deleted) or (not self.deletedButton.model.selected and self.currentRecord.deleted): # return True return False def deletedPressed(self, event): deleteFlag = self.deletedButton.model.selected if self.currentRecord == None: return self.repository.deleteOrUndelete(self.currentRecord, self.currentUserReference, deleteFlag=deleteFlag) if not self.isDeletedViewable(): self.refreshBrowser() def refreshBrowser(self): entityName = self.entitiesList.selectedValue attributeName = self.attributesList.selectedValue versionName = self.versionsList.selectedValue self.entitiesListClicked(None, entityName, attributeName, versionName) def showAllDeletedPressed(self, event): self.refreshBrowser() def isDeletedViewable(self): return self.showAllDeletedButton.model.selected def savePressed(self, event): #entityName = self.entitiesList.selectedValue entityName = self.getCurrentEntityName() if entityName: attributeName = self.getCurrentAttributeName() if attributeName: attributeValue = self.currentEditorPanel.getCurrentValueBytes() attributeType = self.getCurrentValueType() newRecord = self.repository.add(entityName, attributeName, attributeValue, attributeType, self.currentUserReference) self.setCurrentRecord(newRecord) self.entitiesListClicked(None, self.entitiesList.selectedValue, attributeName) # refresh list if changed if attributeName != self.attributesList.selectedValue: # ? self.attributesList.model.addElement(attributeName) # need to select new version self.entitiesListClicked(None) def test(self): print "test OK" def clearAllEntityNames(self): self.entitiesList.model.clear() self.addEntityNameToEntitiesList("root") def deleteEntityNameFromList(self): entityName = self.entitiesList.selectedValue if entityName: self.entitiesList.model.removeElement(entityName) def addEntitytNameToList(self): entityName = JOptionPane.showInputDialog("Enter an entity name: ") if entityName: self.addEntityNameToEntitiesList(entityName) def addAllEntityNamesToList(self, addMeta): entityNames = self.repository.lastUser.keys() entityNames.sort() for entityName in entityNames: if addMeta or entityName.find("pointrel://tripleID/") != 0: self.addEntityNameToEntitiesList(entityName) def entitiesListMousePressed(self, event): if event.isPopupTrigger(): # options should be a list of (name, function, [arg1, [arg2]]) tuples options = [ ("add to list..", self.addEntitytNameToList), ("delete from list", self.deleteEntityNameFromList), (None), ("clear", self.clearAllEntityNames), (None), ("add all except meta", self.addAllEntityNamesToList, False), ("add all", self.addAllEntityNamesToList, True), ] menu = OptionsCallbackPopupMenu(event.component, event.x, event.y, options) def entitiesListClicked(self, event, entityName=None, attributeName=None, versionName=None): if event: self.setCurrentRecord(None) if entityName: self.entitiesList.setSelectedValue(entityName, True) else: entityName = self.entitiesList.selectedValue if entityName: self.versionsList.model.clear() model = self.attributesList.model model.clear() attributes = self.repository.allAttributesForEntity(entityName, self.isDeletedViewable()) attributes.sort() for attribute in attributes: model.addElement(attribute) if attributeName: self.attributesList.setSelectedValue(attributeName, True) self.attributesListClicked(None, versionName) def attributesListClicked(self, event, versionName=None): if event: self.setCurrentRecord(None) entityName = self.entitiesList.selectedValue if entityName: attributeName = self.attributesList.selectedValue if event: self.setCurrentAttributeName(attributeName) if attributeName: model = self.versionsList.model model.clear() versions = self.repository.findAllRecordsForEntityAttribute(entityName, attributeName, self.isDeletedViewable()) for version in versions: versionDescription = "%s %s" % (version.timestamp, version.userReference) model.addElement(versionDescription) selectedRecord = None if versions: if versionName == None or not model.contains(versionName): self.versionsList.selectedIndex = 0 selectedRecord = versions[0] else: versionIndex = model.indexOf(versionName) self.versionsList.selectedIndex = versionIndex selectedRecord = versions[versionIndex] self.setCurrentRecord(selectedRecord) if event and event.clickCount == 2: self.followResource(self.currentRecord) else: self.setCurrentRecord(None) else: self.setCurrentRecord(None) def versionsListClicked(self, event): entityName = self.entitiesList.selectedValue if entityName: attributeName = self.attributesList.selectedValue if event: self.setCurrentAttributeName(attributeName) if attributeName: index = self.versionsList.selectedIndex versions = self.repository.findAllRecordsForEntityAttribute(entityName, attributeName, self.isDeletedViewable()) if versions: versionRecord = versions[index] self.setCurrentRecord(versionRecord) if event and event.clickCount == 2: self.followResource(versionRecord) else: self.setCurrentRecord(None) def followResource(self, record): if not record: return if '\n' in record.valueBytes: print "not following a resource with a newline" return self.addEntityNameToEntitiesList(record.valueBytes) def addEntityNameToEntitiesList(self, entityName): self.entitiesList.model.addElement(entityName) self.entitiesList.selectedIndex = self.entitiesList.model.size() - 1 self.entitiesListClicked(None) self.setCurrentRecord(None)
class JyTwitter(object): def __init__(self): self.frame = JFrame("Jython Twitter") self.frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE) self.loginPanel = JPanel(GridLayout(0,2)) self.frame.add(self.loginPanel) self.usernameField = JTextField('',15) self.loginPanel.add(JLabel("username:"******"password:"******"Please Log in") self.loginPanel.add(self.message) self.frame.pack() self.frame.visible = True def login(self,event): self.message.text = "Attempting to Log in..." self.frame.show() username = self.usernameField.text try: self.api = twitter.Api(username, self.passwordField.text) self.timeline(username) self.loginPanel.visible = False self.message.text = "Logged in" except: self.message.text = "Log in failed." raise self.frame.size = 400,800 self.frame.show() def timeline(self, username): timeline = self.api.GetFriendsTimeline(username) self.resultPanel = JPanel() self.resultPanel.layout = BoxLayout(self.resultPanel, BoxLayout.Y_AXIS) for s in timeline: self.showTweet(s) scrollpane = JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER) scrollpane.preferredSize = 400, 800 scrollpane.viewport.view = self.resultPanel self.frame.add(scrollpane) def showTweet(self, status): user = status.user p = JPanel() # image grabbing seems very expensive, good place for a callback? p.add(JLabel(ImageIcon(URL(user.profile_image_url)))) p.add(JTextArea(text = status.text, editable = False, wrapStyleWord = True, lineWrap = True, alignmentX = Component.LEFT_ALIGNMENT, size = (300, 1) )) self.resultPanel.add(p)
class AccountManagementGUI: def __init__(self): self.acctmanager = AccountManager() self.mainframe = JFrame("Account Manager") self.chatui = None self.headers = ["Account Name", "Status", "Autologin", "Gateway"] self.data = UneditableTableModel([], self.headers) self.table = JTable(self.data) self.table.columnSelectionAllowed = 0 #cannot select columns self.table.selectionMode = ListSelectionModel.SINGLE_SELECTION self.connectbutton = JButton("Connect", actionPerformed=self.connect) self.dconnbutton = JButton("Disconnect", actionPerformed=self.disconnect) self.deletebutton = JButton("Delete", actionPerformed=self.deleteAccount) self.buildpane() self.mainframe.pack() self.mainframe.show() def buildpane(self): buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(self.connectbutton) buttons.add(self.dconnbutton) buttons.add(JButton("New", actionPerformed=self.addNewAccount)) buttons.add(self.deletebutton) buttons.add(JButton("Quit", actionPerformed=self.quit)) mainpane = self.mainframe.getContentPane() mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) mainpane.add(JScrollPane(self.table)) mainpane.add(buttons) self.update() def update(self): self.data.setDataVector(self.acctmanager.getSnapShot(), self.headers) if self.acctmanager.isEmpty(): self.deletebutton.setEnabled(0) self.connectbutton.setEnabled(0) self.dconnbutton.setEnabled(0) else: self.deletebutton.setEnabled(1) if not 1 in self.acctmanager.getConnectionInfo( ): #all disconnected self.dconnbutton.setEnabled(0) self.connectbutton.setEnabled(1) elif not 0 in self.acctmanager.getConnectionInfo(): #all connected self.dconnbutton.setEnabled(1) self.connectbutton.setEnabled(0) else: self.dconnbutton.setEnabled(1) self.connectbutton.setEnabled(1) #callable button actions def connect(self, ae): print "Trying to connect" row = self.table.getSelectedRow() if row < 0: print "Trying to connect to an account but no account selected" else: acctname = self.data.getValueAt(row, 0) if not self.chatui: self.chatui = twisted.words.im.jychat.JyChatUI() self.acctmanager.connect(acctname, self.chatui) self.update() def disconnect(self, ae): print "Trying to disconnect" row = self.table.getSelectedRow() if row < 0: print "Trying to logoff an account but no account was selected." else: acctname = self.data.getValueAt(row, 0) self.acctmanager.disconnect(acctname) self.update() def addNewAccount(self, ae): print "Starting new account creation" NewAccountGUI(self).show() def deleteAccount(self, ae): print "Deleting account" row = self.table.getSelectedRow() if row < 0: print "Trying to delete an account but no account selected" else: acctname = self.data.getValueAt(row, 0) self.acctmanager.delAccount(acctname) self.update() def quit(self, ae): self.acctmanager.quit() sys.exit()
class NewAccountGUI: def __init__(self, amgui): self.amgui = amgui self.am = amgui.acctmanager self.buildgwinfo() self.autologin = JCheckBox("Automatically Log In") self.acctname = JTextField() self.gwoptions = JPanel(doublebuffered) self.gwoptions.border = TitledBorder("Gateway Options") self.buildgwoptions("Twisted") self.mainframe = JFrame("New Account Window") self.buildpane() def buildgwinfo(self): self.gateways = { "Twisted": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField("twistedmatrix.com"), "port": JTextField("8787"), "service": JTextField("twisted.words"), "persp": JTextField(), }, "AIM": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField("toc.oscar.aol.com"), "port": JTextField("9898"), }, "IRC": { "ident": JTextField(), "passwd": JPasswordField(), "host": JTextField(), "port": JTextField("6667"), "channels": JTextField(), }, } self.displayorder = { "Twisted": [ ["Identity Name", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"], ["Service Name", "service"], ["Perspective Name", "persp"], ], "AIM": [["Screen Name", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"]], "IRC": [ ["Nickname", "ident"], ["Password", "passwd"], ["Host", "host"], ["Port", "port"], ["Channels", "channels"], ], } def buildgwoptions(self, gw): self.gwoptions.removeAll() self.gwoptions.layout = GridLayout(len(self.gateways[gw]), 2) for mapping in self.displayorder[gw]: self.gwoptions.add(JLabel(mapping[0])) self.gwoptions.add(self.gateways[gw][mapping[1]]) def buildpane(self): gw = JPanel(GridLayout(1, 2), doublebuffered) gw.add(JLabel("Gateway")) self.gwlist = JComboBox(self.gateways.keys()) # , actionPerformed=self.changegw) self.gwlist.setSelectedItem("Twisted") gw.add(self.gwlist) stdoptions = JPanel(GridLayout(2, 2), doublebuffered) stdoptions.border = TitledBorder("Standard Options") stdoptions.add(JLabel()) stdoptions.add(self.autologin) stdoptions.add(JLabel("Account Name")) stdoptions.add(self.acctname) buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(JButton("OK", actionPerformed=self.addaccount)) buttons.add(JButton("Cancel", actionPerformed=self.cancel)) mainpane = self.mainframe.getContentPane() mainpane.layout = BoxLayout(mainpane, BoxLayout.Y_AXIS) mainpane.add(gw) mainpane.add(self.gwoptions) mainpane.add(stdoptions) mainpane.add(buttons) def show(self): self.mainframe.setLocation(100, 100) self.mainframe.pack() self.mainframe.show() # actionlisteners def changegw(self, ae): self.buildgwoptions(self.gwlist.getSelectedItem()) self.mainframe.pack() self.mainframe.show() def addaccount(self, ae): gwselection = self.gwlist.getSelectedItem() gw = self.gateways[gwselection] name = gw["ident"].text passwd = gw["passwd"].text host = gw["host"].text port = int(gw["port"].text) autologin = self.autologin.isSelected() acctname = self.acctname.text if gwselection == "Twisted": sname = gw["service"].text perspective = gw["persp"].text self.am.addAccount(PBAccount(acctname, autologin, name, passwd, host, port, [[stype, sname, perspective]])) elif gwselection == "AIM": self.am.addAccount(TOCAccount(acctname, autologin, name, passwd, host, port)) elif gwselection == "IRC": channels = gw["channels"].text self.am.addAccount(IRCAccount(acctname, autologin, name, passwd, host, port, channels)) self.amgui.update() print "Added new account" self.mainframe.dispose() def cancel(self, ae): print "Cancelling new account creation" self.mainframe.dispose()
class ContactsListGUI(ContactsList): """A GUI object that displays a contacts list""" def __init__(self, chatui): ContactsList.__init__(self, chatui) self.clientsByName = {} self.mainframe = JFrame("Contacts List") self.headers = ["Contact", "Status", "Idle", "Account"] self.data = UneditableTableModel([], self.headers) self.table = JTable( self.data, columnSelectionAllowed=0, #cannot select columns selectionMode=ListSelectionModel.SINGLE_SELECTION) self.buildpane() self.mainframe.pack() self.mainframe.show() def setContactStatus(self, person): ContactsList.setContactStatus(self, person) self.update() def registerAccountClient(self, client): ContactsList.registerAccountClient(self, client) if not client.accountName in self.clientsByName.keys(): self.clientsByName[client.accountName] = client def unregisterAccount(self, client): ContactsList.unregisterAccountClient(self, client) if client.accountName in self.clientsByName.keys(): del self.clientsByName[client.accountName] def contactChangedNick(self, person, newnick): ContactsList.contactChangedNick(self, person, newnick) self.update() #GUI code def buildpane(self): buttons = JPanel(FlowLayout(), doublebuffered) buttons.add(JButton("Send Message", actionPerformed=self.message)) buttons.add(JButton("Add Contact", actionPerformed=self.addContact)) #buttons.add(JButton("Quit", actionPerformed=self.quit)) mainpane = self.mainframe.getContentPane() mainpane.setLayout(BoxLayout(mainpane, BoxLayout.Y_AXIS)) mainpane.add(JScrollPane(self.table)) mainpane.add(buttons) self.update() def update(self): contactdata = [] for contact in self.onlineContacts.values(): if contact.status == AWAY: stat = "(away)" else: stat = "(active)" contactdata.append([ contact.name, stat, contact.getIdleTime(), contact.client.accountName ]) self.data.setDataVector(contactdata, self.headers) #callable actionlisteners def message(self, ae): row = self.table.getSelectedRow() if row < 0: print "Trying to send IM to person, but no person selected" else: person = self.onlineContacts[self.data.getValueAt(row, 0)] self.chat.getConversation(person) def addContact(self, ae): _AccountAdder(self) def quit(self, ae): sys.exit()
class BurpExtender(IBurpExtender, IContextMenuFactory): # Implement IBurpExtender def registerExtenderCallbacks(self, callbacks): self.printHeader() # Set extension name callbacks.setExtensionName("Directory Listing Parser for Burp Suite") # Callbacks object self._callbacks = callbacks # Helpers object self._helpers = callbacks.getHelpers() # Register a factory for custom context menu items callbacks.registerContextMenuFactory(self) return # Create a menu item if the appropriate section of the UI is selected def createMenuItems(self, invocation): menu = [] # Which part of the interface the user selects ctx = invocation.getInvocationContext() # Message Viewer Req/Res, Site Map Table, and Proxy History will show menu item if selected by the user if ctx == 2 or ctx == 3 or ctx == 4 or ctx == 5 or ctx == 6: menu.append(JMenuItem("Import Directory Listing", None, actionPerformed=lambda x, inv=invocation: self.openGUI(inv))) return menu if menu else None # Create and place GUI components on JFrame def openGUI(self, invocation): try: # Get values from request or response the extension is invoked from and prepopulate GUI values invMessage = invocation.getSelectedMessages() message = invMessage[0] originalHttpService = message.getHttpService() self.originalMsgProtocol = originalHttpService.getProtocol() self.originalMsgHost = originalHttpService.getHost() self.originalMsgPort = originalHttpService.getPort() except: self.originalMsgProtocol = '' self.originalMsgHost = '' self.originalMsgPort = '' try: self.cookies = self._callbacks.getCookieJarContents() self.cookie = '' except: pass self.SSL = 'http://' self.listType = '' self.parsedList = [] # Set up main window (JFrame) self.window = JFrame("Directory Listing Parser for Burp Suite", preferredSize=(600, 475), windowClosing=self.closeUI) self.window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10) self.window.contentPane.setBorder(emptyBorder) self.window.contentPane.layout = BorderLayout() # Main window title placed at the top of the main window with an invisible bottom border titlePanel = JPanel() titleBorder = BorderFactory.createEmptyBorder(0, 0, 10, 0) title = JLabel("Directory Listing Parser for Burp Suite", JLabel.CENTER) title.setBorder(titleBorder) title.setFont(Font("Default", Font.PLAIN, 18)) titlePanel.add(title) self.window.contentPane.add("North", titlePanel) # Left panel for user input, consisting of hostname, directory prefix, ssl, port, type of listing, and file self.leftPanel = JPanel() self.leftPanel.layout = GridLayout(14, 1, 3, 3) hostnameLabel = JLabel("Hostname:") if self.originalMsgHost: self.hostnameTextField = JTextField(self.originalMsgHost.rstrip()) else: self.hostnameTextField = JTextField('Hostname') dirPrefixLabel = JLabel("Full Directory Prefix (Windows):") self.dirPrefixField = JTextField('C:\\var\www\\') sslLabel = JLabel("SSL:") self.radioBtnSslEnabled = JRadioButton('Enabled (https)', actionPerformed=self.radioSsl) self.radioBtnSslDisabled = JRadioButton('Disabled (http)', actionPerformed=self.radioSsl) sslButtonGroup = ButtonGroup() sslButtonGroup.add(self.radioBtnSslEnabled) sslButtonGroup.add(self.radioBtnSslDisabled) if self.originalMsgProtocol == "https": self.radioBtnSslEnabled.setSelected(True) else: self.radioBtnSslDisabled.setSelected(True) portLabel = JLabel("Port:") if self.originalMsgPort: self.portTextField = JTextField(str(self.originalMsgPort).rstrip()) else: self.portTextField = JTextField('80') osLabel = JLabel("Type of File Listing:") self.types = ('Windows \'dir /s\'', 'Linux \'ls -lR\'', 'Linux \'ls -R\'') self.comboListingType = JComboBox(self.types) uploadLabel = JLabel("Directory Listing File:") self.uploadTextField = JTextField('') uploadButton = JButton('Choose File', actionPerformed=self.chooseFile) self.leftPanel.add(hostnameLabel) self.leftPanel.add(self.hostnameTextField) self.leftPanel.add(dirPrefixLabel) self.leftPanel.add(self.dirPrefixField) self.leftPanel.add(sslLabel) self.leftPanel.add(self.radioBtnSslEnabled) self.leftPanel.add(self.radioBtnSslDisabled) self.leftPanel.add(portLabel) self.leftPanel.add(self.portTextField) self.leftPanel.add(osLabel) self.leftPanel.add(self.comboListingType) self.leftPanel.add(uploadLabel) self.leftPanel.add(self.uploadTextField) self.leftPanel.add(uploadButton) # Right panel consisting of a text area for the URL list self.UrlPanelLabel = JLabel("URL List:") self.textArea = JTextArea() self.textArea.setEditable(True) self.textArea.setFont(Font("Default", Font.PLAIN, 14)) if self.cookies: self.textArea.append('Cookies Found:\n') for cookie in self.cookies: if cookie.getDomain() in self.originalMsgHost: self.cookie += cookie.getName() + '=' + cookie.getValue() + '; ' self.textArea.append(cookie.getName() + '=' + cookie.getValue() + '\n') scrollArea = JScrollPane(self.textArea) scrollArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) scrollArea.setPreferredSize(Dimension(400, 200)) self.rightPanel = JPanel() self.rightPanel.setLayout(BorderLayout(3, 3)) self.rightPanel.add(self.UrlPanelLabel, BorderLayout.NORTH) self.rightPanel.add(scrollArea, BorderLayout.CENTER) # Panel for the generate URL list and import URL list buttons generatePanel = JPanel() generatePanel.layout = BorderLayout(3, 3) generateButton = JButton('Generate URL List', actionPerformed=self.generateUrlList) importButton = JButton('Import URL List to Burp Site Map', actionPerformed=self.confirmImport) generatePanel.add("North", generateButton) generatePanel.add("South", importButton) self.rightPanel.add("South", generatePanel) # Add the two main panels to the left and right sides self.window.contentPane.add("East", self.rightPanel) self.window.contentPane.add("West", self.leftPanel) # Create a panel to be used for the file chooser window self.uploadPanel = JPanel() self.window.pack() self.window.show() # JFileChooser and showDialog for the user to specify their directory listing input file def chooseFile(self, event): chooseFile = JFileChooser() filter = FileNameExtensionFilter("c files", ["c"]) chooseFile.addChoosableFileFilter(filter) chooseFile.showDialog(self.uploadPanel, "Choose File") chosenFile = chooseFile.getSelectedFile() self.uploadTextField.text = str(chosenFile) # Set whether https is enabled. Default is disabled (http) def radioSsl(self, event): if self.radioBtnSslEnabled.isSelected(): self.SSL = 'https://' else: self.SSL = 'http://' # Create a parser object and pass the user's specified options. Retrieve the results and print them to a text area def generateUrlList(self, event): fileListingType = self.comboListingType.selectedIndex self.listType = self.types[fileListingType] urlsMade = 0 if os.path.isfile(self.uploadTextField.text): parser = ListingParser() parser.parse(self.hostnameTextField.getText(), self.dirPrefixField.getText().rstrip(), self.SSL, self.portTextField.getText(), self.listType, self.uploadTextField.getText()) self.parsedList = parser.returnList() self.textArea.setText('') for item in self.parsedList: self.textArea.append(item + '\n') urlsMade = str(len(self.parsedList)) if self.parsedList and urlsMade: self.textArea.append('\n' + 'Total Directories Found: ' + str(parser.directoryCount)) self.textArea.append('\n' + 'Total URLs Created: ' + urlsMade) else: self.textArea.append('Error occurred during parsing.\n') self.textArea.append('Please make sure the directory listing is a valid format and all input is correct.\n') self.textArea.append('E-mail [email protected] with errors or for further help.') else: JOptionPane.showMessageDialog(None, 'ERROR: File is not valid file or not found!') def closeUI(self, event): self.window.setVisible(False) self.window.dispose() # This is initiated by the user selecting the 'import to burp' button. Checks each generated URL for a valid response and adds it to the site map def importList(self): if self.parsedList: urlsAdded = 0 # Loop through each URL and check the response. If the response code is less than 404, add to site map for item in self.parsedList: # Pass exception if urlopen returns an http error if the URL is not reachable try: code = urlopen(item).code if code < 404: javaURL = URL(item) newRequest = self._helpers.buildHttpRequest(javaURL) stringNewRequest = self._helpers.bytesToString(newRequest).rstrip() if self.cookie: stringNewRequest += '\nCookie: ' + self.cookie.rstrip('; ') + '\r\n\r\n' requestResponse = self._callbacks.makeHttpRequest(self._helpers.buildHttpService(str(javaURL.getHost()), int(javaURL.getPort()), javaURL.getProtocol() == "https"), stringNewRequest) else: requestResponse = self._callbacks.makeHttpRequest(self._helpers.buildHttpService(str(javaURL.getHost()), int(javaURL.getPort()), javaURL.getProtocol() == "https"), newRequest) self._callbacks.addToSiteMap(requestResponse) urlsAdded += 1 except Exception, e: print e pass JOptionPane.showMessageDialog(None, str(urlsAdded) + " URL(s) added to Burp site map.") else: