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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26