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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26