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

Legend:
Removed from v.1655  
changed lines
  Added in v.2382

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26