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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26