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

Legend:
Removed from v.1582  
changed lines
  Added in v.2671

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26