/[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 2490 by bernhard, Mon Dec 20 10:08:58 2004 UTC revision 2673 by bernhard, Wed Oct 19 08:08:29 2005 UTC
# Line 1  Line 1 
1    2005-10-18  Bernhard Reiter <[email protected]>
2    
3            Startup improved: We fail right away if the internal encoding could
4            not be determined.
5    
6            * Thuban/__init__.py (get_internal_encoding): new.
7    
8            * test/test_stringrepresentation.py (class TestInternalEncoding):
9            Preserve the internal encoding for the tests in this class.
10    
11    2005-10-17  Bernhard Reiter <[email protected]>
12    
13    
14            * test/test_stringrepresentation.py: New file, for now testing
15            that set_internal_coding() is throwing an exception for bad exceptions.
16    
17            * Thuban/__init__.py (set_internal_encoding): added a forwards
18            and backward translation, so that we fail early if the
19            internal_encoding is bad.
20    
21    2005-10-17  Bernhard Reiter <[email protected]>
22    
23            svgexport 1.0.0cvs: Fixed ARC layer writing: No filling is done.
24            You could actually get polylines with filling in between,
25            when the classification for the lines had a fill color.
26            E.g. this happens when you generate a classification from a ramp.
27    
28            * Extensions/svgexport/test/test_svgmapwriter.py:
29            New test_export_arc_no_fill(). Extend copyright notice to 2005.
30    
31            * Extensions/svgexport/svgmapwriter.py
32            (SVGRenderer.draw_shape_layer_incrementally()):
33            Setting TRANSPARENT_BRUSH for shaptype ARC.
34            Extend copyright notice to 2005.
35    
36            * Extensions/svgexport/__init__.py: Extend copyright notice to 2005.
37    
38    2005-09-08  Frank Koormann <[email protected]>
39    
40            * Doc/manual/thuban-manual.xml (Map Management): Fixed typo reported
41            by Erik (sigra.at.home.se)
42    
43    2005-08-18  Jan-Oliver Wagner <[email protected]>
44    
45            * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
46            Call the right method for the default size.
47    
48    2005-08-11  Jan-Oliver Wagner <[email protected]>
49    
50            * Extensions/export_shapefile: New.
51    
52            * Extensions/export_shapefile/__init__.py: New. Initialize
53            the export_shapefile extension.
54    
55            * Extensions/export_shapefile/export_shapefile.py: New.
56            Exports a layer as a Shapefile.
57    
58    2005-08-08  Jan-Oliver Wagner <[email protected]>
59    
60            * po/de.po: String fixes. This fixes Debian bug #313843.
61    
62    2005-07-27  Jan-Oliver Wagner <[email protected]>
63    
64            Remove the attributes from the layer element in
65            .thuban files for the save routine.
66            This also solves RT bug #3149,
67            https://intevation.de/rt/webrt?serial_num=3149
68    
69            * test/test_load.py: (TestSingleLayer, TestNonAsciiColumnName,
70            TestLayerVisibility, TestSymbolSize, TestClassification, TestLabels,
71            TestLayerProjection, TestJoinedTable, TestLabelLayer): Removed
72            attributes from layer element to classification clnull element.
73    
74            * test/test_save.py (SaveSessionTest.testSingleLayer,
75            SaveSessionTest.testLayerProjection,
76            SaveSessionTest.testClassifiedLayer,
77            SaveSessionTest.test_joined_table, SaveSessionTest.test_save_postgis):
78            Removed attributes from layer element to classification clnull element.
79            (test_save_postgis.NonConnectionStore._fetch_table_information):
80            added pretending to have a shape_type.
81    
82            * Resources/XML/thuban-1.1.dtd: Make the attributes field
83            and field_type of classification optional.
84    
85            * Thuban/Model/classification.py (Classification.TreeItem.build_info):
86            Added output of size.
87    
88            * Thuban/Model/load.py (SessionLoader.start_classification):
89            Change attribute 'field' and 'field_type' from obligatory to
90            optional to allow empty classes (ie.  only with a default=clnull).
91    
92            * Thuban/Model/save.py (SessionSaver.write_layer): Don't write
93            any attributes anymore for the layer element.
94            (SessionSaver.write_classification): Even if there is no
95            classification field, still write the classification because
96            the clnull (default) symbol will not be defined anymore as
97            part of the layer element.
98    
99    2005-07-05  Bernhard Herzog  <[email protected]>
100    
101            * setup.py (setup call): Version 1.1.0
102    
103            * NEWS: Update for 1.1.0
104    
105            * MANIFEST.in: Add *.txt to files taken from Doc.  Otherwise the
106            technores won't be included
107    
108            * Thuban/UI/about.py (About.__init__): Extend copyright notice to
109            2005
110    
111            * po/de.po: Updated.
112    
113    2005-07-05  Bernhard Herzog  <[email protected]>
114    
115            * README: gdal 1.1.8 is too old.  1.2.5 works.
116    
117    2005-07-05  Bernhard Herzog  <[email protected]>
118    
119            * Resources/XML/thuban-1.1.dtd (rasterlayer): Add the opacity and
120            masktype attributes.
121    
122    2005-07-05  Bernhard Herzog  <[email protected]>
123    
124            * Thuban/Model/layer.py (Layer.__mangle_bounding_box)
125            (Layer.ClipBoundingBox): Rename ClipBoundingBox to
126            __mangle_bounding_box.  See the comments in the code and RT #2845
127    
128            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
129            Remove the explicit test of ClipBoundingBox.  The method isn't
130            public anymore and the direct call in the test wasn't necessary in
131            the first place.  If ClipBoundingBox (now __mangle_bounding_box)
132            isn't called, the return value of ShapesInRegion will be
133            different.
134    
135    2005-07-05  Bernhard Herzog  <[email protected]>
136    
137            * Thuban/UI/viewport.py (ViewPort.set_view_transform): Handle
138            ZeroDivisionError exceptions.  I don't know when they happen
139            exactly.  It probably happens when the projections aren't set
140            properly.
141    
142    2005-07-01  Bernhard Herzog  <[email protected]>
143    
144            First step towards unicode.  With this roughly we're at step 1
145            string_representation.txt
146    
147            * Doc/technotes/string_representation.txt: New.  Document how
148            strings are represented in Thuban and how to get to a Unicode
149            Thuban.
150    
151            * Thuban/__init__.py (set_internal_encoding)
152            (unicode_from_internal, internal_from_unicode): New. The first few
153            functions for the internal string representation
154    
155            * Thuban/UI/about.py (unicodeToLocale): Removed.  Use
156            internal_from_unicode instead.
157    
158            * Thuban/UI/__init__.py (install_wx_translation): Determine the
159            encoding to use for the internal string representation.  Also,
160            change the translation function to return strings in internal
161            representation even on unicode builds of wxPython
162    
163            * Thuban/Model/load.py (SessionLoader.check_attrs): Decode
164            filenames too.
165            (SessionLoader.start_clrange): Use check_attrs to decode and check
166            the attributes.
167    
168            * Thuban/Model/xmlreader.py (XMLReader.encode): Use
169            internal_from_unicode to convert unicode strings.
170    
171            * Thuban/Model/xmlwriter.py (XMLWriter.encode): Use
172            unicode_from_internal when applicable
173    
174            * test/runtests.py (main): New command line option:
175            internal-encoding to specify the internal string encoding to use
176            in the tests.
177    
178            * test/support.py (initthuban): Set the internal encoding to
179            latin-1
180    
181            * test/test_load.py (TestSingleLayer.test, TestClassification.test)
182            (TestLabelLayer.test): Use the internal string representation when
183            dealing with non-ascii characters
184    
185            * test/test_load_1_0.py (TestSingleLayer.test)
186            (TestClassification.test, TestLabelLayer.test): Use the internal
187            string representation when dealing with non-ascii characters
188    
189            * test/test_load_0_9.py (TestSingleLayer.test)
190            (TestClassification.test): Use the internal string representation
191            when dealing with non-ascii characters
192    
193            * test/test_load_0_8.py (TestUnicodeStrings.test): Use the
194            internal string representation when dealing with non-ascii
195            characters
196    
197            * test/test_save.py (XMLWriterTest.testEncode)
198            (SaveSessionTest.testClassifiedLayer): Use the internal string
199            representation when dealing with non-ascii characters where
200            applicable
201    
202    2005-06-30  Bernhard Herzog  <[email protected]>
203    
204            * test/runtests.py: Untabify.
205    
206    2005-06-30  Bernhard Herzog  <[email protected]>
207    
208            * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
209            untabify.
210    
211    2005-06-30  Bernhard Herzog  <[email protected]>
212    
213            * Extensions/ogr/test/__init__.py: Add missing coding directive
214    
215    2005-06-28  Jan-Oliver Wagner <[email protected]>
216    
217            * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
218            Use the default size for rendering selected items of default type.
219            Fixes part 2 of https://intevation.de/rt/webrt?serial_num=3149
220    
221    2005-06-28  Jan-Oliver Wagner <[email protected]>
222    
223            * Extensions/importAPR/apr.py (APR_BShSym): Extend by 'Stripple'.
224            (APR_TClr.GetThubanColor): Fix bug in color interpretation.
225            Thanks to Frank Koormann who identified this problem.
226    
227            * Extensions/importAPR/importAPR.py (APR_VShSym): New. Just
228            another symbol identified.
229    
230    2005-06-27  Jan-Oliver Wagner <[email protected]>
231    
232            * Doc/manual/thuban-manual-de.xml: More translations.
233    
234    2005-05-12  Jonathan Coles <[email protected]>
235            
236            * Thuban/UI/projdialog.py: Add missing import, which led to an
237            exception when opening a layer's projection.
238    
239    2005-05-09  Bernhard Herzog  <[email protected]>
240    
241            * test/support.py (FileLoadTestCase.filename): Fix doc-string.
242    
243    2005-05-09  Bernhard Herzog  <[email protected]>
244    
245            * Thuban/Model/postgisdb.py (PostGISConnection.connect): Set the
246            connection to autoconnect.  Fixes RT#3148.
247    
248            * test/test_postgis_db.py
249            (TestPostGISSpecialCases.test_simple_error_handling): New test
250            that attempts to reproduce RT#3148.
251    
252    2005-05-06  Jonathan Coles <[email protected]>
253    
254            Add support for saving and loading the opacity and mask type
255            properties of RasterLayers. Also add support for proper use
256            of alpha information while drawing images not in 'RAW' format.
257            If transparency in an image format (e.g, PNG) is supported by
258            wxWidgets then the image would previously have been draw with
259            transparent regions, but the opaque regions would have been
260            unaffected by a change in the layer's opacity. This patch
261            corrects the problem.
262    
263            * Thuban/Model/layer.py (RasterLayer): Added opacity and
264            masktype parameters to the constructor, and set the
265            appropriate variables to those values.
266    
267            * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Added
268            code to read the opacity and mask type of the layer and construct
269            a new layer with the additional parameters.
270    
271            * Thuban/Model/save.py (SessionSaver.write_layer): Added code
272            to save the opacity and mask type of a layer.
273    
274            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
275            the opacity of the layer to draw_raster_data rather than the layer.
276            (BaseRenderer.draw_raster_data): Remove the layer parameter because
277            the function doesn't need to know about the layer. Add the optional
278            opacity parameter whose default is 1.0. Add 'PNG' as a supported
279            graphics format.
280    
281            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Fixed
282            signature to match that in BaseRenderer. Use the new opacity argument
283            in place of calling layer.Opacity(). In the case where the
284            format is not 'RAW', alpha_data is None and the loaded image has
285            alpha information, use the file's alpha information. This is
286            still subject to the layer's opacity setting.
287    
288            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
289            Fixed signature to match that in BaseRenderer.
290    
291            * test/test_load.py (TestRasterLayer): Change file_contents to
292            include opacity and masktype variables.
293            (TestRasterLayer.test): Include tests for opacity and masktype
294            changes.
295    
296            * test/test_save.py (SaveSessionTest.testRasterLayer): Restructure
297            test to cover a variety of combinations of masktype and opacity
298            settings.
299    
300    2005-05-02  Jan-Oliver Wagner <[email protected]>
301    
302            * debian/rules: add --use-wx-python-swig-hack
303            to the build command.
304            Thanks to Moritz Lennert for pointing this out.
305    
306    2005-04-28  Jan-Oliver Wagner <[email protected]>
307    
308            Introduce OGRFileShapeStore in ogr extension.
309            This allows at least that loaded shapefile shape stores
310            can be saved correctly in the thuban session file
311            and reloaded again (reload is via core shapefile
312            routine, not OGR). For other types, .thuban files
313            can not be reloaded for the time being.
314    
315            * Extensions/ogr/ogrshapes.py (OGRFileShapeStore): New. This
316            class ist to be used for any file-based shape stores
317            accessed through OGR.
318    
319            * Extensions/ogr/ogrstart.py (open_with_ogr): Added
320            forgotten _ for i18n. Adapted call OpenFileShapestore
321            regarding new parameter.
322            (OpenFileShapestore): Use OGRFileShapeStore instead of
323            OGRShapeStore. Fix return value (None instead of null).
324            Add new parameter "mainwindow" to avoid accessing global
325            context.
326    
327    2005-04-27  Jan-Oliver Wagner <[email protected]>
328    
329            Introduce FileShapeStore as generalization for
330            file-based shape stores. In a first instance
331            this allows additional modules to handle shapefile
332            format as well, namely the OGR extension.
333    
334            * Thuban/Model/data.py: Various small fixes in doc-strings.
335            (FileShapeStore): New class.
336            (ShapefileStore): Derive from FileShapeStore.
337            (ShapefileStore.__init__): Call __init__ of FileShapeStore,
338            rename self.table to self._table, initialize self._bbox
339            (ShapefileStore._open_shapefile): Use self._bbox instead of self.bbox
340            and self.FileName() instead of self.filename.
341            (ShapefileStore.Table): Use self._table instead of self.table.
342            (ShapefileStore.FileName): Removed (moved to FileShapeStore).
343            (ShapefileStore.BoundingBox):  Use self._bbox instead of self.bbox.
344    
345            * Thuban/Model/save.py: Replace ShapefileStore by FileShapeStore.
346            (SessionSaver.write_data_containers): Only use methods of the
347            base class FileShapeStore.
348    
349    2005-04-26  Martin Schulze  <[email protected]>
350    
351            * Extensions/wms/wms.py (render_wms_layer): Adjusted the render
352            function to the modified render engine
353    
354    2005-04-25  Martin Schulze  <[email protected]>
355    
356            * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
357            Added a description according to the CVS log message
358    
359    2005-04-23  Martin Schulze  <[email protected]>
360    
361            * Thuban/UI/renderer.py: Added a missing import
362    
363    2005-04-23  Russell Nelson  <[email protected]>
364    
365            * Thuban/UI/view.py (MapCanvas.OnMiddle{Up,Down}): Changed the
366            way the previous tool is remembered, so that middle-button
367            panning works even if you haven't selected a tool.
368    
369    2005-04-11  Bernhard Herzog  <[email protected]>
370    
371            * libraries/thuban/wxproj.cpp: Move the compatibility code that
372            deals with the wxPython 2.4 version of wxPython.h into the #ifdef
373            branch that includes wxPython.h because it's only needed when
374            wxPython.h is used.  Also, it won't compile when
375            USE_WX_PYTHON_SWIG_HACK is set otherwise.
376    
377    2005-04-07  Bernhard Herzog  <[email protected]>
378    
379            * Thuban/UI/classifier.py (ClassGrid.__init__): Use -1 as the ID.
380            (ID_CLASS_TABLE): Removed. It wasn't used anywhere except in
381            ClassGrid.__init__ and it's value is outside of the valid
382            range (must be < 32768).  wxPython 2.5 complains about it with an
383            exception.
384    
385    2005-04-05  Jan-Oliver Wagner <[email protected]>
386    
387            * Doc/manual/thuban-manual-de.xml: More translations.
388    
389    2005-04-05  Bernhard Herzog  <[email protected]>
390    
391            * libraries/thuban/wxproj.cpp: Make it work with a wxPython.h from
392            wxPython 2.4 as well.  Also, remove a now obsolete comment.
393    
394    2005-04-05  Bernhard Herzog  <[email protected]>
395    
396            Use wxPython.h by default but provide a workaround when it isn't
397            available.
398    
399            * setup.py (wxproj_extension): New variable.  Assign the Extension
400            instance for Lib.wxproj to this variable instead of putting it
401            directly into the listso that it can be accessed by other code
402            later.
403            (thuban_build_ext.user_options): Added boolean option
404            --use-wx-python-swig-hack.
405            (thuban_build_ext.initialize_options): Initialize the new option
406            to False.
407            (thuban_build_ext.finalize_options): If the new option was given,
408            define the preprocesser macro USE_WX_PYTHON_SWIG_HACK.
409            (thuban_build_ext): Update the doc-string
410    
411            * libraries/thuban/wxproj.cpp: Normally we use
412            wx/wxPython/wxPython.h now.  Only if USE_WX_PYTHON_SWIG_HACK is
413            defined, use swigPtrConvertHack.h instead.
414    
415            * libraries/thuban/swigPtrConvertHack.h: Remove the code that was
416            copied over from wxPython.h.
417            (decode_pointer_new): New.  Equivalent of decode_pointer for
418            wxPython 2.5.
419            (wxPyConvertSwigPtr): Modified to cope with wxPython 2.5 as well.
420    
421            * README: Add section on potential build problems which explains
422            how the work-around for a missing wxPython.h is activated.
423    
424    2005-03-29  Bernhard Herzog  <[email protected]>
425    
426            * test/postgissupport.py (find_postgis_sql): Added yet another
427            potential location for (lw)postgis.sql because the file has moved
428            again in postgis 1.0.0 rc4.
429    
430    2005-03-29  Bernhard Herzog  <[email protected]>
431    
432            * Thuban/UI/legend.py (BMP_SIZE_W, BMP_SIZE_H): Set both to 16 to
433            match the site of the legend_icon_layer icon.  Otherwise wxpython
434            2.5 complains when the legend is created with the error:
435    
436            PyAssertionError: C++ assertion "(bitmap.GetWidth() == m_width &&
437            bitmap.GetHeight() == m_height) || (m_width == 0 && m_height ==
438            0)" failed in ./src/generic/imaglist.cpp(81): invalid bitmap size
439            in wxImageList: this might work on this platform but definitely
440            won't under Windows.
441    
442    2005-03-23  Jonathan Coles <[email protected]>
443    
444            These changes add support for adjusting the opacity of a raster layer.
445    
446            * Thuban/Model/layer.py (RasterLayer.Opacity): Replaces AlphaOpacity.
447            (RasterLayer.SetOpacity): Replaces SetAlphaOpacity. Also triggers
448            a LAYER_CHANGED event if the opacity actually changes.
449    
450            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_data): Added
451            layer parameter needed in the implementation of this method in
452            renderer.py.
453    
454            * Thuban/UI/layerproperties.py (LayerProperties.dialog_layout): Fixed
455            typo 00 -> 0.
456    
457            * Thuban/UI/rasterlayerproperties.py (RasterLayerProperties): Added
458            control to adjust opacity.
459    
460            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Scale the
461            alpha data based on the opacity level of the layer.
462    
463            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Now
464            accepts a layer parameter.
465    
466            * test/test_layer.py (TestLayerModification.test_raster_layer):
467            Rename opacity method calls and add test for LAYER_CHANGED.
468    
469    2005-03-16  Bernhard Herzog  <[email protected]>
470    
471            * test/test_connector.py (DeletionTestMixin.check_deletions)
472            (DeletionTestMixin.check_deletetions): renamed to check_deletions.
473            update the callers.
474    
475    2005-03-14  Jan-Oliver Wagner <[email protected]>
476    
477            * Doc/manual/thuban-manual-de.xml: More translations.
478    
479    2005-03-10  Jan-Oliver Wagner <[email protected]>
480    
481            Introducing initialization callbacks for extensions.
482    
483            * Thuban/UI/extensionregistry.py (ExtensionDesc.__init__): Added
484            optional parameter init_callback.
485            (ExtensionDesc.init_ext): New. Executes the callback and sets
486            a status.
487    
488            * Thuban/UI/application.py (ThubanApplication.OnInit): Add the
489            initialization of the extensions.
490            (ThubanApplication.init_extensions): Init all extensions.
491    
492            * Thuban/UI/about.py (About.__init__): Added status of the extensions
493            to the about text.
494    
495            * Extensions/gns2shp/__init__.py: Added init method for Extension
496            description.
497            (init): New. Contains the initialization of the module.
498    
499    2005-03-04  Nina H�ffmeyer <[email protected]>
500    
501            * Extensions/ogr/ogrdialog.py: Added a dialog, which asks for
502            OGRConnection to open a datasource. Removed dialog to display all
503            available drivers. Added some doc strings.
504    
505            * Extensions/ogr/ogrstart.py: Added menu entry for opening an
506            OGRDatasource with a string. Added two opening methods which return an
507            OGRDatasource (either data from file or from DB).
508    
509            * Extensions/ogr/ogrshapes.py: Added class OGRGeometry, which
510            represents a geometry reference of an OGRFeature. OGRShape now has a
511            list of referenced geometry objects (important for geometry
512            collections).
513            For OGRShapeStores loaded from a DB an ID column can be specified now.
514    
515    2005-02-22  Jan-Oliver Wagner <[email protected]>
516    
517            * test/test_map.py (TestMapWithContents.test_tree_info):
518            Added label layer for comparison.
519    
520    2005-02-18  Jonathan Coles <[email protected]>
521    
522            * libraries/thuban/gdalwarp.cpp (GetImageData): Optimize the loop
523            which builds a mask. Handle the majority of an image in a loop,
524            creating 8 bits at a time. Later, handle the edge case where less
525            than 8 bits are packed.
526    
527    2005-02-18  Bernhard Herzog  <[email protected]>
528    
529            * test/test_baserenderer.py (TestBaseRenderer.setUp): Fix
530            doc-string
531    
532    2005-02-18  Jonathan Coles <[email protected]>
533    
534            * setup.py: Remove wx_cs_params from gdal compile options.
535    
536    2005-02-18  Jonathan Coles <[email protected]>
537    
538            Refactored baserenderer.py and renderer.py to remove baserenderer.py's
539            dependencies on wxPython. Added a new method projected_raster_layer()
540            that returns a raster layer image in projected space. This must be
541            implemented in classes derived from BaseRenderer. This also eliminates
542            the dependency on gdal in baserenderer.py.
543    
544            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Call
545            new projected_raster_layer() to get projected raster image instead
546            of directly calling ProjectRasterFile().
547            (BaseRenderer.projected_raster_layer): New. This must be implemented
548            by derived classes. It takes almost the same arguments as ProjectRasterFile
549            did and returns a projected image with mask and alpha data (if requested).
550            (BaseRenderer.render_map_incrementally): Remove the check for gdal since
551            that check will be done in MapRenderer.projected_raster_layer(). This
552            also allows other implementations to use different projection code.
553    
554            * Thuban/UI/renderer.py (MapRenderer.projected_raster_layer):
555            Implementation of BaseRenderer.projected_raster_layer. Checks for
556            gdal support and wxPython version. Also handles exceptions from
557            ProjectRasterFile.
558    
559            * libraries/thuban/gdalwarp.cpp: Removed checks for wxPython versions
560            and added a variable which can be set through the options argument
561            of ProjectRasterFile.
562    
563            * test/test_baserenderer.py (SimpleRenderer.projected_raster_layer): New.
564            Calls ProjectRasterFile and returns the result.
565            (TestBaseRenderer.test_projected_raster_layer): New. Tests the results
566            of calling projected_raster_layer() with different options.
567            (TestBaseRenderer.test_raster_no_projection): Removed tests based on
568            wxPython version and all tests of masks and alpha channels. These are
569            now in test_projected_raster_layer().
570    
571    2005-02-17  Jan-Oliver Wagner <[email protected]>
572    
573            * Thuban/Model/map.py, Thuban/Model/label.py: Fixed
574            doc-strings to comply with coding_guidelines.
575    
576    2005-02-17  Jan-Oliver Wagner <[email protected]>
577    
578            Docstring improvements and minor fixes for labellayer.
579    
580            * Thuban/Model/map.py:
581            (Map, Map.Destroy, Map.RemoveLayer, Map.ClearLayers,
582            Map.Layers, Map.HasLayers, Map.MoveLayerToTop,
583            Map.RaiseLayer, Map.LowerLayer, Map.MoveLayerToBottom,
584            Map.ProjectedBoundingBox, Map.GetProjection): Improved/added
585            doc string.
586            (Map.BoundingBox): Removed superfluous test for label_layer
587            and improved doc string.
588            (Map.TreeInfo): Added label_layer and improved sdo string.
589    
590            * Thuban/Model/label.py: Added import of _.
591            (Label, Label.__init__): Improved/added doc string.
592            (LabelLayer, LabelLayer.__init__, LabelLayer.Labels,
593            LabelLayer.RemoveLabel, LabelLayer.ClearLabels):
594            Improved/added doc string.
595            (LabelLayer.AddLabel): Use already defined names for
596            align strings and improved doc string.
597            (LabelLayer.TreeInfo): New. Return the object data for
598            the tree view.
599    
600    2005-02-16  Jonathan Coles <[email protected]>
601    
602            Further wxPython 2.5 changes using patches from Daniel Calvelo Aros
603            so that that wxproj doesn't crash. Added GUI support for selecting
604            alpha channel (opacity can't be selected yet).
605    
606            NOTE: If wxPython.h is including in future distribution packages
607            then it will not be necessary to have the files swigPtrConvertHack.h
608            and wxPython_int.h included with Thuban. This is hopefully
609            a temporary workaround.
610    
611            * setup.py (thuban_build_ext.finalize_options): gdalwarp needs
612            access to the macro wxCHECK_VERSION so that it will properly
613            generate a bit mask. There was a problem between wx2.4 and wx2.5
614            that this works around.
615    
616            * Thuban/Model/layer.py (RasterLayer.UseMask): Removed in favor
617            of RasterLayer.MaskType.
618            (RasterLayer.SetUseMask): Removed in favor of RasterLayer.SetMaskType
619            (RasterLayer.MaskType): New. Returns the type of mask to use. Can
620            specify none, a bitmap, or an alpha channel.
621            (RasterLayer.SetMaskType): New. Set what kind of mask to use.
622    
623            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
624            Set the raster warping options for the mask based on the value
625            of RasterLayer.MaskType.
626    
627            * Thuban/UI/legend.py (LegendTree.__FillTreeLayer): Remove
628            deprecated calls to SetItemSelectedImage in favor of SetItemImage
629            with wxTreeItemIcon_Selected.
630    
631            * Thuban/UI/rasterlayerproperties.py: Support selecting to use
632            an alpha channel for the mask.
633    
634            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Use alpha
635            data if it is available and an alpha channel is supported under
636            the current version of wxPython.
637    
638            * libraries/thuban/gdalwarp.cpp (GetImageData): Added compiler define
639            to select whether 1's or 0's select the desired portion of an image
640            in the bit mask. wx2.4 has a bug where the documentation is the opposite
641            from behavior.
642            (ProjectRasterFile): Only generate an alpha channel if the version
643            of wxPython is >= 2.5.3.
644    
645            * libraries/thuban/wxproj.cpp: Applied patches from Daniel Calvelo Aros.
646            When wxPython >= 2.5.3 use the special swig functions to decode an
647            object's address.
648    
649            * libraries/thuban/swigPtrConvertHack.h: Includes conditional code
650            based on the version of wxPython. If >= 2.5.3 use the special swig
651            functions from wxPython to decode wxPython objects, otherwise use
652            the old method of retrieving the address from the object __repr__ string.
653    
654            * libraries/thuban/wxPython_int.h: Copied from wxPython source.
655            Unnecessary code was removed to make it smaller.
656    
657            * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
658            Add tests for returning an alpha channel.
659    
660            * test/test_layer.py (TestLayerModification.test_raster_layer): Fix
661            tests that used removed functions UseMask and SetUseMask
662    
663    
664    2005-02-08  Bernhard Herzog  <[email protected]>
665    
666            More wxPython 2.5 changes.  This time taken from a patch from
667            Daniel Calvelo Aros.
668    
669            * Thuban/UI/tableview.py (QueryTableFrame.__init__)
670            (QueryTableFrame.__init__): Pass the size of a spacer as a single
671            item.
672    
673            * Thuban/UI/projdialog.py (ProjFrame.build_dialog)
674            (ProjFrame.build_dialog): Pass the size of a spacer as a single
675            item.
676    
677            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Pass the
678            size of a spacer as a single item.
679    
680            * Thuban/UI/classifier.py (Classifier.dialog_layout): Pass the
681            size of a spacer as a single item.
682    
683    2005-02-08  Bernhard Herzog  <[email protected]>
684    
685            Compatibility with wxPython 2.5.  The changes should make it work
686            better with 2.5 while still keeping compatibility with 2.4.  There
687            are still problems with 2.5, though.
688    
689            * Thuban/UI/dock.py (DockableWindow.__CreateBorder): Pass the size
690            of a spacer as a single item.
691    
692            * Thuban/UI/classifier.py (ClassGroupPropertiesCtrl): Derive only
693            from wxControl
694    
695            * Thuban/UI/legend.py (LegendTree): When running with wxPython <
696            2.5, add an implementation of the GetFirstChild method that does
697            not require the second parameter.
698            (LegendTree.find_layer, LegendTree._OnMsgMapLayersAdded)
699            (LegendTree._OnMsgMapLayersRemoved, LegendTree.DeleteAllItems)
700            (LegendTree.DeleteChildren, LegendTree.__ShowHideLayer): Do not
701            pass the second parameter to GetFirstChild
702    
703    2005-02-08  Nina H�ffmeyer <[email protected]>
704    
705            * Extensions/ogr/ogrshapes.py: Removed some print commands.
706    
707            * Extensions/ogr/ogrstart.py: Changed the GUI. OGR is no longer an
708            additional menu but appears as a possibility in the menu Map.
709    
710    2005-02-07  Jonathan Coles <[email protected]>
711            * libraries/thuban/gdalwarp.cpp: Removed the macros PYTHON_ERR
712            and PYTHON_ERRF since they were no longer necessary.
713    
714    2005-02-07  Bernhard Reiter <[email protected]>
715            * Thuban/UI/classifier.py (ClassGrid.DeleteSelectedRows):
716            Enable translation for message string.
717    
718    2005-02-06  Martin Schulze  <[email protected]>
719    
720            * Extensions/wms/infodialog.py (wmsInfoDialog.__init__): Adjusted
721            the arguments of the contstructor to fit the global scheme
722    
723    2005-01-31  Nina H�ffmeyer <[email protected]>
724    
725            * Extensions/ogr/ogrdialog.py: Added class ogrdialog.py, which provides
726            some dialogs needed to start ogr.
727            
728            * Extensions/ogr/__init__.py: Changed comments to avoid encoding
729            warnings.
730    
731            * Extensions/ogr/test/test_OGRShapestore.py: Changed comments to avoid
732            encoding warnings.
733    
734    2005-01-28  Jonathan Coles <[email protected]>
735    
736            * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
737            mask is packed into a bit array. It's now slightly faster.
738    
739    2005-01-28  Jonathan Coles <[email protected]>
740    
741            * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
742            default to true.
743    
744            * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
745            code that loads the state of the layer's use_mask flag. Its
746            usefulness is still being debated.
747    
748            * Thuban/Model/save.py (SessionSaver.write_layer): Remove
749            code that saves the state of the layer's use_mask flag. Its
750            usefulness is still being debated.
751    
752            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
753            options to ProjectRasterFile based on the state of layer.UseMask().
754            Catch more exceptions from ProjectRasterFile so that Thuban doesn't
755            quit is there is a problem projecting.
756            (BaseRenderer.draw_raster_data): Change the documentation to
757            describe the new format (XBM) that the mask data will be in.
758    
759            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
760            data is in XBM format when format='RAW' which means it doesn't
761            need to be converted to a wxImage before being used as a mask
762            for a wxBitmap. Assume that if format != 'RAW' that the image
763            data and mask data are in the same format.
764    
765            * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
766            and a mask is requested, convert the alpha band to a bit array in
767            XBM format. if an alpha channel is requested, simply return the
768            data in the alpha band. Provide better error handling by returning
769            python error messages (also fixes RT #2947).
770            (ProjectRasterFile): Support multiple mask options, rather than simply
771            a flag indicating that a mask should or should not be used. Provide
772            better error handling by returning python error messages.
773    
774            * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
775            Add mask data to test.
776    
777            * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
778            should use the mask by default.
779            (TestLayerModificaton.test_raster_layer): Test that a layer should use
780            the mask by default.
781    
782            * test/test_load.py (TestRasterLayer.test): Remove testing for
783            use_mask flag in file.
784    
785            * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
786            for use_mask in file.
787    
788            * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
789            
790    2005-01-26  Jonathan Coles <[email protected]>
791    
792            Add a new dialog box for raster layers. The dialog box allows
793            the user to toggle a mask that is generated by ProjectRasterFile
794            and is used to only draw the real parts of the projected image.
795    
796            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
797            Instruct the warping code to generate a mask if the raster layer
798            requests one.
799            (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
800    
801            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
802            obsolete optional mask argument.
803    
804            * Thuban/UI/classifier.py (Classifier): Change the parent class
805            to LayerProperties and rework the code to support layout calls
806            from the parent.
807            (Classifier.dialog_layout): New. Layout the dialog box.
808            (Classifier.map_layers_removed): Removed. Moved to parent class.
809            (Classifier.map_replaced): Removed. Moved to parent class.
810            (Classifier._OnTry): Renamed to OnTry to support parent class.
811            (Classifier.OnClose): Removed. Supplied in parent class.
812            (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
813            (Classifier._OnOK): Renamed to OnOK to support parent class.
814            (Classifier._OnRevert): Renamed to OnRevert to support parent class.
815    
816            * Thuban/UI/layerproperties.py: New. Base class for layer properties
817            dialog boxes.
818    
819            * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
820            raster layer properties.
821    
822            * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
823            with the non-simple version supplied with gdal. This allows added
824            features such as creating an alpha band.
825            (GetImageData): Generate a mask array from the alpha band that is
826            generated by gdal if the user has selected it. Try to support images
827            that have more than three bands, such as images with RGB plus an
828            alpha band.
829            (ProjectRasterFile): Convert python argument for mask and tell
830            gdal to enable or disable an alpha band.
831    
832            * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
833            describing what kind of layer the class is. Defaults to "Unknown",
834            but should be overridden by subclasses.
835            (Layer.Type): New. Override base class method.
836            (RasterLayer.__init__): Create a flag for using a mask. Record extra
837            data from gdal for display in the properties dialog.
838            (RasterLayer.Type): New. Override base class method.
839            (RasterLayer.UseMask): New. Returns True if the mask should be used.
840            (RasterLayer.SetUseMask): New. Set if the mask should be used.
841            (RasterLayer.ImageInfo): New. Return extra information about the image.
842    
843            * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
844            the mask information.
845    
846            * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
847    
848            * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
849            Classifier classes as dialogs to use with the proper layer types.
850    
851            * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
852            Fix test.
853    
854            * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
855            (TestLayerModification.build_path): New. Support function.
856            (TestLayerModification.test_raster_layer): New. Test new methods.
857    
858            * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
859    
860            * test/test_load.py (TestRasterLayer): Add tests for mask.
861    
862            * test/test_load_1_0_1.py: New. Copied from test_load.py.
863    
864            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
865            obsolete optional mask argument.
866    
867    2005-01-26  Nina H�ffmeyer <[email protected]>
868    
869            * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
870            which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
871            RowOrdinalToId() and ReadRowAsDict().
872    
873            * Extensions/ogr/ogrstart.py: Added menu item which opens database
874            layers for existing database connections.
875    
876            * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
877    
878    
879    2005-01-26  Jan-Oliver Wagner <[email protected]>
880    
881            * Doc/manual/thuban-manual-de.xml: More translations.
882    
883    2005-01-24  Bernhard Herzog  <[email protected]>
884    
885            Rework the status bar updates a bit to make sure the message about
886            the projections is produced at the right times.
887    
888            * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
889            New class variable with messages that may require a status bar
890            update.
891            (MainWindow.view_position_changed)
892            (MainWindow.update_status_bar): Rename from view_position_changed
893            to update_status_bar.  It's meaning has changed now that it may
894            also generate messages about problems with projection settings.
895            (MainWindow.__init__): Use the new update_status_bar_messages
896            class variable to subscribe update_status_bar
897            (MainWindow.set_position_text): Update doc-string.  This method
898            has to be renamed at some point.  See doc-string and comments.
899            (MainWindow.OnClose): Unsubscribe update_status_bar from all
900            messages in update_status_bar_messages
901    
902            * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
903            class attribute.  map messages to be forwarded by the viewport.
904            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
905            the messages in forwarded_map_messages
906    
907    2005-01-21  Bernhard Herzog  <[email protected]>
908    
909            * test/postgissupport.py (PostGISDatabase.__init__): Tweak
910            doc-string
911            (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
912            different name for the initialization SQL file.
913    
914    2005-01-21  Jonathan Coles <[email protected]>
915    
916            * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
917            a projection and returns a formatted string representing the
918            parameters to feed to gdalwarp. This function eliminates
919            redundancy in draw_raster_layer().
920            (BaseRenderer.render_map_incrementally): Removed the optimization which
921            drew the top most raster layer first and then only those vector-
922            based layers that are above it. With the support for transparency
923            this optimization breaks correct behaviour.
924            (BaseRenderer.draw_raster_layer): Reorganize code to support possible
925            future enhancements to raster layer bounding box. The old behaviour has
926            not changed. Also, change calling parameters to draw_raster_data()
927            to specify new RAW data format and mask.
928            (BaseRenderer.draw_raster_data): Change signature to include an optional
929            parameter for mask information. Change documentation to mention
930            support for new parameter and added option for RAW data format.
931            The data argument is now a list of [width, height, data].
932    
933            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
934            mask parameter. Add new condition for RAW format, which
935            significantly reduces rendering time. Add condition for
936            mask parameter.
937    
938            * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
939            data array of RGB values from the projected image returned from
940            the gdal warping functions. In the case of palette based images, it
941            converts the NO_DATA index to the mask color.
942            (ProjectRasterFile): Removed all custom memory driver references
943            and replaced it with the standard in-memory dataset provided
944            by gdal. The return data is no longer a BMP file, but an array
945            of RGB values, one set triple per pixel.
946    
947            * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
948            * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
949            * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
950    
951            * setup.py (thuban_build_ext.finalize_options): Removed mention
952            of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
953            files. These are obsolete with the new version of gdalwarp.cpp
954    
955            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
956            Updated signature.
957            (TestBaseRenderer.test_raster_no_projection): Changed the test
958            data to be data in the uncompressed RAW format returned from
959            ProjectRasterFile.
960    
961    2005-01-21  Jan-Oliver Wagner <[email protected]>
962    
963            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
964            string available for i18n.
965    
966    2005-01-20  Russell Nelson  <[email protected]>
967    
968            * Resources/Projections/defaults.proj: Ruin the speling of the
969            Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
970            It's the wrong thing to do in the long run, but it's necessary for
971            those users until that bug is fixed.  Otherwise the projection
972            dialog segfaults.  Better to annoy some Lambert-93 users with a
973            spelling mistake than every Fedora Core 3 user of Thuban-CVS.
974    
975    2005-01-20  Bernhard Reiter <[email protected]>
976    
977            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
978            docstring and comment that the warning code here is a hack.
979    
980    2005-01-20  Russell Nelson  <[email protected]>
981    
982            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
983            user about misprojected layers when their lat/lon bounding
984            box exceeds rational lat/lon values.
985    
986    2005-01-20  Bernhard Reiter <[email protected]>
987    
988            * Thuban/UI/about.py (unicodeToLocale): Improved:
989            Use 'ascii' and then 'replace' for other characters
990            when getdefaultlocale returns None. Thanks to Bernhard H. .
991    
992    2005-01-20  Bernhard Reiter <[email protected]>
993    
994            * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
995            that OnRangeText might be called twice and using None as argument.
996    
997    2005-01-20  Bernhard Reiter <[email protected]>
998    
999            * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
1000            OnRangeText(0) to work around a different in wx Behaviour noticed
1001            on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
1002    
1003    2005-01-20  Bernhard Reiter <[email protected]>
1004    
1005            * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
1006            None. (Fixes rt#2910.)
1007            
1008    2005-01-18  Frank Koormann <[email protected]>
1009    
1010            New Extension: mouseposition
1011            Tool to collect mouse click positions (map coordinates) in a dialog.
1012    
1013            * Extensions/mouseposition/__init__.py: New, extension registration
1014    
1015            * Extensions/mouseposition/mouseposition.py: New, implements the
1016            dialog and adds a tool to Thuban mainwindow.
1017    
1018            * Extensions/mouseposition/position.xpm: New, icon for tool.
1019    
1020    2005-01-14  Jan-Oliver Wagner <[email protected]>
1021    
1022            * Doc/manual/thuban-manual-de.xml: More translations.
1023    
1024    2005-01-11  Frank Koormann <[email protected]>
1025    
1026            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1027            Fix indention bug.
1028    
1029    2005-01-09  Frank Koormann <[email protected]>
1030    
1031            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
1032            BugFix 2901: Explicitly copy layers ClassificationColumn since it
1033            is not part of the layers Classification.
1034    
1035    2005-01-03  Frank Koormann <[email protected]>
1036    
1037            * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
1038            BugFix 2883: Former implementation only worked on classified point
1039            layers: KeyError was raised, now use the default size if field is None.
1040    
1041    2004-12-27  Bernhard Reiter <[email protected]>
1042    
1043            svgexport 1.0.0cvs: Fixed label export.
1044    
1045            * Extensions/svgexport/test/test_svgmapwriter.py:
1046            class TestSVGRenderer(): New class; new test test_label_font().
1047    
1048            * Extensions/svgexport/svgmapwriter.py
1049            (SVGRenderer.label_font()): initialised Font size with self.factor now,
1050            makes test_label_font happy.
1051    
1052            * Extensions/svgexport/TODO: crossed out fixed label export item.
1053            Added item for options.
1054    
1055            * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
1056    
1057    2004-12-27  Russell Nelson  <[email protected]>
1058    
1059            Middle mouse button pans.
1060    
1061            * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
1062            OnMiddleDown and OnMiddleUp events.
1063            (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
1064            previously used tool.
1065            (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
1066            pressing the middle mouse button.
1067    
1068    2004-12-27  Jan-Oliver Wagner <[email protected]>
1069    
1070            * Doc/manual/thuban-manual-de.xml: More translations.
1071    
1072    2004-12-23  Jan-Oliver Wagner <[email protected]>
1073    
1074            * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
1075            \n to stderr after the warnings. Thanks to Russell Nelson.
1076    
1077    2004-12-20  Nina Hueffmeyer <[email protected]>
1078    
1079            * Extensions/ogr/ogrshapes.py: Fixed some issues from
1080            Bernhard (coding guidelines etc.). Additionally it is now possible to
1081            display shapefiles containing feature collections (e.g.polygons
1082            with holes). Works with gdal 1.2.1 now.
1083    
1084            * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
1085            from Bernhard (coding guidelines etc.). If ogr can't be imported,
1086            tests are skipped now.
1087    
1088            * Extensions/ogr/ogrstart.py: Fixed some typings.
1089    
1090  2004-12-20  Bernhard Reiter <[email protected]>  2004-12-20  Bernhard Reiter <[email protected]>
1091    
1092          * Extensions/svgexport/TODO: updated to add support for          * Extensions/svgexport/TODO: updated to add support for
# Line 62  Line 1151 
1151          * Doc/manual/thuban-manual-de.xml: Copied English section about          * Doc/manual/thuban-manual-de.xml: Copied English section about
1152          svexport over.          svexport over.
1153    
1154          * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.          * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
1155    
1156          * Extensions/svgexport/svgsaver.py,maplegend.py:          * Extensions/svgexport/svgsaver.py,maplegend.py:
1157          Moved from experimental to stable extension menu.          Moved from experimental to stable extension menu.

Legend:
Removed from v.2490  
changed lines
  Added in v.2673

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26