/[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 1582 by bh, Tue Aug 12 15:08:40 2003 UTC revision 2315 by jan, Sun Aug 1 21:32:07 2004 UTC
# Line 1  Line 1 
1    2004-08-01  Jan-Oliver Wagner <[email protected]>
2    
3            * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
4            translation completed.
5    
6            * Doc/manual/thuban-manual.xml (Chapter Session Management):
7            Fixed unprecise description for Save Session.
8    
9    2004-07-31  Jan-Oliver Wagner <[email protected]>
10    
11            Started translation of Users Manual into german.
12    
13            * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
14    
15            * Doc/manual/Makefile: Added build instructions for german
16            users manual.
17    
18            * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
19    
20    2004-07-28  Jan Sch�ngel  <[email protected]>
21    
22            * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
23            functions. Now all metadata will handle by the function and its not
24            needed to initialize it from outside. Therefor the associated mapobj
25            will be stored in the Metadata Object. So we can use the special
26            functions from the associated mapobj to get the Metadata.
27            Therefor all initialization code for the metadata is removed from the
28            other classes.
29            (MF_Layer): Added a function to get the metadata object.
30            (MF_Map): Added a function to set the mappath, the path where
31            the mapfile ist stored.
32    
33            * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
34            to set the extent in the mapfile. Now the code is set by the displayed
35            data in the Thuban-view.
36            (export_mapfile): The shapepath is now set empty, until relative
37            pathnames are supported.
38    
39            * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
40            metadata. Yet only mapfile metadata are supported. Layer and class
41            supported are not implemented.
42            Added a dialog to handle layer informations. The dialog only shows the
43            selected layer at the moment.
44    
45            * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
46            code for setting the extent in thuban. Now the extent is set to the
47            given extent from the mapfile.
48            Fixed a logical mistake. Now the extent is set when realy a layer is
49            loaded, and not if one is selected to load.
50    
51            * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
52            move the shown map in the browser.
53    
54            * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
55            line to the mapobj and added metadata to the political layer.
56    
57            * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
58            for Metadata.
59    
60    2004-07-26  Martin Schulze  <[email protected]>
61    
62            * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
63            ClassMapper
64    
65            * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
66            case for the new ClassMapper
67    
68    
69    2004-07-22  Bernhard Herzog  <[email protected]>
70    
71            * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New.  Return the
72            visible extent of the map in projected coordinates
73    
74            * test/test_viewport.py (SimpleViewPortTest.test_default_size)
75            (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
76            tests.
77            (SimpleViewPortTest.test_visible_extent): New. The real test for
78            VisibleExtent()
79    
80    2004-07-22  Bernhard Herzog  <[email protected]>
81    
82            * test/test_viewport.py: Use support.run_tests as the main
83            function when running asa script.
84    
85    2004-07-22  Jan Sch�ngel <[email protected]>
86    
87            * Extensions/umn_mapserver/mf_export.py: Added "import os"
88            Removed the old "import Thuban.UI.mainwindow" code.
89            (tbextent_to_map): Removed the extra function and at the code direct
90            to "thuban_to_map" function.
91            (write_creatorcomment): Added. Now a short comment is added to the
92            beginning of an generated mapfile.
93            (export_mapfile): Now the Path and filename are saved in to variables,
94            and not together in one variable. This is needed for the new
95            write_creatorcomment function.
96                    
97            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
98            import module "re". Also added Range and the ClassGroupRange import
99            from Thuban. Both are needed for the new range expression import.
100            (create_rangeexpression): Added. Creates a Range Expression in Thuban
101            style from a given mapfile expression.
102            (added_rasterlayer): Make some small code changes. The shapepath is
103            now stored in an extra variable and the clazz_name is set empty if no
104            class name set in the mapfile.
105            Changed the Error message for Range Expressions, becaus the new
106            function create a error string which will be shown in the dialog.
107    
108            * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
109            range expression import.
110    
111    2004-07-21  Jan-Oliver Wagner <[email protected]>
112    
113            * Extensions/umn_mapserver/README: Added hint that
114            installation as root can be avoided. Removed all tabs.
115    
116    2004-07-16  Bernhard Herzog  <[email protected]>
117    
118            * test/test_viewport.py
119            (ViewPortTest.test_changing_map_projection): Check that changing
120            the projection of an empty map shown in a viewport doesn't lead to
121            exceptions in the viewport's handler for the
122            MAP_PROJECTION_CHANGED messages
123    
124            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
125            try to keep the same region visible when the map actually contains
126            something
127    
128    2004-07-15  Jan Sch�ngel <[email protected]>
129    
130            * Extensions/umn_mapserver/mapfile.py: Added a function to get the
131            mappath directly from the mapobj. Is needed because of the changes
132            in mf_import.py.
133            (MF_Layer.add_thubanclass): Added a new comment.
134            (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
135            mapobj is empty there is no extent get from thuban an so no one can
136            set to th mapobj.
137            
138            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
139            the discription.
140            Split the funktion in to three smaller ones. The new functions are
141            add_rasterlayer, add_polygonlayer and select_layer2import.
142            Removed the mapfilepath and filepath initialisation, because its know
143            include in the new functions.
144            Now nothing will be imported if cancel is pressed in the
145            layer choice dialog.
146    
147    2004-07-14  Jan Sch�ngel <[email protected]>
148    
149            * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
150            import.
151            (MF_Symbolset): Removed the extra variable for numsymbols.
152            (MF_Class.__init__): Added a comment to the exception clause.
153            Removed the extent init, because it was not needed anymore.
154            (MF_Layer.add_thubanclass): Added the code to set the class name to
155            the expression value from thuban if no label is defined.
156            Added the code to export Range expressions from thuban to the mapfile.
157            (MF_Map.set_extent): Removed the exception and replace it by some if
158            code. If the size of a map is not defined the size will be set to 1,1.
159            This is necessary because if the extent is set, mapscript checks if
160            the size is greater than zero.
161            (MF_Web): Added the get and set function for the template.
162    
163            * Extensions/umn_mapserver/mf_export.py: Added the function to check
164            if a mapobject exists and used it to set the status of the menu items.
165            If no mapfile exists the settings could not be edditied.
166            Define after which menuitem the exportitem will include.
167            
168            * Extensions/umn_mapserver/mf_handle.py: Removed the import
169            Thuban.UI.mainwindow clause, because it is not needed.
170            Added the command Refresh() to all "OnChangeColor()" functions,
171            because the color preview window was not updated on a color change.
172            Added the function to check if a mapobject exists and used it to set the
173            status of the menu items. If no mapobject exists the settings could not
174            be edditied.
175            (Map_Dialog): Moved the imagetype selector from the
176            Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
177            (Web_Dialog): Removed the name label and added the template textbox.
178    
179            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
180            the exception handling on loading the layers by an if statement. It
181            is not necessary to us the exception there.
182            The Filepath creation now use os.path.join to build the path.
183    
184            * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
185            definition from global to the setUp function. Now the testMap will
186            initialize new on each test.
187    
188            * Extensions/umn_mapserver/sample/iceland.map: Include three new
189            classes in the Line Layer, to test logical Expressions.
190            Set the status of the class "Point9" in the Point Layer to off
191            
192    2004-07-13  Bernhard Herzog  <[email protected]>
193    
194            * Thuban/UI/baserenderer.py
195            (BaseRenderer.render_map_incrementally): Fix a logic bug in the
196            optimization that tries not to draw layers under a raster layer.
197            The bug was harmless.  All it effectively did was to produce The a
198            strange messages about not being able to draw Layer instances for
199            all vector layers below a raster layer which would be invisible
200            anyway because the raster layer currently always covers the entire
201            window
202    
203    2004-07-08  Jan Sch�ngel <[email protected]>
204    
205            * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
206            a list of supported outputformats. This formats are not alle supported
207            because there is no possibility to get the outputformat without the
208            name known. Make some formal changes to the code.
209            (MF_Map.set_name()): Fixed a bug if the name is None.
210    
211            * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
212            statement, because its not needed anymore. The Outputformat is now
213            given as string from the object. Make some formal changes to the code.
214    
215            * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
216            most of the new setting which were added during the last changes.
217            Removed the MF_Size Test.
218            
219            * Extensions/umn_mapserver/test/test.map: Added a new class to the
220            cultural Layer to test expressions and the the status of that layer
221            from on to default.
222            Changed the data path the the correct Thuban Data
223            Added the Outputformat Object and Symbol Object
224            
225    2004-07-07  Jan Sch�ngel <[email protected]>
226    
227            * Extensions/umn_mapserver/mapfile.py: Added some new
228            settings to edit (outputformat, label, imagetype)
229    
230            * Extensions/umn_mapserver/mf_handle.py: Added some setting to
231            the Label Dialog and add the OutputDialog.
232            Make some changes to the code order.
233    
234    2004-07-06  Jan Sch�ngel <[email protected]>
235    
236            * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
237            and line Obj and add the scalebar_status_type, scalebar_style_type and
238            scalebar_position_type.
239            Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
240            are only used to create a Symbol like the circle in Thuban.
241            Added the scalebarObject (MF_Scalebar)
242            (MF_Class): Added set_status and get_status.
243            (MF_Layer.add_thubanclass): Added code to set the class status
244            (MF_Map): Added code to handle the symbols and scalebar
245            (MF_Label): Added the set_partials and get_partials functions
246            
247            * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
248            from mapfile. Added a function to create a circle object like the one
249            from thuban if no one exists.
250            
251            * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
252            press ok in the assosiated dialog and not at the end of the
253            colordialog.
254            Added the Dialog for the Scalebar.
255            (Label_Dialog): Added the offset option
256    
257            * Extensions/umn_mapserver/mf_import.py: Added code to import the
258            status of the Classes.
259            Fixed a bug with the projection. Now the to_meter parameter will be
260            added to the Projection only if it doesn't exists.
261    
262    2004-07-01  Jan Sch�ngel <[email protected]>
263    
264            Added the functionality to handle the content thuban is not
265            able to handle directly.
266    
267            * Extensions/umn_mapserver/mf_handle.py: New. This module extents
268            Thuban with the possibility to edit the mapfile content.        
269            
270            * Extensions/umn_mapserver/mf_import.py: Added the possibility
271            to import mapfiles without any layer selected. So it is possible
272            to edit the other settings in a mapfile.
273            (import_mapfile): Added code to use the editing functions.
274            Added the possibility to import the projection to a layer if one
275            is defined.
276            Status settings (On,Off) will now set in thuban (visible, invisible).
277            fixed a bug with with classnames. If no classname is set in mapfile
278            the value in Thuban will set to the expression.
279            
280            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
281            possibility to save a new mapfile or use the old one which is
282            imported or new created.
283            Added code to use the editing functions.
284            Remove some not needed import statements
285    
286            * Extensions/umn_mapserver/mapfile.py: Added new types which are
287            need for the editing functions.
288            Added needed set-functions for the editing functions.
289            Added the possibility to export rasterimages.
290            Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
291            MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
292            moment.
293            (MF_Class.set_thubanstyle): Now point layers will set to a default
294            symbol to show a circle in mapserver and not only a 1px dot.
295            (MF_Style.__init__): Fixed a bug with the color. Color was not set
296            correct before.
297            (MF_Size): Removed, because it is not needed.
298            
299            * Extensions/umn_mapserver/README: Added the hints to use the
300            export and editing functions, too.
301    
302            * Extensions/umn_mapserver/sample/iceland.map: Added the
303            new parameter "UNITS METERS".
304            Change the political layer to status OFF.
305    
306            * Extensions/umn_mapserver/sample/README: Added some
307            more details to setup the sample in the MapServer.
308            
309    2004-06-26  Bernhard Reiter <[email protected]>
310    
311            * Extensions/svgexport/test/test_svgmapwriter.py:
312            Removed class VFile and used standard StringIO instead.
313    
314    2004-06-23  Jan Sch�ngel  <[email protected]>
315    
316            Add the export function to the umn_mapserver extension.
317    
318            * Extension/umn_mapserver/mf_export.py: New. This module extents
319            Thuban with the possibility to export the Thuban content.
320    
321            * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
322            with the export module. Especially added the possibility to
323            add thuban objects directly to the map objects.
324    
325            * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
326            because of the hint from Bernhard Herzog.
327            Corrected the handling of absolute pathnames.
328            Changed the Text of the Menu-Item, now the beginning is upper case.
329    
330            * Extensions/umn_mapserver/README: Added the --with-tiff statement.
331    
332    2004-06-16  Jan Sch�ngel  <[email protected]>
333    
334            Add a sample and make some changes.
335    
336            * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
337            import from * to explicit used statements. Changed the
338            Thuban.UI.mainwindow import phrase, too.
339            (import_mapfile):Corrected a clerical mistake.
340            Added wxCHANGE_DIR in OpenFile Dialog.
341            Added a MultipleChoiceDialog, to select the layers to load from
342            mapfile into thuban. Thereby the projection is only set if one layer
343            is selected.
344            Added the possibility to handle relative pathnames which uses
345            up-level references.
346            Removed some doubled code.
347            Corrected an error with integer values used as label in thuban
348            ClassGroup.
349            
350            * Extensions/umn_mapserver/sample: New.
351    
352            * Extensions/umn_mapserver/sample/README: New. Describes the
353            usage of the sample files.
354    
355            * Extensions/umn_mapserver/sample/iceland.map: New. This is
356            a suitable .map-file for the iceland data.
357    
358            * Extensions/umn_mapserver/sample/index.html: New. The template
359            for the mapfile.  
360    
361            * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
362            file for the Iceland Application on web.
363    
364            * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
365            some details.
366    
367            * Extensions/umn_mapserver/test/test_mapserver
368            (mapserver_import_Test_generalClasses.test_MF_Color):
369            Corrected the thubancolor test.
370    
371    2004-06-15  Jan Sch�ngel  <[email protected]>
372    
373            * Extensions/umn_mapserver/README: New. Install instruction.
374    
375    2004-06-14  Bernhard Reiter <[email protected]>
376    
377            * libraries/thuban/cpl_mfile.h: Added copyright header.
378    
379            * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
380            Free Software License so that it is most useful with gdalwarp
381            and bmpdataset.
382    
383    2004-06-14  Bernhard Herzog  <[email protected]>
384    
385            * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
386            import of wxPython.wx itself (as opposed to the contents of
387            wxPython.wx).  For some reason wxPython.wx is available as
388            wxPython.wx.wx in at least some 2.4 releases.  Fixes RT#2482
389            wrt. wxPython 2.4.
390    
391    2004-06-10  Jan Sch�ngel  <[email protected]>
392    
393            Initial version of new extension "umn_mapserver".  This extension aims
394            to manage configuration for the UMN MapServer application.  This
395            inital version just imports the .map-files and displays all, Thuban is
396            capable of.
397    
398            * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
399    
400            * Extensions/umn_mapserver/test/README: New. Describes how to run the
401            tests.
402    
403            * Extensions/umn_mapserver/test/test.map: New. This is a test
404            .map-file for automated tests of the umn_mapserver extension of
405            Thuban.
406    
407            * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
408            UMN Mapserver classes.
409    
410            * Extensions/umn_mapserver/__init__.py: New. Init to make this
411            directory a package.
412    
413            * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
414            '.map'-file objects.
415    
416            * Extensions/umn_mapserver/mf_import.py: New. This module extends
417            Thuban with the possibility to handle UMN MapServer mapfiles.
418    
419    2004-06-03  Bernhard Herzog  <[email protected]>
420    
421            * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
422            to a tuple before using it as arguments to the % operator.  This
423            fixes the formatting issue filed in RT#2239 on 2004-01-13 and
424            reported today on thuban-list by Jan Sch�ngel
425    
426            * test/test_layer.py (TestLayerModification.setUp): Save the
427            filename as an instance variable so we can refer to it in tests
428            (TestLayerModification.test_tree_info): Uncomment this method
429            again and make it work.  This tests for the formatting issue
430            filed in RT#2239 on 2004-01-13
431    
432    2004-05-28  Bernhard Herzog  <[email protected]>
433    
434            * Thuban/UI/baserenderer.py: Fix some typos.
435    
436    2004-05-18  Jan-Oliver Wagner <[email protected]>
437    
438            * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
439            by increasing a field size.
440    
441    2004-05-17  Bernhard Herzog  <[email protected]>
442    
443            Update to newest shapelib and get rid of Thuban specific
444            extensions, i.e. use the new DBFUpdateHeader instead of our
445            DBFCommit kludge
446    
447            * libraries/shapelib/shpopen.c: Update to version from current
448            shapelib CVS.
449    
450            * libraries/shapelib/shapefil.h: Update to version from current
451            shapelib CVS.
452    
453            * libraries/shapelib/dbfopen.c: Update to version from current
454            shapelib CVS.
455            (DBFCommit): Effectively removed since shapelib itself has
456            DBFUpdateHeader now which is better for what DBFCommit wanted to
457            achieve.  
458            We're now using an unmodified version of dbfopen.
459    
460            * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
461            value '1' to the Lib.dbflibc extension.  This simply reflects the
462            shapelib and pyshapelib updates
463    
464    2004-05-16  Jan-Oliver Wagner <[email protected]>
465    
466            Finished introduction of Menu.FindOrInsertMenu.
467    
468            * Extensions/drawshape/drawshape.py: Add the command
469            to the experimental menu additionally to the toolbar.
470    
471            * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
472            finding menu on its own.
473    
474            * Doc/manual/thuban-manual.xml: updated sample file
475            to use FindOrInsertMenu().
476    
477            * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
478            instead of finding menu on its own.
479    
480    2004-05-11  Jan-Oliver Wagner <[email protected]>
481    
482            * test/test_menu.py (MenuTest.test): Added testing
483            of method Menu.FindOrInsertMenu.
484    
485    2004-05-10  Jan-Oliver Wagner <[email protected]>
486    
487            Introduce and use Menu.FindOrInsertMenu.
488    
489            * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
490              given menu or, if not found, insert it.
491    
492            * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
493            /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
494            /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
495            menu on its own.
496    
497    2004-05-06  Jan-Oliver Wagner <[email protected]>
498    
499            Introduce a abstract ColorDialog class and remove
500            and outdated file.
501    
502            * Thuban/UI/proj4dialog.py: Removed. It is has been
503            replaced by projdialog for quite a while and is not used
504            anymore.
505    
506            * Thuban/UI/colordialog.py: New. Abstraction for color selection
507            dialog(s).
508    
509            * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
510            Now calls the abstract ColorDialog instead of wxColourDialog.
511            This also removed the dependency to Color class conversion
512            from this function.
513    
514    2004-05-04  Frank Koormann  <[email protected]>
515    
516            * Extensions/bboxdump/__init__.py: Fixed string left over from
517            copying.
518    
519            * Extensions/bboxdump/bboxdump.py (bboxdump):
520            Use layer.ShapeStore().AllShapes() to loop over shapes instead of
521            xrange(layer.NumShapes()). Compile the bboxmessage from a list
522            of formatted outputs (string.join) instead of appending to the
523            message. Two progress bar dialogs to report progress on the sometimes
524            lenghty processing.
525    
526    2004-04-22  Frank Koormann  <[email protected]>
527    
528            New Extension to dump bounding boxes of all shapes of the selected
529            layer. An optional column can be specified to group the objects,
530            in this case the bounding box is a union of the separate boxes.
531            Dump can be displayed in a ScrolledMessageDialog or written to file.
532            The Extension is simply a combination of available and well tested
533            Thuban functionality.
534    
535            * Extensions/bboxdump/__init__.py: New: Init to make this
536            directory a package.
537    
538            * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
539            all shapes of the selected layer.
540    
541    2004-04-22  Jan-Oliver Wagner <[email protected]>
542    
543            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
544            strings to be i18n now.
545    
546    2004-04-18  Jan-Oliver Wagner <[email protected]>
547    
548            Changing popup menu of legend from direct building
549            to using the Menu construction as used for the mainwindow.
550    
551            * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
552            layer_to_bottom, layer_visibility
553            (MainWindow.LayerToTop): New. Put current layer to the top.
554            (MainWindow.LayerToBottom): New. Put current layer to bottom.
555            (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
556            Replace 1,0 by True, False.
557            (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
558            current layer.
559            (MainWindow.LayerShowTable): Removed raising of dialog.
560            (_has_selected_layer_visible): New. Support function.
561    
562            * Thuban/UI/legend.py: ID_POP_xxx: removed.
563            (LegendPanel.__init__): Removed EVT_MENU bindings.
564            (LegendTree._OnRightClick): Replace direct creation of
565            menu via wx Classes by applying the menu definition
566            as of Menu class of menu.py.
567            
568    2004-04-16  Jan-Oliver Wagner <[email protected]>
569    
570            * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
571        button string to stronger clearify that Thuban will be closed when hitting
572            the button.
573    
574            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
575            Now for layers without a ShapeStore a corresponding message is given
576            to the user, that this layer has no table to show.
577    
578    2004-04-15  Martin Schulze  <[email protected]>
579    
580            * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
581            recalculate the format for the internal render engine as well.
582    
583            * Extensions/wms/properties.py (wmsProperties): First start for a
584            properties dialog.  It's functional for a first selection of
585            layers, but still has some weired wxWidgets/GTK problems but
586            beautification can be done later.
587    
588            * Extensions/wms/layer.py: Added more documentation
589            (WMSLayer.getFormats): New: Return list of supported image formats
590            by the WMS server
591            (WMSLayer.getLayers): New: Return the list of layer names
592            supported by the WMS server
593            (WMSLayer.getLayerTitle): New: Return the title of the named layer
594            (WMSLayer.getWMSFormat): New: Return the image format that is used
595            for WMS GetMap requests
596            (WMSLayer.setWMSFormat): New: Set the image format that is used
597            for WMS GetMap requests
598            (WMSLayer.__init__): Move away from using only one layer to using
599            a list of layers (unsorted at the moment, though).
600            (WMSLayer.getVisibleLayers): New: Return the list of names for all
601            visible layers
602            (WMSLayer.setVisibleLayers): New: Set the list of names for all
603            visible layers
604    
605            * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
606            order to establish a clean structure.
607    
608            * Extensions/wms/layer.py: Moved the WMS layer into a file on its
609            own in order to establish a clean structure.
610    
611    2004-04-13  Martin Schulze  <[email protected]>
612    
613            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
614            support for oldstyle (WMS 1.0 apparently) image format
615            specification.
616    
617            * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
618            supported graphic formats back to JPEG and BMP, PNG and others are
619            too *cough* experimental...  Sorry, I meant to filter this out
620            before I committed this part.  This should make the WMS extension
621            run from CVS again.
622            (wms_dialog): Reset an empty URL to None so that the subsequent
623            program can depend on this, since the dialog will indeed return an
624            empty URL, causing another declaration of love by Python.
625    
626            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
627            Whenever a native BoundingBox request cannot be fulfilled, check
628            whether the requested SRS is EPSG:3426, in which case return the
629            LatLonBoundingBox values.
630    
631            * Extensions/wms/test/test_parser.py
632            (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
633            ignoring AUTO:* SRS.
634            (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
635            Added another test method to test whether the LatLonBoundingBox
636            values will be returned if BoundingBox values are requested with
637            SRS set to EPSG:3426.
638    
639            * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
640            Added rudimentary support for non-EPSG SRS, i.e. ignore them for
641            the moment by placing them into a variable which is currently
642            unused.  Also test whether the EPSG SRS is numerical as it should
643            be and add an error message if it is not.
644    
645            * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
646            appear in the real world as well.  Since we cannot handle them yet
647            (OGCLib can't either), we will ignore them for the moment.
648    
649            * Extensions/wms/parser.py: Use a variable for denoting the sample
650            filename
651            (WMSCapabilitiesParser.peekLayers): Added support for error
652            messages during grok().  They will be aggregated in an array and
653            may be displayed later.  We may have to add a classification
654            "Warning" and "Error" to this.  That requires more experience,
655            though, since not every error may be lethal.
656    
657            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
658            ShowTable() dialog/frame when the user attempts to display it
659            while it has been opened before already and not closed again.
660    
661    2004-04-11  Martin Schulze  <[email protected]>
662    
663            * Extensions/wms/infodialog.py: Adjusted the class documentation
664    
665            * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
666            Switch to using Thuban{Begin,End}BusyCursor instead of the pure
667            wxWidgets variants.
668            (WMSLayer.__init__): The epsg_id variable is named top_srs now.
669    
670            * Extensions/wms/infodialog.py: Added an information dialog that
671            will display various information about the WMS current resource,
672            so that additional information such as the title, the abstract,
673            fees and access constraints can be displayed for the user if they
674            are documented in the WMS XML.
675    
676    2004-04-10  Martin Schulze  <[email protected]>
677    
678            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
679            string handling.  It's "foo".lower() and not lower(foo) without
680            lower imported from strings or something.
681    
682            * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
683            from capabilities.py and parser.py.  Implement priority list for
684            supported graphics formats, take care of wbmp != bmp.  PNG, TIFF
685            and GIF are supported here, but not yet by main Thuban.  Hence,
686            support for them may be removed later.  Special contribution to
687            usability: get wxWidgets to change the cursor when we're waiting
688            for data from the network so the user won't start to worry.  This
689            causes a redrawing error/warning, though.
690    
691            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
692            the DOM object.
693    
694    2004-04-01  Martin Schulze  <[email protected]>
695    
696            * Extensions/wms/capabilities.py: Adjusted documentation
697            (WMSCapabilities.__init__): Improved documentation, fixed syntax
698            (WMSCapabilities.saveCapabilities): Only catch IOError when
699            handling files
700            (WMSCapabilities.loadCapabilities): Only catch IOError when
701            handling files
702            __main__: corrected variable naming
703            (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
704            class a specialisation of WMSCapabilitiesParser as well.  Also
705            execute grok() after loading or fetching capabilities, if that
706            went well, so that subsequent calls can already access the data.
707            (WMSCapabilities.getVersion): Export the used version of the
708            GetCapabilities request, so we can use it for subsequent calls,
709            i.e. for GetMap requests.
710            (WMSCapabilities.fetchCapabilities): Added proper error handling
711            when the GetCapabilities request failed, so that the surrounding
712            program can act accordingly.
713    
714    2004-03-30  Martin Schulze  <[email protected]>
715    
716            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
717            Adjusted the getLayerSRS method to return the list of SRSes
718            extracted from <SRS> elements instead of <BoundingBox> elements.
719            Added a bit of documentation as well.
720            (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
721            since it was only implemented due to a misunderstanding.
722    
723            * Extensions/wms/test/test_parser.py
724            (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
725            reflect the corrected interpretation of the standard: i.e. a layer
726            does not have to define a BoundingBox for all SRSes it supports.
727            Hence the <SRS></SRS> specification is authoritative, not the list
728            of BoundingBoxes.
729            (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
730            to ensure None is returned for a non-existing SRS.
731            (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
732            since it is not applicable anymore.  Listing more SRSes in <SRS>
733            elements is valid according to the specs.
734    
735    2004-03-26  Bernhard Reiter <[email protected]>
736    
737            * README: Nicer formatting of text. Improved descriptions.
738            Reflected wxWidgets name change.
739            
740            * Thuban/UI/about.py: Extended copyright to 2004 and added
741            information about the thuban-devel mailinglist.
742    
743    2004-03-24  Martin Schulze  <[email protected]>
744    
745            * Extensions/wms/capabilities.py: Renamed the class to contain
746            'WMS', also added a linebreak where required
747    
748            * Extensions/wms/parser.py: Finally added the XML parser for the
749            GetCapabilities response.
750    
751            * Extensions/wms/test/sample.xml: Adjusted the sample file so that
752            <SRS> elements match the <BoundingBox> elements, except for the
753            layer 'beschriftung'.
754    
755            * Extensions/wms/test/test_parser.py: Encode non-ascii strings
756            since Python uses unicode strings internally, otherwise
757            comparisons will fail.  Removed tests for getLayerBBoxSRS() since
758            the SRS will be calculated anyway and this method is obsoleted by
759            getLayerSRS().  Denote SRS as strings and not as cardinal numbers.
760            Move loading the sample file into the setUp method.  Added a test
761            for finding the integrity problem in the sample response.
762            Improved formatting.
763    
764            * Extensions/wms/domutils.py: Added convenience routines for
765            handling of Document Object Model (DOM) nodes.
766    
767            * Extensions/wms/test/test_domutils.py: Added a test for the
768            domutils module
769    
770    2004-03-19  Martin Schulze  <[email protected]>
771    
772            * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
773            Moved path detection and adding into a module of its own,
774            adjustpath, which exports thubandir as main Thuban directory.
775    
776            * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
777            detection and adding into a module of its own, adjustpath, which
778            exports thubandir as main Thuban directory.  Reorganised the
779            module in order to support the SkipTest feature for Thuban test
780            cases.
781    
782            * Extensions/wms/test/adjustpath.py: Moved path detection and
783            adding into a module of its own.
784    
785    2004-03-18  Martin Schulze  <[email protected]>
786    
787            * Extensions/wms/test/test_parser.py: Added another test for
788            checking whether the WMS XML parser (to be implemented) returns
789            the information we expect.  This requires a sample WMS WML file
790            (sample.xml) which has been extracted from the frida server and
791            "improved" manually.
792    
793            * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
794            main Thuban directory to the path in order to be able to import
795            random modules.  Adjusted the PyOGCLib detection to reuse the
796            information gathered.  Also added a note about the PYTHONPATH
797            environment variable.
798    
799            * Extensions/wms/test/test_ogclib.py: The format specification is
800            a mime-type, not a graphic format, hence image/jpeg wou ld be the
801            proper format and not JPEG.  We'll also have to take care of the
802            encoding of / as %2F.
803    
804    2004-03-16  Martin Schulze  <[email protected]>
805    
806            * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
807            comprehensive test for the getMapURL method, built compare URLs
808            according to the documentation in OGC 01-068r3
809    
810            * Extensions/wms/capabilities.py (WMSCapabilities): Added the
811            class WMSCapabilities to manage capabilites, will incorporate
812            parsing the capabilities response and provide details for other
813            classes.
814    
815    2004-03-12  Bernhard Herzog  <[email protected]>
816    
817            Support views in addition to normal tables in the postgis
818            shapestore
819    
820            * Thuban/Model/postgisdb.py
821            (PostGISShapeStore._fetch_table_information): Add a fallback for
822            the case where the table name is not in the geometry_columns
823            table.  This is usually the case for views.  Also, set
824            self.shapestore here.
825            (PostGISShapeStore.ShapeType): No need to query the database all
826            the time.  The shape type is now determined in
827            _fetch_table_information
828    
829            * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
830            (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
831            New parameter to specify views.
832            (PostGISDatabase.has_data): Also compare the views.  New views
833            parameter
834            (PostGISDatabase.initdb): Create the views.
835            (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
836            view
837    
838            * test/test_postgis_db.py
839            (TestPostGISShapestorePointFromViews): New.  Test a
840            PostGISShapeStore with a view
841            (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
842            the geometry_column explicitly to test whether that works
843    
844    2004-03-12  Bernhard Herzog  <[email protected]>
845    
846            Final step for explicit id/geometry columns: Loading and saving
847    
848            * Resources/XML/thuban-1.1.dtd: New.  Derived from thuban-1.0.dtd
849            with the following changes:
850            (dbshapesource): Two new attributes id_column and geometry_column
851    
852            * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
853            (SessionSaver.write_session): Use the new namespace
854            (SessionSaver.write_data_containers): Write the new dbshapesource
855            parameters
856    
857            * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
858            the new file format version
859            (SessionLoader.start_dbshapesource): Handle the new db parameters
860    
861            * test/test_save.py: Update to the new dtd and namespace
862            (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
863            mock object to provide a working IDColumn method.
864    
865            * test/test_load_1_0.py: New.  Copy of the test_load.py before
866            today's changes but with the round-trip tests removed.
867    
868            * test/test_load_0_9.py: Update doc-string.
869    
870            * test/test_load.py: Update all .thuban files to the new dtd and
871            namespace.
872            (TestPostGISLayer.file_contents): Add the new dbshapesource
873            paramters
874    
875    2004-03-11  Bernhard Herzog  <[email protected]>
876    
877            Next step for explicit id/geometry columns: User interaction
878    
879            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
880            the dialog is constructed. Add combo boxes to select id and
881            geometry column.  Rename some instance variables.
882            (ChooseDBTableDialog.GetTable): Return id and geometry column
883            names
884            (ChooseDBTableDialog.OnTableSelect): New. Event handler for
885            selections in the table list
886    
887            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
888            and geometry_column
889    
890            * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
891            parameters for id_column and geometry column of PostGISShapeStore
892            here as well.
893    
894            * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
895            (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
896            (PostGISConnection.GeometryTables): Use a better query to
897            determine which relations in the database might be usable for
898            shapestores.  Now supports views as well but is more PostgreSQL
899            specific
900            (PostGISConnection.table_columns): New. Somewhat experimental
901            method to let the db dialogs provide lists of columns to users so
902            that they can select id and geometry columns.
903            (PostGISTable.__init__): The default value of the id_column
904            parameter is now None it still means "gid" effectively, though.
905            (PostGISTable.IDColumn): New introspection method to return a
906            column object for the id column
907            (PostGISShapeStore.GeometryColumn): New introspection method to
908            return a column object for the geometry column
909    
910            * test/test_postgis_db.py
911            (TestPostGISConnection.test_gis_tables_non_empty):
912            Removed. Subsumed by the new:
913            (TestPostGISConnection.test_gis_tables_with_views_and_tables):
914            New. Tes the GeometryTables and table_columns methods with actual
915            tables and views.
916            (PointTests.test_id_column, PointTests.test_geometry_column):
917            New. tests for the new methods.
918            (TestPostGISShapestorePoint.setUp)
919            (TestPostGISShapestorePointSRID.setUp)
920            (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
921            instance variables needed by the new tests
922    
923    2004-03-11  Bernhard Herzog  <[email protected]>
924    
925            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
926            numbers given to ReadValue are ordinals.
927    
928    2004-03-11  Bernhard Herzog  <[email protected]>
929    
930            Elimiate the requirement for PostGIS tables to have a column
931            called "gid".
932    
933            * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
934            id_column to specify which column to use to identify rows.  Also
935            new instance variables id_column and quoted_id_column
936            (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
937            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
938            (PostGISTable.SimpleQuery): Use the id column name provided to the
939            constructor instead of "gid"
940            (PostGISShapeStore.__init__): New parameter id_column analogously
941            to PostGISTable.__init__.  This parameter is simply passed through
942            to the base class constructor
943            (PostGISShapeStore._create_col_from_description): Fix typo in
944            doc-string
945            (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
946            (PostGISShapeStore.ShapesInRegion): Use the id column name
947            provided to the constructor instead of "gid"
948    
949            * test/postgissupport.py
950            (PostgreSQLServer.get_default_static_data_db): New static table
951            landmarks_point_id with an id column != "gid.  Update the comments
952            a bit.
953            (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
954            doc-
955            (upload_shapefile): New parameter gid_column to use a name other
956            than "gid" for the column to store the shape ids
957    
958            * test/test_postgis_db.py (TableTests): New.  Mixin-class
959            containing all tests previously in TestPostGISTable.  The actual
960            tests are the same but the code is a bit more configurable to
961            allow for different id columns etc.
962            (TestPostGISTable): Derive from TableTests now for the actual
963            tests.
964            (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
965            except that it the landmarks_point_id table to test the id_column
966            parameter
967            (PointTests): Extend the doc-string
968            (TestPostGISShapestorePointExplicitGIDColumn)
969            (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
970            from PointTests to test the explicit id_column parameter.  One
971            tests with the name of the column holding the shape ids, the other
972            uses PostgreSQL's OID column.  For the latter a number of methods
973            have to be overwritten to make them independent of the actual id
974            values.
975    
976    2004-03-08  Silke Reimer  <[email protected]>
977    
978            Update debian directory:
979    
980            * debian/changelog: Added new version.
981            * deiban/rules: Updated management of patches (with cbds)
982            * debian/control: Added cbds to dependencies
983            * debian/patches/*: New. Adds better support for patches of thuban in
984                            debian
985            * debian/menu: Syntax of menu changed slightly
986            * debian/setup.py.patch: removed because it has been moved to
987                            debian/patechs/setup.py.patch
988            
989    
990    2004-02-26  Bernhard Herzog  <[email protected]>
991    
992            Create the Doc/technotes directory for text files with information
993            for developers
994    
995            * Doc/technotes/README: New. README for the technotes
996    
997            * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
998            Thuban
999    
1000            * Doc/technotes/release_process.txt: New. Used to be
1001            HOWTO-Release.  Now slightly adapted to technote formatting style.
1002    
1003            * HOWTO-Release: Removed.  It's contents are now in
1004            Doc/technotes/release_process.txt
1005    
1006    2004-02-25  Bernhard Herzog  <[email protected]>
1007    
1008            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
1009            version of wxWindows the module was compiled with so we can check
1010            that against the wxPython version.
1011    
1012            * Thuban/version.py (thuban_branch, thuban_release): New variables
1013            controlling which and how Thuban versions are shown.  See the
1014            comments for details.
1015            (verify_versions): Also check that the wx version that wxproj is
1016            compiled against matches that of the wxPython we use at runtime
1017    
1018    2004-02-20  Bernhard Herzog  <[email protected]>
1019    
1020            * Extensions/wms/wms.py (epsg_code_to_projection): Use
1021            get_system_proj_file to read the epsg projections.  The old way
1022            depended on the current directory being the top Thuban directory.
1023    
1024    2004-02-20  Bernhard Herzog  <[email protected]>
1025    
1026            * Extensions/svgexport/test/test_svgmapwriter.py
1027            (TestVirtualDC.test_clippath): Remove a debug print
1028    
1029    2004-02-20  Bernhard Herzog  <[email protected]>
1030    
1031            * Extensions/svgexport/__init__.py: New.  Turn
1032            Extensions/svgexport into a package.
1033    
1034            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
1035            doc-string a bit.  The doc-string must come first, otherwise it's
1036            not a doc-string.  The __future__ import must be the first thing
1037            after the doc-string.  Use only double quotes in doc-strings.
1038            Single quotes trip up emacs syntax highlighting if the text
1039            contains apostrophes.
1040    
1041    2004-02-20  Bernhard Herzog  <[email protected]>
1042    
1043            * Extensions/svgexport/test/__init__.py,
1044            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
1045            suite for svgexport
1046    
1047            * test/runtests.py (find_test_modules): New. Function with the
1048            module finding code from main.
1049            (main): Use find_test_modules to figure out the default test
1050            modules and take modules from Extensions.svgexport.test too.
1051    
1052    2004-02-19  Bernhard Herzog  <[email protected]>
1053    
1054            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
1055            the mainwindow has a reference to the map of the initial session.
1056            This fixes a bug introduced with the fix for RT#2245
1057    
1058    2004-02-19  Bernhard Herzog  <[email protected]>
1059    
1060            * Extensions/svgexport/svgsaver.py,
1061            Extensions/svgexport/svgmapwriter.py,
1062            Extensions/svgexport/maplegend.py: Added again.  This time in the
1063            correct place.
1064    
1065    2004-02-17  Bernhard Herzog  <[email protected]>
1066    
1067            Fix for RT#2245
1068    
1069            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
1070            instance variables before trying to create any windows.  Creating
1071            windows can start an event loop if e.g. message boxes are popped
1072            up for some reason, and event handlers, especially EVT_UPDATE_UI
1073            may want to access things from the application.
1074            (ThubanApplication.maps_changed): The mainwindow may not have been
1075            created yet, so check whether it has been created before calling
1076            its methods
1077    
1078            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
1079            have a map
1080    
1081    2004-02-17  Bernhard Herzog  <[email protected]>
1082    
1083            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
1084            Extensions/svgmapwriter.py, Extensions/maplegend.py,
1085            extensions/svgexport/svgsaver.py,
1086            extensions/svgexport/svgmapwriter.py,
1087            extensions/svgexport/maplegend.py: Removed.  These files were in
1088            the wrong places or didn't work at all.
1089    
1090    2004-02-16  Bernhard Herzog  <[email protected]>
1091    
1092            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
1093            line
1094    
1095    2004-02-16  Bernhard Herzog  <[email protected]>
1096    
1097            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
1098    
1099    2004-02-15  Markus Rechtien  <[email protected]>
1100            
1101            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
1102            to write a session to a file in SVG format.
1103            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
1104            to write a SVG map of a session.
1105            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
1106            in SVG format for the current session.
1107    
1108    2004-02-13  Bernhard Herzog  <[email protected]>
1109    
1110            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
1111            can't be created, return immediately after displaying the error
1112            message.
1113    
1114    2004-02-11  Bernhard Herzog  <[email protected]>
1115    
1116            Handle postgis tables with more than one geometry column.
1117    
1118            * Thuban/Model/postgisdb.py
1119            (PostGISTable._fetch_table_information): Delegate the creation of
1120            column objects to a different method so that we can extend that in
1121            derived classes
1122            (PostGISTable._create_col_from_description): New. Column object
1123            creation part of _fetch_table_information
1124            (PostGISShapeStore._create_col_from_description): New. Extend
1125            inherited method to handle geometry columns
1126            (PostGISShapeStore.__init__): New parameter geometry_column to
1127            specify which geometry column to use.  Optional but mandatory for
1128            tables with more than one geometry column
1129            (PostGISShapeStore._fetch_table_information): Also use the name of
1130            the geometry column when looking for the srid
1131            (PostGISShapeStore.ShapeType): Also use the name of the geometry
1132            column when looking for the shape type
1133    
1134            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
1135            NonConnectionStore to changes in the PostGISShapeStore
1136    
1137            * test/test_postgis_db.py
1138            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
1139            PostGISShapeStore with tables having two geometry columns.
1140    
1141    2004-02-10  Bernhard Herzog  <[email protected]>
1142    
1143            Fix some postgis problems.  What remains to be done is real
1144            handling of SRIDs as they affect how reprojection is done
1145    
1146            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
1147            doc-string
1148            (PostGISShapeStore._fetch_table_information): New. Extend
1149            inherited method to retrieve srid
1150            (PostGISShapeStore.BoundingBox): Handle tables without data.
1151            extent yields NULL for those
1152            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
1153    
1154            * test/test_postgis_db.py
1155            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
1156            for the special case of a table without any data
1157            (TestPostGISShapestorePointSRID): New class with tests for a table
1158            that uses srids
1159            (PolygonTests): Fix a doc-string typo
1160    
1161            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
1162            reference_systems with a specification of spacial reference
1163            systems to create in the new db.
1164            (PostgreSQLServer.new_postgis_db)
1165            (PostgreSQLServer.get_static_data_db): New parameter
1166            reference_systems to be passed through ultimately to
1167            PostGISDatabase.  In new_postgis_db also check whether an existing
1168            db already has the right srids
1169            (PostgreSQLServer.get_default_static_data_db): Add srids and a
1170            table that uses srids
1171            (PostGISDatabase.initdb): Create the entries for the reference
1172            systems
1173            (PostGISDatabase.has_data): Add reference_systems parameter to
1174            check for those too
1175            (upload_shapefile): New parameter srid to create tables with a
1176            specific srid
1177    
1178    2004-02-06  Frank Koormann  <[email protected]>
1179    
1180            * po/pt_BR.po: Fixed charset
1181    
1182    2004-02-05  Frank Koormann  <[email protected]>
1183    
1184            * po/pt_BR.po: Fixed format string for error message, missing %s
1185            added (Thuban/UI/application.py:273)
1186    
1187    2004-02-03  Frank Koormann  <[email protected]>
1188            
1189            First version of Portuguese (Brazilian) translation
1190    
1191            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
1192            Brazilian Portuguese by Eduardo Patto Kanegae.
1193    
1194            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
1195            translators.
1196    
1197    
1198    2004-01-22  Frank Koormann  <[email protected]>
1199    
1200            * Doc/manual/thuban-manual.xml: Added section on installation of
1201            Thuban under Win32 systems. Fixed image path references in the postgis
1202            section. Some minor source formattings.
1203    
1204    2004-01-21  Frank Koormann  <[email protected]>
1205    
1206            Make Thuban remember path selections (at least for one application run).
1207    
1208            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
1209            attribute of application object. Path is a dictionary of
1210            strings, currently with the items "data" and "projection".  
1211            (Application.SetPath): New, stores path for the specified item.
1212            (Application.Path): New, return path for the specified item.
1213    
1214            * Thuban/UI/mainwindow.py
1215            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
1216            MainWindow.AddLayer, MainWindow.AddRasterLayer,
1217            MainWindow.TableOpen): Access "data" path information of the
1218            application.
1219            
1220            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
1221            Access "projection" path information of the application.
1222    
1223    2004-01-05  Bernhard Herzog  <[email protected]>
1224    
1225            * po/ru.po: Updated translations from Alex Shevlakov
1226    
1227    2004-01-05  Bernhard Herzog  <[email protected]>
1228    
1229            * po/Makefile, po/README: Move the description of how to generate
1230            the translation statistics to the README.
1231    
1232    2003-12-23  Bernhard Herzog  <[email protected]>
1233    
1234            * NEWS: Update for 1.0.0
1235    
1236            * po/it.po: Another update from Maurizio Napolitano
1237    
1238    2003-12-23  Bernhard Herzog  <[email protected]>
1239    
1240            * po/it.po: Updated translation from Maurizio Napolitano
1241    
1242    2003-12-23  Bernhard Herzog  <[email protected]>
1243    
1244            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
1245            for translation
1246    
1247            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
1248            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
1249            strings for translation
1250    
1251            * po/de.po: Update with the newly marked strings.
1252    
1253    2003-12-22  Bernhard Herzog  <[email protected]>
1254    
1255            * HOWTO-Release: Fix the places where version numbers have to be
1256            updated
1257    
1258    2003-12-22  Bernhard Herzog  <[email protected]>
1259    
1260            * setup.py (setup call): 1.0.0, yeah!
1261    
1262            * Thuban/version.py (longversion): 1.0.0, yeah!
1263    
1264            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1265            1.0.0 namespace too
1266    
1267            * Thuban/Model/save.py (SessionSaver.write_session): Save with
1268            1.0.0 namespace
1269    
1270            * test/test_load.py (LoadSessionTest.dtd)
1271            (TestSingleLayer.file_contents)
1272            (TestNonAsciiColumnName.file_contents)
1273            (TestLayerVisibility.file_contents)
1274            (TestClassification.file_contents, TestLabels.file_contents)
1275            (TestLayerProjection.file_contents)
1276            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1277            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
1278            (TestPostGISLayerPassword.file_contents)
1279            (TestLoadError.file_contents, TestLoadError.test): Update for
1280            1.0.0 namespace
1281    
1282            * test/test_save.py (SaveSessionTest.dtd)
1283            (SaveSessionTest.testEmptySession)
1284            (SaveSessionTest.testSingleLayer)
1285            (SaveSessionTest.testLayerProjection)
1286            (SaveSessionTest.testRasterLayer)
1287            (SaveSessionTest.testClassifiedLayer)
1288            (SaveSessionTest.test_dbf_table)
1289            (SaveSessionTest.test_joined_table)
1290            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
1291    
1292    2003-12-22  Bernhard Herzog  <[email protected]>
1293    
1294            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
1295            alignment flags are byte strings not unicode and that they have
1296            valid values
1297    
1298            * test/test_load.py (TestLabelLayer): New. Test loading (and
1299            indirectly saving) of maps with labels.
1300    
1301    2003-12-22  Bernhard Herzog  <[email protected]>
1302    
1303            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
1304            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
1305            unsubscribe all subscribers.
1306            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
1307            self.grid since it may already have been destroyed.
1308            Fixes RT #2256
1309    
1310    2003-12-19  Bernhard Herzog  <[email protected]>
1311    
1312            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
1313    
1314    2003-12-16  Bernhard Herzog  <[email protected]>
1315            
1316            * debian/bitmappath.patch, debian/setup.py.patch:
1317                    added to ensure compliance with FHS for debian
1318            * debian/rules, debian/changelog:
1319                added patches in rules to ensure compliance with FHS for debian
1320    
1321    2003-12-16  Bernhard Herzog  <[email protected]>
1322    
1323            * po/Makefile (mo): Make the output a bit nicer so that it prints
1324            statistics about the translations. Add a comment how produce even
1325            nicer statistics with sed.
1326    
1327    2003-12-09  Frank Koormann   <[email protected]>
1328    
1329            * Resources/Projections/defaults.proj:
1330            French projection sample with correct accents (UNICODE).
1331    
1332    2003-12-05  Bernhard Herzog  <[email protected]>
1333    
1334            * MANIFEST.in: Add the devtools directory
1335    
1336            * setup.py (setup call): Use license instead of licence. This
1337            silences a deprecation warning on Python 2.3
1338    
1339    2003-12-05  Frank Koormann   <[email protected]>
1340    
1341            Documentation synced with 1.0rc1
1342    
1343            * Doc/manual/thuban-manual.xml:
1344            Minor formatting changes and references to database layers .
1345            Introduction.Internationalization: New section on i18n.
1346            MapManagement.AddingandRemovingLayers: Added item on database layers.  
1347            MapManagement.TheLegend: Added section and screenshot on popup menu.
1348            ProjectionManagement: Updated screenshot and sentence on EPSG.
1349            Appendix.SupportedDataSources: Added PostGIS.
1350            Appendix.WorkingwithPostGIS: New section.
1351    
1352            * Doc/manual/images/6_projection.png: Updated screenshot including
1353            EPSG checkboxes.
1354    
1355            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
1356    
1357            * Doc/manual/images/app_postgis_add_layer.png,
1358            Doc/manual/images/app_postgis_db_add.png,
1359            Doc/manual/images/app_postgis_db_management.png:
1360            New screenshots focussing on database layers
1361    
1362    2003-12-05  Frank Koormann   <[email protected]>
1363    
1364            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
1365            write warning to stderr instead of rising a warning dialog
1366    
1367    2003-12-03  Bernhard Herzog  <[email protected]>
1368    
1369            Fix for RT #2243
1370    
1371            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
1372            New. Like has_selected_layer but for shape layers only
1373            (_has_selected_shape_layer): New. Like _has_selected_layer but for
1374            shape layers only
1375            (layer_show_table command, layer_jointable command): Use these
1376            commands should only be available for shape layers
1377    
1378    2003-12-03  Bernhard Herzog  <[email protected]>
1379    
1380            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
1381            publishers that are wx objects and may have been destroyed by wx
1382            already. Fixes RT #2242.
1383    
1384    2003-12-03  Bernhard Herzog  <[email protected]>
1385    
1386            * po/ru.po: Updates from Alex Shevlakov
1387    
1388    2003-12-03  Silke Reimer <silkeintevation.de>
1389    
1390            * debian/control, debian/changelog: Added gdal-support to
1391                    debian package, updated to new thuban version
1392    
1393    
1394    2003-12-03  Bernhard Herzog  <[email protected]>
1395    
1396            * Thuban/Lib/version.py: New. Module for version number
1397            manipulations. The version of make_tuple here also deals better
1398            with more unusual version number strings, such as e.g.
1399            "1.2+cvs20031111"
1400    
1401            * Thuban/version.py (make_tuple): Removed. It's now in
1402            Thuban.Lib.version. Use that implementation instead.
1403    
1404            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
1405    
1406    2003-12-02  Bernhard Herzog  <[email protected]>
1407    
1408            * MANIFEST.in: Add debian files
1409    
1410            * setup.py (setup call): Add packages for the Extensions so that
1411            they're installed too
1412            (data_files): Add READMEs and sample data from some Extensions
1413    
1414            * NEWS: Add note about the extensions in binary packages
1415    
1416    2003-12-02  Bernhard Herzog  <[email protected]>
1417    
1418            * Thuban/Model/save.py (SessionSaver.write_session): Save files
1419            with the thuban-1.0rc1
1420    
1421            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
1422            thuban-1.0rc1 namespace too
1423    
1424            * test/test_save.py (SaveSessionTest.dtd)
1425            (SaveSessionTest.testEmptySession)
1426            (SaveSessionTest.testSingleLayer)
1427            (SaveSessionTest.testLayerProjection)
1428            (SaveSessionTest.testRasterLayer)
1429            (SaveSessionTest.testClassifiedLayer)
1430            (SaveSessionTest.test_dbf_table)
1431            (SaveSessionTest.test_joined_table)
1432            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
1433            namespace
1434    
1435            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
1436            namespace
1437            (TestSingleLayer.file_contents)
1438            (TestNonAsciiColumnName.file_contents)
1439            (TestLayerVisibility.file_contents)
1440            (TestClassification.file_contents, TestLabels.file_contents)
1441            (TestLayerProjection.file_contents)
1442            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1443            (TestPostGISLayer.file_contents)
1444            (TestPostGISLayerPassword.file_contents)
1445            (TestLoadError.file_contents, TestLoadError.test): Update to
1446            thuban-1.0rc1 namespace
1447    
1448    2003-12-01  Bernhard Herzog  <[email protected]>
1449    
1450            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
1451            nt to better match Intevation's current w32 setup
1452    
1453            * HOWTO-Release: Add note about updating MANIFEST.in
1454    
1455            * MANIFEST.in: Add the Extensions
1456    
1457            * NEWS: Update for 1.0rc1
1458    
1459    2003-12-01  Bernhard Herzog  <[email protected]>
1460    
1461            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
1462            cards for the dialog so that shapefiles ending in all uppercase
1463            SHP are listed too
1464    
1465    2003-11-28  Bernhard Herzog  <[email protected]>
1466    
1467            * Thuban/version.py (longversion): Update to 1.0rc1
1468    
1469            * setup.py (setup call): Update version to 1.0rc1. Use the
1470            [email protected] email address as author email instead of my
1471            personal one.
1472    
1473    2003-11-28  Bernhard Herzog  <[email protected]>
1474    
1475            * po/de.po: Update german translation.
1476    
1477    2003-11-28  Bernhard Herzog  <[email protected]>
1478    
1479            Unify the filenames stored in .thuban files so that the .thuban
1480            files are more platform independend
1481    
1482            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
1483            that they can be used on both windows and unix
1484            (SessionSaver.prepare_filename): New. Handle all filename
1485            transformations for filenames stored in the thuban file
1486            (SessionSaver.write_data_containers, SessionSaver.write_layer):
1487            Use prepare_filename
1488    
1489            * test/test_save.py (SaveSessionTest.testSingleLayer)
1490            (SaveSessionTest.testLayerProjection)
1491            (SaveSessionTest.testRasterLayer)
1492            (SaveSessionTest.testClassifiedLayer)
1493            (SaveSessionTest.test_dbf_table)
1494            (SaveSessionTest.test_joined_table): Filenames are always stored
1495            with slashes on all currently supported platforms so adapt all
1496            tests to this
1497    
1498            * test/test_load.py (LoadSessionTest.filenames): With the new
1499            filename scheme the filenames in the tests should be
1500            understandable on all currently supported platforms so we turn
1501            this into an empty list because we don't have to normalize them
1502            anymore
1503    
1504    2003-11-28  Bernhard Herzog  <[email protected]>
1505    
1506            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
1507            Add the ellipsoid to the projection since some Proj versions
1508            complain if it's missing.
1509    
1510    2003-11-27  Bernhard Herzog  <[email protected]>
1511    
1512            Corect some bounding box projection problems
1513    
1514            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
1515            version of ForwardBBox
1516            (Projection._transform_bbox): New. common implementation of
1517            ForwardBBox and InverseBBox
1518            (Projection.ForwardBBox): Use _transform_bbox.
1519    
1520            * test/test_proj.py (TestProjection.test): Add test for
1521            InverseBBox
1522    
1523            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
1524            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
1525            new InverseBBox method to determine the unprojected bounding box
1526            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
1527            bbox.
1528    
1529            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
1530            Removed.
1531            (TestLayer.test_arc_layer_with_projection): New. This test is
1532            better able to test whether bounding boxes are projected correctly
1533            than test_point_layer_with_projection
1534    
1535            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
1536            InverseBBox to unproject bboxes
1537    
1538    2003-11-25  Bernhard Herzog  <[email protected]>
1539    
1540            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
1541            source code.
1542    
1543    2003-11-25  Bernhard Herzog  <[email protected]>
1544    
1545            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
1546            there for backwards compatibility and all code relying on that
1547            should have been updated by now.
1548    
1549    2003-11-25  Bernhard Herzog  <[email protected]>
1550    
1551            * test/test_load.py (TestClassification.test): Add the missing
1552            round trip test.
1553            (TestClassification.file_contents): Update to the newest file
1554            format
1555    
1556    2003-11-25  Bernhard Herzog  <[email protected]>
1557    
1558            Add very experimental (and possibly dangerous) extension to draw
1559            polygons:
1560    
1561            * Extensions/drawshape/README: New. Brief installation
1562            instructions
1563    
1564            * Extensions/drawshape/drawshape.py: New. Implementation of the
1565            drawshape extensions
1566    
1567            * Extensions/drawshape/patch.diff: Patch to apply before the
1568            extension can be used.
1569    
1570    2003-11-24  Bernhard Herzog  <[email protected]>
1571    
1572            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
1573            (ShapefileStore.__init__): Factor opening the shapefile into a
1574            separate method (the new _open_shapefile). This makes the code a
1575            bit more readable but the real reason is that it makes some evil
1576            hacks easier. :-)
1577    
1578    2003-11-24  Bernhard Herzog  <[email protected]>
1579    
1580            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
1581            converter is specified for an attribute assume it's a string
1582            containing only Latin1 characters. Update doc-string accordingly.
1583            This change should fix many places where unicode objects might
1584            accidentally enter Thuban.
1585    
1586            * test/test_load.py (TestNonAsciiColumnName): New test to check
1587            what happens with column names in DBF files that contain non-ascii
1588            characters
1589    
1590    2003-11-21  Bernhard Herzog  <[email protected]>
1591    
1592            Enable the experimental attribute editing again and introduce a
1593            command line switch to actually activate it
1594    
1595            * Thuban/UI/main.py (options): New. Container for options set on
1596            the commmand line
1597            (main): Add the --enable-attribute-editing flag.
1598    
1599            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
1600            editing is enabled use the grid ctrl which allows editing of the
1601            values
1602    
1603            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
1604            New. Just delegate this to the underlying table.
1605    
1606    2003-11-20  Bernhard Herzog  <[email protected]>
1607    
1608            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
1609            Skip this test if run under non-posix systems since it only works
1610            there
1611    
1612    2003-11-19  Bernhard Herzog  <[email protected]>
1613    
1614            * Thuban/Model/resource.py: Rework the way gdal support is
1615            determined so that we can give a reason in the about why gdal is
1616            not supported.
1617            (gdal_support_status): New. Variable holding a string with the
1618            reason for no gdal support
1619    
1620            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
1621            not supported to the message
1622    
1623    2003-11-19  Bernhard Herzog  <[email protected]>
1624    
1625            Remove the old table interface and its test cases
1626    
1627            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
1628            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
1629            anymore
1630    
1631            * Thuban/Model/transientdb.py (TransientTableBase)
1632            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
1633            anymore
1634    
1635            * test/test_table.py: Removed since the old interface it tests is
1636            gone.
1637    
1638            * test/runtests.py (main): The old table interface is gone and
1639            with it the deprecation warnings so remove the code that turns
1640            these warnings into errors
1641    
1642    2003-11-19  Bernhard Herzog  <[email protected]>
1643    
1644            * test/test_table.py: Revert to revision 1.5 again. Changing the
1645            tests to use the new table interface is completely wrong since the
1646            whole purpose of the tests in this module is to test the old
1647            interface.
1648    
1649    2003-11-18  Bernhard Herzog  <[email protected]>
1650    
1651            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
1652            New. Test whether the connection matches a set of connection
1653            parameters
1654    
1655            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
1656            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
1657            for existing connections with the same parameters and break out of
1658            the loop correctly.
1659    
1660            * test/test_postgis_db.py (TestBriefDescription)
1661            (TestPostGISSimple.test_brief_description): Rename
1662            TestBriefDescription to TestPostGISSimple and the test method to
1663            test_brief_description so that we can add more test methods.
1664            (TestPostGISSimple.test_matches_parameters): New. Test the new
1665            MatchesParameters method
1666    
1667    2003-11-18  Bernhard Herzog  <[email protected]>
1668    
1669            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
1670            _was_destroyed, to indicate whether an publisher instance has
1671            already been destroyed.
1672            (Publisher.Unsubscribe): Only disconnect if the publisher has not
1673            been destroyed yet.
1674            (Publisher.Destroy): Set the _was_destroyed flag to true.
1675    
1676            * test/test_connector.py
1677            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
1678            calling Unsubscribe after Destroy doesn't raise an exception
1679    
1680    2003-11-14  Bernhard Herzog  <[email protected]>
1681    
1682            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
1683            typo in doc-string
1684    
1685    2003-11-13  Bernhard Herzog  <[email protected]>
1686    
1687            Quote table and column names properly for postgis.
1688    
1689            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
1690            quote an identifier for use in an sql statement
1691            (PostGISColumn.__init__): Add the quoted_name attribute
1692            (PostGISTable.__init__): New instance variable quoted_tablename
1693            (PostGISTable._fetch_table_information): Use the quoted table
1694            name. New isntance variable quoted_geo_col with a quoted version
1695            of geometry_column
1696            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
1697            (PostGISTable.RowOrdinalToId): Use the quoted table name
1698            (PostGISTable.ReadValue, PostGISTable.ValueRange)
1699            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
1700            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
1701            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
1702            Use quoted table and column names
1703    
1704            * test/test_postgis_db.py (TestPostGISSpecialCases)
1705            (TestPostGISIgnoredColumns): Rename the class to
1706            TestPostGISSpecialCases because that better describes the new
1707            cases
1708            (TestPostGISSpecialCases.test_unsupported_types)
1709            (TestPostGISSpecialCases.test): Rename the method to
1710            test_unsupported_types because we need a more descriptive name now
1711            that there are more methods
1712            (TestPostGISSpecialCases.test_table_name_quoting)
1713            (TestPostGISSpecialCases.test_column_name_quoting)
1714            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
1715            cases to test quoting of table and column names in PostGISTable
1716            and PostGISShapeStore
1717    
1718            * test/postgissupport.py
1719            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
1720            AddGeometryColumn desn't support table or column names with sapces
1721            or double quotes
1722    
1723    2003-11-12  Jan-Oliver Wagner <[email protected]>
1724    
1725            * Extensions/wms/__init__.py: New: Init to make this
1726            directory a package.
1727    
1728            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
1729    
1730    2003-11-11  Bernhard Herzog  <[email protected]>
1731    
1732            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
1733            Constant for the file woth deprecated epsg projections
1734            (get_system_proj_file): Update doc-string
1735    
1736            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
1737            above the EPS widgets, introduce a check box for the deprecated
1738            eps projections and a label for the epsg widgets
1739            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
1740            too
1741    
1742    2003-11-11  Bernhard Herzog  <[email protected]>
1743    
1744            Avoid warnings when run under Python 2.3
1745    
1746            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
1747            (BaseRenderer.draw_label_layer): Coordinates must be ints.
1748    
1749            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
1750            real method so that we can convert to int.
1751            (MapRenderer.label_font): The font size mist be an int.
1752    
1753            * Thuban/UI/common.py (Color2wxColour): The color values must be
1754            ints. Also, remove the unnecessary asserts.
1755    
1756            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
1757            (TestUnicodeStrings.test): Python source code should not contain
1758            non-ascii characters unless an encoding is specified in the file.
1759            Therefore use \x escapes in the string literals for non-ascii
1760            characters.
1761    
1762    2003-11-11  Bernhard Herzog  <[email protected]>
1763    
1764            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
1765            parameter so that this function can be used for all proj files in
1766            Resource/Projections
1767            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
1768            get_system_proj_file
1769    
1770            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
1771            ProjFile self.__sysProjFile use a dictionary of system ProjFile
1772            objects self._sys_proj_files
1773            (ProjFrame.build_dialog): Adapt to the new changes in the
1774            ProjectionList constructor. Add a check button to toggle whether
1775            EPSG projections are shown
1776            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
1777            events.
1778            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
1779            the busy cursor if the files have not yet been loaded by the
1780            dialog.
1781            (ProjFrame.load_system_proj): Add a parameter for the name of the
1782            proj file. Maintain the dictionary of system projections
1783            self._sys_proj_files
1784    
1785            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
1786            user_projs parameters into one parameter proj_files which is a
1787            list of proj files.
1788            (ProjectionList._subscribe_proj_files)
1789            (ProjectionList._unsubscribe_proj_files): New. Move
1790            subscription/unsubscription of projfile messages to separate
1791            methods
1792            (ProjectionList.Destroy): The unsubscribe is now done in
1793            _unsubscribe_proj_files
1794            (ProjectionList.update_projections): We now have a list of proj
1795            file objects
1796            (ProjectionList.SetProjFiles): New method to set a new list of
1797            proj file objects
1798    
1799            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
1800            Specify explicitly which system proj file to load.
1801    
1802    2003-11-11  Bernhard Herzog  <[email protected]>
1803    
1804            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
1805            instance variables to cut cyclic references. The GC would have
1806            collected the loader eventually but it can happen that it doesn't
1807            run at all until thuban is closed (2.3 but not 2.2 tries a bit
1808            harder and forces a collection when the interpreter terminates)
1809            (load_session): Call the handler's Destroy method to make sure
1810            that it gets garbage collected early. Otherwise it will be
1811            collected very late if at all and it holds some references to e.g.
1812            shapestores and the session which can lead to leaks (of e.g. the
1813            temporary files)
1814    
1815            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
1816            resource leak in load_session
1817    
1818    2003-11-10  Bernhard Herzog  <[email protected]>
1819    
1820            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
1821            extensions are to be rendered.
1822            (_renderer_extensions): New. List with renderer for layers in
1823            extensions
1824            (add_renderer_extension): New. Add a renderer extension
1825            (init_renderer_extensions): New. Init the renderer extensions
1826            (BaseRenderer.render_map_incrementally): Search
1827            _renderer_extensions for how to draw unknown layer types
1828            (BaseRenderer.draw_raster_data): Add format parameter so that
1829            formats other than BMP can be drawn
1830            (BaseRenderer.draw_raster_layer): Pass an explicit format to
1831            draw_raster_data
1832    
1833            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
1834            strings of the format parameter of draw_raster_data method to wx
1835            constants
1836            (MapRenderer.draw_raster_data): Add the format parameter and use
1837            raster_format_map to map it to the right wxwindows constant for
1838            wxImageFromStream
1839    
1840            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
1841            the format parameter and record it
1842            (TestBaseRenderer.test_raster_no_projection): check the format
1843            paramter of the draw_raster_data method
1844            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
1845            extension facility
1846    
1847    2003-11-07  Bernhard Herzog  <[email protected]>
1848    
1849            Tweak the usage of the sqlite database to make common use cases
1850            more responsive. In most cases copying the data to the sqlite
1851            database takes so long that using sqlite doesn't have enough
1852            advantages.
1853    
1854            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
1855            comments about performance and query the min and max in separate
1856            statements because only that way will indexes be used.
1857            (TransientTableBase.UniqueValues): Add some comments about
1858            performance.
1859            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
1860            Do not copy the data to the transient DB but use the transient
1861            copy if it exists. See the new comments for the performance trade
1862            offs
1863    
1864            * test/test_transientdb.py
1865            (TestTransientTable.test_auto_transient_table): Make sure that the
1866            data is copied to the transient database at some point.
1867    
1868    2003-11-03  Bernhard Herzog  <[email protected]>
1869    
1870            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
1871            globals to locals so that it's a bit faster
1872    
1873    2003-11-03  Bernhard Herzog  <[email protected]>
1874    
1875            * Thuban/UI/baserenderer.py
1876            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
1877            method. ReadValue is faster than ReadRowAsDict since it only reads
1878            one cell especially now that the dbf file objects actually
1879            implement it.
1880    
1881            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
1882            read_attribute method of the dbf objects
1883    
1884    2003-11-03  Bernhard Herzog  <[email protected]>
1885    
1886            * Extensions/profiling/profiling.py (popup_dialog_box): New config
1887            variable to indicate whether the result should be shown in a
1888            dialog box
1889            (profile_screen_renderer, time_screen_renderer): Only show a
1890            dialog box if popup_dialog_box is true.
1891            (profile_screen_renderer): Flush stdout after the printing the
1892            first part of the "profiling..." message
1893    
1894            * Thuban/UI/baserenderer.py
1895            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
1896            brushes for the groups so that they're not created over and over
1897            again
1898    
1899            * Thuban/Model/classification.py (Classification.__getattr__)
1900            (Classification._compile_classification)
1901            (Classification._clear_compiled_classification): New. Methods to
1902            manage a 'compiled' representation of the classification groups
1903            which is created on demand
1904            (Classification.InsertGroup, Classification.RemoveGroup)
1905            (Classification.ReplaceGroup): reset the compiled representation
1906            (Classification.FindGroup): Use the compiled representation to
1907            find the matching group
1908            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
1909    
1910    2003-10-31  Bernhard Herzog  <[email protected]>
1911    
1912            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
1913            Send a CLASS_CHANGED message
1914            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
1915            not return the removed group since it wasn't used.
1916    
1917            * test/test_classification.py
1918            (TestClassification.test_set_default_group): New. Test the
1919            SetDefaultGroup method
1920            (TestClassification.test_insert_group): New. Test the InsertGroup
1921            method
1922            (TestClassification.test_remove_group): New. Test the RemoveGroup
1923            method
1924            (TestClassification.test_replace_group): New. Test the
1925            ReplaceGroup method
1926    
1927    2003-10-31  Bernhard Herzog  <[email protected]>
1928    
1929            * test/test_classification.py (TestClassification.setUp):
1930            Subscribe to the CLASS_CHANGED messages
1931            (TestClassification.tearDown): New. Destroy the classification
1932            properly
1933            (TestClassification.test_defaults): Add tests for the default line
1934            width and whether no messages were sent yet
1935            (TestClassification.test_set_default_properties): Add tests for
1936            messages and setting the default line width
1937            (TestClassification.test_add_singleton)
1938            (TestClassification.test_add_range)
1939            (TestClassification.test_multiple_groups): Add tests for messages
1940    
1941    2003-10-31  Bernhard Herzog  <[email protected]>
1942    
1943            Some more refactoring in preparation for new tests:
1944    
1945            * test/test_classification.py (TestClassification.setUp): New.
1946            Instantiate the classification here. Update the test methods
1947            accordingly.
1948            (TestClassification.test_multiple_groups): Make sure that the two
1949            singletons matching 1 are considered different.
1950    
1951    2003-10-31  Bernhard Herzog  <[email protected]>
1952    
1953            * test/test_classification.py (red, green, blue): New. These
1954            constants were used in several cases. Update the relevant methods.
1955            (TestClassification.test_defaults)
1956            (TestClassification.test_set_default_properties)
1957            (TestClassification.test_add_singleton)
1958            (TestClassification.test_add_range)
1959            (TestClassification.test_multiple_groups)
1960            (TestClassification.test_deepcopy): New. These were formerly all
1961            part of the single method test.
1962            (TestClassification.test_deepcopy): Removed.
1963            (TestClassIterator): Removed. The test case is now a method of
1964            TestClassification since it tests part of the public interface of
1965            Classification
1966            (TestClassification.test_iterator): New. Used to be
1967            TestClassIterator effectively
1968    
1969    2003-10-31  Jan-Oliver Wagner <[email protected]>
1970    
1971            GUIfied the functions of the profiling extension.
1972    
1973            * /Extensions/profiling/__init__.py: New: Init to make this
1974            directory a package.
1975    
1976            * Extensions/profiling/profiling.py: Moved menu entries to
1977            the Extensions menu. Applied _() for strings.
1978            (profile_screen_renderer): Catch the detailed printout and present
1979            it in a dialog.
1980            (time_screen_renderer): Raise a dialog to present the result instead
1981            of printing it to stdout.
1982    
1983    2003-10-31  Bernhard Herzog  <[email protected]>
1984    
1985            * test/test_classification.py (TestClassGroupProperties)
1986            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
1987            (TestClassGroupSingleton, TestClassIterator, TestClassification):
1988            Split TestClassification into several classes, one for each class
1989            being tested. TestClassification itself now only tests
1990            Classification. This split makes changes to the tests a bit easier
1991    
1992    2003-10-31  Bernhard Herzog  <[email protected]>
1993    
1994            * Extensions/profiling/profiling.py: New. Extension to measure
1995            Thuban performance
1996    
1997    2003-10-31  Frank Koormann <[email protected]>
1998    
1999            Added two items to legend popup menu: Remove Layer and Show Layer Table
2000    
2001            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
2002            LegendPanel._OnShowTable): New event handlers, call the corresponding
2003            mainwindow methods.
2004            (LegendTree._OnRightClick): Added items to popup menu.
2005    
2006    2003-10-30  Bernhard Herzog  <[email protected]>
2007    
2008            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
2009            EVT_WINDOW_DESTROY
2010            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
2011            nothing but is convenient for the derived classes.
2012    
2013            * Thuban/UI/tableview.py
2014            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
2015            Unsubscribe the messages here not in OnClose because that might
2016            get called multiple times. Fixes RT #2196
2017            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
2018            anymore.
2019    
2020            * README: Update the minimum requirement for wxPython. Since we
2021            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
2022            the version in which that was introduced for all platforms
2023    
2024    2003-10-30  Frank Koormann <[email protected]>
2025    
2026            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
2027            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
2028            frame.
2029    
2030    2003-10-30  Jan-Oliver Wagner <[email protected]>
2031    
2032            Improved APR import extension, added further EPSG definitions
2033            and some cleanup regarding string class.
2034    
2035            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
2036            Added test for alias 'longlat'.
2037    
2038            * Resources/Projections/epsg-deprecated.proj: New. Contains
2039            deprecated EPSG definitions.
2040    
2041            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
2042            the variable names for objects.
2043    
2044            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
2045            Copied from importAPR and provided with documentation.
2046    
2047            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
2048            Moved to apr.py.
2049            (APR_View): Added object ref 'ITheme'.
2050    
2051            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
2052            split function by corresponding use of the string class method.
2053    
2054            * Thuban/Model/xmlwriter.py: Replaced string replace function by
2055            corresponding string method.
2056    
2057    2003-10-29  Bernhard Herzog  <[email protected]>
2058    
2059            * Thuban/UI/baserenderer.py
2060            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
2061            special case of a classification that only has the default group
2062    
2063    2003-10-27  Bernhard Herzog  <[email protected]>
2064    
2065            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2066    
2067            * po/de.po: Update.
2068    
2069            * Thuban/UI/application.py
2070            (ThubanApplication.ShowExceptionDialog): Handle translation of the
2071            dialog message properly
2072    
2073    2003-10-27  Bernhard Herzog  <[email protected]>
2074    
2075            Rework how localization works so that we use wx's translation
2076            functions when running Thuban as a normal application but not when
2077            we don't need any UI, such as in the test suite. See the comment
2078            in Thuban/__init__.py for details
2079    
2080            * Thuban/__init__.py (_): Add one level of indirection to make the
2081            translation handling more flexible and to make it possible to use
2082            either wx's translation services or not.
2083            (gettext_identity, translation_function_installed)
2084            (install_translation_function): New function to help with this
2085    
2086            * Thuban/UI/__init__.py: Install the wx specific translation
2087            function if it's OK to do that
2088    
2089            * test/support.py (initthuban): Install a dummy translation
2090            function so that importing Thuban.UI doesn't install a wx specific
2091            one for which would need to import wxPython
2092    
2093    2003-10-27  Bernhard Herzog  <[email protected]>
2094    
2095            * HOWTO-Release: Source archives should be created first and the
2096            binary packages should be created from the source archives.
2097            There's an official debian package now so there's no need to test
2098            the rpm on debian anymore
2099    
2100    2003-10-27  Bernhard Herzog  <[email protected]>
2101    
2102            Several rendering changes:
2103    
2104             - Render the selection into a separate bitmap so that only that
2105               bitmap needs to be redrawn when the selection changes
2106    
2107             - Render incrementally showing previews and allowing interaction
2108               before rendering is complete
2109    
2110             - Update the renderer interface a bit. Most parameters of
2111               RenderMap are now parameters of the constructor
2112    
2113            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
2114            and the update region as parameters. Update the doc-string
2115            (BaseRenderer.render_map_incrementally): New. Generator function
2116            to renders the map incrementally
2117            (BaseRenderer.render_map): Remove the map argument (it's now in
2118            the constructor) and simply iterate over the
2119            render_map_incrementally generator to draw the map.
2120            (BaseRenderer.draw_shape_layer_incrementally)
2121            (BaseRenderer.draw_shape_layer): Renamed to
2122            draw_shape_layer_incrementally and changed into a generator that
2123            yields True every 500 shapes. Used by render_map_incrementally to
2124            render shape layers incrementally
2125    
2126            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
2127            map and region parameters which are now in the constructor
2128            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
2129            the inherited render_map_incrementally.
2130            (BaseRenderer.draw_shape_layer): Removed.
2131            (ScreenRenderer.draw_selection_incrementally): New. The selection
2132            drawing part of the removed draw_shape_layer as a generator
2133            (ScreenRenderer.layer_shapes): Update because of the region
2134            parameter change
2135            (ExportRenderer.__init__): New. Extend the inherited constructor
2136            with the destination region for the drawing
2137            (ExportRenderer.RenderMap): Removed the map and region parameters
2138            which are now in the constructor
2139    
2140            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
2141            bitmap suitable for a preview in a tool
2142            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
2143            bitmap
2144            (MapPrintout.draw_on_dc): Adapt to new renderer interface
2145            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
2146            exists
2147            (MapCanvas.OnIdle): Update the logic to deal with incremental
2148            rendering and the selection bitmap
2149            (MapCanvas._do_redraw): Handle the instantiation of the render
2150            iterator and the redraws during rendering
2151            (MapCanvas._render_iterator): New. Generator to incrementally
2152            redraw both bitmaps
2153            (MapCanvas.Export): Adapt to new renderer interface.
2154            (MapCanvas.full_redraw): Reset the selection bitmap and the
2155            renderer iterator too
2156            (MapCanvas.redraw_selection): New. Force a redraw of the selection
2157            bitmap
2158            (MapCanvas.shape_selected): Only redraw the selection bitmap
2159    
2160            * test/test_baserenderer.py
2161            (TestBaseRenderer.test_polygon_no_projection)
2162            (TestBaseRenderer.test_raster_no_projection)
2163            (TestBaseRenderer.test_point_map_projection)
2164            (TestBaseRenderer.test_point_layer_and_map_projection)
2165            (TestBaseRenderer.test_point_layer_projection)
2166            (TestBaseRenderer.test_point_with_classification): Adapt to new
2167            renderer interface
2168    
2169    2003-10-24  Bernhard Herzog  <[email protected]>
2170    
2171            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
2172            (point_in_polygon_shape, shape_centroid): Raise an exception if
2173            the shape can't be read. Previously invalid shape ids would lead
2174            to a segfault.
2175    
2176            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
2177            New. test whether an exception is raised for invalid shape ids
2178    
2179    2003-10-24  Jan-Oliver Wagner <[email protected]>
2180    
2181            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
2182            as alias for 'latlong'.
2183    
2184            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
2185            as alias for 'latlong'.
2186    
2187    2003-10-24  Jan-Oliver Wagner <[email protected]>
2188    
2189            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
2190            the projection even for the UnknownPanel.
2191            (UnknownProjPanel.__init__): Define the text and create the textctrl
2192            widget.
2193            (UnknownProjPanel._DoLayout): Replaced static text widget by the
2194            textctrl created in __init__.
2195            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
2196            including the parameters of the projection.
2197            
2198    2003-10-24  Jan-Oliver Wagner <[email protected]>
2199    
2200            * Resources/Projections/epsg.proj: New. This is a list of
2201            EPSG codes with parameters for proj. The list has been
2202            generated using devtools/create_epsg.py based on the
2203            file nad/epsg of the proj 4.4.7 package. Four projection
2204            definitions have been deleted as they are not accepted by proj:
2205            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
2206            and "HD72 / EOV".
2207    
2208    2003-10-22  Bernhard Herzog  <[email protected]>
2209    
2210            Some more tweaks to the projection dialog which should fix RT
2211            #1886.
2212    
2213            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
2214            the ProjFile's messages and call the base class methods correctly
2215            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
2216            flag on the newly selected item too. Otherwise some other item is
2217            focused and the first time the focus is moved with the keyboard
2218            the selection moves in unexpected ways.
2219    
2220            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
2221            focus on the OK button, only on the projection list. That way the
2222            list really has the focus initially
2223            (ProjFrame.OnClose): Call the projection list's Destroy method to
2224            make it unsubscribe all messages
2225    
2226    2003-10-21  Bernhard Herzog  <[email protected]>
2227    
2228            Rework the projection dialog to fix a few bugs, including RT 2166
2229            and most of 2168
2230    
2231            * Thuban/UI/projlist.py: New. The class ProjectionList is a
2232            special wxListCtrl to show a list of projections in a more MVC
2233            fashion
2234    
2235            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
2236            throughout the class. The main change is to use the ProjectionList
2237            class instead of a normal wxListBox. Also, add an explicit
2238            "Unknown" projection to the projection choice control.
2239            (ProjPanel.__init__): Add an "unknown" ellipsoid
2240            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
2241            instantiation of the panel's controls to make the tab-order more
2242            natural
2243    
2244    2003-10-21  Bernhard Herzog  <[email protected]>
2245    
2246            * test/test_load.py (TestSingleLayer.file_contents)
2247            (TestSingleLayer.test): Add non-ascii characters to the titles of
2248            session, map and layer. This is effectively a port of the
2249            TestUnicodeStrings test in test_load_0_8.py which for some reason
2250            was only added there.
2251    
2252            * test/test_load_0_9.py (TestSingleLayer.file_contents)
2253            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
2254            characters to the titles of session, map and layer,.
2255    
2256    2003-10-21  Bernhard Herzog  <[email protected]>
2257    
2258            Add EPSG projection handling to .thuban files
2259    
2260            * test/test_save.py (SaveSessionTest.dtd)
2261            (SaveSessionTest.testEmptySession)
2262            (SaveSessionTest.testLayerProjection)
2263            (SaveSessionTest.testRasterLayer)
2264            (SaveSessionTest.testClassifiedLayer)
2265            (SaveSessionTest.test_dbf_table)
2266            (SaveSessionTest.test_joined_table)
2267            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
2268            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
2269            use a and epsg projection to test saving them
2270    
2271            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
2272            namespace
2273            (TestLayerVisibility.file_contents, TestLabels.file_contents)
2274            (TestLayerProjection.file_contents)
2275            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2276            (TestPostGISLayer.file_contents)
2277            (TestPostGISLayerPassword.file_contents)
2278            (TestLoadError.file_contents, TestLoadError.test): Update to use
2279            1.0-dev namespace
2280            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
2281            use 1.0-dev namespace and use an EPSG projection to test whether
2282            loading it works
2283    
2284            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
2285            as of Thuban 0.9. These are now tests to determine whether Thuban
2286            can still read files generated by Thuban 0.9
2287    
2288            * Thuban/Model/save.py (SessionSaver.write)
2289            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
2290            namespace
2291            (SessionSaver.write_projection): Write the projection's epsg
2292            attribute
2293    
2294            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
2295            thuban-1.0-dev.dtd namespace
2296            (SessionLoader.check_attrs): Allow a callable object as conversion
2297            too
2298            (SessionLoader.start_projection, SessionLoader.end_projection)
2299            (SessionLoader.start_parameter): Handle the epsg attribute and
2300            rename a few instance variables to lower case
2301    
2302            * Resources/XML/thuban-1.0.dtd: New. Only difference to
2303            thuban-0.9.dtd is the epsg attribute for projections.
2304    
2305    2003-10-21  Bernhard Herzog  <[email protected]>
2306    
2307            * test/runtests.py (main): Let the user specify which tests to run
2308            on the command line
2309    
2310            * test/support.py (ThubanTestResult.getDescription): Override to
2311            give a better short description. The description can be used as a
2312            parameter to run_tests to run that particular test in isolation.
2313    
2314    2003-10-21  Frank Koormann   <[email protected]>
2315    
2316            Popup menu for legend. Scheduled for the 1.2 release this was too
2317            simple to implement: The popup menu is bound to the legend tree, while
2318            the events are hanlded by its anchestor, the legend panel. This
2319            allows reuse of all the event handlers already implemented for the
2320            legend toolbar buttons.
2321    
2322            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
2323            to add handlers for the events issued by the popup menu.
2324            (LegendPanel._OnToggleVisibility): Handler for toggling layer
2325            visibility event
2326            (LegendPanel._OnProjection): Handler for layer projection event.
2327            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
2328            (LegendTree._OnRightClick): Event handler for right click, select item
2329            and pop up menu.
2330            (LegendTree.ToggleVisibility): Toggle layer visibility
2331            (LegendTree.LayerProjection): Raise layer projection dialog for
2332            current layer.
2333    
2334    2003-10-21  Bernhard Herzog  <[email protected]>
2335    
2336            * Resources/Projections/defaults.proj: Use correct DOCTYPE
2337            declaration. The top-level element is projectionlist not projfile
2338    
2339    2003-10-20  Bernhard Herzog  <[email protected]>
2340    
2341            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
2342            method to write a projfile and display a busy cursor and error
2343            dialogs.
2344            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
2345            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
2346            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
2347            busy cursor while loading the user and system prj files.
2348    
2349    2003-10-16  Bernhard Herzog  <[email protected]>
2350    
2351            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
2352            ProjFile objects
2353            (clear_proj_file_cache): New function to clear the cache. Mainly
2354            useful for use by the test suite
2355            (read_proj_file): Use the cache.
2356    
2357            * test/test_proj.py (TestProjFile): Clarify the doc-string
2358            (ProjFileReadTests): Update doc-string
2359            (ProjFileReadTests.test_get_system_proj_file): Check whether the
2360            system proj files is cached.
2361            (ProjFileLoadTestCase): New base class for the proj file tests
2362            derived from support.FileLoadTestCase to provide some common
2363            behavior.
2364            (TestLoadingProjFile)
2365            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
2366            (TestProjFileWithInvalidParameters.file_contents): Derive from
2367            ProjFileLoadTestCase
2368            (TestLoadingProjFile.test_caching): New. Test whether the cache
2369            works
2370    
2371    2003-10-16      Silke Reimer    <[email protected]>
2372    
2373            * debian/*: New directory with configuration files for building a thuban
2374              deb-package.
2375    
2376    2003-10-14  Bernhard Herzog  <[email protected]>
2377    
2378            * test/test_proj.py: Execute support.run_tests when run as
2379            __main__ so that missing unsubscribes are detected
2380            (TestProjFile.tearDown): Destroy the proj_file properly
2381    
2382    2003-10-14  Bernhard Herzog  <[email protected]>
2383    
2384            * Thuban/Model/messages.py (PROJECTION_ADDED)
2385            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
2386            the ProjFile objects
2387    
2388            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
2389            easily send messages when the projections change
2390            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
2391            when the change was successful
2392    
2393            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
2394            proj file messages
2395            (TestProjFile.test_add_remove)
2396            (TestProjFile.test_remove_non_existing)
2397            (TestProjFile.test_replace)
2398            (TestProjFile.test_replace_non_existing): Test whether the right
2399            messages are sent
2400    
2401    2003-10-14  Bernhard Herzog  <[email protected]>
2402    
2403            * test/test_proj.py (TestProjFile.test): Refactor into several
2404            tests
2405            (TestProjFile.test_add_remove)
2406            (TestProjFile.test_remove_non_existing)
2407            (TestProjFile.test_replace)
2408            (TestProjFile.test_replace_non_existing): Some of the new
2409            individual test cases
2410            (TestProjFileSimple): New class for the rest of the test cases
2411            that came out of the refactoring
2412            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
2413            derived classes don't have to
2414    
2415    2003-10-13  Bernhard Herzog  <[email protected]>
2416    
2417            Add an optional EPSG code to the projection objects and extend the
2418            .proj file format accordingly.
2419    
2420            * Resources/XML/projfile.dtd (element projection): Add epsg
2421            attribute
2422    
2423            * Thuban/Model/proj.py (Projection.__init__): New parameter and
2424            instance variable epsg. Update doc-string
2425            (Projection.EPSGCode, Projection.Label): New methods to provide
2426            access to EPSG code and a label for use in dialogs
2427    
2428            * Thuban/Model/resource.py (ProjFileReader.start_projection)
2429            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
2430            Handle the epsg code attribute when reading or writing proj files
2431    
2432            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
2433            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
2434            (ProjFrame.__FillAvailList): Use the projection's Label method to
2435            get the string for the list box
2436    
2437            * test/test_proj.py (TestProjection.test_label)
2438            (TestProjection.test_label_epsg)
2439            (TestProjection.test_epsgcode_for_non_epsg_projection)
2440            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
2441            for the label and EPSGCode methods
2442            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
2443            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
2444            objects in the test cases and put the expected contents into the
2445            test case methods too. Update doTestWrite accordingly
2446            (TestLoadingProjFile)
2447            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
2448            read tests from TestProjFile.
2449            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
2450            tests are now in the new classes.
2451            (sample_projfile, sample_projfile_data)
2452            (sample_projfile2, sample_projfile_data2): Removed. Not used
2453            anymore.
2454            (TestProjFile.test_read_unreadable_file): No need to reset the
2455            permissions at the end anymore since we use a unique filename
2456    
2457    2003-10-13  Bernhard Herzog  <[email protected]>
2458    
2459            * test/test_proj.py: Some more refactoring of the test cases
2460            (ProjFileTest): New base class for the proj file tests.
2461            (TestProjFile): Derive from ProjFileTest
2462            (TestProjFile.test_read_unreadable_file)
2463            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
2464            the new filename method to get a unique filename
2465            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
2466            (WriteProjFileTests): New class for proj file write tests.
2467            Contains the write test that were in TestProjFile originally.
2468    
2469    2003-10-13  Bernhard Herzog  <[email protected]>
2470    
2471            * test/test_proj.py (TestProjFile.testRead)
2472            (TestProjFile.test_read_non_existing_file)
2473            (TestProjFile.test_read_unreadable_file)
2474            (TestProjFile.test_read_empty_file): Split into several methods.
2475    
2476    2003-10-10  Bernhard Herzog  <[email protected]>
2477    
2478            * Thuban/UI/sizers.py: New file with custom sizers.
2479    
2480            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
2481            all projection type specific panels and put them into a
2482            NotebookLikeSizer. This way the dialog doesn't change its size
2483            when a different projection is selected
2484            (ProjFrame.__init__): Rename projection_panels
2485            projection_panel_defs and reuse projection_panels for a list of
2486            the instantiated panels.
2487            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
2488            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
2489            the panels
2490            (UnknownProjPanel._DoLayout): Place the newlines in the message
2491            differently to make the panel narrower.
2492            (TMPanel._DoLayout): Layout the parameters in one column.
2493    
2494    2003-10-10  Bernhard Herzog  <[email protected]>
2495    
2496            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
2497            that contains all the setup for the dialog's widgets, layout and
2498            event handling.
2499            (__): Call build_dialog to build the dialog.
2500            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
2501            Their functionality is now in build_dialog
2502            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
2503            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
2504            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
2505            different widget names and hierarchy introduced with build_dialog.
2506    
2507    2003-10-10  Bernhard Herzog  <[email protected]>
2508    
2509            * README: Fix typo.
2510    
2511    2003-10-09  Bernhard Herzog  <[email protected]>
2512    
2513            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
2514            projection is already in the list. This is *a lot* faster when
2515            loading files with hundreds of projections since it saves a linear
2516            search. OTOH this will allow adding the same projection to the
2517            user.proj file multiple times in the projection dialog but we'll
2518            deal with that later
2519    
2520    2003-10-09  Jan-Oliver Wagner <[email protected]>
2521    
2522            * devtools: New. Directory for developer tools that are not intended
2523            for the regular user.
2524    
2525            * devtools/create_epsg.py: New. Convert the epsg file of proj into
2526            a python .proj file.
2527    
2528    2003-10-09  Bernhard Herzog  <[email protected]>
2529    
2530            * test/test_proj.py
2531            (TestProjection.test_get_parameter_without_equals_sign): New. Test
2532            whether GetParameter handles parameters without "=" sign correctly
2533    
2534            * Thuban/Model/proj.py (Projection.GetParameter): Handle
2535            parameters that do not contain a "=". Update the doc-string
2536    
2537    2003-10-08  Bernhard Herzog  <[email protected]>
2538    
2539            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
2540            length limit on the projname text control
2541    
2542    2003-10-08  Bernhard Herzog  <[email protected]>
2543    
2544            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
2545            (TestProjection.test_get_projection_units_normal): New. Tests for
2546            the Projection.GetProjectedUnits method
2547    
2548    2003-10-08  Jan-Oliver Wagner <[email protected]>
2549    
2550            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
2551            Added missing 'val' parameter.
2552    
2553    2003-10-08  Bernhard Herzog  <[email protected]>
2554    
2555            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
2556            projection type of the currently selected projection is not known,
2557            i.e. there's no panel for it, use the UnknownProjPanel
2558            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
2559            the actual replacing of the proj panel into the new method
2560            _show_proj_panel.
2561            (UnknownProjPanel): Add doc-string.
2562            (UnknownProjPanel._DoLayout): Insert a newline into the text so
2563            that the panel is not so wide.
2564    
2565    2003-10-08  Bernhard Herzog  <[email protected]>
2566    
2567            * Thuban/Model/resource.py (read_proj_file): Return the warnings
2568            too. Update the doc-string
2569            (get_proj_files): Removed. It wasn't used anywhere
2570            (get_system_proj_files, get_system_proj_file): Rename to
2571            get_system_proj_file and return the ProjFile object and not a list
2572            of ProjFile objects. Update the callers.
2573            (get_user_proj_files, get_user_proj_file): Rename to
2574            get_user_proj_file return the ProjFile object and not a list of
2575            ProjFile objects. Update the callers.
2576            (ProjFileReader.__init__): New instance variable for the warnings.
2577            Rename the __pf ivar to projfile. Update the methods referring to
2578            __pf
2579            (ProjFileReader.end_projection): Catch any errors raised when
2580            instantiating the projection and record that as an error. The
2581            projection will not be in the final ProjFile object.
2582            (ProjFileReader.GetWarnings): New method to return the warnings.
2583    
2584            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
2585            show the warnings from the projfile reader
2586            (ProjFrame._OnImport): Deal with any warnings returned by
2587            read_proj_file
2588            (ProjFrame.__FillAvailList): Deal with any warnings returned by
2589            get_system_proj_file or get_user_proj_file.
2590    
2591            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
2592            (TestProjFileWithInvalidParameters.file_contents): New test cases
2593            to test whether read_proj_file handles invalid projection
2594            parameters correctly
2595            (TestProjFile.test_get_system_proj_file): New. Simple test for
2596            resource.get_system_proj_file
2597    
2598    2003-10-07  Bernhard Herzog  <[email protected]>
2599    
2600            * test/test_derivedshapestore.py
2601            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
2602            properly so that the temporary directories get deleted correctly
2603    
2604    2003-10-06  Bernhard Herzog  <[email protected]>
2605    
2606            Handle the title changes in a proper MVC way.
2607    
2608            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
2609            canvas' TITLE_CHANGED messages
2610            (MainWindow.update_title): New. Update the main window's title
2611            (MainWindow.__SetTitle): Removed. Use update_title instead.
2612            (MainWindow.SetMap): Use update_title instead of __SetTitle
2613            (MainWindow.RenameMap): Do change the window title explicitly
2614            here. That's handled in a proper MVC way now.
2615            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
2616            messages
2617    
2618            * Thuban/Lib/connector.py (Conduit): New class to help classes
2619            that forward messages
2620    
2621            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
2622            (ViewPort): Derive from Conduit instead of Publisher
2623            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
2624            when calling the inherited versions
2625            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
2626            methods to subscribe and unsubscribe map messages
2627            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
2628            handle the map subscriptions
2629            (ViewPort.Map, ViewPort.map_projection_changed)
2630            (ViewPort.layer_projection_changed): Add or update doc-strings
2631    
2632            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
2633            typo
2634            (MyConduit): Helper class for the Conduit test.
2635            (TestConduit): Test cases for Conduit
2636    
2637            * test/test_connector.py: Use support.run_tests as main.
2638    
2639            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
2640            the TITLE_CHANGED messages
2641            (ViewPortTest.test_forwarding_title_changed): New test to check
2642            whether the viewport forwards the map's TITLE_CHANGED messages
2643            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
2644            after the port's because the latter may require a still functional
2645            map.
2646    
2647    2003-10-06  Bernhard Herzog  <[email protected]>
2648    
2649            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
2650            doc-string
2651    
2652    2003-10-06  Bernhard Herzog  <[email protected]>
2653    
2654            * test/test_viewport.py (ViewPortTest.setUp)
2655            (SimpleViewPortTest.test_init_with_size): Move the test for the
2656            initial size as a constructor parameter from ViewPortTest.setUp
2657            method to a new separate test in SimpleViewPortTest.
2658    
2659    2003-10-06  Bernhard Herzog  <[email protected]>
2660    
2661            * test/test_viewport.py (MockView): New class derived from
2662            ViewPort with a mock implementation of GetTextExtent to be used in
2663            the test cases
2664            (ViewPortTest.setUp): Use MockView instead of ViewPort
2665    
2666            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
2667            into what would be a "pure virtual function" in C++: always raise
2668            NotImplementedError. Mock implementations for test cases don't
2669            belong into the real code
2670    
2671    2003-10-02  Bernhard Herzog  <[email protected]>
2672    
2673            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
2674            close the dbf file we create so that it's contents have been
2675            written properly.
2676    
2677            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
2678            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
2679            Update to shapelib 1.2.10
2680    
2681    2003-10-01  Jan-Oliver Wagner <[email protected]>
2682    
2683            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
2684            it annoys lintian which warns about these files not being
2685            executable. The #! isn't necessary here since if you absolutely
2686            must execute them you can always say "python <filename>".
2687    
2688    2003-09-26  Bernhard Herzog  <[email protected]>
2689    
2690            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
2691            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
2692            is ported to a newer the import will fail, so it should be noticed
2693            immediately that this function is gone.
2694            Fixes RT#1919
2695    
2696    2003-09-26  Bernhard Herzog  <[email protected]>
2697    
2698            Add a DTD for the projection files and make thuban write valid
2699            projection files
2700    
2701            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
2702            files
2703    
2704            * Thuban/Model/resource.py (ProjFileSaver.write): Use
2705            'projectionlist' as the name in the document type declaration so
2706            that it matches the element type of the root element.
2707    
2708            * test/test_proj.py (sample_projfile, sample_projfile2): Use
2709            'projectionlist' as the name in the document type declaration just
2710            as it is done now in the files thuban would write
2711            (sample_projfile, sample_projfile_data): Fix spelling of
2712            "Mercator"
2713            (TestProjFile.doTestWrite): Validate the written and the expected
2714            XML data
2715            (TestProjFile): Derive from ValidationTest so that we can run xml
2716            validation tests
2717    
2718    2003-09-24  Bernhard Herzog  <[email protected]>
2719    
2720            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
2721            modify the list returned by map.Layers() in place since it is the
2722            actual list of layers used by the map.
2723    
2724    2003-09-23  Jan-Oliver Wagner <[email protected]>
2725    
2726            * Doc/manual/thuban-manual.xml: Added subsection to chapter
2727            Extensions to describe the extensions coming with the Thuban
2728            standard package (gns2shp and importAPR).
2729    
2730    2003-09-23  Bernhard Herzog  <[email protected]>
2731    
2732            * libraries/thuban/wxproj.cpp (project_point): if there's an
2733            inverse but no forward projection, convert to degrees after
2734            applying the inverse projection. Fixes RT#2096
2735    
2736            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
2737            implicitly tests for the fix to RT#2096
2738    
2739            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
2740            Check that the sequences have the same lengths
2741    
2742            * Resources/Projections/defaults.proj (Geographic projection): Use
2743            a much more precise value for the to_meter attribute.
2744    
2745    2003-09-22  Bernhard Herzog  <[email protected]>
2746    
2747            * test/support.py (initthuban): Make sure to unset the LANG env.
2748            var. so that tests that compare translated strings work. Solves RT
2749            #2094
2750    
2751    2003-09-22  Jan-Oliver Wagner <[email protected]>
2752    
2753            Small improvement of APR import.
2754    
2755            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
2756            Added tests for text-ranges.
2757    
2758            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
2759            returns a string object if the range is based on text.
2760    
2761            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
2762            range retrieval.
2763    
2764    2003-09-22  Jan-Oliver Wagner <[email protected]>
2765    
2766            Initial version of the importAPR extension which is in
2767            experimental state.
2768    
2769            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
2770            /Extensions/importAPR/test/: New directories.
2771    
2772            * /Extensions/importAPR/samples/README: New: Howto load the samples.
2773    
2774            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
2775            file which refers to the Thuban Iceland demo data.
2776    
2777            * /Extensions/importAPR/test/README: New: Howto execute the tests.
2778    
2779            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
2780    
2781            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
2782            as in '.apr'-files.
2783    
2784            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
2785            ODB Objects as in '.apr', '.avl' and other files.
2786    
2787            * /Extensions/importAPR/__init__.py: New: Init to make this
2788            directory a package.
2789    
2790            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
2791            project file (.apr) and convert it to Thuban.
2792    
2793    2003-09-22  Jan-Oliver Wagner <[email protected]>
2794    
2795            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
2796    
2797    2003-09-19  Jan-Oliver Wagner <[email protected]>
2798    
2799            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
2800            with description on RPM installation and RPM binary package
2801            creation.
2802    
2803    2003-09-18  Bernhard Herzog  <[email protected]>
2804    
2805            * setup.py (data_files): Only add the mo files if the Locales
2806            directory actually exists, so that setup.py works with a fresh CVS
2807            checkout
2808    
2809    2003-09-12  Jan-Oliver Wagner <[email protected]>
2810    
2811            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
2812            in viewport, not anymore in view
2813    
2814    2003-09-04  Jan-Oliver Wagner <[email protected]>
2815    
2816            Introducing first Extension (gns2shp).
2817    
2818            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
2819    
2820            * Extensions/__init__.py: New. init to make this dir a package.
2821    
2822            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
2823    
2824            * Extensions/gns2shp/test/README: New. some info on this test directory.
2825    
2826            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
2827    
2828            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
2829            of Shapefile from GNS text file format
2830    
2831    2003-09-03  Jan-Oliver Wagner <[email protected]>
2832    
2833            Fix/workaround for bug #2019:
2834            https://intevation.de/rt/webrt?serial_num=2019
2835    
2836            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
2837            (IdentifyView.__init__): Added another button that allows to
2838            stop the identify mode.
2839            (IdentifyView.OnStop): New. Stops the identify mode.
2840    
2841    2003-09-03  Jan-Oliver Wagner <[email protected]>
2842    
2843            Introducing a new exception dialog that allows to exit the
2844            application immediately.
2845            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
2846    
2847            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
2848    
2849            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2850            Made strings available to translations. Exchanged the simple
2851            ScrolledMessageDialog by the new ExceptionDialog.
2852    
2853    2003-09-01  Bernhard Herzog  <[email protected]>
2854    
2855            * NEWS: New. Summary of changes and release notes.
2856    
2857            * MANIFEST.in: Add NEWS
2858    
2859    2003-09-01  Bernhard Herzog  <[email protected]>
2860    
2861            * MANIFEST.in: Correct the include statement for the mo-files and
2862            include the documentation too.
2863    
2864            * setup.py (data_files): Add the .mo files
2865            (setup call): Up to version 0.9.0
2866    
2867    2003-09-01  Bernhard Herzog  <[email protected]>
2868    
2869            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
2870            parameter list to just parent and session
2871            (ChooseDBTableDialog.__set_properties): Removed. Setting the
2872            selection of empty list boxes is not allowed (and produces C++
2873            assertion errors) and the rest of the setup is better done in
2874            __init__ anyway.
2875            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
2876            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
2877            builtins True/False for booleans to avoid warnings from wxPython
2878    
2879            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
2880            ChooseDBTableDialog constructor parameters.
2881    
2882    2003-09-01  Bernhard Herzog  <[email protected]>
2883    
2884            * Thuban/Model/postgisdb.py
2885            (PostGISTable): Extend doc-string
2886            (PostGISTable._fetch_table_information): Set the column index
2887            correctly, pretending ignored columns don't exist.
2888    
2889            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
2890            for postgis tables with data types not yet supported by thuban.
2891    
2892    2003-08-29  Bernhard Herzog  <[email protected]>
2893    
2894            * HOWTO-Release: Tweak item about running the tests.
2895    
2896    2003-08-29  Jan-Oliver Wagner <[email protected]>
2897    
2898            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
2899    
2900    2003-08-29  Bernhard Herzog  <[email protected]>
2901    
2902            Add some missing parameters to projections. Proj complains about
2903            them on windows but for some reason not on Linux.
2904    
2905            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
2906            missing required projection parameters
2907    
2908            * test/test_proj.py (TestProjFile.test): Add missing required
2909            projection parameters
2910    
2911            * test/test_load_0_8.py (TestLayerProjection.file_contents)
2912            (TestLayerProjection.test): Add missing required projection
2913            parameters and tests for them
2914    
2915            * test/test_load.py (TestLayerProjection.file_contents)
2916            (TestLayerProjection.test): Add missing required projection
2917            parameters and tests for them
2918    
2919            * test/test_layer.py (TestLayer.test_base_layer): Add missing
2920            required projection parameters
2921    
2922    2003-08-29  Bernhard Herzog  <[email protected]>
2923    
2924            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
2925            access the pj_errno because directly accessing pj_errno doesn't
2926            work on windows if the proj library is in a DLL
2927    
2928            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
2929    
2930    2003-08-28  Bernhard Herzog  <[email protected]>
2931    
2932            * test/test_proj.py: Import things from Thuban after calling
2933            initthuban
2934    
2935            * test/test_load.py (LoadSessionTest.filenames): New class
2936            variable with the filename attributes to normalize
2937            (LoadSessionTest.check_format): Pass self.filenames to
2938            sax_eventlist to normalize the filename attributes
2939    
2940            * test/xmlsupport.py: Add cvs keywords
2941            (SaxEventLister.__init__): New parameter filenames which indicates
2942            attributes that contain filenames
2943            (SaxEventLister.startElementNS): Normalize the filename attributes
2944            with os.path.normpath
2945            (sax_eventlist): New parameter filenames to pass through to
2946            SaxEventLister
2947    
2948            * test/test_derivedshapestore.py: Make this file callable as a
2949            program to execute the tests
2950            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
2951            the session to self.session so that it gets destroyed properly
2952    
2953            * test/test_layer.py (TestLayer.tearDown): Call the session's
2954            Destroy method
2955    
2956            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
2957            too if it exists
2958            (TestMapAddLayer.test_add_layer): Bind the session to self.session
2959            so that it gets destroyed properly
2960    
2961            * test/postgissupport.py (reason_for_not_running_tests): Add a
2962            test for the existence of popen2.Popen4.
2963    
2964            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
2965            reliable way to destroy the sessions created in the test cases
2966            (SaveSessionTest.test_dbf_table): Bind the session to self.session
2967            so that it gets destroyed properly
2968            (SaveSessionTest.testLayerProjection): Bind the session to
2969            self.session so that it gets destroyed properly
2970    
2971            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
2972            sure that the session is destroyed properly
2973    
2974            * test/test_shapefilestore.py: Make this callable as a program to
2975            execute the tests
2976    
2977            * test/test_scalebar.py: Remove unnecessary import of _ from
2978            Thuban
2979    
2980            * test/support.py (print_garbage_information): Call initthuban
2981            here because it may be called indirectly from test cases that test
2982            test support modules which do not use anything from thuban itself
2983            (ThubanTestProgram.runTests): Remove unnecessary debug print
2984    
2985    2003-08-28  Bernhard Herzog  <[email protected]>
2986    
2987            * Thuban/version.py (longversion): Update to 0.9
2988    
2989            * Thuban/UI/mainwindow.py: Remove some unused imports
2990    
2991            * README: Add section about required additional software. Add date
2992            and revision CVS keywords
2993    
2994            * HOWTO-Release: Add item about the translations. Add date and
2995            revision CVs keywords and change formatting to match README a bit
2996            better
2997    
2998            * po/de.po: Update for 0.9
2999    
3000            * test/README: Tweak the wording a little because many tests are
3001            not really unittest.
3002    
3003    2003-08-27  Bernhard Herzog  <[email protected]>
3004    
3005            As preparation for the 0.9 release, switch thuban files to a
3006            non-dev namespace
3007    
3008            * Thuban/Model/save.py (SessionSaver.write_session): Write files
3009            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
3010            namespace
3011    
3012            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3013            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
3014    
3015            * test/test_save.py (SaveSessionTest.dtd)
3016            (SaveSessionTest.testEmptySession)
3017            (SaveSessionTest.testSingleLayer)
3018            (SaveSessionTest.testLayerProjection)
3019            (SaveSessionTest.testRasterLayer)
3020            (SaveSessionTest.testClassifiedLayer)
3021            (SaveSessionTest.test_dbf_table)
3022            (SaveSessionTest.test_joined_table)
3023            (SaveSessionTest.test_save_postgis): Update for new namespace
3024    
3025            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
3026            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3027            (TestLayerProjection.file_contents)
3028            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3029            (TestPostGISLayer.file_contents)
3030            (TestPostGISLayerPassword.file_contents)
3031            (TestLoadError.file_contents, TestLoadError.test): Update for new
3032            namespace
3033    
3034    2003-08-27  Bernhard Herzog  <[email protected]>
3035    
3036            Make the table interface distinguish between row ids (an integer
3037            that uniquely identifies a row) and row ordinals (a simple row
3038            count from 0 to NumRows() - 1)
3039    
3040            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
3041            (PostGISTable.RowOrdinalToId): New methods to conver between row
3042            ids and row ordinals
3043            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
3044            parameter row_is_ordinal to indicate whether the row parameter is
3045            the row id or the ordinal
3046    
3047            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
3048            (TransientTableBase.RowOrdinalToId)
3049            (AutoTransientTable.RowIdToOrdinal)
3050            (AutoTransientTable.RowOrdinalToId): Same new methods as in
3051            PostGISTable.
3052            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
3053            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
3054            Same new parameter as in PostGISTable.
3055    
3056            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
3057            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
3058            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
3059            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
3060            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
3061            parameter as in PostGISTable.
3062    
3063            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
3064            (DataTable.RowOrdinalToId): New methods to convert between row ids
3065            and row ordinals.
3066            (TableGrid.SelectRowById): New method to select a row based on its
3067            ID as opposed to its ordinal
3068            (DataTable.GetValue, TableGrid.OnRangeSelect)
3069            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
3070            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
3071            (LayerTableFrame.__init__): Convert between row ids and row
3072            ordinals as appropriate
3073    
3074            * test/postgissupport.py (PostGISDatabase.__init__): Add
3075            doc-string.
3076            (PostGISDatabase.initdb): The optional third item in a tuple in
3077            tables is now a (key, value) list with additional arguments to
3078            pass to upload_shapefile
3079            (upload_shapefile): New parameter gid_offset to allow gids that
3080            are not the same as the shapeids in the shapefile
3081            (PostgreSQLServer.get_default_static_data_db): Use the new
3082            gid_offset to make the gids in landmarks 1000 higher than the
3083            shapeids in the shapefile
3084    
3085            * test/test_viewport.py
3086            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
3087            new shapeids in the landmarks table
3088    
3089            * test/test_transientdb.py
3090            (TestTransientTable.run_iceland_political_tests)
3091            (TestTransientTable.test_transient_joined_table): Add tests for
3092            the new table methods and new keywords arguments.
3093    
3094            * test/test_postgis_db.py
3095            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
3096            (TestPostGISTable.test_read_value_row_count_mode)
3097            (TestPostGISTable.test_row_id_to_ordinal)
3098            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
3099            table methods and the new arguments
3100            (TestPostGISShapestorePoint.test_shapes_in_region)
3101            (TestPostGISShapestorePoint.test_shape_raw_data)
3102            (TestPostGISShapestorePoint.test_shape_points)
3103            (TestPostGISShapestorePoint.test_shape_shapeid)
3104            (TestPostGISShapestorePoint.test_all_shapes)
3105            (TestPostGISTable.test_simple_query)
3106            (TestPostGISTable.test_simple_query)
3107            (TestPostGISTable.test_simple_query)
3108            (TestPostGISTable.test_read_value)
3109            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
3110            shapeids in the landmarks table
3111    
3112            * test/test_memory_table.py
3113            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
3114            (TestMemoryTable.test_read_value_row_count_mode)
3115            (TestMemoryTable.test_row_id_to_ordinal)
3116            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
3117            table methods and the new arguments
3118    
3119            * test/test_dbf_table.py
3120            (TestDBFTable.test_read_row_as_dict_row_count_mode)
3121            (TestDBFTable.test_read_value_row_count_mode)
3122            (TestDBFTable.test_row_id_to_ordinal)
3123            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
3124            methods and the new arguments
3125    
3126    2003-08-26  Bernhard Herzog  <[email protected]>
3127    
3128            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
3129            more postgis specific but much faster method to get the bounding
3130            box
3131    
3132    2003-08-26  Bernhard Herzog  <[email protected]>
3133    
3134            * Thuban/Model/postgisdb.py (PostGISTable.Title)
3135            (PostGISShapeStore.AllShapes): Add these missing methods.
3136            (PostGISShapeStore.ShapesInRegion): No need to raise
3137            StopIteration. We can simply return
3138    
3139            * test/test_postgis_db.py (TestPostGISTable.test_title)
3140            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
3141            new methods
3142    
3143    2003-08-25  Bernhard Herzog  <[email protected]>
3144    
3145            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
3146    
3147            * test/test_postgis_db.py (PolygonTests): New class containing
3148            those tests from TestPostGISShapestorePolygon that can also be
3149            used to test MUTLIPOLYGON tables
3150            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
3151            so derive from that
3152            (TestPostGISShapestoreMultiPolygon): New class with tests for
3153            MUTLIPOLYGON tables
3154    
3155            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
3156            tables argument to have tuples with three items to override the
3157            WKT type used.
3158            (PostgreSQLServer.get_default_static_data_db): Use the above to
3159            create a polygon table with MUTLIPOLYGONs
3160            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
3161            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
3162            coords_to*
3163            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
3164            (wkt_converter): New. Map WKT types to converters
3165            (upload_shapefile): New parameter force_wkt_type to use a
3166            different WKT type than the default
3167    
3168    2003-08-25  Bernhard Herzog  <[email protected]>
3169    
3170            * Thuban/UI/application.py
3171            (ThubanApplication.run_db_param_dialog): New. Suitable as a
3172            db_connection_callback. Main difference is that the dialog run
3173            from this method doesn't have a parent so it can be used even when
3174            there is no main window
3175            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
3176            no db_connection_callback was given. This way the dialog pops up
3177            even when the .thuban file was given as a command line parameter.
3178    
3179    2003-08-25  Bernhard Herzog  <[email protected]>
3180    
3181            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
3182            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
3183            which leads to an effectively frozen X session because the user
3184            can only interact with the dialog but the mouse is still grabbed
3185            by the canvas.
3186            Also, call the tool's Hide method before MouseLeftUp because
3187            MouseLeftUp may change the tool's coordinates.
3188    
3189    2003-08-25  Bernhard Herzog  <[email protected]>
3190    
3191            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
3192            LoadCancelled exceptions and handle them by returning immediately.
3193    
3194    2003-08-25  Bernhard Herzog  <[email protected]>
3195    
3196            GUI part of loading sessions with postgis connections which may
3197            require user interaction to get passwords or updated parameters
3198    
3199            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
3200            bit nucer and be more generic.
3201            (DBFrame.OnAdd): Adapt to new DBDialog interface
3202    
3203            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
3204            optional parameter db_connection_callback which is passed to
3205            load_session.
3206    
3207            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
3208            Suitable as a db_connection_callback
3209            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
3210            db_connection_callback of the application's OpenSession method
3211    
3212    
3213    2003-08-25  Bernhard Herzog  <[email protected]>
3214    
3215            Basic loading of sessions containing postgis connections:
3216    
3217            * Thuban/Model/load.py (LoadError): Add doc-string
3218            (LoadCancelled): New exception class to indicate a cancelled load
3219            (SessionLoader.__init__): Add the db_connection_callback parameter
3220            which will be used by the loader to get updated parameters and a
3221            password for a database connection
3222            (SessionLoader.__init__): Add the new XML elements to the
3223            dispatchers dictionary
3224            (SessionLoader.check_attrs): Two new conversions, ascii to convert
3225            to a byte-string object and idref as a generic id reference
3226            (SessionLoader.start_dbconnection)
3227            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
3228            elements
3229            (load_session): Add the db_connection_callback to pass through the
3230            SessionLoader
3231    
3232            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
3233            New classes to test loading of sessions with postgis database
3234            connections.
3235    
3236    2003-08-25  Bernhard Herzog  <[email protected]>
3237    
3238            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
3239            replace it and the comment with __BuildDate__ by the Source: and
3240            Id: cvs keywords as used in the other files.
3241    
3242    2003-08-25  Bernhard Herzog  <[email protected]>
3243    
3244            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
3245            LoadError when a required attribute is missing. The code used to
3246            be commented out for some reason, but probably should have been
3247            active.
3248    
3249            * test/test_load.py (TestLoadError.test): Test the message in the
3250            LoadError too to make sure it really is about the missing
3251            attribute
3252    
3253    2003-08-22  Bernhard Herzog  <[email protected]>
3254    
3255            * test/test_save.py (SaveSessionTest.test_dbf_table)
3256            (SaveSessionTest.test_joined_table): Add XML validation tests.
3257    
3258    2003-08-22  Bernhard Herzog  <[email protected]>
3259    
3260            Implement saving a session with a postgis connection
3261    
3262            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
3263            elements for database connections and shapestores using db
3264            connections
3265            (session): Add the dbconnections to the content model
3266    
3267            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
3268            Write the db connections
3269            (SessionSaver.write_session): Call write_db_connections to write
3270            the connection before the data sources
3271            (SessionSaver.write_data_containers): Handle postgis shapestores
3272    
3273            * test/test_save.py (SaveSessionTest.thubanids)
3274            (SaveSessionTest.thubanidrefs): Update for new DTD
3275            (SaveSessionTest.test_save_postgis): New. Test saving a session
3276            with postgis connections
3277    
3278            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
3279            (PostGISTable.TableName): New accessor methods for the connection
3280            and table name
3281    
3282            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
3283            (TestPostGISTable.test_dbname): New methods to test the new
3284            PostGISConnection methods
3285    
3286    2003-08-22  Bernhard Herzog  <[email protected]>
3287    
3288            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
3289            for exceptions occurring when establishing a Database connection
3290            (PostGISConnection.connect): Catch psycopg.OperationalError during
3291            connects and raise ConnectionError.
3292    
3293            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
3294            tests for database exceptions
3295    
3296    2003-08-22  Bernhard Herzog  <[email protected]>
3297    
3298            Prepare the test suite for tests with required authentication
3299    
3300            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
3301            variables with two predefined users/passwords, one for the admin
3302            and one for a non-privileged user.
3303            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
3304            the non-privileged user to the database and set the admin password
3305            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
3306            Better error reporting
3307            (PostgreSQLServer.connection_params)
3308            (PostgreSQLServer.connection_string): New methods to return
3309            information about how to connect to the server
3310            (PostgreSQLServer.execute_sql): New. Convenience method to execute
3311            SQL statements
3312            (PostgreSQLServer.require_authentication): Toggle whether the
3313            server requires authentication
3314            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
3315            Add or alter users
3316            (PostGISDatabase.initdb): Pass the admin name one the
3317            subprocesses' command lines. Grant select rights on
3318            geometry_columns to everybody.
3319            (upload_shapefile): Use the admin name and password when
3320            connecting. Grant select rights on the new table to everybody.
3321    
3322            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
3323            server's new methods to get the connection parameters.
3324    
3325            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
3326            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
3327            server's new methods to get the connection parameters.
3328    
3329            * test/test_postgis_db.py
3330            (TestPostGISConnection.test_gis_tables_empty)
3331            (TestPostGISConnection.test_gis_tables_non_empty)
3332            (PostGISStaticTests.setUp): Use the server's new methods to get
3333            the connection parameters.
3334    
3335    2003-08-22  Bernhard Herzog  <[email protected]>
3336    
3337            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
3338    
3339            * Thuban/version.py: Add psycopg version
3340    
3341            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
3342            version of the psycopg module
3343    
3344    2003-08-22  Bernhard Herzog  <[email protected]>
3345    
3346            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
3347            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
3348            at the moment. The functionality should probably be implemented
3349            some time, though.
3350            (DBFrame.OnRemove): Display a message if the connection can't be
3351            removed because it's still in use.
3352    
3353    2003-08-22  Jan-Oliver Wagner <[email protected]>
3354    
3355            * Thuban/UI/about.py (About.__init__): split up the huge about
3356            text into elements/lists for easier translation. This fixes bug
3357            https://intevation.de/rt/webrt?serial_num=2058
3358            Also, made some forgotten string available for the i18n.
3359    
3360    2003-08-21  Bernhard Herzog  <[email protected]>
3361    
3362            Make postgis support really optional including insensitive menu
3363            items.
3364    
3365            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
3366            whether the postgis is supported.
3367    
3368            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
3369            to make postgis support optional
3370    
3371            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
3372            version of Thuban.Model.postgisdb.has_postgis_support
3373            (database_management command): Make it only sensitive if postgis
3374            is supported.
3375    
3376    2003-08-21  Jan-Oliver Wagner <[email protected]>
3377    
3378            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
3379            (section Adding and Removing Layers): Added text and described
3380            multi-selection.
3381            (chapter Extensions): New.
3382    
3383    2003-08-21  Jan-Oliver Wagner <[email protected]>
3384    
3385            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
3386            settings to allow multiple files to load into the map.
3387            Also reduced selection to *.shp as a default.
3388    
3389    2003-08-20  Bernhard Herzog  <[email protected]>
3390    
3391            Add dialogs and commands to open database connections and add
3392            database layers.
3393    
3394            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
3395            method to open the database connection management dialog
3396            (MainWindow.AddDBLayer): New method to add a layer from a database
3397            (_has_dbconnections): New helper function to use for sensitivity
3398            (database_management command, layer_add_db command): New commands
3399            that call the above new methods.
3400            (main_menu): Add the new commands to the menu.
3401    
3402            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
3403            (PostGISConnection.connect): Establish the actual connection in a
3404            separate method and call it in __init__. This makes it easier to
3405            override the behavior in test cases
3406            (PostGISConnection.BriefDescription): New method to return a brief
3407            description for use in dialogs.
3408    
3409            * test/test_postgis_db.py (NonConnection): DB connection that
3410            doesn't actually connect
3411            (TestBriefDescription): New class with tests for the new
3412            BriefDescription method
3413    
3414    2003-08-19  Jan-Oliver Wagner <[email protected]>
3415    
3416            Moved anything from extensions to libraries.
3417    
3418            * libraries: New.
3419    
3420            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
3421    
3422            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
3423            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
3424            been moved here from thuban/extensions/pyprojection/
3425            See there in the Attic for the older history.
3426    
3427            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
3428            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
3429            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
3430            have been moved here from thuban/extensions/pyshapelib/
3431            See there in the Attic for the older history.
3432    
3433            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
3434            files have been moved here from thuban/extensions/shapelib/
3435            See there in the Attic for the older history.
3436    
3437            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
3438            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
3439            thuban/extensions/thuban/
3440            See there in the Attic for the older history.
3441    
3442            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
3443    
3444            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
3445            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
3446    
3447            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
3448            Moved to libraries/shapelib.
3449    
3450            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
3451            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
3452            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
3453            Moved to libraries/pyshapelib.
3454    
3455            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
3456            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
3457            Moved to libraries/pyprojection.
3458    
3459            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
3460    
3461            * extensions: Removed.
3462    
3463    2003-08-19  Bernhard Herzog  <[email protected]>
3464    
3465            * test/test_viewport.py (ViewPortTest): We don't use the
3466            facilities of FileTestMixin so don't derive from it.
3467            (TestViewportWithPostGIS): New class with tests for using a
3468            viewport on a map with postgis layers.
3469    
3470    2003-08-19  Bernhard Herzog  <[email protected]>
3471    
3472            Add the db connection management to the session.
3473    
3474            * Thuban/Model/session.py (Session.__init__): New instance
3475            variable db_connections
3476            (Session.AddDBConnection, Session.DBConnections)
3477            (Session.HasDBConnections, Session.CanRemoveDBConnection)
3478            (Session.RemoveDBConnection): New methods to manage and query the
3479            db connections managed by the session
3480            (Session.OpenDBShapeStore): New method to open a shapestore from a
3481            db connection
3482    
3483            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
3484            messages for the db connection handling in the session
3485    
3486            * test/test_postgis_session.py: New. test cases for the session's
3487            db connection handling with postgis connections
3488    
3489    2003-08-19  Bernhard Herzog  <[email protected]>
3490    
3491            Add very basic postgis database support and the corresponding test
3492            cases. The test cases require a PostgreSQL + postgis installation
3493            but no existing database. The database will be created
3494            automatically by the test cases
3495    
3496            * test/README: Add note about skipped tests and the requirements
3497            of the postgis tests.
3498    
3499            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
3500    
3501            * test/test_postgis_db.py: New. Test cases for the postgis
3502            support.
3503    
3504            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
3505            format
3506    
3507            * test/test_wellknowntext.py: New. Test cases for the
3508            wellknowntext parser
3509    
3510            * test/postgissupport.py: New. Support module for tests involving
3511            a postgis database.
3512    
3513            * test/support.py (execute_as_testsuite): Shut down the postmaster
3514            if it's still running after the tests
3515    
3516            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
3517            well known text format
3518    
3519    2003-08-19  Jan-Oliver Wagner <[email protected]>
3520    
3521            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
3522            message dialog.
3523    
3524    2003-08-18  Bernhard Herzog  <[email protected]>
3525    
3526            * test/support.py (ThubanTestResult.printErrors): Indent the
3527            reason for the skips in the output to make it a bit more readable.
3528            (execute_as_testsuite): New helper function to run a test suite
3529            and print some more information.
3530            (run_tests): Use execute_as_testsuite to run the tests
3531    
3532            * test/runtests.py (main): Use execute_as_testsuite to run the
3533            tests
3534    
3535    2003-08-18  Bernhard Herzog  <[email protected]>
3536    
3537            Fix some bugs in Thuban and the test suite that were uncovered by
3538            changes introduced in Python 2.3:
3539    
3540            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
3541            filename is an absolute name
3542    
3543            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
3544            filename is an absolute name
3545    
3546            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
3547            unique filename to save to and use the correct relative filename
3548            in the expected output.
3549            (SaveSessionTest.test_dbf_table): Use the correct relative
3550            filename in the expected output.
3551    
3552            * test/test_layer.py (TestLayer.test_raster_layer): Update the
3553            test to check whether the filename is absolute.
3554    
3555    2003-08-18  Jan-Oliver Wagner <[email protected]>
3556    
3557            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
3558    
3559    2003-08-15  Bernhard Herzog  <[email protected]>
3560    
3561            Change the way shapes are returned by a shape store. The
3562            ShapesInRegion method returns an iterator over actual shape
3563            objects instead of a list of shape ids.
3564    
3565            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
3566            id.
3567            (ShapefileStore.ShapesInRegion): Return an iterator over the
3568            shapes which yields shape objects instead of returning a list of
3569            shape ids
3570            (ShapefileStore.AllShapes): New. Return an iterator over all
3571            shapes in the shape store
3572            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
3573    
3574            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
3575            doc-string.
3576    
3577            * Thuban/UI/baserenderer.py
3578            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
3579            layer_shapes and make it return an iterator containg shapes
3580            instead of a list of ids.
3581            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
3582            layer_shapes() change
3583    
3584            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
3585            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
3586    
3587            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
3588            changes in the ShapesInRegion return value.
3589            (ViewPort._get_hit_tester): Remove commented out code
3590    
3591            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
3592            new return value.
3593            (SimpleShapeStore.AllShapes): New. Implement this method too.
3594    
3595            * test/test_layer.py (TestLayer.test_arc_layer)
3596            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
3597            (TestLayer.test_point_layer_with_projection)
3598            (TestLayer.test_derived_store): Adapt to changes in the
3599            ShapesInRegion return value.
3600    
3601            * test/test_shapefilestore.py
3602            (TestShapefileStoreArc.test_shapes_in_region)
3603            (TestShapefileStorePolygon.test_shapes_in_region)
3604            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
3605            in the ShapesInRegion return value.
3606            (TestShapefileStorePoint.test_all_shapes)
3607            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
3608            methods
3609    
3610            * test/test_derivedshapestore.py
3611            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
3612            the ShapesInRegion return value.
3613            (TestDerivedShapeStore.test_all_shapes)
3614            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
3615            methods
3616    
3617    2003-08-15  Bernhard Herzog  <[email protected]>
3618    
3619            Make the renderers deal correctly with raw vs. python level
3620            representation of shape geometries
3621    
3622            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
3623            Return a flag useraw in addition to the callable and the parameter
3624            to indicate whether the callable can deal with the raw shape data
3625            or uses the higher level python lists of coordinates. The callable
3626            now should accept either the raw data or the return value of the
3627            shape's Points() method.
3628            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
3629            change
3630            (BaseRenderer.projected_points): Instead of the shape id use the
3631            points list as parameter.
3632            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
3633            (BaseRenderer.draw_point_shape): Adapt to projected_points()
3634            change and accept the points list as parameter instead of the
3635            shape id.
3636    
3637            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
3638            the useraw flag as required by the BaseRenderer
3639            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
3640            changes.
3641    
3642            * test/test_baserenderer.py
3643            (TestBaseRenderer.test_point_with_classification): New test for
3644            rendering a map with classifications.
3645    
3646    2003-08-15  Bernhard Herzog  <[email protected]>
3647    
3648            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
3649            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
3650            (ViewPort._get_hit_tester, ViewPort.projected_points)
3651            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
3652            (ViewPort._find_label_at): Split the find_shape_at method into
3653            several new methods and use the functions in the hit-test module.
3654    
3655            * Thuban/UI/hittest.py: New module with Python-level hit-testing
3656            functions
3657    
3658            * test/test_hittest.py: New. Test for the new hittest module
3659    
3660    2003-08-15  Bernhard Herzog  <[email protected]>
3661    
3662            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
3663            projection to all corners of the bounding box to get a better
3664            approximation of the projected bounding box
3665    
3666            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3667            New. Test coordinate handling of a layer with a projection.
3668            Catches the bug fixed in Layer.ShapesInRegion
3669    
3670    2003-08-15  Bernhard Herzog  <[email protected]>
3671    
3672            Move some of the mock objects in test_baserenderer into their own
3673            module so they can easily be used from other tests
3674    
3675            * test/mockgeo.py: New test helper module with some mock objects
3676            for geometry related things like shapes, shapestores and
3677            projections.
3678    
3679            * test/test_mockgeo.py: New. Tests for the new helper module
3680    
3681            * test/test_baserenderer.py: Some of the mock-objects are in
3682            mockgeo now.
3683    
3684    2003-08-12  Jan-Oliver Wagner <[email protected]>
3685    
3686            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
3687    
3688  2003-08-12  Bernhard Herzog  <[email protected]>  2003-08-12  Bernhard Herzog  <[email protected]>
3689    
3690          * po/de.po: New. German translations by Bjoern Broscheit          * po/de.po: New. German translations by Bjoern Broscheit
# Line 421  Line 4108 
4108    
4109          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
4110          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
4111          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
4112          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
4113    
4114          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
# Line 1536  Line 5223 
5223          Fix problem of hidden properties dialog under windows after double          Fix problem of hidden properties dialog under windows after double
5224          click on layer tree:          click on layer tree:
5225          The tree control always gets an Expanded / Collapsed event after          The tree control always gets an Expanded / Collapsed event after
5226          the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply          the ItemActivated  on double click, which raises the main window again.
5227            We add a second ItemActivated event to the queue, which simply
5228          raises the already displayed window.          raises the already displayed window.
5229    
5230          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable

Legend:
Removed from v.1582  
changed lines
  Added in v.2315

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26