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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26