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

Legend:
Removed from v.1582  
changed lines
  Added in v.2064

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26