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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26