/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26