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

Legend:
Removed from v.1178  
changed lines
  Added in v.1586

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26