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

Legend:
Removed from v.1349  
changed lines
  Added in v.2434

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26