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

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

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

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

Legend:
Removed from v.1349  
changed lines
  Added in v.1849

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26