annotate Mac/Demo/textedit.html @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 3b3870b9acf2
children 4722d37faa14
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3531
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
1 <HTML><HEAD><TITLE>Using FrameWork and TextEdit</TITLE></HEAD>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
2 <BODY>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
3 <H1>Using FrameWork and TextEdit</H1>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
4 <HR>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
5
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
6 In this document we use the <CODE>FrameWork</CODE> and <CODE>TextEdit</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
7 modules to create a simple text editor. The functionality
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
8 of the editor is very basic: you can open multiple files, type text and use
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
9 cut/copy/paste. The main intention is to explain the use of FrameWork, really. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
10
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
11 <H2>FrameWork</H2>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
12
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
13 The FrameWork module provides you with a skeleton application. It declares a
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
14 number of classes suitable for subclassing in your application, thereby
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
15 releaving you of the burden of doing all event handling, etc. yourself. For a
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
16 real understanding you will have to browse the source. Here is a short overview
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
17 of the classes and what functionality they provide.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
18
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
19 <dl>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
20 <dt> <CODE>Application</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
21 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
22 This is the toplevel class you will override. It maintains the menu bar and contains
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
23 the main event handling code. Normal use is to override the <code>__init__</code> routine
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
24 to do your own initializations and override <code>makeusermenus</code> to create your menus
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
25 (your menu callback routines may be here too, but this is by no means necessary).
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
26 The event handling code can be overridden at various levels, from very low-level (the
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
27 <code>dispatch</code> method) to intermedeate level (<code>do_keyDown</code>, for instance)
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
28 to high-level (<code>do_key</code>). The application class knows about the <code>Window</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
29 objects you create, and will forward events to the appropriate window (So, normally you
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
30 would have a <code>do_key</code> method in your window object, not your application object).
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
31
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
32 <dt> <CODE>MenuBar</CODE>, <CODE>Menu</CODE> and <CODE>MenuItem</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
33 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
34 These classes (and a few friends like <CODE>SubMenu</CODE>) handle your menus. You would not
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
35 normally override them but use them as-is. The idiom for creating menus is a bit strange,
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
36 see the test code at the bottom of FrameWork for sample use. The apple menu is handled for you
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
37 by <CODE>MenuBar</CODE> and <CODE>Application</CODE>.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
38
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
39 <dt> <CODE>Window</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
40 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
41 The basic window. Again, a class that you normally subclass in your application, possibly
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
42 multiple times if you have different types of windows. The init call instantiates the data
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
43 structure but actually opening the window is delayed until you call <code>open</code>. Your
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
44 open method should call <code>do_postopen</code> to let the base class handle linking in to
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
45 the application object. Similarly with <code>close</code> and <code>do_postclose</code>. The
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
46 rest of the code is mainly event-oriented: you override <code>do_postresize</code>,
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
47 <code>do_contentclick</code>, <code>do_update</code>, <code>do_activate</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
48 and <code>do_key</code> to "do your thing". When these methods are called the relevant environment
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
49 has been setup (like <code>BeginDrawing</code> has been called for updates, etc).
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
50
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
51 <dt> <CODE>windowbounds</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
52 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
53 Not a class but a function: you pass it a width and height and it will return you a rectangle
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
54 you can use to create your window. It will take care of staggering windows and it will try
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
55 to fit the window on the screen (but the resulting rect will <em>always</em> have the size you
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
56 specify).
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
57
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
58 <dt> <CODE>ControlsWindow</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
59 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
60 A subclass of Window which automatically handles drawing and clicking for controls. You override
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
61 the same methods as for Window (if you need to: control-related things are done automatically) and
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
62 <code>do_controlhit</code>.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
63
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
64 <dt> <CODE>ScrolledWindow</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
65 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
66 A subclass of ControlsWindow, a window with optional scrollbars. If you override <code>do_activate</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
67 or <code>do_postresize</code> you must call the ScrolledWindow methods at the end of your override.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
68 You call <code>scrollbars</code> to enable/disable scrollbars and <code>updatescrollbars</code> to
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
69 update them. You provide <code>getscrollbarvalues</code> to return the current x/y values (a helper
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
70 method <code>scalebarvalues</code> is available) and <code>scrollbarcallback</code> to update your
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
71 display after the user has used the scrollbars.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
72
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
73 <dt> <CODE>DialogWindow</CODE>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
74 <dd>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
75 A modeless dialog window initialized from a DLOG resource. See the
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
76 <A HREF="example2.html">second Interslip example</A> for its useage.
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
77 </dl>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
78
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
79 <H2>A sample text editor</H2>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
80
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
81 Let us have a look at <A HREF="textedit/ped.py">ped.py</A> (in the Demo:textedit folder), the Pathetic
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
82 EDitor. It has multiple windows, cut/copy/paste and keyboard input, but that is about all. It looks
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
83 as if you can resize the window but it does not work. Still, it serves as an example. We will improve
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84 on ped later, in a <A HREF="waste.html">waste-based example</A>. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
86 Ped creates two classes, <code>TEWindow</code> and <code>Ped</code>. Let us start with the latter one,
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
87 which is a subclass of <code>FrameWork.Application</code> and our main application. The init function
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
88 has little to do aside from the standard init: it remembers a window sequence number (for untitled windows),
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
89 and sets things up for menu disable to work. Remember, the <code>makeusermenus</code> is called
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90 automatically. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
92 <code>Makeusermenus</code> creates the <code>File</code> and <code>Edit</code> menus. It also initializes
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
93 a couple of lists that are used later to correctly enable and disable menu items (and complete menus) depending
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
94 on whether a window is open, text is selected, etc. The callback functions for the menu items are
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95 all methods of this class. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
97 <code>Updatemenubar</code> handles greying out (and re-enabling) of menu items depending on whether there
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
98 is a current window and its state. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
100 The rest of the methods are all callbacks and simple to understand. They check whether there is an active
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
101 window (and complain loudly if there is none: the corresponding menu entry should have been disabled
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
102 in that case!) and call the appropriate window method. Only the <code>_open</code> method (the common code
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
103 for <code>Open</code> and <code>New</code>) deserves some mention. It instantiates a <code>TEWindow</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
104 object and opens it with the title, filename and contents of the file to edit. Note that FrameWork takes
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
105 care of remembering the window object. A minor note on opening the file in binary mode: this is because
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
106 TextEdit expects MacOS style carriage-return terminated lines, not python/unix/C style newline-terminated
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107 lines. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
108
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
109 Oh yes: the <code>quit</code> callback does a little magic too. It closes all windows, and only if this
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
110 succeeds it actually quits. This gives the user a chance to cancel the operation if some files are unsaved.
4314
3b3870b9acf2 Calling Application._quit() is now preferred over raising self.
Jack Jansen <jack.jansen@cwi.nl>
parents: 3531
diff changeset
111 <p>
3531
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
112
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
113 Lastly, there is the <code>idle</code> method, called by the Application base class when no event
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
114 is available. It is forwarded to the active window, so it can blink the text caret. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
116 The <code>TEWindow</code> object handles a single window. Due to this structuring it is absolutely no
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
117 problem to have multiple windows open at the same time (although a real application should exercise care when
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
118 two windows refer to the same document). TEWindow uses the standard init code inherited from
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
119 <code>ScrolledWindow</code>, and sets itself up at the time of the <code>open</code> call. It obtains screen
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
120 coordinates, opens the window, creates rectangles for TextEdit to work in (the magical number <code>15</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
121 here is the size of a normal scroll bar: unfortunately there is no symbolic constant for it),
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
122 creates the TextEdit object and initializes it with our data. Finally, the scroll bars are created (the
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
123 initial values will be obtained automatically through <code>getscrollbarvalues</code>) and we activate
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
124 ourselves (this is unfortunately not done automatically by the MacOS event handling code). <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
126 <code>Do_idle</code> simply calls the TextEdit routine that blinks the cursor. <code>Getscrollbarvalues</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
127 returns the current X and Y scrollbar values, scaled to <code>0..32767</code>. For X we return <code>None</code>,
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
128 which means "no scrollbar, please", for Y we use the scaler provided by <code>ScrolledWindow</code>. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
130 <code>Scrollbar_callback</code> is called when the user uses the scrollbar. It is passed a string <code>'x'</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
131 or <code>'y'</code>, one of <code>'set', '-', '--', '+', '++'</code> and (for <code>set</code>) an absolute
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
132 value. Note that the sign of the value passed to <code>TEPinScroll</code> is counter-intuitive. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
134 <code>do_activate</code> (de)activates the scrollbars and calls the relevant TextEdit routine. Moreover, it
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
135 tells the application object if we are now the active window, and updates the menubar. The next few methods
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
136 are update and menu callbacks, and pretty straightforward. Note that <code>do_close</code> can
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
137 return without closing the window (if the document is changed and the users cancels out of the operation).
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
138 Also note the "magic" in <code>menu_save_as</code>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139 that set the correct window title. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
141 Things get moderately interesting again at the cut/copy/paste handling, since the TextEdit scrap is
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
142 separate from the desktop scrap. For that reason there are various calls to routines that move the scrap
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
143 back and forth. <code>Have_selection</code> is called by the menubar update code to determine whether cut and
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144 copy should be enabled. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
146 Understanding the main program is left as an exercise to the reader. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148 <hr>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
149 That's all for this example, you could now continue with the <A HREF="waste.html">next example</A>, where we use WASTE, a more-or-less
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
150 TextEdit compatible library with more functionality, to rebuild our editor. Or you can
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
151 return to the <A HREF="index.html">table of contents</A> to pick another topic. <p>