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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26