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

Legend:
Removed from v.1237  
changed lines
  Added in v.1785

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26