/[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 1378 by bh, Tue Jul 8 10:54:22 2003 UTC revision 1639 by bh, Fri Aug 22 18:19:27 2003 UTC
# Line 1  Line 1 
1    2003-08-22  Bernhard Herzog  <[email protected]>
2          
3            Implement saving a session with a postgis connection
4    
5            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
6            elements for database connections and shapestores using db
7            connections
8            (session): Add the dbconnections to the content model
9    
10            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
11            Write the db connections
12            (SessionSaver.write_session): Call write_db_connections to write
13            the connection before the data sources
14            (SessionSaver.write_data_containers): Handle postgis shapestores
15    
16            * test/test_save.py (SaveSessionTest.thubanids)
17            (SaveSessionTest.thubanidrefs): Update for new DTD
18            (SaveSessionTest.test_save_postgis): New. Test saving a session
19            with postgis connections
20    
21            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
22            (PostGISTable.TableName): New accessor methods for the connection
23            and table name
24    
25            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
26            (TestPostGISTable.test_dbname): New methods to test the new
27            PostGISConnection methods
28    
29    2003-08-22  Bernhard Herzog  <[email protected]>
30    
31            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
32            for exceptions occurring when establishing a Database connection
33            (PostGISConnection.connect): Catch psycopg.OperationalError during
34            connects and raise ConnectionError.
35    
36            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
37            tests for database exceptions
38    
39    2003-08-22  Bernhard Herzog  <[email protected]>
40    
41            Prepare the test suite for tests with required authentication
42    
43            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
44            variables with two predefined users/passwords, one for the admin
45            and one for a non-privileged user.
46            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
47            the non-privileged user to the database and set the admin password
48            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
49            Better error reporting
50            (PostgreSQLServer.connection_params)
51            (PostgreSQLServer.connection_string): New methods to return
52            information about how to connect to the server
53            (PostgreSQLServer.execute_sql): New. Convenience method to execute
54            SQL statements
55            (PostgreSQLServer.require_authentication): Toggle whether the
56            server requires authentication
57            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
58            Add or alter users
59            (PostGISDatabase.initdb): Pass the admin name one the
60            subprocesses' command lines. Grant select rights on
61            geometry_columns to everybody.
62            (upload_shapefile): Use the admin name and password when
63            connecting. Grant select rights on the new table to everybody.
64    
65            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
66            server's new methods to get the connection parameters.
67    
68            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
69            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
70            server's new methods to get the connection parameters.
71    
72            * test/test_postgis_db.py
73            (TestPostGISConnection.test_gis_tables_empty)
74            (TestPostGISConnection.test_gis_tables_non_empty)
75            (PostGISStaticTests.setUp): Use the server's new methods to get
76            the connection parameters.
77    
78    2003-08-22  Bernhard Herzog  <[email protected]>
79    
80            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
81    
82            * Thuban/version.py: Add psycopg version
83    
84            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
85            version of the psycopg module
86    
87    2003-08-22  Bernhard Herzog  <[email protected]>
88    
89            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
90            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
91            at the moment. The functionality should probably be implemented
92            some time, though.
93            (DBFrame.OnRemove): Display a message if the connection can't be
94            removed because it's still in use.
95    
96    2003-08-22  Jan-Oliver Wagner <[email protected]>
97    
98            * Thuban/UI/about.py (About.__init__): split up the huge about
99            text into elements/lists for easier translation. This fixes bug
100            https://intevation.de/rt/webrt?serial_num=2058
101            Also, made some forgotten string available for the i18n.
102    
103    2003-08-21  Bernhard Herzog  <[email protected]>
104    
105            Make postgis support really optional including insensitive menu
106            items.
107    
108            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
109            whether the postgis is supported.
110    
111            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
112            to make postgis support optional
113    
114            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
115            version of Thuban.Model.postgisdb.has_postgis_support
116            (database_management command): Make it only sensitive if postgis
117            is supported.
118    
119    2003-08-21  Jan-Oliver Wagner <[email protected]>
120    
121            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
122            (section Adding and Removing Layers): Added text and described
123            multi-selection.
124            (chapter Extensions): New.
125    
126    2003-08-21  Jan-Oliver Wagner <[email protected]>
127    
128            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
129            settings to allow multiple files to load into the map.
130            Also reduced selection to *.shp as a default.
131    
132    2003-08-20  Bernhard Herzog  <[email protected]>
133    
134            Add dialogs and commands to open database connections and add
135            database layers.
136    
137            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
138            method to open the database connection management dialog
139            (MainWindow.AddDBLayer): New method to add a layer from a database
140            (_has_dbconnections): New helper function to use for sensitivity
141            (database_management command, layer_add_db command): New commands
142            that call the above new methods.
143            (main_menu): Add the new commands to the menu.
144    
145            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
146            (PostGISConnection.connect): Establish the actual connection in a
147            separate method and call it in __init__. This makes it easier to
148            override the behavior in test cases
149            (PostGISConnection.BriefDescription): New method to return a brief
150            description for use in dialogs.
151    
152            * test/test_postgis_db.py (NonConnection): DB connection that
153            doesn't actually connect
154            (TestBriefDescription): New class with tests for the new
155            BriefDescription method
156    
157    2003-08-19  Jan-Oliver Wagner <[email protected]>
158    
159            Moved anything from extensions to libraries.
160    
161            * libraries: New.
162    
163            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
164    
165            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
166            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
167            been moved here from thuban/extensions/pyprojection/
168            See there in the Attic for the older history.
169    
170            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
171            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
172            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
173            have been moved here from thuban/extensions/pyshapelib/
174            See there in the Attic for the older history.
175    
176            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
177            files have been moved here from thuban/extensions/shapelib/
178            See there in the Attic for the older history.
179    
180            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
181            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
182            thuban/extensions/thuban/
183            See there in the Attic for the older history.
184    
185            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
186    
187            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
188            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
189    
190            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
191            Moved to libraries/shapelib.
192    
193            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
194            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
195            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
196            Moved to libraries/pyshapelib.
197    
198            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
199            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
200            Moved to libraries/pyprojection.
201    
202            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
203    
204            * extensions: Removed.
205    
206    2003-08-19  Bernhard Herzog  <[email protected]>
207    
208            * test/test_viewport.py (ViewPortTest): We don't use the
209            facilities of FileTestMixin so don't derive from it.
210            (TestViewportWithPostGIS): New class with tests for using a
211            viewport on a map with postgis layers.
212    
213    2003-08-19  Bernhard Herzog  <[email protected]>
214    
215            Add the db connection management to the session.
216    
217            * Thuban/Model/session.py (Session.__init__): New instance
218            variable db_connections
219            (Session.AddDBConnection, Session.DBConnections)
220            (Session.HasDBConnections, Session.CanRemoveDBConnection)
221            (Session.RemoveDBConnection): New methods to manage and query the
222            db connections managed by the session
223            (Session.OpenDBShapeStore): New method to open a shapestore from a
224            db connection
225    
226            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
227            messages for the db connection handling in the session
228    
229            * test/test_postgis_session.py: New. test cases for the session's
230            db connection handling with postgis connections
231    
232    2003-08-19  Bernhard Herzog  <[email protected]>
233    
234            Add very basic postgis database support and the corresponding test
235            cases. The test cases require a PostgreSQL + postgis installation
236            but no existing database. The database will be created
237            automatically by the test cases
238    
239            * test/README: Add note about skipped tests and the requirements
240            of the postgis tests.
241    
242            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
243    
244            * test/test_postgis_db.py: New. Test cases for the postgis
245            support.
246    
247            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
248            format
249    
250            * test/test_wellknowntext.py: New. Test cases for the
251            wellknowntext parser
252    
253            * test/postgissupport.py: New. Support module for tests involving
254            a postgis database.
255    
256            * test/support.py (execute_as_testsuite): Shut down the postmaster
257            if it's still running after the tests
258    
259            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
260            well known text format
261    
262    2003-08-19  Jan-Oliver Wagner <[email protected]>
263    
264            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
265            message dialog.
266    
267    2003-08-18  Bernhard Herzog  <[email protected]>
268    
269            * test/support.py (ThubanTestResult.printErrors): Indent the
270            reason for the skips in the output to make it a bit more readable.
271            (execute_as_testsuite): New helper function to run a test suite
272            and print some more information.
273            (run_tests): Use execute_as_testsuite to run the tests
274    
275            * test/runtests.py (main): Use execute_as_testsuite to run the
276            tests
277    
278    2003-08-18  Bernhard Herzog  <[email protected]>
279    
280            Fix some bugs in Thuban and the test suite that were uncovered by
281            changes introduced in Python 2.3:
282    
283            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
284            filename is an absolute name
285    
286            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
287            filename is an absolute name
288    
289            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
290            unique filename to save to and use the correct relative filename
291            in the expected output.
292            (SaveSessionTest.test_dbf_table): Use the correct relative
293            filename in the expected output.
294    
295            * test/test_layer.py (TestLayer.test_raster_layer): Update the
296            test to check whether the filename is absolute.
297    
298    2003-08-18  Jan-Oliver Wagner <[email protected]>
299    
300            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
301    
302    2003-08-15  Bernhard Herzog  <[email protected]>
303    
304            Change the way shapes are returned by a shape store. The
305            ShapesInRegion method returns an iterator over actual shape
306            objects instead of a list of shape ids.
307    
308            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
309            id.
310            (ShapefileStore.ShapesInRegion): Return an iterator over the
311            shapes which yields shape objects instead of returning a list of
312            shape ids
313            (ShapefileStore.AllShapes): New. Return an iterator over all
314            shapes in the shape store
315            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
316    
317            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
318            doc-string.
319    
320            * Thuban/UI/baserenderer.py
321            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
322            layer_shapes and make it return an iterator containg shapes
323            instead of a list of ids.
324            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
325            layer_shapes() change
326    
327            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
328            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
329    
330            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
331            changes in the ShapesInRegion return value.
332            (ViewPort._get_hit_tester): Remove commented out code
333    
334            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
335            new return value.
336            (SimpleShapeStore.AllShapes): New. Implement this method too.
337    
338            * test/test_layer.py (TestLayer.test_arc_layer)
339            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
340            (TestLayer.test_point_layer_with_projection)
341            (TestLayer.test_derived_store): Adapt to changes in the
342            ShapesInRegion return value.
343    
344            * test/test_shapefilestore.py
345            (TestShapefileStoreArc.test_shapes_in_region)
346            (TestShapefileStorePolygon.test_shapes_in_region)
347            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
348            in the ShapesInRegion return value.
349            (TestShapefileStorePoint.test_all_shapes)
350            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
351            methods
352    
353            * test/test_derivedshapestore.py
354            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
355            the ShapesInRegion return value.
356            (TestDerivedShapeStore.test_all_shapes)
357            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
358            methods
359    
360    2003-08-15  Bernhard Herzog  <[email protected]>
361    
362            Make the renderers deal correctly with raw vs. python level
363            representation of shape geometries
364    
365            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
366            Return a flag useraw in addition to the callable and the parameter
367            to indicate whether the callable can deal with the raw shape data
368            or uses the higher level python lists of coordinates. The callable
369            now should accept either the raw data or the return value of the
370            shape's Points() method.
371            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
372            change
373            (BaseRenderer.projected_points): Instead of the shape id use the
374            points list as parameter.
375            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
376            (BaseRenderer.draw_point_shape): Adapt to projected_points()
377            change and accept the points list as parameter instead of the
378            shape id.
379    
380            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
381            the useraw flag as required by the BaseRenderer
382            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
383            changes.
384    
385            * test/test_baserenderer.py
386            (TestBaseRenderer.test_point_with_classification): New test for
387            rendering a map with classifications.
388    
389    2003-08-15  Bernhard Herzog  <[email protected]>
390    
391            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
392            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
393            (ViewPort._get_hit_tester, ViewPort.projected_points)
394            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
395            (ViewPort._find_label_at): Split the find_shape_at method into
396            several new methods and use the functions in the hit-test module.
397    
398            * Thuban/UI/hittest.py: New module with Python-level hit-testing
399            functions
400    
401            * test/test_hittest.py: New. Test for the new hittest module
402    
403    2003-08-15  Bernhard Herzog  <[email protected]>
404    
405            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
406            projection to all corners of the bounding box to get a better
407            approximation of the projected bounding box
408    
409            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
410            New. Test coordinate handling of a layer with a projection.
411            Catches the bug fixed in Layer.ShapesInRegion
412    
413    2003-08-15  Bernhard Herzog  <[email protected]>
414    
415            Move some of the mock objects in test_baserenderer into their own
416            module so they can easily be used from other tests
417    
418            * test/mockgeo.py: New test helper module with some mock objects
419            for geometry related things like shapes, shapestores and
420            projections.
421    
422            * test/test_mockgeo.py: New. Tests for the new helper module
423    
424            * test/test_baserenderer.py: Some of the mock-objects are in
425            mockgeo now.
426    
427    2003-08-12  Jan-Oliver Wagner <[email protected]>
428    
429            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
430    
431    2003-08-12  Bernhard Herzog  <[email protected]>
432    
433            * po/de.po: New. German translations by Bjoern Broscheit
434    
435    2003-08-12  Bernhard Herzog  <[email protected]>
436    
437            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
438            strings have to be one string literal.
439    
440    2003-08-11  Bernhard Herzog  <[email protected]>
441    
442            * test/support.py (FloatComparisonMixin.assertPointListEquals):
443            New. This method was used in various derived classes, but it's
444            better to have it here.
445    
446            * test/test_shapefilestore.py
447            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
448            FloatComparisonMixin
449    
450            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
451            It's now in FloatComparisonMixin
452    
453            * test/test_derivedshapestore.py
454            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
455            in FloatComparisonMixin
456    
457    2003-08-11  Bernhard Herzog  <[email protected]>
458    
459            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
460            error message
461    
462    2003-08-08  Jan-Oliver Wagner <[email protected]>
463    
464            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
465            with version number.
466            Changed title to reflect version number of Thuban.
467    
468    2003-08-08  Jan-Oliver Wagner <[email protected]>
469    
470            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
471            the list corresponds to the "About" web page.
472    
473    2003-08-08  Bernhard Herzog  <[email protected]>
474    
475            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
476            Make sure translated strings are recognized as one string literal.
477    
478            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
479            Make sure translated strings are recognized as one string literal.
480    
481            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
482            translated strings are recognized as one string literal.
483    
484            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
485            sure translated strings are recognized as one string literal.
486    
487    2003-08-07  Bernhard Herzog  <[email protected]>
488    
489            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
490            Simply delegates to the original shapestore.
491    
492            * test/test_derivedshapestore.py
493            (TestDerivedShapeStore.test_raw_format): New. Test case for
494            DerivedShapeStore.RawShapeFormat
495    
496    2003-08-07  Bernhard Herzog  <[email protected]>
497    
498            Add raw data interface to shape objects.
499    
500            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
501            class to ShapefileShape which now holds shapefile specific
502            information.
503            (ShapefileShape.compute_bbox): Simplified to not cache any
504            information. The way this method is used that shouldn't matter
505            performance wise.
506            (ShapefileShape.RawData): New. Return the shapeid which is the raw
507            data format for shapes from shapefiles.
508            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
509            in the shape objects returned by a shapestore. For a
510            ShapefileStore this is always RAW_SHAPEFILE.
511            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
512            method.
513    
514            * test/test_shapefilestore.py
515            (TestShapefileStore.test_raw_format): New test to test the raw
516            format feature of shapes.
517    
518            * Thuban/Model/layer.py: Remove the unused import of Shape from
519            data. It was only there for interface compatibility but it's not
520            used inside of Thuban and the generic Shape class has gone away.
521    
522            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
523            the raw data format and only use an optimized version of its a
524            shapefile.
525    
526    2003-08-07  Bernhard Herzog  <[email protected]>
527    
528            * test/test_baserenderer.py (SimpleShape): Shape class for the
529            tests.
530            (SimpleShapeStore.Shape): Use SimpleShape instead of
531            Thuban.Model.data.Shape to make the tests independed of the coming
532            changes.
533    
534    2003-08-07  Bernhard Herzog  <[email protected]>
535    
536            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
537            (ThubanTestProgram): New classes that extend the respective
538            classes from unittest. These new version support skipping tests
539            under certain expected conditions. In the Thuban test suite we
540            uses this for tests that require the optional gdal support.
541            (run_tests): Use ThubanTestProgram instead of the unittest.main()
542    
543            * test/runtests.py (main): Use the new ThubanTestRunner instead of
544            the normal one from unittest
545    
546            * test/test_layer.py (TestLayer.test_raster_layer): If this test
547            is not run because gdal support isn't available report this to the
548            runner.
549    
550            * test/test_baserenderer.py
551            (TestBaseRenderer.test_raster_no_projection): Do not run this test
552            if gdal support isn't available and report this to the runner.
553    
554    2003-08-06  Bernhard Herzog  <[email protected]>
555    
556            Rearrange the renderers a bit, partly in preparation for changes
557            required for the postgis merge, partly to make it more testable.
558            Also make the representation of coordinates in Shapes more
559            consistent.
560    
561            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
562            this class is now in BaseRenderer. This class is now practically
563            only a specialization of BaseRenderer for rendering to an actual
564            wx DC.
565            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
566            to get the shapetype specific rendering functions.
567    
568            * Thuban/UI/baserenderer.py: New file with the basic rendering
569            logic. The code in this file is completely independend of wx.
570            (BaseRenderer): Class with the basic rendering logic
571    
572            * test/test_baserenderer.py: New. Test cases for BaseRenderer
573    
574            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
575            error_on_redraw to guard agains endless loops and stack overflows
576            when there's a bug in the rendering code that raises exceptions.
577            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
578            rendering into a separate method _do_redraw so that error handling
579            is a bit easier. When an exception occurs, set error_on_redraw to
580            true. When it's true on entry to OnIdle do nothing and return
581            immediately.
582    
583            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
584            Shape object will always have the coordinates as a list of list of
585            coordinate pairs (tuples).
586            (Shape.compute_bbox): Adapt to new representation.
587    
588            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
589            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
590            Shape objects.
591    
592            * test/test_shapefilestore.py
593            (ShapefileStoreTests.assertFloatTuplesEqual)
594            (ShapefileStoreTests.assertPointListEquals): Rename to
595            assertPointListEquals and change purpose to checking equality of
596            the lists returned by Shape.Points().
597            (TestShapefileStoreArc.test_shape)
598            (TestShapefileStorePolygon.test_shape)
599            (TestShapefileStorePoint.test_shape): Use the new
600            assertPointListEquals instead of assertFloatTuplesEqual
601    
602            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
603            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
604            and change purpose to checking equality of the lists returned by
605            Shape.Points().
606            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
607            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
608            (TestLayer.test_derived_store): Use the new assertPointListEquals
609            instead of assertFloatTuplesEqual
610    
611            * test/test_derivedshapestore.py
612            (TestDerivedShapeStore.assertFloatTuplesEqual)
613            (TestDerivedShapeStore.assertPointListEquals): Rename to
614            assertPointListEquals and change purpose to checking equality of
615            the lists returned by Shape.Points().
616            (TestDerivedShapeStore.test_shape): Use the new
617            assertPointListEquals instead of assertFloatTuplesEqual
618    
619    2003-08-06  Jan-Oliver Wagner <[email protected]>
620    
621            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
622            a bounding box. A dialog is raised in case, no bounding box
623            is found. This fixes bug #2043:
624            https://intevation.de/rt/webrt?serial_num=2043
625    
626    2003-08-05  Bernhard Herzog  <[email protected]>
627    
628            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
629            object look like a Color instantiation. Formerly it looked like a
630            tuple.
631    
632            * test/test_color.py (TestColor.test_repr)
633            (TestColor.test_equality, TestColor.test_inequality): New. test
634            some more apects of the Color class
635            (TestTransparent.test_repr, TestTransparent.test_hex)
636            (TestTransparent.test_equality): New. Test cases for the
637            Transparent object.
638    
639    2003-08-04  Jan-Oliver Wagner <[email protected]>
640    
641            * Doc/manual/thuban-manual.xml: a number of small improvements.
642            The resulting file is the version submitted for GREAT-ER II.
643    
644    2003-08-01  Bernhard Herzog  <[email protected]>
645    
646            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
647            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
648            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
649    
650            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
651            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
652            (ThubanEndBusyCursor): Add doc-strings
653    
654    2003-08-01  Bernhard Herzog  <[email protected]>
655    
656            First step towards PostGIS integration. More abstraction by movin
657            more code from the layer to the shapestore. More methods of the
658            layer are now simply delegated to the equivalent method of the
659            shapestore. The SHAPETYPE_* constants are now in data not in
660            layer.
661    
662            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
663            (SHAPETYPE_POINT, Shape): Move these constants and classes from
664            layer.py to data.py
665            (ShapefileStore.__init__): More Initialization for the new methods
666            and functionality.
667            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
668            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
669            (ShapefileStore.Shape): New methods that were formerly implemented
670            in the layer.
671            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
672            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
673            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
674            equivalents of the new shape methods. These versions are simply
675            delegated to the original shapstore.
676    
677            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
678            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
679            (Layer.SetShapeStore): Removed the initializatin of instance
680            variables that were needed for the stuff that's now in
681            ShapefileStore
682            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
683            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
684            shapestore.
685    
686            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
687            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
688            instead of layer.
689    
690            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
691    
692            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
693    
694            * test/test_layer.py: Import the SHAPETYPE_* constants from data
695            instead of layer.
696            (TestLayer.test_derived_store): Remove the test for the exception
697            when instantiating the DerivedShapeStore with an incompatible
698            table which is now in test_derivedshapestore.py. Add some more
699            tests of the layer methods to determine whether they work for a
700            DerivedShapeStore as well.
701    
702    2003-07-31  Jonathan Coles   <[email protected]>
703    
704            * Doc/manual/thuban-manual.xml: Fix the list of required packages
705            by just listing the name and where they can be found.
706    
707    2003-07-31  Frank Koormann   <[email protected]>
708    
709            * Doc/manual/thuban-manual.xml:
710            Changed the screenshot elements to figure.
711            Changed some variablelist elements to itemizedlist.
712            Added section on GDAL formats.
713    
714    2003-07-31  Jonathan Coles   <[email protected]>
715    
716            * Doc/manual/thuban-manual.xml: Added a few sentences about
717            the Fix Border Color option when generating classes.
718    
719    2003-07-30  Jonathan Coles   <[email protected]>
720    
721            * Thuban/Model/classgen.py: Add docstrings. Rename specific
722            Ramp instances to use lower_case_style.
723    
724            * Thuban/UI/classgen.py: Use renamed Ramp instances.
725            
726            * Thuban/UI/classifier.py: Add docstrings.
727    
728            * Thuban/UI/dock.py: Add docstrings.
729    
730            * test/test_classgen.py: Use renamed Ramp instances.
731    
732    2003-07-30  Bernhard Herzog  <[email protected]>
733    
734            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
735            was never used in Thuban.
736    
737    2003-07-30  Bernhard Herzog  <[email protected]>
738    
739            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
740            method directly instead of going through the transient_table
741            method. This faster because transient_table may force the copy of
742            a DBF file into the transient database and setting a table's title
743            doesnm't affect the title of the associated transient table, so
744            this fixes RT #2042
745    
746            * Thuban/UI/main.py (__version__): Don't import the already
747            removed show_exception_dialog.
748    
749    2003-07-29  Jonathan Coles   <[email protected]>
750    
751            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
752            Put back this method and remove the equivalent function since we
753            are setting the exception hook from within this class (OnInit).
754    
755    2003-07-29  Jonathan Coles   <[email protected]>
756    
757            * Doc/manual/images/5_2_custom_ramp.png,
758            Doc/manual/images/5_2_quantiles.png,
759            Doc/manual/images/5_2_uniform_dist.png,
760            Doc/manual/images/5_2_unique_values.png,
761            Doc/manual/images/8_int_error.png: New screen shots.
762    
763            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
764            some points, and added more screen shots.
765    
766    2003-07-29  Bernhard Herzog  <[email protected]>
767    
768            * Thuban/Model/data.py: Remove the now unused import of warnings
769    
770    2003-07-29  Bernhard Herzog  <[email protected]>
771    
772            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
773            deprecated since before the 0.8 release and isn't used in Thuban
774            itself anymore.
775    
776            * Thuban/Model/transientdb.py: Remove some unnecessary imports
777    
778    2003-07-29  Jonathan Coles   <[email protected]>
779    
780            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
781            python exception hook here so that we are sure to catch any
782            Thuban exception that happen during initialization.
783    
784            * Thuban/UI/main.py (main): Don't set the exception hook here,
785            it will get set in ThubanApplication.OnInit.
786    
787    2003-07-29  Jonathan Coles   <[email protected]>
788                                                                                
789            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
790            Removed and called it show_exception_dialog() so that the exception
791            handler can be set before the class is created.
792                                                                                
793            * Thuban/UI/main.py (main): Install the exception handler before
794            a ThubanApplication is created.
795                                                                                    
796    2003-07-29  Bernhard Herzog  <[email protected]>
797    
798            * po/it.po: New. Italian translation by Maurizio Napolitano
799    
800            * po/ru.po: New. Russian translation by Alex Shevlakov
801    
802    2003-07-29  Frank Koormann   <[email protected]>
803    
804            * Doc/manual/thuban-manual.xml: Extended section on supported
805            projections.
806            
807    2003-07-29  Frank Koormann   <[email protected]>
808    
809            * Doc/manual/thuban-manual.xml: gaspell-checked.
810    
811    2003-07-29  Jonathan Coles   <[email protected]>
812    
813            * Doc/manual/images/3_5_legend.png: Added border to improve look
814            on white background.
815    
816    2003-07-29  Jonathan Coles   <[email protected]>
817    
818            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
819            descriptions for the legend toolbar.
820    
821            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
822            cursor from dialog box.
823    
824    2003-07-28  Jonathan Coles   <[email protected]>
825    
826            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
827    
828            * Doc/manual/images/2_4_session_tree.png,
829            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
830            Doc/manual/images/4_2_layer_properties.png,
831            Doc/manual/images/4_2_raster_layer_properties.png,
832            Doc/manual/images/5_3_genclass.png,
833            Doc/manual/images/5_classification.png,
834            Doc/manual/images/6_projection.png,
835            Doc/manual/images/7_1_table_view.png,
836            Doc/manual/images/7_2_5_join.png: New screenshots.
837    
838    2003-07-24  Jonathan Coles   <[email protected]>
839    
840            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
841    
842    2003-07-24  Jonathan Coles   <[email protected]>
843    
844            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
845            chapter on Layer Management.
846    
847            * Doc/manual/Makefile: New. Makefile to generate all formats for the
848            manual and images.
849    
850    2003-07-24  Bernhard Herzog  <[email protected]>
851    
852            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
853            it annoys lintian which warns about these files not being
854            executable. The #1 isn't necessary here since if you absolutely
855            must execute them you can always say "python <filename>".
856    
857            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
858            superfluous code to set brush and pen for point shapes
859    
860            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
861            belong in viewport anyway
862    
863    2003-07-24  Frank Koormann   <[email protected]>
864    
865            * Doc/manual/thuban-manual.xml: Added section on table management.
866    
867    2003-07-24  Bernhard Herzog  <[email protected]>
868    
869            * test/runtests.py (main): Recognize the long "verbose" option
870            correctly.
871    
872    2003-07-22  Jonathan Coles   <[email protected]>
873    
874            * Doc/manual/thuban-manual.xml: Continue to write first revision
875            of the manual.
876    
877            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
878            with Begin/EndDrawing() calls to ensure we aren't doing to
879            many updates to the dc during rendering.
880            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
881            a pen and brush argument so they need to be passed to the function.
882    
883            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
884            Calculates the minimum and maximum scale values. Factored out
885            of set_view_transform so that it could be used to zoom all the
886            way into a single point.
887            (ViewPort.set_view_transform): Call calc_min_max_scales().
888            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
889            if only a single point is selected.
890    
891            * Doc/manual/images/1_2_legend_close.png,
892            Doc/manual/images/1_2_legend_dock.png,
893            Doc/manual/images/1_2_mainwindow.png,
894            Doc/manual/images/1_2_mainwindow.ps,
895            Doc/manual/images/1_2_mainwindow.sk,
896            Doc/manual/images/3_2_fullextent.png,
897            Doc/manual/images/3_2_fulllayerextent.png,
898            Doc/manual/images/3_2_fullshapeextent.png,
899            Doc/manual/images/3_2_pan.png,
900            Doc/manual/images/3_2_zoomin.png,
901            Doc/manual/images/3_2_zoomout.png,
902            Doc/manual/images/3_3_identify.png,
903            Doc/manual/images/3_3_label.png,
904            Doc/manual/images/3_5_invisible.png,
905            Doc/manual/images/3_5_movedown.png,
906            Doc/manual/images/3_5_moveup.png,
907            Doc/manual/images/3_5_props.png,
908            Doc/manual/images/3_5_tobottom.png,
909            Doc/manual/images/3_5_totop.png,
910            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
911    
912    2003-07-18  Bernhard Herzog  <[email protected]>
913    
914            * Thuban/UI/messages.py (MAP_REPLACED): New message.
915    
916            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
917            after the new map has been assigned
918    
919            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
920            Delegate MAP_REPLACED to the canvas too
921            (MainWindow.prepare_new_session): Removed. Thanks to the new
922            MAP_REPLACED message it's no longer needed
923            (MainWindow.OpenSession, MainWindow.NewSession):
924            prepare_new_session has been removed.
925    
926            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
927            MAP_REPLACED so that we can close the dialog if a new map is set.
928            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
929            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
930            dialog
931    
932            * test/test_viewport.py (SimpleViewPortTest)
933            (SimpleViewPortTest.test_default_size): Add doc-strings
934            (ViewPortTest.setUp): Bind map to self.map so we can use it in
935            tests. Subscribe to MAP_REPLACED messages too.
936            (ViewPortTest.tearDown): No need to explicitly unsubscribe
937            (ViewPortTest.test_set_map): New test for the SetMap method.
938    
939    2003-07-18  Bernhard Herzog  <[email protected]>
940    
941            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
942            Move this test from ViewPortTest.setUp to this new separate test
943            case. setUp is not the place for the actual tests.
944            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
945            more of the test from setUp to the new test test_inital_settings.
946            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
947            (ViewPortTest.test_proj_conv): Split test_proj_conv into
948            test_win_to_proj and test_proj_to_win and make the tests easier to
949            understand
950            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
951            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
952            (ViewPortTest.test_unprojected_rect_around_point)
953            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
954            Reformat to increase readability.
955    
956    2003-07-18  Bernhard Herzog  <[email protected]>
957    
958            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
959    
960    2003-07-18  Bernhard Herzog  <[email protected]>
961    
962            * test/runtests.py: The test suite can now be run without an X
963            connection. To make sure this remains true, remove the DISPLAY
964            environment variable so that an error occurs if the wxGTK is
965            imported accidentally
966    
967    2003-07-18  Bernhard Herzog  <[email protected]>
968    
969            * Thuban/UI/viewport.py: Remove unused imports
970    
971            * Thuban/UI/view.py: Remove unused imports
972    
973    2003-07-18  Bernhard Herzog  <[email protected]>
974    
975            * test/test_export.py Remove unused imports. The OutputTransform
976            function is now in viewport.py and is called output_transform
977            (TestScalebar.test_output_transform)
978            (TestScalebar.test_OutputTransform): Renamed to
979            test_output_transform and updated to use output_transform instead
980            of OutputTransform
981    
982            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
983            renamed.
984            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
985            renamed to output_transform
986    
987            * Thuban/UI/viewport.py (OutputTransform, output_transform):
988            Rename to output_transform
989    
990    2003-07-18  Bernhard Herzog  <[email protected]>
991    
992            * Thuban/Model/layer.py (Layer.__init__): Rename
993            classificationField to classificatin_column and init it here so
994            that it can be used in SetClassificationColumn
995            (Layer.GetClassificationColumn, Layer.GetClassificationField):
996            Rename to GetClassificationColumn.
997            (Layer.SetClassificationColumn, Layer.SetClassificationField):
998            Rename to SetClassificationColumn and issue a LAYER_CHANGED
999            message if the column changes.
1000            (Layer._classification_changed, Layer.ClassChanged): Rename to
1001            _classification_changed. Update the callers.
1002            (Layer.SetShapeStore): Further field->column renames.
1003    
1004            * Thuban/Model/load.py (SessionLoader.start_classification)
1005            (SessionLoader.start_clpoint): Updates because of
1006            field->column method name changes in the Layer class
1007    
1008            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
1009            because of field->column method name changes in the Layer class
1010    
1011            * Thuban/UI/classifier.py (Classifier.__init__)
1012            (Classifier._OnTry, Classifier._OnRevert): Updates because of
1013            field->column method name changes in the Layer class
1014    
1015            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
1016            because of field->column method name changes in the Layer class
1017    
1018            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
1019            of field->column method name changes in the Layer class
1020    
1021            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
1022            (SaveSessionTest.testClassifiedLayer): Update because of
1023            field->column method name changes in the Layer class
1024    
1025            * test/test_layer.py (SetShapeStoreTests.setUp)
1026            (SetShapeStoreTests.test_sanity): Update because of field->column
1027            method name changes in the Layer class
1028            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
1029            (TestLayerModification.test_sanity)
1030            (TestLayerModification.test_initial_settings): remove unsued code
1031            and rename to test_sanity.
1032            (TestLayerModification.test_set_classification): New test for
1033            SetClassification and SetClassificationField.
1034    
1035    2003-07-18  Bernhard Herzog  <[email protected]>
1036    
1037            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
1038            the non-fixed values as well. The old test would have accepted a
1039            fixed ramp that only returnes the fixed properties
1040    
1041    2003-07-17  Jonathan Coles   <[email protected]>
1042    
1043            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
1044            shots for the manual. The XCF file is the source image and
1045            has additional layers to support changes.
1046    
1047            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
1048    
1049            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
1050            Return both the new class and the field name.
1051    
1052            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
1053            fit the map to the window as this changes any zoom level that
1054            the user may have set.
1055    
1056    2003-07-16  Jonathan Coles   <[email protected]>
1057    
1058            * Thuban/Model/classgen.py (generate_singletons,
1059            generate_uniform_distribution, generate_quantiles): Remove
1060            fixes parameter, but maintain the same functionality by having
1061            the calling function pass a FixedRamp object for the ramp.
1062            (FixedRamp): New. Adapts a ramp to have fixed property values.
1063    
1064            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
1065            (Classification): Inherit from Publisher.
1066            (Classification.__init__): Remove the layer parameter.
1067            Classifications no longer need to have a parent layer.
1068            (Classification.GetField, Classification.GetFieldType,
1069            Classification.SetFieldInfo): Removed. The field name is stored
1070            in the layer, and the type can be retreived by calling
1071            Layer.GetFieldType().
1072            (Classification._set_layer, Classification.GetLayer): Removed.
1073            Classifications no longer have a parent layer.
1074    
1075            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
1076            classification.
1077            (Layer.SetShapeStore): Reset the classification first while
1078            we still have the old shape store to work with.
1079            (Layer.GetClassificationField, Layer.SetClassificationField):
1080            New. Method for getting/setting the field to classify on.
1081            (Layer.SetClassification): Simplified now that the layer
1082            simply has to hold a reference to the classification and not
1083            tell the classification who owns it.
1084            Fixes RTbug #2023.
1085    
1086            * Thuban/Model/load.py (SessionLoader.start_classification):
1087            Set the field name on the layer, not the classification.
1088    
1089            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
1090            classification is modified.
1091    
1092            * Thuban/Model/save.py (SessionSaver.write_classification):
1093            Get the field name and type from the layer.
1094    
1095            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
1096            parameter records to rows and add docstring. Fixes RTbug #1997.
1097    
1098            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
1099            ramp when we need to fix certain values of a ramp rather than
1100            using the old fixes parameter. Fixes RTbug #2024.
1101    
1102            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
1103            parameter.
1104            (ClassTable.Reset): Add fieldType parameter and use it, rather
1105            than asking the classification.
1106            (Classifier.__init__): Remember the original class's field
1107            and ask the layer for the field type, rather than the classification.
1108            (Classifier.__SetGridTable): Retrieve the field and field type
1109            for the table because they are not in the classification.
1110            (Classifier._OnTry, Classifier._OnRevert): Set the classification
1111            field on the layer in addition to the classification itself.
1112    
1113            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
1114            classification field from layer.
1115    
1116            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
1117            classification field from layer. Split up tests and remove
1118            *-imports. Fixes RTbug #1992.
1119    
1120            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
1121    
1122            * test/test_classification.py
1123            (TestClassification.test_classification): Remove tests for methods
1124            that no longer exist.
1125    
1126            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
1127            __init__ no longer has a field parameter, use SetClassificationField.
1128            (SetShapeStoreTests.test_sanity): Use layer object to get class
1129            field info.
1130    
1131            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
1132            SetClassificationField on layer to set class field info.
1133    
1134            * test/test_viewport.py: Renamed from test/test_view.py.
1135    
1136    2003-07-16  Jan-Oliver Wagner <[email protected]>
1137    
1138            * Doc/manual/thuban-manual.xml: Added authors and an initial
1139            coarse structure.
1140    
1141    2003-07-15  Bernhard Herzog  <[email protected]>
1142    
1143            * test/support.py (FloatComparisonMixin): This is a mix-in class
1144            and therefore should not be derived from any other class.
1145    
1146            * test/test_range.py (RangeTest): FloatComparisonMixin is a
1147            mix-in, so derive from TestCase as well.
1148    
1149    2003-07-15  Bernhard Herzog  <[email protected]>
1150    
1151            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
1152            draw_func handling a bit to remove one layer of indirection. This
1153            makes the renderer about 10% faster in the non-classifying case
1154            and the code a bit cleaner
1155            (MapRenderer.draw_point_shape): Add the pen and brush parameters
1156            and set them in the dc. Now the draw_point_shape method and
1157            wxproj's draw_polygon_shape function have basically the same
1158            signature so that both can be directly used as draw_func
1159    
1160    2003-07-15  Bernhard Herzog  <[email protected]>
1161    
1162            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
1163            string values (in addition to the labels) as UTF 8
1164    
1165            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
1166            values if the field type is string
1167    
1168            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
1169            saving a session with non-ascii string classification values.
1170    
1171            * test/test_load.py (TestClassification.file_contents)
1172            (TestClassification.test): Check for non-ascii values in string
1173            classifications
1174    
1175    2003-07-14  Jonathan Coles   <[email protected]>
1176    
1177            * test/test_view.py: New. Tests for ViewPort.
1178    
1179    2003-07-14  Frank Koormann   <[email protected]>
1180    
1181            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
1182            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
1183    
1184            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
1185            unicode strings from session file: session title, map title and
1186            projection name.
1187            
1188    2003-07-10  Jonathan Coles   <[email protected]>
1189    
1190            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
1191            drag_stop, not drag_move when the mouse is released.
1192    
1193    2003-07-10  Jonathan Coles   <[email protected]>
1194    
1195            The most important part of this is the seperation of view.py into
1196            two pieces. viewport.py now has a class called ViewPort which
1197            contains all the non-wx parts of view.py and can therefore be
1198            tested. view.py contains only the wx-specific parts and is fairly
1199            simple.
1200    
1201            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
1202            RTTbug #1992.
1203            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
1204            RTTbug #1992.
1205    
1206            * Thuban/Model/classgen.py (generate_singletons,
1207            generate_uniform_distribution, generate_quantiles):
1208            Added 'fixes' parameter so that property attributes can
1209            be held constant over the generated classification groups.
1210            (CustomRamp.GetProperties): Remove unused variables.
1211    
1212            * Thuban/Model/map.py (Map.SetProjection): Send the old
1213            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
1214            event.
1215    
1216            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
1217            parameter which is a list of records that restricts which
1218            records are saved. Fixes RTbug #1997.
1219    
1220            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1221            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
1222    
1223            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
1224            to allow the user to fix line color/width on generated groups.
1225            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
1226            functions to optionally fix group properties.
1227    
1228            * Thuban/UI/main.py (main): Set exception hook to the
1229            ShowExceptionDialog. Fixes RTbug #1993.
1230    
1231            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
1232            the table window when it is selectd to be shown.
1233    
1234            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
1235            Export Selection button and move the export buttons underneath
1236            the table.
1237            (QueryTableFrame.UpdateStatusText): Added event argument so
1238            that it can respond to grid selection events. The status text
1239            is now updated even when the table is not associated with a
1240            layer as was previously assumed.
1241            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
1242            UpdateStatusText responds to these events.
1243            (QueryTableFrame.OnSaveAs): Renamed to doExport.
1244            (QueryTableFrame.doExport): Helper function that saves the
1245            entire table, or selected rows, to a file.
1246            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
1247            Respond to export button events and call doExport.
1248    
1249            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
1250            the function doesn't return NULL without first setting a Python
1251            Error.
1252    
1253            * test/runtests.py (main): Only print "Unknown option" for
1254            unsupported options.
1255    
1256            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
1257            optional epsilon argument to specify floating point accuracy.
1258            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
1259            for each item test.
1260    
1261            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
1262            tests for saving selected records.
1263    
1264            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
1265            tests for saving selected records.
1266    
1267            * test/test_map.py (TestMapWithContents.test_set_projection):
1268            MAP_PROJECTION_CHANGED events send the old projection.
1269    
1270            * test/test_session.py
1271            (TestSessionWithContent.test_forward_map_projection):
1272            MAP_PROJECTION_CHANGED events send the old projection.
1273    
1274            * test/test_table.py (TableTest): Update tests to use non-deprecated
1275            functions.
1276    
1277    2003-07-08  Bernhard Herzog  <[email protected]>
1278    
1279            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
1280            constants in the column objects are the standard ones defined in
1281            the table module.
1282    
1283            * test/test_transientdb.py
1284            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
1285            exporting transient tables as DBF works. This should catch the bug
1286            just fixed in TransientTableBase.Width.
1287    
1288    2003-07-08  Bernhard Herzog  <[email protected]>
1289    
1290            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
1291            interpolated colors correctly.
1292    
1293            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
1294            New. Test case for the fix in classgen.py
1295    
1296  2003-07-08  Bernhard Herzog  <[email protected]>  2003-07-08  Bernhard Herzog  <[email protected]>
1297    
1298          * test/runtests.py (main): Make the default output less verbose          * test/runtests.py (main): Make the default output less verbose

Legend:
Removed from v.1378  
changed lines
  Added in v.1639

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26