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

Legend:
Removed from v.1553  
changed lines
  Added in v.2419

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26