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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26