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

Legend:
Removed from v.1657  
changed lines
  Added in v.2197

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26