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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26