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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26