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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26