| 1 | |
| 2 | <html> |
| 3 | <head> |
| 4 | <meta name="description" content="Pmw - a toolkit for building high-level compound widgets in Python"> |
| 5 | <meta name="content" content="python, megawidget, mega widget, compound widget, gui, tkinter"> |
| 6 | <title>Changes to Pmw</title> |
| 7 | </head> |
| 8 | |
| 9 | <body bgcolor="#ffffff" text="#000000" link="#0000ee" |
| 10 | vlink="551a8b" alink="ff0000"> |
| 11 | |
| 12 | <h1 ALIGN="CENTER">Changes to Pmw</h1> |
| 13 | |
| 14 | <p> |
| 15 | 6 January 1997</p> |
| 16 | |
| 17 | <ul><li><p>Release of version 0.1</p> |
| 18 | |
| 19 | </li></ul> |
| 20 | <p> 14 February 1997</p> |
| 21 | |
| 22 | <ul><li><p>Fixed bug in Counter demo for the Macintosh - the maximum size of an |
| 23 | integer is smaller than the value returned by time.time().</p> |
| 24 | |
| 25 | </li> |
| 26 | <li><p>Fixed bug in Grid demo for Tk 4.2 - grid_bbox returns garbage if it is |
| 27 | called without update_idletasks. Also, grid_bbox can only have two |
| 28 | arguments in Tk 4.1.</p> |
| 29 | |
| 30 | </li> |
| 31 | <li><p>Modified ScrolledText demo so that the text widget contains enough text |
| 32 | to require a vertical scrollbar.</p> |
| 33 | |
| 34 | </li> |
| 35 | <li><p>Changes to PmwBase:</p> |
| 36 | <ul><li><p>Prefixed the name of several private variables with a double underscore.</p> |
| 37 | |
| 38 | </li> |
| 39 | <li><p>Added symbolic constants for the indexes into an optionInfo list.</p> |
| 40 | |
| 41 | </li> |
| 42 | <li><p>Changed names of several methods and variables to be more descriptive.</p> |
| 43 | |
| 44 | </li> |
| 45 | <li><p>Removed options() method.</p> |
| 46 | |
| 47 | </li> |
| 48 | <li><p>Simplified configuration option data structures. Modified option |
| 49 | handling code so that default options are set correctly. If an |
| 50 | option is created before initialise() is called then initialise() |
| 51 | checks if the option is set by the keyword arguments to |
| 52 | initialise(). If not, then it is given the value found in the |
| 53 | Tk option database, if a value exists, or the default value. If an |
| 54 | option is created after initialise() is called, then it is given the |
| 55 | value found in the Tk option database, if a value exists, or the |
| 56 | default value.</p> |
| 57 | |
| 58 | </li></ul> |
| 59 | |
| 60 | </li> |
| 61 | <li><p>Replaced usage of self._hull in megawidgets by interior() method.</p> |
| 62 | |
| 63 | </li> |
| 64 | <li><p>Added autoclear option to ComboBox.</p> |
| 65 | |
| 66 | </li> |
| 67 | <li><p>Fixed bug in ComboBox - fast clicking on the arrow button could result |
| 68 | in an attempt to grab a window that was not yet visible.</p> |
| 69 | |
| 70 | </li> |
| 71 | <li><p>Added "sys.exc_traceback = None" to the except clauses of all try |
| 72 | statements so that references to objects in the stack trace would not |
| 73 | be left.</p> |
| 74 | |
| 75 | </li> |
| 76 | <li><p>Added takefocus option to PushButton.</p> |
| 77 | |
| 78 | </li> |
| 79 | <li><p>Modified the getcurselection() method of ScrolledListBox so that it |
| 80 | returns a string if the selection mode is <strong>'single'</strong> or <strong>'browse'</strong>, rather |
| 81 | than a tuple with one element. This also affects methods forwarded and |
| 82 | derived from ScrolledListBox.</p> |
| 83 | |
| 84 | </li> |
| 85 | <li><p>Modified ScrolledListBox so that it avoids unnecessary updates by |
| 86 | using idle timer.</p> |
| 87 | |
| 88 | </li> |
| 89 | <li><p>Modified ScrolledText to use grid instead of pack.</p> |
| 90 | |
| 91 | </li> |
| 92 | <li><p>Added shutdown() function to Tk module to clean up all references to |
| 93 | the Tcl interpreter and then delete it.</p> |
| 94 | |
| 95 | </li> |
| 96 | <li><p>Fixed bug in Tk module for the Macintosh - update() was being called in |
| 97 | initialise() before the Tcl interpreter was created.</p> |
| 98 | |
| 99 | </li></ul> |
| 100 | <p> 14 February 1997</p> |
| 101 | |
| 102 | <ul><li><p>Version 0.1.1 completed and released internally.</p> |
| 103 | |
| 104 | </li></ul> |
| 105 | <p> 6 March 1997</p> |
| 106 | |
| 107 | <ul><li><p>Pmw now uses the standard Tkinter module. The Tk module has been |
| 108 | dropped. This means that the Tk module functions such as after, |
| 109 | bell, bind, update, etc, are no longer available and the equivalent |
| 110 | Tkinter methods should be used.</p> |
| 111 | |
| 112 | </li> |
| 113 | <li><p>To restore some of the features of the Tk module, Pmw.initialise() |
| 114 | now adds run-time hooks into Tkinter to get notification of when Tk |
| 115 | widgets are created and destroyed. It also modifies the CallWrapper |
| 116 | class so that errors during callbacks and bindings can be displayed |
| 117 | in a window. If Pmw.initialise() is not called, Tkinter is not |
| 118 | modified and these features are not available.</p> |
| 119 | |
| 120 | </li> |
| 121 | <li><p>If a Tk widget which is acting as the hull of a megawidget is |
| 122 | destroyed, then the megawidget is destroyed as well. This can |
| 123 | only happen if Pmw.initialise() is called.</p> |
| 124 | |
| 125 | </li> |
| 126 | <li><p>Pmw.initialise() now takes the Tkinter root as its argument.</p> |
| 127 | |
| 128 | </li> |
| 129 | <li><p>The parent of megawidgets now defaults to the Tk root. Previously, |
| 130 | the parent of non-toplevel megawidgets had to be given.</p> |
| 131 | |
| 132 | </li> |
| 133 | <li><p>Added PmwBase.tracetk() function to get trace of calls to the Tcl |
| 134 | interpreter for debugging.</p> |
| 135 | |
| 136 | </li> |
| 137 | <li><p>Added functions to PmwBase to display a busy cursor over the |
| 138 | application such as when a modal dialog is displayed or it is |
| 139 | blocked doing a long calculation. Uses busy command of the blt |
| 140 | extension, if present.</p> |
| 141 | |
| 142 | </li> |
| 143 | <li><p>Created a nifty new demo which demonstrates most of the megawidgets |
| 144 | in a convenient way.</p> |
| 145 | |
| 146 | </li> |
| 147 | <li><p>Added a TextDialog.</p> |
| 148 | |
| 149 | </li> |
| 150 | <li><p>Added functionality to handle the grabbing of nested modal dialogs |
| 151 | correctly.</p> |
| 152 | |
| 153 | </li> |
| 154 | <li><p>Added an activatecommand option to Dialog which allows, for example, |
| 155 | the PromptDialog widget to set the keyboard focus when it is |
| 156 | activated.</p> |
| 157 | |
| 158 | </li> |
| 159 | <li><p>Added tests for Counter and logicalfont.</p> |
| 160 | |
| 161 | </li> |
| 162 | <li><p>The ScrolledListBox selectioncommand is no longer given the widget |
| 163 | as its first argument.</p> |
| 164 | |
| 165 | </li> |
| 166 | <li><p>Several method, function and component names were changed, to be |
| 167 | consistent with the coding conventions.</p> |
| 168 | |
| 169 | </li> |
| 170 | <li><p>Some of the effects of moving from the Tk module to Tkinter are:</p> |
| 171 | <ul><li><p>The Tk module used to exit if there were no non-root toplevel |
| 172 | windows shown. This is no longer the case and so the application |
| 173 | must handle this explicitly, particularly if the root window is |
| 174 | withdrawn and the last non-root toplevel is deleted by the window |
| 175 | manager.</p> |
| 176 | |
| 177 | </li> |
| 178 | <li><p>The Tk module bind functions and methods used to take a noEvent |
| 179 | argument to indicate that the Tk event should not be passed to the |
| 180 | callback. Tkinter does not support this.</p> |
| 181 | |
| 182 | </li> |
| 183 | <li><p>The Tk module initialise() function should be replaced by |
| 184 | "root = Tkinter.Tk()" and root should be used instead of "Tk.Root()"</p> |
| 185 | |
| 186 | </li> |
| 187 | <li><p>The Tk module quit() function should be replace by "root.destroy()".</p> |
| 188 | |
| 189 | </li> |
| 190 | <li><p>Toplevels are not hidden when created. To be consistent, |
| 191 | MegaToplevels are not hidden either.</p> |
| 192 | |
| 193 | </li> |
| 194 | <li><p>The hide and show methods are not available for Tkinter Toplevels, |
| 195 | only MegaToplevels</p> |
| 196 | |
| 197 | </li> |
| 198 | <li><p>There is no grid_configure method.</p> |
| 199 | |
| 200 | </li> |
| 201 | <li><p>Tkinter.Canvas.coords() returns a python list, not a tuple.</p> |
| 202 | |
| 203 | </li> |
| 204 | <li><p>The Tkinter cget and configure widget methods always return |
| 205 | strings for the option values. The Tk module used to convert the |
| 206 | string to the appropriate python type (such as string, integer, |
| 207 | float, Variable, Image, callback function).</p> |
| 208 | |
| 209 | </li> |
| 210 | <li><p>Tkinter Menu and Toplevel classes incorrectly have a pack method.</p> |
| 211 | |
| 212 | </li> |
| 213 | <li><p>Menu class has no geometry method.</p> |
| 214 | |
| 215 | </li> |
| 216 | <li><p>Canvas focus returns <strong>''</strong> rather than None.</p> |
| 217 | |
| 218 | </li> |
| 219 | <li><p>Text mark_gravity returns <strong>''</strong> rather than None.</p> |
| 220 | |
| 221 | </li></ul> |
| 222 | |
| 223 | </li></ul> |
| 224 | <p> 13 March 1997</p> |
| 225 | |
| 226 | <ul><li><p>Release of version 0.2</p> |
| 227 | |
| 228 | </li></ul> |
| 229 | <p> 17 March 1997</p> |
| 230 | |
| 231 | <ul><li><p>Set default WM_DELETE_WINDOW protocol of Tkinter.Toplevel to |
| 232 | destroy() and removed duplicated protocol request from all demos.</p> |
| 233 | |
| 234 | </li> |
| 235 | <li><p>Modified text of ShowBusy demo to indicate that busy cursor will |
| 236 | only be seen if the BLT extension is present.</p> |
| 237 | |
| 238 | </li> |
| 239 | <li><p>Replaced call to update() in PmwLabeledWidget.py with update_idletasks().</p> |
| 240 | |
| 241 | </li> |
| 242 | <li><p>Changed name of PromptDialog component from <strong>'entry'</strong> to <strong>'entryfield'</strong>.</p> |
| 243 | |
| 244 | </li></ul> |
| 245 | <p> 28 April 1997</p> |
| 246 | |
| 247 | <ul><li><p>Version 0.3 released internally</p> |
| 248 | |
| 249 | </li></ul> |
| 250 | <p> 19 August 1997</p> |
| 251 | |
| 252 | <ul><li><p>Many changes made (see the version 0.4 porting guide for |
| 253 | more details).</p> |
| 254 | |
| 255 | </li> |
| 256 | <li><p>The option propagation mechanism that iwidgets uses is too |
| 257 | cumbersome, too hard to understand and, in python, too slow. |
| 258 | Developed a new mechanism which is more explicit in naming |
| 259 | options. This resulted in most options which were simply |
| 260 | propagated to components being removed. Removed keep(), rename() |
| 261 | and ignore() methods and "usual" options.</p> |
| 262 | |
| 263 | </li> |
| 264 | <li><p>For speed, Pmw no longer queries the Tk option database for |
| 265 | default values for megawidget options. Hence, resource names and |
| 266 | classes do not need to be supplied when creating options and |
| 267 | <strong>None</strong> is returned for the resource name and class when using |
| 268 | <code>configure()</code> to query the options. Option "types" no longer |
| 269 | used.</p> |
| 270 | |
| 271 | </li> |
| 272 | <li><p>Changed method and component names to be more consistent.</p> |
| 273 | |
| 274 | </li> |
| 275 | <li><p>Replaced most uses of pack() with grid().</p> |
| 276 | |
| 277 | </li> |
| 278 | <li><p>Megawidgets no longer inherit from LabeledWidget. Instead they |
| 279 | call createlabel() to optionally create the label component.</p> |
| 280 | |
| 281 | </li> |
| 282 | <li><p>Removed child site from EntryField and rewrote ComboBox |
| 283 | accordingly.</p> |
| 284 | |
| 285 | </li> |
| 286 | <li><p>Wrote lots more documentation, including automatically generated |
| 287 | reference manuals.</p> |
| 288 | |
| 289 | </li> |
| 290 | <li><p>Removed PushButton and rewrote ButtonBox to directly create |
| 291 | Tkinter.Buttons rather than PushButtons.</p> |
| 292 | |
| 293 | </li> |
| 294 | <li><p>Added initialisation options - options which can be set at |
| 295 | creation time but not later using configure().</p> |
| 296 | |
| 297 | </li> |
| 298 | <li><p>Added aliases for components.</p> |
| 299 | |
| 300 | </li> |
| 301 | <li><p>Modified the base classes so that during option configuration, |
| 302 | components are configured <em>before</em> configuration called functions |
| 303 | are called.</p> |
| 304 | |
| 305 | </li> |
| 306 | <li><p>Added several more megawidgets.</p> |
| 307 | |
| 308 | </li> |
| 309 | <li><p>Added interface to BLT graph and vector commands.</p> |
| 310 | |
| 311 | </li> |
| 312 | <li><p>Created PmwLazy module for lazy importing of Pmw - avoids loading |
| 313 | megawidgets which are not used.</p> |
| 314 | |
| 315 | </li> |
| 316 | <li><p>Added several more functions for handling color and fonts.</p> |
| 317 | |
| 318 | </li> |
| 319 | <li><p>Replaced Counter and EntryField <em>time</em> with <em>timeN</em> and <em>time24</em></p> |
| 320 | |
| 321 | </li> |
| 322 | <li><p>Pmw.initialise() will now create Tkinter.Tk if not given root.</p> |
| 323 | |
| 324 | </li></ul> |
| 325 | <p> 1 September 1997</p> |
| 326 | |
| 327 | <ul><li><p>Release of version 0.4</p> |
| 328 | |
| 329 | </li></ul> |
| 330 | <p> 5 September 1997</p> |
| 331 | |
| 332 | <ul><li><p>Modified the base classes so that the Tk option database resource |
| 333 | class of megawidgets can be overridden in the call to the |
| 334 | constructor using the <strong>hull_class</strong> option.</p> |
| 335 | |
| 336 | </li> |
| 337 | <li><p>The separators in Pmw.PanedWidget are now active - they can be |
| 338 | grabbed, like the handles, and moved around. The cursor now |
| 339 | changes to the correct left/right or up/down cursor when over a |
| 340 | separator or handle. (Clemens Hintze)</p> |
| 341 | |
| 342 | </li> |
| 343 | <li><p>Fixed bug in MessageInfo demo Dismiss button. If it is invoked, |
| 344 | an error occurs saying "not enough arguments". (Mark Colclough)</p> |
| 345 | |
| 346 | </li></ul> |
| 347 | <p> 9 September 1997</p> |
| 348 | |
| 349 | <ul><li><p>Added the <strong>useTkOptionDb</strong> argument to Pmw.initialise which |
| 350 | specifies that the initial values of megawidget options are to be |
| 351 | set by querying the Tk option database.</p> |
| 352 | |
| 353 | </li> |
| 354 | <li><p>When used to query options, the configure() method now returns the |
| 355 | resource class and name of the options.</p> |
| 356 | |
| 357 | </li></ul> |
| 358 | <p> 19 September 1997</p> |
| 359 | |
| 360 | <ul><li><p>Changed functions datestringtoint() and timestringtoint() to |
| 361 | datestringtojdn() and timestringtoseconds(). Changed return value |
| 362 | of datestringtojdn() to be Julian Day Numbers rather than seconds |
| 363 | since the epoch.</p> |
| 364 | |
| 365 | </li> |
| 366 | <li><p>Fixed a bug in the date Counter due to use of time.timezone, by |
| 367 | replacing, when calculating date increments, calls to the time |
| 368 | module with calls to datestringtojdn().</p> |
| 369 | |
| 370 | </li> |
| 371 | <li><p>Added century pivot year (setyearpivot function) to Counter date |
| 372 | datatypes to handle two-digit years.</p> |
| 373 | |
| 374 | </li> |
| 375 | <li><p>Added date_dmy4, date_mdy4 and date_y4md datatypes to Counter.</p> |
| 376 | |
| 377 | </li> |
| 378 | <li><p>Modified demos All.py and ScrolledText.py so that demos can be called |
| 379 | from directories other than the demos directory. (Case Roole and |
| 380 | Guido van Rossum)</p> |
| 381 | |
| 382 | </li> |
| 383 | <li><p>Changed the default for the Pmw.Balloon <em>label_justify</em> option to |
| 384 | <em>left</em> to improve appearance of multi-line balloons. Pmw.Balloon |
| 385 | now replaces newlines with spaces in the statusHelp string so that |
| 386 | the strings look better when displayed in a Pmw.MessageBar. |
| 387 | (Andreas Kostyrka)</p> |
| 388 | |
| 389 | </li> |
| 390 | <li><p>Pmw.Blt now calls <em>package require BLT</em> when checking for the |
| 391 | existence of Blt, so that it can be loaded if it is not statically |
| 392 | linked. (Clemens Hintze, Matthias Klose)</p> |
| 393 | |
| 394 | </li> |
| 395 | <li><p>Copied earthris.gif and flagup.bmp files from Tcl distribution to |
| 396 | test directory, just in case they have not been installed. |
| 397 | (Jonathan Kelly)</p> |
| 398 | |
| 399 | </li> |
| 400 | <li><p>Lots of improvements to the documentation and documenting recent |
| 401 | changes.</p> |
| 402 | |
| 403 | </li></ul> |
| 404 | <p> 16 October 1997</p> |
| 405 | |
| 406 | <ul><li><p>Modified Pmw.Balloon and Pmw.ComboBox to work around a bug in the |
| 407 | Windows95 version of Tk which caused the popup windows to appear |
| 408 | in the wrong place. (Fredrik Lundh and Jerome Gay)</p> |
| 409 | |
| 410 | </li> |
| 411 | <li><p>Added Pmw.maxfontwidth() function. (Rob Pearson)</p> |
| 412 | |
| 413 | </li></ul> |
| 414 | <p> 24 October 1997</p> |
| 415 | |
| 416 | <ul><li><p>Changed PmwBase._reporterror to handle the class exceptions of |
| 417 | python 1.5. (Case Roole)</p> |
| 418 | |
| 419 | </li></ul> |
| 420 | <p> 29 October 1997</p> |
| 421 | |
| 422 | <ul><li><p>Fixed a bug in forwardmethods() function which occurred if the |
| 423 | <em>toClass</em> class had a method called <strong>type</strong>.</p> |
| 424 | |
| 425 | </li></ul> |
| 426 | <p> 7 November 1997</p> |
| 427 | |
| 428 | <ul><li><p>Changed tests/Test._getErrorValue to handle the class exceptions of |
| 429 | python 1.5. (Michael McLay)</p> |
| 430 | |
| 431 | </li> |
| 432 | <li><p>Changed bug fix in forwardmethods() function to use the |
| 433 | <code>exec execString in d</code> construct. (Guido van Rossum)</p> |
| 434 | |
| 435 | </li> |
| 436 | <li><p>Can now use Pmw.MegaArchetype as a base class just to get option |
| 437 | handling; it will not create the hull component unless requested. |
| 438 | Moved __str__() and interior() methods from Pmw.MegaToplevel and |
| 439 | Pmw.MegaWidget to Pmw.MegaArchetype class.</p> |
| 440 | |
| 441 | </li></ul> |
| 442 | <p> 10 November 1997</p> |
| 443 | |
| 444 | <ul><li><p>Added <em>textclass</em> option to Pmw.ScrolledText and <em>listboxclass</em> |
| 445 | option for Pmw.ScrolledListBox to allow embedding of custom |
| 446 | widgets.</p> |
| 447 | |
| 448 | </li> |
| 449 | <li><p>Added Mitch Chapman's <strong>FontText</strong> module to the <code>demos</code> directory |
| 450 | and used it to display the demo source code in color.</p> |
| 451 | |
| 452 | </li> |
| 453 | <li><p>Added two notebook megawwidgets, Pmw.NoteBookR and Pmw.NoteBookS. |
| 454 | (Case Roole and Joe Saltiel)</p> |
| 455 | |
| 456 | </li> |
| 457 | <li><p>Added Pmw.ScrolledCanvas megawidget. (Joe Saltiel)</p> |
| 458 | |
| 459 | </li> |
| 460 | <li><p>Added Pmw.TreeBrowse megawidget. (Michael McLay)</p> |
| 461 | |
| 462 | </li> |
| 463 | <li><p>Added Pmw.Group megawidget and modified to use <code>grid()</code> instead |
| 464 | of <code>pack()</code>. (Case Roole)</p> |
| 465 | |
| 466 | </li> |
| 467 | <li><p>Release of version 0.5</p> |
| 468 | |
| 469 | </li></ul> |
| 470 | <p> 12 November 1997</p> |
| 471 | |
| 472 | <ul><li><p>Added <em>pyclass</em> option to components and removed <em>textclass</em> |
| 473 | option from Pmw.ScrolledText and <em>listboxclass</em> option from |
| 474 | Pmw.ScrolledListBox. (Suggested by Shen Wang)</p> |
| 475 | |
| 476 | </li> |
| 477 | <li><p>Added label component to Pmw.ButtonBox megawidget.</p> |
| 478 | |
| 479 | </li> |
| 480 | <li><p>Fixed mis-spelling of PmwTreeBrowse in Pmw.py.</p> |
| 481 | |
| 482 | </li> |
| 483 | <li><p>Release of version 0.5.1</p> |
| 484 | |
| 485 | </li></ul> |
| 486 | <p> 5 December 1997</p> |
| 487 | |
| 488 | <ul><li><p>The pyclass option can now be None. If so, createcomponent |
| 489 | returns None.</p> |
| 490 | |
| 491 | </li> |
| 492 | <li><p>Removed tagtype option from Pmw.Group. Can now use the more |
| 493 | general tag_pyclass instead.</p> |
| 494 | |
| 495 | </li> |
| 496 | <li><p>Added tcl call to <code>load {} Blt</code> when testing for presence of Blt.</p> |
| 497 | |
| 498 | </li> |
| 499 | <li><p>Added julian and papal options to Pmw.ymdtojulian and |
| 500 | Pmw.juliantoymd functions and made sure divisions give the same |
| 501 | result as C even when operands are negative.</p> |
| 502 | |
| 503 | </li> |
| 504 | <li><p>Exported ymdtojulian and juliantoymd functions.</p> |
| 505 | |
| 506 | </li> |
| 507 | <li><p>Fixed bug in activate method. Did not prepend TclError with Tkinter.</p> |
| 508 | |
| 509 | </li> |
| 510 | <li><p>When the Blt busy hold command is called from showbusycursor, the |
| 511 | bindtags on the busy window are set so that no events cause |
| 512 | callbacks to occur for the toplevel or all bindings. Also, while |
| 513 | a busy window is up, the focus is changed to the busy window so |
| 514 | that no keyboard events are accepted. This fixes a bug where the |
| 515 | Tkinter._nametowidget function could crash with a <code>KeyError: _Busy</code> |
| 516 | if there was a binding on a toplevel window and the mouse |
| 517 | was pressed while the busy cursor was up.</p> |
| 518 | |
| 519 | </li></ul> |
| 520 | <p> 9 December 1997</p> |
| 521 | |
| 522 | <ul><li><p>Fixed bug in Pmw.datestringtojdn() when dealing with century year, |
| 523 | such as 2000.</p> |
| 524 | |
| 525 | </li></ul> |
| 526 | <p> 10 December 1997</p> |
| 527 | |
| 528 | <ul><li><p>Added <em>where</em> option to <code>Pmw.ScrolledText.importfile()</code>. (Graham |
| 529 | Matthews)</p> |
| 530 | |
| 531 | </li></ul> |
| 532 | <p> 16 December 1997</p> |
| 533 | |
| 534 | <ul><li><p>Modified Pmw.RadioSelect and Pmw.ButtonBox so that you can no |
| 535 | longer index their buttons using regular expressions. This |
| 536 | feature seemed to have little use and caused problems with buttons |
| 537 | labeled for example <em>a*</em> and <em>b*</em>. (Problem reported by Rob |
| 538 | Hooft)</p> |
| 539 | |
| 540 | </li> |
| 541 | <li><p>Added updateFunction option to Pmw.busycallback(). If set, the |
| 542 | function will be called just after the command given to |
| 543 | Pmw.busycallback(). If the function is set the Tkinter update() |
| 544 | method, then this will clear any events that may have occurred |
| 545 | while the command was executing.</p> |
| 546 | |
| 547 | </li></ul> |
| 548 | <p> 30 December 1997</p> |
| 549 | |
| 550 | <ul><li><p>Changed ymdtojulian and juliantoymd functions to jdntoymd and |
| 551 | ymdtojdn, because the meaning of "julian" is ambiguous, whereas |
| 552 | the meaning of "Julian Day Number" is not (maybe).</p> |
| 553 | |
| 554 | </li> |
| 555 | <li><p>Converted Pmw to use python 1.5 package mechanism. (Michael McLay |
| 556 | and Case Roole)</p> |
| 557 | |
| 558 | </li> |
| 559 | <li><p>Removed Pmw.py and PmwLazy files. Added __init__.py, PmwLoader.py |
| 560 | and Pmw.def files. (Case Roole)</p> |
| 561 | |
| 562 | </li> |
| 563 | <li><p>Applications can now specify at runtime which version of Pmw to |
| 564 | use and also which alpha versions, if any. (Case Roole)</p> |
| 565 | |
| 566 | </li> |
| 567 | <li><p>Modified Pmw code for the version of Tkinter released with python |
| 568 | 1.5.</p> |
| 569 | |
| 570 | </li> |
| 571 | <li><p>Release of version 0.6</p> |
| 572 | |
| 573 | </li></ul> |
| 574 | <p> 5 January 1998</p> |
| 575 | |
| 576 | <ul><li><p>Fixed alpha version handling so that alpha versions do not have to |
| 577 | supply PmwBase.py and PmwUtils.py. (Case Roole)</p> |
| 578 | |
| 579 | </li> |
| 580 | <li><p>Added example alpha directory and documentation. (Case Roole)</p> |
| 581 | |
| 582 | </li></ul> |
| 583 | <p> 7 January 1998</p> |
| 584 | |
| 585 | <ul><li><p>Added selectmode option to Pmw.RadioSelect megawidget. (Roman |
| 586 | Sulzhyk)</p> |
| 587 | |
| 588 | </li> |
| 589 | <li><p>Added some changes to Pmw.ScrolledCanvas to get around some bugs. |
| 590 | (Joe Saltiel)</p> |
| 591 | |
| 592 | </li> |
| 593 | <li><p>Release of version 0.6.1</p> |
| 594 | |
| 595 | </li></ul> |
| 596 | <p> 8 January 1998</p> |
| 597 | |
| 598 | <ul><li><p>Added some more changes to Pmw.ScrolledCanvas. (from Joe Saltiel)</p> |
| 599 | |
| 600 | </li></ul> |
| 601 | <p> 12 January 1998</p> |
| 602 | |
| 603 | <ul><li><p>Added Pmw.OptionMenu megawidget. (Roman Sulzhyk)</p> |
| 604 | |
| 605 | </li></ul> |
| 606 | <p> 20 February 1998</p> |
| 607 | |
| 608 | <ul><li><p>Added new Pmw.MenuBar features to delete menus and menuitems, |
| 609 | enable and disable menu bar and to add cascade menus. (Rob Pearson)</p> |
| 610 | |
| 611 | </li> |
| 612 | <li><p>Added extra arguments to Pmw.Color.spectrum for more control over |
| 613 | color choice.</p> |
| 614 | |
| 615 | </li></ul> |
| 616 | <p> 23 February 1998</p> |
| 617 | |
| 618 | <ul><li><p>Added canvasbind() method to Pmw.Balloon.</p> |
| 619 | |
| 620 | </li> |
| 621 | <li><p>Fixed demos/All.py so that it will correctly determine which Pmw |
| 622 | version to use even if it is in a directory symlinked to the demos |
| 623 | directory.</p> |
| 624 | |
| 625 | </li> |
| 626 | <li><p>Removed "import DemoVersion" from all demos, except All.py, so |
| 627 | that they will work unchanged when copied outside of the Pmw |
| 628 | distribution.</p> |
| 629 | |
| 630 | </li> |
| 631 | <li><p>Release of version 0.6.2</p> |
| 632 | |
| 633 | </li></ul> |
| 634 | <p> 26 February 1998</p> |
| 635 | |
| 636 | <ul><li><p>Fixed PmwLoader so that it works on Macintoshes. (Jack Jansen)</p> |
| 637 | |
| 638 | </li></ul> |
| 639 | <p> 2 March 1998</p> |
| 640 | |
| 641 | <ul><li><p>Fixed PmwBase and PmwBlt so that an attempt is made to dynamically |
| 642 | load Blt before it is used. Previously only attempted to load Blt |
| 643 | when calling showbusycursor.</p> |
| 644 | |
| 645 | </li></ul> |
| 646 | <p> 16 March 1998</p> |
| 647 | |
| 648 | <ul><li><p>Added hulldestroyed() method.</p> |
| 649 | |
| 650 | </li> |
| 651 | <li><p>Modified displayerror() function to use value given to |
| 652 | reporterrorstofile() if it is set.</p> |
| 653 | |
| 654 | </li> |
| 655 | <li><p>Fixed bug in Pmw.EntryField which occurred when the <em>command</em> |
| 656 | option destroyed the megawidget.</p> |
| 657 | |
| 658 | </li> |
| 659 | <li><p>Pmw.EntryField invoke method now passes on the value returned by |
| 660 | the <em>command</em> function.</p> |
| 661 | |
| 662 | </li></ul> |
| 663 | <p> 3 April 1998</p> |
| 664 | |
| 665 | <ul><li><p>Added Pmw.ScrolledFrame megawidget. (Joe Saltiel)</p> |
| 666 | |
| 667 | </li> |
| 668 | <li><p>Color.rgb2hsi() now uses the built-in <code>min()</code> and <code>max()</code> functions.</p> |
| 669 | |
| 670 | </li></ul> |
| 671 | <p> 20 April 1998</p> |
| 672 | |
| 673 | <ul><li><p>Moved time and date functions from PmwCounter.py to new file, |
| 674 | PmwTimeFuncs.py.</p> |
| 675 | |
| 676 | </li> |
| 677 | <li><p>Added optional <em>separator</em> argument to <code>timestringtoseconds</code> and |
| 678 | <code>datestringtojdn</code> functions. These functions are now stricter |
| 679 | when checking if a string is a valid date or time. For example, |
| 680 | it now checks for correct day in month, month in year, etc. These |
| 681 | changes also affect the Pmw.Counter date and time validators.</p> |
| 682 | |
| 683 | </li> |
| 684 | <li><p>The <code>datestringtojdn</code> function now accepts all combinations of |
| 685 | <strong>'d'</strong>, <strong>'m'</strong>, <strong>'y'</strong> as format string.</p> |
| 686 | |
| 687 | </li> |
| 688 | <li><p>Moved functions to bottom of file and class to top of file in |
| 689 | PmwEntryField.py and PmwCounter.py.</p> |
| 690 | |
| 691 | </li> |
| 692 | <li><p>The validation for Pmw.EntryField <em>integer</em>, <em>hexadecimal</em> and |
| 693 | <em>real</em> types now use string.atol or string.atof rather than |
| 694 | regular expressions.</p> |
| 695 | |
| 696 | </li> |
| 697 | <li><p>The validation for the Pmw.EntryField <em>real</em> type accepts a |
| 698 | <em>separator</em> argument, for those who prefer a comma instead of a |
| 699 | full stop/period/point as the decimal dividing symbol.</p> |
| 700 | |
| 701 | </li> |
| 702 | <li><p>The Pmw.EntryField <em>time*</em> and <em>date_*</em> validators have been |
| 703 | removed. The functionality can be replaced by using the new |
| 704 | <em>time</em> and <em>date</em> validators with <em>min</em> and <em>max</em> fields.</p> |
| 705 | |
| 706 | </li> |
| 707 | <li><p>The Pmw.EntryField <em>maxwidth</em> option has been removed. The |
| 708 | functionality can be replaced by using the <em>max</em> field of the |
| 709 | validator.</p> |
| 710 | |
| 711 | </li> |
| 712 | <li><p>Added an <em>extravalidators</em> option to Pmw.EntryField. This allows |
| 713 | new types of validation to be added, particularly in classes |
| 714 | derived from Pmw.EntryField. It also allows the use of different |
| 715 | names for the same validation, by using aliases. Added |
| 716 | SpecialEntry demo to show <em>extravalidators</em> option, based on work |
| 717 | by Joachim Schmitz.</p> |
| 718 | |
| 719 | </li> |
| 720 | <li><p>Fixed a bug in Pmw.EntryField when combining use of <em>value</em> and |
| 721 | <em>entry_textvariable</em> options.</p> |
| 722 | |
| 723 | </li> |
| 724 | <li><p>The Pmw.EntryField <em>validate</em> option now also accepts a dictionary |
| 725 | to handle minimum and maximum validation and to allow the passing |
| 726 | of other arguments to the validating functions, such as date, time |
| 727 | and number formats and separators.</p> |
| 728 | |
| 729 | </li> |
| 730 | <li><p>Fixed bug in Pmw.EntryField where the entry would scroll to the |
| 731 | start of the text if an invalid character was typed.</p> |
| 732 | |
| 733 | </li> |
| 734 | <li><p>Added checkentry() method to Pmw.EntryField, so that it can be |
| 735 | updated if the entry widget is tied to a textvariable.</p> |
| 736 | |
| 737 | </li></ul> |
| 738 | <p> 10 May 1998</p> |
| 739 | |
| 740 | <ul><li><p>The activate() method now takes a geometry option to allow more |
| 741 | flexible positioning of the modal dialog.</p> |
| 742 | |
| 743 | </li> |
| 744 | <li><p>Fixed rarely occurring bug in deactivate() method if it is called |
| 745 | (perhaps from a timer) during the call to wait_visibility() in the |
| 746 | activate() method. This bug used to generate an error and the |
| 747 | application would not exit properly.</p> |
| 748 | |
| 749 | </li> |
| 750 | <li><p>Fixed another rarely occurring bug in deactivate() method if it is |
| 751 | called while another application has the grab.</p> |
| 752 | |
| 753 | </li> |
| 754 | <li><p>Removed "sys.exc_traceback = None" for except clauses which used |
| 755 | to be required by python 1.4 so that references to objects in the |
| 756 | stack trace would not be left.</p> |
| 757 | |
| 758 | </li> |
| 759 | <li><p>Now uses sys.exc_info() function when displaying exception |
| 760 | traceback.</p> |
| 761 | |
| 762 | </li> |
| 763 | <li><p>The <strong>state</strong> option of Pmw.Balloon and the <strong>orient</strong> option of |
| 764 | several others now generate an exception if they have a bad value.</p> |
| 765 | |
| 766 | </li> |
| 767 | <li><p>Added a deactivatecommand option to Pmw.MegaToplevel which can be |
| 768 | used, for example, to cancel timers.</p> |
| 769 | |
| 770 | </li> |
| 771 | <li><p>Made changes to Pmw.Counter so that the entry display continuously |
| 772 | changes when arrow key presses are repeated quickly.</p> |
| 773 | |
| 774 | </li> |
| 775 | <li><p>Made changes to Pmw.Counter so that the insertion cursor is maintained |
| 776 | while counting and the entry scrolls to the end if the value is long.</p> |
| 777 | |
| 778 | </li> |
| 779 | <li><p>Pmw.Counter now behaves correctly when counting past the maximum |
| 780 | and minimum values of the EntryField.</p> |
| 781 | |
| 782 | </li></ul> |
| 783 | <p> 28 May 1998</p> |
| 784 | |
| 785 | <ul><li><p>Made all Pmw.EntryField standard validators publicly available |
| 786 | as <code>Pmw.numericvalidator</code>, etc.</p> |
| 787 | |
| 788 | </li> |
| 789 | <li><p>Now uses faster <code>string.replace()</code> instead of <code>regsub.gsub()</code> when |
| 790 | applicable.</p> |
| 791 | |
| 792 | </li> |
| 793 | <li><p>If the <em>balloonHelp</em> argument of the Pmw.Balloon bind methods is |
| 794 | <strong>None</strong>, no balloon is displayed.</p> |
| 795 | |
| 796 | </li> |
| 797 | <li><p>Merged the code from the PmwUtils module (forwardmethods()) into |
| 798 | PmwBase, since it was always used, was used nowhere else, and made |
| 799 | freezing a little more complicated.</p> |
| 800 | |
| 801 | </li> |
| 802 | <li><p>Added a short delay between calling Tkinter bell() method (sounds nicer).</p> |
| 803 | |
| 804 | </li> |
| 805 | <li><p>The functions <code>datestringtojdn()</code> and <code>timestringtoseconds()</code> now |
| 806 | return ValueError on invalid input.</p> |
| 807 | |
| 808 | </li> |
| 809 | <li><p>Created bundlepmw.py, to help when freezing in Pmw. Placed in bin |
| 810 | directory.</p> |
| 811 | |
| 812 | </li></ul> |
| 813 | <p> 29 May 1998</p> |
| 814 | |
| 815 | <ul><li><p>Fixed rare bug in Pmw.Counter which occured if the counter was |
| 816 | unmapped while the mouse button was held down over an arrow button.</p> |
| 817 | |
| 818 | </li> |
| 819 | <li><p>Created contrib directory and placed PmwVerticalGuage.py in it. |
| 820 | (Chris Wright)</p> |
| 821 | |
| 822 | </li> |
| 823 | <li><p>Patched PmwNoteBookR.py. (Siggy Brentrup)</p> |
| 824 | |
| 825 | </li> |
| 826 | <li><p>Added addoptions() method to Pmw.MegaArchetype class. (Dieter Maurer)</p> |
| 827 | |
| 828 | </li> |
| 829 | <li><p>By default, MenuBar creates hotkeys for menus and menu items for |
| 830 | keyboard traversal. Added traversSpec argument to MenuBar add |
| 831 | methods. (Michael McLay)</p> |
| 832 | |
| 833 | </li></ul> |
| 834 | <p> 31 May 1998</p> |
| 835 | |
| 836 | <ul><li><p>Cleaned up bbox() methods in Pmw.ScrolledCanvas and |
| 837 | Pmw.ScrolledListBox.</p> |
| 838 | |
| 839 | </li> |
| 840 | <li><p>The createcomponent() method now disallows the creation of |
| 841 | component names containing an underscore, since the query |
| 842 | functions would not be able to find them.</p> |
| 843 | |
| 844 | </li></ul> |
| 845 | <p> 2 June 1998</p> |
| 846 | |
| 847 | <ul><li><p>Release of version 0.7</p> |
| 848 | |
| 849 | </li></ul> |
| 850 | <p> 3 June 1998</p> |
| 851 | |
| 852 | <ul><li><p>Moved Pmw.TreeBrowse megawidget to contrib directory.</p> |
| 853 | |
| 854 | </li></ul> |
| 855 | <p> 17 June 1998</p> |
| 856 | |
| 857 | <ul><li><p>Added PmwFullTimeCounter.py to contrib directory (Daniel Michelson)</p> |
| 858 | |
| 859 | </li></ul> |
| 860 | <p> 1 July 1998</p> |
| 861 | |
| 862 | <ul><li><p>Changed mispelt file PmwVerticalGuage.py to PmwVerticalGauge.py |
| 863 | in contrib directory.</p> |
| 864 | |
| 865 | </li></ul> |
| 866 | <p> 7 July 1998</p> |
| 867 | |
| 868 | <ul><li><p>Fixed bug in Pmw.Counter real datatype. Sometimes incorrectly |
| 869 | counted negative decimal fractions. (Reported by David Ascher)</p> |
| 870 | |
| 871 | </li></ul> |
| 872 | <p> 12 July 1998</p> |
| 873 | |
| 874 | <ul><li><p>The <em>format</em> argument of Pmw.datestringtojdn() now defaults to |
| 875 | <strong>'ymd'</strong>.</p> |
| 876 | |
| 877 | </li> |
| 878 | <li><p>Removed Tkinter_test.py from tests since it does not test any Pmw |
| 879 | functionality (only Tkinter) and it fails under MS-Windows 95.</p> |
| 880 | |
| 881 | </li></ul> |
| 882 | <p> 23 August 1998</p> |
| 883 | |
| 884 | <ul><li><p>Changed several exception types to be more consistent.</p> |
| 885 | |
| 886 | </li> |
| 887 | <li><p>Made the interface to Pmw.Blt.Vector more like the builtin python |
| 888 | list type.</p> |
| 889 | |
| 890 | </li> |
| 891 | <li><p>It is no longer an error to call Pmw.setversion() or |
| 892 | Pmw.setalphaversions() after initialisation, as long as the |
| 893 | requested version matches the actual version.</p> |
| 894 | |
| 895 | </li> |
| 896 | <li><p>Fixed Pmw.NoteBookR so that it behaves better when the |
| 897 | highlightthickness is changed.</p> |
| 898 | |
| 899 | </li> |
| 900 | <li><p>The setyearpivot() function now returns a tuple containing the old |
| 901 | values of <em>pivot</em> and <em>century</em>.</p> |
| 902 | |
| 903 | </li> |
| 904 | <li><p>Added PmwFileDialog.py to contrib directory (Rob Hooft)</p> |
| 905 | |
| 906 | </li> |
| 907 | <li><p>Modified demos so that full tracebacks are displayed if an error |
| 908 | occurs when importing a module.</p> |
| 909 | |
| 910 | </li> |
| 911 | <li><p>Removed justify() method from Pmw.ScrolledListBox, since it is |
| 912 | just a wrapper around the xview and yview methods of the listbox. |
| 913 | Also, it was not a permanent justification, as the name implied.</p> |
| 914 | |
| 915 | </li></ul> |
| 916 | <p> 20 September 1998</p> |
| 917 | |
| 918 | <ul><li><p>Changed implementation of Pmw.ScrolledCanvas.</p> |
| 919 | |
| 920 | </li> |
| 921 | <li><p>Added <strong>borderframe</strong> option to Pmw.ScrolledText and Pmw.ScrolledCanvas.</p> |
| 922 | |
| 923 | </li></ul> |
| 924 | <p> 18 October 1998</p> |
| 925 | |
| 926 | <ul><li><p>Major overhaul of all scrolled widgets. Modified all to use |
| 927 | similar structure, given the peculiarities of each. Fixed several |
| 928 | subtle bugs.</p> |
| 929 | |
| 930 | </li> |
| 931 | <li><p>Pmw.ScrolledFrame: now uses a frame positioned within a clipping |
| 932 | frame using the place geometry manager. Added borderframe, |
| 933 | horizflex, horizfraction, usehullsize, vertflex, vertfraction |
| 934 | options. Added reposition() method. Removed getFrame() method; |
| 935 | use interior() method instead.</p> |
| 936 | |
| 937 | </li> |
| 938 | <li><p>Pmw.ScrolledListBox: added usehullsize option.</p> |
| 939 | |
| 940 | </li> |
| 941 | <li><p>Pmw.ScrolledText: added borderframe and usehullsize options.</p> |
| 942 | |
| 943 | </li> |
| 944 | <li><p>Pmw.ScrolledCanvas: simplified widget structure. Added |
| 945 | borderframe, canvasmargin, scrollmargin and usehullsize options. |
| 946 | Added label.</p> |
| 947 | |
| 948 | </li> |
| 949 | <li><p>Modified Pmw.OptionMenu to use standard widgets rather than call |
| 950 | tcl procedure. Added <strong>initialitem</strong> option. Now handles |
| 951 | <strong>menubutton_textvariable</strong> component option correctly.</p> |
| 952 | |
| 953 | </li></ul> |
| 954 | <p> 1 November 1998</p> |
| 955 | |
| 956 | <ul><li><p>Documented more Pmw functions and Pmw.ComboBox.</p> |
| 957 | |
| 958 | </li></ul> |
| 959 | <p> 15 November 1998</p> |
| 960 | |
| 961 | <ul><li><p>Fixed some bugs, cleaned up code and wrote documentation for |
| 962 | Pmw.Group. Removed <strong>ringpadx</strong> and <strong>ringpady</strong> options, since this |
| 963 | functionality is more generally available by padding the |
| 964 | megawidget itself and by padding the children of the megawidget. |
| 965 | Modified Pmw.aligngrouptags so that it takes into account the |
| 966 | borderwidth and highlightthickness of the ring and so that it |
| 967 | works when there is no tag widget. Added <strong>tagindent</strong> option.</p> |
| 968 | |
| 969 | </li></ul> |
| 970 | <p> 18 November 1998</p> |
| 971 | |
| 972 | <ul><li><p>Renamed canvasbind() and canvasunbind() methods of Pmw.Balloon to |
| 973 | tagbind() and tagunbind() and modified so that they work with both |
| 974 | Tkinter.Canvas items and Tkinter.Text tagged items.</p> |
| 975 | |
| 976 | </li></ul> |
| 977 | <p> 19 November 1998</p> |
| 978 | |
| 979 | <ul><li><p>Added havebltbusy() method to Pmw.Blt. (Robin Becker)</p> |
| 980 | |
| 981 | </li></ul> |
| 982 | <p> 21 November 1998</p> |
| 983 | |
| 984 | <ul><li><p>Modified contrib/PmwFileDialog.py so that when a file is selected |
| 985 | with the mouse, the highlight (in the file list) persists and the |
| 986 | file list does not scroll to the top. (Rob Hooft)</p> |
| 987 | |
| 988 | </li> |
| 989 | <li><p>Modified Pmw.Balloon so that it can be bound to a tag associated |
| 990 | with several Canvas or Text items. (Magnus Kessler)</p> |
| 991 | |
| 992 | </li></ul> |
| 993 | <p> 21 November 1998</p> |
| 994 | |
| 995 | <ul><li><p>Cleaned up appearance and colors of Pmw.NoteBookR tabs. (Georg |
| 996 | Mischler)</p> |
| 997 | |
| 998 | </li> |
| 999 | <li><p>Added <strong>buttontype</strong> option to Pmw.RadioSelect to support |
| 1000 | radiobuttons and checkbuttons. (Georg Mischler)</p> |
| 1001 | |
| 1002 | </li></ul> |
| 1003 | <p> 23 November 1998</p> |
| 1004 | |
| 1005 | <ul><li><p>Updated usage of <code>bind_class(tag)</code> due to change in return value |
| 1006 | in Tkinter module in python 1.5.2. (Magnus Kessler, Fredrik Lundh)</p> |
| 1007 | |
| 1008 | </li> |
| 1009 | <li><p>The default time displayed in Pmw.TimeCounter is now the current |
| 1010 | local time, not GMT as before.</p> |
| 1011 | |
| 1012 | </li> |
| 1013 | <li><p>The times displayed in the Counter demonstration are now the |
| 1014 | current local time, not GMT as before.</p> |
| 1015 | |
| 1016 | </li></ul> |
| 1017 | <p> 7 December 1998</p> |
| 1018 | |
| 1019 | <ul><li><p>Modified Pmw.ComboBox to take advantage of the fix to the Tkinter |
| 1020 | <code>bind()</code> method callback handling of <code>Event.widget</code> in python |
| 1021 | 1.5.2. It works even if the <strong>selectioncommand</strong> destroys the |
| 1022 | combobox. For simple comboboxes, the invoke() method now returns |
| 1023 | the return value of the <strong>selectioncommand</strong>.</p> |
| 1024 | |
| 1025 | </li> |
| 1026 | <li><p>Modified Pmw.EntryField to take advantage of the fix to the |
| 1027 | Tkinter <code>bind()</code> method callback handling of <code>Event.widget</code> in |
| 1028 | python 1.5.2. It works even if a user-supplied callback |
| 1029 | (<strong>command</strong>, <strong>invalidcommand</strong>, <strong>validator</strong> or <strong>stringtovalue</strong>) |
| 1030 | destroys the entryfield. Cleans up correctly when destroyed. The |
| 1031 | invoke() method now returns the return value of the <strong>command</strong>.</p> |
| 1032 | |
| 1033 | </li> |
| 1034 | <li><p>The invoke() method of Pmw.TimeCounter now returns the return |
| 1035 | value of the <strong>command</strong>.</p> |
| 1036 | |
| 1037 | </li> |
| 1038 | <li><p>Modified Pmw.ButtonBox to use the new (in Tk8.0) <strong>default</strong> option |
| 1039 | of the Tkinter <strong>Button</strong> widget instead of a separate frame. |
| 1040 | Changed default padding to be more compact. Removed "ring" frame |
| 1041 | component and "ringborderwidth", "ringpadx" and "ringpady" |
| 1042 | options. (Georg Mischler)</p> |
| 1043 | |
| 1044 | </li> |
| 1045 | <li><p>Changed <strong>'pmw1'</strong> fontScheme to set default fonts only when running |
| 1046 | under posix, since the default fonts on other systems look better.</p> |
| 1047 | |
| 1048 | </li></ul> |
| 1049 | <p> 10 December 1998</p> |
| 1050 | |
| 1051 | <ul><li><p>Release of version 0.8</p> |
| 1052 | |
| 1053 | </li></ul> |
| 1054 | <p> 20 January 1999</p> |
| 1055 | |
| 1056 | <ul><li><p>Added <strong>master</strong> option to Pmw.MegaToplevel and removed <strong>master</strong> |
| 1057 | argument from the activate method.</p> |
| 1058 | |
| 1059 | </li> |
| 1060 | <li><p>Replaced rand module in demos with a simple random number |
| 1061 | generator (since rand is not built-in on all versions of python).</p> |
| 1062 | |
| 1063 | </li></ul> |
| 1064 | <p> 22 February 1999</p> |
| 1065 | |
| 1066 | <ul><li><p>Modified <code>__init__.py</code> so that it only accepts directories whose |
| 1067 | names begin with <strong>Pmw_M_N</strong> and which have a /lib/PmwLoader.py/ |
| 1068 | file.</p> |
| 1069 | |
| 1070 | </li></ul> |
| 1071 | <p> 13 May 1999</p> |
| 1072 | |
| 1073 | <ul><li><p>Changed Pmw.ScrolledCanvas, Pmw.ScrolledText and Pmw.ScrolledListBox |
| 1074 | to speed up scrolling if the scrollmodes are not both dynamic.</p> |
| 1075 | |
| 1076 | </li> |
| 1077 | <li><p>Changed busy cursor and activate/deactivate code so that it works |
| 1078 | correctly under fast mouse clicking or fast keyboarding (using |
| 1079 | accelerators). Also fixed so that grab is correctly restored |
| 1080 | after a Pmw.ComboBox popup list is unmapped inside a modal dialog. |
| 1081 | (Clemens Hintze)</p> |
| 1082 | |
| 1083 | </li> |
| 1084 | <li><p>Several dialogs now give focus to one of their components (listbox |
| 1085 | or entry widget) when activated. (Clemens Hintze)</p> |
| 1086 | |
| 1087 | </li> |
| 1088 | <li><p>Fixed Pmw.ComboBox so that it unposts popup if the combobox is |
| 1089 | unmapped and returns grab and focus correctly if destroyed.</p> |
| 1090 | |
| 1091 | </li> |
| 1092 | <li><p>Improved tracetk() output to be more readable. Also displays |
| 1093 | nested calls to the Tk mainloop better and shows callbacks from |
| 1094 | tcl to python.</p> |
| 1095 | |
| 1096 | </li> |
| 1097 | <li><p>Upgraded Blt support to blt2.4i. Graph widget is not backwards |
| 1098 | compatible with blt2.1.</p> |
| 1099 | |
| 1100 | </li></ul> |
| 1101 | <p> 19 May 1999</p> |
| 1102 | |
| 1103 | <ul><li><p>Fixed bug in Pmw.Balloon in placement of balloons over canvas |
| 1104 | items when the canvas was scrolled. (Tessa Lau)</p> |
| 1105 | |
| 1106 | </li></ul> |
| 1107 | <p> 20 May 1999</p> |
| 1108 | |
| 1109 | <ul><li><p>Added new Tk event types (new in Tk 8.0 and 8.0.5) to PmwBase |
| 1110 | error display method. Also added check for unknown event types to |
| 1111 | safeguard against future changes. (Magnus Kessler)</p> |
| 1112 | |
| 1113 | </li> |
| 1114 | <li><p>Added <strong>exclude</strong> argument to <code>showbusycursor()</code>. (Rob Hooft)</p> |
| 1115 | |
| 1116 | </li></ul> |
| 1117 | <p> 1 June 1999</p> |
| 1118 | |
| 1119 | <ul><li><p>Added wrappers for Blt Stripchart and Tabset widgets. (Nick Belshaw)</p> |
| 1120 | |
| 1121 | </li> |
| 1122 | <li><p>Changed createcomponent() so that arguments to the constructor of |
| 1123 | the component can now be specified as either multiple trailing |
| 1124 | arguments to createcomponent() or as a single tuple argument.</p> |
| 1125 | |
| 1126 | </li></ul> |
| 1127 | <p> 7 June 1999</p> |
| 1128 | |
| 1129 | <ul><li><p>Added call to update_idletasks() in Pmw.ScrolledCanvas, |
| 1130 | Pmw.ScrolledFrame, Pmw.ScrolledText and Pmw.ScrolledListBox to |
| 1131 | avoid endless mapping/unmapping of two dynamic scrollbars when the |
| 1132 | window is first mapped and only one scrollbar is needed. |
| 1133 | (Reported by Mark C Favas, solution suggested by Dieter Maurer.)</p> |
| 1134 | |
| 1135 | </li></ul> |
| 1136 | <p> 10 June 1999</p> |
| 1137 | |
| 1138 | <ul><li><p>Fixed bug in bundlepmw.py when called with -noblt option. |
| 1139 | (Reported by Kevin O'Connor)</p> |
| 1140 | |
| 1141 | </li> |
| 1142 | <li><p>Pmw.ComboBox now unposts the dropdown listbox before the selection |
| 1143 | callback is invoked, to avoid problems when the callback takes a |
| 1144 | long time to run. (Reported by Randall Hopper)</p> |
| 1145 | |
| 1146 | </li></ul> |
| 1147 | <p> 11 June 1999</p> |
| 1148 | |
| 1149 | <ul><li><p>Release of version 0.8.1</p> |
| 1150 | |
| 1151 | </li></ul> |
| 1152 | <p> 29 June 1999</p> |
| 1153 | |
| 1154 | <ul><li><p>PmwMessageBar.message() now replaces newlines with spaces before |
| 1155 | displaying message. Also applies to helpmessage().</p> |
| 1156 | |
| 1157 | </li></ul> |
| 1158 | <p> 2 July 1999</p> |
| 1159 | |
| 1160 | <ul><li><p>Improved toplevel window positioning under NT, and stopped most of |
| 1161 | the ugly flashing.</p> |
| 1162 | |
| 1163 | </li></ul> |
| 1164 | <p> 5 July 1999</p> |
| 1165 | |
| 1166 | <ul><li><p>The <strong>pmw1</strong> fontScheme is now supported under NT, as is the <em>size</em> |
| 1167 | option to <code>Pmw.initialise()</code>.</p> |
| 1168 | |
| 1169 | </li></ul> |
| 1170 | <p> 6 July 1999</p> |
| 1171 | |
| 1172 | <ul><li><p>Changed the names of positional arguments in the following |
| 1173 | methods, so that they have less chance of conflicting with keyword |
| 1174 | arguments: MegaArchetype.createcomponent(), ButtonBox.insert(), |
| 1175 | ButtonBox.add(), MenuBar.addcascademenu(), MenuBar.addmenuitem() |
| 1176 | and RadioSelect.add().</p> |
| 1177 | |
| 1178 | </li></ul> |
| 1179 | <p> 9 July 1999</p> |
| 1180 | |
| 1181 | <ul><li><p>Added images and example code to the megawidget reference manuals. |
| 1182 | (Suggested by Joerg Henrichs)</p> |
| 1183 | |
| 1184 | </li> |
| 1185 | <li><p>Fixed showbusycursor() under NT. It now calls update() instead of |
| 1186 | update_idletasks() to force display of cursor. (Solution |
| 1187 | suggested by George Howlett)</p> |
| 1188 | |
| 1189 | </li> |
| 1190 | <li><p>Improved display of arrows in ComboBox, Counter and TimeCounter.</p> |
| 1191 | |
| 1192 | </li></ul> |
| 1193 | <p> 16 July 1999</p> |
| 1194 | |
| 1195 | <ul><li><p>Removed Pmw.maxfontwidth() function, since better functionality is |
| 1196 | now supplied by the Tk "font measure" command.</p> |
| 1197 | |
| 1198 | </li> |
| 1199 | <li><p>Removed Pmw.fontexists() function, since in Tk8.0 all fonts exist.</p> |
| 1200 | |
| 1201 | </li></ul> |
| 1202 | <p> 28 July 1999</p> |
| 1203 | |
| 1204 | <ul><li><p>Fixed bug in date counter with separator other than <strong>'/'</strong> and time |
| 1205 | counter with separator other than <strong>':'</strong>. (David M. Cooke, Alan |
| 1206 | Robinson)</p> |
| 1207 | |
| 1208 | </li> |
| 1209 | <li><p>Under NT, the font named <strong>'fixed'</strong> is not fixed width, so added |
| 1210 | alias from <strong>'Fixed'</strong> to <strong>'Courier'</strong>.</p> |
| 1211 | |
| 1212 | </li> |
| 1213 | <li><p>Changed the <code>bind()</code> and <code>tagbind()</code> methods of Pmw.Balloon to |
| 1214 | remove a potential memory leak. The methods now store the |
| 1215 | <em>funcids</em> of the callback functions, so that if the same widget or |
| 1216 | tag is bound twice, the balloon can remove the old bindings. |
| 1217 | (Peter Stoehr)</p> |
| 1218 | |
| 1219 | </li> |
| 1220 | <li><p>Changed NoteBookR so that lowercmd, creatcmd and raisecmd are |
| 1221 | called in that order when a page is selected. Also fixed bug |
| 1222 | which always raised page 0 when notebook is resized. (Scott |
| 1223 | Evans, Charles Choi)</p> |
| 1224 | |
| 1225 | </li></ul> |
| 1226 | <p> 1 August 1999</p> |
| 1227 | |
| 1228 | <ul><li><p>Added <strong>dynamicGroups</strong> argument to <code>defineoptions()</code> method and |
| 1229 | modified ButtonBox, MenuBar, PanedWidget, RadioSelect to register |
| 1230 | their dynamic groups.</p> |
| 1231 | |
| 1232 | </li> |
| 1233 | <li><p><code>Pmw.initialise()</code> can now be called multiple times, with |
| 1234 | different <em>root</em> arguments, but only sequentially. Pmw does not |
| 1235 | (yet) support multiple simultaneous interpreters. Modified |
| 1236 | Pmw.EntryField so that it recreates class bindings when |
| 1237 | Tkinter.root changes.</p> |
| 1238 | |
| 1239 | </li></ul> |
| 1240 | <p> 4 August 1999</p> |
| 1241 | |
| 1242 | <ul><li><p>Added relmouse option to Pmw.Balloon. Fixed Pmw.Balloon so that |
| 1243 | the balloon is not displayed off-screen. (Tessa Lau)</p> |
| 1244 | |
| 1245 | </li></ul> |
| 1246 | <p> 16 August 1999</p> |
| 1247 | |
| 1248 | <ul><li><p>Added disableKeyboardWhileBusy option to initialise(). To ignore |
| 1249 | keyboard input while displaying the busy cursor, Pmw sets the |
| 1250 | focus for each toplevel window to the Blt busy window. However, |
| 1251 | under NT, this causes each window to be raised. If this is not |
| 1252 | acceptable, programs running on NT can request show/hidebusycursor |
| 1253 | not to ignore keyboard input. </p> |
| 1254 | |
| 1255 | </li></ul> |
| 1256 | <p> 25 August 1999</p> |
| 1257 | |
| 1258 | <ul><li><p>Added Pmw.Blt.busy_forget() and used it in Pmw.hidebusycursor() |
| 1259 | when running under NT. There is a bug in the Blt busy release |
| 1260 | command under NT where it sometimes fails to display the busy |
| 1261 | cursor. Using busy forget avoids the problem.</p> |
| 1262 | |
| 1263 | </li></ul> |
| 1264 | <p> 27 September 1999</p> |
| 1265 | |
| 1266 | <ul><li><p>Added busyCursorName option to Pmw.initialise() and added cursor |
| 1267 | argument to Pmw.Blt.busy_hold(). (Mark Favas)</p> |
| 1268 | |
| 1269 | </li></ul> |
| 1270 | <p> 20 October 1999</p> |
| 1271 | |
| 1272 | <ul><li><p>Replaced Pmw.NoteBookR and Pmw.NoteBookS with completely rewritten |
| 1273 | Pmw.NoteBook.</p> |
| 1274 | |
| 1275 | </li> |
| 1276 | <li><p>Renamed Pmw.OptionMenu.get() to Pmw.OptionMenu.getcurselection() |
| 1277 | and Pmw.PanedWidget.remove() to Pmw.PanedWidget.delete(), to be |
| 1278 | more consistent with other megawidgets.</p> |
| 1279 | |
| 1280 | </li> |
| 1281 | <li><p>The index() method of several megawidgets now use Pmw.END, |
| 1282 | Pmw.SELECT and Pmw.DEFAULT instead of strings, since these may |
| 1283 | conflict with component names. </p> |
| 1284 | |
| 1285 | </li> |
| 1286 | <li><p>Pmw.OptionMenu.index() now uses Pmw.SELECT to return |
| 1287 | index of the currently selected menu item, rather than None.</p> |
| 1288 | |
| 1289 | </li> |
| 1290 | <li><p>Added destroy() method to Pmw.MegaArchetype to handle cleaning up |
| 1291 | of _hullToMegaWidget mapping. </p> |
| 1292 | |
| 1293 | </li> |
| 1294 | <li><p>Removed exclude argument from Pmw.showbusycursor() and added |
| 1295 | Pmw.excludefrombusycursor() function instead. (Rob Hooft)</p> |
| 1296 | |
| 1297 | </li> |
| 1298 | <li><p>Fixed several bugs for Windows NT.</p> |
| 1299 | |
| 1300 | </li> |
| 1301 | <li><p>Added Pmw.ButtonBox.button() and Pmw.RadioSelect.button().</p> |
| 1302 | |
| 1303 | </li> |
| 1304 | <li><p>Added Pmw.Color.bordercolors().</p> |
| 1305 | |
| 1306 | </li></ul> |
| 1307 | <p> 21 October 1999</p> |
| 1308 | |
| 1309 | <ul><li><p>Release of version 0.8.3. (Version 0.8.2 was not released.)</p> |
| 1310 | |
| 1311 | </li></ul> |
| 1312 | <p> 30 October 1999</p> |
| 1313 | |
| 1314 | <ul><li><p>Added arrownavigation option and previouspage() and nextpage() |
| 1315 | methods to Pmw.NoteBook. (Peter Funk)</p> |
| 1316 | |
| 1317 | </li> |
| 1318 | <li><p>Renamed the <code>setnaturalpagesize()</code> method of Pmw.NoteBook to |
| 1319 | <code>setnaturalsize()</code> to be consistent with Pmw.PanedWidget.</p> |
| 1320 | |
| 1321 | </li> |
| 1322 | <li><p>Changed Pmw.excludefrombusycursor() to Pmw.setbusycursorattributes(). |
| 1323 | Removed busyCursorName option from Pmw.initialise() and added |
| 1324 | cursorName attribute to Pmw.setbusycursorattributes().</p> |
| 1325 | |
| 1326 | </li> |
| 1327 | <li><p>Added documentation source and build scripts to ftp site.</p> |
| 1328 | |
| 1329 | </li></ul> |
| 1330 | <p> 6 November 1999</p> |
| 1331 | |
| 1332 | <ul><li><p>Fixed memory leaks when destroying megawidgets. Added automatic |
| 1333 | check for memory leak to test script used by all tests. |
| 1334 | Pmw.initialise() now uses a hook into Tkinter.Widget.destroy |
| 1335 | rather than Tkinter.Frame.destroy to handle the case of |
| 1336 | Pmw.NoteBook being destroyed (since the notebook hull is a canvas |
| 1337 | and not a frame). Window manager delete protocol callbacks are |
| 1338 | now cleaned up. Pmw.ScrolledListBox event bindings now do not |
| 1339 | leak. (Reported by Jeff Weeks)</p> |
| 1340 | |
| 1341 | </li> |
| 1342 | <li><p>Removed key bindings for Pmw.ScrolledListBox except space and return keys.</p> |
| 1343 | |
| 1344 | </li></ul> |
| 1345 | <p> 20 November 1999</p> |
| 1346 | |
| 1347 | <ul><li><p>Fixed bug in Pmw.Balloon when the canvas or text item that |
| 1348 | triggered the balloon is deleted before the balloon is displayed |
| 1349 | by the <strong>initwait</strong> timer. (Magnus Kessler)</p> |
| 1350 | |
| 1351 | </li> |
| 1352 | <li><p>Added <strong>'nograb'</strong> to <em>globalMode</em> option of <code>activate()</code> method. (Rob Hooft)</p> |
| 1353 | |
| 1354 | </li> |
| 1355 | <li><p>Added __setitem__ method to Pmw.MegaArchetype, so that megawidget |
| 1356 | options can be now set using <code>megawidget['option'] = value</code> style. |
| 1357 | (Oliver Gathmann)</p> |
| 1358 | |
| 1359 | </li></ul> |
| 1360 | <p> 27 December 1999</p> |
| 1361 | |
| 1362 | <ul><li><p>Converted from <code>regex</code> module to <code>re</code> module, since <code>regex</code> is not |
| 1363 | implemented for Jpython. (Finn Bock)</p> |
| 1364 | |
| 1365 | </li></ul> |
| 1366 | <p> 30 December 1999</p> |
| 1367 | |
| 1368 | <ul><li><p>Added <code>clear()</code> method to Pmw.ScrolledListBox (suggested by Carson |
| 1369 | Fenimore).</p> |
| 1370 | |
| 1371 | </li></ul> |
| 1372 | <p> 15 March 2000</p> |
| 1373 | |
| 1374 | <ul><li><p>Fixed problem in PmwBase when deleting windows that were created |
| 1375 | before Pmw was initialised (such as splash windows displayed while |
| 1376 | the application is coming up). (Mark Favas)</p> |
| 1377 | |
| 1378 | </li> |
| 1379 | <li><p>Added splash window to Pmw demo. (Mark Favas)</p> |
| 1380 | |
| 1381 | </li></ul> |
| 1382 | <p> 30 April 2000</p> |
| 1383 | |
| 1384 | <ul><li><p>Added Pmw.MainMenuBar megawidget, which uses the menubar feature |
| 1385 | of Tk to provide platform specific menu bars.</p> |
| 1386 | |
| 1387 | </li> |
| 1388 | <li><p>Fixed Pmw.Counter and several other megawidgets so that certain |
| 1389 | <strong>hull</strong> constructor keywords, such as <strong>hull_relief</strong> and |
| 1390 | <strong>hull_borderwidth</strong>, are not overriden in the constructor.</p> |
| 1391 | |
| 1392 | </li> |
| 1393 | <li><p>Thanks to Peter Cashin for his help on how to unpack gzipped tar |
| 1394 | files on Microsoft Windows operating systems.</p> |
| 1395 | |
| 1396 | </li> |
| 1397 | <li><p>Added Pmw.HistoryText megawidget. This can be used as the basis |
| 1398 | of an interactive text-based database query gui. It maintains a |
| 1399 | history of each query and allows editing of prior queries.</p> |
| 1400 | |
| 1401 | </li> |
| 1402 |