/[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 1569 by jan, Fri Aug 8 13:33:52 2003 UTC revision 2089 by bh, Wed Feb 25 10:41:35 2004 UTC
# Line 1  Line 1 
1    2004-02-25  Bernhard Herzog  <[email protected]>
2    
3            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
4            version of wxWindows the module was compiled with so we can check
5            that against the wxPython version.
6    
7            * Thuban/version.py (thuban_branch, thuban_release): New variables
8            controlling which and how Thuban versions are shown.  See the
9            comments for details.
10            (verify_versions): Also check that the wx version that wxproj is
11            compiled against matches that of the wxPython we use at runtime
12    
13    2004-02-20  Bernhard Herzog  <[email protected]>
14    
15            * Extensions/wms/wms.py (epsg_code_to_projection): Use
16            get_system_proj_file to read the epsg projections.  The old way
17            depended on the current directory being the top Thuban directory.
18    
19    2004-02-20  Bernhard Herzog  <[email protected]>
20    
21            * Extensions/svgexport/test/test_svgmapwriter.py
22            (TestVirtualDC.test_clippath): Remove a debug print
23    
24    2004-02-20  Bernhard Herzog  <[email protected]>
25    
26            * Extensions/svgexport/__init__.py: New.  Turn
27            Extensions/svgexport into a package.
28    
29            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
30            doc-string a bit.  The doc-string must come first, otherwise it's
31            not a doc-string.  The __future__ import must be the first thing
32            after the doc-string.  Use only double quotes in doc-strings.
33            Single quotes trip up emacs syntax highlighting if the text
34            contains apostrophes.
35    
36    2004-02-20  Bernhard Herzog  <[email protected]>
37    
38            * Extensions/svgexport/test/__init__.py,
39            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
40            suite for svgexport
41    
42            * test/runtests.py (find_test_modules): New. Function with the
43            module finding code from main.
44            (main): Use find_test_modules to figure out the default test
45            modules and take modules from Extensions.svgexport.test too.
46    
47    2004-02-19  Bernhard Herzog  <[email protected]>
48    
49            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
50            the mainwindow has a reference to the map of the initial session.
51            This fixes a bug introduced with the fix for RT#2245
52    
53    2004-02-19  Bernhard Herzog  <[email protected]>
54    
55            * Extensions/svgexport/svgsaver.py,
56            Extensions/svgexport/svgmapwriter.py,
57            Extensions/svgexport/maplegend.py: Added again.  This time in the
58            correct place.
59    
60    2004-02-17  Bernhard Herzog  <[email protected]>
61    
62            Fix for RT#2245
63    
64            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
65            instance variables before trying to create any windows.  Creating
66            windows can start an event loop if e.g. message boxes are popped
67            up for some reason, and event handlers, especially EVT_UPDATE_UI
68            may want to access things from the application.
69            (ThubanApplication.maps_changed): The mainwindow may not have been
70            created yet, so check whether it has been created before calling
71            its methods
72    
73            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
74            have a map
75    
76    2004-02-17  Bernhard Herzog  <[email protected]>
77    
78            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
79            Extensions/svgmapwriter.py, Extensions/maplegend.py,
80            extensions/svgexport/svgsaver.py,
81            extensions/svgexport/svgmapwriter.py,
82            extensions/svgexport/maplegend.py: Removed.  These files were in
83            the wrong places or didn't work at all.
84    
85    2004-02-16  Bernhard Herzog  <[email protected]>
86    
87            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
88            line
89    
90    2004-02-16  Bernhard Herzog  <[email protected]>
91    
92            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
93    
94    2004-02-15  Markus Rechtien  <[email protected]>
95            
96            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
97            to write a session to a file in SVG format.
98            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
99            to write a SVG map of a session.
100            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
101            in SVG format for the current session.
102    
103    2004-02-13  Bernhard Herzog  <[email protected]>
104    
105            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
106            can't be created, return immediately after displaying the error
107            message.
108    
109    2004-02-11  Bernhard Herzog  <[email protected]>
110    
111            Handle postgis tables with more than one geometry column.
112    
113            * Thuban/Model/postgisdb.py
114            (PostGISTable._fetch_table_information): Delegate the creation of
115            column objects to a different method so that we can extend that in
116            derived classes
117            (PostGISTable._create_col_from_description): New. Column object
118            creation part of _fetch_table_information
119            (PostGISShapeStore._create_col_from_description): New. Extend
120            inherited method to handle geometry columns
121            (PostGISShapeStore.__init__): New parameter geometry_column to
122            specify which geometry column to use.  Optional but mandatory for
123            tables with more than one geometry column
124            (PostGISShapeStore._fetch_table_information): Also use the name of
125            the geometry column when looking for the srid
126            (PostGISShapeStore.ShapeType): Also use the name of the geometry
127            column when looking for the shape type
128    
129            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
130            NonConnectionStore to changes in the PostGISShapeStore
131    
132            * test/test_postgis_db.py
133            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
134            PostGISShapeStore with tables having two geometry columns.
135    
136    2004-02-10  Bernhard Herzog  <[email protected]>
137    
138            Fix some postgis problems.  What remains to be done is real
139            handling of SRIDs as they affect how reprojection is done
140    
141            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
142            doc-string
143            (PostGISShapeStore._fetch_table_information): New. Extend
144            inherited method to retrieve srid
145            (PostGISShapeStore.BoundingBox): Handle tables without data.
146            extent yields NULL for those
147            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
148    
149            * test/test_postgis_db.py
150            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
151            for the special case of a table without any data
152            (TestPostGISShapestorePointSRID): New class with tests for a table
153            that uses srids
154            (PolygonTests): Fix a doc-string typo
155    
156            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
157            reference_systems with a specification of spacial reference
158            systems to create in the new db.
159            (PostgreSQLServer.new_postgis_db)
160            (PostgreSQLServer.get_static_data_db): New parameter
161            reference_systems to be passed through ultimately to
162            PostGISDatabase.  In new_postgis_db also check whether an existing
163            db already has the right srids
164            (PostgreSQLServer.get_default_static_data_db): Add srids and a
165            table that uses srids
166            (PostGISDatabase.initdb): Create the entries for the reference
167            systems
168            (PostGISDatabase.has_data): Add reference_systems parameter to
169            check for those too
170            (upload_shapefile): New parameter srid to create tables with a
171            specific srid
172    
173    2004-02-06  Frank Koormann  <[email protected]>
174    
175            * po/pt_BR.po: Fixed charset
176    
177    2004-02-05  Frank Koormann  <[email protected]>
178    
179            * po/pt_BR.po: Fixed format string for error message, missing %s
180            added (Thuban/UI/application.py:273)
181    
182    2004-02-03  Frank Koormann  <[email protected]>
183            
184            First version of Portuguese (Brazilian) translation
185    
186            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
187            Brazilian Portuguese by Eduardo Patto Kanegae.
188    
189            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
190            translators.
191    
192    
193    2004-01-22  Frank Koormann  <[email protected]>
194    
195            * Doc/manual/thuban-manual.xml: Added section on installation of
196            Thuban under Win32 systems. Fixed image path references in the postgis
197            section. Some minor source formattings.
198    
199    2004-01-21  Frank Koormann  <[email protected]>
200    
201            Make Thuban remember path selections (at least for one application run).
202    
203            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
204            attribute of application object. Path is a dictionary of
205            strings, currently with the items "data" and "projection".  
206            (Application.SetPath): New, stores path for the specified item.
207            (Application.Path): New, return path for the specified item.
208    
209            * Thuban/UI/mainwindow.py
210            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
211            MainWindow.AddLayer, MainWindow.AddRasterLayer,
212            MainWindow.TableOpen): Access "data" path information of the
213            application.
214            
215            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
216            Access "projection" path information of the application.
217    
218    2004-01-05  Bernhard Herzog  <[email protected]>
219    
220            * po/ru.po: Updated translations from Alex Shevlakov
221    
222    2004-01-05  Bernhard Herzog  <[email protected]>
223    
224            * po/Makefile, po/README: Move the description of how to generate
225            the translation statistics to the README.
226    
227    2003-12-23  Bernhard Herzog  <[email protected]>
228    
229            * NEWS: Update for 1.0.0
230    
231            * po/it.po: Another update from Maurizio Napolitano
232    
233    2003-12-23  Bernhard Herzog  <[email protected]>
234    
235            * po/it.po: Updated translation from Maurizio Napolitano
236    
237    2003-12-23  Bernhard Herzog  <[email protected]>
238    
239            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
240            for translation
241    
242            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
243            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
244            strings for translation
245    
246            * po/de.po: Update with the newly marked strings.
247    
248    2003-12-22  Bernhard Herzog  <[email protected]>
249    
250            * HOWTO-Release: Fix the places where version numbers have to be
251            updated
252    
253    2003-12-22  Bernhard Herzog  <[email protected]>
254    
255            * setup.py (setup call): 1.0.0, yeah!
256    
257            * Thuban/version.py (longversion): 1.0.0, yeah!
258    
259            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
260            1.0.0 namespace too
261    
262            * Thuban/Model/save.py (SessionSaver.write_session): Save with
263            1.0.0 namespace
264    
265            * test/test_load.py (LoadSessionTest.dtd)
266            (TestSingleLayer.file_contents)
267            (TestNonAsciiColumnName.file_contents)
268            (TestLayerVisibility.file_contents)
269            (TestClassification.file_contents, TestLabels.file_contents)
270            (TestLayerProjection.file_contents)
271            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
272            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
273            (TestPostGISLayerPassword.file_contents)
274            (TestLoadError.file_contents, TestLoadError.test): Update for
275            1.0.0 namespace
276    
277            * test/test_save.py (SaveSessionTest.dtd)
278            (SaveSessionTest.testEmptySession)
279            (SaveSessionTest.testSingleLayer)
280            (SaveSessionTest.testLayerProjection)
281            (SaveSessionTest.testRasterLayer)
282            (SaveSessionTest.testClassifiedLayer)
283            (SaveSessionTest.test_dbf_table)
284            (SaveSessionTest.test_joined_table)
285            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
286    
287    2003-12-22  Bernhard Herzog  <[email protected]>
288    
289            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
290            alignment flags are byte strings not unicode and that they have
291            valid values
292    
293            * test/test_load.py (TestLabelLayer): New. Test loading (and
294            indirectly saving) of maps with labels.
295    
296    2003-12-22  Bernhard Herzog  <[email protected]>
297    
298            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
299            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
300            unsubscribe all subscribers.
301            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
302            self.grid since it may already have been destroyed.
303            Fixes RT #2256
304    
305    2003-12-19  Bernhard Herzog  <[email protected]>
306    
307            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
308    
309    2003-12-16  Bernhard Herzog  <[email protected]>
310            
311            * debian/bitmappath.patch, debian/setup.py.patch:
312                    added to ensure compliance with FHS for debian
313            * debian/rules, debian/changelog:
314                added patches in rules to ensure compliance with FHS for debian
315    
316    2003-12-16  Bernhard Herzog  <[email protected]>
317    
318            * po/Makefile (mo): Make the output a bit nicer so that it prints
319            statistics about the translations. Add a comment how produce even
320            nicer statistics with sed.
321    
322    2003-12-09  Frank Koormann   <[email protected]>
323    
324            * Resources/Projections/defaults.proj:
325            French projection sample with correct accents (UNICODE).
326    
327    2003-12-05  Bernhard Herzog  <[email protected]>
328    
329            * MANIFEST.in: Add the devtools directory
330    
331            * setup.py (setup call): Use license instead of licence. This
332            silences a deprecation warning on Python 2.3
333    
334    2003-12-05  Frank Koormann   <[email protected]>
335    
336            Documentation synced with 1.0rc1
337    
338            * Doc/manual/thuban-manual.xml:
339            Minor formatting changes and references to database layers .
340            Introduction.Internationalization: New section on i18n.
341            MapManagement.AddingandRemovingLayers: Added item on database layers.  
342            MapManagement.TheLegend: Added section and screenshot on popup menu.
343            ProjectionManagement: Updated screenshot and sentence on EPSG.
344            Appendix.SupportedDataSources: Added PostGIS.
345            Appendix.WorkingwithPostGIS: New section.
346    
347            * Doc/manual/images/6_projection.png: Updated screenshot including
348            EPSG checkboxes.
349    
350            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
351    
352            * Doc/manual/images/app_postgis_add_layer.png,
353            Doc/manual/images/app_postgis_db_add.png,
354            Doc/manual/images/app_postgis_db_management.png:
355            New screenshots focussing on database layers
356    
357    2003-12-05  Frank Koormann   <[email protected]>
358    
359            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
360            write warning to stderr instead of rising a warning dialog
361    
362    2003-12-03  Bernhard Herzog  <[email protected]>
363    
364            Fix for RT #2243
365    
366            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
367            New. Like has_selected_layer but for shape layers only
368            (_has_selected_shape_layer): New. Like _has_selected_layer but for
369            shape layers only
370            (layer_show_table command, layer_jointable command): Use these
371            commands should only be available for shape layers
372    
373    2003-12-03  Bernhard Herzog  <[email protected]>
374    
375            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
376            publishers that are wx objects and may have been destroyed by wx
377            already. Fixes RT #2242.
378    
379    2003-12-03  Bernhard Herzog  <[email protected]>
380    
381            * po/ru.po: Updates from Alex Shevlakov
382    
383    2003-12-03  Silke Reimer <silkeintevation.de>
384    
385            * debian/control, debian/changelog: Added gdal-support to
386                    debian package, updated to new thuban version
387    
388    
389    2003-12-03  Bernhard Herzog  <[email protected]>
390    
391            * Thuban/Lib/version.py: New. Module for version number
392            manipulations. The version of make_tuple here also deals better
393            with more unusual version number strings, such as e.g.
394            "1.2+cvs20031111"
395    
396            * Thuban/version.py (make_tuple): Removed. It's now in
397            Thuban.Lib.version. Use that implementation instead.
398    
399            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
400    
401    2003-12-02  Bernhard Herzog  <[email protected]>
402    
403            * MANIFEST.in: Add debian files
404    
405            * setup.py (setup call): Add packages for the Extensions so that
406            they're installed too
407            (data_files): Add READMEs and sample data from some Extensions
408    
409            * NEWS: Add note about the extensions in binary packages
410    
411    2003-12-02  Bernhard Herzog  <[email protected]>
412    
413            * Thuban/Model/save.py (SessionSaver.write_session): Save files
414            with the thuban-1.0rc1
415    
416            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
417            thuban-1.0rc1 namespace too
418    
419            * test/test_save.py (SaveSessionTest.dtd)
420            (SaveSessionTest.testEmptySession)
421            (SaveSessionTest.testSingleLayer)
422            (SaveSessionTest.testLayerProjection)
423            (SaveSessionTest.testRasterLayer)
424            (SaveSessionTest.testClassifiedLayer)
425            (SaveSessionTest.test_dbf_table)
426            (SaveSessionTest.test_joined_table)
427            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
428            namespace
429    
430            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
431            namespace
432            (TestSingleLayer.file_contents)
433            (TestNonAsciiColumnName.file_contents)
434            (TestLayerVisibility.file_contents)
435            (TestClassification.file_contents, TestLabels.file_contents)
436            (TestLayerProjection.file_contents)
437            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
438            (TestPostGISLayer.file_contents)
439            (TestPostGISLayerPassword.file_contents)
440            (TestLoadError.file_contents, TestLoadError.test): Update to
441            thuban-1.0rc1 namespace
442    
443    2003-12-01  Bernhard Herzog  <[email protected]>
444    
445            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
446            nt to better match Intevation's current w32 setup
447    
448            * HOWTO-Release: Add note about updating MANIFEST.in
449    
450            * MANIFEST.in: Add the Extensions
451    
452            * NEWS: Update for 1.0rc1
453    
454    2003-12-01  Bernhard Herzog  <[email protected]>
455    
456            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
457            cards for the dialog so that shapefiles ending in all uppercase
458            SHP are listed too
459    
460    2003-11-28  Bernhard Herzog  <[email protected]>
461    
462            * Thuban/version.py (longversion): Update to 1.0rc1
463    
464            * setup.py (setup call): Update version to 1.0rc1. Use the
465            [email protected] email address as author email instead of my
466            personal one.
467    
468    2003-11-28  Bernhard Herzog  <[email protected]>
469    
470            * po/de.po: Update german translation.
471    
472    2003-11-28  Bernhard Herzog  <[email protected]>
473    
474            Unify the filenames stored in .thuban files so that the .thuban
475            files are more platform independend
476    
477            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
478            that they can be used on both windows and unix
479            (SessionSaver.prepare_filename): New. Handle all filename
480            transformations for filenames stored in the thuban file
481            (SessionSaver.write_data_containers, SessionSaver.write_layer):
482            Use prepare_filename
483    
484            * test/test_save.py (SaveSessionTest.testSingleLayer)
485            (SaveSessionTest.testLayerProjection)
486            (SaveSessionTest.testRasterLayer)
487            (SaveSessionTest.testClassifiedLayer)
488            (SaveSessionTest.test_dbf_table)
489            (SaveSessionTest.test_joined_table): Filenames are always stored
490            with slashes on all currently supported platforms so adapt all
491            tests to this
492    
493            * test/test_load.py (LoadSessionTest.filenames): With the new
494            filename scheme the filenames in the tests should be
495            understandable on all currently supported platforms so we turn
496            this into an empty list because we don't have to normalize them
497            anymore
498    
499    2003-11-28  Bernhard Herzog  <[email protected]>
500    
501            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
502            Add the ellipsoid to the projection since some Proj versions
503            complain if it's missing.
504    
505    2003-11-27  Bernhard Herzog  <[email protected]>
506    
507            Corect some bounding box projection problems
508    
509            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
510            version of ForwardBBox
511            (Projection._transform_bbox): New. common implementation of
512            ForwardBBox and InverseBBox
513            (Projection.ForwardBBox): Use _transform_bbox.
514    
515            * test/test_proj.py (TestProjection.test): Add test for
516            InverseBBox
517    
518            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
519            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
520            new InverseBBox method to determine the unprojected bounding box
521            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
522            bbox.
523    
524            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
525            Removed.
526            (TestLayer.test_arc_layer_with_projection): New. This test is
527            better able to test whether bounding boxes are projected correctly
528            than test_point_layer_with_projection
529    
530            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
531            InverseBBox to unproject bboxes
532    
533    2003-11-25  Bernhard Herzog  <[email protected]>
534    
535            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
536            source code.
537    
538    2003-11-25  Bernhard Herzog  <[email protected]>
539    
540            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
541            there for backwards compatibility and all code relying on that
542            should have been updated by now.
543    
544    2003-11-25  Bernhard Herzog  <[email protected]>
545    
546            * test/test_load.py (TestClassification.test): Add the missing
547            round trip test.
548            (TestClassification.file_contents): Update to the newest file
549            format
550    
551    2003-11-25  Bernhard Herzog  <[email protected]>
552    
553            Add very experimental (and possibly dangerous) extension to draw
554            polygons:
555    
556            * Extensions/drawshape/README: New. Brief installation
557            instructions
558    
559            * Extensions/drawshape/drawshape.py: New. Implementation of the
560            drawshape extensions
561    
562            * Extensions/drawshape/patch.diff: Patch to apply before the
563            extension can be used.
564    
565    2003-11-24  Bernhard Herzog  <[email protected]>
566    
567            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
568            (ShapefileStore.__init__): Factor opening the shapefile into a
569            separate method (the new _open_shapefile). This makes the code a
570            bit more readable but the real reason is that it makes some evil
571            hacks easier. :-)
572    
573    2003-11-24  Bernhard Herzog  <[email protected]>
574    
575            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
576            converter is specified for an attribute assume it's a string
577            containing only Latin1 characters. Update doc-string accordingly.
578            This change should fix many places where unicode objects might
579            accidentally enter Thuban.
580    
581            * test/test_load.py (TestNonAsciiColumnName): New test to check
582            what happens with column names in DBF files that contain non-ascii
583            characters
584    
585    2003-11-21  Bernhard Herzog  <[email protected]>
586    
587            Enable the experimental attribute editing again and introduce a
588            command line switch to actually activate it
589    
590            * Thuban/UI/main.py (options): New. Container for options set on
591            the commmand line
592            (main): Add the --enable-attribute-editing flag.
593    
594            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
595            editing is enabled use the grid ctrl which allows editing of the
596            values
597    
598            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
599            New. Just delegate this to the underlying table.
600    
601    2003-11-20  Bernhard Herzog  <[email protected]>
602    
603            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
604            Skip this test if run under non-posix systems since it only works
605            there
606    
607    2003-11-19  Bernhard Herzog  <[email protected]>
608    
609            * Thuban/Model/resource.py: Rework the way gdal support is
610            determined so that we can give a reason in the about why gdal is
611            not supported.
612            (gdal_support_status): New. Variable holding a string with the
613            reason for no gdal support
614    
615            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
616            not supported to the message
617    
618    2003-11-19  Bernhard Herzog  <[email protected]>
619    
620            Remove the old table interface and its test cases
621    
622            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
623            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
624            anymore
625    
626            * Thuban/Model/transientdb.py (TransientTableBase)
627            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
628            anymore
629    
630            * test/test_table.py: Removed since the old interface it tests is
631            gone.
632    
633            * test/runtests.py (main): The old table interface is gone and
634            with it the deprecation warnings so remove the code that turns
635            these warnings into errors
636    
637    2003-11-19  Bernhard Herzog  <[email protected]>
638    
639            * test/test_table.py: Revert to revision 1.5 again. Changing the
640            tests to use the new table interface is completely wrong since the
641            whole purpose of the tests in this module is to test the old
642            interface.
643    
644    2003-11-18  Bernhard Herzog  <[email protected]>
645    
646            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
647            New. Test whether the connection matches a set of connection
648            parameters
649    
650            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
651            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
652            for existing connections with the same parameters and break out of
653            the loop correctly.
654    
655            * test/test_postgis_db.py (TestBriefDescription)
656            (TestPostGISSimple.test_brief_description): Rename
657            TestBriefDescription to TestPostGISSimple and the test method to
658            test_brief_description so that we can add more test methods.
659            (TestPostGISSimple.test_matches_parameters): New. Test the new
660            MatchesParameters method
661    
662    2003-11-18  Bernhard Herzog  <[email protected]>
663    
664            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
665            _was_destroyed, to indicate whether an publisher instance has
666            already been destroyed.
667            (Publisher.Unsubscribe): Only disconnect if the publisher has not
668            been destroyed yet.
669            (Publisher.Destroy): Set the _was_destroyed flag to true.
670    
671            * test/test_connector.py
672            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
673            calling Unsubscribe after Destroy doesn't raise an exception
674    
675    2003-11-14  Bernhard Herzog  <[email protected]>
676    
677            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
678            typo in doc-string
679    
680    2003-11-13  Bernhard Herzog  <[email protected]>
681    
682            Quote table and column names properly for postgis.
683    
684            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
685            quote an identifier for use in an sql statement
686            (PostGISColumn.__init__): Add the quoted_name attribute
687            (PostGISTable.__init__): New instance variable quoted_tablename
688            (PostGISTable._fetch_table_information): Use the quoted table
689            name. New isntance variable quoted_geo_col with a quoted version
690            of geometry_column
691            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
692            (PostGISTable.RowOrdinalToId): Use the quoted table name
693            (PostGISTable.ReadValue, PostGISTable.ValueRange)
694            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
695            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
696            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
697            Use quoted table and column names
698    
699            * test/test_postgis_db.py (TestPostGISSpecialCases)
700            (TestPostGISIgnoredColumns): Rename the class to
701            TestPostGISSpecialCases because that better describes the new
702            cases
703            (TestPostGISSpecialCases.test_unsupported_types)
704            (TestPostGISSpecialCases.test): Rename the method to
705            test_unsupported_types because we need a more descriptive name now
706            that there are more methods
707            (TestPostGISSpecialCases.test_table_name_quoting)
708            (TestPostGISSpecialCases.test_column_name_quoting)
709            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
710            cases to test quoting of table and column names in PostGISTable
711            and PostGISShapeStore
712    
713            * test/postgissupport.py
714            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
715            AddGeometryColumn desn't support table or column names with sapces
716            or double quotes
717    
718    2003-11-12  Jan-Oliver Wagner <[email protected]>
719    
720            * Extensions/wms/__init__.py: New: Init to make this
721            directory a package.
722    
723            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
724    
725    2003-11-11  Bernhard Herzog  <[email protected]>
726    
727            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
728            Constant for the file woth deprecated epsg projections
729            (get_system_proj_file): Update doc-string
730    
731            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
732            above the EPS widgets, introduce a check box for the deprecated
733            eps projections and a label for the epsg widgets
734            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
735            too
736    
737    2003-11-11  Bernhard Herzog  <[email protected]>
738    
739            Avoid warnings when run under Python 2.3
740    
741            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
742            (BaseRenderer.draw_label_layer): Coordinates must be ints.
743    
744            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
745            real method so that we can convert to int.
746            (MapRenderer.label_font): The font size mist be an int.
747    
748            * Thuban/UI/common.py (Color2wxColour): The color values must be
749            ints. Also, remove the unnecessary asserts.
750    
751            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
752            (TestUnicodeStrings.test): Python source code should not contain
753            non-ascii characters unless an encoding is specified in the file.
754            Therefore use \x escapes in the string literals for non-ascii
755            characters.
756    
757    2003-11-11  Bernhard Herzog  <[email protected]>
758    
759            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
760            parameter so that this function can be used for all proj files in
761            Resource/Projections
762            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
763            get_system_proj_file
764    
765            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
766            ProjFile self.__sysProjFile use a dictionary of system ProjFile
767            objects self._sys_proj_files
768            (ProjFrame.build_dialog): Adapt to the new changes in the
769            ProjectionList constructor. Add a check button to toggle whether
770            EPSG projections are shown
771            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
772            events.
773            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
774            the busy cursor if the files have not yet been loaded by the
775            dialog.
776            (ProjFrame.load_system_proj): Add a parameter for the name of the
777            proj file. Maintain the dictionary of system projections
778            self._sys_proj_files
779    
780            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
781            user_projs parameters into one parameter proj_files which is a
782            list of proj files.
783            (ProjectionList._subscribe_proj_files)
784            (ProjectionList._unsubscribe_proj_files): New. Move
785            subscription/unsubscription of projfile messages to separate
786            methods
787            (ProjectionList.Destroy): The unsubscribe is now done in
788            _unsubscribe_proj_files
789            (ProjectionList.update_projections): We now have a list of proj
790            file objects
791            (ProjectionList.SetProjFiles): New method to set a new list of
792            proj file objects
793    
794            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
795            Specify explicitly which system proj file to load.
796    
797    2003-11-11  Bernhard Herzog  <[email protected]>
798    
799            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
800            instance variables to cut cyclic references. The GC would have
801            collected the loader eventually but it can happen that it doesn't
802            run at all until thuban is closed (2.3 but not 2.2 tries a bit
803            harder and forces a collection when the interpreter terminates)
804            (load_session): Call the handler's Destroy method to make sure
805            that it gets garbage collected early. Otherwise it will be
806            collected very late if at all and it holds some references to e.g.
807            shapestores and the session which can lead to leaks (of e.g. the
808            temporary files)
809    
810            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
811            resource leak in load_session
812    
813    2003-11-10  Bernhard Herzog  <[email protected]>
814    
815            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
816            extensions are to be rendered.
817            (_renderer_extensions): New. List with renderer for layers in
818            extensions
819            (add_renderer_extension): New. Add a renderer extension
820            (init_renderer_extensions): New. Init the renderer extensions
821            (BaseRenderer.render_map_incrementally): Search
822            _renderer_extensions for how to draw unknown layer types
823            (BaseRenderer.draw_raster_data): Add format parameter so that
824            formats other than BMP can be drawn
825            (BaseRenderer.draw_raster_layer): Pass an explicit format to
826            draw_raster_data
827    
828            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
829            strings of the format parameter of draw_raster_data method to wx
830            constants
831            (MapRenderer.draw_raster_data): Add the format parameter and use
832            raster_format_map to map it to the right wxwindows constant for
833            wxImageFromStream
834    
835            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
836            the format parameter and record it
837            (TestBaseRenderer.test_raster_no_projection): check the format
838            paramter of the draw_raster_data method
839            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
840            extension facility
841    
842    2003-11-07  Bernhard Herzog  <[email protected]>
843    
844            Tweak the usage of the sqlite database to make common use cases
845            more responsive. In most cases copying the data to the sqlite
846            database takes so long that using sqlite doesn't have enough
847            advantages.
848    
849            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
850            comments about performance and query the min and max in separate
851            statements because only that way will indexes be used.
852            (TransientTableBase.UniqueValues): Add some comments about
853            performance.
854            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
855            Do not copy the data to the transient DB but use the transient
856            copy if it exists. See the new comments for the performance trade
857            offs
858    
859            * test/test_transientdb.py
860            (TestTransientTable.test_auto_transient_table): Make sure that the
861            data is copied to the transient database at some point.
862    
863    2003-11-03  Bernhard Herzog  <[email protected]>
864    
865            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
866            globals to locals so that it's a bit faster
867    
868    2003-11-03  Bernhard Herzog  <[email protected]>
869    
870            * Thuban/UI/baserenderer.py
871            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
872            method. ReadValue is faster than ReadRowAsDict since it only reads
873            one cell especially now that the dbf file objects actually
874            implement it.
875    
876            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
877            read_attribute method of the dbf objects
878    
879    2003-11-03  Bernhard Herzog  <[email protected]>
880    
881            * Extensions/profiling/profiling.py (popup_dialog_box): New config
882            variable to indicate whether the result should be shown in a
883            dialog box
884            (profile_screen_renderer, time_screen_renderer): Only show a
885            dialog box if popup_dialog_box is true.
886            (profile_screen_renderer): Flush stdout after the printing the
887            first part of the "profiling..." message
888    
889            * Thuban/UI/baserenderer.py
890            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
891            brushes for the groups so that they're not created over and over
892            again
893    
894            * Thuban/Model/classification.py (Classification.__getattr__)
895            (Classification._compile_classification)
896            (Classification._clear_compiled_classification): New. Methods to
897            manage a 'compiled' representation of the classification groups
898            which is created on demand
899            (Classification.InsertGroup, Classification.RemoveGroup)
900            (Classification.ReplaceGroup): reset the compiled representation
901            (Classification.FindGroup): Use the compiled representation to
902            find the matching group
903            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
904    
905    2003-10-31  Bernhard Herzog  <[email protected]>
906    
907            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
908            Send a CLASS_CHANGED message
909            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
910            not return the removed group since it wasn't used.
911    
912            * test/test_classification.py
913            (TestClassification.test_set_default_group): New. Test the
914            SetDefaultGroup method
915            (TestClassification.test_insert_group): New. Test the InsertGroup
916            method
917            (TestClassification.test_remove_group): New. Test the RemoveGroup
918            method
919            (TestClassification.test_replace_group): New. Test the
920            ReplaceGroup method
921    
922    2003-10-31  Bernhard Herzog  <[email protected]>
923    
924            * test/test_classification.py (TestClassification.setUp):
925            Subscribe to the CLASS_CHANGED messages
926            (TestClassification.tearDown): New. Destroy the classification
927            properly
928            (TestClassification.test_defaults): Add tests for the default line
929            width and whether no messages were sent yet
930            (TestClassification.test_set_default_properties): Add tests for
931            messages and setting the default line width
932            (TestClassification.test_add_singleton)
933            (TestClassification.test_add_range)
934            (TestClassification.test_multiple_groups): Add tests for messages
935    
936    2003-10-31  Bernhard Herzog  <[email protected]>
937    
938            Some more refactoring in preparation for new tests:
939    
940            * test/test_classification.py (TestClassification.setUp): New.
941            Instantiate the classification here. Update the test methods
942            accordingly.
943            (TestClassification.test_multiple_groups): Make sure that the two
944            singletons matching 1 are considered different.
945    
946    2003-10-31  Bernhard Herzog  <[email protected]>
947    
948            * test/test_classification.py (red, green, blue): New. These
949            constants were used in several cases. Update the relevant methods.
950            (TestClassification.test_defaults)
951            (TestClassification.test_set_default_properties)
952            (TestClassification.test_add_singleton)
953            (TestClassification.test_add_range)
954            (TestClassification.test_multiple_groups)
955            (TestClassification.test_deepcopy): New. These were formerly all
956            part of the single method test.
957            (TestClassification.test_deepcopy): Removed.
958            (TestClassIterator): Removed. The test case is now a method of
959            TestClassification since it tests part of the public interface of
960            Classification
961            (TestClassification.test_iterator): New. Used to be
962            TestClassIterator effectively
963    
964    2003-10-31  Jan-Oliver Wagner <[email protected]>
965    
966            GUIfied the functions of the profiling extension.
967    
968            * /Extensions/profiling/__init__.py: New: Init to make this
969            directory a package.
970    
971            * Extensions/profiling/profiling.py: Moved menu entries to
972            the Extensions menu. Applied _() for strings.
973            (profile_screen_renderer): Catch the detailed printout and present
974            it in a dialog.
975            (time_screen_renderer): Raise a dialog to present the result instead
976            of printing it to stdout.
977    
978    2003-10-31  Bernhard Herzog  <[email protected]>
979    
980            * test/test_classification.py (TestClassGroupProperties)
981            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
982            (TestClassGroupSingleton, TestClassIterator, TestClassification):
983            Split TestClassification into several classes, one for each class
984            being tested. TestClassification itself now only tests
985            Classification. This split makes changes to the tests a bit easier
986    
987    2003-10-31  Bernhard Herzog  <[email protected]>
988    
989            * Extensions/profiling/profiling.py: New. Extension to measure
990            Thuban performance
991    
992    2003-10-31  Frank Koormann <[email protected]>
993    
994            Added two items to legend popup menu: Remove Layer and Show Layer Table
995    
996            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
997            LegendPanel._OnShowTable): New event handlers, call the corresponding
998            mainwindow methods.
999            (LegendTree._OnRightClick): Added items to popup menu.
1000    
1001    2003-10-30  Bernhard Herzog  <[email protected]>
1002    
1003            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
1004            EVT_WINDOW_DESTROY
1005            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
1006            nothing but is convenient for the derived classes.
1007    
1008            * Thuban/UI/tableview.py
1009            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
1010            Unsubscribe the messages here not in OnClose because that might
1011            get called multiple times. Fixes RT #2196
1012            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
1013            anymore.
1014    
1015            * README: Update the minimum requirement for wxPython. Since we
1016            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
1017            the version in which that was introduced for all platforms
1018    
1019    2003-10-30  Frank Koormann <[email protected]>
1020    
1021            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
1022            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
1023            frame.
1024    
1025    2003-10-30  Jan-Oliver Wagner <[email protected]>
1026    
1027            Improved APR import extension, added further EPSG definitions
1028            and some cleanup regarding string class.
1029    
1030            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
1031            Added test for alias 'longlat'.
1032    
1033            * Resources/Projections/epsg-deprecated.proj: New. Contains
1034            deprecated EPSG definitions.
1035    
1036            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
1037            the variable names for objects.
1038    
1039            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
1040            Copied from importAPR and provided with documentation.
1041    
1042            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
1043            Moved to apr.py.
1044            (APR_View): Added object ref 'ITheme'.
1045    
1046            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
1047            split function by corresponding use of the string class method.
1048    
1049            * Thuban/Model/xmlwriter.py: Replaced string replace function by
1050            corresponding string method.
1051    
1052    2003-10-29  Bernhard Herzog  <[email protected]>
1053    
1054            * Thuban/UI/baserenderer.py
1055            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
1056            special case of a classification that only has the default group
1057    
1058    2003-10-27  Bernhard Herzog  <[email protected]>
1059    
1060            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
1061    
1062            * po/de.po: Update.
1063    
1064            * Thuban/UI/application.py
1065            (ThubanApplication.ShowExceptionDialog): Handle translation of the
1066            dialog message properly
1067    
1068    2003-10-27  Bernhard Herzog  <[email protected]>
1069    
1070            Rework how localization works so that we use wx's translation
1071            functions when running Thuban as a normal application but not when
1072            we don't need any UI, such as in the test suite. See the comment
1073            in Thuban/__init__.py for details
1074    
1075            * Thuban/__init__.py (_): Add one level of indirection to make the
1076            translation handling more flexible and to make it possible to use
1077            either wx's translation services or not.
1078            (gettext_identity, translation_function_installed)
1079            (install_translation_function): New function to help with this
1080    
1081            * Thuban/UI/__init__.py: Install the wx specific translation
1082            function if it's OK to do that
1083    
1084            * test/support.py (initthuban): Install a dummy translation
1085            function so that importing Thuban.UI doesn't install a wx specific
1086            one for which would need to import wxPython
1087    
1088    2003-10-27  Bernhard Herzog  <[email protected]>
1089    
1090            * HOWTO-Release: Source archives should be created first and the
1091            binary packages should be created from the source archives.
1092            There's an official debian package now so there's no need to test
1093            the rpm on debian anymore
1094    
1095    2003-10-27  Bernhard Herzog  <[email protected]>
1096    
1097            Several rendering changes:
1098    
1099             - Render the selection into a separate bitmap so that only that
1100               bitmap needs to be redrawn when the selection changes
1101    
1102             - Render incrementally showing previews and allowing interaction
1103               before rendering is complete
1104    
1105             - Update the renderer interface a bit. Most parameters of
1106               RenderMap are now parameters of the constructor
1107    
1108            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
1109            and the update region as parameters. Update the doc-string
1110            (BaseRenderer.render_map_incrementally): New. Generator function
1111            to renders the map incrementally
1112            (BaseRenderer.render_map): Remove the map argument (it's now in
1113            the constructor) and simply iterate over the
1114            render_map_incrementally generator to draw the map.
1115            (BaseRenderer.draw_shape_layer_incrementally)
1116            (BaseRenderer.draw_shape_layer): Renamed to
1117            draw_shape_layer_incrementally and changed into a generator that
1118            yields True every 500 shapes. Used by render_map_incrementally to
1119            render shape layers incrementally
1120    
1121            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
1122            map and region parameters which are now in the constructor
1123            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
1124            the inherited render_map_incrementally.
1125            (BaseRenderer.draw_shape_layer): Removed.
1126            (ScreenRenderer.draw_selection_incrementally): New. The selection
1127            drawing part of the removed draw_shape_layer as a generator
1128            (ScreenRenderer.layer_shapes): Update because of the region
1129            parameter change
1130            (ExportRenderer.__init__): New. Extend the inherited constructor
1131            with the destination region for the drawing
1132            (ExportRenderer.RenderMap): Removed the map and region parameters
1133            which are now in the constructor
1134    
1135            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
1136            bitmap suitable for a preview in a tool
1137            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
1138            bitmap
1139            (MapPrintout.draw_on_dc): Adapt to new renderer interface
1140            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
1141            exists
1142            (MapCanvas.OnIdle): Update the logic to deal with incremental
1143            rendering and the selection bitmap
1144            (MapCanvas._do_redraw): Handle the instantiation of the render
1145            iterator and the redraws during rendering
1146            (MapCanvas._render_iterator): New. Generator to incrementally
1147            redraw both bitmaps
1148            (MapCanvas.Export): Adapt to new renderer interface.
1149            (MapCanvas.full_redraw): Reset the selection bitmap and the
1150            renderer iterator too
1151            (MapCanvas.redraw_selection): New. Force a redraw of the selection
1152            bitmap
1153            (MapCanvas.shape_selected): Only redraw the selection bitmap
1154    
1155            * test/test_baserenderer.py
1156            (TestBaseRenderer.test_polygon_no_projection)
1157            (TestBaseRenderer.test_raster_no_projection)
1158            (TestBaseRenderer.test_point_map_projection)
1159            (TestBaseRenderer.test_point_layer_and_map_projection)
1160            (TestBaseRenderer.test_point_layer_projection)
1161            (TestBaseRenderer.test_point_with_classification): Adapt to new
1162            renderer interface
1163    
1164    2003-10-24  Bernhard Herzog  <[email protected]>
1165    
1166            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
1167            (point_in_polygon_shape, shape_centroid): Raise an exception if
1168            the shape can't be read. Previously invalid shape ids would lead
1169            to a segfault.
1170    
1171            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
1172            New. test whether an exception is raised for invalid shape ids
1173    
1174    2003-10-24  Jan-Oliver Wagner <[email protected]>
1175    
1176            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
1177            as alias for 'latlong'.
1178    
1179            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
1180            as alias for 'latlong'.
1181    
1182    2003-10-24  Jan-Oliver Wagner <[email protected]>
1183    
1184            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
1185            the projection even for the UnknownPanel.
1186            (UnknownProjPanel.__init__): Define the text and create the textctrl
1187            widget.
1188            (UnknownProjPanel._DoLayout): Replaced static text widget by the
1189            textctrl created in __init__.
1190            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
1191            including the parameters of the projection.
1192            
1193    2003-10-24  Jan-Oliver Wagner <[email protected]>
1194    
1195            * Resources/Projections/epsg.proj: New. This is a list of
1196            EPSG codes with parameters for proj. The list has been
1197            generated using devtools/create_epsg.py based on the
1198            file nad/epsg of the proj 4.4.7 package. Four projection
1199            definitions have been deleted as they are not accepted by proj:
1200            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
1201            and "HD72 / EOV".
1202    
1203    2003-10-22  Bernhard Herzog  <[email protected]>
1204    
1205            Some more tweaks to the projection dialog which should fix RT
1206            #1886.
1207    
1208            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
1209            the ProjFile's messages and call the base class methods correctly
1210            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
1211            flag on the newly selected item too. Otherwise some other item is
1212            focused and the first time the focus is moved with the keyboard
1213            the selection moves in unexpected ways.
1214    
1215            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
1216            focus on the OK button, only on the projection list. That way the
1217            list really has the focus initially
1218            (ProjFrame.OnClose): Call the projection list's Destroy method to
1219            make it unsubscribe all messages
1220    
1221    2003-10-21  Bernhard Herzog  <[email protected]>
1222    
1223            Rework the projection dialog to fix a few bugs, including RT 2166
1224            and most of 2168
1225    
1226            * Thuban/UI/projlist.py: New. The class ProjectionList is a
1227            special wxListCtrl to show a list of projections in a more MVC
1228            fashion
1229    
1230            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
1231            throughout the class. The main change is to use the ProjectionList
1232            class instead of a normal wxListBox. Also, add an explicit
1233            "Unknown" projection to the projection choice control.
1234            (ProjPanel.__init__): Add an "unknown" ellipsoid
1235            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
1236            instantiation of the panel's controls to make the tab-order more
1237            natural
1238    
1239    2003-10-21  Bernhard Herzog  <[email protected]>
1240    
1241            * test/test_load.py (TestSingleLayer.file_contents)
1242            (TestSingleLayer.test): Add non-ascii characters to the titles of
1243            session, map and layer. This is effectively a port of the
1244            TestUnicodeStrings test in test_load_0_8.py which for some reason
1245            was only added there.
1246    
1247            * test/test_load_0_9.py (TestSingleLayer.file_contents)
1248            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
1249            characters to the titles of session, map and layer,.
1250    
1251    2003-10-21  Bernhard Herzog  <[email protected]>
1252    
1253            Add EPSG projection handling to .thuban files
1254    
1255            * test/test_save.py (SaveSessionTest.dtd)
1256            (SaveSessionTest.testEmptySession)
1257            (SaveSessionTest.testLayerProjection)
1258            (SaveSessionTest.testRasterLayer)
1259            (SaveSessionTest.testClassifiedLayer)
1260            (SaveSessionTest.test_dbf_table)
1261            (SaveSessionTest.test_joined_table)
1262            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
1263            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
1264            use a and epsg projection to test saving them
1265    
1266            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
1267            namespace
1268            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1269            (TestLayerProjection.file_contents)
1270            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1271            (TestPostGISLayer.file_contents)
1272            (TestPostGISLayerPassword.file_contents)
1273            (TestLoadError.file_contents, TestLoadError.test): Update to use
1274            1.0-dev namespace
1275            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
1276            use 1.0-dev namespace and use an EPSG projection to test whether
1277            loading it works
1278    
1279            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
1280            as of Thuban 0.9. These are now tests to determine whether Thuban
1281            can still read files generated by Thuban 0.9
1282    
1283            * Thuban/Model/save.py (SessionSaver.write)
1284            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
1285            namespace
1286            (SessionSaver.write_projection): Write the projection's epsg
1287            attribute
1288    
1289            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
1290            thuban-1.0-dev.dtd namespace
1291            (SessionLoader.check_attrs): Allow a callable object as conversion
1292            too
1293            (SessionLoader.start_projection, SessionLoader.end_projection)
1294            (SessionLoader.start_parameter): Handle the epsg attribute and
1295            rename a few instance variables to lower case
1296    
1297            * Resources/XML/thuban-1.0.dtd: New. Only difference to
1298            thuban-0.9.dtd is the epsg attribute for projections.
1299    
1300    2003-10-21  Bernhard Herzog  <[email protected]>
1301    
1302            * test/runtests.py (main): Let the user specify which tests to run
1303            on the command line
1304    
1305            * test/support.py (ThubanTestResult.getDescription): Override to
1306            give a better short description. The description can be used as a
1307            parameter to run_tests to run that particular test in isolation.
1308    
1309    2003-10-21  Frank Koormann   <[email protected]>
1310    
1311            Popup menu for legend. Scheduled for the 1.2 release this was too
1312            simple to implement: The popup menu is bound to the legend tree, while
1313            the events are hanlded by its anchestor, the legend panel. This
1314            allows reuse of all the event handlers already implemented for the
1315            legend toolbar buttons.
1316    
1317            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
1318            to add handlers for the events issued by the popup menu.
1319            (LegendPanel._OnToggleVisibility): Handler for toggling layer
1320            visibility event
1321            (LegendPanel._OnProjection): Handler for layer projection event.
1322            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
1323            (LegendTree._OnRightClick): Event handler for right click, select item
1324            and pop up menu.
1325            (LegendTree.ToggleVisibility): Toggle layer visibility
1326            (LegendTree.LayerProjection): Raise layer projection dialog for
1327            current layer.
1328    
1329    2003-10-21  Bernhard Herzog  <[email protected]>
1330    
1331            * Resources/Projections/defaults.proj: Use correct DOCTYPE
1332            declaration. The top-level element is projectionlist not projfile
1333    
1334    2003-10-20  Bernhard Herzog  <[email protected]>
1335    
1336            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
1337            method to write a projfile and display a busy cursor and error
1338            dialogs.
1339            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
1340            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
1341            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
1342            busy cursor while loading the user and system prj files.
1343    
1344    2003-10-16  Bernhard Herzog  <[email protected]>
1345    
1346            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
1347            ProjFile objects
1348            (clear_proj_file_cache): New function to clear the cache. Mainly
1349            useful for use by the test suite
1350            (read_proj_file): Use the cache.
1351    
1352            * test/test_proj.py (TestProjFile): Clarify the doc-string
1353            (ProjFileReadTests): Update doc-string
1354            (ProjFileReadTests.test_get_system_proj_file): Check whether the
1355            system proj files is cached.
1356            (ProjFileLoadTestCase): New base class for the proj file tests
1357            derived from support.FileLoadTestCase to provide some common
1358            behavior.
1359            (TestLoadingProjFile)
1360            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
1361            (TestProjFileWithInvalidParameters.file_contents): Derive from
1362            ProjFileLoadTestCase
1363            (TestLoadingProjFile.test_caching): New. Test whether the cache
1364            works
1365    
1366    2003-10-16      Silke Reimer    <[email protected]>
1367    
1368            * debian/*: New directory with configuration files for building a thuban
1369              deb-package.
1370    
1371    2003-10-14  Bernhard Herzog  <[email protected]>
1372    
1373            * test/test_proj.py: Execute support.run_tests when run as
1374            __main__ so that missing unsubscribes are detected
1375            (TestProjFile.tearDown): Destroy the proj_file properly
1376    
1377    2003-10-14  Bernhard Herzog  <[email protected]>
1378    
1379            * Thuban/Model/messages.py (PROJECTION_ADDED)
1380            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
1381            the ProjFile objects
1382    
1383            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
1384            easily send messages when the projections change
1385            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
1386            when the change was successful
1387    
1388            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
1389            proj file messages
1390            (TestProjFile.test_add_remove)
1391            (TestProjFile.test_remove_non_existing)
1392            (TestProjFile.test_replace)
1393            (TestProjFile.test_replace_non_existing): Test whether the right
1394            messages are sent
1395    
1396    2003-10-14  Bernhard Herzog  <[email protected]>
1397    
1398            * test/test_proj.py (TestProjFile.test): Refactor into several
1399            tests
1400            (TestProjFile.test_add_remove)
1401            (TestProjFile.test_remove_non_existing)
1402            (TestProjFile.test_replace)
1403            (TestProjFile.test_replace_non_existing): Some of the new
1404            individual test cases
1405            (TestProjFileSimple): New class for the rest of the test cases
1406            that came out of the refactoring
1407            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
1408            derived classes don't have to
1409    
1410    2003-10-13  Bernhard Herzog  <[email protected]>
1411    
1412            Add an optional EPSG code to the projection objects and extend the
1413            .proj file format accordingly.
1414    
1415            * Resources/XML/projfile.dtd (element projection): Add epsg
1416            attribute
1417    
1418            * Thuban/Model/proj.py (Projection.__init__): New parameter and
1419            instance variable epsg. Update doc-string
1420            (Projection.EPSGCode, Projection.Label): New methods to provide
1421            access to EPSG code and a label for use in dialogs
1422    
1423            * Thuban/Model/resource.py (ProjFileReader.start_projection)
1424            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
1425            Handle the epsg code attribute when reading or writing proj files
1426    
1427            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
1428            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
1429            (ProjFrame.__FillAvailList): Use the projection's Label method to
1430            get the string for the list box
1431    
1432            * test/test_proj.py (TestProjection.test_label)
1433            (TestProjection.test_label_epsg)
1434            (TestProjection.test_epsgcode_for_non_epsg_projection)
1435            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
1436            for the label and EPSGCode methods
1437            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
1438            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
1439            objects in the test cases and put the expected contents into the
1440            test case methods too. Update doTestWrite accordingly
1441            (TestLoadingProjFile)
1442            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
1443            read tests from TestProjFile.
1444            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
1445            tests are now in the new classes.
1446            (sample_projfile, sample_projfile_data)
1447            (sample_projfile2, sample_projfile_data2): Removed. Not used
1448            anymore.
1449            (TestProjFile.test_read_unreadable_file): No need to reset the
1450            permissions at the end anymore since we use a unique filename
1451    
1452    2003-10-13  Bernhard Herzog  <[email protected]>
1453    
1454            * test/test_proj.py: Some more refactoring of the test cases
1455            (ProjFileTest): New base class for the proj file tests.
1456            (TestProjFile): Derive from ProjFileTest
1457            (TestProjFile.test_read_unreadable_file)
1458            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
1459            the new filename method to get a unique filename
1460            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
1461            (WriteProjFileTests): New class for proj file write tests.
1462            Contains the write test that were in TestProjFile originally.
1463    
1464    2003-10-13  Bernhard Herzog  <[email protected]>
1465    
1466            * test/test_proj.py (TestProjFile.testRead)
1467            (TestProjFile.test_read_non_existing_file)
1468            (TestProjFile.test_read_unreadable_file)
1469            (TestProjFile.test_read_empty_file): Split into several methods.
1470    
1471    2003-10-10  Bernhard Herzog  <[email protected]>
1472    
1473            * Thuban/UI/sizers.py: New file with custom sizers.
1474    
1475            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
1476            all projection type specific panels and put them into a
1477            NotebookLikeSizer. This way the dialog doesn't change its size
1478            when a different projection is selected
1479            (ProjFrame.__init__): Rename projection_panels
1480            projection_panel_defs and reuse projection_panels for a list of
1481            the instantiated panels.
1482            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
1483            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
1484            the panels
1485            (UnknownProjPanel._DoLayout): Place the newlines in the message
1486            differently to make the panel narrower.
1487            (TMPanel._DoLayout): Layout the parameters in one column.
1488    
1489    2003-10-10  Bernhard Herzog  <[email protected]>
1490    
1491            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
1492            that contains all the setup for the dialog's widgets, layout and
1493            event handling.
1494            (__): Call build_dialog to build the dialog.
1495            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
1496            Their functionality is now in build_dialog
1497            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
1498            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
1499            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
1500            different widget names and hierarchy introduced with build_dialog.
1501    
1502    2003-10-10  Bernhard Herzog  <[email protected]>
1503    
1504            * README: Fix typo.
1505    
1506    2003-10-09  Bernhard Herzog  <[email protected]>
1507    
1508            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
1509            projection is already in the list. This is *a lot* faster when
1510            loading files with hundreds of projections since it saves a linear
1511            search. OTOH this will allow adding the same projection to the
1512            user.proj file multiple times in the projection dialog but we'll
1513            deal with that later
1514    
1515    2003-10-09  Jan-Oliver Wagner <[email protected]>
1516    
1517            * devtools: New. Directory for developer tools that are not intended
1518            for the regular user.
1519    
1520            * devtools/create_epsg.py: New. Convert the epsg file of proj into
1521            a python .proj file.
1522    
1523    2003-10-09  Bernhard Herzog  <[email protected]>
1524    
1525            * test/test_proj.py
1526            (TestProjection.test_get_parameter_without_equals_sign): New. Test
1527            whether GetParameter handles parameters without "=" sign correctly
1528    
1529            * Thuban/Model/proj.py (Projection.GetParameter): Handle
1530            parameters that do not contain a "=". Update the doc-string
1531    
1532    2003-10-08  Bernhard Herzog  <[email protected]>
1533    
1534            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
1535            length limit on the projname text control
1536    
1537    2003-10-08  Bernhard Herzog  <[email protected]>
1538    
1539            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1540            (TestProjection.test_get_projection_units_normal): New. Tests for
1541            the Projection.GetProjectedUnits method
1542    
1543    2003-10-08  Jan-Oliver Wagner <[email protected]>
1544    
1545            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1546            Added missing 'val' parameter.
1547    
1548    2003-10-08  Bernhard Herzog  <[email protected]>
1549    
1550            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1551            projection type of the currently selected projection is not known,
1552            i.e. there's no panel for it, use the UnknownProjPanel
1553            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1554            the actual replacing of the proj panel into the new method
1555            _show_proj_panel.
1556            (UnknownProjPanel): Add doc-string.
1557            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1558            that the panel is not so wide.
1559    
1560    2003-10-08  Bernhard Herzog  <[email protected]>
1561    
1562            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1563            too. Update the doc-string
1564            (get_proj_files): Removed. It wasn't used anywhere
1565            (get_system_proj_files, get_system_proj_file): Rename to
1566            get_system_proj_file and return the ProjFile object and not a list
1567            of ProjFile objects. Update the callers.
1568            (get_user_proj_files, get_user_proj_file): Rename to
1569            get_user_proj_file return the ProjFile object and not a list of
1570            ProjFile objects. Update the callers.
1571            (ProjFileReader.__init__): New instance variable for the warnings.
1572            Rename the __pf ivar to projfile. Update the methods referring to
1573            __pf
1574            (ProjFileReader.end_projection): Catch any errors raised when
1575            instantiating the projection and record that as an error. The
1576            projection will not be in the final ProjFile object.
1577            (ProjFileReader.GetWarnings): New method to return the warnings.
1578    
1579            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1580            show the warnings from the projfile reader
1581            (ProjFrame._OnImport): Deal with any warnings returned by
1582            read_proj_file
1583            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1584            get_system_proj_file or get_user_proj_file.
1585    
1586            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1587            (TestProjFileWithInvalidParameters.file_contents): New test cases
1588            to test whether read_proj_file handles invalid projection
1589            parameters correctly
1590            (TestProjFile.test_get_system_proj_file): New. Simple test for
1591            resource.get_system_proj_file
1592    
1593    2003-10-07  Bernhard Herzog  <[email protected]>
1594    
1595            * test/test_derivedshapestore.py
1596            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1597            properly so that the temporary directories get deleted correctly
1598    
1599    2003-10-06  Bernhard Herzog  <[email protected]>
1600    
1601            Handle the title changes in a proper MVC way.
1602    
1603            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1604            canvas' TITLE_CHANGED messages
1605            (MainWindow.update_title): New. Update the main window's title
1606            (MainWindow.__SetTitle): Removed. Use update_title instead.
1607            (MainWindow.SetMap): Use update_title instead of __SetTitle
1608            (MainWindow.RenameMap): Do change the window title explicitly
1609            here. That's handled in a proper MVC way now.
1610            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1611            messages
1612    
1613            * Thuban/Lib/connector.py (Conduit): New class to help classes
1614            that forward messages
1615    
1616            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1617            (ViewPort): Derive from Conduit instead of Publisher
1618            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1619            when calling the inherited versions
1620            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1621            methods to subscribe and unsubscribe map messages
1622            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1623            handle the map subscriptions
1624            (ViewPort.Map, ViewPort.map_projection_changed)
1625            (ViewPort.layer_projection_changed): Add or update doc-strings
1626    
1627            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1628            typo
1629            (MyConduit): Helper class for the Conduit test.
1630            (TestConduit): Test cases for Conduit
1631    
1632            * test/test_connector.py: Use support.run_tests as main.
1633    
1634            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1635            the TITLE_CHANGED messages
1636            (ViewPortTest.test_forwarding_title_changed): New test to check
1637            whether the viewport forwards the map's TITLE_CHANGED messages
1638            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1639            after the port's because the latter may require a still functional
1640            map.
1641    
1642    2003-10-06  Bernhard Herzog  <[email protected]>
1643    
1644            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1645            doc-string
1646    
1647    2003-10-06  Bernhard Herzog  <[email protected]>
1648    
1649            * test/test_viewport.py (ViewPortTest.setUp)
1650            (SimpleViewPortTest.test_init_with_size): Move the test for the
1651            initial size as a constructor parameter from ViewPortTest.setUp
1652            method to a new separate test in SimpleViewPortTest.
1653    
1654    2003-10-06  Bernhard Herzog  <[email protected]>
1655    
1656            * test/test_viewport.py (MockView): New class derived from
1657            ViewPort with a mock implementation of GetTextExtent to be used in
1658            the test cases
1659            (ViewPortTest.setUp): Use MockView instead of ViewPort
1660    
1661            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1662            into what would be a "pure virtual function" in C++: always raise
1663            NotImplementedError. Mock implementations for test cases don't
1664            belong into the real code
1665    
1666    2003-10-02  Bernhard Herzog  <[email protected]>
1667    
1668            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1669            close the dbf file we create so that it's contents have been
1670            written properly.
1671    
1672            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1673            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1674            Update to shapelib 1.2.10
1675    
1676    2003-10-01  Jan-Oliver Wagner <[email protected]>
1677    
1678            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1679            it annoys lintian which warns about these files not being
1680            executable. The #! isn't necessary here since if you absolutely
1681            must execute them you can always say "python <filename>".
1682    
1683    2003-09-26  Bernhard Herzog  <[email protected]>
1684    
1685            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1686            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1687            is ported to a newer the import will fail, so it should be noticed
1688            immediately that this function is gone.
1689            Fixes RT#1919
1690    
1691    2003-09-26  Bernhard Herzog  <[email protected]>
1692    
1693            Add a DTD for the projection files and make thuban write valid
1694            projection files
1695    
1696            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1697            files
1698    
1699            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1700            'projectionlist' as the name in the document type declaration so
1701            that it matches the element type of the root element.
1702    
1703            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1704            'projectionlist' as the name in the document type declaration just
1705            as it is done now in the files thuban would write
1706            (sample_projfile, sample_projfile_data): Fix spelling of
1707            "Mercator"
1708            (TestProjFile.doTestWrite): Validate the written and the expected
1709            XML data
1710            (TestProjFile): Derive from ValidationTest so that we can run xml
1711            validation tests
1712    
1713    2003-09-24  Bernhard Herzog  <[email protected]>
1714    
1715            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1716            modify the list returned by map.Layers() in place since it is the
1717            actual list of layers used by the map.
1718    
1719    2003-09-23  Jan-Oliver Wagner <[email protected]>
1720    
1721            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1722            Extensions to describe the extensions coming with the Thuban
1723            standard package (gns2shp and importAPR).
1724    
1725    2003-09-23  Bernhard Herzog  <[email protected]>
1726    
1727            * libraries/thuban/wxproj.cpp (project_point): if there's an
1728            inverse but no forward projection, convert to degrees after
1729            applying the inverse projection. Fixes RT#2096
1730    
1731            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1732            implicitly tests for the fix to RT#2096
1733    
1734            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1735            Check that the sequences have the same lengths
1736    
1737            * Resources/Projections/defaults.proj (Geographic projection): Use
1738            a much more precise value for the to_meter attribute.
1739    
1740    2003-09-22  Bernhard Herzog  <[email protected]>
1741    
1742            * test/support.py (initthuban): Make sure to unset the LANG env.
1743            var. so that tests that compare translated strings work. Solves RT
1744            #2094
1745    
1746    2003-09-22  Jan-Oliver Wagner <[email protected]>
1747    
1748            Small improvement of APR import.
1749    
1750            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1751            Added tests for text-ranges.
1752    
1753            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1754            returns a string object if the range is based on text.
1755    
1756            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1757            range retrieval.
1758    
1759    2003-09-22  Jan-Oliver Wagner <[email protected]>
1760    
1761            Initial version of the importAPR extension which is in
1762            experimental state.
1763    
1764            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1765            /Extensions/importAPR/test/: New directories.
1766    
1767            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1768    
1769            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1770            file which refers to the Thuban Iceland demo data.
1771    
1772            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1773    
1774            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1775    
1776            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1777            as in '.apr'-files.
1778    
1779            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1780            ODB Objects as in '.apr', '.avl' and other files.
1781    
1782            * /Extensions/importAPR/__init__.py: New: Init to make this
1783            directory a package.
1784    
1785            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1786            project file (.apr) and convert it to Thuban.
1787    
1788    2003-09-22  Jan-Oliver Wagner <[email protected]>
1789    
1790            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1791    
1792    2003-09-19  Jan-Oliver Wagner <[email protected]>
1793    
1794            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1795            with description on RPM installation and RPM binary package
1796            creation.
1797    
1798    2003-09-18  Bernhard Herzog  <[email protected]>
1799    
1800            * setup.py (data_files): Only add the mo files if the Locales
1801            directory actually exists, so that setup.py works with a fresh CVS
1802            checkout
1803    
1804    2003-09-12  Jan-Oliver Wagner <[email protected]>
1805    
1806            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1807            in viewport, not anymore in view
1808    
1809    2003-09-04  Jan-Oliver Wagner <[email protected]>
1810    
1811            Introducing first Extension (gns2shp).
1812    
1813            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1814    
1815            * Extensions/__init__.py: New. init to make this dir a package.
1816    
1817            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1818    
1819            * Extensions/gns2shp/test/README: New. some info on this test directory.
1820    
1821            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1822    
1823            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1824            of Shapefile from GNS text file format
1825    
1826    2003-09-03  Jan-Oliver Wagner <[email protected]>
1827    
1828            Fix/workaround for bug #2019:
1829            https://intevation.de/rt/webrt?serial_num=2019
1830    
1831            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1832            (IdentifyView.__init__): Added another button that allows to
1833            stop the identify mode.
1834            (IdentifyView.OnStop): New. Stops the identify mode.
1835    
1836    2003-09-03  Jan-Oliver Wagner <[email protected]>
1837    
1838            Introducing a new exception dialog that allows to exit the
1839            application immediately.
1840            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1841    
1842            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1843    
1844            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1845            Made strings available to translations. Exchanged the simple
1846            ScrolledMessageDialog by the new ExceptionDialog.
1847    
1848    2003-09-01  Bernhard Herzog  <[email protected]>
1849    
1850            * NEWS: New. Summary of changes and release notes.
1851    
1852            * MANIFEST.in: Add NEWS
1853    
1854    2003-09-01  Bernhard Herzog  <[email protected]>
1855    
1856            * MANIFEST.in: Correct the include statement for the mo-files and
1857            include the documentation too.
1858    
1859            * setup.py (data_files): Add the .mo files
1860            (setup call): Up to version 0.9.0
1861    
1862    2003-09-01  Bernhard Herzog  <[email protected]>
1863    
1864            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1865            parameter list to just parent and session
1866            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1867            selection of empty list boxes is not allowed (and produces C++
1868            assertion errors) and the rest of the setup is better done in
1869            __init__ anyway.
1870            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1871            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1872            builtins True/False for booleans to avoid warnings from wxPython
1873    
1874            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1875            ChooseDBTableDialog constructor parameters.
1876    
1877    2003-09-01  Bernhard Herzog  <[email protected]>
1878    
1879            * Thuban/Model/postgisdb.py
1880            (PostGISTable): Extend doc-string
1881            (PostGISTable._fetch_table_information): Set the column index
1882            correctly, pretending ignored columns don't exist.
1883    
1884            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1885            for postgis tables with data types not yet supported by thuban.
1886    
1887    2003-08-29  Bernhard Herzog  <[email protected]>
1888    
1889            * HOWTO-Release: Tweak item about running the tests.
1890    
1891    2003-08-29  Jan-Oliver Wagner <[email protected]>
1892    
1893            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1894    
1895    2003-08-29  Bernhard Herzog  <[email protected]>
1896    
1897            Add some missing parameters to projections. Proj complains about
1898            them on windows but for some reason not on Linux.
1899    
1900            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1901            missing required projection parameters
1902    
1903            * test/test_proj.py (TestProjFile.test): Add missing required
1904            projection parameters
1905    
1906            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1907            (TestLayerProjection.test): Add missing required projection
1908            parameters and tests for them
1909    
1910            * test/test_load.py (TestLayerProjection.file_contents)
1911            (TestLayerProjection.test): Add missing required projection
1912            parameters and tests for them
1913    
1914            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1915            required projection parameters
1916    
1917    2003-08-29  Bernhard Herzog  <[email protected]>
1918    
1919            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1920            access the pj_errno because directly accessing pj_errno doesn't
1921            work on windows if the proj library is in a DLL
1922    
1923            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1924    
1925    2003-08-28  Bernhard Herzog  <[email protected]>
1926    
1927            * test/test_proj.py: Import things from Thuban after calling
1928            initthuban
1929    
1930            * test/test_load.py (LoadSessionTest.filenames): New class
1931            variable with the filename attributes to normalize
1932            (LoadSessionTest.check_format): Pass self.filenames to
1933            sax_eventlist to normalize the filename attributes
1934    
1935            * test/xmlsupport.py: Add cvs keywords
1936            (SaxEventLister.__init__): New parameter filenames which indicates
1937            attributes that contain filenames
1938            (SaxEventLister.startElementNS): Normalize the filename attributes
1939            with os.path.normpath
1940            (sax_eventlist): New parameter filenames to pass through to
1941            SaxEventLister
1942    
1943            * test/test_derivedshapestore.py: Make this file callable as a
1944            program to execute the tests
1945            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1946            the session to self.session so that it gets destroyed properly
1947    
1948            * test/test_layer.py (TestLayer.tearDown): Call the session's
1949            Destroy method
1950    
1951            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1952            too if it exists
1953            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1954            so that it gets destroyed properly
1955    
1956            * test/postgissupport.py (reason_for_not_running_tests): Add a
1957            test for the existence of popen2.Popen4.
1958    
1959            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1960            reliable way to destroy the sessions created in the test cases
1961            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1962            so that it gets destroyed properly
1963            (SaveSessionTest.testLayerProjection): Bind the session to
1964            self.session so that it gets destroyed properly
1965    
1966            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1967            sure that the session is destroyed properly
1968    
1969            * test/test_shapefilestore.py: Make this callable as a program to
1970            execute the tests
1971    
1972            * test/test_scalebar.py: Remove unnecessary import of _ from
1973            Thuban
1974    
1975            * test/support.py (print_garbage_information): Call initthuban
1976            here because it may be called indirectly from test cases that test
1977            test support modules which do not use anything from thuban itself
1978            (ThubanTestProgram.runTests): Remove unnecessary debug print
1979    
1980    2003-08-28  Bernhard Herzog  <[email protected]>
1981    
1982            * Thuban/version.py (longversion): Update to 0.9
1983    
1984            * Thuban/UI/mainwindow.py: Remove some unused imports
1985    
1986            * README: Add section about required additional software. Add date
1987            and revision CVS keywords
1988    
1989            * HOWTO-Release: Add item about the translations. Add date and
1990            revision CVs keywords and change formatting to match README a bit
1991            better
1992    
1993            * po/de.po: Update for 0.9
1994    
1995            * test/README: Tweak the wording a little because many tests are
1996            not really unittest.
1997    
1998    2003-08-27  Bernhard Herzog  <[email protected]>
1999    
2000            As preparation for the 0.9 release, switch thuban files to a
2001            non-dev namespace
2002    
2003            * Thuban/Model/save.py (SessionSaver.write_session): Write files
2004            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
2005            namespace
2006    
2007            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
2008            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
2009    
2010            * test/test_save.py (SaveSessionTest.dtd)
2011            (SaveSessionTest.testEmptySession)
2012            (SaveSessionTest.testSingleLayer)
2013            (SaveSessionTest.testLayerProjection)
2014            (SaveSessionTest.testRasterLayer)
2015            (SaveSessionTest.testClassifiedLayer)
2016            (SaveSessionTest.test_dbf_table)
2017            (SaveSessionTest.test_joined_table)
2018            (SaveSessionTest.test_save_postgis): Update for new namespace
2019    
2020            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
2021            (TestLayerVisibility.file_contents, TestLabels.file_contents)
2022            (TestLayerProjection.file_contents)
2023            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2024            (TestPostGISLayer.file_contents)
2025            (TestPostGISLayerPassword.file_contents)
2026            (TestLoadError.file_contents, TestLoadError.test): Update for new
2027            namespace
2028    
2029    2003-08-27  Bernhard Herzog  <[email protected]>
2030    
2031            Make the table interface distinguish between row ids (an integer
2032            that uniquely identifies a row) and row ordinals (a simple row
2033            count from 0 to NumRows() - 1)
2034    
2035            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
2036            (PostGISTable.RowOrdinalToId): New methods to conver between row
2037            ids and row ordinals
2038            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
2039            parameter row_is_ordinal to indicate whether the row parameter is
2040            the row id or the ordinal
2041    
2042            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
2043            (TransientTableBase.RowOrdinalToId)
2044            (AutoTransientTable.RowIdToOrdinal)
2045            (AutoTransientTable.RowOrdinalToId): Same new methods as in
2046            PostGISTable.
2047            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
2048            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
2049            Same new parameter as in PostGISTable.
2050    
2051            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
2052            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
2053            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
2054            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
2055            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
2056            parameter as in PostGISTable.
2057    
2058            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
2059            (DataTable.RowOrdinalToId): New methods to convert between row ids
2060            and row ordinals.
2061            (TableGrid.SelectRowById): New method to select a row based on its
2062            ID as opposed to its ordinal
2063            (DataTable.GetValue, TableGrid.OnRangeSelect)
2064            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
2065            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
2066            (LayerTableFrame.__init__): Convert between row ids and row
2067            ordinals as appropriate
2068    
2069            * test/postgissupport.py (PostGISDatabase.__init__): Add
2070            doc-string.
2071            (PostGISDatabase.initdb): The optional third item in a tuple in
2072            tables is now a (key, value) list with additional arguments to
2073            pass to upload_shapefile
2074            (upload_shapefile): New parameter gid_offset to allow gids that
2075            are not the same as the shapeids in the shapefile
2076            (PostgreSQLServer.get_default_static_data_db): Use the new
2077            gid_offset to make the gids in landmarks 1000 higher than the
2078            shapeids in the shapefile
2079    
2080            * test/test_viewport.py
2081            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
2082            new shapeids in the landmarks table
2083    
2084            * test/test_transientdb.py
2085            (TestTransientTable.run_iceland_political_tests)
2086            (TestTransientTable.test_transient_joined_table): Add tests for
2087            the new table methods and new keywords arguments.
2088    
2089            * test/test_postgis_db.py
2090            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
2091            (TestPostGISTable.test_read_value_row_count_mode)
2092            (TestPostGISTable.test_row_id_to_ordinal)
2093            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
2094            table methods and the new arguments
2095            (TestPostGISShapestorePoint.test_shapes_in_region)
2096            (TestPostGISShapestorePoint.test_shape_raw_data)
2097            (TestPostGISShapestorePoint.test_shape_points)
2098            (TestPostGISShapestorePoint.test_shape_shapeid)
2099            (TestPostGISShapestorePoint.test_all_shapes)
2100            (TestPostGISTable.test_simple_query)
2101            (TestPostGISTable.test_simple_query)
2102            (TestPostGISTable.test_simple_query)
2103            (TestPostGISTable.test_read_value)
2104            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
2105            shapeids in the landmarks table
2106    
2107            * test/test_memory_table.py
2108            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
2109            (TestMemoryTable.test_read_value_row_count_mode)
2110            (TestMemoryTable.test_row_id_to_ordinal)
2111            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
2112            table methods and the new arguments
2113    
2114            * test/test_dbf_table.py
2115            (TestDBFTable.test_read_row_as_dict_row_count_mode)
2116            (TestDBFTable.test_read_value_row_count_mode)
2117            (TestDBFTable.test_row_id_to_ordinal)
2118            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
2119            methods and the new arguments
2120    
2121    2003-08-26  Bernhard Herzog  <[email protected]>
2122    
2123            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
2124            more postgis specific but much faster method to get the bounding
2125            box
2126    
2127    2003-08-26  Bernhard Herzog  <[email protected]>
2128    
2129            * Thuban/Model/postgisdb.py (PostGISTable.Title)
2130            (PostGISShapeStore.AllShapes): Add these missing methods.
2131            (PostGISShapeStore.ShapesInRegion): No need to raise
2132            StopIteration. We can simply return
2133    
2134            * test/test_postgis_db.py (TestPostGISTable.test_title)
2135            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
2136            new methods
2137    
2138    2003-08-25  Bernhard Herzog  <[email protected]>
2139    
2140            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
2141    
2142            * test/test_postgis_db.py (PolygonTests): New class containing
2143            those tests from TestPostGISShapestorePolygon that can also be
2144            used to test MUTLIPOLYGON tables
2145            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
2146            so derive from that
2147            (TestPostGISShapestoreMultiPolygon): New class with tests for
2148            MUTLIPOLYGON tables
2149    
2150            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
2151            tables argument to have tuples with three items to override the
2152            WKT type used.
2153            (PostgreSQLServer.get_default_static_data_db): Use the above to
2154            create a polygon table with MUTLIPOLYGONs
2155            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
2156            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
2157            coords_to*
2158            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
2159            (wkt_converter): New. Map WKT types to converters
2160            (upload_shapefile): New parameter force_wkt_type to use a
2161            different WKT type than the default
2162    
2163    2003-08-25  Bernhard Herzog  <[email protected]>
2164    
2165            * Thuban/UI/application.py
2166            (ThubanApplication.run_db_param_dialog): New. Suitable as a
2167            db_connection_callback. Main difference is that the dialog run
2168            from this method doesn't have a parent so it can be used even when
2169            there is no main window
2170            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
2171            no db_connection_callback was given. This way the dialog pops up
2172            even when the .thuban file was given as a command line parameter.
2173    
2174    2003-08-25  Bernhard Herzog  <[email protected]>
2175    
2176            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
2177            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
2178            which leads to an effectively frozen X session because the user
2179            can only interact with the dialog but the mouse is still grabbed
2180            by the canvas.
2181            Also, call the tool's Hide method before MouseLeftUp because
2182            MouseLeftUp may change the tool's coordinates.
2183    
2184    2003-08-25  Bernhard Herzog  <[email protected]>
2185    
2186            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
2187            LoadCancelled exceptions and handle them by returning immediately.
2188    
2189    2003-08-25  Bernhard Herzog  <[email protected]>
2190    
2191            GUI part of loading sessions with postgis connections which may
2192            require user interaction to get passwords or updated parameters
2193    
2194            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
2195            bit nucer and be more generic.
2196            (DBFrame.OnAdd): Adapt to new DBDialog interface
2197    
2198            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
2199            optional parameter db_connection_callback which is passed to
2200            load_session.
2201    
2202            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
2203            Suitable as a db_connection_callback
2204            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
2205            db_connection_callback of the application's OpenSession method
2206    
2207    
2208    2003-08-25  Bernhard Herzog  <[email protected]>
2209    
2210            Basic loading of sessions containing postgis connections:
2211    
2212            * Thuban/Model/load.py (LoadError): Add doc-string
2213            (LoadCancelled): New exception class to indicate a cancelled load
2214            (SessionLoader.__init__): Add the db_connection_callback parameter
2215            which will be used by the loader to get updated parameters and a
2216            password for a database connection
2217            (SessionLoader.__init__): Add the new XML elements to the
2218            dispatchers dictionary
2219            (SessionLoader.check_attrs): Two new conversions, ascii to convert
2220            to a byte-string object and idref as a generic id reference
2221            (SessionLoader.start_dbconnection)
2222            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
2223            elements
2224            (load_session): Add the db_connection_callback to pass through the
2225            SessionLoader
2226    
2227            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
2228            New classes to test loading of sessions with postgis database
2229            connections.
2230    
2231    2003-08-25  Bernhard Herzog  <[email protected]>
2232    
2233            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
2234            replace it and the comment with __BuildDate__ by the Source: and
2235            Id: cvs keywords as used in the other files.
2236    
2237    2003-08-25  Bernhard Herzog  <[email protected]>
2238    
2239            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
2240            LoadError when a required attribute is missing. The code used to
2241            be commented out for some reason, but probably should have been
2242            active.
2243    
2244            * test/test_load.py (TestLoadError.test): Test the message in the
2245            LoadError too to make sure it really is about the missing
2246            attribute
2247    
2248    2003-08-22  Bernhard Herzog  <[email protected]>
2249    
2250            * test/test_save.py (SaveSessionTest.test_dbf_table)
2251            (SaveSessionTest.test_joined_table): Add XML validation tests.
2252    
2253    2003-08-22  Bernhard Herzog  <[email protected]>
2254    
2255            Implement saving a session with a postgis connection
2256    
2257            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
2258            elements for database connections and shapestores using db
2259            connections
2260            (session): Add the dbconnections to the content model
2261    
2262            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
2263            Write the db connections
2264            (SessionSaver.write_session): Call write_db_connections to write
2265            the connection before the data sources
2266            (SessionSaver.write_data_containers): Handle postgis shapestores
2267    
2268            * test/test_save.py (SaveSessionTest.thubanids)
2269            (SaveSessionTest.thubanidrefs): Update for new DTD
2270            (SaveSessionTest.test_save_postgis): New. Test saving a session
2271            with postgis connections
2272    
2273            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
2274            (PostGISTable.TableName): New accessor methods for the connection
2275            and table name
2276    
2277            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
2278            (TestPostGISTable.test_dbname): New methods to test the new
2279            PostGISConnection methods
2280    
2281    2003-08-22  Bernhard Herzog  <[email protected]>
2282    
2283            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
2284            for exceptions occurring when establishing a Database connection
2285            (PostGISConnection.connect): Catch psycopg.OperationalError during
2286            connects and raise ConnectionError.
2287    
2288            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
2289            tests for database exceptions
2290    
2291    2003-08-22  Bernhard Herzog  <[email protected]>
2292    
2293            Prepare the test suite for tests with required authentication
2294    
2295            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
2296            variables with two predefined users/passwords, one for the admin
2297            and one for a non-privileged user.
2298            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
2299            the non-privileged user to the database and set the admin password
2300            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
2301            Better error reporting
2302            (PostgreSQLServer.connection_params)
2303            (PostgreSQLServer.connection_string): New methods to return
2304            information about how to connect to the server
2305            (PostgreSQLServer.execute_sql): New. Convenience method to execute
2306            SQL statements
2307            (PostgreSQLServer.require_authentication): Toggle whether the
2308            server requires authentication
2309            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
2310            Add or alter users
2311            (PostGISDatabase.initdb): Pass the admin name one the
2312            subprocesses' command lines. Grant select rights on
2313            geometry_columns to everybody.
2314            (upload_shapefile): Use the admin name and password when
2315            connecting. Grant select rights on the new table to everybody.
2316    
2317            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
2318            server's new methods to get the connection parameters.
2319    
2320            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
2321            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
2322            server's new methods to get the connection parameters.
2323    
2324            * test/test_postgis_db.py
2325            (TestPostGISConnection.test_gis_tables_empty)
2326            (TestPostGISConnection.test_gis_tables_non_empty)
2327            (PostGISStaticTests.setUp): Use the server's new methods to get
2328            the connection parameters.
2329    
2330    2003-08-22  Bernhard Herzog  <[email protected]>
2331    
2332            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
2333    
2334            * Thuban/version.py: Add psycopg version
2335    
2336            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
2337            version of the psycopg module
2338    
2339    2003-08-22  Bernhard Herzog  <[email protected]>
2340    
2341            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
2342            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
2343            at the moment. The functionality should probably be implemented
2344            some time, though.
2345            (DBFrame.OnRemove): Display a message if the connection can't be
2346            removed because it's still in use.
2347    
2348    2003-08-22  Jan-Oliver Wagner <[email protected]>
2349    
2350            * Thuban/UI/about.py (About.__init__): split up the huge about
2351            text into elements/lists for easier translation. This fixes bug
2352            https://intevation.de/rt/webrt?serial_num=2058
2353            Also, made some forgotten string available for the i18n.
2354    
2355    2003-08-21  Bernhard Herzog  <[email protected]>
2356    
2357            Make postgis support really optional including insensitive menu
2358            items.
2359    
2360            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
2361            whether the postgis is supported.
2362    
2363            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
2364            to make postgis support optional
2365    
2366            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
2367            version of Thuban.Model.postgisdb.has_postgis_support
2368            (database_management command): Make it only sensitive if postgis
2369            is supported.
2370    
2371    2003-08-21  Jan-Oliver Wagner <[email protected]>
2372    
2373            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
2374            (section Adding and Removing Layers): Added text and described
2375            multi-selection.
2376            (chapter Extensions): New.
2377    
2378    2003-08-21  Jan-Oliver Wagner <[email protected]>
2379    
2380            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
2381            settings to allow multiple files to load into the map.
2382            Also reduced selection to *.shp as a default.
2383    
2384    2003-08-20  Bernhard Herzog  <[email protected]>
2385    
2386            Add dialogs and commands to open database connections and add
2387            database layers.
2388    
2389            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
2390            method to open the database connection management dialog
2391            (MainWindow.AddDBLayer): New method to add a layer from a database
2392            (_has_dbconnections): New helper function to use for sensitivity
2393            (database_management command, layer_add_db command): New commands
2394            that call the above new methods.
2395            (main_menu): Add the new commands to the menu.
2396    
2397            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
2398            (PostGISConnection.connect): Establish the actual connection in a
2399            separate method and call it in __init__. This makes it easier to
2400            override the behavior in test cases
2401            (PostGISConnection.BriefDescription): New method to return a brief
2402            description for use in dialogs.
2403    
2404            * test/test_postgis_db.py (NonConnection): DB connection that
2405            doesn't actually connect
2406            (TestBriefDescription): New class with tests for the new
2407            BriefDescription method
2408    
2409    2003-08-19  Jan-Oliver Wagner <[email protected]>
2410    
2411            Moved anything from extensions to libraries.
2412    
2413            * libraries: New.
2414    
2415            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
2416    
2417            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
2418            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
2419            been moved here from thuban/extensions/pyprojection/
2420            See there in the Attic for the older history.
2421    
2422            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
2423            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
2424            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
2425            have been moved here from thuban/extensions/pyshapelib/
2426            See there in the Attic for the older history.
2427    
2428            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
2429            files have been moved here from thuban/extensions/shapelib/
2430            See there in the Attic for the older history.
2431    
2432            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2433            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
2434            thuban/extensions/thuban/
2435            See there in the Attic for the older history.
2436    
2437            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
2438    
2439            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2440            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
2441    
2442            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
2443            Moved to libraries/shapelib.
2444    
2445            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
2446            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
2447            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
2448            Moved to libraries/pyshapelib.
2449    
2450            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
2451            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
2452            Moved to libraries/pyprojection.
2453    
2454            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
2455    
2456            * extensions: Removed.
2457    
2458    2003-08-19  Bernhard Herzog  <[email protected]>
2459    
2460            * test/test_viewport.py (ViewPortTest): We don't use the
2461            facilities of FileTestMixin so don't derive from it.
2462            (TestViewportWithPostGIS): New class with tests for using a
2463            viewport on a map with postgis layers.
2464    
2465    2003-08-19  Bernhard Herzog  <[email protected]>
2466    
2467            Add the db connection management to the session.
2468    
2469            * Thuban/Model/session.py (Session.__init__): New instance
2470            variable db_connections
2471            (Session.AddDBConnection, Session.DBConnections)
2472            (Session.HasDBConnections, Session.CanRemoveDBConnection)
2473            (Session.RemoveDBConnection): New methods to manage and query the
2474            db connections managed by the session
2475            (Session.OpenDBShapeStore): New method to open a shapestore from a
2476            db connection
2477    
2478            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
2479            messages for the db connection handling in the session
2480    
2481            * test/test_postgis_session.py: New. test cases for the session's
2482            db connection handling with postgis connections
2483    
2484    2003-08-19  Bernhard Herzog  <[email protected]>
2485    
2486            Add very basic postgis database support and the corresponding test
2487            cases. The test cases require a PostgreSQL + postgis installation
2488            but no existing database. The database will be created
2489            automatically by the test cases
2490    
2491            * test/README: Add note about skipped tests and the requirements
2492            of the postgis tests.
2493    
2494            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
2495    
2496            * test/test_postgis_db.py: New. Test cases for the postgis
2497            support.
2498    
2499            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
2500            format
2501    
2502            * test/test_wellknowntext.py: New. Test cases for the
2503            wellknowntext parser
2504    
2505            * test/postgissupport.py: New. Support module for tests involving
2506            a postgis database.
2507    
2508            * test/support.py (execute_as_testsuite): Shut down the postmaster
2509            if it's still running after the tests
2510    
2511            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
2512            well known text format
2513    
2514    2003-08-19  Jan-Oliver Wagner <[email protected]>
2515    
2516            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
2517            message dialog.
2518    
2519    2003-08-18  Bernhard Herzog  <[email protected]>
2520    
2521            * test/support.py (ThubanTestResult.printErrors): Indent the
2522            reason for the skips in the output to make it a bit more readable.
2523            (execute_as_testsuite): New helper function to run a test suite
2524            and print some more information.
2525            (run_tests): Use execute_as_testsuite to run the tests
2526    
2527            * test/runtests.py (main): Use execute_as_testsuite to run the
2528            tests
2529    
2530    2003-08-18  Bernhard Herzog  <[email protected]>
2531    
2532            Fix some bugs in Thuban and the test suite that were uncovered by
2533            changes introduced in Python 2.3:
2534    
2535            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
2536            filename is an absolute name
2537    
2538            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
2539            filename is an absolute name
2540    
2541            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
2542            unique filename to save to and use the correct relative filename
2543            in the expected output.
2544            (SaveSessionTest.test_dbf_table): Use the correct relative
2545            filename in the expected output.
2546    
2547            * test/test_layer.py (TestLayer.test_raster_layer): Update the
2548            test to check whether the filename is absolute.
2549    
2550    2003-08-18  Jan-Oliver Wagner <[email protected]>
2551    
2552            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
2553    
2554    2003-08-15  Bernhard Herzog  <[email protected]>
2555    
2556            Change the way shapes are returned by a shape store. The
2557            ShapesInRegion method returns an iterator over actual shape
2558            objects instead of a list of shape ids.
2559    
2560            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
2561            id.
2562            (ShapefileStore.ShapesInRegion): Return an iterator over the
2563            shapes which yields shape objects instead of returning a list of
2564            shape ids
2565            (ShapefileStore.AllShapes): New. Return an iterator over all
2566            shapes in the shape store
2567            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
2568    
2569            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
2570            doc-string.
2571    
2572            * Thuban/UI/baserenderer.py
2573            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
2574            layer_shapes and make it return an iterator containg shapes
2575            instead of a list of ids.
2576            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
2577            layer_shapes() change
2578    
2579            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
2580            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
2581    
2582            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
2583            changes in the ShapesInRegion return value.
2584            (ViewPort._get_hit_tester): Remove commented out code
2585    
2586            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
2587            new return value.
2588            (SimpleShapeStore.AllShapes): New. Implement this method too.
2589    
2590            * test/test_layer.py (TestLayer.test_arc_layer)
2591            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2592            (TestLayer.test_point_layer_with_projection)
2593            (TestLayer.test_derived_store): Adapt to changes in the
2594            ShapesInRegion return value.
2595    
2596            * test/test_shapefilestore.py
2597            (TestShapefileStoreArc.test_shapes_in_region)
2598            (TestShapefileStorePolygon.test_shapes_in_region)
2599            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
2600            in the ShapesInRegion return value.
2601            (TestShapefileStorePoint.test_all_shapes)
2602            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
2603            methods
2604    
2605            * test/test_derivedshapestore.py
2606            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
2607            the ShapesInRegion return value.
2608            (TestDerivedShapeStore.test_all_shapes)
2609            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
2610            methods
2611    
2612    2003-08-15  Bernhard Herzog  <[email protected]>
2613    
2614            Make the renderers deal correctly with raw vs. python level
2615            representation of shape geometries
2616    
2617            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
2618            Return a flag useraw in addition to the callable and the parameter
2619            to indicate whether the callable can deal with the raw shape data
2620            or uses the higher level python lists of coordinates. The callable
2621            now should accept either the raw data or the return value of the
2622            shape's Points() method.
2623            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
2624            change
2625            (BaseRenderer.projected_points): Instead of the shape id use the
2626            points list as parameter.
2627            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
2628            (BaseRenderer.draw_point_shape): Adapt to projected_points()
2629            change and accept the points list as parameter instead of the
2630            shape id.
2631    
2632            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
2633            the useraw flag as required by the BaseRenderer
2634            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
2635            changes.
2636    
2637            * test/test_baserenderer.py
2638            (TestBaseRenderer.test_point_with_classification): New test for
2639            rendering a map with classifications.
2640    
2641    2003-08-15  Bernhard Herzog  <[email protected]>
2642    
2643            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2644            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
2645            (ViewPort._get_hit_tester, ViewPort.projected_points)
2646            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
2647            (ViewPort._find_label_at): Split the find_shape_at method into
2648            several new methods and use the functions in the hit-test module.
2649    
2650            * Thuban/UI/hittest.py: New module with Python-level hit-testing
2651            functions
2652    
2653            * test/test_hittest.py: New. Test for the new hittest module
2654    
2655    2003-08-15  Bernhard Herzog  <[email protected]>
2656    
2657            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
2658            projection to all corners of the bounding box to get a better
2659            approximation of the projected bounding box
2660    
2661            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2662            New. Test coordinate handling of a layer with a projection.
2663            Catches the bug fixed in Layer.ShapesInRegion
2664    
2665    2003-08-15  Bernhard Herzog  <[email protected]>
2666    
2667            Move some of the mock objects in test_baserenderer into their own
2668            module so they can easily be used from other tests
2669    
2670            * test/mockgeo.py: New test helper module with some mock objects
2671            for geometry related things like shapes, shapestores and
2672            projections.
2673    
2674            * test/test_mockgeo.py: New. Tests for the new helper module
2675    
2676            * test/test_baserenderer.py: Some of the mock-objects are in
2677            mockgeo now.
2678    
2679    2003-08-12  Jan-Oliver Wagner <[email protected]>
2680    
2681            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
2682    
2683    2003-08-12  Bernhard Herzog  <[email protected]>
2684    
2685            * po/de.po: New. German translations by Bjoern Broscheit
2686    
2687    2003-08-12  Bernhard Herzog  <[email protected]>
2688    
2689            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
2690            strings have to be one string literal.
2691    
2692    2003-08-11  Bernhard Herzog  <[email protected]>
2693    
2694            * test/support.py (FloatComparisonMixin.assertPointListEquals):
2695            New. This method was used in various derived classes, but it's
2696            better to have it here.
2697    
2698            * test/test_shapefilestore.py
2699            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
2700            FloatComparisonMixin
2701    
2702            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
2703            It's now in FloatComparisonMixin
2704    
2705            * test/test_derivedshapestore.py
2706            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
2707            in FloatComparisonMixin
2708    
2709    2003-08-11  Bernhard Herzog  <[email protected]>
2710    
2711            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
2712            error message
2713    
2714    2003-08-08  Jan-Oliver Wagner <[email protected]>
2715    
2716            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
2717            with version number.
2718            Changed title to reflect version number of Thuban.
2719    
2720  2003-08-08  Jan-Oliver Wagner <[email protected]>  2003-08-08  Jan-Oliver Wagner <[email protected]>
2721    
2722          * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now          * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
# Line 384  Line 3103 
3103    
3104          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
3105          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
3106          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
3107          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
3108    
3109          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

Legend:
Removed from v.1569  
changed lines
  Added in v.2089

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26