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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26