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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26