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

Legend:
Removed from v.1237  
changed lines
  Added in v.2716

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26