/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1272  
changed lines
  Added in v.1799

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26