| [9] | 1 | <?xml version="1.0" encoding="UTF-8"?> | 
|---|
|  | 2 | <?xml-stylesheet type="text/css" | 
|---|
|  | 3 | href="eclipseos2-xxe.css" | 
|---|
|  | 4 | ?> | 
|---|
|  | 5 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | 
|---|
|  | 6 | "xhtml1-strict.dtd"> | 
|---|
|  | 7 | <html> | 
|---|
|  | 8 | <head> | 
|---|
|  | 9 | <link href="eclipseos2.css" rel="stylesheet" type="text/css" /> | 
|---|
|  | 10 |  | 
|---|
|  | 11 | <title>Eclipse for OS/2 Transitional Project Notes</title> | 
|---|
|  | 12 | </head> | 
|---|
|  | 13 |  | 
|---|
|  | 14 | <body> | 
|---|
|  | 15 | <h1>Standard Widget Toolkit</h1> | 
|---|
|  | 16 |  | 
|---|
|  | 17 | <p>The main idea of the SWT library is such that its internal | 
|---|
|  | 18 | implementation on the certain platform is made in the terms of that | 
|---|
|  | 19 | platform, directly using its native API through the JNI interface, so the | 
|---|
|  | 20 | look'n'feel comes close to the regular platform applications (i.e. | 
|---|
|  | 21 | usability; other important benefits of such approach are: easiness, | 
|---|
|  | 22 | stability, performance). This means that there is a different | 
|---|
|  | 23 | implementation of the basics of SWT for each supported platform; only the | 
|---|
|  | 24 | public interface of SWT classes is, of course, the same. So the term | 
|---|
|  | 25 | "porting" in this case means rewriting the most part of the internal logic | 
|---|
|  | 26 | from scratch (sometimes including the whole classes) rather than just | 
|---|
|  | 27 | correcting it for the specific OS. Therefore we have chosen to start from | 
|---|
|  | 28 | the very beginning and go possibly like original Eclipse developers did, | 
|---|
|  | 29 | from the basics (the top of the class hierarchy) to details, creating the | 
|---|
|  | 30 | java and the native code in parallel. The best way to do it is to divide | 
|---|
|  | 31 | our work into little steps (tasks): every of them is the next level of the | 
|---|
|  | 32 | implementation and can be tested regardless of other parts that are to be | 
|---|
|  | 33 | implemented on the next levels.</p> | 
|---|
|  | 34 |  | 
|---|
|  | 35 | <h2>Brief description of SWT parts</h2> | 
|---|
|  | 36 |  | 
|---|
|  | 37 | <p>Technically, SWT sources consist of two parts: one is written in Java, | 
|---|
|  | 38 | another is written in C and contains native methods that communicate with | 
|---|
|  | 39 | Java code through JNI.</p> | 
|---|
|  | 40 |  | 
|---|
|  | 41 | <p>The table below represents basic subcomponents of SWT as they were | 
|---|
|  | 42 | defined by the original developers. There's a separate directory for each | 
|---|
|  | 43 | subcomponent in the structure of the Eclipse sources. Packages with names | 
|---|
|  | 44 | in <b>bold</b> are platform specific (i.e. have their own implementation | 
|---|
|  | 45 | on each platform), other are common for all platforms (but may require | 
|---|
|  | 46 | some adaptation for a certain OS). <code>o.e.swt</code> here and further | 
|---|
|  | 47 | is a short form of <code>org.eclipse.swt</code>, for convenience.</p> | 
|---|
|  | 48 |  | 
|---|
|  | 49 | <table> | 
|---|
|  | 50 | <thead> | 
|---|
|  | 51 | <tr> | 
|---|
|  | 52 | <th>Name</th> | 
|---|
|  | 53 |  | 
|---|
|  | 54 | <th>Description</th> | 
|---|
|  | 55 |  | 
|---|
|  | 56 | <th>Packages</th> | 
|---|
|  | 57 |  | 
|---|
|  | 58 | <th>Prognosis</th> | 
|---|
|  | 59 | </tr> | 
|---|
|  | 60 | </thead> | 
|---|
|  | 61 |  | 
|---|
|  | 62 | <tr> | 
|---|
|  | 63 | <td>SWT Base</td> | 
|---|
|  | 64 |  | 
|---|
|  | 65 | <td>SWT Base. Contains the major part of all public classes and | 
|---|
|  | 66 | interfaces. Implementations of many basic classes (Display, Widget | 
|---|
|  | 67 | etc.) are individual for each supported platform.</td> | 
|---|
|  | 68 |  | 
|---|
|  | 69 | <td>o.e.swt.events<br />o.e.swt.graphics<br />o.e.swt.internal<br />o.e.swt.internal.image<br />o.e.swt.layout<br />o.e.swt.widgetsefwef<br /><b>o.e.swt.graphics</b><br /><b>o.e.swt.internal</b><br /><b>o.e.swt.widgets</b></td> | 
|---|
|  | 70 |  | 
|---|
|  | 71 | <td>Platform dependent parts need to be almost fully rewritten for | 
|---|
|  | 72 | OS/2</td> | 
|---|
|  | 73 | </tr> | 
|---|
|  | 74 |  | 
|---|
|  | 75 | <tr> | 
|---|
|  | 76 | <td>SWT PI</td> | 
|---|
|  | 77 |  | 
|---|
|  | 78 | <td>SWT Platform Implementation. Contains platform dependent internal | 
|---|
|  | 79 | implementations of SWT interface, including Java wrappers for platform | 
|---|
|  | 80 | native API data structures.</td> | 
|---|
|  | 81 |  | 
|---|
|  | 82 | <td>o.e.swt.internal<br /><b>o.e.swt.internal.<xxx></b></td> | 
|---|
|  | 83 |  | 
|---|
|  | 84 | <td>Needs to be almost fully rewritten for OS/2</td> | 
|---|
|  | 85 | </tr> | 
|---|
|  | 86 |  | 
|---|
|  | 87 | <tr> | 
|---|
|  | 88 | <td>SWT AWT</td> | 
|---|
|  | 89 |  | 
|---|
|  | 90 | <td>It's an experimental class (works currently only on Win32 and has | 
|---|
|  | 91 | some limitations) to make it possible to embed AWT widgets to SWT | 
|---|
|  | 92 | layout.</td> | 
|---|
|  | 93 |  | 
|---|
|  | 94 | <td><b>o.e.s.internal.awt.<xxx></b></td> | 
|---|
|  | 95 |  | 
|---|
|  | 96 | <td>Can be implemented in the future?</td> | 
|---|
|  | 97 | </tr> | 
|---|
|  | 98 |  | 
|---|
|  | 99 | <tr> | 
|---|
|  | 100 | <td>SWT Accessibility</td> | 
|---|
|  | 101 |  | 
|---|
|  | 102 | <td>Accessibility support.</td> | 
|---|
|  | 103 |  | 
|---|
|  | 104 | <td>o.s.swt.accessibility<br /><b>o.s.swt.accessibility</b></td> | 
|---|
|  | 105 |  | 
|---|
|  | 106 | <td>Is it supported natively by OS/2 or should be emulated?</td> | 
|---|
|  | 107 | </tr> | 
|---|
|  | 108 |  | 
|---|
|  | 109 | <tr> | 
|---|
|  | 110 | <td>SWT Custom Widgets</td> | 
|---|
|  | 111 |  | 
|---|
|  | 112 | <td>Standard custom widgets library</td> | 
|---|
|  | 113 |  | 
|---|
|  | 114 | <td>o.e.swt.custom</td> | 
|---|
|  | 115 |  | 
|---|
|  | 116 | <td>Does not contain any platform dependent code?</td> | 
|---|
|  | 117 | </tr> | 
|---|
|  | 118 |  | 
|---|
|  | 119 | <tr> | 
|---|
|  | 120 | <td>SWT Drag and Drop</td> | 
|---|
|  | 121 |  | 
|---|
|  | 122 | <td>Public interface for D'n'D support</td> | 
|---|
|  | 123 |  | 
|---|
|  | 124 | <td>o.e.swt.dnd<br /><b>o.e.swt.dnd</b></td> | 
|---|
|  | 125 |  | 
|---|
|  | 126 | <td>Platform dependent implementations need to be rewritten (partially | 
|---|
|  | 127 | ported from Win32?) for OS/2</td> | 
|---|
|  | 128 | </tr> | 
|---|
|  | 129 |  | 
|---|
|  | 130 | <tr> | 
|---|
|  | 131 | <td>SWT Printing</td> | 
|---|
|  | 132 |  | 
|---|
|  | 133 | <td>SWT printing capabilities</td> | 
|---|
|  | 134 |  | 
|---|
|  | 135 | <td><b>o.e.swt.printing</b><br />o.e.swt.printing</td> | 
|---|
|  | 136 |  | 
|---|
|  | 137 | <td>Needs to be almost fully rewritten for OS/2 (not a lot of work to | 
|---|
|  | 138 | do)</td> | 
|---|
|  | 139 | </tr> | 
|---|
|  | 140 |  | 
|---|
|  | 141 | <tr> | 
|---|
|  | 142 | <td>SWT Program</td> | 
|---|
|  | 143 |  | 
|---|
|  | 144 | <td>OS specific program launching aspects</td> | 
|---|
|  | 145 |  | 
|---|
|  | 146 | <td><b>o.e.swt.program</b></td> | 
|---|
|  | 147 |  | 
|---|
|  | 148 | <td>Just one single class <)</td> | 
|---|
|  | 149 | </tr> | 
|---|
|  | 150 |  | 
|---|
|  | 151 | <tr> | 
|---|
|  | 152 | <td>SWT OLE</td> | 
|---|
|  | 153 |  | 
|---|
|  | 154 | <td>OLE support</td> | 
|---|
|  | 155 |  | 
|---|
|  | 156 | <td><b>o.e.swt.ole.win32</b><br /><b>o.e.swt.internal.ole.win32</b></td> | 
|---|
|  | 157 |  | 
|---|
|  | 158 | <td>Can the similar one be implemented for OS/2 in the future?</td> | 
|---|
|  | 159 | </tr> | 
|---|
|  | 160 | </table> | 
|---|
|  | 161 |  | 
|---|
|  | 162 | <h3><a name="native.methods">Native methods [uncomplete]</a></h3> | 
|---|
|  | 163 |  | 
|---|
|  | 164 | <p>C sources of native methods are organized in the following way:</p> | 
|---|
|  | 165 |  | 
|---|
|  | 166 | <ul> | 
|---|
|  | 167 | <li><kbd>swt.h</kbd> -- contains some definitions common for all C | 
|---|
|  | 168 | code.</li> | 
|---|
|  | 169 |  | 
|---|
|  | 170 | <li><kbd>callback.h</kbd>, <kbd>callback.c</kbd> -- contain native | 
|---|
|  | 171 | methods and helpers for <code>org.eclipse.swt.internal.Callback</code> | 
|---|
|  | 172 | class, that allows using regular Java methods as callback functions by | 
|---|
|  | 173 | the platform native API.</li> | 
|---|
|  | 174 |  | 
|---|
|  | 175 | <li><kbd>structs.h</kbd>, <kbd>structs.c</kbd> -- contain getter/setter | 
|---|
|  | 176 | functions to convert data from platform native API structures to their | 
|---|
|  | 177 | Java wrappers and back. These functions are used by native methods.</li> | 
|---|
|  | 178 |  | 
|---|
|  | 179 | <li><kbd>swt.c</kbd> -- contains definitions of native methods.</li> | 
|---|
|  | 180 | </ul> | 
|---|
|  | 181 |  | 
|---|
|  | 182 | <p>Native methods serve as a bridge between SWT and underlying platform | 
|---|
|  | 183 | API. One of Eclipse principles is that such mapping should be transparent | 
|---|
|  | 184 | as much as it possible. It means that Java methods have exactly the same | 
|---|
|  | 185 | name and behavior as their native counterparts, including the type and the | 
|---|
|  | 186 | list of arguments and the return value. For that purposes there are Java | 
|---|
|  | 187 | wrappers exist for native structures used by platform API functions to | 
|---|
|  | 188 | exchange information with the application. These wrapper classes are | 
|---|
|  | 189 | defined in the SWT PI part as well as the <code>o.e.swt.internal.OS</code> | 
|---|
|  | 190 | class containing (almost?) all of native API-to-Java mappers. But due to | 
|---|
|  | 191 | the fact that Java semantics differ from C there cannot be the full | 
|---|
|  | 192 | equivalence between C and Java types, so some considerations about mapping | 
|---|
|  | 193 | should be taken into account.</p> | 
|---|
|  | 194 |  | 
|---|
|  | 195 | <h4>Primitive types</h4> | 
|---|
|  | 196 |  | 
|---|
|  | 197 | <ul> | 
|---|
|  | 198 | <li>C 32-bit integer types (<code>[unsigned] int</code>, | 
|---|
|  | 199 | <code>[unsigned] long</code> and derived) are mapped to Java | 
|---|
|  | 200 | <code>int</code> type.</li> | 
|---|
|  | 201 |  | 
|---|
|  | 202 | <li>In some cases 32-bit types that logically are boolean, can be mapped | 
|---|
|  | 203 | to Java <code>boolean</code> type.</li> | 
|---|
|  | 204 |  | 
|---|
|  | 205 | <li>C 16-bit integer type <code>[unsigned] short</code> (and derived) is | 
|---|
|  | 206 | mapped to Java <code>short</code> type.</li> | 
|---|
|  | 207 |  | 
|---|
|  | 208 | <li>C 8-bit integer type <code>[unsigned] char</code> (and derived) is | 
|---|
|  | 209 | mapped to Java <code>byte</code> type.</li> | 
|---|
|  | 210 | </ul> | 
|---|
|  | 211 |  | 
|---|
|  | 212 | <h4>Arrays</h4> | 
|---|
|  | 213 |  | 
|---|
|  | 214 | <p>...</p> | 
|---|
|  | 215 |  | 
|---|
|  | 216 | <h4>Pointers</h4> | 
|---|
|  | 217 |  | 
|---|
|  | 218 | <ul> | 
|---|
|  | 219 | <li>Pointer to an array of primitive type is mapped to a Java reference | 
|---|
|  | 220 | to an array of the corresponding primitive type (i.e., <code>int*</code> | 
|---|
|  | 221 | is mapped to <code>int[]</code>). There's one exception with ASCIIZ | 
|---|
|  | 222 | strings (see below).</li> | 
|---|
|  | 223 |  | 
|---|
|  | 224 | <li>Pointer to a C structure that have the corresponding Java wrapper is | 
|---|
|  | 225 | mapped to a Java reference to that wrapper class (see below about | 
|---|
|  | 226 | structures).</li> | 
|---|
|  | 227 |  | 
|---|
|  | 228 | <li>Pointer to a function and pointers to other types that are not | 
|---|
|  | 229 | directly used by the Java code (and therefore do not have wrappers) are | 
|---|
|  | 230 | mapped to Java <code>int</code> type.</li> | 
|---|
|  | 231 |  | 
|---|
|  | 232 | <li>Pointer to an array of C structures is mapped to Java | 
|---|
|  | 233 | <code>int</code> array (see below).</li> | 
|---|
|  | 234 | </ul> | 
|---|
|  | 235 |  | 
|---|
|  | 236 | <p>There's a special case with pointers to arrays and ASCIIZ strings, | 
|---|
|  | 237 | which are <i>returned</i> by some platform API calls to represent some | 
|---|
|  | 238 | data of variable length. There are few situations when such data is not | 
|---|
|  | 239 | copied to the storage area provided by the caller, but the pointer to the | 
|---|
|  | 240 | internal storage area is returned. In these situations we cannot allocate | 
|---|
|  | 241 | the storage for that data in Java before a call to a native method, | 
|---|
|  | 242 | because we don't know its size. The solution can be to create the | 
|---|
|  | 243 | corresponding Java array object inside of the C implementation of the | 
|---|
|  | 244 | native method after an API call (when we already know the size of the data | 
|---|
|  | 245 | returned) fill it and return the reference to this object to the Java | 
|---|
|  | 246 | caller.</p> | 
|---|
|  | 247 |  | 
|---|
|  | 248 | <p>Also there are sutiations when an API call returns a pointer to a | 
|---|
|  | 249 | structure from its internal storage and the user should be able to access | 
|---|
|  | 250 | this data directly to change some value (the good example is | 
|---|
|  | 251 | <code>DosGetInfoBlocks()</code>). Since a Java structure wrapper class | 
|---|
|  | 252 | contains a copy of the original data it doesn't make sence to use it as a | 
|---|
|  | 253 | parameter to call such API -- it's better to return a pointer to the | 
|---|
|  | 254 | caller "as is" using a reference to one-element array of <code>int</code> | 
|---|
|  | 255 | type to use it for the direct access. But Java cannot read/write directly | 
|---|
|  | 256 | to the specified memory address, so we need some helper functions to copy | 
|---|
|  | 257 | data from a wrapper class directly to a given memory location and back. | 
|---|
|  | 258 | These functions are overloaded versions of | 
|---|
|  | 259 | <code>o.e.swt.internal.pm.OS.objcpy()</code>. They take two arguments: the | 
|---|
|  | 260 | destination (the first one) and the source (the second one) of data to be | 
|---|
|  | 261 | copied. One of them is a reference to a wrapper class and another is an | 
|---|
|  | 262 | <code>int</code> value containing the address of (the pointer to) the | 
|---|
|  | 263 | corresponding C structure. So, to the sequence of operations to get the | 
|---|
|  | 264 | required result can be:</p> | 
|---|
|  | 265 |  | 
|---|
|  | 266 | <ol> | 
|---|
|  | 267 | <li>Call API function to get the "real" pointer through an one-element | 
|---|
|  | 268 | <code>int</code> array</li> | 
|---|
|  | 269 |  | 
|---|
|  | 270 | <li>Use it in <code>OS.objcpy()</code> to copy data to the object of the | 
|---|
|  | 271 | wrapper class</li> | 
|---|
|  | 272 |  | 
|---|
|  | 273 | <li>Change object's nesessary fields</li> | 
|---|
|  | 274 |  | 
|---|
|  | 275 | <li>Use <code>OS.objcpy()</code> to copy data back from the object to | 
|---|
|  | 276 | the memory</li> | 
|---|
|  | 277 | </ol> | 
|---|
|  | 278 |  | 
|---|
|  | 279 | <p><b>Note.</b> These helper functions are potentionally dangerous and | 
|---|
|  | 280 | should be used very carefully since there's no way to check whether a | 
|---|
|  | 281 | given pointer really points to the structure of the appropriate type or | 
|---|
|  | 282 | not. However, if zero or <code>null</code> is passed as one of arguments, | 
|---|
|  | 283 | an <code>SWTError</code> exception will be thrown (this behavior depends | 
|---|
|  | 284 | on the <code>DEBUG_CHECK_NULL_EXCEPTIONS</code> macro definition during | 
|---|
|  | 285 | compilation of the SWT DLL).</p> | 
|---|
|  | 286 |  | 
|---|
|  | 287 | <h4>ASCIIZ strings</h4> | 
|---|
|  | 288 |  | 
|---|
|  | 289 | <p>ASCIIZ strings are mapped using references to the special Java wrapper | 
|---|
|  | 290 | class: <code>o.e.swt.internal.pm.PSZ</code>. String data is actually | 
|---|
|  | 291 | stored in its <code>bytes</code> field which is of <code>byte[]</code> | 
|---|
|  | 292 | type. This class provides automatic appending of zero byte to the array | 
|---|
|  | 293 | when constructed from Java <code>String</code> type and removing that byte | 
|---|
|  | 294 | when converted back to <code>String</code>. Convertion between Unicode and | 
|---|
|  | 295 | 8-byte ASCII characters is done using the default system codepage. There | 
|---|
|  | 296 | are helper functions to handle this wrapper in C: | 
|---|
|  | 297 | <code>getPSZArray()</code>, <code>getPSZBytes()</code> and | 
|---|
|  | 298 | <code>releasePSZBytes()</code>, see their description at the top of | 
|---|
|  | 299 | <kbd>structs.h</kbd>.</p> | 
|---|
|  | 300 |  | 
|---|
|  | 301 | <h4>Structures</h4> | 
|---|
|  | 302 |  | 
|---|
|  | 303 | <p>C structures are mapped to Java classes (wrappers) with the same name | 
|---|
|  | 304 | and fields (their order and names). Primitive fields' types are mapped | 
|---|
|  | 305 | according to the rules above. For every structure the following C helper | 
|---|
|  | 306 | functions are defined: <code>cacheXXXFids()</code> (and the correspondig | 
|---|
|  | 307 | <code>XXX_FID_CACHE</code> structure) to cache Java field IDs, | 
|---|
|  | 308 | <code>getXXXFields()</code> to fill the native C structure with values | 
|---|
|  | 309 | from the Java wrapper structure before a call to platform API routine and | 
|---|
|  | 310 | <code>setXXXFields()</code> for backward operation after a call.</p> | 
|---|
|  | 311 |  | 
|---|
|  | 312 | <p>If some field of the structure is itself a structure or a pointer to a | 
|---|
|  | 313 | structure, there are two ways to handle this situation:</p> | 
|---|
|  | 314 |  | 
|---|
|  | 315 | <ul> | 
|---|
|  | 316 | <li>The first way is to "unfold" such nested structure into regular | 
|---|
|  | 317 | fields of the parent structure with names constructed according to the | 
|---|
|  | 318 | following scheme: <code>xxx_yyy</code>, where <code>xxx</code> is the | 
|---|
|  | 319 | name of the field representing the nested structure and <code>yyy</code> | 
|---|
|  | 320 | is substituted with field names of that nested structure. It's useful | 
|---|
|  | 321 | when the structure has few fields. As an example, see the | 
|---|
|  | 322 | <code>o.e.swt.internal.pm.QMSG</code> wrapper class.</li> | 
|---|
|  | 323 |  | 
|---|
|  | 324 | <li>The second way can be used when there's a need to operate the nested | 
|---|
|  | 325 | structure whth many fields as a whole (using a reference to it) rather | 
|---|
|  | 326 | than accessing its fields directly. Such nested structure must have its | 
|---|
|  | 327 | own Java wrapper (as descrbed above) and be mapped to a reference to | 
|---|
|  | 328 | that type, and <code>getXXXFields()</code> and | 
|---|
|  | 329 | <code>setXXXFields()</code> must correctly handle this case. For | 
|---|
|  | 330 | example, see <code>TIB</code> and <code>TIB2</code> wrappers and their | 
|---|
|  | 331 | getters/setters (though <code>TIB2</code> does not actually need to be | 
|---|
|  | 332 | used as a whole, it was done so for clarity). Note that such nested | 
|---|
|  | 333 | wrapper is newed (via the initializer expression) in the parent | 
|---|
|  | 334 | wrapper's implicit constructor.</li> | 
|---|
|  | 335 | </ul> | 
|---|
|  | 336 |  | 
|---|
|  | 337 | <p>Some structures have the special field (<code>cb</code> or | 
|---|
|  | 338 | <code>cbFix</code>) that should be set to the length of the structure | 
|---|
|  | 339 | before passing it to a function. In Win32 version this is achieved by | 
|---|
|  | 340 | adding an extra field (<code>sizeof</code>) to Java wrapper of every | 
|---|
|  | 341 | structure and then assigning its value to the length field when using the | 
|---|
|  | 342 | structure from Java code. In OS/2, this is done not at the Java level, but | 
|---|
|  | 343 | in the code of the structure's getter function. Therefore, the need in the | 
|---|
|  | 344 | <code>sizeof</code> field is eliminated (tough,some strucrures will have | 
|---|
|  | 345 | this field because there are some cases when arrays of that structures are | 
|---|
|  | 346 | given us as a pointer from the C code and we need to know the address of | 
|---|
|  | 347 | the particular structure in the array). Also, Java wrappers in OS/2 do not | 
|---|
|  | 348 | contain the <code>cb</code> or <code>cbFix</code> field since it's useless | 
|---|
|  | 349 | from the point of view of data the structure represents.</p> | 
|---|
|  | 350 |  | 
|---|
|  | 351 | <h4>Pointers to structures</h4> | 
|---|
|  | 352 |  | 
|---|
|  | 353 | <p>Since it's too complicated (in particular, requires two transformations | 
|---|
|  | 354 | and two times more memory) to convert arrays of C structures to arrays of | 
|---|
|  | 355 | their Java wrappers and back, such arrays are mapped to arrays of Java | 
|---|
|  | 356 | <code>int</code> type, where every one or more elements of that array | 
|---|
|  | 357 | correspond to a field from the structure, consequtively. Of course, it's | 
|---|
|  | 358 | suitable only for structure types where all fields have the size which is | 
|---|
|  | 359 | multiple of 32-bit <code>int</code> type, such as <code>POINTL</code> and | 
|---|
|  | 360 | <code>RECTL</code>. This is primarily used in <code>Gpi*</code> API calls. | 
|---|
|  | 361 | Hopefully, at the present time there is no need to work with other types | 
|---|
|  | 362 | of structures.</p> | 
|---|
|  | 363 |  | 
|---|
|  | 364 | <p>For convenience, parameter names in the declaration (in Java) and in | 
|---|
|  | 365 | the definition (in C) of native methods should be the same as in the | 
|---|
|  | 366 | toolkit documentation.</p> | 
|---|
|  | 367 |  | 
|---|
|  | 368 | <h2>SWT compilation notes</h2> | 
|---|
|  | 369 |  | 
|---|
|  | 370 | <p>SWT compilation is driven by the <kbd>build.xml</kbd> located in the | 
|---|
|  | 371 | <kbd>src\plugins\org.eclipse.swt.pm</kbd> directory of the repository. It | 
|---|
|  | 372 | should not be used directly since there are some prerequisites that are | 
|---|
|  | 373 | set up from the main build file.</p> | 
|---|
|  | 374 |  | 
|---|
|  | 375 | <p>Ant includes in compilation every <kbd>.java</kbd> file it finds in the | 
|---|
|  | 376 | specified source directory. Since we go class by class, but use complete | 
|---|
|  | 377 | common source directories from the original distribution, we need a way to | 
|---|
|  | 378 | narrow a list of files to compile. Otherwise we will get many errors | 
|---|
|  | 379 | because of missing platform dependent classes (which are not yet ready) | 
|---|
|  | 380 | referenced from common sources during compilation. To exclude temporarily | 
|---|
|  | 381 | the whole common directory is not a good idea because we might need some | 
|---|
|  | 382 | classes from there. So, there is a special file called | 
|---|
|  | 383 | <kbd>classes.inc</kbd> in the same directory as the SWT build file that | 
|---|
|  | 384 | contains a list of all files to be compiled. Paths there are relative to | 
|---|
|  | 385 | the source directories, so every entry there is just a full name of a | 
|---|
|  | 386 | class but with dots replaced by slashes in the package name. Although file | 
|---|
|  | 387 | masks can be used there it should be done carefully because file mask will | 
|---|
|  | 388 | apply to every source directory (we cannot change this behavior in Ant) | 
|---|
|  | 389 | and unnecessary files can be included.</p> | 
|---|
|  | 390 |  | 
|---|
|  | 391 | <h2>SWT porting roadmap</h2> | 
|---|
|  | 392 |  | 
|---|
|  | 393 | <p>Below is the plan and the progress of the SWT porting process. Each | 
|---|
|  | 394 | step number and objective is a link to the corresponding step description. | 
|---|
|  | 395 | The names of classes here, in the step descriptions and in some other | 
|---|
|  | 396 | places follow the rule: the text in [square brackets] after the class name | 
|---|
|  | 397 | shows the name of the SWT part the class belongs to (according to the | 
|---|
|  | 398 | table above) and the sharp (#) sign before it means that the class is | 
|---|
|  | 399 | platform specific, otherwise it is common.</p> | 
|---|
|  | 400 |  | 
|---|
|  | 401 | <table> | 
|---|
|  | 402 | <thead> | 
|---|
|  | 403 | <tr> | 
|---|
|  | 404 | <th>#</th> | 
|---|
|  | 405 |  | 
|---|
|  | 406 | <th>Objective</th> | 
|---|
|  | 407 |  | 
|---|
|  | 408 | <th>Started</th> | 
|---|
|  | 409 |  | 
|---|
|  | 410 | <th>To be done</th> | 
|---|
|  | 411 |  | 
|---|
|  | 412 | <th>Actually done</th> | 
|---|
|  | 413 | </tr> | 
|---|
|  | 414 | </thead> | 
|---|
|  | 415 |  | 
|---|
|  | 416 | <tr> | 
|---|
|  | 417 | <td><a href="swt001.html">1</a></td> | 
|---|
|  | 418 |  | 
|---|
|  | 419 | <td><a href="swt001.html">Initial moves</a>. CVS setup, dummy | 
|---|
|  | 420 | <code>Device</code> [#Base] implementation.</td> | 
|---|
|  | 421 |  | 
|---|
|  | 422 | <td>2002-10-21</td> | 
|---|
|  | 423 |  | 
|---|
|  | 424 | <td>2003-01-15</td> | 
|---|
|  | 425 |  | 
|---|
|  | 426 | <td>2003-01-21</td> | 
|---|
|  | 427 | </tr> | 
|---|
|  | 428 |  | 
|---|
|  | 429 | <tr> | 
|---|
|  | 430 | <td><a href="swt002.html">2</a></td> | 
|---|
|  | 431 |  | 
|---|
|  | 432 | <td><a href="swt002.html">Basics of GUI, part 1</a>. Partially | 
|---|
|  | 433 | implement the basic hierarchy from the <code>Widget</code> to | 
|---|
|  | 434 | <code>Shell</code>.</td> | 
|---|
|  | 435 |  | 
|---|
|  | 436 | <td>2003-01-24</td> | 
|---|
|  | 437 |  | 
|---|
|  | 438 | <td>2003-02-24</td> | 
|---|
|  | 439 |  | 
|---|
|  | 440 | <td>2003-03-11</td> | 
|---|
|  | 441 | </tr> | 
|---|
|  | 442 |  | 
|---|
|  | 443 | <tr> | 
|---|
|  | 444 | <td><a href="swt003.html">3</a></td> | 
|---|
|  | 445 |  | 
|---|
|  | 446 | <td><a href="swt003.html">Basics of GUI, part 2</a>. Implement drawing | 
|---|
|  | 447 | facilities</td> | 
|---|
|  | 448 |  | 
|---|
|  | 449 | <td>2003-03-12</td> | 
|---|
|  | 450 |  | 
|---|
|  | 451 | <td>2003-04-15</td> | 
|---|
|  | 452 |  | 
|---|
|  | 453 | <td>2003-07-11</td> | 
|---|
|  | 454 | </tr> | 
|---|
|  | 455 |  | 
|---|
|  | 456 | <tr> | 
|---|
|  | 457 | <td><a href="swt004.html">4</a></td> | 
|---|
|  | 458 |  | 
|---|
|  | 459 | <td><a href="swt004.html">Layout basics</a>. Implement the basics of | 
|---|
|  | 460 | the layout management.</td> | 
|---|
|  | 461 |  | 
|---|
|  | 462 | <td>2003-03-12</td> | 
|---|
|  | 463 |  | 
|---|
|  | 464 | <td>2003-04-15</td> | 
|---|
|  | 465 |  | 
|---|
|  | 466 | <td>2003-07-11</td> | 
|---|
|  | 467 | </tr> | 
|---|
|  | 468 |  | 
|---|
|  | 469 | <tr> | 
|---|
|  | 470 | <td><a href="swt005.html">5</a></td> | 
|---|
|  | 471 |  | 
|---|
|  | 472 | <td><a href="swt005.html">Font handling</a>. Implement font | 
|---|
|  | 473 | handling.</td> | 
|---|
|  | 474 |  | 
|---|
|  | 475 | <td>2003-07-12</td> | 
|---|
|  | 476 |  | 
|---|
|  | 477 | <td>2003-08-01</td> | 
|---|
|  | 478 |  | 
|---|
|  | 479 | <td>2004-02-29</td> | 
|---|
|  | 480 | </tr> | 
|---|
|  | 481 |  | 
|---|
|  | 482 | <tr> | 
|---|
|  | 483 | <td><a href="swt006.html">6</a></td> | 
|---|
|  | 484 |  | 
|---|
|  | 485 | <td><a href="swt006.html">Image handling</a>. Implement Image | 
|---|
|  | 486 | handling</td> | 
|---|
|  | 487 |  | 
|---|
|  | 488 | <td>2003-07-22</td> | 
|---|
|  | 489 |  | 
|---|
|  | 490 | <td>2003-08-15</td> | 
|---|
|  | 491 |  | 
|---|
|  | 492 | <td>2003-11-24</td> | 
|---|
|  | 493 | </tr> | 
|---|
|  | 494 |  | 
|---|
|  | 495 | <tr> | 
|---|
|  | 496 | <td><a href="swt007.html">7</a></td> | 
|---|
|  | 497 |  | 
|---|
|  | 498 | <td><a href="swt007.html">Buttons</a>. Finish the implementation of | 
|---|
|  | 499 | the <code>Button</code> widget</td> | 
|---|
|  | 500 |  | 
|---|
|  | 501 | <td>2004-03-01</td> | 
|---|
|  | 502 |  | 
|---|
|  | 503 | <td>2004-03-10</td> | 
|---|
|  | 504 |  | 
|---|
|  | 505 | <td>2004-10-31</td> | 
|---|
|  | 506 | </tr> | 
|---|
|  | 507 |  | 
|---|
|  | 508 | <tr> | 
|---|
|  | 509 | <td><a href="swt008.html">8</a></td> | 
|---|
|  | 510 |  | 
|---|
|  | 511 | <td><a href="swt008.html">Standard dialogs</a>. Implement standard | 
|---|
|  | 512 | dialogs (<code>Dialog</code> derivants).</td> | 
|---|
|  | 513 |  | 
|---|
|  | 514 | <td>2004-12-09</td> | 
|---|
|  | 515 |  | 
|---|
|  | 516 | <td>??</td> | 
|---|
|  | 517 |  | 
|---|
|  | 518 | <td></td> | 
|---|
|  | 519 | </tr> | 
|---|
|  | 520 |  | 
|---|
|  | 521 | <tr> | 
|---|
|  | 522 | <td><a href="swt009.html">9</a></td> | 
|---|
|  | 523 |  | 
|---|
|  | 524 | <td><a href="swt009.html">Labels</a>. Implement the <code>Label</code> | 
|---|
|  | 525 | class.</td> | 
|---|
|  | 526 |  | 
|---|
|  | 527 | <td>2004-12-09</td> | 
|---|
|  | 528 |  | 
|---|
|  | 529 | <td>??</td> | 
|---|
|  | 530 |  | 
|---|
|  | 531 | <td></td> | 
|---|
|  | 532 | </tr> | 
|---|
|  | 533 | </table> | 
|---|
|  | 534 | </body> | 
|---|
|  | 535 | </html> | 
|---|