/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Annotation of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 490 - (hide annotations)
Mon Mar 10 10:44:24 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 62207 byte(s)
updated ChangeLog

1 jonathan 490 2003-03-10 Jonathan Coles <[email protected]>
2    
3     * Thuban/Model/classification.py (Classification): Don't use
4     layer's message function directly, use the ClassChanged() method
5     when then classification changes. SetField/SetFieldType/SetLayer
6     must keep the information about field name and field type in
7     sync when an owning layer is set or removed.
8    
9     * Thuban/Model/layer.py: Added ClassChanged() so that the
10     classification can tell the layer when its data has changed.
11     (Layer.SetClassification): Accepts None as an arguement to
12     remove the current classification and correctly handles
13     adding a new classification.
14    
15     * Thuban/Model/load.py: Comment out print statement
16    
17     * test/test_classification.py, test/test_save.py: New and
18     improved tests.
19    
20 jonathan 483 2003-03-07 Jonathan Coles <[email protected]>
21    
22     * Thuban/Model/classification.py: Implemented __copy__ and
23     __deepcopy__ for ClassGroup* and ClassGroupProperites so
24     they can easily be copied by the classifier dialog.
25     (ClassGroupProperites.__init__): The default line color should
26     have been Color.Black.
27    
28     * Thuban/UI/classifier.py: Setting and Getting table values now
29     uses a consistent set of functions.
30     (Classifier): Now non-modal. Has field type label which changes
31     as the field changes. Keep track of buttons in a list so that
32     we can enable/disable the buttons when the None field is selected.
33     (SelectPropertiesDialog): Add buttons to make the colors transparent.
34    
35     * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
36     does what OnClose did, but can be called by the application to
37     close a window. Needed when a session changes, and we have to
38     close the classifier windows.
39    
40     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
41     Shuts down open dialogs. Used when a new session is created
42     or a session is opened.
43     (MainWindow.SaveSession): Should only call application.SaveSession()
44     if we don't call SaveSessionAs first.
45     (MainWindow.Classify): Allow different classifier dialogs for
46     different layers.
47    
48     * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
49     the parent class handle it. Add Shutdown() to unsubscibe from
50     event notification and call the parent Shutdown(). This was
51     necessary so the application can close the tree window.
52    
53 jonathan 478 2003-03-06 Jonathan Coles <[email protected]>
54    
55     * Thuban/Model/classification.py: Minor documentation changes,
56     Addition of __eq__ and __ne__ methods.
57     (Classification.SetLayer): prevent recursion between this method
58     and Layer.SetClassification().
59    
60     * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
61    
62     * Thuban/Model/layer.py (SetClassification): prevent recursion
63     between this method and Classification.SetLayer().
64    
65     * test/test_classification.py, test/test_load.py,
66     test/test_session.py: Fixed and added tests for the classification
67     classes.
68    
69 bh 477 2003-03-06 Bernhard Herzog <[email protected]>
70    
71     * Thuban/UI/classifier.py (ClassGrid.__init__)
72     (ClassGrid.CreateTable): Move the SetSelectionMode call to
73     CreateTable because otherwise it triggers an assertion in
74     wxPython/wxGTK 2.4.
75    
76 jonathan 459 2003-03-05 Jonathan Coles <[email protected]>
77    
78 jonathan 475 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
79 jonathan 471
80 jonathan 475 * Thuban/Model/load.py: import FIELDTYPE constants from table.
81 jonathan 471
82 jonathan 475 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
83 jonathan 471
84 jonathan 475 * Thuban/Model/table.py: Put FIELDTYPE constants back.
85 jonathan 471
86     2003-03-05 Jonathan Coles <[email protected]>
87    
88 jonathan 459 * Thuban/UI/classifier.py: Added class documentation.
89     Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
90     Store just the groups in the table and generate the other
91     column information when it is requested. Add "None" field
92     to pull-down to select no classification.
93    
94     * Thuban/common.py: Moved FIELDTYPE constants from table.py
95     (Str2Num): Only catch ValueError exceptions.
96    
97     * Thuban/Model/classification.py: Class documentation. Renaming
98     of methods with Stroke to Line. Groups are stored in a single
99     list with the default as the first element. Groups are searched
100     in the order they appear in the list.
101    
102     * Thuban/Model/color.py: Documentation.
103    
104     * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
105     the kind of data represented by a field.
106    
107     * Thuban/Model/load.py (ProcessSession): Use proper string
108     conversion function; fixes RTbug #1713.
109    
110     * Thuban/Model/save.py (Saver): Store field type information.
111    
112     * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
113     (Table): Add field_info_by_name() to retrieve field information
114     by specifying the field name, not the number.
115    
116     * Thuban/UI/mainwindow.py: Function name changes.
117    
118     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
119     get the layer classification once. Don't try to classify
120     values when the field is None: just use the default properties.
121    
122     * Thuban/UI/view.py: Function name changes.
123    
124     * Doc/thuban.dtd: Add field_type attribute to a classification.
125    
126 bh 456 2003-03-04 Bernhard Herzog <[email protected]>
127    
128 bh 458 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
129     the fill and stroke layer attributes optional with suitable
130     default values. Add the stroke_width layer attribute. Use correct
131     syntax for empty elements. Make the attribute list for labels
132     refer to the label element.
133    
134     2003-03-04 Bernhard Herzog <[email protected]>
135    
136 bh 456 * setup.py (thuban_build_py.build): Add a comment about distutils in
137     Python 2.3 containing some of the functionality we implement in
138     setup.py ourselves.
139    
140     * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
141     before the selection mode. Doing it the other way round triggers
142     an assertion in wxWindows.
143    
144     * Thuban/Model/save.py (escape): Fix typo in doc-string
145    
146     * Thuban/Model/classification.py: Remove unnecessary wxPython
147     import
148    
149 jonathan 448 2003-03-04 Jonathan Coles <[email protected]>
150    
151     * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
152     Parameter 'value' should default to None.
153    
154     * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
155     the class attribute __classification is now private.
156    
157     * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
158     Classifier to ClassGrid. Added support for removing selected rows,
159     which including code for keeping track of when cells are selected,
160     and deselected.
161     (ClassTable): Support for added/removing rows. Fixed a problem
162     with __ParseInput whereby it would not allow strings (only numbers)
163     to be entered.
164     (Classifier): Added button and supporting code for removing
165     selected rows.
166    
167 jonathan 445 2003-02-27 Jonathan Coles <[email protected]>
168 jonathan 434
169     * Thuban/common.py: Moved color conversion functions into
170     Thuban/UI/common.py.
171     (Str2Num): Now converts the float (not the string) to a long/int
172     so that an exception isn't thrown.
173    
174     * Thuban/UI/common.py: Common functions used in several UI modules
175    
176     * Thuban/Model/classification.py: Changed the class hierarchy
177     so that a Classification consists of Groups which return
178     Properties when a value matches a Group.
179    
180     * Thuban/Model/layer.py: Fixed name resolution problem.
181    
182     * Thuban/Model/load.py: Use new Classification and Group functions.
183    
184     * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
185     failure.
186     (Saver.write_classification): Use new Classification and Group
187     functions.
188    
189     * Thuban/UI/classifier.py: Changes to use new Classification and Group
190 jonathan 445 functions. Fix to create a tuple with a single value instead of
191     simply returning the value.
192 jonathan 434
193     * Thuban/UI/renderer.py: Use new Classification and Group functions.
194     Use common.py functions.
195    
196 jonathan 445 * Thuban/UI/tree.py: Use common.py functions.
197 jonathan 447
198     * test/test_classification.py: Use new Classification and Group
199     classes.
200 jonathan 434
201 jonathan 426 2003-02-24 Jonathan Coles <[email protected]>
202    
203     * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
204     functions from Thuban color objects to wxWindow colour objects.
205    
206     * Thuban/Model/classification.py (Classification): Renamed
207     GetProperties() to GetClassData(). Used the new iterator
208     in TreeInfo().
209     (ClassIterator): Iterator implementation to iterate over the
210     ClassData objects in a classification object.
211    
212     * Thuban/Model/save.py (Saver.write_classificaton): Uses
213     the new iterator to save the classification information.
214    
215     * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
216     for changing the stroke and fill colors and previewing the
217     changes.
218    
219     * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
220     MainWindow.SaveSessionAs): Text string changes so the dialogs
221     have more meaningful titles.
222    
223     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
224     Classification method name from GetProperties to GetClassData.
225    
226     * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
227     instead of accessing now non-existent class variables.
228    
229 bh 425 2003-02-24 Bernhard Herzog <[email protected]>
230    
231     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
232     unneeded Shape() call. Rendering is substantially faster without
233     it and it avoids some problems with broken shape files.
234    
235 frank 423 2003-02-20 Frank Koormann <[email protected]>
236    
237     Force minimal size of identify and label dialogs. The autosizing
238     looked too ugly.
239    
240     * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
241     * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
242     Set size of listctrl.
243     * Thuban/UI/identifyview.py (IdentifyView.__init__):
244     Set size of dialog.
245    
246 jonathan 408 2003-02-19 Jonathan Coles <[email protected]>
247    
248     * test/test_classification.py, test/test_layer.py,
249     test/test_load.py, test/test_map.py, test/test_session.py:
250     Updated the tests to use the new functions that are in the
251     respective classes.
252    
253     * Thuban/Model/classification.py (Classification):
254     Uses the new ClassData* classes. Modification messages are
255     passed up to the parent layer (if it exists).
256     (ClassData): New class to encapsulate the common data in each
257     classification property.
258     (ClassDataDefault): Represents the Default class. data.
259     (ClassDataPoint): Represents a single class. data point
260     (ClassDataRange): Represents a class. range
261     (ClassDataMap): Represents a class. map (unused).
262    
263     * Thuban/Model/color.py: Added Color.None to represent something
264     with no color. Color.Black represents the color black.
265     (NoColor): Helper class derived from Color to represent something
266     with no color.
267    
268     * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
269     stroke_width attributes. Made the 'classification' attribute private.
270     New methods for setting/getting the classification.
271    
272     * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
273     to get the classifcation and use the new ClassData* classes to
274     hold the classification data. Use Str2Num to convert numbers
275     properly.
276    
277     * Thuban/Model/save.py (Saver): Use new Color and Classification
278     methods
279    
280     * Thuban/UI/classifier.py (ClassGrid): New class to represent a
281     custom grid.
282     (ClassTable): Support for editing Values and Labels and for
283     changing what type (point or range) of data is stored in each
284     property based on how the user enters the data.
285     (Classifier): Support for saving the new classifications and
286     launching the dialog to edit a property.
287     (SelectPropertiesDialog): New class for editing the visual
288     properties of a classification (stroke color, width, and fill color)
289     (ClassPreviewer): Took the Draw method from ClassRenderer and
290     made most of it into this new class. Intend to use this class in
291     the SelectPropertiesDialog for previewing changes.
292    
293     * Thuban/UI/renderer.py: Use new Color and Classification methods.
294    
295     * Thuban/UI/tree.py: Formatting changes.
296    
297     * Doc/thuban.dtd: Add 'label' element
298    
299     * Thuban/common.py: New. Contains common routines used throughout
300     the code.
301     (Str2Num): Takes a string and converts it to the "best" type of
302     number.
303    
304 bh 405 2003-02-14 Bernhard Herzog <[email protected]>
305    
306     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
307     dragging flag is always set to 0 even when the tool implementation
308     raises an exception
309    
310 bh 402 2003-02-11 Bernhard Herzog <[email protected]>
311    
312     * Thuban/UI/application.py (ThubanApplication.splash_screen): New
313     method to create a splash screen.
314     (ThubanApplication.ShowMainWindow): New. Show the main window.
315     Needed so the splash screen can display the mainwindow
316     (ThubanApplication.OnInit): Call the
317     new splash_screen method to determine whether the application
318     should display a splash screen. If it displays a splash screen do
319     not immediately show the main window.
320    
321 jonathan 399 2003-02-11 Jonathan Coles <[email protected]>
322    
323     * Thuban/Model/classification.py: Added import line to fix
324     feature conflicts between running on python2.2 and python2.1.
325    
326     * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
327     onto the clinfo parameter, so removed the deepcopy().
328    
329 jonathan 396 2003-02-10 Jonathan Coles <[email protected]>
330    
331 tkoester 403 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
332 jonathan 396 Added element_open variable to track opening and closing of tags
333     so that tags that don't span more than one line are closed with
334     /> instead of </tag_name>. Use the GetDefault*() methods of
335     the Classification class.
336    
337     * Thuban/Model/classification.py (Classificaton): Added set and
338     get methods for the default data. The class also takes a layer
339     reference so that modification messages can be sent. Fixed the
340     methods to use the new ClassData class.
341     (ClassData): New class to encapsulate the classification data
342    
343     * Thuban/Model/layer.py (Layer): Remove the
344 tkoester 403 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
345 jonathan 396 SetDefault*() methods on the layer's classification object.
346 tkoester 403 (Layer.__init__): Use the new SetDefault*() methods in the
347 jonathan 396 Classification class.
348    
349     * Thuban/Model/load.py (ProcessSession): Use the new ClassData
350     object instead of a dictionary.
351    
352 tkoester 403 * Thuban/UI/classifier.py (ClassRenderer): New class to
353 jonathan 396 draw the classifications in the dialog box's table.
354     (Classifier): Modified to use the ClassRenderer class.
355    
356 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
357     methods of the Classification class.
358 jonathan 396
359     * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
360     of the ClassData class.
361    
362     * test/test_classification.py, test/test_layer.py,
363     test/test_map.py, test/test_session.py: Fix the tests to work
364     with the above code changes.
365    
366 jonathan 387 2003-02-03 Jonathan Coles <[email protected]>
367    
368     * Thuban/Model/classification.py (Classification): Added getNull()
369     to return the NullData reference
370    
371     * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
372     Layer.SetStrokeWidth): Modified these functions to change the
373     null data in the classification rather than keep these values
374     directly in the Layer class. Menu options to change these values
375     work again.
376    
377 jonathan 380 2003-01-28 Jonathan Coles <[email protected]>
378    
379 jonathan 384 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
380 tkoester 403 Fixed crashing problem on some systems. Dialog box shows
381 jonathan 380 classification data.
382    
383 jonathan 384 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
384     Colors in the tree view.
385    
386     * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
387     the tree info for classifications. Commented out unnecessary lines.
388    
389     * Thuban/Model/classification.py (Classification.TreeInfo): New
390     function to add information about the classification into the
391     tree view.
392    
393 tkoester 403 2003-01-27 Jan-Oliver Wagner <[email protected]>
394 jan 375
395 tkoester 403 * Thuban/__init__.py (_): New.
396 jan 375
397     * Thuban/Model/classification.py, Thuban/Model/extension.py,
398     Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
399 tkoester 403 Thuban/Model/session.py, Thuban/UI/application.py,
400     Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
401     Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
402     Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
403     Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
404     Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
405 jan 375
406 jonathan 370 2003-01-27 Jonathan Coles <[email protected]>
407    
408 tkoester 403 * Thuban/Model/layer.py: Classification initialization calls.
409 jonathan 370
410 tkoester 403 * Thuban/Model/classification.py: Created class to encapsulate
411     a layer classification. Supports specific data points and
412     ranges.
413 jonathan 370
414 tkoester 403 * Thuban/Model/load.py: Added support for loading classification
415     information.
416 jonathan 370
417 tkoester 403 * Thuban/Model/save.py: Added support for saving classification
418     information.
419 jonathan 370
420 tkoester 403 * Thuban/UI/classifier.py: Initial class for a dialog box for
421     specifying classification information.
422 jonathan 370
423 tkoester 403 * Thuban/UI/mainwindows.py: Support for opening the classifier
424     dialog.
425 jonathan 370
426 tkoester 403 * Thuban/UI/renderer.py: Support for drawing a layer with the
427     classification information.
428 jonathan 370
429 tkoester 403 * Data/iceland_sample_class.thuban: iceland_sample with
430     classification data.
431 jonathan 370
432 tkoester 403 * test/test_classification: Tests for the Classification class.
433 jonathan 370
434 bh 359 2002-12-09 Bernhard Herzog <[email protected]>
435    
436 bh 361 * test/test_command.py: New. Tests for the command classes.
437    
438 bh 359 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
439     (Command.IsTool): New method to distinguish between command
440     switching tools and other commands.
441    
442     * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
443     the tool to avoid direct assignments to instance variables
444     (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
445     (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
446     change the tool
447    
448     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
449     active tool's command turns insensitive, disable the tool.
450     (_tool_command): Use the new ToolCommand class
451    
452     * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
453     SelectTool method to change the tool
454     (iconfile): Use the ToolCommand class
455    
456 bh 354 2002-12-03 Bernhard Herzog <[email protected]>
457    
458     * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
459     the case of selected items that are not children of Layers or Maps
460     properly. Previously this bug would trigger an assertion in
461     wxWindows.
462    
463 frank 352 2002-11-06 Frank Koormann <[email protected]>
464    
465 bh 354 * Thuban/UI/mainwindow.py: Altered the order of tools in the
466     toolbar: First now are all navigation tools (Zoom In/Out, Pan,
467     Full Extent).
468 tkoester 403
469 bh 349 2002-10-23 Bernhard Herzog <[email protected]>
470    
471     * setup.py (setup call): version now 0.1.3
472    
473     * MANIFEST.in: Add the files in test/
474    
475     * test/README: Add note about tests requiring the iceland data
476    
477     * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
478     copyright notice.
479    
480 bh 344 2002-10-18 Bernhard Herzog <[email protected]>
481    
482     * test/test_map.py
483     (TestMapWithContents.test_projected_bounding_box): Use an explicit
484     epsilon.
485    
486     * test/support.py (FloatComparisonMixin.assertFloatEqual)
487     (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
488     message if the assertion fails and don't return the return value
489     of self.assert_. In assertFloatSeqEqual the return meant that not
490     all items of the sequence were compared.
491    
492 bh 326 2002-09-20 Bernhard Herzog <[email protected]>
493    
494 bh 341 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
495    
496     * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
497    
498 bh 338 * test/test_map.py (TestMapWithContents.test_tree_info): Create
499     the string with the bounding box on the fly because of platform
500     differences in the way %g is handled.
501    
502     * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
503     DBFfile too because Thuban layers can't yet cope missing DBF
504     files.
505    
506     2002-09-20 Bernhard Herzog <[email protected]>
507    
508 bh 326 * test/test_menu.py: Use initthuban instead of
509     add_thuban_dir_to_path to initialize Thuban.
510    
511     * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
512     Mixin class for float comparisons
513     (SubscriberMixin): New. Mixin class to test messages sent through
514     the Connector class
515    
516     * test/README: Fix a typo and add the -v flag to the command for
517     individual tests
518    
519 bh 335 * test/test_session.py: New. Test cases for Thuban.Model.session
520    
521     * test/test_proj.py: New. Test cases for Thuban.Model.proj
522    
523     * test/test_map.py: New. Test cases for Thuban.Model.map
524    
525     * test/test_layer.py: New. Test cases for Thuban.Model.layer
526    
527     * test/test_label.py: New. Test cases for Thuban.Model.label
528    
529     * test/test_connector.py: New. Test cases for Thuban.Lib.connector
530    
531     * test/test_color.py: New. Test cases for Thuban.Model.color
532    
533     * test/test_base.py: New. Test cases for Thuban.Model.base
534    
535 bh 322 2002-09-13 Bernhard Herzog <[email protected]>
536    
537     * Thuban/Model/session.py (Session.forwarded_channels): Forward
538     the CHANGED channel too.
539    
540     * Thuban/Model/map.py (Map.forwarded_channels): Forward the
541     CHANGED channel too.
542     (Map.__init__): Call the Modifiable constructor as well.
543    
544     * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
545     event if the modified flag changes.
546     (Modifiable.changed): Tweak the doc-string.
547    
548     * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
549     (MainWindow.set_position_text): Put the code that puts the text
550     with the mouse position into the status bar into the new method
551     set_position_text so that it can overwritten in derived classes.
552    
553 bh 317 2002-09-12 Bernhard Herzog <[email protected]>
554    
555     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
556     message box on the main window.
557    
558 bh 313 2002-09-11 Bernhard Herzog <[email protected]>
559    
560     * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
561     the 'E' because it's less likely to interfere with other menu
562     entries.
563 bh 315 (MainWindow.build_menu): remove an incorrect comment.
564 bh 313
565 bh 311 2002-09-10 Bernhard Herzog <[email protected]>
566    
567     * Thuban/UI/mainwindow.py (MainWindow.Map): New.
568     (_tool_command): Add sensitive parameter
569     (_has_visible_map): Sensitivity callback to tools and other
570     commands that require a visible map. Use it in map_zoom_in_tool,
571     map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
572     and map_full_extent
573    
574 bh 308 2002-09-06 Bernhard Herzog <[email protected]>
575    
576     * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
577     VIEW_POSITION
578    
579 tkoester 403 2002-09-04 Frank Koormann <[email protected]>
580 frank 306
581     * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
582    
583 bh 302 2002-09-02 Bernhard Herzog <[email protected]>
584    
585 bh 304 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
586     wxWindows already and our implementation doesn't work correctly
587     with wxGTK 2.3:
588     (MapCanvas.__init__): Remove the instance variable
589     (MapCanvas.OnPaint): Always call do_redraw when there's a map to
590     be drawin
591     (MapCanvas.OnIdle): Removed.
592    
593 bh 302 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
594     a parameter to determine the size of the rectangle.
595     (MapCanvas.find_shape_at): Create the box around the point on a
596     layer by layer basis and make the size depend on the shape type.
597     This solves a problem with the selection of point shapes at the
598     border of the layer's bounding box
599    
600 bh 292 2002-08-30 Bernhard Herzog <[email protected]>
601    
602 bh 300 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
603     for the sensitivity of remove layer.
604     (_can_remove_layer): New. Sensitivity callback for remove layer
605     (Command layer_remove): Use _can_remove_layer
606    
607     * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
608     determine whether a given layer can be deleted.
609    
610 bh 297 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
611     (MapCanvas.do_redraw): Get rid of the unused update_region
612     instance variable
613    
614 bh 294 * Thuban/UI/view.py: Add/update some doc-strings.
615    
616 bh 292 * test/: new subdirectory with a bunch of unit tests.
617    
618     * test/README, test/test_table.py, test/test_save.py,
619     test/test_menu.py, test/test_load.py: Initial set of tests and
620     brief instructions on how to run them
621    
622 bh 287 2002-08-29 Bernhard Herzog <[email protected]>
623    
624 bh 291 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
625     arcs with multiple parts.
626    
627 bh 289 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
628     Handle degenrate rectangles.
629    
630 bh 287 * Thuban/Model/table.py: Make writing records work correctly:
631     (Table.__init__): Keep track of whether the DBF is open for
632     writing
633     (Table.write_record): Open the DBF file for writing when necessary
634    
635 bh 285 2002-08-27 Bernhard Herzog <[email protected]>
636    
637     * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
638     dbf files only for reading by default. Use a new writable dbf
639     object for writing.
640    
641 bh 278 2002-08-26 Bernhard Herzog <[email protected]>
642    
643 bh 282 * Thuban/UI/mainwindow.py: Refactor the context creation:
644     (MainWindow.Context): New method to return a context
645     (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
646     new method
647    
648 bh 278 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
649     layer table specific code from TableGrid into LayerTableGrid
650     (TableFrame, LayerTableFrame): Split the layer table specific code
651     from TableFrame into LayerTableFrame
652 bh 280 (LayerTableGrid.select_shape): Remove a debug print
653 bh 278
654     * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
655     LayerTableFrame
656    
657 bh 277 2002-08-23 Bernhard Herzog <[email protected]>
658    
659     * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
660     absolute filename.
661    
662 bh 269 2002-08-22 Bernhard Herzog <[email protected]>
663    
664 bh 275 * Thuban/Model/table.py (Table.write_record): New method to write
665     records.
666 tkoester 403 (Table.__init__): Open the DBF file for writing too.
667 bh 275
668     * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
669     into the underlying table.
670    
671     * extensions/shapelib/shapefil.h (DBFCommit),
672     extensions/shapelib/dbfopen.c (DBFCommit): New API function to
673     commit any changes made to the DBF file.
674    
675 bh 271 * Thuban/UI/mainwindow.py (make_check_current_tool)
676     (_tool_command): Put the code that generates the "checked"
677     callback into a separate function so that we can reuse it
678     elsewhere
679    
680 bh 269 * Thuban/Model/save.py (Saver): New class to handle serializing a
681     session into an XML file. The main reason to introduce a class is
682     that applications built on Thuban can derive from it so that they
683     can save additional information in a session file.
684     (save_session): Delegate almost all the work to the Saver class.
685     Rename the filename argument to file because it may be a file like
686     object now.
687    
688     * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
689     code. Remove the little test code which would be executed when the
690     module is run as a script which didn't work anymore since it can't
691     import the other Thuban modules.
692     (ProcessSession, load_session): Refactor the ProcessSession to
693     have one method for each element start and end tag so that derived
694     classes can easily override the processing of individual tags.
695     Also, always parse with namespaces enabled because applications
696     built on top of Thuban will likely use namespaces if they extend
697     the session file format.
698    
699 bh 266 2002-08-21 Bernhard Herzog <[email protected]>
700    
701     * setup.py (ThubanInstall.run): Don't repr install_lib_orig
702     because thubaninit_contents will do it for us.
703    
704 tkoester 403 2002-08-16 Jan-Oliver Wagner <[email protected]>
705 jan 265
706     * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
707     tree window already open
708    
709 bh 259 2002-08-15 Bernhard Herzog <[email protected]>
710    
711 bh 263 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
712     with self.
713    
714     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
715     when we have actually captured it.
716    
717 bh 259 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
718     shapefile and destroy the table.
719    
720     * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
721    
722 bh 254 2002-08-14 Bernhard Herzog <[email protected]>
723    
724 bh 256 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
725     instance variable columns
726     (RecordTable.GetTypeName): row and col may be negative in some
727     cases.
728    
729 bh 254 * setup.py (InstallLocal.initialize_options)
730     (InstallLocal.finalize_options, InstallLocal.user_options): New
731     option create-init-file to build a thubaninit.py when running
732     install_local
733     (InstallLocal.run): Create the thubaninit.py module when requested
734     (thubaninit_contents): Split the template into several parts and
735     create a new function thubaninit_contents that creates the
736     contents of a thubaninit module.
737     (ThubanInstall.run): Use the new function to create the thubaninit
738     module.
739    
740 bh 252 2002-07-30 Bernhard Herzog <[email protected]>
741    
742     * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
743     cleanup.
744     (ThubanApplication.MainLoop): Extend to automatically call OnExit.
745    
746     * Thuban/Model/session.py (Session.Destroy): Don't bypass the
747     direct base class' Destroy method.
748    
749     * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
750     layers.
751     (Map.Destroy): Destroy the label_layer as well and call the
752     inherited Desatroymethod first so that no more messages are
753     issued.
754     (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
755     message if the stacking order actually has changed. Add
756     doc-strings.
757     (Map.BoundingBox): Correct the doc-string.
758     (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
759     (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
760    
761     * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
762     all labels.
763    
764 bh 247 2002-07-29 Bernhard Herzog <[email protected]>
765    
766     * Thuban/Model/map.py (Map.subscribe_layer_channels)
767     (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
768     to a layer's channels into separate methods.
769     (Map.RemoveLayer, Map.AddLayer): Call the new methods
770     (Map.Destroy): Unsubscribe from a layer's channels before
771     destroying it.
772    
773     * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
774     selected_layer parameter to searched_layer which is the layer to
775     search in.
776     (MapCanvas.SelectShapeAt): New parameter layer to restrict the
777     search to that layer. Return the selected layer and shape.
778    
779     * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
780     typo
781    
782 bh 238 2002-07-24 Bernhard Herzog <[email protected]>
783    
784 bh 243 * Thuban/UI/application.py (ThubanApplication.create_session):
785     Extend the doc string.
786     (ThubanApplication.subscribe_session)
787     (ThubanApplication.unsubscribe_session): New methods to
788     subscribe/unsubscribe to/from session channels.
789     (ThubanApplication.SetSession): Call the new methods here.
790     (ThubanApplication.maps_changed, ThubanApplication.set_map):
791     Renamed set_map to maps_changed. Its now a subscriber for
792     MAPS_CHANGED.
793    
794     * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
795     x-coordinate in case of simple clicks
796    
797     * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
798     don't pass it as a parameter
799    
800     * Thuban/Model/session.py (Session.RemoveMap): New
801    
802 bh 238 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
803     window size into a parameter.
804    
805 bh 235 2002-07-23 Bernhard Herzog <[email protected]>
806    
807 bh 237 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
808     just commands.
809    
810 bh 235 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
811     parameter list a bit to allow setting the window title and the
812     initial message in the status bar. Update the callers.
813    
814     * Thuban/UI/application.py (ThubanApplication.OnInit)
815     (ThubanApplication.CreateMainWindow): Put the mainwindow
816     instantiation into a separate method so that it can be overridden
817     by a subclass.
818    
819 bh 230 2002-07-19 Bernhard Herzog <[email protected]>
820    
821 bh 234 * Thuban/Model/session.py: Issue a CHANGED message every time
822     another changed message is issued to make it easier to get
823     notified of changes.
824     (Session): Update the doc string
825     (Session.forward): Issue changed-events as CHANGED as well.
826     (Session.changed): Overwrite the inherited version to issue
827     CHANGED events as well.
828    
829     * Thuban/UI/tree.py: We can now simply subscribe to the session's
830     CHANGED channel to be informed of changes.
831     (SessionTreeCtrl.session_channels): Not needed any longer.
832 tkoester 403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
833 bh 234 Only have to (un)subscribe CHANGED
834    
835     * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
836    
837 bh 230 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
838     for the wxPython locale bug to __init__.py so that it's
839     automatically executed by anybody using UI code from Thuban.
840    
841 bh 225 2002-07-18 Bernhard Herzog <[email protected]>
842    
843 bh 228 * Thuban/UI/main.py (main): app no longer needs to be global
844    
845     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
846     as parameter and store it in an instance variable
847     (MainWindow.invoke_command, MainWindow.update_command_ui)
848     (MainWindow.save_modified_session, MainWindow.NewSession)
849     (MainWindow.OpenSession, MainWindow.SaveSession)
850     (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
851     application object.
852    
853     * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
854     the main window with self.
855    
856 bh 225 * Thuban/UI/context.py: New module with the context class
857    
858     * Thuban/UI/command.py (Command): Update doc string.
859    
860     * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
861     MainWindow.update_command_ui): Pass an instance of the context
862     class to the command's methods
863     (check_current_tool, call_method): Handle the new context
864     implementation
865    
866     * Examples/simple_extensions/simple_tool.py (simple_tool,
867     check_simple_tool): Handle the new context implementation
868    
869     * Examples/simple_extensions/simple_command.py (simple_command):
870     Handle the new context implementation. Update the comments about
871     the context.
872    
873     * Thuban/UI/application.py (ThubanApplication.SetSession): Add
874     doc-string
875     (ThubanApplication.Session): New method to return the session
876     object
877    
878     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
879     interactor's selected_layer may not be a layer of the current
880     session when the tree is updated while a new session is being set.
881    
882 bh 217 2002-07-17 Bernhard Herzog <[email protected]>
883    
884     * Thuban/UI/tree.py (color_string): Removed. No longer used.
885     (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
886     update_tree into update_tree and add_items. The tree now uses a
887     more generic way to display the contents of the tree.
888     (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
889    
890     * Thuban/Model/layer.py (Layer.TreeInfo),
891     Thuban/Model/extension.py (Extension.TreeInfo),
892     Thuban/Model/map.py (Map.TreeInfo),
893 tkoester 403 Thuban/Model/session.py (Session.TreeInfo):
894 bh 217 Add TreeInfo methods to implement the new tree view update scheme
895    
896 bh 216 2002-07-16 Bernhard Herzog <[email protected]>
897    
898     * Thuban/UI/application.py: Don't use "import from" for the
899     MainWindow. It can't always be resolved.
900     (ThubanApplication.OnInit): change reference to MainWindow
901     accordingly.
902    
903     * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
904     completely
905    
906 bh 213 2002-07-10 Bernhard Herzog <[email protected]>
907    
908     * setup.py (create_init_module): New configurable variable whose
909     default depends on the platform we're running on.
910     (ThubanInstall.initialize_options): Initialize
911     self.create_init_module from the global create_init_module
912     (ThubanInstall.user_options): indictate that the options
913     create-init-module and init-module-dir have arguments.
914    
915     * setup.py: In the setup call change the version number to include
916     cvs.
917    
918     * MANIFEST.in: Add the files in Examples
919    
920 bh 205 2002-07-09 Bernhard Herzog <[email protected]>
921    
922 bh 210 * setup.py: In the setup call, use the thuban homepage as the
923     value of the url parameter.
924    
925 bh 208 * Examples: New subdirectory for examples.
926    
927     * Examples/simple_extensions/simple_tool.xpm,
928     Examples/simple_extensions/simple_tool.py,
929     Examples/simple_extensions/simple_command.py,
930     Examples/simple_extensions/README: Simple examples showing how to
931     add new commands and tools.
932    
933 bh 207 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
934     bdist_rpm that we also have an install script.
935     (bdist_inno): Add 2002 to the copyright notice.
936    
937 bh 205 * setup.py: Create a file in python's site-packages directory to
938     make installation of Thuban as a library easier.
939     (ThubanInstall.user_options): Add two new options,
940     create-init-module and init-module-dir
941     (ThubanInstall.expand_with_pure_python_dirs): New method to expand
942     filenames for installation in the default directories.
943     (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
944     the inherited methods to capture some filenames before they're
945     transformed too much by distutils.
946     (ThubanInstall.run): Create the init module if requested.
947     (ThubanInstall.thuban_init_filename): New method to return the
948     full name of the init module.
949     (ThubanInstall.get_outputs): Append the filename of the init
950     module.
951    
952 bh 202 2002-07-08 Bernhard Herzog <[email protected]>
953    
954 bh 205 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
955     handle the prefix properly which means that the default for the
956     installation prefix should be /usr for RPMs and /usr/local when
957     doing a normal source install.
958     (bdist_rpm_install_script): Script to override the default install
959     commands in the specfile generated by the bdist_rpm command.
960     (thuban_bdist_rpm.user_options): Add a prefix option
961     (thuban_bdist_rpm.initialize_options): Init the prefix option.
962     Create the script files for the spec files as empty files here
963     (thuban_bdist_rpm._make_spec_file): Override the inherited method
964     to fill the script files with content.
965    
966 bh 202 * Thuban/Model/save.py (relative_filename): Wrapper around
967     Thuban.Lib.fileutil.relative_filename that accepts an empty dir
968     argument. save_session now automatically uses this version,
969     solving a problem when saving to a relative filename.
970    
971     * setup.py: In the setup call, make sure that the library
972     directories are under $prefix/lib not directly under $prefix.
973    
974 tkoester 403 2002-06-20 Jan-Oliver Wagner <[email protected]>
975 jan 199
976     * Thuban/Model/extension.py: new module to handle extension objects.
977     * Thuban/Model/messages.py: new messages for extensions.
978     * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
979     Session.AddExtension): new for handling extensions.
980     Also some other minor changes to round up extension handling.
981     * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
982     of Extension titles and title and names of its objects.
983    
984 bh 194 2002-05-29 Bernhard Herzog <[email protected]>
985    
986     * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
987 bh 202 the events for a command.
988 bh 194 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
989     Call bind_command_events to bind the events. add_toolbar_command
990     can now bind events too so that it's possible to have commands
991     that are only available through the toolbar.
992     (MainWindow.init_ids): New instance variable events_bound to keep
993     track of for which commands events have been bound.
994    
995 bh 190 2002-05-28 Bernhard Herzog <[email protected]>
996    
997     * Thuban/UI/menu.py: New module to build and manage menus.
998    
999     * Thuban/UI/mainwindow.py: Remove some unused imports.
1000     (MainWindow.__init__, main_menu): move the definition of the main
1001     menu from __init__ to the Menu instance main_menu.
1002     (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
1003     build the menu bar and sub-menus from a menu description.
1004    
1005     * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
1006     startup file
1007     (ThubanApplication.read_startup_files): New method to run
1008     ~/.thuban/thubanstart.py
1009    
1010 bh 192 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
1011     Move the toolbar definition to the Menu instance main_toolbar.
1012     (MainWindow.build_toolbar): New method to build the toolbar
1013     similar to the build_menu methods
1014    
1015 bh 184 2002-05-23 Bernhard Herzog <[email protected]>
1016    
1017 bh 186 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
1018     layer_outline_color. Fix it in the definition of the command too.
1019    
1020 bh 184 * Thuban/UI/command.py (Command): Fix typo in doc string
1021    
1022 bh 182 2002-05-22 Bernhard Herzog <[email protected]>
1023    
1024     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
1025     in the docstring
1026    
1027 bh 175 2002-05-15 Bernhard Herzog <[email protected]>
1028    
1029 bh 180 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
1030     when the shapefile is empty.
1031     (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
1032     now return None for empty shapefiles. Update doc-strings.
1033    
1034     * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
1035     the layer's bbox being None.
1036    
1037     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
1038     layer's bbox being None.
1039    
1040 bh 175 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
1041     necessary.
1042     (MapCanvas.__init__): New instance variables, last_selected_layer
1043     and last_selected_shape to determine how the selection has
1044     changed.
1045    
1046     * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
1047     AutoSizeColumns because it will cause a traversal of the entire
1048     table which for large .dbf files will take a very long time.
1049    
1050 bh 172 2002-05-14 Bernhard Herzog <[email protected]>
1051    
1052     * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
1053     maximum depth for the tree than shapelib does by default.
1054    
1055 bh 165 2002-05-10 Bernhard Herzog <[email protected]>
1056    
1057     * setup.py (py_modules): The shptree modules doesn't have a
1058     wrapper, so don't include it in the py_modules
1059    
1060 bh 163 2002-05-08 Bernhard Herzog <[email protected]>
1061    
1062     * extensions/shapelib/shptree.c (compare_ints): Make arguments
1063     const void * as in the qsort prototype
1064     (SHPTreeFindLikelyShapes): Remove some unused variables.
1065    
1066     * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
1067     maintains to redraw the window during a drag.
1068     (MapCanvas.unprojected_rect_around_point): New method to determine
1069     a small region around a point for hit-testing.
1070     (MapCanvas.find_shape_at): Only test the shapes in a small region
1071     around the point.
1072    
1073     * setup.py: Increment the version to 0.1.2
1074    
1075     * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
1076     debug print and set session to None after unsubscribing
1077    
1078 bh 146 2002-05-07 Bernhard Herzog <[email protected]>
1079    
1080 bh 154 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
1081     the file to have a .thuban extension.
1082    
1083 bh 152 * Thuban/UI/tree.py (session_channels): New class constant with
1084     all the session channels to subscribe to to update the tree
1085     (SessionTreeCtrl.session_changed): Remember the session so that we
1086     can unsubscribe properly. Use the new class constant to
1087     unsubscribe from the old session and subscribe to the new one.
1088     (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
1089     subscriptions of the SessionTreeCtrl.
1090     (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
1091    
1092     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
1093     Session Tree" command to the file menu.
1094    
1095     * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
1096     as update_region to the renderer.
1097    
1098     * Thuban/UI/renderer.py
1099     (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
1100     update box is now directly a tuple, not a wxRect anymore.
1101    
1102     * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
1103     prints.
1104    
1105     2002-05-07 Bernhard Herzog <[email protected]>
1106    
1107 bh 146 * setup.py: Add the shptree extension module. See
1108     extensions/pyshapelib/ChangeLog for more details.
1109    
1110     * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
1111     extensions/shapelib/dbfopen.c: Really update to the versions of
1112     shapelib 1.2.9. For some reason it wasn't really done on
1113     2002-04-11.
1114    
1115     * extensions/shapelib/shptree.c: Modified version of shptree.c of
1116     shapelib 1.2.9. The only real difference is the use of qsort
1117     instead of a bubble sort implementation
1118    
1119     * Thuban/Model/layer.py (Layer.__init__): New instance variable
1120     shapetree to hold the shapelib quadtree for the shapefile
1121     (Layer.open_shapefile): Create the quad tree.
1122     (Layer.ShapesInRegion): New method to return the ids of shapes in
1123     a given region using the quad tree.
1124    
1125     * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
1126     comment
1127     (draw_polygon_shape): Accept both arcs and polygons.
1128     (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
1129     the api.
1130    
1131     * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
1132     return the shape ids to be rendered in a given layer.
1133     (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
1134     ids. Use draw_polygon_shape to draw arc shapes as well.
1135     (ScreenRenderer.RenderMap): New parameter for the rectangle that
1136     has to be updated
1137     (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
1138     calling it's ShapesInRegion method.
1139    
1140     * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1141     update_region for the update region.
1142     (MapCanvas.OnPaint): Maintain the update region
1143     (MapCanvas.do_redraw): Pass the bounding box of the update_region
1144     to the renderer when drawing the bitmap. Reset the update_region.
1145    
1146 bh 129 2002-05-03 Bernhard Herzog <[email protected]>
1147    
1148 bh 131 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
1149     MainWindow.OpenSession): Change the file extension of the session
1150     files to .thuban
1151    
1152 bh 129 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
1153     Move the map channels to be forwarded by the session into the
1154 bh 146 class constant with forwarded_channels. Also add
1155     LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
1156     forwarded_channels
1157 bh 129
1158     * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
1159     typo and some rewording).
1160    
1161 bh 126 2002-05-02 Bernhard Herzog <[email protected]>
1162    
1163     * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
1164     around to speed up most redraws:
1165     (MapCanvas.__init__): New instance variable bitmap which holds the
1166     bitmap
1167     (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
1168     self.bitmap to draw.
1169     (MapCanvas.full_redraw): New method to force a full redraw
1170     including the bitmap
1171     (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
1172     make sure the bitmap is redrawn.
1173     (MapCanvas.projection_changed, MapCanvas.set_view_transform,
1174     MapCanvas.shape_selected): Call full_redraw instead of readraw to
1175     make sure the bitmap is redrawn.
1176     (MapCanvas.OnSize): New method to handle size events so that the
1177     bitmap can be redrawn.
1178    
1179 bh 124 2002-04-29 Bernhard Herzog <[email protected]>
1180    
1181     * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1182     canvas' VIEW_POSITION event
1183     (MainWindow.view_position_changed): Handler for VIEW_POSITION.
1184     Update the text in the status-bar accordingly.
1185    
1186     * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
1187     (MapCanvas.__del__): Implement because Publisher.__del__ has to be
1188     called.
1189     (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
1190     current_position
1191     (MapCanvas.set_current_position): New method to set
1192     current_position. Issue a VIEW_POSITION event
1193     (MapCanvas.CurrentPosition): New public method to return the value
1194     of current_position. Should be called when the VIEW_POSITION event
1195     is processed.
1196     (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
1197     Update the position.
1198     (MapCanvas.OnLeaveWindow): Set the position to None.
1199    
1200     * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1201     position in the statusbar
1202    
1203 tkoester 403 2002-04-26 Frank Koormann <[email protected]>
1204 frank 120
1205     * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1206    
1207 tkoester 403 2002-04-24 Frank Koormann <[email protected]>
1208    
1209 frank 118 * Resources/Bitmaps/identify.xpm: shadow added
1210    
1211     * Resources/Bitmaps/fullextent.xpm: new
1212 jan 116
1213 tkoester 403 2002-04-22 Jan-Oliver Wagner <[email protected]>
1214 jan 116
1215 tkoester 403 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1216     box
1217 jan 114
1218 tkoester 403 2002-04-21 Jan-Oliver Wagner <[email protected]>
1219    
1220 jan 114 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1221    
1222     * Thuban/UI/tree.py (update_tree): added added map extent
1223    
1224     * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1225 tkoester 403 icon; added map_full_extend as tool
1226 jan 114
1227 tkoester 403 2002-04-19 Jan-Oliver Wagner <[email protected]>
1228 jan 107
1229     * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1230     saving _new_ sessions
1231    
1232     * Thuban/Model/session.py (create_empty_session): new session
1233     don't have a filename (set to None)
1234    
1235     * Thuban/UI/tree.py (update_tree): added filename and modified flag
1236    
1237     * Thuban/Model/load.py (ProcessSession): convert projection
1238     parameters from unicode to regular string
1239    
1240     * Data/iceland_sample.session: Added UTM Zone 26 projection.
1241    
1242 bh 100 2002-04-11 Bernhard Herzog <[email protected]>
1243    
1244     * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1245     extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1246     1.2.9
1247    
1248     * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1249     the pyshapelib directoy into the list of include dirs, so that
1250     pyshapelib_api.h can be found.
1251    
1252     * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1253     holds the pyshapelib C-API
1254     (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1255     pyshapelib_api to access the shapelib functions.
1256     (initwxproj): Import the c_api from the shapelib module and
1257     initialize pyshapelib_api.
1258    
1259 bh 89 2002-04-04 Bernhard Herzog <[email protected]>
1260    
1261 bh 91 * setup.py (thuban_bdist_rpm.initialize_options): Use
1262     initialize_options to create the scripts for the rpm.
1263    
1264 bh 89 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1265    
1266 bh 85 2002-04-03 Bernhard Herzog <[email protected]>
1267    
1268 bh 87 * setup.py: Increment version to 0.1.1
1269    
1270 bh 85 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1271     Layer" and "Remove Layer" commands from the layer menu to the map
1272     menu
1273    
1274 bh 83 2002-02-15 Bernhard Herzog <[email protected]>
1275    
1276     * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1277     argument (python <= 1.5.2 erroneously accepted multiuple
1278     arguments)
1279    
1280 bh 81 2002-02-04 Bernhard Herzog <[email protected]>
1281    
1282     * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1283     RecordGrid in the identifyview.
1284     (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1285     IdentifyListCtrl. The grid allows editing of the values.
1286    
1287     * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1288     implementing a grid for a single row of a thuban table.
1289    
1290     * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1291     layers by default. Easier to use than the previous default of only
1292     searching through the select layer which meant that if no layer
1293     was selected, you couldn't select a shape.
1294    
1295     * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1296    
1297     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1298     stroke_width attribute
1299    
1300     * Thuban/Model/save.py (save_session): Write the new stroke_width
1301     attribute
1302    
1303     * Thuban/Model/load.py (ProcessSession.startElement): Read the
1304     stroke_width attribute
1305    
1306     * Thuban/Model/layer.py (Layer.__init__): New parameter and
1307     instance variable stroke_width
1308     (Layer.SetStrokeWidth): Set the stroke_width.
1309    
1310 bh 72 2002-02-01 Bernhard Herzog <[email protected]>
1311    
1312     * extensions/thuban/wxproj.cpp (project_points): Fix two
1313     off-by-one errors in the last loop that joins the various parts
1314     together.
1315    
1316 bh 71 2002-01-14 Bernhard Herzog <[email protected]>
1317    
1318     * setup.py (data_dist.make_distribution): Fix some typos
1319    
1320 bh 70 2001-09-18 Bernhard Herzog <[email protected]>
1321    
1322     * README: Slight tweaking in preparation for the 0.1 release
1323    
1324     * setup.cfg: Add section for sdist to create both tgz and zip
1325     archives
1326    
1327     * setup.py: increase version number to 0.1
1328     (data_dist): New command class for data distribution
1329    
1330 bh 64 2001-09-14 Bernhard Herzog <[email protected]>
1331    
1332 bh 70 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1333     Handle the case of no layer (i.e. layer is None) properly.
1334    
1335 tkoester 403 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1336 bh 70 Set the initial selection of the combo boxes to reflect the
1337     projection we're starting with in a way that works on windows,
1338     too.
1339    
1340 bh 64 * Thuban/Lib/connector.py (Connector.print_connections): Print the
1341     puiblisher's ids in hex to make it easier to compare them to the
1342     standard repr of python methods
1343    
1344     * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1345     messages
1346    
1347 bh 59 2001-09-13 Bernhard Herzog <[email protected]>
1348    
1349 bh 64 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1350     deselect the layer if no layer is selected
1351    
1352 bh 59 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1353     idle time when there actually is something to draw. If there's
1354     nothing to draw simply clear the window
1355     (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1356     (MapCanvas.SetMap): force a redraw in all cases because
1357     FitMapToWindow doesn't always do it.
1358     (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1359     specify the point to move into the center of the window
1360     (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1361     dragged, zoon in/out by a factor of 2
1362 bh 64 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1363     index, i.e. reversed drawing order) so that objects appearing to
1364     be in from of others are selected first. This is probably mostly
1365     relevant for point shapes where the symbols used may overlap
1366 bh 59
1367     * Thuban/Model/session.py (create_empty_session): Unset the
1368     modified bit before returning it
1369    
1370     * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1371     create_empty_session session to create the new, empty session.
1372    
1373     * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1374     the tool bitmaps.
1375     (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1376     the code that asks whether the session should be saved into the
1377     new method save_modified_session.
1378     (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1379     method to save modified session here too.
1380    
1381 bh 55 2001-09-11 Bernhard Herzog <[email protected]>
1382    
1383     * setup.py (InnoIconItem): fix typo
1384    
1385     (thuban_bdist_inno.run):
1386     (bdist_inno.run): Move the decision not to create symlinks on
1387     non-nt platforms to thuban_bdist_inno and do it unconditinally
1388     since we never want to create the symlinks here
1389    
1390 bh 48 2001-09-10 Bernhard Herzog <[email protected]>
1391    
1392 bh 53 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1393     identify view immediately
1394    
1395     * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1396     and SelectableRecordListCtrl that implement the code shared by the
1397     identify view and the label dialog
1398    
1399     * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1400     new class RecordListCtrl
1401    
1402     * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1403     return value of GetValue is None instead of using it as a boolean
1404     directly so that Zero numbers are handled properly.
1405     (LabelListCtrl): Derive from the new class
1406     SelectableRecordListCtrl
1407    
1408 bh 48 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1409     (Proj4Dialog.dialogLayout): Make the window resizable and set the
1410     size of the text control explicitly to make the sizers work on
1411     both Windows and X.
1412    
1413 bh 44 2001-09-07 Bernhard Herzog <[email protected]>
1414    
1415     * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1416     that can limit the search to the currently selected layer.
1417     (MapCanvas.SelectShapeAt): Make sure that the currently selected
1418     layer stays selected even when no shape is found
1419 bh 46 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1420     height do nothing (avoids zero division errors)
1421 bh 44
1422 bh 32 2001-09-06 Bernhard Herzog <[email protected]>
1423    
1424 bh 42 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
1425     Correct the spelling of SessionTreeCtrl. dabbrev is too damn
1426     convenient :-)
1427     (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
1428     a new instvar layer_to_item to map layers to tree items
1429     (SessionTreeCtrl.layer_selected): Select the appropriate tree item
1430     to match the current selection in the interactor
1431    
1432 bh 40 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
1433     (Interactor.HasSelectedLayer): New methods to query the current
1434     selection
1435    
1436     * Thuban/UI/mainwindow.py (MainWindow.current_layer):
1437     (MainWindow.has_selected_layer): Simply call the appropriate
1438     interactor method
1439    
1440     * Thuban/UI/mainwindow.py (MainWindow.__init__):
1441     (MainWindow.LayerShowTable):
1442     (MainWindow.identify_view_on_demand): Store the interactor in an
1443     instvar and use that reference instead of going through main.app
1444    
1445 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1446     * Thuban/UI/application.py (ThubanApplication.OnInit):
1447 bh 40 * Thuban/UI/main.py (main): Create the session tree view in main
1448     with the new mainwindow method ShowSessionTree and not directly
1449     the application's OnInit method
1450    
1451     * Thuban/UI/tree.py (myTreeCtrlPanel):
1452     (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
1453     TreeCtrl isntead of a panel. This affects most method since we now
1454     refer to self instead of self.tree
1455     (SessionTreeView): New class implementing a non-modal dialog
1456     showing the session tree.
1457    
1458 bh 35 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
1459     layer to the tableview dialog.
1460    
1461     * Thuban/UI/tableview.py: Add some doc-strings
1462 tkoester 403 (TableGrid):
1463 bh 35 (TableGrid.OnRangeSelect):
1464     (TableGrid.OnSelectCell):
1465     (TableFrame.__init__):
1466     (TableFrame.row_selected):
1467     Selecting rows in the grid view now updates the selected shapes
1468     through the TableFrame. To achieve this we derive TableGrid from
1469     Publisher and introduce the message type ROW_SELECTED which the
1470     TableFrame subscribes to and which is issued by OnRangeSelect and
1471     OnSelectCell
1472    
1473     (DataTable.SelectRow): Removed because it's no longer needed in
1474     the row/shape selection scheme
1475    
1476 bh 32 * Thuban/UI/dialogs.py: New file implementing common classes for
1477     dialogs
1478    
1479     * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
1480     the SELECTED_SHAPE message anymore. This is now handled by the
1481     parent.
1482     (TableGrid.select_shape): Only update the selection if the shape
1483     is not None.
1484     (TableFrame): Inherit from the new NonModalDialog class.
1485     (TableFrame.__init__, TableFrame.select_shape): Handle the
1486     SELECT_SHAPE message.
1487     (TableFrame.OnClose): Extend the inherited method to unsubscribe
1488     SELECT_SHAPE
1489    
1490     * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
1491     (MainWindow.add_dialog):
1492     (MainWindow.dialog_open):
1493     (MainWindow.remove_dialog):
1494     (MainWindow.get_open_dialog): New methods to maintain a dictionary
1495     of opened non-modal dialogs.
1496    
1497     (MainWindow.__init__): Initialize the new non-modal dictionary
1498     management code
1499     (MainWindow.LayerShowTable): maintain separate dialogs for each
1500     table using the non-modal dialog management code to only open a
1501     view once for each table.
1502    
1503     (MainWindow.IdentifyTool):
1504     (MainWindow.__init__):
1505     (MainWindow.identify_view_on_demand): Don't open the identify view
1506     in IdentifyTool anymore. This will be done automatically by the
1507     new method identify_view_on_demand which handles the
1508     SELECTED_SHAPE message so that the identify view will be opened on
1509     demand
1510    
1511     * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
1512     the interactor argument. The SELECTED_SHAPE message is now handled
1513     by the parent.
1514     (IdentifyView.__init__): Add the interactor argument so that we
1515     can handle the SELECTED_SHAPE message here
1516     (IdentifyView.selected_shape): New method to handle the
1517     SELECTED_SHAPE messages
1518    
1519     * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
1520     NonModalDialog class
1521     (IdentifyView.OnClose): Extend the inherited version to
1522     unsubscribe SELECT_SHAPE
1523    
1524     * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
1525    
1526 bh 26 2001-09-05 Bernhard Herzog <[email protected]>
1527    
1528     * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1529 tkoester 403
1530 bh 26 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1531     interactor to pass through to the MapCanvas
1532 tkoester 403
1533 bh 26 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1534     argument to the MainWindow constructor to get rid of the ugly hack
1535     that made main.app available early just so that the mapcanvas
1536     could access the interactor object.
1537    
1538 bh 19 2001-09-04 Bernhard Herzog <[email protected]>
1539    
1540 bh 22 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
1541     that runs a modal message box
1542     (MainWindow.OnClose): Use the new method
1543     (MainWindow.RemoveLayer): Just do nothing in case no layer is
1544     selected. The command should be grayed out anyway, so there's no
1545     need to pop up a message box.
1546     (MainWindow.AddLayer): Pop up a message box with an error message
1547     if the shape file can't be opened
1548    
1549     * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
1550     immediately. This will cause an exception in case the file can't
1551     be opened and we can display an appropriate message.
1552    
1553 bh 19 * MANIFEST.in: Add extensions/pyprojection/LICENSE
1554    
1555     * setup.py (thuban_bdist_rpm): New class implementing a Thuban
1556     specific bdist_rpm command.
1557    
1558     * Thuban/UI/main.py: Catch ImportError exceptions when importing
1559     the locale module because it may not be available on some
1560     installations.
1561    
1562     * extensions/pyprojection/LICENSE: Copy of the license text in
1563     Projection.i. Having it in a separate file makes it easier to
1564     refer to license text in e.g. RPMs
1565    
1566 bh 18 2001-09-03 Bernhard Herzog <[email protected]>
1567    
1568 bh 19 * setup.py: use wx-config instead of wxgtk-config because it's
1569     more generic
1570    
1571     * setup.py (ThubanInstall.get_outputs): Add the symlink in
1572     <prefix>/bin to the outputs
1573     (ThubanInstall.link_file): New method to link files. We need this
1574     because the standard copy_files refuses to link non-existing
1575     files.
1576     (ThubanInstall.run): Remove the leading install root from the
1577     script filename if an install root was specified and use the new
1578     link_file method
1579 tkoester 403
1580 bh 18 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1581     the window when the first layer is added to the map.
1582    
1583     * setup.py (ThubanInstall.run): Honor the build root (self.root)
1584     when linking thuban.py to <prefix>/bin
1585    
1586 bh 16 2001-08-31 Bernhard Herzog <[email protected]>
1587    
1588     * setup.py: In the setup call, the install parameters shouldn't
1589     have trailing slashes because distutils on non-posix platforms
1590     doesn't like that. The same applies to other directories like
1591     "Resources/Bitmaps"
1592    
1593     In the configuration section for nt, move the wxWindows directory
1594     optins into the part clearly marked as editable.
1595    
1596     (InstallLocal.initialize_options):
1597     (InstallLocal.user_options): remove the currently unused debug
1598     flag
1599     (thuban_build_py.find_all_modules): Add this method so that it
1600     works for our case of having packages and modules in one
1601     distribution as well.
1602     (ThubanInstall.initialize_options):
1603     (ThubanInstall.finalize_options):
1604     (ThubanInstall.user_options):
1605     (ThubanInstall.boolean_options): Add new options, do-symlink and
1606     extra files. Since these are the first ThubanInstall specific
1607     options, override user_options and boolean_options
1608     (ThubanInstall.run): Honor the new do-symlink and extra-files
1609     options.
1610     (ThubanInstall.get_outputs): Add to override the base-class's
1611     version and add the extra-files to the outputs
1612     (bdist_inno): New class for windows distributions with Inno Setup
1613     (InnoIconItem): Helper class for bdist_inno
1614     (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1615     this together with the appropriate parameters, to the setup call.
1616 tkoester 403
1617 bh 16 * setup.cfg (bdist_inno): added new section for the inno setup
1618     installer
1619    
1620     * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
1621     changing_selection to avoid recursive selection events when
1622     modifying the selection in response to a selection event.
1623     (myTreeCtrlPanel.normalize_selection): Set the new inst var when
1624     changing the tree's selection.
1625     (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
1626     we're not being called indirectly from normalize_selection.
1627    
1628     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
1629     event.Check only if the command is actuall checkable.
1630     (MainWindow.__init__): Call the toolbar's Realize method to make
1631     sure that the items are actually shown
1632    
1633 bh 7 2001-08-28 Bernhard Herzog <[email protected]>
1634    
1635 bh 9 * setup.py: Fix some doc strings
1636    
1637 bh 7 * ChangeLog: started
1638    

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26