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

Legend:
Removed from v.1760  
changed lines
  Added in v.2675

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26