/[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 1270 by bh, Fri Jun 20 16:10:40 2003 UTC revision 1596 by jan, Mon Aug 18 10:03:28 2003 UTC
# Line 1  Line 1 
1    2003-08-18  Jan-Oliver Wagner <[email protected]>
2    
3            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
4    
5    2003-08-15  Bernhard Herzog  <[email protected]>
6    
7            Change the way shapes are returned by a shape store. The
8            ShapesInRegion method returns an iterator over actual shape
9            objects instead of a list of shape ids.
10    
11            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
12            id.
13            (ShapefileStore.ShapesInRegion): Return an iterator over the
14            shapes which yields shape objects instead of returning a list of
15            shape ids
16            (ShapefileStore.AllShapes): New. Return an iterator over all
17            shapes in the shape store
18            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
19    
20            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
21            doc-string.
22    
23            * Thuban/UI/baserenderer.py
24            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
25            layer_shapes and make it return an iterator containg shapes
26            instead of a list of ids.
27            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
28            layer_shapes() change
29    
30            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
31            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
32    
33            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
34            changes in the ShapesInRegion return value.
35            (ViewPort._get_hit_tester): Remove commented out code
36    
37            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
38            new return value.
39            (SimpleShapeStore.AllShapes): New. Implement this method too.
40    
41            * test/test_layer.py (TestLayer.test_arc_layer)
42            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
43            (TestLayer.test_point_layer_with_projection)
44            (TestLayer.test_derived_store): Adapt to changes in the
45            ShapesInRegion return value.
46    
47            * test/test_shapefilestore.py
48            (TestShapefileStoreArc.test_shapes_in_region)
49            (TestShapefileStorePolygon.test_shapes_in_region)
50            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
51            in the ShapesInRegion return value.
52            (TestShapefileStorePoint.test_all_shapes)
53            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
54            methods
55    
56            * test/test_derivedshapestore.py
57            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
58            the ShapesInRegion return value.
59            (TestDerivedShapeStore.test_all_shapes)
60            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
61            methods
62    
63    2003-08-15  Bernhard Herzog  <[email protected]>
64    
65            Make the renderers deal correctly with raw vs. python level
66            representation of shape geometries
67    
68            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
69            Return a flag useraw in addition to the callable and the parameter
70            to indicate whether the callable can deal with the raw shape data
71            or uses the higher level python lists of coordinates. The callable
72            now should accept either the raw data or the return value of the
73            shape's Points() method.
74            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
75            change
76            (BaseRenderer.projected_points): Instead of the shape id use the
77            points list as parameter.
78            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
79            (BaseRenderer.draw_point_shape): Adapt to projected_points()
80            change and accept the points list as parameter instead of the
81            shape id.
82    
83            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
84            the useraw flag as required by the BaseRenderer
85            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
86            changes.
87    
88            * test/test_baserenderer.py
89            (TestBaseRenderer.test_point_with_classification): New test for
90            rendering a map with classifications.
91    
92    2003-08-15  Bernhard Herzog  <[email protected]>
93    
94            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
95            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
96            (ViewPort._get_hit_tester, ViewPort.projected_points)
97            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
98            (ViewPort._find_label_at): Split the find_shape_at method into
99            several new methods and use the functions in the hit-test module.
100    
101            * Thuban/UI/hittest.py: New module with Python-level hit-testing
102            functions
103    
104            * test/test_hittest.py: New. Test for the new hittest module
105    
106    2003-08-15  Bernhard Herzog  <[email protected]>
107    
108            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
109            projection to all corners of the bounding box to get a better
110            approximation of the projected bounding box
111    
112            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
113            New. Test coordinate handling of a layer with a projection.
114            Catches the bug fixed in Layer.ShapesInRegion
115    
116    2003-08-15  Bernhard Herzog  <[email protected]>
117    
118            Move some of the mock objects in test_baserenderer into their own
119            module so they can easily be used from other tests
120    
121            * test/mockgeo.py: New test helper module with some mock objects
122            for geometry related things like shapes, shapestores and
123            projections.
124    
125            * test/test_mockgeo.py: New. Tests for the new helper module
126    
127            * test/test_baserenderer.py: Some of the mock-objects are in
128            mockgeo now.
129    
130    2003-08-12  Jan-Oliver Wagner <[email protected]>
131    
132            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
133    
134    2003-08-12  Bernhard Herzog  <[email protected]>
135    
136            * po/de.po: New. German translations by Bjoern Broscheit
137    
138    2003-08-12  Bernhard Herzog  <[email protected]>
139    
140            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
141            strings have to be one string literal.
142    
143    2003-08-11  Bernhard Herzog  <[email protected]>
144    
145            * test/support.py (FloatComparisonMixin.assertPointListEquals):
146            New. This method was used in various derived classes, but it's
147            better to have it here.
148    
149            * test/test_shapefilestore.py
150            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
151            FloatComparisonMixin
152    
153            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
154            It's now in FloatComparisonMixin
155    
156            * test/test_derivedshapestore.py
157            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
158            in FloatComparisonMixin
159    
160    2003-08-11  Bernhard Herzog  <[email protected]>
161    
162            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
163            error message
164    
165    2003-08-08  Jan-Oliver Wagner <[email protected]>
166    
167            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
168            with version number.
169            Changed title to reflect version number of Thuban.
170    
171    2003-08-08  Jan-Oliver Wagner <[email protected]>
172    
173            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
174            the list corresponds to the "About" web page.
175    
176    2003-08-08  Bernhard Herzog  <[email protected]>
177    
178            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
179            Make sure translated strings are recognized as one string literal.
180    
181            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
182            Make sure translated strings are recognized as one string literal.
183    
184            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
185            translated strings are recognized as one string literal.
186    
187            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
188            sure translated strings are recognized as one string literal.
189    
190    2003-08-07  Bernhard Herzog  <[email protected]>
191    
192            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
193            Simply delegates to the original shapestore.
194    
195            * test/test_derivedshapestore.py
196            (TestDerivedShapeStore.test_raw_format): New. Test case for
197            DerivedShapeStore.RawShapeFormat
198    
199    2003-08-07  Bernhard Herzog  <[email protected]>
200    
201            Add raw data interface to shape objects.
202    
203            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
204            class to ShapefileShape which now holds shapefile specific
205            information.
206            (ShapefileShape.compute_bbox): Simplified to not cache any
207            information. The way this method is used that shouldn't matter
208            performance wise.
209            (ShapefileShape.RawData): New. Return the shapeid which is the raw
210            data format for shapes from shapefiles.
211            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
212            in the shape objects returned by a shapestore. For a
213            ShapefileStore this is always RAW_SHAPEFILE.
214            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
215            method.
216    
217            * test/test_shapefilestore.py
218            (TestShapefileStore.test_raw_format): New test to test the raw
219            format feature of shapes.
220    
221            * Thuban/Model/layer.py: Remove the unused import of Shape from
222            data. It was only there for interface compatibility but it's not
223            used inside of Thuban and the generic Shape class has gone away.
224    
225            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
226            the raw data format and only use an optimized version of its a
227            shapefile.
228    
229    2003-08-07  Bernhard Herzog  <[email protected]>
230    
231            * test/test_baserenderer.py (SimpleShape): Shape class for the
232            tests.
233            (SimpleShapeStore.Shape): Use SimpleShape instead of
234            Thuban.Model.data.Shape to make the tests independed of the coming
235            changes.
236    
237    2003-08-07  Bernhard Herzog  <[email protected]>
238    
239            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
240            (ThubanTestProgram): New classes that extend the respective
241            classes from unittest. These new version support skipping tests
242            under certain expected conditions. In the Thuban test suite we
243            uses this for tests that require the optional gdal support.
244            (run_tests): Use ThubanTestProgram instead of the unittest.main()
245    
246            * test/runtests.py (main): Use the new ThubanTestRunner instead of
247            the normal one from unittest
248    
249            * test/test_layer.py (TestLayer.test_raster_layer): If this test
250            is not run because gdal support isn't available report this to the
251            runner.
252    
253            * test/test_baserenderer.py
254            (TestBaseRenderer.test_raster_no_projection): Do not run this test
255            if gdal support isn't available and report this to the runner.
256    
257    2003-08-06  Bernhard Herzog  <[email protected]>
258    
259            Rearrange the renderers a bit, partly in preparation for changes
260            required for the postgis merge, partly to make it more testable.
261            Also make the representation of coordinates in Shapes more
262            consistent.
263    
264            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
265            this class is now in BaseRenderer. This class is now practically
266            only a specialization of BaseRenderer for rendering to an actual
267            wx DC.
268            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
269            to get the shapetype specific rendering functions.
270    
271            * Thuban/UI/baserenderer.py: New file with the basic rendering
272            logic. The code in this file is completely independend of wx.
273            (BaseRenderer): Class with the basic rendering logic
274    
275            * test/test_baserenderer.py: New. Test cases for BaseRenderer
276    
277            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
278            error_on_redraw to guard agains endless loops and stack overflows
279            when there's a bug in the rendering code that raises exceptions.
280            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
281            rendering into a separate method _do_redraw so that error handling
282            is a bit easier. When an exception occurs, set error_on_redraw to
283            true. When it's true on entry to OnIdle do nothing and return
284            immediately.
285    
286            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
287            Shape object will always have the coordinates as a list of list of
288            coordinate pairs (tuples).
289            (Shape.compute_bbox): Adapt to new representation.
290    
291            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
292            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
293            Shape objects.
294    
295            * test/test_shapefilestore.py
296            (ShapefileStoreTests.assertFloatTuplesEqual)
297            (ShapefileStoreTests.assertPointListEquals): Rename to
298            assertPointListEquals and change purpose to checking equality of
299            the lists returned by Shape.Points().
300            (TestShapefileStoreArc.test_shape)
301            (TestShapefileStorePolygon.test_shape)
302            (TestShapefileStorePoint.test_shape): Use the new
303            assertPointListEquals instead of assertFloatTuplesEqual
304    
305            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
306            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
307            and change purpose to checking equality of the lists returned by
308            Shape.Points().
309            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
310            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
311            (TestLayer.test_derived_store): Use the new assertPointListEquals
312            instead of assertFloatTuplesEqual
313    
314            * test/test_derivedshapestore.py
315            (TestDerivedShapeStore.assertFloatTuplesEqual)
316            (TestDerivedShapeStore.assertPointListEquals): Rename to
317            assertPointListEquals and change purpose to checking equality of
318            the lists returned by Shape.Points().
319            (TestDerivedShapeStore.test_shape): Use the new
320            assertPointListEquals instead of assertFloatTuplesEqual
321    
322    2003-08-06  Jan-Oliver Wagner <[email protected]>
323    
324            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
325            a bounding box. A dialog is raised in case, no bounding box
326            is found. This fixes bug #2043:
327            https://intevation.de/rt/webrt?serial_num=2043
328    
329    2003-08-05  Bernhard Herzog  <[email protected]>
330    
331            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
332            object look like a Color instantiation. Formerly it looked like a
333            tuple.
334    
335            * test/test_color.py (TestColor.test_repr)
336            (TestColor.test_equality, TestColor.test_inequality): New. test
337            some more apects of the Color class
338            (TestTransparent.test_repr, TestTransparent.test_hex)
339            (TestTransparent.test_equality): New. Test cases for the
340            Transparent object.
341    
342    2003-08-04  Jan-Oliver Wagner <[email protected]>
343    
344            * Doc/manual/thuban-manual.xml: a number of small improvements.
345            The resulting file is the version submitted for GREAT-ER II.
346    
347    2003-08-01  Bernhard Herzog  <[email protected]>
348    
349            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
350            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
351            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
352    
353            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
354            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
355            (ThubanEndBusyCursor): Add doc-strings
356    
357    2003-08-01  Bernhard Herzog  <[email protected]>
358    
359            First step towards PostGIS integration. More abstraction by movin
360            more code from the layer to the shapestore. More methods of the
361            layer are now simply delegated to the equivalent method of the
362            shapestore. The SHAPETYPE_* constants are now in data not in
363            layer.
364    
365            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
366            (SHAPETYPE_POINT, Shape): Move these constants and classes from
367            layer.py to data.py
368            (ShapefileStore.__init__): More Initialization for the new methods
369            and functionality.
370            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
371            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
372            (ShapefileStore.Shape): New methods that were formerly implemented
373            in the layer.
374            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
375            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
376            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
377            equivalents of the new shape methods. These versions are simply
378            delegated to the original shapstore.
379    
380            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
381            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
382            (Layer.SetShapeStore): Removed the initializatin of instance
383            variables that were needed for the stuff that's now in
384            ShapefileStore
385            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
386            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
387            shapestore.
388    
389            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
390            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
391            instead of layer.
392    
393            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
394    
395            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
396    
397            * test/test_layer.py: Import the SHAPETYPE_* constants from data
398            instead of layer.
399            (TestLayer.test_derived_store): Remove the test for the exception
400            when instantiating the DerivedShapeStore with an incompatible
401            table which is now in test_derivedshapestore.py. Add some more
402            tests of the layer methods to determine whether they work for a
403            DerivedShapeStore as well.
404    
405    2003-07-31  Jonathan Coles   <[email protected]>
406    
407            * Doc/manual/thuban-manual.xml: Fix the list of required packages
408            by just listing the name and where they can be found.
409    
410    2003-07-31  Frank Koormann   <[email protected]>
411    
412            * Doc/manual/thuban-manual.xml:
413            Changed the screenshot elements to figure.
414            Changed some variablelist elements to itemizedlist.
415            Added section on GDAL formats.
416    
417    2003-07-31  Jonathan Coles   <[email protected]>
418    
419            * Doc/manual/thuban-manual.xml: Added a few sentences about
420            the Fix Border Color option when generating classes.
421    
422    2003-07-30  Jonathan Coles   <[email protected]>
423    
424            * Thuban/Model/classgen.py: Add docstrings. Rename specific
425            Ramp instances to use lower_case_style.
426    
427            * Thuban/UI/classgen.py: Use renamed Ramp instances.
428            
429            * Thuban/UI/classifier.py: Add docstrings.
430    
431            * Thuban/UI/dock.py: Add docstrings.
432    
433            * test/test_classgen.py: Use renamed Ramp instances.
434    
435    2003-07-30  Bernhard Herzog  <[email protected]>
436    
437            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
438            was never used in Thuban.
439    
440    2003-07-30  Bernhard Herzog  <[email protected]>
441    
442            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
443            method directly instead of going through the transient_table
444            method. This faster because transient_table may force the copy of
445            a DBF file into the transient database and setting a table's title
446            doesnm't affect the title of the associated transient table, so
447            this fixes RT #2042
448    
449            * Thuban/UI/main.py (__version__): Don't import the already
450            removed show_exception_dialog.
451    
452    2003-07-29  Jonathan Coles   <[email protected]>
453    
454            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
455            Put back this method and remove the equivalent function since we
456            are setting the exception hook from within this class (OnInit).
457    
458    2003-07-29  Jonathan Coles   <[email protected]>
459    
460            * Doc/manual/images/5_2_custom_ramp.png,
461            Doc/manual/images/5_2_quantiles.png,
462            Doc/manual/images/5_2_uniform_dist.png,
463            Doc/manual/images/5_2_unique_values.png,
464            Doc/manual/images/8_int_error.png: New screen shots.
465    
466            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
467            some points, and added more screen shots.
468    
469    2003-07-29  Bernhard Herzog  <[email protected]>
470    
471            * Thuban/Model/data.py: Remove the now unused import of warnings
472    
473    2003-07-29  Bernhard Herzog  <[email protected]>
474    
475            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
476            deprecated since before the 0.8 release and isn't used in Thuban
477            itself anymore.
478    
479            * Thuban/Model/transientdb.py: Remove some unnecessary imports
480    
481    2003-07-29  Jonathan Coles   <[email protected]>
482    
483            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
484            python exception hook here so that we are sure to catch any
485            Thuban exception that happen during initialization.
486    
487            * Thuban/UI/main.py (main): Don't set the exception hook here,
488            it will get set in ThubanApplication.OnInit.
489    
490    2003-07-29  Jonathan Coles   <[email protected]>
491                                                                                
492            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
493            Removed and called it show_exception_dialog() so that the exception
494            handler can be set before the class is created.
495                                                                                
496            * Thuban/UI/main.py (main): Install the exception handler before
497            a ThubanApplication is created.
498                                                                                    
499    2003-07-29  Bernhard Herzog  <[email protected]>
500    
501            * po/it.po: New. Italian translation by Maurizio Napolitano
502    
503            * po/ru.po: New. Russian translation by Alex Shevlakov
504    
505    2003-07-29  Frank Koormann   <[email protected]>
506    
507            * Doc/manual/thuban-manual.xml: Extended section on supported
508            projections.
509            
510    2003-07-29  Frank Koormann   <[email protected]>
511    
512            * Doc/manual/thuban-manual.xml: gaspell-checked.
513    
514    2003-07-29  Jonathan Coles   <[email protected]>
515    
516            * Doc/manual/images/3_5_legend.png: Added border to improve look
517            on white background.
518    
519    2003-07-29  Jonathan Coles   <[email protected]>
520    
521            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
522            descriptions for the legend toolbar.
523    
524            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
525            cursor from dialog box.
526    
527    2003-07-28  Jonathan Coles   <[email protected]>
528    
529            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
530    
531            * Doc/manual/images/2_4_session_tree.png,
532            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
533            Doc/manual/images/4_2_layer_properties.png,
534            Doc/manual/images/4_2_raster_layer_properties.png,
535            Doc/manual/images/5_3_genclass.png,
536            Doc/manual/images/5_classification.png,
537            Doc/manual/images/6_projection.png,
538            Doc/manual/images/7_1_table_view.png,
539            Doc/manual/images/7_2_5_join.png: New screenshots.
540    
541    2003-07-24  Jonathan Coles   <[email protected]>
542    
543            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
544    
545    2003-07-24  Jonathan Coles   <[email protected]>
546    
547            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
548            chapter on Layer Management.
549    
550            * Doc/manual/Makefile: New. Makefile to generate all formats for the
551            manual and images.
552    
553    2003-07-24  Bernhard Herzog  <[email protected]>
554    
555            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
556            it annoys lintian which warns about these files not being
557            executable. The #1 isn't necessary here since if you absolutely
558            must execute them you can always say "python <filename>".
559    
560            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
561            superfluous code to set brush and pen for point shapes
562    
563            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
564            belong in viewport anyway
565    
566    2003-07-24  Frank Koormann   <[email protected]>
567    
568            * Doc/manual/thuban-manual.xml: Added section on table management.
569    
570    2003-07-24  Bernhard Herzog  <[email protected]>
571    
572            * test/runtests.py (main): Recognize the long "verbose" option
573            correctly.
574    
575    2003-07-22  Jonathan Coles   <[email protected]>
576    
577            * Doc/manual/thuban-manual.xml: Continue to write first revision
578            of the manual.
579    
580            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
581            with Begin/EndDrawing() calls to ensure we aren't doing to
582            many updates to the dc during rendering.
583            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
584            a pen and brush argument so they need to be passed to the function.
585    
586            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
587            Calculates the minimum and maximum scale values. Factored out
588            of set_view_transform so that it could be used to zoom all the
589            way into a single point.
590            (ViewPort.set_view_transform): Call calc_min_max_scales().
591            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
592            if only a single point is selected.
593    
594            * Doc/manual/images/1_2_legend_close.png,
595            Doc/manual/images/1_2_legend_dock.png,
596            Doc/manual/images/1_2_mainwindow.png,
597            Doc/manual/images/1_2_mainwindow.ps,
598            Doc/manual/images/1_2_mainwindow.sk,
599            Doc/manual/images/3_2_fullextent.png,
600            Doc/manual/images/3_2_fulllayerextent.png,
601            Doc/manual/images/3_2_fullshapeextent.png,
602            Doc/manual/images/3_2_pan.png,
603            Doc/manual/images/3_2_zoomin.png,
604            Doc/manual/images/3_2_zoomout.png,
605            Doc/manual/images/3_3_identify.png,
606            Doc/manual/images/3_3_label.png,
607            Doc/manual/images/3_5_invisible.png,
608            Doc/manual/images/3_5_movedown.png,
609            Doc/manual/images/3_5_moveup.png,
610            Doc/manual/images/3_5_props.png,
611            Doc/manual/images/3_5_tobottom.png,
612            Doc/manual/images/3_5_totop.png,
613            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
614    
615    2003-07-18  Bernhard Herzog  <[email protected]>
616    
617            * Thuban/UI/messages.py (MAP_REPLACED): New message.
618    
619            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
620            after the new map has been assigned
621    
622            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
623            Delegate MAP_REPLACED to the canvas too
624            (MainWindow.prepare_new_session): Removed. Thanks to the new
625            MAP_REPLACED message it's no longer needed
626            (MainWindow.OpenSession, MainWindow.NewSession):
627            prepare_new_session has been removed.
628    
629            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
630            MAP_REPLACED so that we can close the dialog if a new map is set.
631            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
632            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
633            dialog
634    
635            * test/test_viewport.py (SimpleViewPortTest)
636            (SimpleViewPortTest.test_default_size): Add doc-strings
637            (ViewPortTest.setUp): Bind map to self.map so we can use it in
638            tests. Subscribe to MAP_REPLACED messages too.
639            (ViewPortTest.tearDown): No need to explicitly unsubscribe
640            (ViewPortTest.test_set_map): New test for the SetMap method.
641    
642    2003-07-18  Bernhard Herzog  <[email protected]>
643    
644            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
645            Move this test from ViewPortTest.setUp to this new separate test
646            case. setUp is not the place for the actual tests.
647            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
648            more of the test from setUp to the new test test_inital_settings.
649            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
650            (ViewPortTest.test_proj_conv): Split test_proj_conv into
651            test_win_to_proj and test_proj_to_win and make the tests easier to
652            understand
653            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
654            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
655            (ViewPortTest.test_unprojected_rect_around_point)
656            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
657            Reformat to increase readability.
658    
659    2003-07-18  Bernhard Herzog  <[email protected]>
660    
661            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
662    
663    2003-07-18  Bernhard Herzog  <[email protected]>
664    
665            * test/runtests.py: The test suite can now be run without an X
666            connection. To make sure this remains true, remove the DISPLAY
667            environment variable so that an error occurs if the wxGTK is
668            imported accidentally
669    
670    2003-07-18  Bernhard Herzog  <[email protected]>
671    
672            * Thuban/UI/viewport.py: Remove unused imports
673    
674            * Thuban/UI/view.py: Remove unused imports
675    
676    2003-07-18  Bernhard Herzog  <[email protected]>
677    
678            * test/test_export.py Remove unused imports. The OutputTransform
679            function is now in viewport.py and is called output_transform
680            (TestScalebar.test_output_transform)
681            (TestScalebar.test_OutputTransform): Renamed to
682            test_output_transform and updated to use output_transform instead
683            of OutputTransform
684    
685            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
686            renamed.
687            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
688            renamed to output_transform
689    
690            * Thuban/UI/viewport.py (OutputTransform, output_transform):
691            Rename to output_transform
692    
693    2003-07-18  Bernhard Herzog  <[email protected]>
694    
695            * Thuban/Model/layer.py (Layer.__init__): Rename
696            classificationField to classificatin_column and init it here so
697            that it can be used in SetClassificationColumn
698            (Layer.GetClassificationColumn, Layer.GetClassificationField):
699            Rename to GetClassificationColumn.
700            (Layer.SetClassificationColumn, Layer.SetClassificationField):
701            Rename to SetClassificationColumn and issue a LAYER_CHANGED
702            message if the column changes.
703            (Layer._classification_changed, Layer.ClassChanged): Rename to
704            _classification_changed. Update the callers.
705            (Layer.SetShapeStore): Further field->column renames.
706    
707            * Thuban/Model/load.py (SessionLoader.start_classification)
708            (SessionLoader.start_clpoint): Updates because of
709            field->column method name changes in the Layer class
710    
711            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
712            because of field->column method name changes in the Layer class
713    
714            * Thuban/UI/classifier.py (Classifier.__init__)
715            (Classifier._OnTry, Classifier._OnRevert): Updates because of
716            field->column method name changes in the Layer class
717    
718            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
719            because of field->column method name changes in the Layer class
720    
721            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
722            of field->column method name changes in the Layer class
723    
724            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
725            (SaveSessionTest.testClassifiedLayer): Update because of
726            field->column method name changes in the Layer class
727    
728            * test/test_layer.py (SetShapeStoreTests.setUp)
729            (SetShapeStoreTests.test_sanity): Update because of field->column
730            method name changes in the Layer class
731            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
732            (TestLayerModification.test_sanity)
733            (TestLayerModification.test_initial_settings): remove unsued code
734            and rename to test_sanity.
735            (TestLayerModification.test_set_classification): New test for
736            SetClassification and SetClassificationField.
737    
738    2003-07-18  Bernhard Herzog  <[email protected]>
739    
740            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
741            the non-fixed values as well. The old test would have accepted a
742            fixed ramp that only returnes the fixed properties
743    
744    2003-07-17  Jonathan Coles   <[email protected]>
745    
746            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
747            shots for the manual. The XCF file is the source image and
748            has additional layers to support changes.
749    
750            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
751    
752            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
753            Return both the new class and the field name.
754    
755            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
756            fit the map to the window as this changes any zoom level that
757            the user may have set.
758    
759    2003-07-16  Jonathan Coles   <[email protected]>
760    
761            * Thuban/Model/classgen.py (generate_singletons,
762            generate_uniform_distribution, generate_quantiles): Remove
763            fixes parameter, but maintain the same functionality by having
764            the calling function pass a FixedRamp object for the ramp.
765            (FixedRamp): New. Adapts a ramp to have fixed property values.
766    
767            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
768            (Classification): Inherit from Publisher.
769            (Classification.__init__): Remove the layer parameter.
770            Classifications no longer need to have a parent layer.
771            (Classification.GetField, Classification.GetFieldType,
772            Classification.SetFieldInfo): Removed. The field name is stored
773            in the layer, and the type can be retreived by calling
774            Layer.GetFieldType().
775            (Classification._set_layer, Classification.GetLayer): Removed.
776            Classifications no longer have a parent layer.
777    
778            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
779            classification.
780            (Layer.SetShapeStore): Reset the classification first while
781            we still have the old shape store to work with.
782            (Layer.GetClassificationField, Layer.SetClassificationField):
783            New. Method for getting/setting the field to classify on.
784            (Layer.SetClassification): Simplified now that the layer
785            simply has to hold a reference to the classification and not
786            tell the classification who owns it.
787            Fixes RTbug #2023.
788    
789            * Thuban/Model/load.py (SessionLoader.start_classification):
790            Set the field name on the layer, not the classification.
791    
792            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
793            classification is modified.
794    
795            * Thuban/Model/save.py (SessionSaver.write_classification):
796            Get the field name and type from the layer.
797    
798            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
799            parameter records to rows and add docstring. Fixes RTbug #1997.
800    
801            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
802            ramp when we need to fix certain values of a ramp rather than
803            using the old fixes parameter. Fixes RTbug #2024.
804    
805            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
806            parameter.
807            (ClassTable.Reset): Add fieldType parameter and use it, rather
808            than asking the classification.
809            (Classifier.__init__): Remember the original class's field
810            and ask the layer for the field type, rather than the classification.
811            (Classifier.__SetGridTable): Retrieve the field and field type
812            for the table because they are not in the classification.
813            (Classifier._OnTry, Classifier._OnRevert): Set the classification
814            field on the layer in addition to the classification itself.
815    
816            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
817            classification field from layer.
818    
819            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
820            classification field from layer. Split up tests and remove
821            *-imports. Fixes RTbug #1992.
822    
823            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
824    
825            * test/test_classification.py
826            (TestClassification.test_classification): Remove tests for methods
827            that no longer exist.
828    
829            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
830            __init__ no longer has a field parameter, use SetClassificationField.
831            (SetShapeStoreTests.test_sanity): Use layer object to get class
832            field info.
833    
834            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
835            SetClassificationField on layer to set class field info.
836    
837            * test/test_viewport.py: Renamed from test/test_view.py.
838    
839    2003-07-16  Jan-Oliver Wagner <[email protected]>
840    
841            * Doc/manual/thuban-manual.xml: Added authors and an initial
842            coarse structure.
843    
844    2003-07-15  Bernhard Herzog  <[email protected]>
845    
846            * test/support.py (FloatComparisonMixin): This is a mix-in class
847            and therefore should not be derived from any other class.
848    
849            * test/test_range.py (RangeTest): FloatComparisonMixin is a
850            mix-in, so derive from TestCase as well.
851    
852    2003-07-15  Bernhard Herzog  <[email protected]>
853    
854            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
855            draw_func handling a bit to remove one layer of indirection. This
856            makes the renderer about 10% faster in the non-classifying case
857            and the code a bit cleaner
858            (MapRenderer.draw_point_shape): Add the pen and brush parameters
859            and set them in the dc. Now the draw_point_shape method and
860            wxproj's draw_polygon_shape function have basically the same
861            signature so that both can be directly used as draw_func
862    
863    2003-07-15  Bernhard Herzog  <[email protected]>
864    
865            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
866            string values (in addition to the labels) as UTF 8
867    
868            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
869            values if the field type is string
870    
871            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
872            saving a session with non-ascii string classification values.
873    
874            * test/test_load.py (TestClassification.file_contents)
875            (TestClassification.test): Check for non-ascii values in string
876            classifications
877    
878    2003-07-14  Jonathan Coles   <[email protected]>
879    
880            * test/test_view.py: New. Tests for ViewPort.
881    
882    2003-07-14  Frank Koormann   <[email protected]>
883    
884            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
885            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
886    
887            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
888            unicode strings from session file: session title, map title and
889            projection name.
890            
891    2003-07-10  Jonathan Coles   <[email protected]>
892    
893            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
894            drag_stop, not drag_move when the mouse is released.
895    
896    2003-07-10  Jonathan Coles   <[email protected]>
897    
898            The most important part of this is the seperation of view.py into
899            two pieces. viewport.py now has a class called ViewPort which
900            contains all the non-wx parts of view.py and can therefore be
901            tested. view.py contains only the wx-specific parts and is fairly
902            simple.
903    
904            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
905            RTTbug #1992.
906            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
907            RTTbug #1992.
908    
909            * Thuban/Model/classgen.py (generate_singletons,
910            generate_uniform_distribution, generate_quantiles):
911            Added 'fixes' parameter so that property attributes can
912            be held constant over the generated classification groups.
913            (CustomRamp.GetProperties): Remove unused variables.
914    
915            * Thuban/Model/map.py (Map.SetProjection): Send the old
916            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
917            event.
918    
919            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
920            parameter which is a list of records that restricts which
921            records are saved. Fixes RTbug #1997.
922    
923            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
924            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
925    
926            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
927            to allow the user to fix line color/width on generated groups.
928            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
929            functions to optionally fix group properties.
930    
931            * Thuban/UI/main.py (main): Set exception hook to the
932            ShowExceptionDialog. Fixes RTbug #1993.
933    
934            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
935            the table window when it is selectd to be shown.
936    
937            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
938            Export Selection button and move the export buttons underneath
939            the table.
940            (QueryTableFrame.UpdateStatusText): Added event argument so
941            that it can respond to grid selection events. The status text
942            is now updated even when the table is not associated with a
943            layer as was previously assumed.
944            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
945            UpdateStatusText responds to these events.
946            (QueryTableFrame.OnSaveAs): Renamed to doExport.
947            (QueryTableFrame.doExport): Helper function that saves the
948            entire table, or selected rows, to a file.
949            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
950            Respond to export button events and call doExport.
951    
952            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
953            the function doesn't return NULL without first setting a Python
954            Error.
955    
956            * test/runtests.py (main): Only print "Unknown option" for
957            unsupported options.
958    
959            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
960            optional epsilon argument to specify floating point accuracy.
961            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
962            for each item test.
963    
964            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
965            tests for saving selected records.
966    
967            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
968            tests for saving selected records.
969    
970            * test/test_map.py (TestMapWithContents.test_set_projection):
971            MAP_PROJECTION_CHANGED events send the old projection.
972    
973            * test/test_session.py
974            (TestSessionWithContent.test_forward_map_projection):
975            MAP_PROJECTION_CHANGED events send the old projection.
976    
977            * test/test_table.py (TableTest): Update tests to use non-deprecated
978            functions.
979    
980    2003-07-08  Bernhard Herzog  <[email protected]>
981    
982            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
983            constants in the column objects are the standard ones defined in
984            the table module.
985    
986            * test/test_transientdb.py
987            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
988            exporting transient tables as DBF works. This should catch the bug
989            just fixed in TransientTableBase.Width.
990    
991    2003-07-08  Bernhard Herzog  <[email protected]>
992    
993            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
994            interpolated colors correctly.
995    
996            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
997            New. Test case for the fix in classgen.py
998    
999    2003-07-08  Bernhard Herzog  <[email protected]>
1000    
1001            * test/runtests.py (main): Make the default output less verbose
1002            and add a verbosity option (-v) to get the old output
1003    
1004    2003-07-08  Bernhard Herzog  <[email protected]>
1005    
1006            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
1007            0.9.
1008    
1009            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
1010            New. Return the join type
1011    
1012            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
1013            DTD
1014            (SessionSaver.write_data_containers): Save the join type for
1015            joined tables
1016    
1017            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
1018            namespace
1019            (SessionLoader.start_jointable): Handle the jointype attribute
1020    
1021            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
1022            as of Thuban 0.8. These are now tests to determine whether Thuban
1023            can still read files generated by Thuban 0.8
1024    
1025            * test/test_load.py (LoadSessionTest.dtd)
1026            (TestSingleLayer.file_contents)
1027            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1028            (TestLayerProjection.file_contents)
1029            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1030            (TestJoinedTable.file_contents)
1031            (TestLoadError.file_contents): Update for new DTD
1032            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
1033            for new join type attribute
1034    
1035            * test/test_save.py (SaveSessionTest.dtd)
1036            (SaveSessionTest.testEmptySession)
1037            (SaveSessionTest.testSingleLayer)
1038            (SaveSessionTest.testLayerProjection)
1039            (SaveSessionTest.testRasterLayer)
1040            (SaveSessionTest.testClassifiedLayer)
1041            (SaveSessionTest.test_dbf_table)
1042            (SaveSessionTest.test_joined_table): Update for new DTD
1043            (SaveSessionTest.test_joined_table): Add test for new join type
1044            attribute
1045    
1046    2003-07-04  Bernhard Herzog  <[email protected]>
1047    
1048            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
1049            function for table_to_dbf
1050            (table_to_dbf): Deal with names longer than the 10 character limit
1051    
1052            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
1053            doc-string
1054            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
1055            long column names
1056    
1057    2003-07-03  Bernhard Herzog  <[email protected]>
1058    
1059            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
1060    
1061    2003-07-03  Bernhard Herzog  <[email protected]>
1062    
1063            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
1064            for the Thuban manual and README with some basic information about
1065            the manual
1066    
1067    2003-07-03  Bernhard Herzog  <[email protected]>
1068    
1069            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
1070            Update doc-string
1071            (TransientJoinedTable.create): Do not modify the column objects of
1072            the input tables in place and copy all columns of the input tables
1073            into the joined table after all.
1074    
1075            * test/test_transientdb.py
1076            (TestTransientTable.test_transient_joined_table_same_column_name):
1077            Update to reflect the new behavior
1078            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
1079            Update to reflect the new behavior
1080            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
1081            New test case for a bug which modified the column objects in place
1082    
1083    2003-07-02  Jonathan Coles   <[email protected]>
1084    
1085            * Thuban/Model/classgen.py (generate_singletons,
1086            generate_uniform_distribution, generate_quantiles,
1087            GenQuantiles0): Make sure maxValue isn't less than
1088            one, otherwise we could divide by zero.
1089    
1090            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
1091            ClassGenTest.doClassSingleTest): Call doBoundsTest to
1092            check the end classification groups against the
1093            proper property values.
1094            (ClassGenTest.doBoundsTest): New. Checks the first and
1095            last classification groups to make sure their properties
1096            are the correct upper and lower bounds for a color ramp.
1097    
1098    2003-07-02  Jonathan Coles   <[email protected]>
1099    
1100            * Thuban/Model/classgen.py (generate_singletons,
1101            generate_uniform_distribution, generate_quantiles,
1102            GenQuantiles0): The denominator was one to high when
1103            calculating the index for the ramp causing the index
1104            to never to reach one.
1105    
1106    2003-07-02  Jonathan Coles   <[email protected]>
1107    
1108            Changed the singature of ClassGroupRange.__init__ and
1109            ClassGroupRange.SetRange() so that the min/max values are
1110            passed as a tuple. This makes a better calling scheme for
1111            when a Range object is passed instead.
1112    
1113            * Thuban/Model/classgen.py: Fixed parameters to
1114            ClassGroupRange constructor.
1115    
1116            * Thuban/Model/classification.py (ClassGroupRange.__init__):
1117            Consolidate the min/max parameters into a single _range which
1118            can either be a tuple or a Range object.
1119            (ClassGroupRange.SetRange): Consolidate the min/max parameters
1120            into a single _range which can either be a tuple or a Range object.
1121    
1122            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
1123            call to ClassGroupRange constructor to use a tuple.
1124    
1125            * Thuban/Model/layer.py (Layer.SetClassification): Switch
1126            the classification instance variable to the new class
1127            before calling _set_layer otherwise subscribers to a
1128            LAYER_CHANGED event will not see any difference.
1129    
1130            * test/test_classification.py: Fix tests of ClassGroupRange
1131            so that they use the new signature.
1132    
1133            * test/test_load.py: Fix use of ClassGroupRange so that it
1134            uses the new signature.
1135    
1136            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
1137            uses the new signature.
1138    
1139            * test/test_save.py: Fix use of ClassGroupRange so that it
1140            uses the new signature.
1141    
1142    
1143    2003-07-01  Jonathan Coles   <[email protected]>
1144    
1145            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
1146            Import used objects/class from color.
1147            (generate_singletons): We don't
1148            need the numGroups parameter anymore because we are using
1149            the new ramps with GetProperties().
1150            (generate_uniform_distribution): Use new ramp method
1151            GetProperties().
1152            (generate_quantiles, GenQuantiles0): Use new ramp method
1153            GetProperties().
1154            (CustomRamp.SetNumGroups): Removed. The ramps now map
1155            a value from 0 to 1 to class properties so the number
1156            of groups is not needed ahead of time.
1157            (CustomRamp.next): Removed. CustomRamp does not support
1158            interation anymore.
1159            (CustomRamp.GetProperties): Returns a ClassGroupProperties
1160            object based on the index value from 0 to 1 that is
1161            passed to it.
1162            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
1163            Made into instances of Monochromatic class instread of
1164            deriving from it.
1165            (HotToCold.SetNumGroups): Removed. See CustomRamp.
1166            (HotToCold.next): Removed. See CustomRamp.
1167    
1168            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
1169            (Classification.SetField, Classification.SetFieldType):
1170            Replaced with SetFieldInfo.
1171            (Classification.SetFieldInfo): New. Does a better job of
1172            what SetField and SetFieldType used to do by combining
1173            their function since they should really always be done
1174            at the same time.
1175            (Classification.SetLayer): Renamed to _set_layer.
1176            (Classification._set_layer): Should only be called from
1177            Layer's SetClassification. This does not cause a recursive
1178            call as SetLayer did because we know that Layer knows about
1179            the classification.
1180    
1181            * Thuban/Model/color.py: Fixes RTbug #1971.
1182            (_Transparent): Renamed from Transparent so it doesn't
1183            conflict with the module variable.
1184            (Transparent, Black): Renamed from Color.Transparent,
1185            Color.Black so they are not class variables.
1186    
1187            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
1188            (Layer.Destroy): We don't need to call SetClassification
1189            anymore to clear out the back reference in the classifcation
1190            to the layer. It's better to set it to None using _set_layer,
1191            and we won't be creating another clas object too.
1192            (Layer.SetClassification): Classification._set_layer is not
1193            recursive so remove all the locking variables. Also clean
1194            up the code so that it remains unchanged if something fails.
1195    
1196            * Thuban/Model/load.py: Fixes RTbug #1971.
1197            (SessionLoader.start_classification): Call
1198            Classification.SetFieldInfo().
1199    
1200            * Thuban/Model/save.py: Removed import of Color which wasn't
1201            being used.
1202    
1203            * Thuban/UI/classgen.py: Fixes RTbug #1972.
1204            (ClassGenDialog.__init__): Color ramps are now instances
1205            already so we don't need to create any new objects.
1206            (ClassGenDialog.OnOK): Check for numGroups is no longer
1207            necessary because we never use it.
1208    
1209            * Thuban/UI/classifier.py: Fixes RTbug #1971.
1210            (Classifier.__BuildClassification, Classifier.__SetGridTable):
1211            Call Classification.SetFieldInfo() instead of SetFieldType.
1212    
1213            * Thuban/UI/renderer.py: Fixes RTbug #1971.
1214    
1215            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
1216            (MapCanvas.__init__): Subscribe to the idle time event. Set
1217            background color to white.
1218            (MapCanvas.OnPaint): Set a flag indicating that we should
1219            render the map during idle time. If we already have a bitmap
1220            just draw it now.
1221            (MapCanvas.OnIdle): New. Render the map only during idle time.
1222            This also fixes a problem with the busy cursor under gtk.
1223    
1224            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
1225            Fix calls to generate_singletons because the signature changed.
1226    
1227            * test/test_classification.py: Fix color references and
1228            change calls to Classification.[SetField|SetFieldType] to
1229            SetFieldInfo.
1230    
1231            * test/test_load.py: Fix color references.
1232    
1233            * test/test_load_0_2.py: Fix color references.
1234    
1235            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
1236            Change calls to Classification.[SetField|SetFieldType] to
1237            SetFieldInfo.
1238    
1239    2003-07-01  Frank Koormann   <[email protected]>
1240    
1241            MERGE from the greater-ms3 branch.
1242    
1243            * test/test_transientdb.py
1244            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
1245            New. Test join of two tables with partly equal column names.
1246    
1247            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
1248            If duplicates in left and right tables column names are found,
1249            append '_' (underscores) to the name until it is unique.
1250            Create always new internal names for the resulting table and reference
1251            columns in the join statement with <table>.<column>
1252    
1253    2003-07-01  Bernhard Herzog  <[email protected]>
1254    
1255            * test/test_transientdb.py
1256            (TestTransientTable.test_transient_joined_table_same_column_name):
1257            New. Test whether joining on columns with the same names in both
1258            tables works.
1259            
1260            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
1261            sure to use the right internal names even when joining on field
1262            with the same names in both tables. Also, detect duplicate names
1263            in the joined table correctly.
1264    
1265    2003-07-01  Frank Koormann   <[email protected]>
1266    
1267            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
1268            Reverse List of layers to render in same order as in desktop legend.
1269    
1270    2003-06-30  Jonathan Coles   <[email protected]>
1271    
1272            * Thuban/version.py (make_tuple): Takes a version string
1273            and splits it into a tuple of at most three integers.
1274            Used make_tuple() to make tuple versions of the version
1275            numbers.
1276    
1277            * Thuban/UI/about.py: Add Thuban email addresses.
1278    
1279    2003-06-30  Jonathan Coles   <[email protected]>
1280    
1281            * Thuban/version.py: SQLite/PySQLite version dependencies
1282            were too high.
1283    
1284    2003-06-30  Jonathan Coles   <[email protected]>
1285    
1286            * Thuban/version.py: Update version to 0.8.1
1287            
1288            * MANIFEST.in: Added Projections so that default.proj is
1289            included.
1290    
1291    2003-06-26  Jonathan Coles   <[email protected]>
1292    
1293            New About box with lots more information including library
1294            versions and credits. More/better version checking before
1295            Thuban starts.
1296    
1297            * Thuban/UI/about.py: New. New About box that displays
1298            library version information and credits.
1299    
1300            * Thuban/version.py: Added new 'versions' dictionary which
1301            contains the verions of various libraries which are checked
1302            when the module loads.
1303            (verify_versions): Check all version numbers and returns
1304            a list of errors.
1305    
1306            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
1307            Reset the status of the buttons as the situation warrants,
1308            but in a better more reliable way by not relying on the
1309            current status to determine what needs to change.
1310    
1311            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
1312            (verify_versions): Remove most of the code since it is
1313            now in Thuban.version.verify_versions.o
1314    
1315            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
1316            About box in Thuban.UI.about.
1317    
1318            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
1319            Returns the version of gdal library being used as a string.
1320    
1321            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
1322            Removed.
1323            (get_proj_version): Return the version of PROJ that the file
1324            was compiled with.
1325            (get_gtk_version): Return th version of GTK that the file
1326            was compiled with.
1327    
1328    2003-06-25  Jonathan Coles   <[email protected]>
1329    
1330            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
1331            of the SelectPropertiesDialog should be self so the window
1332            appears on top.
1333            (ClassGroupPropertiesCtrl.DoEdit): The parent
1334            of the SelectPropertiesDialog should be self so the window
1335            appears on top.
1336    
1337            * Thuban/UI/resource.py: Cleaned up how we determine file
1338            extensions.
1339            (GetImageResource): Return an wxImage from our Resources.
1340    
1341    2003-06-24  Jonathan Coles   <[email protected]>
1342    
1343            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
1344            Check that a layer has a classification before trying
1345            to get it. Raster layers don't have classifications.
1346    
1347    2003-06-23  Jonathan Coles   <[email protected]>
1348            
1349            * setup.py: Add Resources/XML to resource list.
1350        
1351    2003-06-23  Jonathan Coles   <[email protected]>
1352    
1353            * setup.cfg: Fix copyright dates
1354        
1355    2003-06-23  Jonathan Coles   <[email protected]>
1356    
1357            * MANIFEST.in: Update with Resources/XML
1358    
1359            * setup.py: Don't include Locale resources yet as we don't
1360            have any and it causes problems building the distribution
1361            for Windows. Update version to 0.8.0.
1362    
1363            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
1364    
1365            * Thuban/UI/mainwindow.py: Add blank line at the end because
1366            file was not being read correctly building the Windows
1367            distribution.
1368    
1369    2003-06-23  Jonathan Coles   <[email protected]>
1370    
1371            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
1372    
1373            * Thuban/version.py: Temporarily update longversion for
1374            the 0.8 release so that it doesn't have the cvs revision.
1375    
1376    2003-06-23  Jonathan Coles   <[email protected]>
1377    
1378            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
1379            to make sure that we don't create reentrant possibilities with
1380            wxYield.
1381    
1382            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
1383            directly to avoid the wxSafeYield() call which generates an
1384            OnPaint event causing infinite recursion. Don't try to catch
1385            exception anymore. This was for before there were limits on map
1386            scaling.
1387    
1388    2003-06-23  Bernhard Herzog  <[email protected]>
1389    
1390            Bug fix for RT #1961:
1391    
1392            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
1393            Register DerivedShapestores with the session
1394    
1395            * Thuban/Model/session.py (Session.Tables): Make sure each table
1396            is only listed once.
1397    
1398            * test/test_load.py (TestJoinedTable.test): Add check_format call.
1399            Update file contents to match the one written out.
1400    
1401    2003-06-20  Bernhard Herzog  <[email protected]>
1402    
1403            * test/xmlsupport.py (SaxEventLister.startElementNS)
1404            (SaxEventLister.endElementNS): Do not include the qname. Python
1405            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
1406            is (presumably incorrectly) None, whereas it's a string with the
1407            element name in the later versions.
1408    
1409            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
1410            (TestEventList.test_even_list_namespace): Update tests to reflect
1411            the new behaviour
1412            (TestEventList.test_even_list_id_normalization): Fix doc-string
1413    
1414    2003-06-20  Jonathan Coles   <[email protected]>
1415    
1416            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
1417            by deriving classes to determine if that layer supports shapes.
1418            (Layer): Override HasShapes and return true.
1419    
1420            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
1421            instead of a direct call to wx[Begin|End]CusyCursor().
1422            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
1423            table data.
1424    
1425            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
1426            New. Wrappers around the wxWindows functions that allow us to
1427            make additional calls such as wxYield which gives the native
1428            system a chance to update the cursor correctly.
1429    
1430            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
1431            instead of a direct call to wx[Begin|End]CusyCursor().
1432    
1433            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
1434            instead of a direct call to wx[Begin|End]CusyCursor().
1435            (MapCanvas.find_shape_at): Check if the current search layer
1436            support shapes, otherwise go on to the next layer.
1437    
1438            * test/test_layer.py: Add tests in each type of layer for
1439            HasClassification() and HasShapes()
1440    
1441    2003-06-20  Jonathan Coles   <[email protected]>
1442    
1443            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
1444            turning on the busy cursor to allow the system to change the
1445            cursor before we begin painting. This fixes a problem that
1446            was occuring only under GTK. Fixes RTbug #1840.
1447    
1448  2003-06-20  Bernhard Herzog  <[email protected]>  2003-06-20  Bernhard Herzog  <[email protected]>
1449    
1450          * Resources/XML/thuban-0.8.dtd: New DTD for the new file format          * Resources/XML/thuban-0.8.dtd: New DTD for the new file format

Legend:
Removed from v.1270  
changed lines
  Added in v.1596

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26