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

Legend:
Removed from v.1655  
changed lines
  Added in v.2726

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26