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

Legend:
Removed from v.1878  
changed lines
  Added in v.2708

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26