blob: 4716d39f8c1977d5e8a92ad6aba7e4b9f7ae6318 [file] [log] [blame]
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +00001"""Simple text browser for IDLE
2
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00003"""
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +00004
Georg Brandl6634bf22008-05-20 07:13:37 +00005from Tkinter import *
6import tkMessageBox
Steven M. Gava44d3d1a2001-07-31 06:59:02 +00007
8class TextViewer(Toplevel):
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +00009 """A simple text viewer dialog for IDLE
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000010
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000011 """
Terry Jan Reedy62012fc2014-05-24 18:48:03 -040012 def __init__(self, parent, title, text, modal=True, _htest=False):
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000013 """Show the given text in a scrollable window with a 'close' button
14
Terry Jan Reedy62012fc2014-05-24 18:48:03 -040015 _htest - bool, change box location when running htest
Steven M. Gavad721c482001-07-31 10:46:53 +000016 """
17 Toplevel.__init__(self, parent)
18 self.configure(borderwidth=5)
Terry Jan Reedy62012fc2014-05-24 18:48:03 -040019 # place dialog below parent if running htest
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000020 self.geometry("=%dx%d+%d+%d" % (625, 500,
Terry Jan Reedy62012fc2014-05-24 18:48:03 -040021 parent.winfo_rootx() + 10,
22 parent.winfo_rooty() + (10 if not _htest else 100)))
Steven M. Gavad721c482001-07-31 10:46:53 +000023 #elguavas - config placeholders til config stuff completed
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000024 self.bg = '#ffffff'
25 self.fg = '#000000'
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000026
Steven M. Gavad721c482001-07-31 10:46:53 +000027 self.CreateWidgets()
28 self.title(title)
Steven M. Gavad721c482001-07-31 10:46:53 +000029 self.protocol("WM_DELETE_WINDOW", self.Ok)
30 self.parent = parent
31 self.textView.focus_set()
32 #key bindings for this dialog
33 self.bind('<Return>',self.Ok) #dismiss dialog
34 self.bind('<Escape>',self.Ok) #dismiss dialog
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000035 self.textView.insert(0.0, text)
Steven M. Gavad721c482001-07-31 10:46:53 +000036 self.textView.config(state=DISABLED)
Terry Jan Reedyadb87e22012-02-05 15:10:55 -050037
38 if modal:
39 self.transient(parent)
40 self.grab_set()
41 self.wait_window()
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +000042
Steven M. Gavad721c482001-07-31 10:46:53 +000043 def CreateWidgets(self):
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000044 frameText = Frame(self, relief=SUNKEN, height=700)
Steven M. Gavad721c482001-07-31 10:46:53 +000045 frameButtons = Frame(self)
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000046 self.buttonOk = Button(frameButtons, text='Close',
47 command=self.Ok, takefocus=FALSE)
48 self.scrollbarView = Scrollbar(frameText, orient=VERTICAL,
49 takefocus=FALSE, highlightthickness=0)
50 self.textView = Text(frameText, wrap=WORD, highlightthickness=0,
51 fg=self.fg, bg=self.bg)
Steven M. Gavad721c482001-07-31 10:46:53 +000052 self.scrollbarView.config(command=self.textView.yview)
53 self.textView.config(yscrollcommand=self.scrollbarView.set)
Kurt B. Kaiser09cb74b2003-06-12 04:20:56 +000054 self.buttonOk.pack()
Steven M. Gavad721c482001-07-31 10:46:53 +000055 self.scrollbarView.pack(side=RIGHT,fill=Y)
56 self.textView.pack(side=LEFT,expand=TRUE,fill=BOTH)
57 frameButtons.pack(side=BOTTOM,fill=X)
58 frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
Kurt B. Kaiser6655e4b2002-12-31 16:03:23 +000059
Steven M. Gavad721c482001-07-31 10:46:53 +000060 def Ok(self, event=None):
61 self.destroy()
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000062
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000063
Terry Jan Reedyadb87e22012-02-05 15:10:55 -050064def view_text(parent, title, text, modal=True):
65 return TextViewer(parent, title, text, modal)
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000066
Terry Jan Reedyadb87e22012-02-05 15:10:55 -050067def view_file(parent, title, filename, encoding=None, modal=True):
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000068 try:
69 if encoding:
70 import codecs
71 textFile = codecs.open(filename, 'r')
72 else:
73 textFile = open(filename, 'r')
74 except IOError:
Georg Brandl6634bf22008-05-20 07:13:37 +000075 import tkMessageBox
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000076 tkMessageBox.showerror(title='File Load Error',
77 message='Unable to load file %r .' % filename,
78 parent=parent)
79 else:
Terry Jan Reedyadb87e22012-02-05 15:10:55 -050080 return view_text(parent, title, textFile.read(), modal)
Kurt B. Kaiserd5f49102007-10-04 02:53:07 +000081
82
Steven M. Gava44d3d1a2001-07-31 06:59:02 +000083if __name__ == '__main__':
Terry Jan Reedy62012fc2014-05-24 18:48:03 -040084 from idlelib.idle_test.htest import run
85 run(TextViewer)