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

Legend:
Removed from v.1735  
changed lines
  Added in v.2111

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26