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

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

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

revision 1349 by jonathan, Tue Jul 1 16:12:38 2003 UTC revision 2087 by bh, Fri Feb 20 20:09:40 2004 UTC
# Line 1  Line 1 
1    2004-02-20  Bernhard Herzog  <[email protected]>
2    
3            * Extensions/wms/wms.py (epsg_code_to_projection): Use
4            get_system_proj_file to read the epsg projections.  The old way
5            depended on the current directory being the top Thuban directory.
6    
7    2004-02-20  Bernhard Herzog  <[email protected]>
8    
9            * Extensions/svgexport/test/test_svgmapwriter.py
10            (TestVirtualDC.test_clippath): Remove a debug print
11    
12    2004-02-20  Bernhard Herzog  <[email protected]>
13    
14            * Extensions/svgexport/__init__.py: New.  Turn
15            Extensions/svgexport into a package.
16    
17            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
18            doc-string a bit.  The doc-string must come first, otherwise it's
19            not a doc-string.  The __future__ import must be the first thing
20            after the doc-string.  Use only double quotes in doc-strings.
21            Single quotes trip up emacs syntax highlighting if the text
22            contains apostrophes.
23    
24    2004-02-20  Bernhard Herzog  <[email protected]>
25    
26            * Extensions/svgexport/test/__init__.py,
27            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
28            suite for svgexport
29    
30            * test/runtests.py (find_test_modules): New. Function with the
31            module finding code from main.
32            (main): Use find_test_modules to figure out the default test
33            modules and take modules from Extensions.svgexport.test too.
34    
35    2004-02-19  Bernhard Herzog  <[email protected]>
36    
37            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
38            the mainwindow has a reference to the map of the initial session.
39            This fixes a bug introduced with the fix for RT#2245
40    
41    2004-02-19  Bernhard Herzog  <[email protected]>
42    
43            * Extensions/svgexport/svgsaver.py,
44            Extensions/svgexport/svgmapwriter.py,
45            Extensions/svgexport/maplegend.py: Added again.  This time in the
46            correct place.
47    
48    2004-02-17  Bernhard Herzog  <[email protected]>
49    
50            Fix for RT#2245
51    
52            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
53            instance variables before trying to create any windows.  Creating
54            windows can start an event loop if e.g. message boxes are popped
55            up for some reason, and event handlers, especially EVT_UPDATE_UI
56            may want to access things from the application.
57            (ThubanApplication.maps_changed): The mainwindow may not have been
58            created yet, so check whether it has been created before calling
59            its methods
60    
61            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
62            have a map
63    
64    2004-02-17  Bernhard Herzog  <[email protected]>
65    
66            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
67            Extensions/svgmapwriter.py, Extensions/maplegend.py,
68            extensions/svgexport/svgsaver.py,
69            extensions/svgexport/svgmapwriter.py,
70            extensions/svgexport/maplegend.py: Removed.  These files were in
71            the wrong places or didn't work at all.
72    
73    2004-02-16  Bernhard Herzog  <[email protected]>
74    
75            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
76            line
77    
78    2004-02-16  Bernhard Herzog  <[email protected]>
79    
80            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
81    
82    2004-02-15  Markus Rechtien  <[email protected]>
83            
84            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
85            to write a session to a file in SVG format.
86            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
87            to write a SVG map of a session.
88            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
89            in SVG format for the current session.
90    
91    2004-02-13  Bernhard Herzog  <[email protected]>
92    
93            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
94            can't be created, return immediately after displaying the error
95            message.
96    
97    2004-02-11  Bernhard Herzog  <[email protected]>
98    
99            Handle postgis tables with more than one geometry column.
100    
101            * Thuban/Model/postgisdb.py
102            (PostGISTable._fetch_table_information): Delegate the creation of
103            column objects to a different method so that we can extend that in
104            derived classes
105            (PostGISTable._create_col_from_description): New. Column object
106            creation part of _fetch_table_information
107            (PostGISShapeStore._create_col_from_description): New. Extend
108            inherited method to handle geometry columns
109            (PostGISShapeStore.__init__): New parameter geometry_column to
110            specify which geometry column to use.  Optional but mandatory for
111            tables with more than one geometry column
112            (PostGISShapeStore._fetch_table_information): Also use the name of
113            the geometry column when looking for the srid
114            (PostGISShapeStore.ShapeType): Also use the name of the geometry
115            column when looking for the shape type
116    
117            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
118            NonConnectionStore to changes in the PostGISShapeStore
119    
120            * test/test_postgis_db.py
121            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
122            PostGISShapeStore with tables having two geometry columns.
123    
124    2004-02-10  Bernhard Herzog  <[email protected]>
125    
126            Fix some postgis problems.  What remains to be done is real
127            handling of SRIDs as they affect how reprojection is done
128    
129            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
130            doc-string
131            (PostGISShapeStore._fetch_table_information): New. Extend
132            inherited method to retrieve srid
133            (PostGISShapeStore.BoundingBox): Handle tables without data.
134            extent yields NULL for those
135            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
136    
137            * test/test_postgis_db.py
138            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
139            for the special case of a table without any data
140            (TestPostGISShapestorePointSRID): New class with tests for a table
141            that uses srids
142            (PolygonTests): Fix a doc-string typo
143    
144            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
145            reference_systems with a specification of spacial reference
146            systems to create in the new db.
147            (PostgreSQLServer.new_postgis_db)
148            (PostgreSQLServer.get_static_data_db): New parameter
149            reference_systems to be passed through ultimately to
150            PostGISDatabase.  In new_postgis_db also check whether an existing
151            db already has the right srids
152            (PostgreSQLServer.get_default_static_data_db): Add srids and a
153            table that uses srids
154            (PostGISDatabase.initdb): Create the entries for the reference
155            systems
156            (PostGISDatabase.has_data): Add reference_systems parameter to
157            check for those too
158            (upload_shapefile): New parameter srid to create tables with a
159            specific srid
160    
161    2004-02-06  Frank Koormann  <[email protected]>
162    
163            * po/pt_BR.po: Fixed charset
164    
165    2004-02-05  Frank Koormann  <[email protected]>
166    
167            * po/pt_BR.po: Fixed format string for error message, missing %s
168            added (Thuban/UI/application.py:273)
169    
170    2004-02-03  Frank Koormann  <[email protected]>
171            
172            First version of Portuguese (Brazilian) translation
173    
174            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
175            Brazilian Portuguese by Eduardo Patto Kanegae.
176    
177            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
178            translators.
179    
180    
181    2004-01-22  Frank Koormann  <[email protected]>
182    
183            * Doc/manual/thuban-manual.xml: Added section on installation of
184            Thuban under Win32 systems. Fixed image path references in the postgis
185            section. Some minor source formattings.
186    
187    2004-01-21  Frank Koormann  <[email protected]>
188    
189            Make Thuban remember path selections (at least for one application run).
190    
191            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
192            attribute of application object. Path is a dictionary of
193            strings, currently with the items "data" and "projection".  
194            (Application.SetPath): New, stores path for the specified item.
195            (Application.Path): New, return path for the specified item.
196    
197            * Thuban/UI/mainwindow.py
198            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
199            MainWindow.AddLayer, MainWindow.AddRasterLayer,
200            MainWindow.TableOpen): Access "data" path information of the
201            application.
202            
203            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
204            Access "projection" path information of the application.
205    
206    2004-01-05  Bernhard Herzog  <[email protected]>
207    
208            * po/ru.po: Updated translations from Alex Shevlakov
209    
210    2004-01-05  Bernhard Herzog  <[email protected]>
211    
212            * po/Makefile, po/README: Move the description of how to generate
213            the translation statistics to the README.
214    
215    2003-12-23  Bernhard Herzog  <[email protected]>
216    
217            * NEWS: Update for 1.0.0
218    
219            * po/it.po: Another update from Maurizio Napolitano
220    
221    2003-12-23  Bernhard Herzog  <[email protected]>
222    
223            * po/it.po: Updated translation from Maurizio Napolitano
224    
225    2003-12-23  Bernhard Herzog  <[email protected]>
226    
227            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
228            for translation
229    
230            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
231            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
232            strings for translation
233    
234            * po/de.po: Update with the newly marked strings.
235    
236    2003-12-22  Bernhard Herzog  <[email protected]>
237    
238            * HOWTO-Release: Fix the places where version numbers have to be
239            updated
240    
241    2003-12-22  Bernhard Herzog  <[email protected]>
242    
243            * setup.py (setup call): 1.0.0, yeah!
244    
245            * Thuban/version.py (longversion): 1.0.0, yeah!
246    
247            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
248            1.0.0 namespace too
249    
250            * Thuban/Model/save.py (SessionSaver.write_session): Save with
251            1.0.0 namespace
252    
253            * test/test_load.py (LoadSessionTest.dtd)
254            (TestSingleLayer.file_contents)
255            (TestNonAsciiColumnName.file_contents)
256            (TestLayerVisibility.file_contents)
257            (TestClassification.file_contents, TestLabels.file_contents)
258            (TestLayerProjection.file_contents)
259            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
260            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
261            (TestPostGISLayerPassword.file_contents)
262            (TestLoadError.file_contents, TestLoadError.test): Update for
263            1.0.0 namespace
264    
265            * test/test_save.py (SaveSessionTest.dtd)
266            (SaveSessionTest.testEmptySession)
267            (SaveSessionTest.testSingleLayer)
268            (SaveSessionTest.testLayerProjection)
269            (SaveSessionTest.testRasterLayer)
270            (SaveSessionTest.testClassifiedLayer)
271            (SaveSessionTest.test_dbf_table)
272            (SaveSessionTest.test_joined_table)
273            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
274    
275    2003-12-22  Bernhard Herzog  <[email protected]>
276    
277            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
278            alignment flags are byte strings not unicode and that they have
279            valid values
280    
281            * test/test_load.py (TestLabelLayer): New. Test loading (and
282            indirectly saving) of maps with labels.
283    
284    2003-12-22  Bernhard Herzog  <[email protected]>
285    
286            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
287            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
288            unsubscribe all subscribers.
289            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
290            self.grid since it may already have been destroyed.
291            Fixes RT #2256
292    
293    2003-12-19  Bernhard Herzog  <[email protected]>
294    
295            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
296    
297    2003-12-16  Bernhard Herzog  <[email protected]>
298            
299            * debian/bitmappath.patch, debian/setup.py.patch:
300                    added to ensure compliance with FHS for debian
301            * debian/rules, debian/changelog:
302                added patches in rules to ensure compliance with FHS for debian
303    
304    2003-12-16  Bernhard Herzog  <[email protected]>
305    
306            * po/Makefile (mo): Make the output a bit nicer so that it prints
307            statistics about the translations. Add a comment how produce even
308            nicer statistics with sed.
309    
310    2003-12-09  Frank Koormann   <[email protected]>
311    
312            * Resources/Projections/defaults.proj:
313            French projection sample with correct accents (UNICODE).
314    
315    2003-12-05  Bernhard Herzog  <[email protected]>
316    
317            * MANIFEST.in: Add the devtools directory
318    
319            * setup.py (setup call): Use license instead of licence. This
320            silences a deprecation warning on Python 2.3
321    
322    2003-12-05  Frank Koormann   <[email protected]>
323    
324            Documentation synced with 1.0rc1
325    
326            * Doc/manual/thuban-manual.xml:
327            Minor formatting changes and references to database layers .
328            Introduction.Internationalization: New section on i18n.
329            MapManagement.AddingandRemovingLayers: Added item on database layers.  
330            MapManagement.TheLegend: Added section and screenshot on popup menu.
331            ProjectionManagement: Updated screenshot and sentence on EPSG.
332            Appendix.SupportedDataSources: Added PostGIS.
333            Appendix.WorkingwithPostGIS: New section.
334    
335            * Doc/manual/images/6_projection.png: Updated screenshot including
336            EPSG checkboxes.
337    
338            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
339    
340            * Doc/manual/images/app_postgis_add_layer.png,
341            Doc/manual/images/app_postgis_db_add.png,
342            Doc/manual/images/app_postgis_db_management.png:
343            New screenshots focussing on database layers
344    
345    2003-12-05  Frank Koormann   <[email protected]>
346    
347            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
348            write warning to stderr instead of rising a warning dialog
349    
350    2003-12-03  Bernhard Herzog  <[email protected]>
351    
352            Fix for RT #2243
353    
354            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
355            New. Like has_selected_layer but for shape layers only
356            (_has_selected_shape_layer): New. Like _has_selected_layer but for
357            shape layers only
358            (layer_show_table command, layer_jointable command): Use these
359            commands should only be available for shape layers
360    
361    2003-12-03  Bernhard Herzog  <[email protected]>
362    
363            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
364            publishers that are wx objects and may have been destroyed by wx
365            already. Fixes RT #2242.
366    
367    2003-12-03  Bernhard Herzog  <[email protected]>
368    
369            * po/ru.po: Updates from Alex Shevlakov
370    
371    2003-12-03  Silke Reimer <silkeintevation.de>
372    
373            * debian/control, debian/changelog: Added gdal-support to
374                    debian package, updated to new thuban version
375    
376    
377    2003-12-03  Bernhard Herzog  <[email protected]>
378    
379            * Thuban/Lib/version.py: New. Module for version number
380            manipulations. The version of make_tuple here also deals better
381            with more unusual version number strings, such as e.g.
382            "1.2+cvs20031111"
383    
384            * Thuban/version.py (make_tuple): Removed. It's now in
385            Thuban.Lib.version. Use that implementation instead.
386    
387            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
388    
389    2003-12-02  Bernhard Herzog  <[email protected]>
390    
391            * MANIFEST.in: Add debian files
392    
393            * setup.py (setup call): Add packages for the Extensions so that
394            they're installed too
395            (data_files): Add READMEs and sample data from some Extensions
396    
397            * NEWS: Add note about the extensions in binary packages
398    
399    2003-12-02  Bernhard Herzog  <[email protected]>
400    
401            * Thuban/Model/save.py (SessionSaver.write_session): Save files
402            with the thuban-1.0rc1
403    
404            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
405            thuban-1.0rc1 namespace too
406    
407            * test/test_save.py (SaveSessionTest.dtd)
408            (SaveSessionTest.testEmptySession)
409            (SaveSessionTest.testSingleLayer)
410            (SaveSessionTest.testLayerProjection)
411            (SaveSessionTest.testRasterLayer)
412            (SaveSessionTest.testClassifiedLayer)
413            (SaveSessionTest.test_dbf_table)
414            (SaveSessionTest.test_joined_table)
415            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
416            namespace
417    
418            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
419            namespace
420            (TestSingleLayer.file_contents)
421            (TestNonAsciiColumnName.file_contents)
422            (TestLayerVisibility.file_contents)
423            (TestClassification.file_contents, TestLabels.file_contents)
424            (TestLayerProjection.file_contents)
425            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
426            (TestPostGISLayer.file_contents)
427            (TestPostGISLayerPassword.file_contents)
428            (TestLoadError.file_contents, TestLoadError.test): Update to
429            thuban-1.0rc1 namespace
430    
431    2003-12-01  Bernhard Herzog  <[email protected]>
432    
433            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
434            nt to better match Intevation's current w32 setup
435    
436            * HOWTO-Release: Add note about updating MANIFEST.in
437    
438            * MANIFEST.in: Add the Extensions
439    
440            * NEWS: Update for 1.0rc1
441    
442    2003-12-01  Bernhard Herzog  <[email protected]>
443    
444            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
445            cards for the dialog so that shapefiles ending in all uppercase
446            SHP are listed too
447    
448    2003-11-28  Bernhard Herzog  <[email protected]>
449    
450            * Thuban/version.py (longversion): Update to 1.0rc1
451    
452            * setup.py (setup call): Update version to 1.0rc1. Use the
453            [email protected] email address as author email instead of my
454            personal one.
455    
456    2003-11-28  Bernhard Herzog  <[email protected]>
457    
458            * po/de.po: Update german translation.
459    
460    2003-11-28  Bernhard Herzog  <[email protected]>
461    
462            Unify the filenames stored in .thuban files so that the .thuban
463            files are more platform independend
464    
465            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
466            that they can be used on both windows and unix
467            (SessionSaver.prepare_filename): New. Handle all filename
468            transformations for filenames stored in the thuban file
469            (SessionSaver.write_data_containers, SessionSaver.write_layer):
470            Use prepare_filename
471    
472            * test/test_save.py (SaveSessionTest.testSingleLayer)
473            (SaveSessionTest.testLayerProjection)
474            (SaveSessionTest.testRasterLayer)
475            (SaveSessionTest.testClassifiedLayer)
476            (SaveSessionTest.test_dbf_table)
477            (SaveSessionTest.test_joined_table): Filenames are always stored
478            with slashes on all currently supported platforms so adapt all
479            tests to this
480    
481            * test/test_load.py (LoadSessionTest.filenames): With the new
482            filename scheme the filenames in the tests should be
483            understandable on all currently supported platforms so we turn
484            this into an empty list because we don't have to normalize them
485            anymore
486    
487    2003-11-28  Bernhard Herzog  <[email protected]>
488    
489            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
490            Add the ellipsoid to the projection since some Proj versions
491            complain if it's missing.
492    
493    2003-11-27  Bernhard Herzog  <[email protected]>
494    
495            Corect some bounding box projection problems
496    
497            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
498            version of ForwardBBox
499            (Projection._transform_bbox): New. common implementation of
500            ForwardBBox and InverseBBox
501            (Projection.ForwardBBox): Use _transform_bbox.
502    
503            * test/test_proj.py (TestProjection.test): Add test for
504            InverseBBox
505    
506            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
507            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
508            new InverseBBox method to determine the unprojected bounding box
509            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
510            bbox.
511    
512            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
513            Removed.
514            (TestLayer.test_arc_layer_with_projection): New. This test is
515            better able to test whether bounding boxes are projected correctly
516            than test_point_layer_with_projection
517    
518            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
519            InverseBBox to unproject bboxes
520    
521    2003-11-25  Bernhard Herzog  <[email protected]>
522    
523            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
524            source code.
525    
526    2003-11-25  Bernhard Herzog  <[email protected]>
527    
528            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
529            there for backwards compatibility and all code relying on that
530            should have been updated by now.
531    
532    2003-11-25  Bernhard Herzog  <[email protected]>
533    
534            * test/test_load.py (TestClassification.test): Add the missing
535            round trip test.
536            (TestClassification.file_contents): Update to the newest file
537            format
538    
539    2003-11-25  Bernhard Herzog  <[email protected]>
540    
541            Add very experimental (and possibly dangerous) extension to draw
542            polygons:
543    
544            * Extensions/drawshape/README: New. Brief installation
545            instructions
546    
547            * Extensions/drawshape/drawshape.py: New. Implementation of the
548            drawshape extensions
549    
550            * Extensions/drawshape/patch.diff: Patch to apply before the
551            extension can be used.
552    
553    2003-11-24  Bernhard Herzog  <[email protected]>
554    
555            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
556            (ShapefileStore.__init__): Factor opening the shapefile into a
557            separate method (the new _open_shapefile). This makes the code a
558            bit more readable but the real reason is that it makes some evil
559            hacks easier. :-)
560    
561    2003-11-24  Bernhard Herzog  <[email protected]>
562    
563            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
564            converter is specified for an attribute assume it's a string
565            containing only Latin1 characters. Update doc-string accordingly.
566            This change should fix many places where unicode objects might
567            accidentally enter Thuban.
568    
569            * test/test_load.py (TestNonAsciiColumnName): New test to check
570            what happens with column names in DBF files that contain non-ascii
571            characters
572    
573    2003-11-21  Bernhard Herzog  <[email protected]>
574    
575            Enable the experimental attribute editing again and introduce a
576            command line switch to actually activate it
577    
578            * Thuban/UI/main.py (options): New. Container for options set on
579            the commmand line
580            (main): Add the --enable-attribute-editing flag.
581    
582            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
583            editing is enabled use the grid ctrl which allows editing of the
584            values
585    
586            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
587            New. Just delegate this to the underlying table.
588    
589    2003-11-20  Bernhard Herzog  <[email protected]>
590    
591            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
592            Skip this test if run under non-posix systems since it only works
593            there
594    
595    2003-11-19  Bernhard Herzog  <[email protected]>
596    
597            * Thuban/Model/resource.py: Rework the way gdal support is
598            determined so that we can give a reason in the about why gdal is
599            not supported.
600            (gdal_support_status): New. Variable holding a string with the
601            reason for no gdal support
602    
603            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
604            not supported to the message
605    
606    2003-11-19  Bernhard Herzog  <[email protected]>
607    
608            Remove the old table interface and its test cases
609    
610            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
611            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
612            anymore
613    
614            * Thuban/Model/transientdb.py (TransientTableBase)
615            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
616            anymore
617    
618            * test/test_table.py: Removed since the old interface it tests is
619            gone.
620    
621            * test/runtests.py (main): The old table interface is gone and
622            with it the deprecation warnings so remove the code that turns
623            these warnings into errors
624    
625    2003-11-19  Bernhard Herzog  <[email protected]>
626    
627            * test/test_table.py: Revert to revision 1.5 again. Changing the
628            tests to use the new table interface is completely wrong since the
629            whole purpose of the tests in this module is to test the old
630            interface.
631    
632    2003-11-18  Bernhard Herzog  <[email protected]>
633    
634            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
635            New. Test whether the connection matches a set of connection
636            parameters
637    
638            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
639            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
640            for existing connections with the same parameters and break out of
641            the loop correctly.
642    
643            * test/test_postgis_db.py (TestBriefDescription)
644            (TestPostGISSimple.test_brief_description): Rename
645            TestBriefDescription to TestPostGISSimple and the test method to
646            test_brief_description so that we can add more test methods.
647            (TestPostGISSimple.test_matches_parameters): New. Test the new
648            MatchesParameters method
649    
650    2003-11-18  Bernhard Herzog  <[email protected]>
651    
652            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
653            _was_destroyed, to indicate whether an publisher instance has
654            already been destroyed.
655            (Publisher.Unsubscribe): Only disconnect if the publisher has not
656            been destroyed yet.
657            (Publisher.Destroy): Set the _was_destroyed flag to true.
658    
659            * test/test_connector.py
660            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
661            calling Unsubscribe after Destroy doesn't raise an exception
662    
663    2003-11-14  Bernhard Herzog  <[email protected]>
664    
665            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
666            typo in doc-string
667    
668    2003-11-13  Bernhard Herzog  <[email protected]>
669    
670            Quote table and column names properly for postgis.
671    
672            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
673            quote an identifier for use in an sql statement
674            (PostGISColumn.__init__): Add the quoted_name attribute
675            (PostGISTable.__init__): New instance variable quoted_tablename
676            (PostGISTable._fetch_table_information): Use the quoted table
677            name. New isntance variable quoted_geo_col with a quoted version
678            of geometry_column
679            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
680            (PostGISTable.RowOrdinalToId): Use the quoted table name
681            (PostGISTable.ReadValue, PostGISTable.ValueRange)
682            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
683            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
684            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
685            Use quoted table and column names
686    
687            * test/test_postgis_db.py (TestPostGISSpecialCases)
688            (TestPostGISIgnoredColumns): Rename the class to
689            TestPostGISSpecialCases because that better describes the new
690            cases
691            (TestPostGISSpecialCases.test_unsupported_types)
692            (TestPostGISSpecialCases.test): Rename the method to
693            test_unsupported_types because we need a more descriptive name now
694            that there are more methods
695            (TestPostGISSpecialCases.test_table_name_quoting)
696            (TestPostGISSpecialCases.test_column_name_quoting)
697            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
698            cases to test quoting of table and column names in PostGISTable
699            and PostGISShapeStore
700    
701            * test/postgissupport.py
702            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
703            AddGeometryColumn desn't support table or column names with sapces
704            or double quotes
705    
706    2003-11-12  Jan-Oliver Wagner <[email protected]>
707    
708            * Extensions/wms/__init__.py: New: Init to make this
709            directory a package.
710    
711            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
712    
713    2003-11-11  Bernhard Herzog  <[email protected]>
714    
715            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
716            Constant for the file woth deprecated epsg projections
717            (get_system_proj_file): Update doc-string
718    
719            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
720            above the EPS widgets, introduce a check box for the deprecated
721            eps projections and a label for the epsg widgets
722            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
723            too
724    
725    2003-11-11  Bernhard Herzog  <[email protected]>
726    
727            Avoid warnings when run under Python 2.3
728    
729            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
730            (BaseRenderer.draw_label_layer): Coordinates must be ints.
731    
732            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
733            real method so that we can convert to int.
734            (MapRenderer.label_font): The font size mist be an int.
735    
736            * Thuban/UI/common.py (Color2wxColour): The color values must be
737            ints. Also, remove the unnecessary asserts.
738    
739            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
740            (TestUnicodeStrings.test): Python source code should not contain
741            non-ascii characters unless an encoding is specified in the file.
742            Therefore use \x escapes in the string literals for non-ascii
743            characters.
744    
745    2003-11-11  Bernhard Herzog  <[email protected]>
746    
747            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
748            parameter so that this function can be used for all proj files in
749            Resource/Projections
750            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
751            get_system_proj_file
752    
753            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
754            ProjFile self.__sysProjFile use a dictionary of system ProjFile
755            objects self._sys_proj_files
756            (ProjFrame.build_dialog): Adapt to the new changes in the
757            ProjectionList constructor. Add a check button to toggle whether
758            EPSG projections are shown
759            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
760            events.
761            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
762            the busy cursor if the files have not yet been loaded by the
763            dialog.
764            (ProjFrame.load_system_proj): Add a parameter for the name of the
765            proj file. Maintain the dictionary of system projections
766            self._sys_proj_files
767    
768            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
769            user_projs parameters into one parameter proj_files which is a
770            list of proj files.
771            (ProjectionList._subscribe_proj_files)
772            (ProjectionList._unsubscribe_proj_files): New. Move
773            subscription/unsubscription of projfile messages to separate
774            methods
775            (ProjectionList.Destroy): The unsubscribe is now done in
776            _unsubscribe_proj_files
777            (ProjectionList.update_projections): We now have a list of proj
778            file objects
779            (ProjectionList.SetProjFiles): New method to set a new list of
780            proj file objects
781    
782            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
783            Specify explicitly which system proj file to load.
784    
785    2003-11-11  Bernhard Herzog  <[email protected]>
786    
787            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
788            instance variables to cut cyclic references. The GC would have
789            collected the loader eventually but it can happen that it doesn't
790            run at all until thuban is closed (2.3 but not 2.2 tries a bit
791            harder and forces a collection when the interpreter terminates)
792            (load_session): Call the handler's Destroy method to make sure
793            that it gets garbage collected early. Otherwise it will be
794            collected very late if at all and it holds some references to e.g.
795            shapestores and the session which can lead to leaks (of e.g. the
796            temporary files)
797    
798            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
799            resource leak in load_session
800    
801    2003-11-10  Bernhard Herzog  <[email protected]>
802    
803            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
804            extensions are to be rendered.
805            (_renderer_extensions): New. List with renderer for layers in
806            extensions
807            (add_renderer_extension): New. Add a renderer extension
808            (init_renderer_extensions): New. Init the renderer extensions
809            (BaseRenderer.render_map_incrementally): Search
810            _renderer_extensions for how to draw unknown layer types
811            (BaseRenderer.draw_raster_data): Add format parameter so that
812            formats other than BMP can be drawn
813            (BaseRenderer.draw_raster_layer): Pass an explicit format to
814            draw_raster_data
815    
816            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
817            strings of the format parameter of draw_raster_data method to wx
818            constants
819            (MapRenderer.draw_raster_data): Add the format parameter and use
820            raster_format_map to map it to the right wxwindows constant for
821            wxImageFromStream
822    
823            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
824            the format parameter and record it
825            (TestBaseRenderer.test_raster_no_projection): check the format
826            paramter of the draw_raster_data method
827            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
828            extension facility
829    
830    2003-11-07  Bernhard Herzog  <[email protected]>
831    
832            Tweak the usage of the sqlite database to make common use cases
833            more responsive. In most cases copying the data to the sqlite
834            database takes so long that using sqlite doesn't have enough
835            advantages.
836    
837            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
838            comments about performance and query the min and max in separate
839            statements because only that way will indexes be used.
840            (TransientTableBase.UniqueValues): Add some comments about
841            performance.
842            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
843            Do not copy the data to the transient DB but use the transient
844            copy if it exists. See the new comments for the performance trade
845            offs
846    
847            * test/test_transientdb.py
848            (TestTransientTable.test_auto_transient_table): Make sure that the
849            data is copied to the transient database at some point.
850    
851    2003-11-03  Bernhard Herzog  <[email protected]>
852    
853            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
854            globals to locals so that it's a bit faster
855    
856    2003-11-03  Bernhard Herzog  <[email protected]>
857    
858            * Thuban/UI/baserenderer.py
859            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
860            method. ReadValue is faster than ReadRowAsDict since it only reads
861            one cell especially now that the dbf file objects actually
862            implement it.
863    
864            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
865            read_attribute method of the dbf objects
866    
867    2003-11-03  Bernhard Herzog  <[email protected]>
868    
869            * Extensions/profiling/profiling.py (popup_dialog_box): New config
870            variable to indicate whether the result should be shown in a
871            dialog box
872            (profile_screen_renderer, time_screen_renderer): Only show a
873            dialog box if popup_dialog_box is true.
874            (profile_screen_renderer): Flush stdout after the printing the
875            first part of the "profiling..." message
876    
877            * Thuban/UI/baserenderer.py
878            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
879            brushes for the groups so that they're not created over and over
880            again
881    
882            * Thuban/Model/classification.py (Classification.__getattr__)
883            (Classification._compile_classification)
884            (Classification._clear_compiled_classification): New. Methods to
885            manage a 'compiled' representation of the classification groups
886            which is created on demand
887            (Classification.InsertGroup, Classification.RemoveGroup)
888            (Classification.ReplaceGroup): reset the compiled representation
889            (Classification.FindGroup): Use the compiled representation to
890            find the matching group
891            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
892    
893    2003-10-31  Bernhard Herzog  <[email protected]>
894    
895            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
896            Send a CLASS_CHANGED message
897            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
898            not return the removed group since it wasn't used.
899    
900            * test/test_classification.py
901            (TestClassification.test_set_default_group): New. Test the
902            SetDefaultGroup method
903            (TestClassification.test_insert_group): New. Test the InsertGroup
904            method
905            (TestClassification.test_remove_group): New. Test the RemoveGroup
906            method
907            (TestClassification.test_replace_group): New. Test the
908            ReplaceGroup method
909    
910    2003-10-31  Bernhard Herzog  <[email protected]>
911    
912            * test/test_classification.py (TestClassification.setUp):
913            Subscribe to the CLASS_CHANGED messages
914            (TestClassification.tearDown): New. Destroy the classification
915            properly
916            (TestClassification.test_defaults): Add tests for the default line
917            width and whether no messages were sent yet
918            (TestClassification.test_set_default_properties): Add tests for
919            messages and setting the default line width
920            (TestClassification.test_add_singleton)
921            (TestClassification.test_add_range)
922            (TestClassification.test_multiple_groups): Add tests for messages
923    
924    2003-10-31  Bernhard Herzog  <[email protected]>
925    
926            Some more refactoring in preparation for new tests:
927    
928            * test/test_classification.py (TestClassification.setUp): New.
929            Instantiate the classification here. Update the test methods
930            accordingly.
931            (TestClassification.test_multiple_groups): Make sure that the two
932            singletons matching 1 are considered different.
933    
934    2003-10-31  Bernhard Herzog  <[email protected]>
935    
936            * test/test_classification.py (red, green, blue): New. These
937            constants were used in several cases. Update the relevant methods.
938            (TestClassification.test_defaults)
939            (TestClassification.test_set_default_properties)
940            (TestClassification.test_add_singleton)
941            (TestClassification.test_add_range)
942            (TestClassification.test_multiple_groups)
943            (TestClassification.test_deepcopy): New. These were formerly all
944            part of the single method test.
945            (TestClassification.test_deepcopy): Removed.
946            (TestClassIterator): Removed. The test case is now a method of
947            TestClassification since it tests part of the public interface of
948            Classification
949            (TestClassification.test_iterator): New. Used to be
950            TestClassIterator effectively
951    
952    2003-10-31  Jan-Oliver Wagner <[email protected]>
953    
954            GUIfied the functions of the profiling extension.
955    
956            * /Extensions/profiling/__init__.py: New: Init to make this
957            directory a package.
958    
959            * Extensions/profiling/profiling.py: Moved menu entries to
960            the Extensions menu. Applied _() for strings.
961            (profile_screen_renderer): Catch the detailed printout and present
962            it in a dialog.
963            (time_screen_renderer): Raise a dialog to present the result instead
964            of printing it to stdout.
965    
966    2003-10-31  Bernhard Herzog  <[email protected]>
967    
968            * test/test_classification.py (TestClassGroupProperties)
969            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
970            (TestClassGroupSingleton, TestClassIterator, TestClassification):
971            Split TestClassification into several classes, one for each class
972            being tested. TestClassification itself now only tests
973            Classification. This split makes changes to the tests a bit easier
974    
975    2003-10-31  Bernhard Herzog  <[email protected]>
976    
977            * Extensions/profiling/profiling.py: New. Extension to measure
978            Thuban performance
979    
980    2003-10-31  Frank Koormann <[email protected]>
981    
982            Added two items to legend popup menu: Remove Layer and Show Layer Table
983    
984            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
985            LegendPanel._OnShowTable): New event handlers, call the corresponding
986            mainwindow methods.
987            (LegendTree._OnRightClick): Added items to popup menu.
988    
989    2003-10-30  Bernhard Herzog  <[email protected]>
990    
991            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
992            EVT_WINDOW_DESTROY
993            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
994            nothing but is convenient for the derived classes.
995    
996            * Thuban/UI/tableview.py
997            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
998            Unsubscribe the messages here not in OnClose because that might
999            get called multiple times. Fixes RT #2196
1000            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
1001            anymore.
1002    
1003            * README: Update the minimum requirement for wxPython. Since we
1004            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
1005            the version in which that was introduced for all platforms
1006    
1007    2003-10-30  Frank Koormann <[email protected]>
1008    
1009            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
1010            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
1011            frame.
1012    
1013    2003-10-30  Jan-Oliver Wagner <[email protected]>
1014    
1015            Improved APR import extension, added further EPSG definitions
1016            and some cleanup regarding string class.
1017    
1018            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
1019            Added test for alias 'longlat'.
1020    
1021            * Resources/Projections/epsg-deprecated.proj: New. Contains
1022            deprecated EPSG definitions.
1023    
1024            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
1025            the variable names for objects.
1026    
1027            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
1028            Copied from importAPR and provided with documentation.
1029    
1030            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
1031            Moved to apr.py.
1032            (APR_View): Added object ref 'ITheme'.
1033    
1034            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
1035            split function by corresponding use of the string class method.
1036    
1037            * Thuban/Model/xmlwriter.py: Replaced string replace function by
1038            corresponding string method.
1039    
1040    2003-10-29  Bernhard Herzog  <[email protected]>
1041    
1042            * Thuban/UI/baserenderer.py
1043            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
1044            special case of a classification that only has the default group
1045    
1046    2003-10-27  Bernhard Herzog  <[email protected]>
1047    
1048            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
1049    
1050            * po/de.po: Update.
1051    
1052            * Thuban/UI/application.py
1053            (ThubanApplication.ShowExceptionDialog): Handle translation of the
1054            dialog message properly
1055    
1056    2003-10-27  Bernhard Herzog  <[email protected]>
1057    
1058            Rework how localization works so that we use wx's translation
1059            functions when running Thuban as a normal application but not when
1060            we don't need any UI, such as in the test suite. See the comment
1061            in Thuban/__init__.py for details
1062    
1063            * Thuban/__init__.py (_): Add one level of indirection to make the
1064            translation handling more flexible and to make it possible to use
1065            either wx's translation services or not.
1066            (gettext_identity, translation_function_installed)
1067            (install_translation_function): New function to help with this
1068    
1069            * Thuban/UI/__init__.py: Install the wx specific translation
1070            function if it's OK to do that
1071    
1072            * test/support.py (initthuban): Install a dummy translation
1073            function so that importing Thuban.UI doesn't install a wx specific
1074            one for which would need to import wxPython
1075    
1076    2003-10-27  Bernhard Herzog  <[email protected]>
1077    
1078            * HOWTO-Release: Source archives should be created first and the
1079            binary packages should be created from the source archives.
1080            There's an official debian package now so there's no need to test
1081            the rpm on debian anymore
1082    
1083    2003-10-27  Bernhard Herzog  <[email protected]>
1084    
1085            Several rendering changes:
1086    
1087             - Render the selection into a separate bitmap so that only that
1088               bitmap needs to be redrawn when the selection changes
1089    
1090             - Render incrementally showing previews and allowing interaction
1091               before rendering is complete
1092    
1093             - Update the renderer interface a bit. Most parameters of
1094               RenderMap are now parameters of the constructor
1095    
1096            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
1097            and the update region as parameters. Update the doc-string
1098            (BaseRenderer.render_map_incrementally): New. Generator function
1099            to renders the map incrementally
1100            (BaseRenderer.render_map): Remove the map argument (it's now in
1101            the constructor) and simply iterate over the
1102            render_map_incrementally generator to draw the map.
1103            (BaseRenderer.draw_shape_layer_incrementally)
1104            (BaseRenderer.draw_shape_layer): Renamed to
1105            draw_shape_layer_incrementally and changed into a generator that
1106            yields True every 500 shapes. Used by render_map_incrementally to
1107            render shape layers incrementally
1108    
1109            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
1110            map and region parameters which are now in the constructor
1111            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
1112            the inherited render_map_incrementally.
1113            (BaseRenderer.draw_shape_layer): Removed.
1114            (ScreenRenderer.draw_selection_incrementally): New. The selection
1115            drawing part of the removed draw_shape_layer as a generator
1116            (ScreenRenderer.layer_shapes): Update because of the region
1117            parameter change
1118            (ExportRenderer.__init__): New. Extend the inherited constructor
1119            with the destination region for the drawing
1120            (ExportRenderer.RenderMap): Removed the map and region parameters
1121            which are now in the constructor
1122    
1123            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
1124            bitmap suitable for a preview in a tool
1125            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
1126            bitmap
1127            (MapPrintout.draw_on_dc): Adapt to new renderer interface
1128            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
1129            exists
1130            (MapCanvas.OnIdle): Update the logic to deal with incremental
1131            rendering and the selection bitmap
1132            (MapCanvas._do_redraw): Handle the instantiation of the render
1133            iterator and the redraws during rendering
1134            (MapCanvas._render_iterator): New. Generator to incrementally
1135            redraw both bitmaps
1136            (MapCanvas.Export): Adapt to new renderer interface.
1137            (MapCanvas.full_redraw): Reset the selection bitmap and the
1138            renderer iterator too
1139            (MapCanvas.redraw_selection): New. Force a redraw of the selection
1140            bitmap
1141            (MapCanvas.shape_selected): Only redraw the selection bitmap
1142    
1143            * test/test_baserenderer.py
1144            (TestBaseRenderer.test_polygon_no_projection)
1145            (TestBaseRenderer.test_raster_no_projection)
1146            (TestBaseRenderer.test_point_map_projection)
1147            (TestBaseRenderer.test_point_layer_and_map_projection)
1148            (TestBaseRenderer.test_point_layer_projection)
1149            (TestBaseRenderer.test_point_with_classification): Adapt to new
1150            renderer interface
1151    
1152    2003-10-24  Bernhard Herzog  <[email protected]>
1153    
1154            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
1155            (point_in_polygon_shape, shape_centroid): Raise an exception if
1156            the shape can't be read. Previously invalid shape ids would lead
1157            to a segfault.
1158    
1159            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
1160            New. test whether an exception is raised for invalid shape ids
1161    
1162    2003-10-24  Jan-Oliver Wagner <[email protected]>
1163    
1164            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
1165            as alias for 'latlong'.
1166    
1167            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
1168            as alias for 'latlong'.
1169    
1170    2003-10-24  Jan-Oliver Wagner <[email protected]>
1171    
1172            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
1173            the projection even for the UnknownPanel.
1174            (UnknownProjPanel.__init__): Define the text and create the textctrl
1175            widget.
1176            (UnknownProjPanel._DoLayout): Replaced static text widget by the
1177            textctrl created in __init__.
1178            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
1179            including the parameters of the projection.
1180            
1181    2003-10-24  Jan-Oliver Wagner <[email protected]>
1182    
1183            * Resources/Projections/epsg.proj: New. This is a list of
1184            EPSG codes with parameters for proj. The list has been
1185            generated using devtools/create_epsg.py based on the
1186            file nad/epsg of the proj 4.4.7 package. Four projection
1187            definitions have been deleted as they are not accepted by proj:
1188            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
1189            and "HD72 / EOV".
1190    
1191    2003-10-22  Bernhard Herzog  <[email protected]>
1192    
1193            Some more tweaks to the projection dialog which should fix RT
1194            #1886.
1195    
1196            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
1197            the ProjFile's messages and call the base class methods correctly
1198            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
1199            flag on the newly selected item too. Otherwise some other item is
1200            focused and the first time the focus is moved with the keyboard
1201            the selection moves in unexpected ways.
1202    
1203            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
1204            focus on the OK button, only on the projection list. That way the
1205            list really has the focus initially
1206            (ProjFrame.OnClose): Call the projection list's Destroy method to
1207            make it unsubscribe all messages
1208    
1209    2003-10-21  Bernhard Herzog  <[email protected]>
1210    
1211            Rework the projection dialog to fix a few bugs, including RT 2166
1212            and most of 2168
1213    
1214            * Thuban/UI/projlist.py: New. The class ProjectionList is a
1215            special wxListCtrl to show a list of projections in a more MVC
1216            fashion
1217    
1218            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
1219            throughout the class. The main change is to use the ProjectionList
1220            class instead of a normal wxListBox. Also, add an explicit
1221            "Unknown" projection to the projection choice control.
1222            (ProjPanel.__init__): Add an "unknown" ellipsoid
1223            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
1224            instantiation of the panel's controls to make the tab-order more
1225            natural
1226    
1227    2003-10-21  Bernhard Herzog  <[email protected]>
1228    
1229            * test/test_load.py (TestSingleLayer.file_contents)
1230            (TestSingleLayer.test): Add non-ascii characters to the titles of
1231            session, map and layer. This is effectively a port of the
1232            TestUnicodeStrings test in test_load_0_8.py which for some reason
1233            was only added there.
1234    
1235            * test/test_load_0_9.py (TestSingleLayer.file_contents)
1236            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
1237            characters to the titles of session, map and layer,.
1238    
1239    2003-10-21  Bernhard Herzog  <[email protected]>
1240    
1241            Add EPSG projection handling to .thuban files
1242    
1243            * test/test_save.py (SaveSessionTest.dtd)
1244            (SaveSessionTest.testEmptySession)
1245            (SaveSessionTest.testLayerProjection)
1246            (SaveSessionTest.testRasterLayer)
1247            (SaveSessionTest.testClassifiedLayer)
1248            (SaveSessionTest.test_dbf_table)
1249            (SaveSessionTest.test_joined_table)
1250            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
1251            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
1252            use a and epsg projection to test saving them
1253    
1254            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
1255            namespace
1256            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1257            (TestLayerProjection.file_contents)
1258            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1259            (TestPostGISLayer.file_contents)
1260            (TestPostGISLayerPassword.file_contents)
1261            (TestLoadError.file_contents, TestLoadError.test): Update to use
1262            1.0-dev namespace
1263            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
1264            use 1.0-dev namespace and use an EPSG projection to test whether
1265            loading it works
1266    
1267            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
1268            as of Thuban 0.9. These are now tests to determine whether Thuban
1269            can still read files generated by Thuban 0.9
1270    
1271            * Thuban/Model/save.py (SessionSaver.write)
1272            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
1273            namespace
1274            (SessionSaver.write_projection): Write the projection's epsg
1275            attribute
1276    
1277            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
1278            thuban-1.0-dev.dtd namespace
1279            (SessionLoader.check_attrs): Allow a callable object as conversion
1280            too
1281            (SessionLoader.start_projection, SessionLoader.end_projection)
1282            (SessionLoader.start_parameter): Handle the epsg attribute and
1283            rename a few instance variables to lower case
1284    
1285            * Resources/XML/thuban-1.0.dtd: New. Only difference to
1286            thuban-0.9.dtd is the epsg attribute for projections.
1287    
1288    2003-10-21  Bernhard Herzog  <[email protected]>
1289    
1290            * test/runtests.py (main): Let the user specify which tests to run
1291            on the command line
1292    
1293            * test/support.py (ThubanTestResult.getDescription): Override to
1294            give a better short description. The description can be used as a
1295            parameter to run_tests to run that particular test in isolation.
1296    
1297    2003-10-21  Frank Koormann   <[email protected]>
1298    
1299            Popup menu for legend. Scheduled for the 1.2 release this was too
1300            simple to implement: The popup menu is bound to the legend tree, while
1301            the events are hanlded by its anchestor, the legend panel. This
1302            allows reuse of all the event handlers already implemented for the
1303            legend toolbar buttons.
1304    
1305            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
1306            to add handlers for the events issued by the popup menu.
1307            (LegendPanel._OnToggleVisibility): Handler for toggling layer
1308            visibility event
1309            (LegendPanel._OnProjection): Handler for layer projection event.
1310            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
1311            (LegendTree._OnRightClick): Event handler for right click, select item
1312            and pop up menu.
1313            (LegendTree.ToggleVisibility): Toggle layer visibility
1314            (LegendTree.LayerProjection): Raise layer projection dialog for
1315            current layer.
1316    
1317    2003-10-21  Bernhard Herzog  <[email protected]>
1318    
1319            * Resources/Projections/defaults.proj: Use correct DOCTYPE
1320            declaration. The top-level element is projectionlist not projfile
1321    
1322    2003-10-20  Bernhard Herzog  <[email protected]>
1323    
1324            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
1325            method to write a projfile and display a busy cursor and error
1326            dialogs.
1327            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
1328            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
1329            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
1330            busy cursor while loading the user and system prj files.
1331    
1332    2003-10-16  Bernhard Herzog  <[email protected]>
1333    
1334            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
1335            ProjFile objects
1336            (clear_proj_file_cache): New function to clear the cache. Mainly
1337            useful for use by the test suite
1338            (read_proj_file): Use the cache.
1339    
1340            * test/test_proj.py (TestProjFile): Clarify the doc-string
1341            (ProjFileReadTests): Update doc-string
1342            (ProjFileReadTests.test_get_system_proj_file): Check whether the
1343            system proj files is cached.
1344            (ProjFileLoadTestCase): New base class for the proj file tests
1345            derived from support.FileLoadTestCase to provide some common
1346            behavior.
1347            (TestLoadingProjFile)
1348            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
1349            (TestProjFileWithInvalidParameters.file_contents): Derive from
1350            ProjFileLoadTestCase
1351            (TestLoadingProjFile.test_caching): New. Test whether the cache
1352            works
1353    
1354    2003-10-16      Silke Reimer    <[email protected]>
1355    
1356            * debian/*: New directory with configuration files for building a thuban
1357              deb-package.
1358    
1359    2003-10-14  Bernhard Herzog  <[email protected]>
1360    
1361            * test/test_proj.py: Execute support.run_tests when run as
1362            __main__ so that missing unsubscribes are detected
1363            (TestProjFile.tearDown): Destroy the proj_file properly
1364    
1365    2003-10-14  Bernhard Herzog  <[email protected]>
1366    
1367            * Thuban/Model/messages.py (PROJECTION_ADDED)
1368            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
1369            the ProjFile objects
1370    
1371            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
1372            easily send messages when the projections change
1373            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
1374            when the change was successful
1375    
1376            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
1377            proj file messages
1378            (TestProjFile.test_add_remove)
1379            (TestProjFile.test_remove_non_existing)
1380            (TestProjFile.test_replace)
1381            (TestProjFile.test_replace_non_existing): Test whether the right
1382            messages are sent
1383    
1384    2003-10-14  Bernhard Herzog  <[email protected]>
1385    
1386            * test/test_proj.py (TestProjFile.test): Refactor into several
1387            tests
1388            (TestProjFile.test_add_remove)
1389            (TestProjFile.test_remove_non_existing)
1390            (TestProjFile.test_replace)
1391            (TestProjFile.test_replace_non_existing): Some of the new
1392            individual test cases
1393            (TestProjFileSimple): New class for the rest of the test cases
1394            that came out of the refactoring
1395            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
1396            derived classes don't have to
1397    
1398    2003-10-13  Bernhard Herzog  <[email protected]>
1399    
1400            Add an optional EPSG code to the projection objects and extend the
1401            .proj file format accordingly.
1402    
1403            * Resources/XML/projfile.dtd (element projection): Add epsg
1404            attribute
1405    
1406            * Thuban/Model/proj.py (Projection.__init__): New parameter and
1407            instance variable epsg. Update doc-string
1408            (Projection.EPSGCode, Projection.Label): New methods to provide
1409            access to EPSG code and a label for use in dialogs
1410    
1411            * Thuban/Model/resource.py (ProjFileReader.start_projection)
1412            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
1413            Handle the epsg code attribute when reading or writing proj files
1414    
1415            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
1416            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
1417            (ProjFrame.__FillAvailList): Use the projection's Label method to
1418            get the string for the list box
1419    
1420            * test/test_proj.py (TestProjection.test_label)
1421            (TestProjection.test_label_epsg)
1422            (TestProjection.test_epsgcode_for_non_epsg_projection)
1423            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
1424            for the label and EPSGCode methods
1425            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
1426            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
1427            objects in the test cases and put the expected contents into the
1428            test case methods too. Update doTestWrite accordingly
1429            (TestLoadingProjFile)
1430            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
1431            read tests from TestProjFile.
1432            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
1433            tests are now in the new classes.
1434            (sample_projfile, sample_projfile_data)
1435            (sample_projfile2, sample_projfile_data2): Removed. Not used
1436            anymore.
1437            (TestProjFile.test_read_unreadable_file): No need to reset the
1438            permissions at the end anymore since we use a unique filename
1439    
1440    2003-10-13  Bernhard Herzog  <[email protected]>
1441    
1442            * test/test_proj.py: Some more refactoring of the test cases
1443            (ProjFileTest): New base class for the proj file tests.
1444            (TestProjFile): Derive from ProjFileTest
1445            (TestProjFile.test_read_unreadable_file)
1446            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
1447            the new filename method to get a unique filename
1448            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
1449            (WriteProjFileTests): New class for proj file write tests.
1450            Contains the write test that were in TestProjFile originally.
1451    
1452    2003-10-13  Bernhard Herzog  <[email protected]>
1453    
1454            * test/test_proj.py (TestProjFile.testRead)
1455            (TestProjFile.test_read_non_existing_file)
1456            (TestProjFile.test_read_unreadable_file)
1457            (TestProjFile.test_read_empty_file): Split into several methods.
1458    
1459    2003-10-10  Bernhard Herzog  <[email protected]>
1460    
1461            * Thuban/UI/sizers.py: New file with custom sizers.
1462    
1463            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
1464            all projection type specific panels and put them into a
1465            NotebookLikeSizer. This way the dialog doesn't change its size
1466            when a different projection is selected
1467            (ProjFrame.__init__): Rename projection_panels
1468            projection_panel_defs and reuse projection_panels for a list of
1469            the instantiated panels.
1470            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
1471            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
1472            the panels
1473            (UnknownProjPanel._DoLayout): Place the newlines in the message
1474            differently to make the panel narrower.
1475            (TMPanel._DoLayout): Layout the parameters in one column.
1476    
1477    2003-10-10  Bernhard Herzog  <[email protected]>
1478    
1479            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
1480            that contains all the setup for the dialog's widgets, layout and
1481            event handling.
1482            (__): Call build_dialog to build the dialog.
1483            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
1484            Their functionality is now in build_dialog
1485            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
1486            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
1487            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
1488            different widget names and hierarchy introduced with build_dialog.
1489    
1490    2003-10-10  Bernhard Herzog  <[email protected]>
1491    
1492            * README: Fix typo.
1493    
1494    2003-10-09  Bernhard Herzog  <[email protected]>
1495    
1496            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
1497            projection is already in the list. This is *a lot* faster when
1498            loading files with hundreds of projections since it saves a linear
1499            search. OTOH this will allow adding the same projection to the
1500            user.proj file multiple times in the projection dialog but we'll
1501            deal with that later
1502    
1503    2003-10-09  Jan-Oliver Wagner <[email protected]>
1504    
1505            * devtools: New. Directory for developer tools that are not intended
1506            for the regular user.
1507    
1508            * devtools/create_epsg.py: New. Convert the epsg file of proj into
1509            a python .proj file.
1510    
1511    2003-10-09  Bernhard Herzog  <[email protected]>
1512    
1513            * test/test_proj.py
1514            (TestProjection.test_get_parameter_without_equals_sign): New. Test
1515            whether GetParameter handles parameters without "=" sign correctly
1516    
1517            * Thuban/Model/proj.py (Projection.GetParameter): Handle
1518            parameters that do not contain a "=". Update the doc-string
1519    
1520    2003-10-08  Bernhard Herzog  <[email protected]>
1521    
1522            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
1523            length limit on the projname text control
1524    
1525    2003-10-08  Bernhard Herzog  <[email protected]>
1526    
1527            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1528            (TestProjection.test_get_projection_units_normal): New. Tests for
1529            the Projection.GetProjectedUnits method
1530    
1531    2003-10-08  Jan-Oliver Wagner <[email protected]>
1532    
1533            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1534            Added missing 'val' parameter.
1535    
1536    2003-10-08  Bernhard Herzog  <[email protected]>
1537    
1538            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1539            projection type of the currently selected projection is not known,
1540            i.e. there's no panel for it, use the UnknownProjPanel
1541            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1542            the actual replacing of the proj panel into the new method
1543            _show_proj_panel.
1544            (UnknownProjPanel): Add doc-string.
1545            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1546            that the panel is not so wide.
1547    
1548    2003-10-08  Bernhard Herzog  <[email protected]>
1549    
1550            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1551            too. Update the doc-string
1552            (get_proj_files): Removed. It wasn't used anywhere
1553            (get_system_proj_files, get_system_proj_file): Rename to
1554            get_system_proj_file and return the ProjFile object and not a list
1555            of ProjFile objects. Update the callers.
1556            (get_user_proj_files, get_user_proj_file): Rename to
1557            get_user_proj_file return the ProjFile object and not a list of
1558            ProjFile objects. Update the callers.
1559            (ProjFileReader.__init__): New instance variable for the warnings.
1560            Rename the __pf ivar to projfile. Update the methods referring to
1561            __pf
1562            (ProjFileReader.end_projection): Catch any errors raised when
1563            instantiating the projection and record that as an error. The
1564            projection will not be in the final ProjFile object.
1565            (ProjFileReader.GetWarnings): New method to return the warnings.
1566    
1567            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1568            show the warnings from the projfile reader
1569            (ProjFrame._OnImport): Deal with any warnings returned by
1570            read_proj_file
1571            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1572            get_system_proj_file or get_user_proj_file.
1573    
1574            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1575            (TestProjFileWithInvalidParameters.file_contents): New test cases
1576            to test whether read_proj_file handles invalid projection
1577            parameters correctly
1578            (TestProjFile.test_get_system_proj_file): New. Simple test for
1579            resource.get_system_proj_file
1580    
1581    2003-10-07  Bernhard Herzog  <[email protected]>
1582    
1583            * test/test_derivedshapestore.py
1584            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1585            properly so that the temporary directories get deleted correctly
1586    
1587    2003-10-06  Bernhard Herzog  <[email protected]>
1588    
1589            Handle the title changes in a proper MVC way.
1590    
1591            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1592            canvas' TITLE_CHANGED messages
1593            (MainWindow.update_title): New. Update the main window's title
1594            (MainWindow.__SetTitle): Removed. Use update_title instead.
1595            (MainWindow.SetMap): Use update_title instead of __SetTitle
1596            (MainWindow.RenameMap): Do change the window title explicitly
1597            here. That's handled in a proper MVC way now.
1598            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1599            messages
1600    
1601            * Thuban/Lib/connector.py (Conduit): New class to help classes
1602            that forward messages
1603    
1604            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1605            (ViewPort): Derive from Conduit instead of Publisher
1606            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1607            when calling the inherited versions
1608            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1609            methods to subscribe and unsubscribe map messages
1610            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1611            handle the map subscriptions
1612            (ViewPort.Map, ViewPort.map_projection_changed)
1613            (ViewPort.layer_projection_changed): Add or update doc-strings
1614    
1615            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1616            typo
1617            (MyConduit): Helper class for the Conduit test.
1618            (TestConduit): Test cases for Conduit
1619    
1620            * test/test_connector.py: Use support.run_tests as main.
1621    
1622            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1623            the TITLE_CHANGED messages
1624            (ViewPortTest.test_forwarding_title_changed): New test to check
1625            whether the viewport forwards the map's TITLE_CHANGED messages
1626            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1627            after the port's because the latter may require a still functional
1628            map.
1629    
1630    2003-10-06  Bernhard Herzog  <[email protected]>
1631    
1632            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1633            doc-string
1634    
1635    2003-10-06  Bernhard Herzog  <[email protected]>
1636    
1637            * test/test_viewport.py (ViewPortTest.setUp)
1638            (SimpleViewPortTest.test_init_with_size): Move the test for the
1639            initial size as a constructor parameter from ViewPortTest.setUp
1640            method to a new separate test in SimpleViewPortTest.
1641    
1642    2003-10-06  Bernhard Herzog  <[email protected]>
1643    
1644            * test/test_viewport.py (MockView): New class derived from
1645            ViewPort with a mock implementation of GetTextExtent to be used in
1646            the test cases
1647            (ViewPortTest.setUp): Use MockView instead of ViewPort
1648    
1649            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1650            into what would be a "pure virtual function" in C++: always raise
1651            NotImplementedError. Mock implementations for test cases don't
1652            belong into the real code
1653    
1654    2003-10-02  Bernhard Herzog  <[email protected]>
1655    
1656            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1657            close the dbf file we create so that it's contents have been
1658            written properly.
1659    
1660            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1661            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1662            Update to shapelib 1.2.10
1663    
1664    2003-10-01  Jan-Oliver Wagner <[email protected]>
1665    
1666            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1667            it annoys lintian which warns about these files not being
1668            executable. The #! isn't necessary here since if you absolutely
1669            must execute them you can always say "python <filename>".
1670    
1671    2003-09-26  Bernhard Herzog  <[email protected]>
1672    
1673            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1674            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1675            is ported to a newer the import will fail, so it should be noticed
1676            immediately that this function is gone.
1677            Fixes RT#1919
1678    
1679    2003-09-26  Bernhard Herzog  <[email protected]>
1680    
1681            Add a DTD for the projection files and make thuban write valid
1682            projection files
1683    
1684            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1685            files
1686    
1687            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1688            'projectionlist' as the name in the document type declaration so
1689            that it matches the element type of the root element.
1690    
1691            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1692            'projectionlist' as the name in the document type declaration just
1693            as it is done now in the files thuban would write
1694            (sample_projfile, sample_projfile_data): Fix spelling of
1695            "Mercator"
1696            (TestProjFile.doTestWrite): Validate the written and the expected
1697            XML data
1698            (TestProjFile): Derive from ValidationTest so that we can run xml
1699            validation tests
1700    
1701    2003-09-24  Bernhard Herzog  <[email protected]>
1702    
1703            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1704            modify the list returned by map.Layers() in place since it is the
1705            actual list of layers used by the map.
1706    
1707    2003-09-23  Jan-Oliver Wagner <[email protected]>
1708    
1709            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1710            Extensions to describe the extensions coming with the Thuban
1711            standard package (gns2shp and importAPR).
1712    
1713    2003-09-23  Bernhard Herzog  <[email protected]>
1714    
1715            * libraries/thuban/wxproj.cpp (project_point): if there's an
1716            inverse but no forward projection, convert to degrees after
1717            applying the inverse projection. Fixes RT#2096
1718    
1719            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1720            implicitly tests for the fix to RT#2096
1721    
1722            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1723            Check that the sequences have the same lengths
1724    
1725            * Resources/Projections/defaults.proj (Geographic projection): Use
1726            a much more precise value for the to_meter attribute.
1727    
1728    2003-09-22  Bernhard Herzog  <[email protected]>
1729    
1730            * test/support.py (initthuban): Make sure to unset the LANG env.
1731            var. so that tests that compare translated strings work. Solves RT
1732            #2094
1733    
1734    2003-09-22  Jan-Oliver Wagner <[email protected]>
1735    
1736            Small improvement of APR import.
1737    
1738            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1739            Added tests for text-ranges.
1740    
1741            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1742            returns a string object if the range is based on text.
1743    
1744            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1745            range retrieval.
1746    
1747    2003-09-22  Jan-Oliver Wagner <[email protected]>
1748    
1749            Initial version of the importAPR extension which is in
1750            experimental state.
1751    
1752            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1753            /Extensions/importAPR/test/: New directories.
1754    
1755            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1756    
1757            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1758            file which refers to the Thuban Iceland demo data.
1759    
1760            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1761    
1762            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1763    
1764            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1765            as in '.apr'-files.
1766    
1767            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1768            ODB Objects as in '.apr', '.avl' and other files.
1769    
1770            * /Extensions/importAPR/__init__.py: New: Init to make this
1771            directory a package.
1772    
1773            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1774            project file (.apr) and convert it to Thuban.
1775    
1776    2003-09-22  Jan-Oliver Wagner <[email protected]>
1777    
1778            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1779    
1780    2003-09-19  Jan-Oliver Wagner <[email protected]>
1781    
1782            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1783            with description on RPM installation and RPM binary package
1784            creation.
1785    
1786    2003-09-18  Bernhard Herzog  <[email protected]>
1787    
1788            * setup.py (data_files): Only add the mo files if the Locales
1789            directory actually exists, so that setup.py works with a fresh CVS
1790            checkout
1791    
1792    2003-09-12  Jan-Oliver Wagner <[email protected]>
1793    
1794            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1795            in viewport, not anymore in view
1796    
1797    2003-09-04  Jan-Oliver Wagner <[email protected]>
1798    
1799            Introducing first Extension (gns2shp).
1800    
1801            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1802    
1803            * Extensions/__init__.py: New. init to make this dir a package.
1804    
1805            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1806    
1807            * Extensions/gns2shp/test/README: New. some info on this test directory.
1808    
1809            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1810    
1811            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1812            of Shapefile from GNS text file format
1813    
1814    2003-09-03  Jan-Oliver Wagner <[email protected]>
1815    
1816            Fix/workaround for bug #2019:
1817            https://intevation.de/rt/webrt?serial_num=2019
1818    
1819            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1820            (IdentifyView.__init__): Added another button that allows to
1821            stop the identify mode.
1822            (IdentifyView.OnStop): New. Stops the identify mode.
1823    
1824    2003-09-03  Jan-Oliver Wagner <[email protected]>
1825    
1826            Introducing a new exception dialog that allows to exit the
1827            application immediately.
1828            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1829    
1830            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1831    
1832            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1833            Made strings available to translations. Exchanged the simple
1834            ScrolledMessageDialog by the new ExceptionDialog.
1835    
1836    2003-09-01  Bernhard Herzog  <[email protected]>
1837    
1838            * NEWS: New. Summary of changes and release notes.
1839    
1840            * MANIFEST.in: Add NEWS
1841    
1842    2003-09-01  Bernhard Herzog  <[email protected]>
1843    
1844            * MANIFEST.in: Correct the include statement for the mo-files and
1845            include the documentation too.
1846    
1847            * setup.py (data_files): Add the .mo files
1848            (setup call): Up to version 0.9.0
1849    
1850    2003-09-01  Bernhard Herzog  <[email protected]>
1851    
1852            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1853            parameter list to just parent and session
1854            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1855            selection of empty list boxes is not allowed (and produces C++
1856            assertion errors) and the rest of the setup is better done in
1857            __init__ anyway.
1858            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1859            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1860            builtins True/False for booleans to avoid warnings from wxPython
1861    
1862            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1863            ChooseDBTableDialog constructor parameters.
1864    
1865    2003-09-01  Bernhard Herzog  <[email protected]>
1866    
1867            * Thuban/Model/postgisdb.py
1868            (PostGISTable): Extend doc-string
1869            (PostGISTable._fetch_table_information): Set the column index
1870            correctly, pretending ignored columns don't exist.
1871    
1872            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1873            for postgis tables with data types not yet supported by thuban.
1874    
1875    2003-08-29  Bernhard Herzog  <[email protected]>
1876    
1877            * HOWTO-Release: Tweak item about running the tests.
1878    
1879    2003-08-29  Jan-Oliver Wagner <[email protected]>
1880    
1881            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1882    
1883    2003-08-29  Bernhard Herzog  <[email protected]>
1884    
1885            Add some missing parameters to projections. Proj complains about
1886            them on windows but for some reason not on Linux.
1887    
1888            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1889            missing required projection parameters
1890    
1891            * test/test_proj.py (TestProjFile.test): Add missing required
1892            projection parameters
1893    
1894            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1895            (TestLayerProjection.test): Add missing required projection
1896            parameters and tests for them
1897    
1898            * test/test_load.py (TestLayerProjection.file_contents)
1899            (TestLayerProjection.test): Add missing required projection
1900            parameters and tests for them
1901    
1902            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1903            required projection parameters
1904    
1905    2003-08-29  Bernhard Herzog  <[email protected]>
1906    
1907            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1908            access the pj_errno because directly accessing pj_errno doesn't
1909            work on windows if the proj library is in a DLL
1910    
1911            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1912    
1913    2003-08-28  Bernhard Herzog  <[email protected]>
1914    
1915            * test/test_proj.py: Import things from Thuban after calling
1916            initthuban
1917    
1918            * test/test_load.py (LoadSessionTest.filenames): New class
1919            variable with the filename attributes to normalize
1920            (LoadSessionTest.check_format): Pass self.filenames to
1921            sax_eventlist to normalize the filename attributes
1922    
1923            * test/xmlsupport.py: Add cvs keywords
1924            (SaxEventLister.__init__): New parameter filenames which indicates
1925            attributes that contain filenames
1926            (SaxEventLister.startElementNS): Normalize the filename attributes
1927            with os.path.normpath
1928            (sax_eventlist): New parameter filenames to pass through to
1929            SaxEventLister
1930    
1931            * test/test_derivedshapestore.py: Make this file callable as a
1932            program to execute the tests
1933            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1934            the session to self.session so that it gets destroyed properly
1935    
1936            * test/test_layer.py (TestLayer.tearDown): Call the session's
1937            Destroy method
1938    
1939            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1940            too if it exists
1941            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1942            so that it gets destroyed properly
1943    
1944            * test/postgissupport.py (reason_for_not_running_tests): Add a
1945            test for the existence of popen2.Popen4.
1946    
1947            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1948            reliable way to destroy the sessions created in the test cases
1949            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1950            so that it gets destroyed properly
1951            (SaveSessionTest.testLayerProjection): Bind the session to
1952            self.session so that it gets destroyed properly
1953    
1954            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1955            sure that the session is destroyed properly
1956    
1957            * test/test_shapefilestore.py: Make this callable as a program to
1958            execute the tests
1959    
1960            * test/test_scalebar.py: Remove unnecessary import of _ from
1961            Thuban
1962    
1963            * test/support.py (print_garbage_information): Call initthuban
1964            here because it may be called indirectly from test cases that test
1965            test support modules which do not use anything from thuban itself
1966            (ThubanTestProgram.runTests): Remove unnecessary debug print
1967    
1968    2003-08-28  Bernhard Herzog  <[email protected]>
1969    
1970            * Thuban/version.py (longversion): Update to 0.9
1971    
1972            * Thuban/UI/mainwindow.py: Remove some unused imports
1973    
1974            * README: Add section about required additional software. Add date
1975            and revision CVS keywords
1976    
1977            * HOWTO-Release: Add item about the translations. Add date and
1978            revision CVs keywords and change formatting to match README a bit
1979            better
1980    
1981            * po/de.po: Update for 0.9
1982    
1983            * test/README: Tweak the wording a little because many tests are
1984            not really unittest.
1985    
1986    2003-08-27  Bernhard Herzog  <[email protected]>
1987    
1988            As preparation for the 0.9 release, switch thuban files to a
1989            non-dev namespace
1990    
1991            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1992            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1993            namespace
1994    
1995            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1996            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1997    
1998            * test/test_save.py (SaveSessionTest.dtd)
1999            (SaveSessionTest.testEmptySession)
2000            (SaveSessionTest.testSingleLayer)
2001            (SaveSessionTest.testLayerProjection)
2002            (SaveSessionTest.testRasterLayer)
2003            (SaveSessionTest.testClassifiedLayer)
2004            (SaveSessionTest.test_dbf_table)
2005            (SaveSessionTest.test_joined_table)
2006            (SaveSessionTest.test_save_postgis): Update for new namespace
2007    
2008            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
2009            (TestLayerVisibility.file_contents, TestLabels.file_contents)
2010            (TestLayerProjection.file_contents)
2011            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2012            (TestPostGISLayer.file_contents)
2013            (TestPostGISLayerPassword.file_contents)
2014            (TestLoadError.file_contents, TestLoadError.test): Update for new
2015            namespace
2016    
2017    2003-08-27  Bernhard Herzog  <[email protected]>
2018    
2019            Make the table interface distinguish between row ids (an integer
2020            that uniquely identifies a row) and row ordinals (a simple row
2021            count from 0 to NumRows() - 1)
2022    
2023            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
2024            (PostGISTable.RowOrdinalToId): New methods to conver between row
2025            ids and row ordinals
2026            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
2027            parameter row_is_ordinal to indicate whether the row parameter is
2028            the row id or the ordinal
2029    
2030            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
2031            (TransientTableBase.RowOrdinalToId)
2032            (AutoTransientTable.RowIdToOrdinal)
2033            (AutoTransientTable.RowOrdinalToId): Same new methods as in
2034            PostGISTable.
2035            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
2036            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
2037            Same new parameter as in PostGISTable.
2038    
2039            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
2040            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
2041            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
2042            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
2043            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
2044            parameter as in PostGISTable.
2045    
2046            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
2047            (DataTable.RowOrdinalToId): New methods to convert between row ids
2048            and row ordinals.
2049            (TableGrid.SelectRowById): New method to select a row based on its
2050            ID as opposed to its ordinal
2051            (DataTable.GetValue, TableGrid.OnRangeSelect)
2052            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
2053            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
2054            (LayerTableFrame.__init__): Convert between row ids and row
2055            ordinals as appropriate
2056    
2057            * test/postgissupport.py (PostGISDatabase.__init__): Add
2058            doc-string.
2059            (PostGISDatabase.initdb): The optional third item in a tuple in
2060            tables is now a (key, value) list with additional arguments to
2061            pass to upload_shapefile
2062            (upload_shapefile): New parameter gid_offset to allow gids that
2063            are not the same as the shapeids in the shapefile
2064            (PostgreSQLServer.get_default_static_data_db): Use the new
2065            gid_offset to make the gids in landmarks 1000 higher than the
2066            shapeids in the shapefile
2067    
2068            * test/test_viewport.py
2069            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
2070            new shapeids in the landmarks table
2071    
2072            * test/test_transientdb.py
2073            (TestTransientTable.run_iceland_political_tests)
2074            (TestTransientTable.test_transient_joined_table): Add tests for
2075            the new table methods and new keywords arguments.
2076    
2077            * test/test_postgis_db.py
2078            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
2079            (TestPostGISTable.test_read_value_row_count_mode)
2080            (TestPostGISTable.test_row_id_to_ordinal)
2081            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
2082            table methods and the new arguments
2083            (TestPostGISShapestorePoint.test_shapes_in_region)
2084            (TestPostGISShapestorePoint.test_shape_raw_data)
2085            (TestPostGISShapestorePoint.test_shape_points)
2086            (TestPostGISShapestorePoint.test_shape_shapeid)
2087            (TestPostGISShapestorePoint.test_all_shapes)
2088            (TestPostGISTable.test_simple_query)
2089            (TestPostGISTable.test_simple_query)
2090            (TestPostGISTable.test_simple_query)
2091            (TestPostGISTable.test_read_value)
2092            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
2093            shapeids in the landmarks table
2094    
2095            * test/test_memory_table.py
2096            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
2097            (TestMemoryTable.test_read_value_row_count_mode)
2098            (TestMemoryTable.test_row_id_to_ordinal)
2099            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
2100            table methods and the new arguments
2101    
2102            * test/test_dbf_table.py
2103            (TestDBFTable.test_read_row_as_dict_row_count_mode)
2104            (TestDBFTable.test_read_value_row_count_mode)
2105            (TestDBFTable.test_row_id_to_ordinal)
2106            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
2107            methods and the new arguments
2108    
2109    2003-08-26  Bernhard Herzog  <[email protected]>
2110    
2111            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
2112            more postgis specific but much faster method to get the bounding
2113            box
2114    
2115    2003-08-26  Bernhard Herzog  <[email protected]>
2116    
2117            * Thuban/Model/postgisdb.py (PostGISTable.Title)
2118            (PostGISShapeStore.AllShapes): Add these missing methods.
2119            (PostGISShapeStore.ShapesInRegion): No need to raise
2120            StopIteration. We can simply return
2121    
2122            * test/test_postgis_db.py (TestPostGISTable.test_title)
2123            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
2124            new methods
2125    
2126    2003-08-25  Bernhard Herzog  <[email protected]>
2127    
2128            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
2129    
2130            * test/test_postgis_db.py (PolygonTests): New class containing
2131            those tests from TestPostGISShapestorePolygon that can also be
2132            used to test MUTLIPOLYGON tables
2133            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
2134            so derive from that
2135            (TestPostGISShapestoreMultiPolygon): New class with tests for
2136            MUTLIPOLYGON tables
2137    
2138            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
2139            tables argument to have tuples with three items to override the
2140            WKT type used.
2141            (PostgreSQLServer.get_default_static_data_db): Use the above to
2142            create a polygon table with MUTLIPOLYGONs
2143            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
2144            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
2145            coords_to*
2146            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
2147            (wkt_converter): New. Map WKT types to converters
2148            (upload_shapefile): New parameter force_wkt_type to use a
2149            different WKT type than the default
2150    
2151    2003-08-25  Bernhard Herzog  <[email protected]>
2152    
2153            * Thuban/UI/application.py
2154            (ThubanApplication.run_db_param_dialog): New. Suitable as a
2155            db_connection_callback. Main difference is that the dialog run
2156            from this method doesn't have a parent so it can be used even when
2157            there is no main window
2158            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
2159            no db_connection_callback was given. This way the dialog pops up
2160            even when the .thuban file was given as a command line parameter.
2161    
2162    2003-08-25  Bernhard Herzog  <[email protected]>
2163    
2164            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
2165            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
2166            which leads to an effectively frozen X session because the user
2167            can only interact with the dialog but the mouse is still grabbed
2168            by the canvas.
2169            Also, call the tool's Hide method before MouseLeftUp because
2170            MouseLeftUp may change the tool's coordinates.
2171    
2172    2003-08-25  Bernhard Herzog  <[email protected]>
2173    
2174            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
2175            LoadCancelled exceptions and handle them by returning immediately.
2176    
2177    2003-08-25  Bernhard Herzog  <[email protected]>
2178    
2179            GUI part of loading sessions with postgis connections which may
2180            require user interaction to get passwords or updated parameters
2181    
2182            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
2183            bit nucer and be more generic.
2184            (DBFrame.OnAdd): Adapt to new DBDialog interface
2185    
2186            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
2187            optional parameter db_connection_callback which is passed to
2188            load_session.
2189    
2190            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
2191            Suitable as a db_connection_callback
2192            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
2193            db_connection_callback of the application's OpenSession method
2194    
2195    
2196    2003-08-25  Bernhard Herzog  <[email protected]>
2197    
2198            Basic loading of sessions containing postgis connections:
2199    
2200            * Thuban/Model/load.py (LoadError): Add doc-string
2201            (LoadCancelled): New exception class to indicate a cancelled load
2202            (SessionLoader.__init__): Add the db_connection_callback parameter
2203            which will be used by the loader to get updated parameters and a
2204            password for a database connection
2205            (SessionLoader.__init__): Add the new XML elements to the
2206            dispatchers dictionary
2207            (SessionLoader.check_attrs): Two new conversions, ascii to convert
2208            to a byte-string object and idref as a generic id reference
2209            (SessionLoader.start_dbconnection)
2210            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
2211            elements
2212            (load_session): Add the db_connection_callback to pass through the
2213            SessionLoader
2214    
2215            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
2216            New classes to test loading of sessions with postgis database
2217            connections.
2218    
2219    2003-08-25  Bernhard Herzog  <[email protected]>
2220    
2221            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
2222            replace it and the comment with __BuildDate__ by the Source: and
2223            Id: cvs keywords as used in the other files.
2224    
2225    2003-08-25  Bernhard Herzog  <[email protected]>
2226    
2227            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
2228            LoadError when a required attribute is missing. The code used to
2229            be commented out for some reason, but probably should have been
2230            active.
2231    
2232            * test/test_load.py (TestLoadError.test): Test the message in the
2233            LoadError too to make sure it really is about the missing
2234            attribute
2235    
2236    2003-08-22  Bernhard Herzog  <[email protected]>
2237    
2238            * test/test_save.py (SaveSessionTest.test_dbf_table)
2239            (SaveSessionTest.test_joined_table): Add XML validation tests.
2240    
2241    2003-08-22  Bernhard Herzog  <[email protected]>
2242    
2243            Implement saving a session with a postgis connection
2244    
2245            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
2246            elements for database connections and shapestores using db
2247            connections
2248            (session): Add the dbconnections to the content model
2249    
2250            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
2251            Write the db connections
2252            (SessionSaver.write_session): Call write_db_connections to write
2253            the connection before the data sources
2254            (SessionSaver.write_data_containers): Handle postgis shapestores
2255    
2256            * test/test_save.py (SaveSessionTest.thubanids)
2257            (SaveSessionTest.thubanidrefs): Update for new DTD
2258            (SaveSessionTest.test_save_postgis): New. Test saving a session
2259            with postgis connections
2260    
2261            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
2262            (PostGISTable.TableName): New accessor methods for the connection
2263            and table name
2264    
2265            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
2266            (TestPostGISTable.test_dbname): New methods to test the new
2267            PostGISConnection methods
2268    
2269    2003-08-22  Bernhard Herzog  <[email protected]>
2270    
2271            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
2272            for exceptions occurring when establishing a Database connection
2273            (PostGISConnection.connect): Catch psycopg.OperationalError during
2274            connects and raise ConnectionError.
2275    
2276            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
2277            tests for database exceptions
2278    
2279    2003-08-22  Bernhard Herzog  <[email protected]>
2280    
2281            Prepare the test suite for tests with required authentication
2282    
2283            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
2284            variables with two predefined users/passwords, one for the admin
2285            and one for a non-privileged user.
2286            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
2287            the non-privileged user to the database and set the admin password
2288            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
2289            Better error reporting
2290            (PostgreSQLServer.connection_params)
2291            (PostgreSQLServer.connection_string): New methods to return
2292            information about how to connect to the server
2293            (PostgreSQLServer.execute_sql): New. Convenience method to execute
2294            SQL statements
2295            (PostgreSQLServer.require_authentication): Toggle whether the
2296            server requires authentication
2297            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
2298            Add or alter users
2299            (PostGISDatabase.initdb): Pass the admin name one the
2300            subprocesses' command lines. Grant select rights on
2301            geometry_columns to everybody.
2302            (upload_shapefile): Use the admin name and password when
2303            connecting. Grant select rights on the new table to everybody.
2304    
2305            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
2306            server's new methods to get the connection parameters.
2307    
2308            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
2309            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
2310            server's new methods to get the connection parameters.
2311    
2312            * test/test_postgis_db.py
2313            (TestPostGISConnection.test_gis_tables_empty)
2314            (TestPostGISConnection.test_gis_tables_non_empty)
2315            (PostGISStaticTests.setUp): Use the server's new methods to get
2316            the connection parameters.
2317    
2318    2003-08-22  Bernhard Herzog  <[email protected]>
2319    
2320            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
2321    
2322            * Thuban/version.py: Add psycopg version
2323    
2324            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
2325            version of the psycopg module
2326    
2327    2003-08-22  Bernhard Herzog  <[email protected]>
2328    
2329            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
2330            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
2331            at the moment. The functionality should probably be implemented
2332            some time, though.
2333            (DBFrame.OnRemove): Display a message if the connection can't be
2334            removed because it's still in use.
2335    
2336    2003-08-22  Jan-Oliver Wagner <[email protected]>
2337    
2338            * Thuban/UI/about.py (About.__init__): split up the huge about
2339            text into elements/lists for easier translation. This fixes bug
2340            https://intevation.de/rt/webrt?serial_num=2058
2341            Also, made some forgotten string available for the i18n.
2342    
2343    2003-08-21  Bernhard Herzog  <[email protected]>
2344    
2345            Make postgis support really optional including insensitive menu
2346            items.
2347    
2348            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
2349            whether the postgis is supported.
2350    
2351            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
2352            to make postgis support optional
2353    
2354            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
2355            version of Thuban.Model.postgisdb.has_postgis_support
2356            (database_management command): Make it only sensitive if postgis
2357            is supported.
2358    
2359    2003-08-21  Jan-Oliver Wagner <[email protected]>
2360    
2361            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
2362            (section Adding and Removing Layers): Added text and described
2363            multi-selection.
2364            (chapter Extensions): New.
2365    
2366    2003-08-21  Jan-Oliver Wagner <[email protected]>
2367    
2368            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
2369            settings to allow multiple files to load into the map.
2370            Also reduced selection to *.shp as a default.
2371    
2372    2003-08-20  Bernhard Herzog  <[email protected]>
2373    
2374            Add dialogs and commands to open database connections and add
2375            database layers.
2376    
2377            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
2378            method to open the database connection management dialog
2379            (MainWindow.AddDBLayer): New method to add a layer from a database
2380            (_has_dbconnections): New helper function to use for sensitivity
2381            (database_management command, layer_add_db command): New commands
2382            that call the above new methods.
2383            (main_menu): Add the new commands to the menu.
2384    
2385            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
2386            (PostGISConnection.connect): Establish the actual connection in a
2387            separate method and call it in __init__. This makes it easier to
2388            override the behavior in test cases
2389            (PostGISConnection.BriefDescription): New method to return a brief
2390            description for use in dialogs.
2391    
2392            * test/test_postgis_db.py (NonConnection): DB connection that
2393            doesn't actually connect
2394            (TestBriefDescription): New class with tests for the new
2395            BriefDescription method
2396    
2397    2003-08-19  Jan-Oliver Wagner <[email protected]>
2398    
2399            Moved anything from extensions to libraries.
2400    
2401            * libraries: New.
2402    
2403            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
2404    
2405            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
2406            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
2407            been moved here from thuban/extensions/pyprojection/
2408            See there in the Attic for the older history.
2409    
2410            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
2411            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
2412            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
2413            have been moved here from thuban/extensions/pyshapelib/
2414            See there in the Attic for the older history.
2415    
2416            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
2417            files have been moved here from thuban/extensions/shapelib/
2418            See there in the Attic for the older history.
2419    
2420            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2421            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
2422            thuban/extensions/thuban/
2423            See there in the Attic for the older history.
2424    
2425            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
2426    
2427            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2428            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
2429    
2430            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
2431            Moved to libraries/shapelib.
2432    
2433            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
2434            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
2435            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
2436            Moved to libraries/pyshapelib.
2437    
2438            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
2439            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
2440            Moved to libraries/pyprojection.
2441    
2442            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
2443    
2444            * extensions: Removed.
2445    
2446    2003-08-19  Bernhard Herzog  <[email protected]>
2447    
2448            * test/test_viewport.py (ViewPortTest): We don't use the
2449            facilities of FileTestMixin so don't derive from it.
2450            (TestViewportWithPostGIS): New class with tests for using a
2451            viewport on a map with postgis layers.
2452    
2453    2003-08-19  Bernhard Herzog  <[email protected]>
2454    
2455            Add the db connection management to the session.
2456    
2457            * Thuban/Model/session.py (Session.__init__): New instance
2458            variable db_connections
2459            (Session.AddDBConnection, Session.DBConnections)
2460            (Session.HasDBConnections, Session.CanRemoveDBConnection)
2461            (Session.RemoveDBConnection): New methods to manage and query the
2462            db connections managed by the session
2463            (Session.OpenDBShapeStore): New method to open a shapestore from a
2464            db connection
2465    
2466            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
2467            messages for the db connection handling in the session
2468    
2469            * test/test_postgis_session.py: New. test cases for the session's
2470            db connection handling with postgis connections
2471    
2472    2003-08-19  Bernhard Herzog  <[email protected]>
2473    
2474            Add very basic postgis database support and the corresponding test
2475            cases. The test cases require a PostgreSQL + postgis installation
2476            but no existing database. The database will be created
2477            automatically by the test cases
2478    
2479            * test/README: Add note about skipped tests and the requirements
2480            of the postgis tests.
2481    
2482            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
2483    
2484            * test/test_postgis_db.py: New. Test cases for the postgis
2485            support.
2486    
2487            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
2488            format
2489    
2490            * test/test_wellknowntext.py: New. Test cases for the
2491            wellknowntext parser
2492    
2493            * test/postgissupport.py: New. Support module for tests involving
2494            a postgis database.
2495    
2496            * test/support.py (execute_as_testsuite): Shut down the postmaster
2497            if it's still running after the tests
2498    
2499            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
2500            well known text format
2501    
2502    2003-08-19  Jan-Oliver Wagner <[email protected]>
2503    
2504            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
2505            message dialog.
2506    
2507    2003-08-18  Bernhard Herzog  <[email protected]>
2508    
2509            * test/support.py (ThubanTestResult.printErrors): Indent the
2510            reason for the skips in the output to make it a bit more readable.
2511            (execute_as_testsuite): New helper function to run a test suite
2512            and print some more information.
2513            (run_tests): Use execute_as_testsuite to run the tests
2514    
2515            * test/runtests.py (main): Use execute_as_testsuite to run the
2516            tests
2517    
2518    2003-08-18  Bernhard Herzog  <[email protected]>
2519    
2520            Fix some bugs in Thuban and the test suite that were uncovered by
2521            changes introduced in Python 2.3:
2522    
2523            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
2524            filename is an absolute name
2525    
2526            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
2527            filename is an absolute name
2528    
2529            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
2530            unique filename to save to and use the correct relative filename
2531            in the expected output.
2532            (SaveSessionTest.test_dbf_table): Use the correct relative
2533            filename in the expected output.
2534    
2535            * test/test_layer.py (TestLayer.test_raster_layer): Update the
2536            test to check whether the filename is absolute.
2537    
2538    2003-08-18  Jan-Oliver Wagner <[email protected]>
2539    
2540            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
2541    
2542    2003-08-15  Bernhard Herzog  <[email protected]>
2543    
2544            Change the way shapes are returned by a shape store. The
2545            ShapesInRegion method returns an iterator over actual shape
2546            objects instead of a list of shape ids.
2547    
2548            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
2549            id.
2550            (ShapefileStore.ShapesInRegion): Return an iterator over the
2551            shapes which yields shape objects instead of returning a list of
2552            shape ids
2553            (ShapefileStore.AllShapes): New. Return an iterator over all
2554            shapes in the shape store
2555            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
2556    
2557            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
2558            doc-string.
2559    
2560            * Thuban/UI/baserenderer.py
2561            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
2562            layer_shapes and make it return an iterator containg shapes
2563            instead of a list of ids.
2564            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
2565            layer_shapes() change
2566    
2567            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
2568            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
2569    
2570            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
2571            changes in the ShapesInRegion return value.
2572            (ViewPort._get_hit_tester): Remove commented out code
2573    
2574            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
2575            new return value.
2576            (SimpleShapeStore.AllShapes): New. Implement this method too.
2577    
2578            * test/test_layer.py (TestLayer.test_arc_layer)
2579            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2580            (TestLayer.test_point_layer_with_projection)
2581            (TestLayer.test_derived_store): Adapt to changes in the
2582            ShapesInRegion return value.
2583    
2584            * test/test_shapefilestore.py
2585            (TestShapefileStoreArc.test_shapes_in_region)
2586            (TestShapefileStorePolygon.test_shapes_in_region)
2587            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
2588            in the ShapesInRegion return value.
2589            (TestShapefileStorePoint.test_all_shapes)
2590            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
2591            methods
2592    
2593            * test/test_derivedshapestore.py
2594            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
2595            the ShapesInRegion return value.
2596            (TestDerivedShapeStore.test_all_shapes)
2597            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
2598            methods
2599    
2600    2003-08-15  Bernhard Herzog  <[email protected]>
2601    
2602            Make the renderers deal correctly with raw vs. python level
2603            representation of shape geometries
2604    
2605            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
2606            Return a flag useraw in addition to the callable and the parameter
2607            to indicate whether the callable can deal with the raw shape data
2608            or uses the higher level python lists of coordinates. The callable
2609            now should accept either the raw data or the return value of the
2610            shape's Points() method.
2611            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
2612            change
2613            (BaseRenderer.projected_points): Instead of the shape id use the
2614            points list as parameter.
2615            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
2616            (BaseRenderer.draw_point_shape): Adapt to projected_points()
2617            change and accept the points list as parameter instead of the
2618            shape id.
2619    
2620            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
2621            the useraw flag as required by the BaseRenderer
2622            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
2623            changes.
2624    
2625            * test/test_baserenderer.py
2626            (TestBaseRenderer.test_point_with_classification): New test for
2627            rendering a map with classifications.
2628    
2629    2003-08-15  Bernhard Herzog  <[email protected]>
2630    
2631            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2632            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
2633            (ViewPort._get_hit_tester, ViewPort.projected_points)
2634            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
2635            (ViewPort._find_label_at): Split the find_shape_at method into
2636            several new methods and use the functions in the hit-test module.
2637    
2638            * Thuban/UI/hittest.py: New module with Python-level hit-testing
2639            functions
2640    
2641            * test/test_hittest.py: New. Test for the new hittest module
2642    
2643    2003-08-15  Bernhard Herzog  <[email protected]>
2644    
2645            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
2646            projection to all corners of the bounding box to get a better
2647            approximation of the projected bounding box
2648    
2649            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2650            New. Test coordinate handling of a layer with a projection.
2651            Catches the bug fixed in Layer.ShapesInRegion
2652    
2653    2003-08-15  Bernhard Herzog  <[email protected]>
2654    
2655            Move some of the mock objects in test_baserenderer into their own
2656            module so they can easily be used from other tests
2657    
2658            * test/mockgeo.py: New test helper module with some mock objects
2659            for geometry related things like shapes, shapestores and
2660            projections.
2661    
2662            * test/test_mockgeo.py: New. Tests for the new helper module
2663    
2664            * test/test_baserenderer.py: Some of the mock-objects are in
2665            mockgeo now.
2666    
2667    2003-08-12  Jan-Oliver Wagner <[email protected]>
2668    
2669            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
2670    
2671    2003-08-12  Bernhard Herzog  <[email protected]>
2672    
2673            * po/de.po: New. German translations by Bjoern Broscheit
2674    
2675    2003-08-12  Bernhard Herzog  <[email protected]>
2676    
2677            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
2678            strings have to be one string literal.
2679    
2680    2003-08-11  Bernhard Herzog  <[email protected]>
2681    
2682            * test/support.py (FloatComparisonMixin.assertPointListEquals):
2683            New. This method was used in various derived classes, but it's
2684            better to have it here.
2685    
2686            * test/test_shapefilestore.py
2687            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
2688            FloatComparisonMixin
2689    
2690            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
2691            It's now in FloatComparisonMixin
2692    
2693            * test/test_derivedshapestore.py
2694            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
2695            in FloatComparisonMixin
2696    
2697    2003-08-11  Bernhard Herzog  <[email protected]>
2698    
2699            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
2700            error message
2701    
2702    2003-08-08  Jan-Oliver Wagner <[email protected]>
2703    
2704            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
2705            with version number.
2706            Changed title to reflect version number of Thuban.
2707    
2708    2003-08-08  Jan-Oliver Wagner <[email protected]>
2709    
2710            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
2711            the list corresponds to the "About" web page.
2712    
2713    2003-08-08  Bernhard Herzog  <[email protected]>
2714    
2715            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
2716            Make sure translated strings are recognized as one string literal.
2717    
2718            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
2719            Make sure translated strings are recognized as one string literal.
2720    
2721            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
2722            translated strings are recognized as one string literal.
2723    
2724            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
2725            sure translated strings are recognized as one string literal.
2726    
2727    2003-08-07  Bernhard Herzog  <[email protected]>
2728    
2729            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
2730            Simply delegates to the original shapestore.
2731    
2732            * test/test_derivedshapestore.py
2733            (TestDerivedShapeStore.test_raw_format): New. Test case for
2734            DerivedShapeStore.RawShapeFormat
2735    
2736    2003-08-07  Bernhard Herzog  <[email protected]>
2737    
2738            Add raw data interface to shape objects.
2739    
2740            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
2741            class to ShapefileShape which now holds shapefile specific
2742            information.
2743            (ShapefileShape.compute_bbox): Simplified to not cache any
2744            information. The way this method is used that shouldn't matter
2745            performance wise.
2746            (ShapefileShape.RawData): New. Return the shapeid which is the raw
2747            data format for shapes from shapefiles.
2748            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
2749            in the shape objects returned by a shapestore. For a
2750            ShapefileStore this is always RAW_SHAPEFILE.
2751            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
2752            method.
2753    
2754            * test/test_shapefilestore.py
2755            (TestShapefileStore.test_raw_format): New test to test the raw
2756            format feature of shapes.
2757    
2758            * Thuban/Model/layer.py: Remove the unused import of Shape from
2759            data. It was only there for interface compatibility but it's not
2760            used inside of Thuban and the generic Shape class has gone away.
2761    
2762            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
2763            the raw data format and only use an optimized version of its a
2764            shapefile.
2765    
2766    2003-08-07  Bernhard Herzog  <[email protected]>
2767    
2768            * test/test_baserenderer.py (SimpleShape): Shape class for the
2769            tests.
2770            (SimpleShapeStore.Shape): Use SimpleShape instead of
2771            Thuban.Model.data.Shape to make the tests independed of the coming
2772            changes.
2773    
2774    2003-08-07  Bernhard Herzog  <[email protected]>
2775    
2776            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
2777            (ThubanTestProgram): New classes that extend the respective
2778            classes from unittest. These new version support skipping tests
2779            under certain expected conditions. In the Thuban test suite we
2780            uses this for tests that require the optional gdal support.
2781            (run_tests): Use ThubanTestProgram instead of the unittest.main()
2782    
2783            * test/runtests.py (main): Use the new ThubanTestRunner instead of
2784            the normal one from unittest
2785    
2786            * test/test_layer.py (TestLayer.test_raster_layer): If this test
2787            is not run because gdal support isn't available report this to the
2788            runner.
2789    
2790            * test/test_baserenderer.py
2791            (TestBaseRenderer.test_raster_no_projection): Do not run this test
2792            if gdal support isn't available and report this to the runner.
2793    
2794    2003-08-06  Bernhard Herzog  <[email protected]>
2795    
2796            Rearrange the renderers a bit, partly in preparation for changes
2797            required for the postgis merge, partly to make it more testable.
2798            Also make the representation of coordinates in Shapes more
2799            consistent.
2800    
2801            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
2802            this class is now in BaseRenderer. This class is now practically
2803            only a specialization of BaseRenderer for rendering to an actual
2804            wx DC.
2805            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
2806            to get the shapetype specific rendering functions.
2807    
2808            * Thuban/UI/baserenderer.py: New file with the basic rendering
2809            logic. The code in this file is completely independend of wx.
2810            (BaseRenderer): Class with the basic rendering logic
2811    
2812            * test/test_baserenderer.py: New. Test cases for BaseRenderer
2813    
2814            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2815            error_on_redraw to guard agains endless loops and stack overflows
2816            when there's a bug in the rendering code that raises exceptions.
2817            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
2818            rendering into a separate method _do_redraw so that error handling
2819            is a bit easier. When an exception occurs, set error_on_redraw to
2820            true. When it's true on entry to OnIdle do nothing and return
2821            immediately.
2822    
2823            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
2824            Shape object will always have the coordinates as a list of list of
2825            coordinate pairs (tuples).
2826            (Shape.compute_bbox): Adapt to new representation.
2827    
2828            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2829            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
2830            Shape objects.
2831    
2832            * test/test_shapefilestore.py
2833            (ShapefileStoreTests.assertFloatTuplesEqual)
2834            (ShapefileStoreTests.assertPointListEquals): Rename to
2835            assertPointListEquals and change purpose to checking equality of
2836            the lists returned by Shape.Points().
2837            (TestShapefileStoreArc.test_shape)
2838            (TestShapefileStorePolygon.test_shape)
2839            (TestShapefileStorePoint.test_shape): Use the new
2840            assertPointListEquals instead of assertFloatTuplesEqual
2841    
2842            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
2843            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
2844            and change purpose to checking equality of the lists returned by
2845            Shape.Points().
2846            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
2847            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2848            (TestLayer.test_derived_store): Use the new assertPointListEquals
2849            instead of assertFloatTuplesEqual
2850    
2851            * test/test_derivedshapestore.py
2852            (TestDerivedShapeStore.assertFloatTuplesEqual)
2853            (TestDerivedShapeStore.assertPointListEquals): Rename to
2854            assertPointListEquals and change purpose to checking equality of
2855            the lists returned by Shape.Points().
2856            (TestDerivedShapeStore.test_shape): Use the new
2857            assertPointListEquals instead of assertFloatTuplesEqual
2858    
2859    2003-08-06  Jan-Oliver Wagner <[email protected]>
2860    
2861            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
2862            a bounding box. A dialog is raised in case, no bounding box
2863            is found. This fixes bug #2043:
2864            https://intevation.de/rt/webrt?serial_num=2043
2865    
2866    2003-08-05  Bernhard Herzog  <[email protected]>
2867    
2868            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
2869            object look like a Color instantiation. Formerly it looked like a
2870            tuple.
2871    
2872            * test/test_color.py (TestColor.test_repr)
2873            (TestColor.test_equality, TestColor.test_inequality): New. test
2874            some more apects of the Color class
2875            (TestTransparent.test_repr, TestTransparent.test_hex)
2876            (TestTransparent.test_equality): New. Test cases for the
2877            Transparent object.
2878    
2879    2003-08-04  Jan-Oliver Wagner <[email protected]>
2880    
2881            * Doc/manual/thuban-manual.xml: a number of small improvements.
2882            The resulting file is the version submitted for GREAT-ER II.
2883    
2884    2003-08-01  Bernhard Herzog  <[email protected]>
2885    
2886            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
2887            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
2888            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
2889    
2890            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
2891            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
2892            (ThubanEndBusyCursor): Add doc-strings
2893    
2894    2003-08-01  Bernhard Herzog  <[email protected]>
2895    
2896            First step towards PostGIS integration. More abstraction by movin
2897            more code from the layer to the shapestore. More methods of the
2898            layer are now simply delegated to the equivalent method of the
2899            shapestore. The SHAPETYPE_* constants are now in data not in
2900            layer.
2901    
2902            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2903            (SHAPETYPE_POINT, Shape): Move these constants and classes from
2904            layer.py to data.py
2905            (ShapefileStore.__init__): More Initialization for the new methods
2906            and functionality.
2907            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
2908            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
2909            (ShapefileStore.Shape): New methods that were formerly implemented
2910            in the layer.
2911            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
2912            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
2913            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
2914            equivalents of the new shape methods. These versions are simply
2915            delegated to the original shapstore.
2916    
2917            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2918            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
2919            (Layer.SetShapeStore): Removed the initializatin of instance
2920            variables that were needed for the stuff that's now in
2921            ShapefileStore
2922            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
2923            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
2924            shapestore.
2925    
2926            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
2927            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
2928            instead of layer.
2929    
2930            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
2931    
2932            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
2933    
2934            * test/test_layer.py: Import the SHAPETYPE_* constants from data
2935            instead of layer.
2936            (TestLayer.test_derived_store): Remove the test for the exception
2937            when instantiating the DerivedShapeStore with an incompatible
2938            table which is now in test_derivedshapestore.py. Add some more
2939            tests of the layer methods to determine whether they work for a
2940            DerivedShapeStore as well.
2941    
2942    2003-07-31  Jonathan Coles   <[email protected]>
2943    
2944            * Doc/manual/thuban-manual.xml: Fix the list of required packages
2945            by just listing the name and where they can be found.
2946    
2947    2003-07-31  Frank Koormann   <[email protected]>
2948    
2949            * Doc/manual/thuban-manual.xml:
2950            Changed the screenshot elements to figure.
2951            Changed some variablelist elements to itemizedlist.
2952            Added section on GDAL formats.
2953    
2954    2003-07-31  Jonathan Coles   <[email protected]>
2955    
2956            * Doc/manual/thuban-manual.xml: Added a few sentences about
2957            the Fix Border Color option when generating classes.
2958    
2959    2003-07-30  Jonathan Coles   <[email protected]>
2960    
2961            * Thuban/Model/classgen.py: Add docstrings. Rename specific
2962            Ramp instances to use lower_case_style.
2963    
2964            * Thuban/UI/classgen.py: Use renamed Ramp instances.
2965            
2966            * Thuban/UI/classifier.py: Add docstrings.
2967    
2968            * Thuban/UI/dock.py: Add docstrings.
2969    
2970            * test/test_classgen.py: Use renamed Ramp instances.
2971    
2972    2003-07-30  Bernhard Herzog  <[email protected]>
2973    
2974            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
2975            was never used in Thuban.
2976    
2977    2003-07-30  Bernhard Herzog  <[email protected]>
2978    
2979            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
2980            method directly instead of going through the transient_table
2981            method. This faster because transient_table may force the copy of
2982            a DBF file into the transient database and setting a table's title
2983            doesnm't affect the title of the associated transient table, so
2984            this fixes RT #2042
2985    
2986            * Thuban/UI/main.py (__version__): Don't import the already
2987            removed show_exception_dialog.
2988    
2989    2003-07-29  Jonathan Coles   <[email protected]>
2990    
2991            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2992            Put back this method and remove the equivalent function since we
2993            are setting the exception hook from within this class (OnInit).
2994    
2995    2003-07-29  Jonathan Coles   <[email protected]>
2996    
2997            * Doc/manual/images/5_2_custom_ramp.png,
2998            Doc/manual/images/5_2_quantiles.png,
2999            Doc/manual/images/5_2_uniform_dist.png,
3000            Doc/manual/images/5_2_unique_values.png,
3001            Doc/manual/images/8_int_error.png: New screen shots.
3002    
3003            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
3004            some points, and added more screen shots.
3005    
3006    2003-07-29  Bernhard Herzog  <[email protected]>
3007    
3008            * Thuban/Model/data.py: Remove the now unused import of warnings
3009    
3010    2003-07-29  Bernhard Herzog  <[email protected]>
3011    
3012            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
3013            deprecated since before the 0.8 release and isn't used in Thuban
3014            itself anymore.
3015    
3016            * Thuban/Model/transientdb.py: Remove some unnecessary imports
3017    
3018    2003-07-29  Jonathan Coles   <[email protected]>
3019    
3020            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
3021            python exception hook here so that we are sure to catch any
3022            Thuban exception that happen during initialization.
3023    
3024            * Thuban/UI/main.py (main): Don't set the exception hook here,
3025            it will get set in ThubanApplication.OnInit.
3026    
3027    2003-07-29  Jonathan Coles   <[email protected]>
3028                                                                                
3029            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
3030            Removed and called it show_exception_dialog() so that the exception
3031            handler can be set before the class is created.
3032                                                                                
3033            * Thuban/UI/main.py (main): Install the exception handler before
3034            a ThubanApplication is created.
3035                                                                                    
3036    2003-07-29  Bernhard Herzog  <[email protected]>
3037    
3038            * po/it.po: New. Italian translation by Maurizio Napolitano
3039    
3040            * po/ru.po: New. Russian translation by Alex Shevlakov
3041    
3042    2003-07-29  Frank Koormann   <[email protected]>
3043    
3044            * Doc/manual/thuban-manual.xml: Extended section on supported
3045            projections.
3046            
3047    2003-07-29  Frank Koormann   <[email protected]>
3048    
3049            * Doc/manual/thuban-manual.xml: gaspell-checked.
3050    
3051    2003-07-29  Jonathan Coles   <[email protected]>
3052    
3053            * Doc/manual/images/3_5_legend.png: Added border to improve look
3054            on white background.
3055    
3056    2003-07-29  Jonathan Coles   <[email protected]>
3057    
3058            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
3059            descriptions for the legend toolbar.
3060    
3061            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
3062            cursor from dialog box.
3063    
3064    2003-07-28  Jonathan Coles   <[email protected]>
3065    
3066            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
3067    
3068            * Doc/manual/images/2_4_session_tree.png,
3069            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
3070            Doc/manual/images/4_2_layer_properties.png,
3071            Doc/manual/images/4_2_raster_layer_properties.png,
3072            Doc/manual/images/5_3_genclass.png,
3073            Doc/manual/images/5_classification.png,
3074            Doc/manual/images/6_projection.png,
3075            Doc/manual/images/7_1_table_view.png,
3076            Doc/manual/images/7_2_5_join.png: New screenshots.
3077    
3078    2003-07-24  Jonathan Coles   <[email protected]>
3079    
3080            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
3081    
3082    2003-07-24  Jonathan Coles   <[email protected]>
3083    
3084            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
3085            chapter on Layer Management.
3086    
3087            * Doc/manual/Makefile: New. Makefile to generate all formats for the
3088            manual and images.
3089    
3090    2003-07-24  Bernhard Herzog  <[email protected]>
3091    
3092            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
3093            it annoys lintian which warns about these files not being
3094            executable. The #! isn't necessary here since if you absolutely
3095            must execute them you can always say "python <filename>".
3096    
3097            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
3098            superfluous code to set brush and pen for point shapes
3099    
3100            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
3101            belong in viewport anyway
3102    
3103    2003-07-24  Frank Koormann   <[email protected]>
3104    
3105            * Doc/manual/thuban-manual.xml: Added section on table management.
3106    
3107    2003-07-24  Bernhard Herzog  <[email protected]>
3108    
3109            * test/runtests.py (main): Recognize the long "verbose" option
3110            correctly.
3111    
3112    2003-07-22  Jonathan Coles   <[email protected]>
3113    
3114            * Doc/manual/thuban-manual.xml: Continue to write first revision
3115            of the manual.
3116    
3117            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
3118            with Begin/EndDrawing() calls to ensure we aren't doing to
3119            many updates to the dc during rendering.
3120            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
3121            a pen and brush argument so they need to be passed to the function.
3122    
3123            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
3124            Calculates the minimum and maximum scale values. Factored out
3125            of set_view_transform so that it could be used to zoom all the
3126            way into a single point.
3127            (ViewPort.set_view_transform): Call calc_min_max_scales().
3128            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
3129            if only a single point is selected.
3130    
3131            * Doc/manual/images/1_2_legend_close.png,
3132            Doc/manual/images/1_2_legend_dock.png,
3133            Doc/manual/images/1_2_mainwindow.png,
3134            Doc/manual/images/1_2_mainwindow.ps,
3135            Doc/manual/images/1_2_mainwindow.sk,
3136            Doc/manual/images/3_2_fullextent.png,
3137            Doc/manual/images/3_2_fulllayerextent.png,
3138            Doc/manual/images/3_2_fullshapeextent.png,
3139            Doc/manual/images/3_2_pan.png,
3140            Doc/manual/images/3_2_zoomin.png,
3141            Doc/manual/images/3_2_zoomout.png,
3142            Doc/manual/images/3_3_identify.png,
3143            Doc/manual/images/3_3_label.png,
3144            Doc/manual/images/3_5_invisible.png,
3145            Doc/manual/images/3_5_movedown.png,
3146            Doc/manual/images/3_5_moveup.png,
3147            Doc/manual/images/3_5_props.png,
3148            Doc/manual/images/3_5_tobottom.png,
3149            Doc/manual/images/3_5_totop.png,
3150            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
3151    
3152    2003-07-18  Bernhard Herzog  <[email protected]>
3153    
3154            * Thuban/UI/messages.py (MAP_REPLACED): New message.
3155    
3156            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
3157            after the new map has been assigned
3158    
3159            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
3160            Delegate MAP_REPLACED to the canvas too
3161            (MainWindow.prepare_new_session): Removed. Thanks to the new
3162            MAP_REPLACED message it's no longer needed
3163            (MainWindow.OpenSession, MainWindow.NewSession):
3164            prepare_new_session has been removed.
3165    
3166            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
3167            MAP_REPLACED so that we can close the dialog if a new map is set.
3168            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
3169            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
3170            dialog
3171    
3172            * test/test_viewport.py (SimpleViewPortTest)
3173            (SimpleViewPortTest.test_default_size): Add doc-strings
3174            (ViewPortTest.setUp): Bind map to self.map so we can use it in
3175            tests. Subscribe to MAP_REPLACED messages too.
3176            (ViewPortTest.tearDown): No need to explicitly unsubscribe
3177            (ViewPortTest.test_set_map): New test for the SetMap method.
3178    
3179    2003-07-18  Bernhard Herzog  <[email protected]>
3180    
3181            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
3182            Move this test from ViewPortTest.setUp to this new separate test
3183            case. setUp is not the place for the actual tests.
3184            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
3185            more of the test from setUp to the new test test_inital_settings.
3186            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
3187            (ViewPortTest.test_proj_conv): Split test_proj_conv into
3188            test_win_to_proj and test_proj_to_win and make the tests easier to
3189            understand
3190            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
3191            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
3192            (ViewPortTest.test_unprojected_rect_around_point)
3193            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
3194            Reformat to increase readability.
3195    
3196    2003-07-18  Bernhard Herzog  <[email protected]>
3197    
3198            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
3199    
3200    2003-07-18  Bernhard Herzog  <[email protected]>
3201    
3202            * test/runtests.py: The test suite can now be run without an X
3203            connection. To make sure this remains true, remove the DISPLAY
3204            environment variable so that an error occurs if the wxGTK is
3205            imported accidentally
3206    
3207    2003-07-18  Bernhard Herzog  <[email protected]>
3208    
3209            * Thuban/UI/viewport.py: Remove unused imports
3210    
3211            * Thuban/UI/view.py: Remove unused imports
3212    
3213    2003-07-18  Bernhard Herzog  <[email protected]>
3214    
3215            * test/test_export.py Remove unused imports. The OutputTransform
3216            function is now in viewport.py and is called output_transform
3217            (TestScalebar.test_output_transform)
3218            (TestScalebar.test_OutputTransform): Renamed to
3219            test_output_transform and updated to use output_transform instead
3220            of OutputTransform
3221    
3222            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
3223            renamed.
3224            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
3225            renamed to output_transform
3226    
3227            * Thuban/UI/viewport.py (OutputTransform, output_transform):
3228            Rename to output_transform
3229    
3230    2003-07-18  Bernhard Herzog  <[email protected]>
3231    
3232            * Thuban/Model/layer.py (Layer.__init__): Rename
3233            classificationField to classificatin_column and init it here so
3234            that it can be used in SetClassificationColumn
3235            (Layer.GetClassificationColumn, Layer.GetClassificationField):
3236            Rename to GetClassificationColumn.
3237            (Layer.SetClassificationColumn, Layer.SetClassificationField):
3238            Rename to SetClassificationColumn and issue a LAYER_CHANGED
3239            message if the column changes.
3240            (Layer._classification_changed, Layer.ClassChanged): Rename to
3241            _classification_changed. Update the callers.
3242            (Layer.SetShapeStore): Further field->column renames.
3243    
3244            * Thuban/Model/load.py (SessionLoader.start_classification)
3245            (SessionLoader.start_clpoint): Updates because of
3246            field->column method name changes in the Layer class
3247    
3248            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
3249            because of field->column method name changes in the Layer class
3250    
3251            * Thuban/UI/classifier.py (Classifier.__init__)
3252            (Classifier._OnTry, Classifier._OnRevert): Updates because of
3253            field->column method name changes in the Layer class
3254    
3255            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
3256            because of field->column method name changes in the Layer class
3257    
3258            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
3259            of field->column method name changes in the Layer class
3260    
3261            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
3262            (SaveSessionTest.testClassifiedLayer): Update because of
3263            field->column method name changes in the Layer class
3264    
3265            * test/test_layer.py (SetShapeStoreTests.setUp)
3266            (SetShapeStoreTests.test_sanity): Update because of field->column
3267            method name changes in the Layer class
3268            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
3269            (TestLayerModification.test_sanity)
3270            (TestLayerModification.test_initial_settings): remove unsued code
3271            and rename to test_sanity.
3272            (TestLayerModification.test_set_classification): New test for
3273            SetClassification and SetClassificationField.
3274    
3275    2003-07-18  Bernhard Herzog  <[email protected]>
3276    
3277            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
3278            the non-fixed values as well. The old test would have accepted a
3279            fixed ramp that only returnes the fixed properties
3280    
3281    2003-07-17  Jonathan Coles   <[email protected]>
3282    
3283            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
3284            shots for the manual. The XCF file is the source image and
3285            has additional layers to support changes.
3286    
3287            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
3288    
3289            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
3290            Return both the new class and the field name.
3291    
3292            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
3293            fit the map to the window as this changes any zoom level that
3294            the user may have set.
3295    
3296    2003-07-16  Jonathan Coles   <[email protected]>
3297    
3298            * Thuban/Model/classgen.py (generate_singletons,
3299            generate_uniform_distribution, generate_quantiles): Remove
3300            fixes parameter, but maintain the same functionality by having
3301            the calling function pass a FixedRamp object for the ramp.
3302            (FixedRamp): New. Adapts a ramp to have fixed property values.
3303    
3304            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
3305            (Classification): Inherit from Publisher.
3306            (Classification.__init__): Remove the layer parameter.
3307            Classifications no longer need to have a parent layer.
3308            (Classification.GetField, Classification.GetFieldType,
3309            Classification.SetFieldInfo): Removed. The field name is stored
3310            in the layer, and the type can be retreived by calling
3311            Layer.GetFieldType().
3312            (Classification._set_layer, Classification.GetLayer): Removed.
3313            Classifications no longer have a parent layer.
3314    
3315            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
3316            classification.
3317            (Layer.SetShapeStore): Reset the classification first while
3318            we still have the old shape store to work with.
3319            (Layer.GetClassificationField, Layer.SetClassificationField):
3320            New. Method for getting/setting the field to classify on.
3321            (Layer.SetClassification): Simplified now that the layer
3322            simply has to hold a reference to the classification and not
3323            tell the classification who owns it.
3324            Fixes RTbug #2023.
3325    
3326            * Thuban/Model/load.py (SessionLoader.start_classification):
3327            Set the field name on the layer, not the classification.
3328    
3329            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
3330            classification is modified.
3331    
3332            * Thuban/Model/save.py (SessionSaver.write_classification):
3333            Get the field name and type from the layer.
3334    
3335            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
3336            parameter records to rows and add docstring. Fixes RTbug #1997.
3337    
3338            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
3339            ramp when we need to fix certain values of a ramp rather than
3340            using the old fixes parameter. Fixes RTbug #2024.
3341    
3342            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
3343            parameter.
3344            (ClassTable.Reset): Add fieldType parameter and use it, rather
3345            than asking the classification.
3346            (Classifier.__init__): Remember the original class's field
3347            and ask the layer for the field type, rather than the classification.
3348            (Classifier.__SetGridTable): Retrieve the field and field type
3349            for the table because they are not in the classification.
3350            (Classifier._OnTry, Classifier._OnRevert): Set the classification
3351            field on the layer in addition to the classification itself.
3352    
3353            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
3354            classification field from layer.
3355    
3356            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
3357            classification field from layer. Split up tests and remove
3358            *-imports. Fixes RTbug #1992.
3359    
3360            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
3361    
3362            * test/test_classification.py
3363            (TestClassification.test_classification): Remove tests for methods
3364            that no longer exist.
3365    
3366            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
3367            __init__ no longer has a field parameter, use SetClassificationField.
3368            (SetShapeStoreTests.test_sanity): Use layer object to get class
3369            field info.
3370    
3371            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
3372            SetClassificationField on layer to set class field info.
3373    
3374            * test/test_viewport.py: Renamed from test/test_view.py.
3375    
3376    2003-07-16  Jan-Oliver Wagner <[email protected]>
3377    
3378            * Doc/manual/thuban-manual.xml: Added authors and an initial
3379            coarse structure.
3380    
3381    2003-07-15  Bernhard Herzog  <[email protected]>
3382    
3383            * test/support.py (FloatComparisonMixin): This is a mix-in class
3384            and therefore should not be derived from any other class.
3385    
3386            * test/test_range.py (RangeTest): FloatComparisonMixin is a
3387            mix-in, so derive from TestCase as well.
3388    
3389    2003-07-15  Bernhard Herzog  <[email protected]>
3390    
3391            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
3392            draw_func handling a bit to remove one layer of indirection. This
3393            makes the renderer about 10% faster in the non-classifying case
3394            and the code a bit cleaner
3395            (MapRenderer.draw_point_shape): Add the pen and brush parameters
3396            and set them in the dc. Now the draw_point_shape method and
3397            wxproj's draw_polygon_shape function have basically the same
3398            signature so that both can be directly used as draw_func
3399    
3400    2003-07-15  Bernhard Herzog  <[email protected]>
3401    
3402            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
3403            string values (in addition to the labels) as UTF 8
3404    
3405            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
3406            values if the field type is string
3407    
3408            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
3409            saving a session with non-ascii string classification values.
3410    
3411            * test/test_load.py (TestClassification.file_contents)
3412            (TestClassification.test): Check for non-ascii values in string
3413            classifications
3414    
3415    2003-07-14  Jonathan Coles   <[email protected]>
3416    
3417            * test/test_view.py: New. Tests for ViewPort.
3418    
3419    2003-07-14  Frank Koormann   <[email protected]>
3420    
3421            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
3422            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
3423    
3424            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
3425            unicode strings from session file: session title, map title and
3426            projection name.
3427            
3428    2003-07-10  Jonathan Coles   <[email protected]>
3429    
3430            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
3431            drag_stop, not drag_move when the mouse is released.
3432    
3433    2003-07-10  Jonathan Coles   <[email protected]>
3434    
3435            The most important part of this is the seperation of view.py into
3436            two pieces. viewport.py now has a class called ViewPort which
3437            contains all the non-wx parts of view.py and can therefore be
3438            tested. view.py contains only the wx-specific parts and is fairly
3439            simple.
3440    
3441            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
3442            RTTbug #1992.
3443            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
3444            RTTbug #1992.
3445    
3446            * Thuban/Model/classgen.py (generate_singletons,
3447            generate_uniform_distribution, generate_quantiles):
3448            Added 'fixes' parameter so that property attributes can
3449            be held constant over the generated classification groups.
3450            (CustomRamp.GetProperties): Remove unused variables.
3451    
3452            * Thuban/Model/map.py (Map.SetProjection): Send the old
3453            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
3454            event.
3455    
3456            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
3457            parameter which is a list of records that restricts which
3458            records are saved. Fixes RTbug #1997.
3459    
3460            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
3461            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
3462    
3463            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
3464            to allow the user to fix line color/width on generated groups.
3465            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
3466            functions to optionally fix group properties.
3467    
3468            * Thuban/UI/main.py (main): Set exception hook to the
3469            ShowExceptionDialog. Fixes RTbug #1993.
3470    
3471            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
3472            the table window when it is selectd to be shown.
3473    
3474            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
3475            Export Selection button and move the export buttons underneath
3476            the table.
3477            (QueryTableFrame.UpdateStatusText): Added event argument so
3478            that it can respond to grid selection events. The status text
3479            is now updated even when the table is not associated with a
3480            layer as was previously assumed.
3481            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
3482            UpdateStatusText responds to these events.
3483            (QueryTableFrame.OnSaveAs): Renamed to doExport.
3484            (QueryTableFrame.doExport): Helper function that saves the
3485            entire table, or selected rows, to a file.
3486            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
3487            Respond to export button events and call doExport.
3488    
3489            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
3490            the function doesn't return NULL without first setting a Python
3491            Error.
3492    
3493            * test/runtests.py (main): Only print "Unknown option" for
3494            unsupported options.
3495    
3496            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
3497            optional epsilon argument to specify floating point accuracy.
3498            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
3499            for each item test.
3500    
3501            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
3502            tests for saving selected records.
3503    
3504            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
3505            tests for saving selected records.
3506    
3507            * test/test_map.py (TestMapWithContents.test_set_projection):
3508            MAP_PROJECTION_CHANGED events send the old projection.
3509    
3510            * test/test_session.py
3511            (TestSessionWithContent.test_forward_map_projection):
3512            MAP_PROJECTION_CHANGED events send the old projection.
3513    
3514            * test/test_table.py (TableTest): Update tests to use non-deprecated
3515            functions.
3516    
3517    2003-07-08  Bernhard Herzog  <[email protected]>
3518    
3519            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
3520            constants in the column objects are the standard ones defined in
3521            the table module.
3522    
3523            * test/test_transientdb.py
3524            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
3525            exporting transient tables as DBF works. This should catch the bug
3526            just fixed in TransientTableBase.Width.
3527    
3528    2003-07-08  Bernhard Herzog  <[email protected]>
3529    
3530            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
3531            interpolated colors correctly.
3532    
3533            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
3534            New. Test case for the fix in classgen.py
3535    
3536    2003-07-08  Bernhard Herzog  <[email protected]>
3537    
3538            * test/runtests.py (main): Make the default output less verbose
3539            and add a verbosity option (-v) to get the old output
3540    
3541    2003-07-08  Bernhard Herzog  <[email protected]>
3542    
3543            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
3544            0.9.
3545    
3546            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
3547            New. Return the join type
3548    
3549            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
3550            DTD
3551            (SessionSaver.write_data_containers): Save the join type for
3552            joined tables
3553    
3554            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
3555            namespace
3556            (SessionLoader.start_jointable): Handle the jointype attribute
3557    
3558            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
3559            as of Thuban 0.8. These are now tests to determine whether Thuban
3560            can still read files generated by Thuban 0.8
3561    
3562            * test/test_load.py (LoadSessionTest.dtd)
3563            (TestSingleLayer.file_contents)
3564            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3565            (TestLayerProjection.file_contents)
3566            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3567            (TestJoinedTable.file_contents)
3568            (TestLoadError.file_contents): Update for new DTD
3569            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
3570            for new join type attribute
3571    
3572            * test/test_save.py (SaveSessionTest.dtd)
3573            (SaveSessionTest.testEmptySession)
3574            (SaveSessionTest.testSingleLayer)
3575            (SaveSessionTest.testLayerProjection)
3576            (SaveSessionTest.testRasterLayer)
3577            (SaveSessionTest.testClassifiedLayer)
3578            (SaveSessionTest.test_dbf_table)
3579            (SaveSessionTest.test_joined_table): Update for new DTD
3580            (SaveSessionTest.test_joined_table): Add test for new join type
3581            attribute
3582    
3583    2003-07-04  Bernhard Herzog  <[email protected]>
3584    
3585            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
3586            function for table_to_dbf
3587            (table_to_dbf): Deal with names longer than the 10 character limit
3588    
3589            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
3590            doc-string
3591            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
3592            long column names
3593    
3594    2003-07-03  Bernhard Herzog  <[email protected]>
3595    
3596            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
3597    
3598    2003-07-03  Bernhard Herzog  <[email protected]>
3599    
3600            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
3601            for the Thuban manual and README with some basic information about
3602            the manual
3603    
3604    2003-07-03  Bernhard Herzog  <[email protected]>
3605    
3606            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
3607            Update doc-string
3608            (TransientJoinedTable.create): Do not modify the column objects of
3609            the input tables in place and copy all columns of the input tables
3610            into the joined table after all.
3611    
3612            * test/test_transientdb.py
3613            (TestTransientTable.test_transient_joined_table_same_column_name):
3614            Update to reflect the new behavior
3615            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
3616            Update to reflect the new behavior
3617            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
3618            New test case for a bug which modified the column objects in place
3619    
3620    2003-07-02  Jonathan Coles   <[email protected]>
3621    
3622            * Thuban/Model/classgen.py (generate_singletons,
3623            generate_uniform_distribution, generate_quantiles,
3624            GenQuantiles0): Make sure maxValue isn't less than
3625            one, otherwise we could divide by zero.
3626    
3627            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
3628            ClassGenTest.doClassSingleTest): Call doBoundsTest to
3629            check the end classification groups against the
3630            proper property values.
3631            (ClassGenTest.doBoundsTest): New. Checks the first and
3632            last classification groups to make sure their properties
3633            are the correct upper and lower bounds for a color ramp.
3634    
3635    2003-07-02  Jonathan Coles   <[email protected]>
3636    
3637            * Thuban/Model/classgen.py (generate_singletons,
3638            generate_uniform_distribution, generate_quantiles,
3639            GenQuantiles0): The denominator was one to high when
3640            calculating the index for the ramp causing the index
3641            to never to reach one.
3642    
3643    2003-07-02  Jonathan Coles   <[email protected]>
3644    
3645            Changed the singature of ClassGroupRange.__init__ and
3646            ClassGroupRange.SetRange() so that the min/max values are
3647            passed as a tuple. This makes a better calling scheme for
3648            when a Range object is passed instead.
3649    
3650            * Thuban/Model/classgen.py: Fixed parameters to
3651            ClassGroupRange constructor.
3652    
3653            * Thuban/Model/classification.py (ClassGroupRange.__init__):
3654            Consolidate the min/max parameters into a single _range which
3655            can either be a tuple or a Range object.
3656            (ClassGroupRange.SetRange): Consolidate the min/max parameters
3657            into a single _range which can either be a tuple or a Range object.
3658    
3659            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
3660            call to ClassGroupRange constructor to use a tuple.
3661    
3662            * Thuban/Model/layer.py (Layer.SetClassification): Switch
3663            the classification instance variable to the new class
3664            before calling _set_layer otherwise subscribers to a
3665            LAYER_CHANGED event will not see any difference.
3666    
3667            * test/test_classification.py: Fix tests of ClassGroupRange
3668            so that they use the new signature.
3669    
3670            * test/test_load.py: Fix use of ClassGroupRange so that it
3671            uses the new signature.
3672    
3673            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
3674            uses the new signature.
3675    
3676            * test/test_save.py: Fix use of ClassGroupRange so that it
3677            uses the new signature.
3678    
3679    
3680  2003-07-01  Jonathan Coles   <[email protected]>  2003-07-01  Jonathan Coles   <[email protected]>
3681    
3682          * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.          * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26