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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26