import Tkinter import dmTxt2Html import string, os, traceback Label = Tkinter.Label StringVar = Tkinter.StringVar dmTxt2Html.promo = string.replace(dmTxt2Html.promo, dmTxt2Html.cgi_home, '') #-- Create some module scope global variables root, history_frame, menu_frame, info_line = (None, None, None, None) history_list = [] target, source, proxy_mode, conversion = (None, None, None, None) counter = 0 def file_menu(): file_btn = Tkinter.Menubutton(menu_frame, text='File', underline=0) file_btn.pack(side=Tkinter.LEFT, padx="2m") file_btn.menu = Tkinter.Menu(file_btn) file_btn.menu.add_command(label="Source", underline=0, command=GetSource) file_btn.menu.add_command(label="Target", underline=0, command=GetTarget) file_btn.menu.add('separator') #-- types submenu (radio buttons) file_btn.menu.types = Tkinter.Menu(file_btn.menu) file_btn.menu.types.add_radiobutton(label='HTML', variable=conversion, command=update_specs) file_btn.menu.types.add_radiobutton(label='PYTHON', variable=conversion, command=update_specs) file_btn.menu.types.add_radiobutton(label='FAQ', variable=conversion, command=update_specs) file_btn.menu.types.add_radiobutton(label='SMART_ASCII', variable=conversion, command=update_specs) file_btn.menu.types.add_radiobutton(label='RAW', variable=conversion, command=update_specs) file_btn.menu.types.add_radiobutton(label='INFER', variable=conversion, command=update_specs) file_btn.menu.add_cascade(label="Type", menu=file_btn.menu.types) #-- proxy mode submenu (radio buttons) file_btn.menu.proxy = Tkinter.Menu(file_btn.menu) file_btn.menu.proxy.add_radiobutton(label='NAVIGATOR', variable=proxy_mode, command=update_specs) file_btn.menu.proxy.add_radiobutton(label='TRAP_LINKS', variable=proxy_mode, command=update_specs) file_btn.menu.proxy.add_radiobutton(label='ALL', variable=proxy_mode, command=update_specs) file_btn.menu.proxy.add_radiobutton(label='NONE', variable=proxy_mode, command=update_specs) file_btn.menu.add_cascade(label="Proxy Mode", menu=file_btn.menu.proxy) file_btn.menu.add('separator') file_btn.menu.add_command(label='Exit', underline=0, command=file_btn.quit) file_btn['menu'] = file_btn.menu return file_btn def action_menu(): action_btn = Tkinter.Menubutton(menu_frame, text='Action', underline=0,) action_btn.pack(side=Tkinter.LEFT, padx="2m") action_btn.menu = Tkinter.Menu(action_btn) action_btn.menu.add_command(label='Convert!!', underline=0, command=doit_func) action_btn.menu.add('separator') action_btn.menu.add_command(label="Squeeze History", underline=0, command=clear_history) action_btn['menu'] = action_btn.menu return action_btn def help_menu(): help_btn = Tkinter.Menubutton(menu_frame, text='Help', underline=0,) help_btn.pack(side=Tkinter.LEFT, padx="2m") help_btn.menu = Tkinter.Menu(help_btn) help_btn.menu.add_command(label="How To", underline=0, command=HowTo) help_btn.menu.add_command(label="About", underline=0, command=About) help_btn['menu'] = help_btn.menu return help_btn def HowTo(): view_window = Tkinter.Toplevel(root) view_window.title('Txt2Html Help') help_text = open('txt2html.txt').read() text = Tkinter.Text(view_window, height=40, width=110) scroll = Tkinter.Scrollbar(view_window, command=text.yview) text.configure(yscrollcommand=scroll.set) text.tag_configure('fixed', font=('Courier', 10)) text.insert(Tkinter.END, help_text, 'fixed') text.pack(side=Tkinter.LEFT) scroll.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) def About(): view_window = Tkinter.Toplevel(root) about_text = "TK_Txt2Html version 0.1 \n\nRelease to the Public Domain" Tkinter.Message(view_window, text=about_text, justify=Tkinter.CENTER, anchor=Tkinter.CENTER, relief=Tkinter.GROOVE, width=250).pack(padx=10, pady=10) def GetSource(): get_window = Tkinter.Toplevel(root) get_window.title('Source File?') Tkinter.Entry(get_window, width=30, textvariable=source).pack(side=Tkinter.LEFT, padx=5, pady=5) Tkinter.Button(get_window, text="Change", command=lambda: update_specs()).pack(side=Tkinter.LEFT, padx=5, pady=5) def GetTarget(): get_window = Tkinter.Toplevel(root) get_window.title('Target File?') Tkinter.Entry(get_window, width=30, textvariable=target).pack(side=Tkinter.LEFT, padx=5, pady=5) Tkinter.Button(get_window, text="Change", command=lambda: update_specs()).pack(side=Tkinter.LEFT, padx=5, pady=5) def doit_func(): global counter counter = counter+1 update_specs() dmTxt2Html.main({'type': conversion.get(), 'proxy': proxy_mode.get(), 'source': source.get(), 'target': target.get()}) show_run() def update_specs(): global conversion if conversion.get() in ('INFER', ''): conversion.set(dmTxt2Html.infer_type(source.get())) Label(info_line, text="Next", width=5, relief=Tkinter.GROOVE, background="gray90").grid(row=0, column=0) Label(info_line, text=source.get(), width=20, relief=Tkinter.GROOVE, background="gray90").grid(row=0, column=1) Label(info_line, text=target.get(), width=20, relief=Tkinter.GROOVE, background="gray90").grid(row=0, column=2) Label(info_line, text=conversion.get(), width=20, relief=Tkinter.GROOVE, background="gray90").grid(row=0, column=3) Label(info_line, text=proxy_mode.get(), width=20, relief=Tkinter.GROOVE, background="gray90").grid(row=0, column=4) def show_run(): global history_list hist_line = Tkinter.Frame(history_frame) hist_line.pack(side=Tkinter.TOP, padx=2, pady=2) Label(hist_line, text=str(counter), width=5, relief=Tkinter.SUNKEN).grid(row=0, column=0) Label(hist_line, text=source.get(), width=20, relief=Tkinter.SUNKEN).grid(row=0, column=1) Label(hist_line, text=target.get(), width=20, relief=Tkinter.SUNKEN).grid(row=0, column=2) Label(hist_line, text=conversion.get(), width=20, relief=Tkinter.SUNKEN).grid(row=0, column=3) Label(hist_line, text=proxy_mode.get(), width=20, relief=Tkinter.SUNKEN).grid(row=0, column=4) history_list.append(hist_line) def init_vars(): global target, source, proxy_mode, conversion source = Tkinter.StringVar() target = Tkinter.StringVar() proxy_mode = Tkinter.StringVar() conversion = Tkinter.StringVar() target.set('default.html') source.set('txt2html.txt') proxy_mode.set('NONE') conversion.set('INFER') def clear_history(): for history_line in history_frame.pack_slaves()[:-1]: history_line.destroy() def main(): global root, history_frame, info_line, menu_frame root = Tkinter.Tk() root.option_readfile('optionDB') root.title('Txt2Html TK Shell') init_vars() #-- Create the menu frame, and add menus to the menu frame menu_frame = Tkinter.Frame(root) menu_frame.pack(fill=Tkinter.X, side=Tkinter.TOP) menu_frame.tk_menuBar(file_menu(), action_menu(), help_menu()) #-- Create the history frame (to be filled in during runtime) history_frame = Tkinter.Frame(root) history_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM, pady=2) #-- Create the info frame and fill with initial contents info_frame = Tkinter.Frame(root) info_frame.pack(fill=Tkinter.X, side=Tkinter.BOTTOM) # first put the column labels in a sub-frame label_line = Tkinter.Frame(info_frame, relief=Tkinter.RAISED, borderwidth=1) label_line.pack(side=Tkinter.TOP, padx=2, pady=1) Label(label_line, text="Run #", width=5, background="lightblue").grid(row=0, column=0) Label(label_line, text="Source:", width=20, background="lightblue").grid(row=0, column=1) Label(label_line, text="Target:", width=20, background="lightblue").grid(row=0, column=2) Label(label_line, text="Type:", width=20, background="lightblue").grid(row=0, column=3) Label(label_line, text="Proxy Mode:", width=20, background="lightblue").grid(row=0, column=4) # then put the "next run" information in a sub-frame info_line = Tkinter.Frame(info_frame) info_line.pack(side=Tkinter.TOP, padx=2, pady=1) update_specs() #-- Finally, let's actually do all that stuff created above root.mainloop() if __name__=='__main__': try: main() except: traceback.print_exc()