/[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 1902 by jan, Fri Oct 31 16:06:49 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]>  2003-10-31  Jan-Oliver Wagner <[email protected]>
1403    
1404          GUIfied the functions of the profiling extension.          GUIfied the functions of the profiling extension.
# Line 9  Line 1410 
1410          the Extensions menu. Applied _() for strings.          the Extensions menu. Applied _() for strings.
1411          (profile_screen_renderer): Catch the detailed printout and present          (profile_screen_renderer): Catch the detailed printout and present
1412          it in a dialog.          it in a dialog.
1413          (ime_screen_renderer): Raise a dialog to present the result instead          (time_screen_renderer): Raise a dialog to present the result instead
1414          of printing it to stdout.          of printing it to stdout.
1415    
1416  2003-10-31  Bernhard Herzog  <[email protected]>  2003-10-31  Bernhard Herzog  <[email protected]>
# Line 3255  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.1902  
changed lines
  Added in v.2185

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26