annotate Mac/Demo/textedit.html @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 4722d37faa14
children
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
38582
4722d37faa14 Drop Mac wrappers for the WASTE library.
Ronald Oussoren <ronaldoussoren@mac.com>
parents: 4314
diff changeset
83 as if you can resize the window but it does not work. Still, it serves as an example.
3531
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
84
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
85 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
86 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
87 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
88 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
89 automatically. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
90
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
91 <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
92 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
93 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
94 all methods of this class. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
95
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
96 <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
97 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
98
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
99 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
100 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
101 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
102 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
103 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
104 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
105 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
106 lines. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
107
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
108 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
109 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
110 <p>
3531
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
111
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
112 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
113 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
114
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
115 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
116 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
117 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
118 <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
119 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
120 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
121 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
122 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
123 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
124
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
125 <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
126 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
127 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
128
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
129 <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
130 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
131 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
132
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
133 <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
134 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
135 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
136 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
137 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
138 that set the correct window title. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
139
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
140 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
141 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
142 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
143 copy should be enabled. <p>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
144
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
145 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
146
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
147 <hr>
38e1480e7f89 Added documentation on FrameWork, TextEdit and Waste
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff changeset
148 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
149 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
150 return to the <A HREF="index.html">table of contents</A> to pick another topic. <p>