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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26