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

Legend:
Removed from v.1655  
changed lines
  Added in v.2070

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26