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

Legend:
Removed from v.1272  
changed lines
  Added in v.1627

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26