Mercurial > cpython-lru_cache-weakref
annotate Mac/Demo/example1.html @ 5817:48b94de85bf3 legacy-trunk
Extensive changes by AMK.
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Thu, 17 Jul 1997 16:29:42 +0000 |
| parents | a71d2fd90fa8 |
| children | 149a54798896 |
| rev | line source |
|---|---|
|
3457
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
1 <HTML><HEAD><TITLE>Using python to create Macintosh applications, part one</TITLE></HEAD> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
2 <BODY> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
3 <H1>Using python to create Macintosh applications, part one</H1> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
4 <HR> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
5 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
6 This document will show you how to create a simple mac-style |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
7 application using Python. We will glance at how to use dialogs and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
8 resources. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
9 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
10 The example application we look at will be a simple program with a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
11 dialog that allows you to control and monitor InterSLIP, a device |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
12 driver that connects your mac to the Internet via a modem connection. |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
13 <A HREF="example1/InterslipControl-1.py">Source</A> and resource file |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
14 (in binary and <A |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
15 HREF="example1/InterslipControl-1.rsrc.hqx">BinHex</A> form for |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
16 downloading) for this application are available in the <A |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
17 HREF="example1">example1</A> folder (which you will have to download |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
18 if you are reading this document over the net and if you want to look |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
19 at the resources). <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
20 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
21 We will use a C extension module module "interslip" that allows a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
22 Python program to control and monitor the behaviour of the low-level |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
23 driver, and we will create the user interface around that. If you want |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
24 to actually run the code, you will obvously need InterSLIP and the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
25 interslip module. The latter is available as a dynamically loadable |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
26 extension for PowerPC macs, and may be compiled in your Python |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
27 interpreter for 68K macs. As of this writing there is still a slight |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
28 problem with the Python interslip module causing it to say "file not |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
29 found" if the driver is not loaded yet. The workaround is to load the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
30 driver by starting InterSLIP Control and quitting it. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
31 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
32 <CITE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
33 If you are interested in building your own extensions to python you |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
34 should check out the companion document <A |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
35 HREF="plugins.html">Creating Macintosh Python C extensions</A>, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
36 which tells you how to build your own C extension. Not completely |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
37 coincidental this document uses the interslip module that we will use |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
38 here as an example. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
39 </CITE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
40 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
41 <H2><A NAME="dialog-resources">Creating dialog resources</A></H2> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
42 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
43 Let us start with the creative bit: building the dialogs and creating |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
44 an icon for our program. For this you need ResEdit, and a reasonable |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
45 working knowledge of how to use it. "Inside Mac" or various books on |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
46 macintosh programming will help here. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
47 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
48 There is one fine point that deserves to be mentioned here: <A |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
49 NAME="resource-numbering">resource numbering</A>. Because often your |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
50 resources will be combined with those that the Python interpreter and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
51 various standard modules need you should give your DLOG and DITL |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
52 resources numbers above 512. 128 and below are reserved for Apple, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
53 128-255 for the Python interpreter and 256-511 for standard |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
54 modules. If you are writing a module that you will be distributing for |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
55 inclusion in other people's programs you may want to register a number |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
56 in the 256-511 range, contact Guido or myself or whoever you think is |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
57 "in charge" of Python for the Macintosh at the moment. Even though the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
58 application we are writing at the moment will keep its resources in a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
59 separate resource file it is still a good idea to make sure that no |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
60 conflicts arise: once you have opened your resource file any attempt |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
61 by the interpreter to open a dialog will also search your resource |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
62 file. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
63 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
64 Okay, let's have a look at InterslipControl-1.rsrc, our resource file. |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
65 The DLOG and accompanying DITL resource both have number 512. Since |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
66 ResEdit creates both with default ID=128 you should take care to |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
67 change the number on both. The dialog itself is pretty basic: four |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
68 buttons (connect, disconnect, update status and quit), two labels and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
69 two status fields. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
70 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
71 <H2><A NAME="modal-dialog">An application with a modal dialog</A></H2> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
72 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
73 Next, we will have to write the actual application. For this example, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
74 we will use a modal dialog. This means that we will put up the dialog |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
75 and go into a loop asking the dialog manager for events (buttons |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
76 pushed). We handle the actions requested by the user until the quit |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
77 button is pressed, upon which we exit our loop (and the program). This |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
78 way of structuring your program is actually rather antisocial, since |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
79 you force the user to do whatever you, the application writer, happen |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
80 to want. A modal dialog leaves no way of escape whatsoever (except |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
81 command-option-escape), and is usually not a good way to structure |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
82 anything but the most simple questions. Even then: how often have you |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
83 been confronted with a dialog asking a question that you could not |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
84 answer because the data you needed was obscured by the dialog itself? |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
85 In the next example we will look at an application that does pretty |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
86 much the same as this one but in a more user-friendly way. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
87 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
88 On to the code itself, in file <A |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
89 HREF="example1/InterslipControl-1.py"> InterslipControl-1.py</A>. Have |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
90 a copy handy before you read on. The file starts off with a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
91 textstring giving a short description. Not many tools do anything with |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
92 this as yet, but at some point in the future we <EM>will</EM> have all |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
93 sorts of nifty class browser that will display this string, so just |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
94 include it. Just put a short description at the start of each module, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
95 class, method and function. After the initial description and some |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
96 comments, we import the modules we need. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
97 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
98 <A NAME="easydialogs"><CODE>EasyDialogs</CODE></A> is a handy standard |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
99 module that provides you with routines that put up common text-only |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
100 modal dialogs: |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
101 <UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
102 <LI> <CODE>Message(str)</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
103 displays the message "str" and an OK button, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
104 <LI> <CODE>AskString(prompt, default)</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
105 asks for a string, displays OK and Cancel buttons, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
106 <LI> <CODE>AskYesNoCancel(question, default)</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
107 displays a question and Yes, No and Cancel buttons. |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
108 </UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
109 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
110 <A NAME="res"><CODE>Res</CODE></A> is a pretty complete interface to |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
111 the MacOS Resource Manager, described fully in Inside Mac. There is |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
112 currently no documentation of it, but the Apple documentation (or |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
113 Think Ref) will help you on your way if you remember two points: |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
114 <UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
115 <LI> Resources are implemented as Python objects, and each routine |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
116 with a resource first argument is implemented as a python method. |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
117 <LI> When in doubt about the arguments examine the routines docstring, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
118 as in <CODE>print Res.OpenResFile.__doc__</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
119 </UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
120 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
121 Similarly, <A NAME="dlg"><CODE>Dlg</CODE></A> is an interface to the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
122 Dialog manager (with Dialogs being implemented as python objects and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
123 routines with Dialog arguments being methods). The sys module you |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
124 know, I hope. <A NAME="interslip"><CODE>Interslip</CODE></A>, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
125 finally, is the module with the interface to the InterSLIP driver. We |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
126 use four calls from it: |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
127 <UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
128 <LI> <CODE>open()</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
129 opens the driver |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
130 <LI> <CODE>connect()</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
131 asks it to initiate a connection procedure (without waiting) |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
132 <LI> <CODE>disconnect()</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
133 asks it to initiate a disconnection procedure (without waiting) |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
134 <LI> <CODE>status()</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
135 returns the current connection status in the form of an integer state, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
136 an integer "message sequence number" and a message string. |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
137 </UL> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
138 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
139 Next in the source file we get definitions for our dialog resource |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
140 number and for the item numbers in our dialog. These should match the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
141 situation in our resource file InterslipControl-1.rsrc, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
142 obviously. Then we get an array converting numeric state codes |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
143 returned by <CODE>interslip.status()</CODE> to textual messages. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
144 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
145 On to the main program. We start off with opening our resource file, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
146 which should live in the same folder as the python source. If we |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
147 cannot open it we use <CODE>EasyDialogs</CODE> to print a message and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
148 exit. You can try it: just move the resource file somewhere else for a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
149 moment. Then, we try to open the interslip driver, again catching an |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
150 error. All modules that raise <A NAME="macos-errors">MacOS error |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
151 exceptions</A> will pass a 2-tuple to the exception handler with the |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
152 first item being the numeric <CODE>OSErr</CODE> code and the second |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
153 one being an informative message. If no informative message is |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
154 available it will be the rather uninformative <CODE>"MacOS Error |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
155 -12345"</CODE>, but at least the second item will always be a |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
156 printable string. Finally we call do_dialog() to do the real work. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
157 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
158 <CODE>Do_dialog()</CODE> uses <CODE>Dlg.GetNewDialog()</CODE> to open |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
159 a dialog window initialized from 'DLOG' resource ID_MAIN and putting |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
160 it on screen in the frontmost position. Next, we go into a loop, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
161 calling <CODE>Dlg.ModalDialog()</CODE> to wait for the next user |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
162 action. <CODE>ModalDialog()</CODE> will return us the item number that |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
163 the user has clicked on (or otherwise activated). It will handle a few |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
164 slightly more complicated things also, like the user typing into |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
165 simple textfields, but it will <EM>not</EM> do things like updating |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
166 the physical appearance of radio buttons, etc. See Inside Mac or |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
167 another programming guide for how to handle this |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
168 yourself. Fortunately, our simple application doesn't have to bother |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
169 with this, since buttons are the only active elements we have. So, we |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
170 do a simple switch on item number and call the appropriate routine to |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
171 implement the action requested. Upon the user pressing "quit" we |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
172 simply leave the loop and, hence, <CODE>do_dialog()</CODE>. This will |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
173 cause the python dialog object <CODE>my_dlg</CODE> to be deleted and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
174 the on-screen dialog to disappear. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
175 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
176 <A NAME="dialog-warning">Time for a warning</A>: be very careful what |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
177 you do as long as a dialog is on-screen. Printing something, for |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
178 instance, may suddenly cause the standard output window to appear over |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
179 the dialog, and since we took no measures to redraw the dialog it will |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
180 become very difficult to get out of the dialog. Also, command-period |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
181 may or may not work in this situation. I have also seen crashes in |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
182 such a situation, probably due to the multiple event loops involved or |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
183 some oversight in the interpreter. You have been warned. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
184 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
185 The implementation of the "update status" command can use a bit more |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
186 explaining: we get the new information with <CODE>do_status()</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
187 but now we have to update the on-screen dialog to present this |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
188 information to the user. The <CODE>GetDialogItem()</CODE> method of |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
189 the dialog returns three bits of information about the given item: its |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
190 type, its data handle and its rect (the on-screen <CODE>x,y,w,h</CODE> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
191 coordinates). We are only interested in the data handle here, on which |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
192 we call <CODE>SetDialogItemText()</CODE> to set our new text. Note |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
193 here that python programmers need not bother with the C-string versus |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
194 pascal-string controversy: the python glue module knows what is needed |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
195 and converts the python string to the correct type. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
196 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
197 Finally, the three implementation routines <CODE>do_connect()</CODE>, |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
198 <CODE>do_disconnect()</CODE> and <CODE>do_status()</CODE> are simply |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
199 boring wrappers around the corresponding interslip methods that will |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
200 put up a dialog in case of an error. <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
201 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
202 And that concludes our first example of the use of resources and |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
203 dialogs. Next, you could have a look at the source of EasyDialogs for |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
204 some examples of using input fields and filterprocs. Or, go on with |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
205 reading the <A HREF="example2.html">second part</A> of this document |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
206 to see how to implement a better version of this application. Not only |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
207 will it allow the user to go back to the finder (or other apps) when |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
208 your application is running, it will also free her of the RSI-inducing |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
209 chore of pressing "update status" continuously... <p> |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
210 |
|
a71d2fd90fa8
Explanations of the examples here
Jack Jansen <jack.jansen@cwi.nl>
parents:
diff
changeset
|
211 |
