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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 478 - (hide annotations)
Thu Mar 6 16:45:32 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 59951 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26