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

Legend:
Removed from v.1655  
changed lines
  Added in v.2436

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26