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

Legend:
Removed from v.1834  
changed lines
  Added in v.2240

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26