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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26