import sys import javax.swing as swing import java.awt as awt import java.lang as jlang from calend2 import * import string, re from calnames import * def exit(event): jlang.System.exit(0) class WelcomeFrame(swing.JFrame): list_names={} list_names["mnths"]=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"] list_names["years"]=[2000+i for i in range(20)] list_names["lang"]=["English", "Spanish", "French", "German", "Italian", "Dutch"] list_names["fmtopt"]=["Plain", "Fancy"] list_names["sdpw"]=["Su,Mo,Tu,We,Th,Fr,Sa", "Mo,Tu,We,Th,Fr,Sa,Su", "Mo,Tu,We,Th,Fr,Sa", "Mo,Tu,We,Th,Fr"] list_names["alnopt"]=["Left", "Center"] list_names["cellopt"]=["Normal", "AlternateBold"] def __init__(self, title="Welcome to Jython", size=(200, 200)): "@sig public WelcomeFrame(String title, java.awt.Dimension size)" self.title = title self.windowClosing = exit self.contentPane.layout = awt.FlowLayout() self.mnths=swing.JComboBox(self.list_names["mnths"]) self.contentPane.add(self.mnths) self.years=swing.JComboBox(self.list_names["years"]) self.contentPane.add(self.years) self.contentPane.layout.setHgap(600) self.contentPane.add(swing.JLabel("Message:")) self.msg=swing.JTextField(45) self.contentPane.add(self.msg) self.lang = swing.JComboBox(self.list_names["lang"]) self.contentPane.layout.setHgap(5) self.contentPane.add(self.lang) self.fmtopt=1 fmtopt_grp=swing.ButtonGroup() fmtopt_pnl=swing.JPanel(awt.GridLayout(0,1)) fmtopt_pnl.border = swing.BorderFactory.createTitledBorder("Style") buttons = [self.createRadioButton(each, self.radioButtonPressed_fmtopt) for each in self.list_names["fmtopt"]] sel=1 for eachButton in buttons: eachButton.setSelected(sel) fmtopt_grp.add(eachButton) fmtopt_pnl.add(eachButton) sel=0 self.contentPane.add(fmtopt_pnl) self.sdpw=1 sdpw_grp=swing.ButtonGroup() sdpw_pnl=swing.JPanel(awt.GridLayout(0,1)) sdpw_pnl.border = swing.BorderFactory.createTitledBorder("Displayed Days") buttons = [self.createRadioButton(each, self.radioButtonPressed_sdpw) for each in self.list_names["sdpw"]] sel=1 for eachButton in buttons: eachButton.setSelected(sel) sdpw_grp.add(eachButton) sdpw_pnl.add(eachButton) sel=0 self.contentPane.add(sdpw_pnl) self.alnopt=1 alnopt_grp=swing.ButtonGroup() alnopt_pnl=swing.JPanel(awt.GridLayout(0,1)) alnopt_pnl.border = swing.BorderFactory.createTitledBorder("Alignment") buttons = [self.createRadioButton(each, self.radioButtonPressed_alnopt) for each in self.list_names["alnopt"]] sel=1 for eachButton in buttons: eachButton.setSelected(sel) alnopt_grp.add(eachButton) alnopt_pnl.add(eachButton) sel=0 self.contentPane.add(alnopt_pnl) self.cellopt=1 cellopt_grp=swing.ButtonGroup() cellopt_pnl=swing.JPanel(awt.GridLayout(0,1)) cellopt_pnl.border = swing.BorderFactory.createTitledBorder("Cell Format") buttons = [self.createRadioButton(each, self.radioButtonPressed_cellopt) for each in self.list_names["cellopt"]] sel=1 for eachButton in buttons: eachButton.setSelected(sel) cellopt_grp.add(eachButton) cellopt_pnl.add(eachButton) sel=0 self.contentPane.add(cellopt_pnl) self.contentPane.add(swing.JTextField('Events:: (eg., "1/31 .PURPLE 7:30pm ^ bingo ^ at church hall ^ free dinner")', editable=0)) self.eventtxt=swing.JTextArea(16,50) self.eventpnl=swing.JPanel() self.eventpnl.add(swing.JScrollPane(self.eventtxt)) self.contentPane.add(self.eventpnl) genButton=swing.JButton("Generate", actionPerformed=self.genButtonPressed) self.contentPane.add(genButton) self.pack() self.size=(640,600) def buttonPressed(self, event): self.field.text = self.quotes[event.source.text] def createButton(self, name): "@sig public javax.swing.JButton createButton(String name)" return swing.JButton(name, preferredSize=(100,20), actionPerformed=self.buttonPressed) def createRadioButton(self, name, doRadioPressed): return swing.JRadioButton(name, actionPerformed=doRadioPressed) def addQuote(self, marxBrother, quote): "@sig public void addQuote(String marxBrother, String quote)" self.quotes[marxBrother] = quote def radioButtonPressed_fmtopt(self, event): self.fmtopt=self.list_names["fmtopt"].index(event.source.text)+1 def radioButtonPressed_sdpw(self, event): self.sdpw=self.list_names["sdpw"].index(event.source.text)+1 def radioButtonPressed_alnopt(self, event): self.alnopt=self.list_names["alnopt"].index(event.source.text)+1 def radioButtonPressed_cellopt(self, event): self.cellopt=self.list_names["cellopt"].index(event.source.text)+1 def genButtonPressed(self, event): self.year =self.list_names["years"].index(self.years.getSelectedItem())+2000 self.mth =self.list_names["mnths"].index(self.mnths.getSelectedItem())+1 self.langsel =self.list_names["lang"].index(self.lang.getSelectedItem())+1 BuildHTML(self.year, self.mth, self.langsel, self.sdpw, self.cellopt, self.fmtopt, self.alnopt, self.msg.text, self.eventtxt.text) ShowHTML("HTML") class ShowHTML(swing.JFrame): def __init__(self,title): self.contentPane.layout = awt.FlowLayout() tabbedPane=swing.JTabbedPane() self.htmlTab=swing.JEditorPane("text/html", "", editable=0, hyperlinkUpdate=self.followHyperlink) self.f=open("htmlfile.dat","r") htmlstr=self.f.read() self.f.close() self.htmlTab.setText(htmlstr) tabbedPane.addTab("HTMLView",swing.JScrollPane(self.htmlTab, preferredSize=(720, 480))) textTab=swing.JTextArea(15,80) textTab.setText(htmlstr) tabbedPane.addTab("PlainText",swing.JScrollPane(textTab, preferredSize=(720, 480))) self.contentPane.add(tabbedPane) self.pack() self.show() def followHyperlink(self, event): if event.eventType == swing.event.HyperlinkEvent.EventType.ACTIVATED: self.statusLine = event.URL.toString() self.htmlTab.setPage(event.URL) elif event.eventType == swing.event.HyperlinkEvent.EventType.ENTERED: self.statusLine = event.URL.toString() elif event.eventType == swing.event.HyperlinkEvent.EventType.EXITED: self.statusLine = "" class BuildHTML: def __init__(self, year, month, lang, sdpw, cellopt, fmtopt, alnopt, msg, eventtxt): # comment expression self.cmtpat = re.compile('^ *\#') # date mm/dd self.datepat = re.compile('^ *([0-9]*[0-9]?)/([0-9][0-9]?)') # any word self.wordpat = re.compile('^ *([^ *\t*]+)') # dot color (eg. ".blue") self.dotcpat = re.compile('^ *\.[a-zA-Z]+') events=string.split(eventtxt, "\n") self.evt,self.evtstore,self.maxdd,self.count = self.parse_events(year,month,events) self.f=open("htmlfile.dat","w") print >> self.f, "
| ' else: fmtspan='' extracell='' if((sdpw==1)|(sdpw==4)): print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(0+begweek)%7]) print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(1+begweek)%7]) print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(2+begweek)%7]) print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(3+begweek)%7]) print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(4+begweek)%7]) print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(5+begweek)%7]) if((sdpw==1)|(sdpw==2)|(sdpw==4)): print >> self.f, ' | %s'%(dayw,fmtspan,week_name[(6+begweek)%7]) print >> self.f, ' |
|---|---|---|---|---|---|---|---|
| 0): print >> self.f, 'width=5>'+str(day), else: print >> self.f, '>', print >> self.f, ' | %s' % extracell dow=dow+1 print >> self.f, '|||||||
| ' %fmtspan ,
if(day>0):
for i in range(maxdd):
if ((fmtopt==1) & (i==0)):
print >> self.f, '',day,'',' ' if (alnopt==2): print >> self.f, ' ' else: evn=evt[(day,i+1)] event=evtstore[evn] # convert caret's to event=re.sub(' *\^ *',' ',event) # convert vertical bars to event=re.sub('\|',' ',event) # convert beginning codes like '.red' to fontcolor tag clrsch=self.dotcpat.search(event) if clrsch > -1: event=string.strip(event[clrsch.end():]) color=clrsch.group(0) color=re.sub(' *\.','',color) event=''+event+'' # this will also be the listing sequence (and link) evseq=evseq+1 if (cellopt==2): evtext=event if (((day+i)%2)==1): evtext=self.embolden(event) print >> self.f, evtext,' ' else: print >> self.f, event,' ' if (alnopt==2): print >> self.f, ' ' dow=dow+1 print >> self.f, ' | '
print >> self.f, '