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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26