diff -rc --new-file ..\devel\python\tools\idle/Bindings.py idle/Bindings.py *** ..\devel\python\tools\idle/Bindings.py Fri Aug 27 00:06:22 1999 --- idle/Bindings.py Wed May 10 09:36:34 2000 *************** *** 23,28 **** --- 23,30 ---- ('Save _As...', '<>'), ('Save Co_py As...', '<>'), None, + ('Print...', '<>'), + None, ('_Close', '<>'), ('E_xit', '<>'), ]), diff -rc --new-file ..\devel\python\tools\idle/IOBinding.py idle/IOBinding.py *** ..\devel\python\tools\idle/IOBinding.py Fri Jun 25 17:02:22 1999 --- idle/IOBinding.py Fri May 19 15:16:10 2000 *************** *** 18,23 **** --- 18,26 ---- #$ win #$ unix + #$ event <> + #$ win (to be decided) + #$ unix (to be decided) class IOBinding: *************** *** 30,35 **** --- 33,39 ---- self.save_as) self.__id_savecopy = self.text.bind("<>", self.save_a_copy) + self.__id_print_window = self.text.bind("<>", self.print_window) def close(self): # Undo command bindings *************** *** 159,164 **** --- 163,210 ---- tkMessageBox.showerror("I/O Error", str(msg), master=self.text) return 0 + + def print_window(self,event): + global _py2pdf_cmd + try: + dir = _py2pdf_cmd + except NameError: + import IOBinding + from IdleConf import idleconf + iconf = idleconf.getsection('Print') + dir = iconf.getdef('py2pdf', + default=os.path.normpath(os.path.join(os.path.dirname(IOBinding.__file__),'..','py2pdf'))) + _py2pdf_cmd = os.path.join(dir,'idle_print.py') + if not os.path.isfile(_py2pdf_cmd): + try: + import reportlab + _py2pdf_cmd = os.path.join(os.path.dirname(reportlab.__file__), 'demos', 'py2pdf', 'idle_print.py') + except ImportError: + _py2pdf_cmd = '' + r = 0 + if not os.path.isfile(_py2pdf_cmd): + tkMessageBox.Message( title="Setup Error", + message=''' + I can't find a version of py2pdf in the tools + area of your python installation! + + Please download and extract in tools either of + ftp://ftp.reportlab.com/py2pdf.zip + ftp://ftp.reportlab.com/py2pdf.tgz + + Alternatively alter the config.txt [Print].py2pdf item + to point to the reportlab/demos/py2pdf directory! + + Then configure %s to your system! + ''' % _py2pdf_cmd, + icon=tkMessageBox.INFO, + type=tkMessageBox.OK, + master=self.text).show() + del _py2pdf_cmd + return + + from PrintWindowDialog import PrintWindowDialog + PrintWindowDialog(self, self.filename, _py2pdf_cmd) def fixlastline(self): c = self.text.get("end-2c") diff -rc --new-file ..\devel\python\tools\idle/IdleConf.py idle/IdleConf.py *** ..\devel\python\tools\idle/IdleConf.py Tue Mar 07 16:55:32 2000 --- idle/IdleConf.py Wed May 10 09:36:34 2000 *************** *** 8,14 **** # these conf sections do not define extensions! builtin_sections = {} ! for section in ('EditorWindow', 'Colors'): builtin_sections[section] = section def getcolor(self, sec, name): --- 8,14 ---- # these conf sections do not define extensions! builtin_sections = {} ! for section in ('EditorWindow', 'Colors', 'Print'): builtin_sections[section] = section def getcolor(self, sec, name): diff -rc --new-file ..\devel\python\tools\idle/PrintWindowDialog.py idle/PrintWindowDialog.py *** ..\devel\python\tools\idle/PrintWindowDialog.py Thu Jan 01 00:00:00 1970 --- idle/PrintWindowDialog.py Wed May 10 09:36:34 2000 *************** *** 0 **** --- 1,173 ---- + import os + import tkFileDialog + import tkMessageBox + import tempfile, sys, string + from Tkinter import BooleanVar, StringVar, Toplevel, Checkbutton, Button, OptionMenu, Label, Frame, Entry + from IdleConf import idleconf + + _widget_defaults = {} + + class PrintWindowDialog: + title = "Print Dialog" + icon = "Print" + SIZES = ('letter','legal','tabloid','ledger','executive', 'A3', 'A4', 'A5') + + def __init__(self, owner, filename, cmd): + if not filename: + self.filename = 'Unknown' + else: + self.filename = os.path.basename(filename) + self.cmd = cmd + self.owner = owner + self.text = owner.text + top = Toplevel(self.text) + top.bind("", self.close_OK) + top.bind("", self.close) + top.protocol("WM_DELETE_WINDOW", self.close) + top.wm_title(self.title) + top.wm_iconname(self.icon) + top.wm_minsize(width=200,height=50) + top.grid_columnconfigure(0, weight=40) + top.grid_columnconfigure(1, weight=60) + self.top = top + + iconf = idleconf.getsection('Print') + if _widget_defaults=={}: + _widget_defaults['size'] = iconf.getdef('size',default='A4') + _widget_defaults['viewonly'] = int(iconf.getdef('viewonly',default='0')) + _widget_defaults['landscape'] = int(iconf.getdef('landscape',default='0')) + _widget_defaults['colorize'] = int(iconf.getdef('colorize',default='1')) + _widget_defaults['fontsize'] = int(iconf.getdef('fontsize',default='8')) + _widget_defaults['font'] = iconf.getdef('font',default='Courier') + _widget_defaults['tabwidth'] = iconf.getdef('tabwidth',default=str(self.owner.editwin.get_tabwidth())) + + size = _widget_defaults['size'] + SIZES = self.SIZES[:] + self.acroread = iconf.getdef('acroread',default=None) + + if size not in SIZES: + SIZES = (size,) + SIZES + + # set up our variables + self.colorize = BooleanVar(top) + self.colorize.set(_widget_defaults['colorize']) + self.size = StringVar(top) + self.size.set(size) + self.viewonly = BooleanVar(top) + self.viewonly.set(_widget_defaults['viewonly']) + self.landscape = BooleanVar(top) + self.landscape.set(_widget_defaults['landscape']) + self.tabSize = StringVar(top) + self.tabSize.set(_widget_defaults['tabwidth']) + self.fontSize = StringVar(top) + self.fontSize.set(_widget_defaults['fontsize']) + self.fontName = StringVar(top) + self.fontName.set(_widget_defaults['font']) + + row = 0 + l = Label(top,text='Print: '+ self.filename) + l.grid(row=row,col=0,columnspan=2,sticky='w') + + row = row + 1 + b = Checkbutton(top, anchor="w", variable=self.colorize, text="Colorize") + b.grid(row=row,col=0,sticky='ew') + m = apply(OptionMenu,(self.top,self.size)+SIZES) + m.grid(row=row,col=1,sticky='ew') + + row = row+1 + if sys.platform!='win32': + b = Checkbutton(top, anchor="w", variable=self.viewonly, text="View Only") + b.grid(row=row,col=0,sticky='ew') + b = Checkbutton(top, anchor="w", variable=self.landscape, text="Landscape") + b.grid(row=row,col=1,sticky='ew') + + row = row + 1 + f = Frame(top) + l = Label(f,text='tabwidth: ') + l.grid(row=0,col=0,sticky='w') + e = Entry(f,textvariable=self.tabSize,width=3) + e.grid(row=0,col=1,sticky='ew') + f.grid(row=row,col=0) + + f = Frame(top) + m = OptionMenu(f,self.fontName,'Courier','Helvetica','Times') + m.grid(row=0,col=0,sticky='w') + e = Entry(f,textvariable=self.fontSize,width=3) + e.grid(row=0,col=1,sticky='ew') + f.grid(row=row,col=1) + + row = row + 1 + b = Button(self.top, text='OK', command=self.close_OK, default="active") + b.grid(row=row,col=0,stick='ew') + b = Button(self.top, text='Cancel', command=self.close, default="normal") + b.grid(row=row,col=1,stick='ew') + + # here we go + if int(iconf.getdef('setgeometry',default=0)) or sys.platform=='win32': + top.wm_geometry('+%d+%d' % (self.text.winfo_rootx(),self.text.winfo_rooty())) + self.top.deiconify() + self.top.tkraise() + self.top.grab_set() + + def close_OK(self, event=None): + self.close(event) + fnroot = os.path.splitext(self.filename)[0] + tfile = os.path.split(tempfile.mktemp()) + tfilename = os.path.join(tfile[0],"%s_%s.py"%(fnroot,tfile[1])) + self.owner.fixlastline() + try: + f = open(tfilename, "w") + chars = self.text.get("1.0", "end-1c") + f.write(chars) + f.close() + except IOError, msg: + tkMessageBox.showerror("I/O Error", str(msg), master=self.text) + return + + cmd = [sys.executable, self.cmd] + size = self.size.get() + landscape = self.landscape.get() + colorize = self.colorize.get() + viewonly = self.viewonly.get() + tabSize = self.tabSize.get() + fontSize = self.fontSize.get() + fontName = self.fontName.get() + if fontName=='Times': fontName = 'Times-Roman' + cmd.append(colorize and '--mode=color' or '--mode=mono') + cmd.append('--paperFormat='+size) + cmd.append('--title='+self.filename) + cmd.append('--tabSize='+tabSize) + cmd.append('--fontSize='+fontSize) + cmd.append('--fontName='+fontName) + if self.acroread: cmd.append('--acroread='+self.acroread) + if viewonly: cmd.append('--viewonly') + if landscape: cmd.append('--landscape') + cmd.append(tfilename) + + if hasattr(os,'spawnv'): + if hasattr(os,'P_DETACH'): + flag = os.P_DETACH + else: + flag = os.P_NOWAIT + os.spawnv(flag,cmd[0],cmd) + else: #for 1.5.2 unix + pid = os.fork() + if not pid: + #this is the child process + try: + os.execv(cmd[0], cmd) + except: + sys.exit(127) + + _widget_defaults['size'] = size + _widget_defaults['viewonly'] = viewonly + _widget_defaults['landscape'] = landscape + _widget_defaults['colorize'] = colorize + _widget_defaults['font'] = fontName + _widget_defaults['fontsize'] = fontSize + _widget_defaults['tabwidth'] = tabSize + + def close(self, event=None): + self.top.grab_release() + self.top.withdraw() + del self.top diff -rc --new-file ..\devel\python\tools\idle/help.txt idle/help.txt *** ..\devel\python\tools\idle/help.txt Fri Apr 23 00:20:18 1999 --- idle/help.txt Wed May 10 09:36:34 2000 *************** *** 20,25 **** --- 20,27 ---- Save Copy As... -- save current window to different file without changing the associated file --- + Print -- print the current window using py2pdf and acrobat reader + --- Close -- close current window (asks to save if unsaved) Exit -- close all windows and quit IDLE (asks to save if unsaved)