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

Legend:
Removed from v.1349  
changed lines
  Added in v.2730

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26