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

Legend:
Removed from v.1349  
changed lines
  Added in v.1690

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26