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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26