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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26