/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1191 by jonathan, Thu Jun 12 17:01:45 2003 UTC revision 1584 by jan, Tue Aug 12 16:13:59 2003 UTC
# Line 1  Line 1 
1    2003-08-12  Jan-Oliver Wagner <[email protected]>
2    
3            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
4    
5    2003-08-12  Bernhard Herzog  <[email protected]>
6    
7            * po/de.po: New. German translations by Bjoern Broscheit
8    
9    2003-08-12  Bernhard Herzog  <[email protected]>
10    
11            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
12            strings have to be one string literal.
13    
14    2003-08-11  Bernhard Herzog  <[email protected]>
15    
16            * test/support.py (FloatComparisonMixin.assertPointListEquals):
17            New. This method was used in various derived classes, but it's
18            better to have it here.
19    
20            * test/test_shapefilestore.py
21            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
22            FloatComparisonMixin
23    
24            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
25            It's now in FloatComparisonMixin
26    
27            * test/test_derivedshapestore.py
28            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
29            in FloatComparisonMixin
30    
31    2003-08-11  Bernhard Herzog  <[email protected]>
32    
33            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
34            error message
35    
36    2003-08-08  Jan-Oliver Wagner <[email protected]>
37    
38            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
39            with version number.
40            Changed title to reflect version number of Thuban.
41    
42    2003-08-08  Jan-Oliver Wagner <[email protected]>
43    
44            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
45            the list corresponds to the "About" web page.
46    
47    2003-08-08  Bernhard Herzog  <[email protected]>
48    
49            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
50            Make sure translated strings are recognized as one string literal.
51    
52            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
53            Make sure translated strings are recognized as one string literal.
54    
55            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
56            translated strings are recognized as one string literal.
57    
58            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
59            sure translated strings are recognized as one string literal.
60    
61    2003-08-07  Bernhard Herzog  <[email protected]>
62    
63            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
64            Simply delegates to the original shapestore.
65    
66            * test/test_derivedshapestore.py
67            (TestDerivedShapeStore.test_raw_format): New. Test case for
68            DerivedShapeStore.RawShapeFormat
69    
70    2003-08-07  Bernhard Herzog  <[email protected]>
71    
72            Add raw data interface to shape objects.
73    
74            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
75            class to ShapefileShape which now holds shapefile specific
76            information.
77            (ShapefileShape.compute_bbox): Simplified to not cache any
78            information. The way this method is used that shouldn't matter
79            performance wise.
80            (ShapefileShape.RawData): New. Return the shapeid which is the raw
81            data format for shapes from shapefiles.
82            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
83            in the shape objects returned by a shapestore. For a
84            ShapefileStore this is always RAW_SHAPEFILE.
85            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
86            method.
87    
88            * test/test_shapefilestore.py
89            (TestShapefileStore.test_raw_format): New test to test the raw
90            format feature of shapes.
91    
92            * Thuban/Model/layer.py: Remove the unused import of Shape from
93            data. It was only there for interface compatibility but it's not
94            used inside of Thuban and the generic Shape class has gone away.
95    
96            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
97            the raw data format and only use an optimized version of its a
98            shapefile.
99    
100    2003-08-07  Bernhard Herzog  <[email protected]>
101    
102            * test/test_baserenderer.py (SimpleShape): Shape class for the
103            tests.
104            (SimpleShapeStore.Shape): Use SimpleShape instead of
105            Thuban.Model.data.Shape to make the tests independed of the coming
106            changes.
107    
108    2003-08-07  Bernhard Herzog  <[email protected]>
109    
110            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
111            (ThubanTestProgram): New classes that extend the respective
112            classes from unittest. These new version support skipping tests
113            under certain expected conditions. In the Thuban test suite we
114            uses this for tests that require the optional gdal support.
115            (run_tests): Use ThubanTestProgram instead of the unittest.main()
116    
117            * test/runtests.py (main): Use the new ThubanTestRunner instead of
118            the normal one from unittest
119    
120            * test/test_layer.py (TestLayer.test_raster_layer): If this test
121            is not run because gdal support isn't available report this to the
122            runner.
123    
124            * test/test_baserenderer.py
125            (TestBaseRenderer.test_raster_no_projection): Do not run this test
126            if gdal support isn't available and report this to the runner.
127    
128    2003-08-06  Bernhard Herzog  <[email protected]>
129    
130            Rearrange the renderers a bit, partly in preparation for changes
131            required for the postgis merge, partly to make it more testable.
132            Also make the representation of coordinates in Shapes more
133            consistent.
134    
135            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
136            this class is now in BaseRenderer. This class is now practically
137            only a specialization of BaseRenderer for rendering to an actual
138            wx DC.
139            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
140            to get the shapetype specific rendering functions.
141    
142            * Thuban/UI/baserenderer.py: New file with the basic rendering
143            logic. The code in this file is completely independend of wx.
144            (BaseRenderer): Class with the basic rendering logic
145    
146            * test/test_baserenderer.py: New. Test cases for BaseRenderer
147    
148            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
149            error_on_redraw to guard agains endless loops and stack overflows
150            when there's a bug in the rendering code that raises exceptions.
151            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
152            rendering into a separate method _do_redraw so that error handling
153            is a bit easier. When an exception occurs, set error_on_redraw to
154            true. When it's true on entry to OnIdle do nothing and return
155            immediately.
156    
157            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
158            Shape object will always have the coordinates as a list of list of
159            coordinate pairs (tuples).
160            (Shape.compute_bbox): Adapt to new representation.
161    
162            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
163            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
164            Shape objects.
165    
166            * test/test_shapefilestore.py
167            (ShapefileStoreTests.assertFloatTuplesEqual)
168            (ShapefileStoreTests.assertPointListEquals): Rename to
169            assertPointListEquals and change purpose to checking equality of
170            the lists returned by Shape.Points().
171            (TestShapefileStoreArc.test_shape)
172            (TestShapefileStorePolygon.test_shape)
173            (TestShapefileStorePoint.test_shape): Use the new
174            assertPointListEquals instead of assertFloatTuplesEqual
175    
176            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
177            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
178            and change purpose to checking equality of the lists returned by
179            Shape.Points().
180            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
181            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
182            (TestLayer.test_derived_store): Use the new assertPointListEquals
183            instead of assertFloatTuplesEqual
184    
185            * test/test_derivedshapestore.py
186            (TestDerivedShapeStore.assertFloatTuplesEqual)
187            (TestDerivedShapeStore.assertPointListEquals): Rename to
188            assertPointListEquals and change purpose to checking equality of
189            the lists returned by Shape.Points().
190            (TestDerivedShapeStore.test_shape): Use the new
191            assertPointListEquals instead of assertFloatTuplesEqual
192    
193    2003-08-06  Jan-Oliver Wagner <[email protected]>
194    
195            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
196            a bounding box. A dialog is raised in case, no bounding box
197            is found. This fixes bug #2043:
198            https://intevation.de/rt/webrt?serial_num=2043
199    
200    2003-08-05  Bernhard Herzog  <[email protected]>
201    
202            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
203            object look like a Color instantiation. Formerly it looked like a
204            tuple.
205    
206            * test/test_color.py (TestColor.test_repr)
207            (TestColor.test_equality, TestColor.test_inequality): New. test
208            some more apects of the Color class
209            (TestTransparent.test_repr, TestTransparent.test_hex)
210            (TestTransparent.test_equality): New. Test cases for the
211            Transparent object.
212    
213    2003-08-04  Jan-Oliver Wagner <[email protected]>
214    
215            * Doc/manual/thuban-manual.xml: a number of small improvements.
216            The resulting file is the version submitted for GREAT-ER II.
217    
218    2003-08-01  Bernhard Herzog  <[email protected]>
219    
220            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
221            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
222            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
223    
224            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
225            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
226            (ThubanEndBusyCursor): Add doc-strings
227    
228    2003-08-01  Bernhard Herzog  <[email protected]>
229    
230            First step towards PostGIS integration. More abstraction by movin
231            more code from the layer to the shapestore. More methods of the
232            layer are now simply delegated to the equivalent method of the
233            shapestore. The SHAPETYPE_* constants are now in data not in
234            layer.
235    
236            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
237            (SHAPETYPE_POINT, Shape): Move these constants and classes from
238            layer.py to data.py
239            (ShapefileStore.__init__): More Initialization for the new methods
240            and functionality.
241            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
242            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
243            (ShapefileStore.Shape): New methods that were formerly implemented
244            in the layer.
245            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
246            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
247            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
248            equivalents of the new shape methods. These versions are simply
249            delegated to the original shapstore.
250    
251            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
252            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
253            (Layer.SetShapeStore): Removed the initializatin of instance
254            variables that were needed for the stuff that's now in
255            ShapefileStore
256            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
257            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
258            shapestore.
259    
260            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
261            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
262            instead of layer.
263    
264            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
265    
266            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
267    
268            * test/test_layer.py: Import the SHAPETYPE_* constants from data
269            instead of layer.
270            (TestLayer.test_derived_store): Remove the test for the exception
271            when instantiating the DerivedShapeStore with an incompatible
272            table which is now in test_derivedshapestore.py. Add some more
273            tests of the layer methods to determine whether they work for a
274            DerivedShapeStore as well.
275    
276    2003-07-31  Jonathan Coles   <[email protected]>
277    
278            * Doc/manual/thuban-manual.xml: Fix the list of required packages
279            by just listing the name and where they can be found.
280    
281    2003-07-31  Frank Koormann   <[email protected]>
282    
283            * Doc/manual/thuban-manual.xml:
284            Changed the screenshot elements to figure.
285            Changed some variablelist elements to itemizedlist.
286            Added section on GDAL formats.
287    
288    2003-07-31  Jonathan Coles   <[email protected]>
289    
290            * Doc/manual/thuban-manual.xml: Added a few sentences about
291            the Fix Border Color option when generating classes.
292    
293    2003-07-30  Jonathan Coles   <[email protected]>
294    
295            * Thuban/Model/classgen.py: Add docstrings. Rename specific
296            Ramp instances to use lower_case_style.
297    
298            * Thuban/UI/classgen.py: Use renamed Ramp instances.
299            
300            * Thuban/UI/classifier.py: Add docstrings.
301    
302            * Thuban/UI/dock.py: Add docstrings.
303    
304            * test/test_classgen.py: Use renamed Ramp instances.
305    
306    2003-07-30  Bernhard Herzog  <[email protected]>
307    
308            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
309            was never used in Thuban.
310    
311    2003-07-30  Bernhard Herzog  <[email protected]>
312    
313            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
314            method directly instead of going through the transient_table
315            method. This faster because transient_table may force the copy of
316            a DBF file into the transient database and setting a table's title
317            doesnm't affect the title of the associated transient table, so
318            this fixes RT #2042
319    
320            * Thuban/UI/main.py (__version__): Don't import the already
321            removed show_exception_dialog.
322    
323    2003-07-29  Jonathan Coles   <[email protected]>
324    
325            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
326            Put back this method and remove the equivalent function since we
327            are setting the exception hook from within this class (OnInit).
328    
329    2003-07-29  Jonathan Coles   <[email protected]>
330    
331            * Doc/manual/images/5_2_custom_ramp.png,
332            Doc/manual/images/5_2_quantiles.png,
333            Doc/manual/images/5_2_uniform_dist.png,
334            Doc/manual/images/5_2_unique_values.png,
335            Doc/manual/images/8_int_error.png: New screen shots.
336    
337            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
338            some points, and added more screen shots.
339    
340    2003-07-29  Bernhard Herzog  <[email protected]>
341    
342            * Thuban/Model/data.py: Remove the now unused import of warnings
343    
344    2003-07-29  Bernhard Herzog  <[email protected]>
345    
346            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
347            deprecated since before the 0.8 release and isn't used in Thuban
348            itself anymore.
349    
350            * Thuban/Model/transientdb.py: Remove some unnecessary imports
351    
352    2003-07-29  Jonathan Coles   <[email protected]>
353    
354            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
355            python exception hook here so that we are sure to catch any
356            Thuban exception that happen during initialization.
357    
358            * Thuban/UI/main.py (main): Don't set the exception hook here,
359            it will get set in ThubanApplication.OnInit.
360    
361    2003-07-29  Jonathan Coles   <[email protected]>
362                                                                                
363            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
364            Removed and called it show_exception_dialog() so that the exception
365            handler can be set before the class is created.
366                                                                                
367            * Thuban/UI/main.py (main): Install the exception handler before
368            a ThubanApplication is created.
369                                                                                    
370    2003-07-29  Bernhard Herzog  <[email protected]>
371    
372            * po/it.po: New. Italian translation by Maurizio Napolitano
373    
374            * po/ru.po: New. Russian translation by Alex Shevlakov
375    
376    2003-07-29  Frank Koormann   <[email protected]>
377    
378            * Doc/manual/thuban-manual.xml: Extended section on supported
379            projections.
380            
381    2003-07-29  Frank Koormann   <[email protected]>
382    
383            * Doc/manual/thuban-manual.xml: gaspell-checked.
384    
385    2003-07-29  Jonathan Coles   <[email protected]>
386    
387            * Doc/manual/images/3_5_legend.png: Added border to improve look
388            on white background.
389    
390    2003-07-29  Jonathan Coles   <[email protected]>
391    
392            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
393            descriptions for the legend toolbar.
394    
395            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
396            cursor from dialog box.
397    
398    2003-07-28  Jonathan Coles   <[email protected]>
399    
400            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
401    
402            * Doc/manual/images/2_4_session_tree.png,
403            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
404            Doc/manual/images/4_2_layer_properties.png,
405            Doc/manual/images/4_2_raster_layer_properties.png,
406            Doc/manual/images/5_3_genclass.png,
407            Doc/manual/images/5_classification.png,
408            Doc/manual/images/6_projection.png,
409            Doc/manual/images/7_1_table_view.png,
410            Doc/manual/images/7_2_5_join.png: New screenshots.
411    
412    2003-07-24  Jonathan Coles   <[email protected]>
413    
414            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
415    
416    2003-07-24  Jonathan Coles   <[email protected]>
417    
418            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
419            chapter on Layer Management.
420    
421            * Doc/manual/Makefile: New. Makefile to generate all formats for the
422            manual and images.
423    
424    2003-07-24  Bernhard Herzog  <[email protected]>
425    
426            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
427            it annoys lintian which warns about these files not being
428            executable. The #1 isn't necessary here since if you absolutely
429            must execute them you can always say "python <filename>".
430    
431            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
432            superfluous code to set brush and pen for point shapes
433    
434            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
435            belong in viewport anyway
436    
437    2003-07-24  Frank Koormann   <[email protected]>
438    
439            * Doc/manual/thuban-manual.xml: Added section on table management.
440    
441    2003-07-24  Bernhard Herzog  <[email protected]>
442    
443            * test/runtests.py (main): Recognize the long "verbose" option
444            correctly.
445    
446    2003-07-22  Jonathan Coles   <[email protected]>
447    
448            * Doc/manual/thuban-manual.xml: Continue to write first revision
449            of the manual.
450    
451            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
452            with Begin/EndDrawing() calls to ensure we aren't doing to
453            many updates to the dc during rendering.
454            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
455            a pen and brush argument so they need to be passed to the function.
456    
457            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
458            Calculates the minimum and maximum scale values. Factored out
459            of set_view_transform so that it could be used to zoom all the
460            way into a single point.
461            (ViewPort.set_view_transform): Call calc_min_max_scales().
462            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
463            if only a single point is selected.
464    
465            * Doc/manual/images/1_2_legend_close.png,
466            Doc/manual/images/1_2_legend_dock.png,
467            Doc/manual/images/1_2_mainwindow.png,
468            Doc/manual/images/1_2_mainwindow.ps,
469            Doc/manual/images/1_2_mainwindow.sk,
470            Doc/manual/images/3_2_fullextent.png,
471            Doc/manual/images/3_2_fulllayerextent.png,
472            Doc/manual/images/3_2_fullshapeextent.png,
473            Doc/manual/images/3_2_pan.png,
474            Doc/manual/images/3_2_zoomin.png,
475            Doc/manual/images/3_2_zoomout.png,
476            Doc/manual/images/3_3_identify.png,
477            Doc/manual/images/3_3_label.png,
478            Doc/manual/images/3_5_invisible.png,
479            Doc/manual/images/3_5_movedown.png,
480            Doc/manual/images/3_5_moveup.png,
481            Doc/manual/images/3_5_props.png,
482            Doc/manual/images/3_5_tobottom.png,
483            Doc/manual/images/3_5_totop.png,
484            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
485    
486    2003-07-18  Bernhard Herzog  <[email protected]>
487    
488            * Thuban/UI/messages.py (MAP_REPLACED): New message.
489    
490            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
491            after the new map has been assigned
492    
493            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
494            Delegate MAP_REPLACED to the canvas too
495            (MainWindow.prepare_new_session): Removed. Thanks to the new
496            MAP_REPLACED message it's no longer needed
497            (MainWindow.OpenSession, MainWindow.NewSession):
498            prepare_new_session has been removed.
499    
500            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
501            MAP_REPLACED so that we can close the dialog if a new map is set.
502            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
503            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
504            dialog
505    
506            * test/test_viewport.py (SimpleViewPortTest)
507            (SimpleViewPortTest.test_default_size): Add doc-strings
508            (ViewPortTest.setUp): Bind map to self.map so we can use it in
509            tests. Subscribe to MAP_REPLACED messages too.
510            (ViewPortTest.tearDown): No need to explicitly unsubscribe
511            (ViewPortTest.test_set_map): New test for the SetMap method.
512    
513    2003-07-18  Bernhard Herzog  <[email protected]>
514    
515            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
516            Move this test from ViewPortTest.setUp to this new separate test
517            case. setUp is not the place for the actual tests.
518            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
519            more of the test from setUp to the new test test_inital_settings.
520            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
521            (ViewPortTest.test_proj_conv): Split test_proj_conv into
522            test_win_to_proj and test_proj_to_win and make the tests easier to
523            understand
524            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
525            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
526            (ViewPortTest.test_unprojected_rect_around_point)
527            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
528            Reformat to increase readability.
529    
530    2003-07-18  Bernhard Herzog  <[email protected]>
531    
532            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
533    
534    2003-07-18  Bernhard Herzog  <[email protected]>
535    
536            * test/runtests.py: The test suite can now be run without an X
537            connection. To make sure this remains true, remove the DISPLAY
538            environment variable so that an error occurs if the wxGTK is
539            imported accidentally
540    
541    2003-07-18  Bernhard Herzog  <[email protected]>
542    
543            * Thuban/UI/viewport.py: Remove unused imports
544    
545            * Thuban/UI/view.py: Remove unused imports
546    
547    2003-07-18  Bernhard Herzog  <[email protected]>
548    
549            * test/test_export.py Remove unused imports. The OutputTransform
550            function is now in viewport.py and is called output_transform
551            (TestScalebar.test_output_transform)
552            (TestScalebar.test_OutputTransform): Renamed to
553            test_output_transform and updated to use output_transform instead
554            of OutputTransform
555    
556            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
557            renamed.
558            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
559            renamed to output_transform
560    
561            * Thuban/UI/viewport.py (OutputTransform, output_transform):
562            Rename to output_transform
563    
564    2003-07-18  Bernhard Herzog  <[email protected]>
565    
566            * Thuban/Model/layer.py (Layer.__init__): Rename
567            classificationField to classificatin_column and init it here so
568            that it can be used in SetClassificationColumn
569            (Layer.GetClassificationColumn, Layer.GetClassificationField):
570            Rename to GetClassificationColumn.
571            (Layer.SetClassificationColumn, Layer.SetClassificationField):
572            Rename to SetClassificationColumn and issue a LAYER_CHANGED
573            message if the column changes.
574            (Layer._classification_changed, Layer.ClassChanged): Rename to
575            _classification_changed. Update the callers.
576            (Layer.SetShapeStore): Further field->column renames.
577    
578            * Thuban/Model/load.py (SessionLoader.start_classification)
579            (SessionLoader.start_clpoint): Updates because of
580            field->column method name changes in the Layer class
581    
582            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
583            because of field->column method name changes in the Layer class
584    
585            * Thuban/UI/classifier.py (Classifier.__init__)
586            (Classifier._OnTry, Classifier._OnRevert): Updates because of
587            field->column method name changes in the Layer class
588    
589            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
590            because of field->column method name changes in the Layer class
591    
592            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
593            of field->column method name changes in the Layer class
594    
595            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
596            (SaveSessionTest.testClassifiedLayer): Update because of
597            field->column method name changes in the Layer class
598    
599            * test/test_layer.py (SetShapeStoreTests.setUp)
600            (SetShapeStoreTests.test_sanity): Update because of field->column
601            method name changes in the Layer class
602            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
603            (TestLayerModification.test_sanity)
604            (TestLayerModification.test_initial_settings): remove unsued code
605            and rename to test_sanity.
606            (TestLayerModification.test_set_classification): New test for
607            SetClassification and SetClassificationField.
608    
609    2003-07-18  Bernhard Herzog  <[email protected]>
610    
611            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
612            the non-fixed values as well. The old test would have accepted a
613            fixed ramp that only returnes the fixed properties
614    
615    2003-07-17  Jonathan Coles   <[email protected]>
616    
617            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
618            shots for the manual. The XCF file is the source image and
619            has additional layers to support changes.
620    
621            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
622    
623            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
624            Return both the new class and the field name.
625    
626            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
627            fit the map to the window as this changes any zoom level that
628            the user may have set.
629    
630    2003-07-16  Jonathan Coles   <[email protected]>
631    
632            * Thuban/Model/classgen.py (generate_singletons,
633            generate_uniform_distribution, generate_quantiles): Remove
634            fixes parameter, but maintain the same functionality by having
635            the calling function pass a FixedRamp object for the ramp.
636            (FixedRamp): New. Adapts a ramp to have fixed property values.
637    
638            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
639            (Classification): Inherit from Publisher.
640            (Classification.__init__): Remove the layer parameter.
641            Classifications no longer need to have a parent layer.
642            (Classification.GetField, Classification.GetFieldType,
643            Classification.SetFieldInfo): Removed. The field name is stored
644            in the layer, and the type can be retreived by calling
645            Layer.GetFieldType().
646            (Classification._set_layer, Classification.GetLayer): Removed.
647            Classifications no longer have a parent layer.
648    
649            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
650            classification.
651            (Layer.SetShapeStore): Reset the classification first while
652            we still have the old shape store to work with.
653            (Layer.GetClassificationField, Layer.SetClassificationField):
654            New. Method for getting/setting the field to classify on.
655            (Layer.SetClassification): Simplified now that the layer
656            simply has to hold a reference to the classification and not
657            tell the classification who owns it.
658            Fixes RTbug #2023.
659    
660            * Thuban/Model/load.py (SessionLoader.start_classification):
661            Set the field name on the layer, not the classification.
662    
663            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
664            classification is modified.
665    
666            * Thuban/Model/save.py (SessionSaver.write_classification):
667            Get the field name and type from the layer.
668    
669            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
670            parameter records to rows and add docstring. Fixes RTbug #1997.
671    
672            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
673            ramp when we need to fix certain values of a ramp rather than
674            using the old fixes parameter. Fixes RTbug #2024.
675    
676            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
677            parameter.
678            (ClassTable.Reset): Add fieldType parameter and use it, rather
679            than asking the classification.
680            (Classifier.__init__): Remember the original class's field
681            and ask the layer for the field type, rather than the classification.
682            (Classifier.__SetGridTable): Retrieve the field and field type
683            for the table because they are not in the classification.
684            (Classifier._OnTry, Classifier._OnRevert): Set the classification
685            field on the layer in addition to the classification itself.
686    
687            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
688            classification field from layer.
689    
690            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
691            classification field from layer. Split up tests and remove
692            *-imports. Fixes RTbug #1992.
693    
694            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
695    
696            * test/test_classification.py
697            (TestClassification.test_classification): Remove tests for methods
698            that no longer exist.
699    
700            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
701            __init__ no longer has a field parameter, use SetClassificationField.
702            (SetShapeStoreTests.test_sanity): Use layer object to get class
703            field info.
704    
705            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
706            SetClassificationField on layer to set class field info.
707    
708            * test/test_viewport.py: Renamed from test/test_view.py.
709    
710    2003-07-16  Jan-Oliver Wagner <[email protected]>
711    
712            * Doc/manual/thuban-manual.xml: Added authors and an initial
713            coarse structure.
714    
715    2003-07-15  Bernhard Herzog  <[email protected]>
716    
717            * test/support.py (FloatComparisonMixin): This is a mix-in class
718            and therefore should not be derived from any other class.
719    
720            * test/test_range.py (RangeTest): FloatComparisonMixin is a
721            mix-in, so derive from TestCase as well.
722    
723    2003-07-15  Bernhard Herzog  <[email protected]>
724    
725            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
726            draw_func handling a bit to remove one layer of indirection. This
727            makes the renderer about 10% faster in the non-classifying case
728            and the code a bit cleaner
729            (MapRenderer.draw_point_shape): Add the pen and brush parameters
730            and set them in the dc. Now the draw_point_shape method and
731            wxproj's draw_polygon_shape function have basically the same
732            signature so that both can be directly used as draw_func
733    
734    2003-07-15  Bernhard Herzog  <[email protected]>
735    
736            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
737            string values (in addition to the labels) as UTF 8
738    
739            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
740            values if the field type is string
741    
742            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
743            saving a session with non-ascii string classification values.
744    
745            * test/test_load.py (TestClassification.file_contents)
746            (TestClassification.test): Check for non-ascii values in string
747            classifications
748    
749    2003-07-14  Jonathan Coles   <[email protected]>
750    
751            * test/test_view.py: New. Tests for ViewPort.
752    
753    2003-07-14  Frank Koormann   <[email protected]>
754    
755            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
756            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
757    
758            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
759            unicode strings from session file: session title, map title and
760            projection name.
761            
762    2003-07-10  Jonathan Coles   <[email protected]>
763    
764            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
765            drag_stop, not drag_move when the mouse is released.
766    
767    2003-07-10  Jonathan Coles   <[email protected]>
768    
769            The most important part of this is the seperation of view.py into
770            two pieces. viewport.py now has a class called ViewPort which
771            contains all the non-wx parts of view.py and can therefore be
772            tested. view.py contains only the wx-specific parts and is fairly
773            simple.
774    
775            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
776            RTTbug #1992.
777            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
778            RTTbug #1992.
779    
780            * Thuban/Model/classgen.py (generate_singletons,
781            generate_uniform_distribution, generate_quantiles):
782            Added 'fixes' parameter so that property attributes can
783            be held constant over the generated classification groups.
784            (CustomRamp.GetProperties): Remove unused variables.
785    
786            * Thuban/Model/map.py (Map.SetProjection): Send the old
787            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
788            event.
789    
790            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
791            parameter which is a list of records that restricts which
792            records are saved. Fixes RTbug #1997.
793    
794            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
795            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
796    
797            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
798            to allow the user to fix line color/width on generated groups.
799            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
800            functions to optionally fix group properties.
801    
802            * Thuban/UI/main.py (main): Set exception hook to the
803            ShowExceptionDialog. Fixes RTbug #1993.
804    
805            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
806            the table window when it is selectd to be shown.
807    
808            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
809            Export Selection button and move the export buttons underneath
810            the table.
811            (QueryTableFrame.UpdateStatusText): Added event argument so
812            that it can respond to grid selection events. The status text
813            is now updated even when the table is not associated with a
814            layer as was previously assumed.
815            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
816            UpdateStatusText responds to these events.
817            (QueryTableFrame.OnSaveAs): Renamed to doExport.
818            (QueryTableFrame.doExport): Helper function that saves the
819            entire table, or selected rows, to a file.
820            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
821            Respond to export button events and call doExport.
822    
823            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
824            the function doesn't return NULL without first setting a Python
825            Error.
826    
827            * test/runtests.py (main): Only print "Unknown option" for
828            unsupported options.
829    
830            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
831            optional epsilon argument to specify floating point accuracy.
832            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
833            for each item test.
834    
835            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
836            tests for saving selected records.
837    
838            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
839            tests for saving selected records.
840    
841            * test/test_map.py (TestMapWithContents.test_set_projection):
842            MAP_PROJECTION_CHANGED events send the old projection.
843    
844            * test/test_session.py
845            (TestSessionWithContent.test_forward_map_projection):
846            MAP_PROJECTION_CHANGED events send the old projection.
847    
848            * test/test_table.py (TableTest): Update tests to use non-deprecated
849            functions.
850    
851    2003-07-08  Bernhard Herzog  <[email protected]>
852    
853            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
854            constants in the column objects are the standard ones defined in
855            the table module.
856    
857            * test/test_transientdb.py
858            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
859            exporting transient tables as DBF works. This should catch the bug
860            just fixed in TransientTableBase.Width.
861    
862    2003-07-08  Bernhard Herzog  <[email protected]>
863    
864            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
865            interpolated colors correctly.
866    
867            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
868            New. Test case for the fix in classgen.py
869    
870    2003-07-08  Bernhard Herzog  <[email protected]>
871    
872            * test/runtests.py (main): Make the default output less verbose
873            and add a verbosity option (-v) to get the old output
874    
875    2003-07-08  Bernhard Herzog  <[email protected]>
876    
877            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
878            0.9.
879    
880            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
881            New. Return the join type
882    
883            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
884            DTD
885            (SessionSaver.write_data_containers): Save the join type for
886            joined tables
887    
888            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
889            namespace
890            (SessionLoader.start_jointable): Handle the jointype attribute
891    
892            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
893            as of Thuban 0.8. These are now tests to determine whether Thuban
894            can still read files generated by Thuban 0.8
895    
896            * test/test_load.py (LoadSessionTest.dtd)
897            (TestSingleLayer.file_contents)
898            (TestLayerVisibility.file_contents, TestLabels.file_contents)
899            (TestLayerProjection.file_contents)
900            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
901            (TestJoinedTable.file_contents)
902            (TestLoadError.file_contents): Update for new DTD
903            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
904            for new join type attribute
905    
906            * test/test_save.py (SaveSessionTest.dtd)
907            (SaveSessionTest.testEmptySession)
908            (SaveSessionTest.testSingleLayer)
909            (SaveSessionTest.testLayerProjection)
910            (SaveSessionTest.testRasterLayer)
911            (SaveSessionTest.testClassifiedLayer)
912            (SaveSessionTest.test_dbf_table)
913            (SaveSessionTest.test_joined_table): Update for new DTD
914            (SaveSessionTest.test_joined_table): Add test for new join type
915            attribute
916    
917    2003-07-04  Bernhard Herzog  <[email protected]>
918    
919            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
920            function for table_to_dbf
921            (table_to_dbf): Deal with names longer than the 10 character limit
922    
923            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
924            doc-string
925            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
926            long column names
927    
928    2003-07-03  Bernhard Herzog  <[email protected]>
929    
930            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
931    
932    2003-07-03  Bernhard Herzog  <[email protected]>
933    
934            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
935            for the Thuban manual and README with some basic information about
936            the manual
937    
938    2003-07-03  Bernhard Herzog  <[email protected]>
939    
940            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
941            Update doc-string
942            (TransientJoinedTable.create): Do not modify the column objects of
943            the input tables in place and copy all columns of the input tables
944            into the joined table after all.
945    
946            * test/test_transientdb.py
947            (TestTransientTable.test_transient_joined_table_same_column_name):
948            Update to reflect the new behavior
949            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
950            Update to reflect the new behavior
951            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
952            New test case for a bug which modified the column objects in place
953    
954    2003-07-02  Jonathan Coles   <[email protected]>
955    
956            * Thuban/Model/classgen.py (generate_singletons,
957            generate_uniform_distribution, generate_quantiles,
958            GenQuantiles0): Make sure maxValue isn't less than
959            one, otherwise we could divide by zero.
960    
961            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
962            ClassGenTest.doClassSingleTest): Call doBoundsTest to
963            check the end classification groups against the
964            proper property values.
965            (ClassGenTest.doBoundsTest): New. Checks the first and
966            last classification groups to make sure their properties
967            are the correct upper and lower bounds for a color ramp.
968    
969    2003-07-02  Jonathan Coles   <[email protected]>
970    
971            * Thuban/Model/classgen.py (generate_singletons,
972            generate_uniform_distribution, generate_quantiles,
973            GenQuantiles0): The denominator was one to high when
974            calculating the index for the ramp causing the index
975            to never to reach one.
976    
977    2003-07-02  Jonathan Coles   <[email protected]>
978    
979            Changed the singature of ClassGroupRange.__init__ and
980            ClassGroupRange.SetRange() so that the min/max values are
981            passed as a tuple. This makes a better calling scheme for
982            when a Range object is passed instead.
983    
984            * Thuban/Model/classgen.py: Fixed parameters to
985            ClassGroupRange constructor.
986    
987            * Thuban/Model/classification.py (ClassGroupRange.__init__):
988            Consolidate the min/max parameters into a single _range which
989            can either be a tuple or a Range object.
990            (ClassGroupRange.SetRange): Consolidate the min/max parameters
991            into a single _range which can either be a tuple or a Range object.
992    
993            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
994            call to ClassGroupRange constructor to use a tuple.
995    
996            * Thuban/Model/layer.py (Layer.SetClassification): Switch
997            the classification instance variable to the new class
998            before calling _set_layer otherwise subscribers to a
999            LAYER_CHANGED event will not see any difference.
1000    
1001            * test/test_classification.py: Fix tests of ClassGroupRange
1002            so that they use the new signature.
1003    
1004            * test/test_load.py: Fix use of ClassGroupRange so that it
1005            uses the new signature.
1006    
1007            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
1008            uses the new signature.
1009    
1010            * test/test_save.py: Fix use of ClassGroupRange so that it
1011            uses the new signature.
1012    
1013    
1014    2003-07-01  Jonathan Coles   <[email protected]>
1015    
1016            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
1017            Import used objects/class from color.
1018            (generate_singletons): We don't
1019            need the numGroups parameter anymore because we are using
1020            the new ramps with GetProperties().
1021            (generate_uniform_distribution): Use new ramp method
1022            GetProperties().
1023            (generate_quantiles, GenQuantiles0): Use new ramp method
1024            GetProperties().
1025            (CustomRamp.SetNumGroups): Removed. The ramps now map
1026            a value from 0 to 1 to class properties so the number
1027            of groups is not needed ahead of time.
1028            (CustomRamp.next): Removed. CustomRamp does not support
1029            interation anymore.
1030            (CustomRamp.GetProperties): Returns a ClassGroupProperties
1031            object based on the index value from 0 to 1 that is
1032            passed to it.
1033            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
1034            Made into instances of Monochromatic class instread of
1035            deriving from it.
1036            (HotToCold.SetNumGroups): Removed. See CustomRamp.
1037            (HotToCold.next): Removed. See CustomRamp.
1038    
1039            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
1040            (Classification.SetField, Classification.SetFieldType):
1041            Replaced with SetFieldInfo.
1042            (Classification.SetFieldInfo): New. Does a better job of
1043            what SetField and SetFieldType used to do by combining
1044            their function since they should really always be done
1045            at the same time.
1046            (Classification.SetLayer): Renamed to _set_layer.
1047            (Classification._set_layer): Should only be called from
1048            Layer's SetClassification. This does not cause a recursive
1049            call as SetLayer did because we know that Layer knows about
1050            the classification.
1051    
1052            * Thuban/Model/color.py: Fixes RTbug #1971.
1053            (_Transparent): Renamed from Transparent so it doesn't
1054            conflict with the module variable.
1055            (Transparent, Black): Renamed from Color.Transparent,
1056            Color.Black so they are not class variables.
1057    
1058            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
1059            (Layer.Destroy): We don't need to call SetClassification
1060            anymore to clear out the back reference in the classifcation
1061            to the layer. It's better to set it to None using _set_layer,
1062            and we won't be creating another clas object too.
1063            (Layer.SetClassification): Classification._set_layer is not
1064            recursive so remove all the locking variables. Also clean
1065            up the code so that it remains unchanged if something fails.
1066    
1067            * Thuban/Model/load.py: Fixes RTbug #1971.
1068            (SessionLoader.start_classification): Call
1069            Classification.SetFieldInfo().
1070    
1071            * Thuban/Model/save.py: Removed import of Color which wasn't
1072            being used.
1073    
1074            * Thuban/UI/classgen.py: Fixes RTbug #1972.
1075            (ClassGenDialog.__init__): Color ramps are now instances
1076            already so we don't need to create any new objects.
1077            (ClassGenDialog.OnOK): Check for numGroups is no longer
1078            necessary because we never use it.
1079    
1080            * Thuban/UI/classifier.py: Fixes RTbug #1971.
1081            (Classifier.__BuildClassification, Classifier.__SetGridTable):
1082            Call Classification.SetFieldInfo() instead of SetFieldType.
1083    
1084            * Thuban/UI/renderer.py: Fixes RTbug #1971.
1085    
1086            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
1087            (MapCanvas.__init__): Subscribe to the idle time event. Set
1088            background color to white.
1089            (MapCanvas.OnPaint): Set a flag indicating that we should
1090            render the map during idle time. If we already have a bitmap
1091            just draw it now.
1092            (MapCanvas.OnIdle): New. Render the map only during idle time.
1093            This also fixes a problem with the busy cursor under gtk.
1094    
1095            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
1096            Fix calls to generate_singletons because the signature changed.
1097    
1098            * test/test_classification.py: Fix color references and
1099            change calls to Classification.[SetField|SetFieldType] to
1100            SetFieldInfo.
1101    
1102            * test/test_load.py: Fix color references.
1103    
1104            * test/test_load_0_2.py: Fix color references.
1105    
1106            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
1107            Change calls to Classification.[SetField|SetFieldType] to
1108            SetFieldInfo.
1109    
1110    2003-07-01  Frank Koormann   <[email protected]>
1111    
1112            MERGE from the greater-ms3 branch.
1113    
1114            * test/test_transientdb.py
1115            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
1116            New. Test join of two tables with partly equal column names.
1117    
1118            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
1119            If duplicates in left and right tables column names are found,
1120            append '_' (underscores) to the name until it is unique.
1121            Create always new internal names for the resulting table and reference
1122            columns in the join statement with <table>.<column>
1123    
1124    2003-07-01  Bernhard Herzog  <[email protected]>
1125    
1126            * test/test_transientdb.py
1127            (TestTransientTable.test_transient_joined_table_same_column_name):
1128            New. Test whether joining on columns with the same names in both
1129            tables works.
1130            
1131            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
1132            sure to use the right internal names even when joining on field
1133            with the same names in both tables. Also, detect duplicate names
1134            in the joined table correctly.
1135    
1136    2003-07-01  Frank Koormann   <[email protected]>
1137    
1138            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
1139            Reverse List of layers to render in same order as in desktop legend.
1140    
1141    2003-06-30  Jonathan Coles   <[email protected]>
1142    
1143            * Thuban/version.py (make_tuple): Takes a version string
1144            and splits it into a tuple of at most three integers.
1145            Used make_tuple() to make tuple versions of the version
1146            numbers.
1147    
1148            * Thuban/UI/about.py: Add Thuban email addresses.
1149    
1150    2003-06-30  Jonathan Coles   <[email protected]>
1151    
1152            * Thuban/version.py: SQLite/PySQLite version dependencies
1153            were too high.
1154    
1155    2003-06-30  Jonathan Coles   <[email protected]>
1156    
1157            * Thuban/version.py: Update version to 0.8.1
1158            
1159            * MANIFEST.in: Added Projections so that default.proj is
1160            included.
1161    
1162    2003-06-26  Jonathan Coles   <[email protected]>
1163    
1164            New About box with lots more information including library
1165            versions and credits. More/better version checking before
1166            Thuban starts.
1167    
1168            * Thuban/UI/about.py: New. New About box that displays
1169            library version information and credits.
1170    
1171            * Thuban/version.py: Added new 'versions' dictionary which
1172            contains the verions of various libraries which are checked
1173            when the module loads.
1174            (verify_versions): Check all version numbers and returns
1175            a list of errors.
1176    
1177            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
1178            Reset the status of the buttons as the situation warrants,
1179            but in a better more reliable way by not relying on the
1180            current status to determine what needs to change.
1181    
1182            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
1183            (verify_versions): Remove most of the code since it is
1184            now in Thuban.version.verify_versions.o
1185    
1186            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
1187            About box in Thuban.UI.about.
1188    
1189            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
1190            Returns the version of gdal library being used as a string.
1191    
1192            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
1193            Removed.
1194            (get_proj_version): Return the version of PROJ that the file
1195            was compiled with.
1196            (get_gtk_version): Return th version of GTK that the file
1197            was compiled with.
1198    
1199    2003-06-25  Jonathan Coles   <[email protected]>
1200    
1201            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
1202            of the SelectPropertiesDialog should be self so the window
1203            appears on top.
1204            (ClassGroupPropertiesCtrl.DoEdit): The parent
1205            of the SelectPropertiesDialog should be self so the window
1206            appears on top.
1207    
1208            * Thuban/UI/resource.py: Cleaned up how we determine file
1209            extensions.
1210            (GetImageResource): Return an wxImage from our Resources.
1211    
1212    2003-06-24  Jonathan Coles   <[email protected]>
1213    
1214            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
1215            Check that a layer has a classification before trying
1216            to get it. Raster layers don't have classifications.
1217    
1218    2003-06-23  Jonathan Coles   <[email protected]>
1219            
1220            * setup.py: Add Resources/XML to resource list.
1221        
1222    2003-06-23  Jonathan Coles   <[email protected]>
1223    
1224            * setup.cfg: Fix copyright dates
1225        
1226    2003-06-23  Jonathan Coles   <[email protected]>
1227    
1228            * MANIFEST.in: Update with Resources/XML
1229    
1230            * setup.py: Don't include Locale resources yet as we don't
1231            have any and it causes problems building the distribution
1232            for Windows. Update version to 0.8.0.
1233    
1234            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
1235    
1236            * Thuban/UI/mainwindow.py: Add blank line at the end because
1237            file was not being read correctly building the Windows
1238            distribution.
1239    
1240    2003-06-23  Jonathan Coles   <[email protected]>
1241    
1242            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
1243    
1244            * Thuban/version.py: Temporarily update longversion for
1245            the 0.8 release so that it doesn't have the cvs revision.
1246    
1247    2003-06-23  Jonathan Coles   <[email protected]>
1248    
1249            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
1250            to make sure that we don't create reentrant possibilities with
1251            wxYield.
1252    
1253            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
1254            directly to avoid the wxSafeYield() call which generates an
1255            OnPaint event causing infinite recursion. Don't try to catch
1256            exception anymore. This was for before there were limits on map
1257            scaling.
1258    
1259    2003-06-23  Bernhard Herzog  <[email protected]>
1260    
1261            Bug fix for RT #1961:
1262    
1263            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
1264            Register DerivedShapestores with the session
1265    
1266            * Thuban/Model/session.py (Session.Tables): Make sure each table
1267            is only listed once.
1268    
1269            * test/test_load.py (TestJoinedTable.test): Add check_format call.
1270            Update file contents to match the one written out.
1271    
1272    2003-06-20  Bernhard Herzog  <[email protected]>
1273    
1274            * test/xmlsupport.py (SaxEventLister.startElementNS)
1275            (SaxEventLister.endElementNS): Do not include the qname. Python
1276            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
1277            is (presumably incorrectly) None, whereas it's a string with the
1278            element name in the later versions.
1279    
1280            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
1281            (TestEventList.test_even_list_namespace): Update tests to reflect
1282            the new behaviour
1283            (TestEventList.test_even_list_id_normalization): Fix doc-string
1284    
1285    2003-06-20  Jonathan Coles   <[email protected]>
1286    
1287            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
1288            by deriving classes to determine if that layer supports shapes.
1289            (Layer): Override HasShapes and return true.
1290    
1291            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
1292            instead of a direct call to wx[Begin|End]CusyCursor().
1293            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
1294            table data.
1295    
1296            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
1297            New. Wrappers around the wxWindows functions that allow us to
1298            make additional calls such as wxYield which gives the native
1299            system a chance to update the cursor correctly.
1300    
1301            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
1302            instead of a direct call to wx[Begin|End]CusyCursor().
1303    
1304            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
1305            instead of a direct call to wx[Begin|End]CusyCursor().
1306            (MapCanvas.find_shape_at): Check if the current search layer
1307            support shapes, otherwise go on to the next layer.
1308    
1309            * test/test_layer.py: Add tests in each type of layer for
1310            HasClassification() and HasShapes()
1311    
1312    2003-06-20  Jonathan Coles   <[email protected]>
1313    
1314            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
1315            turning on the busy cursor to allow the system to change the
1316            cursor before we begin painting. This fixes a problem that
1317            was occuring only under GTK. Fixes RTbug #1840.
1318    
1319    2003-06-20  Bernhard Herzog  <[email protected]>
1320    
1321            * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
1322            version.
1323    
1324            * Thuban/Model/save.py (sort_data_stores): New. Make topological
1325            sort of the data sources so they can be written with sources that
1326            data sources that depend on other data sources come after the
1327            sources they depend on.
1328            (SessionSaver.__init__): Add idmap instance variable to map from
1329            objects to the ids used in the file.
1330            (SessionSaver.get_id, SessionSaver.define_id)
1331            (SessionSaver.has_id): New. Methods to manage the idmap
1332            (SessionSaver.write): Use thuban-0.8.dtd
1333            (SessionSaver.write_session): Add a namespace on the session and
1334            write out the data sources before the maps.
1335            (SessionSaver.write_data_containers): New. Write the data
1336            containers.
1337            (SessionSaver.write_layer): Layer elements now refer to a
1338            shapestore and don't contain filenames anymore.
1339    
1340            * Thuban/Model/load.py (LoadError): Exception class to raise when
1341            errors in the files are discovered
1342            (SessionLoader.__init__): Define dispatchers for elements with a
1343            thuban-0.8 namespace too.
1344            (SessionLoader.check_attrs): New helper method to check and
1345            convert attributes
1346            (AttrDesc): New. Helper class for SessionLoader.check_attrs
1347            (SessionLoader.start_fileshapesource)
1348            (SessionLoader.start_derivedshapesource)
1349            (SessionLoader.start_filetable, SessionLoader.start_jointable):
1350            Handlers for the new elements in the new fileformat
1351            (SessionLoader.start_layer): Handle the shapestore attribute in
1352            addition to filename.
1353            (SessionLoader.start_table, SessionLoader.end_table): Removed.
1354            They were never used in the old formats and aren't needed for the
1355            new.
1356    
1357            * Thuban/Model/session.py (Session.DataContainers): New method to
1358            return all "data containers", i.e. shapestores and tables
1359    
1360            * test/xmlsupport.py (SaxEventLister.__init__)
1361            (SaxEventLister.startElementNS, sax_eventlist): Add support to
1362            normalize IDs.
1363    
1364            * test/test_xmlsupport.py
1365            (TestEventList.test_even_list_id_normalization): New test case for
1366            id normalization
1367    
1368            * test/test_load.py (LoadSessionTest.check_format): Use ID
1369            normalization
1370            (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
1371            class atrributes used for ID normalization
1372            (TestSingleLayer, TestLayerVisibility, TestLabels.test)
1373            (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
1374            file format
1375            (TestJoinedTable): New test for loading sessions with joined
1376            tables.
1377            (TestLoadError): New. Test whether missing required attributes
1378            cause a LoadError.
1379    
1380            * test/test_save.py (SaveSessionTest.thubanids)
1381            (SaveSessionTest.thubanidrefs): New class attributes for ID
1382            normalization in .thuban files.
1383            (SaveSessionTest.compare_xml): Use id-normalization.
1384            (SaveSessionTest.testEmptySession)
1385            (SaveSessionTest.testLayerProjection)
1386            (SaveSessionTest.testRasterLayer)
1387            (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
1388            (SaveSessionTest.testLayerProjection): The filename used was the
1389            same as for testSingleLayer. Use a different one.
1390            (SaveSessionTest.test_dbf_table)
1391            (SaveSessionTest.test_joined_table): New test cases for saving the
1392            new data sources structures.
1393            (TestStoreSort, MockDataStore): Classes to test the sorting of the
1394            data stores for writing.
1395    
1396            * test/runtests.py: Add CVS keywords
1397    
1398    2003-06-20  Jonathan Coles   <[email protected]>
1399    
1400            * test/test_session.py
1401            (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
1402            Use the cultural_landmark-point.dbf file for the store so that
1403            the table rows and shape count match.
1404    
1405    2003-06-20  Jonathan Coles   <[email protected]>
1406    
1407            * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
1408            an exception if the number of shapes is different from the
1409            number of rows in the table. Address RTbug #1933.
1410    
1411            * test/test_layer.py (TestLayer.test_derived_store): Add
1412            a test for the new exception in DerivedShapeStore.__init__.
1413    
1414            * test/support.py (FloatTestCase): Removed since there is
1415            already FloatComparisonMixin. Fixes RTbug #1954.
1416            (FloatComparisonMixin.assertFloatEqual): Include test for
1417            infinity that was part of FloatTestCase.
1418    
1419            * test/test_range.py (RangeTest): Inherit from
1420            support.FloatComparisonMixin now that we don't have
1421            support.FloatTestCase.
1422    
1423    2003-06-20  Bernhard Herzog  <[email protected]>
1424    
1425            * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
1426            the implementation in xmlsupport instead.
1427            (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
1428    
1429            * test/test_proj.py: Import sax_eventlist from xmlsupport instead
1430            of test_save
1431    
1432    2003-06-20  Bernhard Herzog  <[email protected]>
1433    
1434            * test/test_load.py (LoadSessionTest.check_format): New helper
1435            method to make sure the test files we load might have been written
1436            by the current thuban version.
1437            (ClassificationTest.TestLayers, TestSingleLayer.test)
1438            (TestLayerVisibility.test, TestClassification.test)
1439            (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
1440            Add check_format() calls and fix the thuban data to match the data
1441            that would be written by saving the session loaded from it.
1442    
1443            * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
1444            the same class and function in test_save.
1445    
1446            * test/test_xmlsupport.py (TestEventList): New. test cases for
1447            sax_eventlist
1448    
1449    2003-06-20  Bernhard Herzog  <[email protected]>
1450    
1451            * Resources/XML/thuban.dtd: Add comment about which versions of
1452            Thuban are covered by this DTD
1453            (map): Fix content model for layers and raster layers. There can
1454            be any number or layers and raster layers in any order.
1455    
1456    2003-06-20  Jonathan Coles   <[email protected]>
1457    
1458            This is mainly about fixing RTbug #1949.
1459    
1460            * Thuban/Model/classification.py: Remove "from __future__"
1461            import statement since python 2.2 is the earliest supported
1462            version.
1463    
1464            * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
1465            Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
1466            depending on the units this projection *forwards* into.
1467    
1468            * Thuban/Model/save.py (SessionSaver.write_classification):
1469            Remove unnecessary use of lambdas and nested functions.
1470    
1471            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
1472            adjustment here if the map projection uses degrees.
1473    
1474            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
1475            scale adjust code since it is now done before calling
1476            this method. Don't do anything if the map projection
1477            is None.
1478    
1479    2003-06-19  Bernhard Herzog  <[email protected]>
1480    
1481            Move version specific load tests to their own file.
1482    
1483            * test/test_load.py: Expand the doc-string to explain a bit how to
1484            handle file format changes.
1485            (TestClassification.test): Update the docstring as this test is
1486            not about Thuban 0.2 anymore.
1487    
1488            * test/test_load_0_2.py: New file with the load tests for thuban
1489            files created with Thuban 0.2 and earlier.
1490    
1491    2003-06-19  Bernhard Herzog  <[email protected]>
1492    
1493            Add XML validation to some of the tests. Validation will only be
1494            done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
1495            To make the DTD available to the test cases it's moved into
1496            Resources/XML
1497    
1498            * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
1499            for versions up to and including 0.2. Two slight changes: added an
1500            encoding specification and fixed the comment which refered to
1501            GRASS, not Thuban
1502    
1503            * test/xmlsupport.py: New support module for tests involving XML.
1504            Currently there's a mix-in class for XML validation.
1505    
1506            * test/test_xmlsupport.py: New. Tests for the xmlsupport module
1507    
1508            * test/test_save.py (SaveSessionTest): Derive from ValidationTest
1509            so that we can validate the
1510            (SaveSessionTest.testEmptySession)
1511            (SaveSessionTest.testSingleLayer)
1512            (SaveSessionTest.testSingleLayer)
1513            (SaveSessionTest.testLayerProjection)
1514            (SaveSessionTest.testRasterLayer)
1515            (SaveSessionTest.testClassifiedLayer): Validate the generated XML
1516    
1517            * test/runtests.py (main): Call print_additional_summary instead
1518            of print_garbage_information
1519    
1520            * test/support.py (resource_dir): New function to return the
1521            "Resource" subdirectory
1522            (print_additional_summary): New function to combine several
1523            summary functions
1524            (run_tests): Use print_additional_summary instead of calling
1525            print_garbage_information directly
1526    
1527    2003-06-19  Bernhard Herzog  <[email protected]>
1528    
1529            * Doc/thuban.dtd (classification): Correct the content model of
1530            the classification element.
1531            (projection): Add the "name" attribute
1532    
1533    2003-06-19  Frank Koormann   <[email protected]>
1534    
1535            MERGE from the greater-ms3 branch.
1536    
1537            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
1538            scale if projection is latlong to get better estimate.
1539    
1540            Fix problem of hidden properties dialog under windows after double
1541            click on layer tree:
1542            The tree control always gets an Expanded / Collapsed event after
1543            the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply
1544            raises the already displayed window.
1545    
1546            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
1547            raiseProperties initialized to prevent endless loops
1548            (LegendTree._OnItemActivated): Depending on self.raiseProperties
1549            simply raise the properties or open the dialog and issue a second
1550            event.
1551    
1552    2003-06-18  Jonathan Coles   <[email protected]>
1553    
1554            * setup.py: Fix a few problems that occured under Windows.
1555    
1556    2003-06-18  Jonathan Coles   <[email protected]>
1557    
1558            When Thuban loaded the map was redrawn twice because the
1559            legend was being opened after the mainwindow was created
1560            and not during its creation. This meant the map was drawn
1561            initially and then had to be redrawn when the legend
1562            caused the display to change. Now the legend is opened
1563            in the mainwindow constructor which resolves this issue.
1564    
1565            Also, although we were checking for the existence of
1566            gdal and gdalwarp modules, the gdalwarp extension was
1567            still being compiled (which may fail if the system doesn't
1568            have gdal installed). the build_ext command to setup.py
1569            now accepts the flags --with-gdal and --without-gdal.
1570            If --without-gdal is specified setup.py will try to
1571            use the gdal parameters specified by gdal-config. Under
1572            windows, those parameters have to be set in setup.py
1573            as with proj4 an wxWindows.
1574    
1575            * setup.py: Use a list instead of seperate variables for
1576            extension parameters so we can create a generic function
1577            that runs an appropriate *-config script.
1578            (run_cs_script): Renamed from run_wx_script and modified
1579            to accept a second argument which is a list of lists to
1580            be filled in by the values returned from running the command.
1581            (thuban_build_ext): New. Extends the build_ext command and
1582            provides the options --with-gdal/--without-gdal which then
1583            optionally includes the gdalwarp extension.
1584    
1585            * Thuban/Model/resource.py: First check if we can import
1586            the gdalwarp Thuban extension before checking for gdal.
1587            Also added some comments.
1588            
1589            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
1590            the map is None which may be the case if none has been loaded
1591            yet.
1592    
1593            * Thuban/UI/main.py (main): Remove call to ShowLegend.
1594    
1595            * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
1596    
1597            * Thuban/UI/renderer.py: Check for gdal support before importing
1598            gdalwarp.
1599            (MapRenderer.render_map): Only try to optimize if we have gdal
1600            support otherwise nothing will get drawn.
1601    
1602            * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
1603            during startup before a map has been created. Check if map is None
1604            before using it and do nothing if it is.
1605    
1606    2003-06-17  Jonathan Coles   <[email protected]>
1607    
1608            Fix the problem with raster layers under Windows that caused
1609            Thuban to crash. The view should respond to layer projection
1610            changed events to update the display. Changes to a projection
1611            should not cause the map to be set to full extent.
1612            
1613            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1614            current_map_proj to remember the current map projection so that
1615            when the projection changes we know what the previous projection
1616            was.
1617            (MapCanvas.SetMap): Unsubscribe and subscribe to
1618            LAYER_PROJECTION_CHANGED events.
1619            (MapCanvas.projection_changed): Split into two methods that respond
1620            to map and layer projection changes.
1621            (MapCanvas.map_projection_changed): New. Takes the current view and
1622            projects it using the new projection. This does not cause the
1623            map to be redrawn at full extent.
1624            (MapCanvas.layer_projection_changed): New. Cause a redraw which
1625            will draw each layer in its new projection.
1626            
1627            * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
1628            VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
1629            under Windows.
1630            
1631            * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
1632            to twice sizeof(void*) because there are two digits for each
1633            hex byte.
1634    
1635    2003-06-16  Bernhard Herzog  <[email protected]>
1636    
1637            Update to the layer interface: Direct access to the table,
1638            shapetable, shapefile and filename attributes is now actively
1639            deprecated by issuing deprecation warnings for all places where
1640            this happens.
1641    
1642            * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
1643            to the instance variables table, shapetable, shapefile and
1644            filename via __getattr__ so that we can issue a deprecation
1645            warning.
1646            (Layer.SetShapeStore): Don't set the deprecated instance variables
1647            any more
1648            (Layer.SetShapeStore): Don't use deprecated layer instance
1649            variables
1650            (Layer.Destroy): No need to explicitly remove the instance
1651            variables any more
1652            (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
1653            instance variables
1654    
1655            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
1656            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
1657            (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
1658            use deprecated layer instance variables
1659    
1660            * Thuban/UI/classifier.py (Classifier.__init__): Don't use
1661            deprecated layer instance variables
1662    
1663            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
1664            (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
1665            instance variables
1666    
1667            * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
1668            deprecated layer instance variables
1669    
1670            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
1671            deprecated layer instance variables
1672    
1673            * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
1674            deprecated layer instance variables
1675    
1676            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
1677            (MapRenderer.polygon_render_param): Don't use deprecated layer instance
1678            variables
1679    
1680            * test/runtests.py (main): Turn Thuban's deprecation warnings into
1681            errors so that they're cought by the tests
1682    
1683            * test/test_load.py (TestSingleLayer.test): Don't use deprecated
1684            layer instance variables
1685    
1686    2003-06-16  Jonathan Coles   <[email protected]>
1687    
1688            Fix a problem under Windows whereby if the user double-clicks on a
1689            layer in the legend that tree item will expand or collapse as well
1690            as open the layer properties dialog. The state of the tree item
1691            should not be affected.
1692    
1693            * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
1694            preventExpandCollapse and subscribe to expanding and collapsing
1695            events.
1696            (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
1697            collapsing events and will veto the event if it has been triggered
1698            by the user double clicking on a layer.
1699            (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
1700            that an expanding/collapsing event should be vetoed.
1701    
1702    2003-06-13  Bernhard Herzog  <[email protected]>
1703    
1704            * Thuban/UI/classifier.py (Classifier.OnClose)
1705            (Classifier.map_layers_removed)
1706            (Classifier.layer_shapestore_replaced): Unsubscribe the messages
1707            in OnClose and not in map_layers_removed or
1708            layer_shapestore_replaced to make sure it always happens when the
1709            dialog is closed
1710    
1711    2003-06-13  Jonathan Coles   <[email protected]>
1712    
1713            This puts back a fix for Windows where a panel is needed so that
1714            the background of the table view appears correctly.
1715    
1716            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
1717            object that can be used by derived classes to place any
1718            controls (including the grid) onto.
1719            (QueryTableFrame.__init__): Use the panel as the parent window
1720            for all the controls. Reparent the grid so that the panel is
1721            the parent. Call UpdateStatusText() to correctly initialize
1722            the status bar.
1723    
1724    2003-06-13  Jonathan Coles   <[email protected]>
1725    
1726            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
1727            from wxFrame (as opposed to wxDialog like the other classes)
1728            but otherwise behaves like the other classes. This is needed
1729            for the TableView which isn't really a dialog and needs to
1730            have a status bar and control buttons.
1731    
1732            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
1733            instance variable to keep track of how many rows are selected.
1734            Subscribe once to the the events we are interested in.
1735            (ThubanGrid.OnRangeSelect): Only handle event if event handling
1736            hasn't been turned off.
1737            (ThubanGrid.OnSelectCell): Only handle event if event handling
1738            hasn't been turned off.
1739            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
1740            as an event listener (which changes the event handler stack)
1741            simply set an instance variable to False. This is checked in
1742            the event handlers.
1743            (ThubanGrid.GetNumberSelected): Return the number of currently
1744            selected rows.
1745            (TableFrame): Inherit from ThubanFrame so we can have a
1746            status bar and control buttons.
1747            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
1748            Explicitly set which items are selected in the operator choice and
1749            action choice so there is always a valid selection. Fixes RTbug #1941.
1750            Subscribe to grid cell selection events so we can update the
1751            status bar.
1752            (QueryTableFrame.UpdateStatusText): Update the status bar with
1753            how many rows are in the grid, how many columns, and how many
1754            rows are selected.
1755            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
1756            Call UpdateStatusText when cells are (de)selected.
1757            (QueryTableFrame.OnQuery): Use the string value in the value
1758            combo if either the selected item index is 0 or if the string
1759            cannot be found in the predefined list (this happens if the
1760            user changes the text). Fixes RTbug #1940.
1761            Only turn off the grid event listeners if there a query comes
1762            back with a none empty list of ids. in the case that the list
1763            is empty this causes a grid.ClearSelection() call to actually
1764            clear the grid selection which causes the selected items in
1765            the map to be deselected. Fixes RTbug #1939.
1766    
1767            * test/test_save.py (XMLWriterTest.Encode): Check return values.
1768            Fixes RTbug #1851.
1769    
1770    2003-06-13  Bernhard Herzog  <[email protected]>
1771    
1772            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
1773            self.selected_shape with the current selection to make sure the
1774            contents of the dialog are up to date when it's shown for the
1775            first time.
1776            The dialog used to work without this by luck. The recent fix to
1777            the connector module 'broke' a 'feature' the identify view was
1778            relying on, i.e that subscribing to a message in response to
1779            receiving a message of that type would mean that the new
1780            subscriber would also be called for the same message.
1781            
1782    2003-06-12  Jonathan Coles   <[email protected]>
1783    
1784            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
1785            the image is rendered. Fixes RTbug #1937.
1786    
1787  2003-06-12  Jonathan Coles   <[email protected]>  2003-06-12  Jonathan Coles   <[email protected]>
1788    
1789          * Thuban/Lib/fileutil.py: As is done under Windows, create the          * Thuban/Lib/fileutil.py: As is done under Windows, create the
1790          user directory if it doesn't exist on a posix system.          user directory if it doesn't exist on a posix system.
1791            Fixes RTbug #1815.
1792    
1793          * Thuban/Model/resource.py (get_user_proj_files): Moved the          * Thuban/Model/resource.py (get_user_proj_files): Moved the
1794          called to get_application_dir here, so that the directory          called to get_application_dir here, so that the directory

Legend:
Removed from v.1191  
changed lines
  Added in v.1584

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26