/[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 1588 by bh, Fri Aug 15 10:31:18 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]>  2003-08-15  Bernhard Herzog  <[email protected]>
1418    
1419          * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer          * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
# Line 449  Line 1865 
1865    
1866          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
1867          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
1868          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
1869          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
1870    
1871          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26