Barry Warsaw | fefbf79 | 1998-01-31 23:39:01 +0000 | [diff] [blame] | 1 | """Main Pynche (Pythonically Natural Color and Hue Editor) widget. |
Barry Warsaw | eb61fbd | 1998-10-02 16:06:27 +0000 | [diff] [blame] | 2 | |
| 3 | This window provides the basic decorations, primarily including the menubar. |
| 4 | It is used to bring up other windows. |
Barry Warsaw | fefbf79 | 1998-01-31 23:39:01 +0000 | [diff] [blame] | 5 | """ |
| 6 | |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 7 | import sys |
Barry Warsaw | fefbf79 | 1998-01-31 23:39:01 +0000 | [diff] [blame] | 8 | from Tkinter import * |
Barry Warsaw | a9b4558 | 1998-09-29 20:03:53 +0000 | [diff] [blame] | 9 | import tkMessageBox |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 10 | |
| 11 | # Milliseconds between interrupt checks |
| 12 | KEEPALIVE_TIMER = 500 |
Barry Warsaw | fefbf79 | 1998-01-31 23:39:01 +0000 | [diff] [blame] | 13 | |
Barry Warsaw | 552ac17 | 1998-02-17 22:25:23 +0000 | [diff] [blame] | 14 | |
| 15 | |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 16 | class PyncheWidget: |
Barry Warsaw | 86daeb7 | 1998-10-01 16:46:16 +0000 | [diff] [blame] | 17 | def __init__(self, version, switchboard): |
| 18 | self.__sb = switchboard |
| 19 | self.__version = version |
| 20 | self.__textwin = None |
Barry Warsaw | bd36d6e | 1998-10-02 16:05:48 +0000 | [diff] [blame] | 21 | self.__listwin = None |
Barry Warsaw | 9044b8e | 1998-10-05 21:14:46 +0000 | [diff] [blame^] | 22 | self.__detailswin = None |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 23 | # create the first and top window |
| 24 | root = self.__root = Tk(className='Pynche') |
| 25 | root.protocol('WM_DELETE_WINDOW', self.__quit) |
| 26 | root.title('Pynche %s' % version) |
| 27 | root.iconname('Pynche') |
| 28 | root.tk.createtimerhandler(KEEPALIVE_TIMER, self.__keepalive) |
| 29 | # |
| 30 | # create the menubar |
| 31 | # |
| 32 | menubar = self.__menubar = Frame(root, relief=RAISED, borderwidth=2) |
Barry Warsaw | b26743a | 1998-10-01 14:26:26 +0000 | [diff] [blame] | 33 | menubar.grid(row=0, column=0, columnspan=2, sticky='EW') |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 34 | # |
| 35 | # File menu |
| 36 | # |
| 37 | filebtn = Menubutton(menubar, text='File', |
| 38 | underline=0) |
| 39 | filebtn.pack(side=LEFT) |
| 40 | filemenu = Menu(filebtn, tearoff=0) |
| 41 | filebtn['menu'] = filemenu |
| 42 | filemenu.add_command(label='Quit', |
| 43 | command=self.__quit, |
| 44 | accelerator='Alt-Q', |
| 45 | underline=0) |
| 46 | root.bind('<Alt-q>', self.__quit) |
| 47 | root.bind('<Alt-Q>', self.__quit) |
| 48 | # |
Barry Warsaw | 86daeb7 | 1998-10-01 16:46:16 +0000 | [diff] [blame] | 49 | # View menu |
| 50 | # |
| 51 | viewbtn = Menubutton(menubar, text='View', |
| 52 | underline=0) |
| 53 | viewbtn.pack(side=LEFT) |
| 54 | viewmenu = Menu(viewbtn, tearoff=0) |
| 55 | viewbtn['menu'] = viewmenu |
| 56 | viewmenu.add_command(label='Text Window...', |
| 57 | command=self.__popup_text, |
| 58 | underline=0) |
Barry Warsaw | bd36d6e | 1998-10-02 16:05:48 +0000 | [diff] [blame] | 59 | viewmenu.add_command(label='Color List Window...', |
| 60 | command=self.__popup_listwin, |
| 61 | underline=0) |
Barry Warsaw | 9044b8e | 1998-10-05 21:14:46 +0000 | [diff] [blame^] | 62 | viewmenu.add_command(label='Details Window...', |
| 63 | command=self.__popup_details, |
| 64 | underline=0) # |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 65 | # Help menu |
| 66 | # |
| 67 | helpbtn = Menubutton(menubar, text='Help', |
| 68 | underline=0) |
| 69 | helpbtn.pack(side=RIGHT) |
| 70 | helpmenu = Menu(helpbtn, tearoff=0) |
| 71 | helpbtn['menu'] = helpmenu |
| 72 | helpmenu.add_command(label='About...', |
| 73 | command=self.__popup_about, |
| 74 | underline=0) |
Barry Warsaw | 552ac17 | 1998-02-17 22:25:23 +0000 | [diff] [blame] | 75 | |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 76 | def __keepalive(self): |
| 77 | # Exercise the Python interpreter regularly so keyboard interrupts get |
| 78 | # through. |
| 79 | self.__root.tk.createtimerhandler(KEEPALIVE_TIMER, self.__keepalive) |
Barry Warsaw | 552ac17 | 1998-02-17 22:25:23 +0000 | [diff] [blame] | 80 | |
| 81 | def __quit(self, event=None): |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 82 | sys.exit(0) |
Barry Warsaw | 552ac17 | 1998-02-17 22:25:23 +0000 | [diff] [blame] | 83 | |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 84 | def start(self): |
| 85 | self.__keepalive() |
| 86 | self.__root.mainloop() |
| 87 | |
| 88 | def parent(self): |
| 89 | return self.__root |
Barry Warsaw | f67575d | 1998-03-10 00:17:01 +0000 | [diff] [blame] | 90 | |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 91 | def __popup_about(self, event=None): |
Barry Warsaw | a9b4558 | 1998-09-29 20:03:53 +0000 | [diff] [blame] | 92 | tkMessageBox.showinfo('About Pynche 1.0', |
| 93 | '''\ |
| 94 | Pynche -- the PYthonically |
| 95 | Natural Color and Hue Editor |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 96 | |
Barry Warsaw | a9b4558 | 1998-09-29 20:03:53 +0000 | [diff] [blame] | 97 | Copyright (C) 1998 |
| 98 | Barry A. Warsaw |
| 99 | All rights reserved |
Barry Warsaw | a69c1ba | 1998-09-28 23:38:44 +0000 | [diff] [blame] | 100 | |
Barry Warsaw | a9b4558 | 1998-09-29 20:03:53 +0000 | [diff] [blame] | 101 | For information about Pynche |
| 102 | contact: Barry A. Warsaw |
| 103 | email: bwarsaw@python.org''') |
Barry Warsaw | 86daeb7 | 1998-10-01 16:46:16 +0000 | [diff] [blame] | 104 | |
| 105 | def __popup_text(self, event=None): |
| 106 | if not self.__textwin: |
| 107 | from TextViewer import TextViewer |
| 108 | self.__textwin = TextViewer(self.__sb, self.__root) |
| 109 | self.__sb.add_view(self.__textwin) |
| 110 | self.__textwin.deiconify() |
Barry Warsaw | bd36d6e | 1998-10-02 16:05:48 +0000 | [diff] [blame] | 111 | |
| 112 | def __popup_listwin(self, event=None): |
| 113 | if not self.__listwin: |
| 114 | from ListViewer import ListViewer |
| 115 | self.__listwin = ListViewer(self.__sb, self.__root) |
| 116 | self.__sb.add_view(self.__listwin) |
| 117 | self.__listwin.deiconify() |
Barry Warsaw | 9044b8e | 1998-10-05 21:14:46 +0000 | [diff] [blame^] | 118 | |
| 119 | def __popup_details(self, event=None): |
| 120 | if not self.__detailswin: |
| 121 | from DetailsViewer import DetailsViewer |
| 122 | self.__detailswin = DetailsViewer(self.__sb, self.__root) |
| 123 | self.__sb.add_view(self.__detailswin) |
| 124 | self.__detailswin.deiconify() |