/[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 1834 by bh, Mon Oct 20 11:01:14 2003 UTC revision 2156 by joey, Sat Apr 10 19:14:08 2004 UTC
# Line 1  Line 1 
1    2004-04-10  Martin Schulze  <[email protected]>
2    
3            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
4            string handling.  It's "foo".lower() and not lower(foo) without
5            lower imported from strings or something.
6    
7            * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
8            from capabilities.py and parser.py.  Implement priority list for
9            supported graphics formats, take care of wbmp != bmp.  PNG, TIFF
10            and GIF are supported here, but not yet by main Thuban.  Hence,
11            support for them may be removed later.  Special contribution to
12            usability: get wxWidgets to change the cursor when we're waiting
13            for data from the network so the user won't start to worry.  This
14            causes a redrawing error/warning, though.
15    
16            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
17            the DOM object.
18    
19    
20    2004-04-01  Martin Schulze  <[email protected]>
21    
22            * Extensions/wms/capabilities.py: Adjusted documentation
23            (WMSCapabilities.__init__): Improved documentation, fixed syntax
24            (WMSCapabilities.saveCapabilities): Only catch IOError when
25            handling files
26            (WMSCapabilities.loadCapabilities): Only catch IOError when
27            handling files
28            __main__: corrected variable naming
29            (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
30            class a specialisation of WMSCapabilitiesParser as well.  Also
31            execute grok() after loading or fetching capabilities, if that
32            went well, so that subsequent calls can already access the data.
33            (WMSCapabilities.getVersion): Export the used version of the
34            GetCapabilities request, so we can use it for subsequent calls,
35            i.e. for GetMap requests.
36            (WMSCapabilities.fetchCapabilities): Added proper error handling
37            when the GetCapabilities request failed, so that the surrounding
38            program can act accordingly.
39    
40    2004-03-30  Martin Schulze  <[email protected]>
41    
42            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
43            Adjusted the getLayerSRS method to return the list of SRSes
44            extracted from <SRS> elements instead of <BoundingBox> elements.
45            Added a bit of documentation as well.
46            (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
47            since it was only implemented due to a misunderstanding.
48    
49            * Extensions/wms/test/test_parser.py
50            (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
51            reflect the corrected interpretation of the standard: i.e. a layer
52            does not have to define a BoundingBox for all SRSes it supports.
53            Hence the <SRS></SRS> specification is authoritative, not the list
54            of BoundingBoxes.
55            (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
56            to ensure None is returned for a non-existing SRS.
57            (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
58            since it is not applicable anymore.  Listing more SRSes in <SRS>
59            elements is valid according to the specs.
60    
61    2004-03-26  Bernhard Reiter <[email protected]>
62    
63            * README: Nicer formatting of text. Improved descriptions.
64            Reflected wxWidgets name change.
65            
66            * Thuban/UI/about.py: Extended copyright to 2004 and added
67            information about the thuban-devel mailinglist.
68    
69    2004-03-24  Martin Schulze  <[email protected]>
70    
71            * Extensions/wms/capabilities.py: Renamed the class to contain
72            'WMS', also added a linebreak where required
73    
74            * Extensions/wms/parser.py: Finally added the XML parser for the
75            GetCapabilities response.
76    
77            * Extensions/wms/test/sample.xml: Adjusted the sample file so that
78            <SRS> elements match the <BoundingBox> elements, except for the
79            layer 'beschriftung'.
80    
81            * Extensions/wms/test/test_parser.py: Encode non-ascii strings
82            since Python uses unicode strings internally, otherwise
83            comparisons will fail.  Removed tests for getLayerBBoxSRS() since
84            the SRS will be calculated anyway and this method is obsoleted by
85            getLayerSRS().  Denote SRS as strings and not as cardinal numbers.
86            Move loading the sample file into the setUp method.  Added a test
87            for finding the integrity problem in the sample response.
88            Improved formatting.
89    
90            * Extensions/wms/domutils.py: Added convenience routines for
91            handling of Document Object Model (DOM) nodes.
92    
93            * Extensions/wms/test/test_domutils.py: Added a test for the
94            domutils module
95    
96    2004-03-19  Martin Schulze  <[email protected]>
97    
98            * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
99            Moved path detection and adding into a module of its own,
100            adjustpath, which exports thubandir as main Thuban directory.
101    
102            * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
103            detection and adding into a module of its own, adjustpath, which
104            exports thubandir as main Thuban directory.  Reorganised the
105            module in order to support the SkipTest feature for Thuban test
106            cases.
107    
108            * Extensions/wms/test/adjustpath.py: Moved path detection and
109            adding into a module of its own.
110    
111    2004-03-18  Martin Schulze  <[email protected]>
112    
113            * Extensions/wms/test/test_parser.py: Added another test for
114            checking whether the WMS XML parser (to be implemented) returns
115            the information we expect.  This requires a sample WMS WML file
116            (sample.xml) which has been extracted from the frida server and
117            "improved" manually.
118    
119            * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
120            main Thuban directory to the path in order to be able to import
121            random modules.  Adjusted the PyOGCLib detection to reuse the
122            information gathered.  Also added a note about the PYTHONPATH
123            environment variable.
124    
125            * Extensions/wms/test/test_ogclib.py: The format specification is
126            a mime-type, not a graphic format, hence image/jpeg wou ld be the
127            proper format and not JPEG.  We'll also have to take care of the
128            encoding of / as %2F.
129    
130    2004-03-16  Martin Schulze  <[email protected]>
131    
132            * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
133            comprehensive test for the getMapURL method, built compare URLs
134            according to the documentation in OGC 01-068r3
135    
136            * Extensions/wms/capabilities.py (WMSCapabilities): Added the
137            class WMSCapabilities to manage capabilites, will incorporate
138            parsing the capabilities response and provide details for other
139            classes.
140    
141    2004-03-12  Bernhard Herzog  <[email protected]>
142    
143            Support views in addition to normal tables in the postgis
144            shapestore
145    
146            * Thuban/Model/postgisdb.py
147            (PostGISShapeStore._fetch_table_information): Add a fallback for
148            the case where the table name is not in the geometry_columns
149            table.  This is usually the case for views.  Also, set
150            self.shapestore here.
151            (PostGISShapeStore.ShapeType): No need to query the database all
152            the time.  The shape type is now determined in
153            _fetch_table_information
154    
155            * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
156            (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
157            New parameter to specify views.
158            (PostGISDatabase.has_data): Also compare the views.  New views
159            parameter
160            (PostGISDatabase.initdb): Create the views.
161            (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
162            view
163    
164            * test/test_postgis_db.py
165            (TestPostGISShapestorePointFromViews): New.  Test a
166            PostGISShapeStore with a view
167            (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
168            the geometry_column explicitly to test whether that works
169    
170    2004-03-12  Bernhard Herzog  <[email protected]>
171    
172            Final step for explicit id/geometry columns: Loading and saving
173    
174            * Resources/XML/thuban-1.1.dtd: New.  Derived from thuban-1.0.dtd
175            with the following changes:
176            (dbshapesource): Two new attributes id_column and geometry_column
177    
178            * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
179            (SessionSaver.write_session): Use the new namespace
180            (SessionSaver.write_data_containers): Write the new dbshapesource
181            parameters
182    
183            * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
184            the new file format version
185            (SessionLoader.start_dbshapesource): Handle the new db parameters
186    
187            * test/test_save.py: Update to the new dtd and namespace
188            (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
189            mock object to provide a working IDColumn method.
190    
191            * test/test_load_1_0.py: New.  Copy of the test_load.py before
192            today's changes but with the round-trip tests removed.
193    
194            * test/test_load_0_9.py: Update doc-string.
195    
196            * test/test_load.py: Update all .thuban files to the new dtd and
197            namespace.
198            (TestPostGISLayer.file_contents): Add the new dbshapesource
199            paramters
200    
201    2004-03-11  Bernhard Herzog  <[email protected]>
202    
203            Next step for explicit id/geometry columns: User interaction
204    
205            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
206            the dialog is constructed. Add combo boxes to select id and
207            geometry column.  Rename some instance variables.
208            (ChooseDBTableDialog.GetTable): Return id and geometry column
209            names
210            (ChooseDBTableDialog.OnTableSelect): New. Event handler for
211            selections in the table list
212    
213            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
214            and geometry_column
215    
216            * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
217            parameters for id_column and geometry column of PostGISShapeStore
218            here as well.
219    
220            * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
221            (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
222            (PostGISConnection.GeometryTables): Use a better query to
223            determine which relations in the database might be usable for
224            shapestores.  Now supports views as well but is more PostgreSQL
225            specific
226            (PostGISConnection.table_columns): New. Somewhat experimental
227            method to let the db dialogs provide lists of columns to users so
228            that they can select id and geometry columns.
229            (PostGISTable.__init__): The default value of the id_column
230            parameter is now None it still means "gid" effectively, though.
231            (PostGISTable.IDColumn): New introspection method to return a
232            column object for the id column
233            (PostGISShapeStore.GeometryColumn): New introspection method to
234            return a column object for the geometry column
235    
236            * test/test_postgis_db.py
237            (TestPostGISConnection.test_gis_tables_non_empty):
238            Removed. Subsumed by the new:
239            (TestPostGISConnection.test_gis_tables_with_views_and_tables):
240            New. Tes the GeometryTables and table_columns methods with actual
241            tables and views.
242            (PointTests.test_id_column, PointTests.test_geometry_column):
243            New. tests for the new methods.
244            (TestPostGISShapestorePoint.setUp)
245            (TestPostGISShapestorePointSRID.setUp)
246            (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
247            instance variables needed by the new tests
248    
249    2004-03-11  Bernhard Herzog  <[email protected]>
250    
251            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
252            numbers given to ReadValue are ordinals.
253    
254    2004-03-11  Bernhard Herzog  <[email protected]>
255    
256            Elimiate the requirement for PostGIS tables to have a column
257            called "gid".
258    
259            * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
260            id_column to specify which column to use to identify rows.  Also
261            new instance variables id_column and quoted_id_column
262            (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
263            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
264            (PostGISTable.SimpleQuery): Use the id column name provided to the
265            constructor instead of "gid"
266            (PostGISShapeStore.__init__): New parameter id_column analogously
267            to PostGISTable.__init__.  This parameter is simply passed through
268            to the base class constructor
269            (PostGISShapeStore._create_col_from_description): Fix typo in
270            doc-string
271            (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
272            (PostGISShapeStore.ShapesInRegion): Use the id column name
273            provided to the constructor instead of "gid"
274    
275            * test/postgissupport.py
276            (PostgreSQLServer.get_default_static_data_db): New static table
277            landmarks_point_id with an id column != "gid.  Update the comments
278            a bit.
279            (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
280            doc-
281            (upload_shapefile): New parameter gid_column to use a name other
282            than "gid" for the column to store the shape ids
283    
284            * test/test_postgis_db.py (TableTests): New.  Mixin-class
285            containing all tests previously in TestPostGISTable.  The actual
286            tests are the same but the code is a bit more configurable to
287            allow for different id columns etc.
288            (TestPostGISTable): Derive from TableTests now for the actual
289            tests.
290            (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
291            except that it the landmarks_point_id table to test the id_column
292            parameter
293            (PointTests): Extend the doc-string
294            (TestPostGISShapestorePointExplicitGIDColumn)
295            (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
296            from PointTests to test the explicit id_column parameter.  One
297            tests with the name of the column holding the shape ids, the other
298            uses PostgreSQL's OID column.  For the latter a number of methods
299            have to be overwritten to make them independent of the actual id
300            values.
301    
302    2004-03-08  Silke Reimer  <[email protected]>
303    
304            Update debian directory:
305    
306            * debian/changelog: Added new version.
307            * deiban/rules: Updated management of patches (with cbds)
308            * debian/control: Added cbds to dependencies
309            * debian/patches/*: New. Adds better support for patches of thuban in
310                            debian
311            * debian/menu: Syntax of menu changed slightly
312            * debian/setup.py.patch: removed because it has been moved to
313                            debian/patechs/setup.py.patch
314            
315    
316    2004-02-26  Bernhard Herzog  <[email protected]>
317    
318            Create the Doc/technotes directory for text files with information
319            for developers
320    
321            * Doc/technotes/README: New. README for the technotes
322    
323            * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
324            Thuban
325    
326            * Doc/technotes/release_process.txt: New. Used to be
327            HOWTO-Release.  Now slightly adapted to technote formatting style.
328    
329            * HOWTO-Release: Removed.  It's contents are now in
330            Doc/technotes/release_process.txt
331    
332    2004-02-25  Bernhard Herzog  <[email protected]>
333    
334            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
335            version of wxWindows the module was compiled with so we can check
336            that against the wxPython version.
337    
338            * Thuban/version.py (thuban_branch, thuban_release): New variables
339            controlling which and how Thuban versions are shown.  See the
340            comments for details.
341            (verify_versions): Also check that the wx version that wxproj is
342            compiled against matches that of the wxPython we use at runtime
343    
344    2004-02-20  Bernhard Herzog  <[email protected]>
345    
346            * Extensions/wms/wms.py (epsg_code_to_projection): Use
347            get_system_proj_file to read the epsg projections.  The old way
348            depended on the current directory being the top Thuban directory.
349    
350    2004-02-20  Bernhard Herzog  <[email protected]>
351    
352            * Extensions/svgexport/test/test_svgmapwriter.py
353            (TestVirtualDC.test_clippath): Remove a debug print
354    
355    2004-02-20  Bernhard Herzog  <[email protected]>
356    
357            * Extensions/svgexport/__init__.py: New.  Turn
358            Extensions/svgexport into a package.
359    
360            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
361            doc-string a bit.  The doc-string must come first, otherwise it's
362            not a doc-string.  The __future__ import must be the first thing
363            after the doc-string.  Use only double quotes in doc-strings.
364            Single quotes trip up emacs syntax highlighting if the text
365            contains apostrophes.
366    
367    2004-02-20  Bernhard Herzog  <[email protected]>
368    
369            * Extensions/svgexport/test/__init__.py,
370            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
371            suite for svgexport
372    
373            * test/runtests.py (find_test_modules): New. Function with the
374            module finding code from main.
375            (main): Use find_test_modules to figure out the default test
376            modules and take modules from Extensions.svgexport.test too.
377    
378    2004-02-19  Bernhard Herzog  <[email protected]>
379    
380            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
381            the mainwindow has a reference to the map of the initial session.
382            This fixes a bug introduced with the fix for RT#2245
383    
384    2004-02-19  Bernhard Herzog  <[email protected]>
385    
386            * Extensions/svgexport/svgsaver.py,
387            Extensions/svgexport/svgmapwriter.py,
388            Extensions/svgexport/maplegend.py: Added again.  This time in the
389            correct place.
390    
391    2004-02-17  Bernhard Herzog  <[email protected]>
392    
393            Fix for RT#2245
394    
395            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
396            instance variables before trying to create any windows.  Creating
397            windows can start an event loop if e.g. message boxes are popped
398            up for some reason, and event handlers, especially EVT_UPDATE_UI
399            may want to access things from the application.
400            (ThubanApplication.maps_changed): The mainwindow may not have been
401            created yet, so check whether it has been created before calling
402            its methods
403    
404            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
405            have a map
406    
407    2004-02-17  Bernhard Herzog  <[email protected]>
408    
409            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
410            Extensions/svgmapwriter.py, Extensions/maplegend.py,
411            extensions/svgexport/svgsaver.py,
412            extensions/svgexport/svgmapwriter.py,
413            extensions/svgexport/maplegend.py: Removed.  These files were in
414            the wrong places or didn't work at all.
415    
416    2004-02-16  Bernhard Herzog  <[email protected]>
417    
418            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
419            line
420    
421    2004-02-16  Bernhard Herzog  <[email protected]>
422    
423            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
424    
425    2004-02-15  Markus Rechtien  <[email protected]>
426            
427            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
428            to write a session to a file in SVG format.
429            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
430            to write a SVG map of a session.
431            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
432            in SVG format for the current session.
433    
434    2004-02-13  Bernhard Herzog  <[email protected]>
435    
436            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
437            can't be created, return immediately after displaying the error
438            message.
439    
440    2004-02-11  Bernhard Herzog  <[email protected]>
441    
442            Handle postgis tables with more than one geometry column.
443    
444            * Thuban/Model/postgisdb.py
445            (PostGISTable._fetch_table_information): Delegate the creation of
446            column objects to a different method so that we can extend that in
447            derived classes
448            (PostGISTable._create_col_from_description): New. Column object
449            creation part of _fetch_table_information
450            (PostGISShapeStore._create_col_from_description): New. Extend
451            inherited method to handle geometry columns
452            (PostGISShapeStore.__init__): New parameter geometry_column to
453            specify which geometry column to use.  Optional but mandatory for
454            tables with more than one geometry column
455            (PostGISShapeStore._fetch_table_information): Also use the name of
456            the geometry column when looking for the srid
457            (PostGISShapeStore.ShapeType): Also use the name of the geometry
458            column when looking for the shape type
459    
460            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
461            NonConnectionStore to changes in the PostGISShapeStore
462    
463            * test/test_postgis_db.py
464            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
465            PostGISShapeStore with tables having two geometry columns.
466    
467    2004-02-10  Bernhard Herzog  <[email protected]>
468    
469            Fix some postgis problems.  What remains to be done is real
470            handling of SRIDs as they affect how reprojection is done
471    
472            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
473            doc-string
474            (PostGISShapeStore._fetch_table_information): New. Extend
475            inherited method to retrieve srid
476            (PostGISShapeStore.BoundingBox): Handle tables without data.
477            extent yields NULL for those
478            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
479    
480            * test/test_postgis_db.py
481            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
482            for the special case of a table without any data
483            (TestPostGISShapestorePointSRID): New class with tests for a table
484            that uses srids
485            (PolygonTests): Fix a doc-string typo
486    
487            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
488            reference_systems with a specification of spacial reference
489            systems to create in the new db.
490            (PostgreSQLServer.new_postgis_db)
491            (PostgreSQLServer.get_static_data_db): New parameter
492            reference_systems to be passed through ultimately to
493            PostGISDatabase.  In new_postgis_db also check whether an existing
494            db already has the right srids
495            (PostgreSQLServer.get_default_static_data_db): Add srids and a
496            table that uses srids
497            (PostGISDatabase.initdb): Create the entries for the reference
498            systems
499            (PostGISDatabase.has_data): Add reference_systems parameter to
500            check for those too
501            (upload_shapefile): New parameter srid to create tables with a
502            specific srid
503    
504    2004-02-06  Frank Koormann  <[email protected]>
505    
506            * po/pt_BR.po: Fixed charset
507    
508    2004-02-05  Frank Koormann  <[email protected]>
509    
510            * po/pt_BR.po: Fixed format string for error message, missing %s
511            added (Thuban/UI/application.py:273)
512    
513    2004-02-03  Frank Koormann  <[email protected]>
514            
515            First version of Portuguese (Brazilian) translation
516    
517            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
518            Brazilian Portuguese by Eduardo Patto Kanegae.
519    
520            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
521            translators.
522    
523    
524    2004-01-22  Frank Koormann  <[email protected]>
525    
526            * Doc/manual/thuban-manual.xml: Added section on installation of
527            Thuban under Win32 systems. Fixed image path references in the postgis
528            section. Some minor source formattings.
529    
530    2004-01-21  Frank Koormann  <[email protected]>
531    
532            Make Thuban remember path selections (at least for one application run).
533    
534            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
535            attribute of application object. Path is a dictionary of
536            strings, currently with the items "data" and "projection".  
537            (Application.SetPath): New, stores path for the specified item.
538            (Application.Path): New, return path for the specified item.
539    
540            * Thuban/UI/mainwindow.py
541            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
542            MainWindow.AddLayer, MainWindow.AddRasterLayer,
543            MainWindow.TableOpen): Access "data" path information of the
544            application.
545            
546            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
547            Access "projection" path information of the application.
548    
549    2004-01-05  Bernhard Herzog  <[email protected]>
550    
551            * po/ru.po: Updated translations from Alex Shevlakov
552    
553    2004-01-05  Bernhard Herzog  <[email protected]>
554    
555            * po/Makefile, po/README: Move the description of how to generate
556            the translation statistics to the README.
557    
558    2003-12-23  Bernhard Herzog  <[email protected]>
559    
560            * NEWS: Update for 1.0.0
561    
562            * po/it.po: Another update from Maurizio Napolitano
563    
564    2003-12-23  Bernhard Herzog  <[email protected]>
565    
566            * po/it.po: Updated translation from Maurizio Napolitano
567    
568    2003-12-23  Bernhard Herzog  <[email protected]>
569    
570            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
571            for translation
572    
573            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
574            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
575            strings for translation
576    
577            * po/de.po: Update with the newly marked strings.
578    
579    2003-12-22  Bernhard Herzog  <[email protected]>
580    
581            * HOWTO-Release: Fix the places where version numbers have to be
582            updated
583    
584    2003-12-22  Bernhard Herzog  <[email protected]>
585    
586            * setup.py (setup call): 1.0.0, yeah!
587    
588            * Thuban/version.py (longversion): 1.0.0, yeah!
589    
590            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
591            1.0.0 namespace too
592    
593            * Thuban/Model/save.py (SessionSaver.write_session): Save with
594            1.0.0 namespace
595    
596            * test/test_load.py (LoadSessionTest.dtd)
597            (TestSingleLayer.file_contents)
598            (TestNonAsciiColumnName.file_contents)
599            (TestLayerVisibility.file_contents)
600            (TestClassification.file_contents, TestLabels.file_contents)
601            (TestLayerProjection.file_contents)
602            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
603            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
604            (TestPostGISLayerPassword.file_contents)
605            (TestLoadError.file_contents, TestLoadError.test): Update for
606            1.0.0 namespace
607    
608            * test/test_save.py (SaveSessionTest.dtd)
609            (SaveSessionTest.testEmptySession)
610            (SaveSessionTest.testSingleLayer)
611            (SaveSessionTest.testLayerProjection)
612            (SaveSessionTest.testRasterLayer)
613            (SaveSessionTest.testClassifiedLayer)
614            (SaveSessionTest.test_dbf_table)
615            (SaveSessionTest.test_joined_table)
616            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
617    
618    2003-12-22  Bernhard Herzog  <[email protected]>
619    
620            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
621            alignment flags are byte strings not unicode and that they have
622            valid values
623    
624            * test/test_load.py (TestLabelLayer): New. Test loading (and
625            indirectly saving) of maps with labels.
626    
627    2003-12-22  Bernhard Herzog  <[email protected]>
628    
629            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
630            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
631            unsubscribe all subscribers.
632            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
633            self.grid since it may already have been destroyed.
634            Fixes RT #2256
635    
636    2003-12-19  Bernhard Herzog  <[email protected]>
637    
638            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
639    
640    2003-12-16  Bernhard Herzog  <[email protected]>
641            
642            * debian/bitmappath.patch, debian/setup.py.patch:
643                    added to ensure compliance with FHS for debian
644            * debian/rules, debian/changelog:
645                added patches in rules to ensure compliance with FHS for debian
646    
647    2003-12-16  Bernhard Herzog  <[email protected]>
648    
649            * po/Makefile (mo): Make the output a bit nicer so that it prints
650            statistics about the translations. Add a comment how produce even
651            nicer statistics with sed.
652    
653    2003-12-09  Frank Koormann   <[email protected]>
654    
655            * Resources/Projections/defaults.proj:
656            French projection sample with correct accents (UNICODE).
657    
658    2003-12-05  Bernhard Herzog  <[email protected]>
659    
660            * MANIFEST.in: Add the devtools directory
661    
662            * setup.py (setup call): Use license instead of licence. This
663            silences a deprecation warning on Python 2.3
664    
665    2003-12-05  Frank Koormann   <[email protected]>
666    
667            Documentation synced with 1.0rc1
668    
669            * Doc/manual/thuban-manual.xml:
670            Minor formatting changes and references to database layers .
671            Introduction.Internationalization: New section on i18n.
672            MapManagement.AddingandRemovingLayers: Added item on database layers.  
673            MapManagement.TheLegend: Added section and screenshot on popup menu.
674            ProjectionManagement: Updated screenshot and sentence on EPSG.
675            Appendix.SupportedDataSources: Added PostGIS.
676            Appendix.WorkingwithPostGIS: New section.
677    
678            * Doc/manual/images/6_projection.png: Updated screenshot including
679            EPSG checkboxes.
680    
681            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
682    
683            * Doc/manual/images/app_postgis_add_layer.png,
684            Doc/manual/images/app_postgis_db_add.png,
685            Doc/manual/images/app_postgis_db_management.png:
686            New screenshots focussing on database layers
687    
688    2003-12-05  Frank Koormann   <[email protected]>
689    
690            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
691            write warning to stderr instead of rising a warning dialog
692    
693    2003-12-03  Bernhard Herzog  <[email protected]>
694    
695            Fix for RT #2243
696    
697            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
698            New. Like has_selected_layer but for shape layers only
699            (_has_selected_shape_layer): New. Like _has_selected_layer but for
700            shape layers only
701            (layer_show_table command, layer_jointable command): Use these
702            commands should only be available for shape layers
703    
704    2003-12-03  Bernhard Herzog  <[email protected]>
705    
706            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
707            publishers that are wx objects and may have been destroyed by wx
708            already. Fixes RT #2242.
709    
710    2003-12-03  Bernhard Herzog  <[email protected]>
711    
712            * po/ru.po: Updates from Alex Shevlakov
713    
714    2003-12-03  Silke Reimer <silkeintevation.de>
715    
716            * debian/control, debian/changelog: Added gdal-support to
717                    debian package, updated to new thuban version
718    
719    
720    2003-12-03  Bernhard Herzog  <[email protected]>
721    
722            * Thuban/Lib/version.py: New. Module for version number
723            manipulations. The version of make_tuple here also deals better
724            with more unusual version number strings, such as e.g.
725            "1.2+cvs20031111"
726    
727            * Thuban/version.py (make_tuple): Removed. It's now in
728            Thuban.Lib.version. Use that implementation instead.
729    
730            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
731    
732    2003-12-02  Bernhard Herzog  <[email protected]>
733    
734            * MANIFEST.in: Add debian files
735    
736            * setup.py (setup call): Add packages for the Extensions so that
737            they're installed too
738            (data_files): Add READMEs and sample data from some Extensions
739    
740            * NEWS: Add note about the extensions in binary packages
741    
742    2003-12-02  Bernhard Herzog  <[email protected]>
743    
744            * Thuban/Model/save.py (SessionSaver.write_session): Save files
745            with the thuban-1.0rc1
746    
747            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
748            thuban-1.0rc1 namespace too
749    
750            * test/test_save.py (SaveSessionTest.dtd)
751            (SaveSessionTest.testEmptySession)
752            (SaveSessionTest.testSingleLayer)
753            (SaveSessionTest.testLayerProjection)
754            (SaveSessionTest.testRasterLayer)
755            (SaveSessionTest.testClassifiedLayer)
756            (SaveSessionTest.test_dbf_table)
757            (SaveSessionTest.test_joined_table)
758            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
759            namespace
760    
761            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
762            namespace
763            (TestSingleLayer.file_contents)
764            (TestNonAsciiColumnName.file_contents)
765            (TestLayerVisibility.file_contents)
766            (TestClassification.file_contents, TestLabels.file_contents)
767            (TestLayerProjection.file_contents)
768            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
769            (TestPostGISLayer.file_contents)
770            (TestPostGISLayerPassword.file_contents)
771            (TestLoadError.file_contents, TestLoadError.test): Update to
772            thuban-1.0rc1 namespace
773    
774    2003-12-01  Bernhard Herzog  <[email protected]>
775    
776            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
777            nt to better match Intevation's current w32 setup
778    
779            * HOWTO-Release: Add note about updating MANIFEST.in
780    
781            * MANIFEST.in: Add the Extensions
782    
783            * NEWS: Update for 1.0rc1
784    
785    2003-12-01  Bernhard Herzog  <[email protected]>
786    
787            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
788            cards for the dialog so that shapefiles ending in all uppercase
789            SHP are listed too
790    
791    2003-11-28  Bernhard Herzog  <[email protected]>
792    
793            * Thuban/version.py (longversion): Update to 1.0rc1
794    
795            * setup.py (setup call): Update version to 1.0rc1. Use the
796            [email protected] email address as author email instead of my
797            personal one.
798    
799    2003-11-28  Bernhard Herzog  <[email protected]>
800    
801            * po/de.po: Update german translation.
802    
803    2003-11-28  Bernhard Herzog  <[email protected]>
804    
805            Unify the filenames stored in .thuban files so that the .thuban
806            files are more platform independend
807    
808            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
809            that they can be used on both windows and unix
810            (SessionSaver.prepare_filename): New. Handle all filename
811            transformations for filenames stored in the thuban file
812            (SessionSaver.write_data_containers, SessionSaver.write_layer):
813            Use prepare_filename
814    
815            * test/test_save.py (SaveSessionTest.testSingleLayer)
816            (SaveSessionTest.testLayerProjection)
817            (SaveSessionTest.testRasterLayer)
818            (SaveSessionTest.testClassifiedLayer)
819            (SaveSessionTest.test_dbf_table)
820            (SaveSessionTest.test_joined_table): Filenames are always stored
821            with slashes on all currently supported platforms so adapt all
822            tests to this
823    
824            * test/test_load.py (LoadSessionTest.filenames): With the new
825            filename scheme the filenames in the tests should be
826            understandable on all currently supported platforms so we turn
827            this into an empty list because we don't have to normalize them
828            anymore
829    
830    2003-11-28  Bernhard Herzog  <[email protected]>
831    
832            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
833            Add the ellipsoid to the projection since some Proj versions
834            complain if it's missing.
835    
836    2003-11-27  Bernhard Herzog  <[email protected]>
837    
838            Corect some bounding box projection problems
839    
840            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
841            version of ForwardBBox
842            (Projection._transform_bbox): New. common implementation of
843            ForwardBBox and InverseBBox
844            (Projection.ForwardBBox): Use _transform_bbox.
845    
846            * test/test_proj.py (TestProjection.test): Add test for
847            InverseBBox
848    
849            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
850            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
851            new InverseBBox method to determine the unprojected bounding box
852            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
853            bbox.
854    
855            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
856            Removed.
857            (TestLayer.test_arc_layer_with_projection): New. This test is
858            better able to test whether bounding boxes are projected correctly
859            than test_point_layer_with_projection
860    
861            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
862            InverseBBox to unproject bboxes
863    
864    2003-11-25  Bernhard Herzog  <[email protected]>
865    
866            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
867            source code.
868    
869    2003-11-25  Bernhard Herzog  <[email protected]>
870    
871            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
872            there for backwards compatibility and all code relying on that
873            should have been updated by now.
874    
875    2003-11-25  Bernhard Herzog  <[email protected]>
876    
877            * test/test_load.py (TestClassification.test): Add the missing
878            round trip test.
879            (TestClassification.file_contents): Update to the newest file
880            format
881    
882    2003-11-25  Bernhard Herzog  <[email protected]>
883    
884            Add very experimental (and possibly dangerous) extension to draw
885            polygons:
886    
887            * Extensions/drawshape/README: New. Brief installation
888            instructions
889    
890            * Extensions/drawshape/drawshape.py: New. Implementation of the
891            drawshape extensions
892    
893            * Extensions/drawshape/patch.diff: Patch to apply before the
894            extension can be used.
895    
896    2003-11-24  Bernhard Herzog  <[email protected]>
897    
898            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
899            (ShapefileStore.__init__): Factor opening the shapefile into a
900            separate method (the new _open_shapefile). This makes the code a
901            bit more readable but the real reason is that it makes some evil
902            hacks easier. :-)
903    
904    2003-11-24  Bernhard Herzog  <[email protected]>
905    
906            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
907            converter is specified for an attribute assume it's a string
908            containing only Latin1 characters. Update doc-string accordingly.
909            This change should fix many places where unicode objects might
910            accidentally enter Thuban.
911    
912            * test/test_load.py (TestNonAsciiColumnName): New test to check
913            what happens with column names in DBF files that contain non-ascii
914            characters
915    
916    2003-11-21  Bernhard Herzog  <[email protected]>
917    
918            Enable the experimental attribute editing again and introduce a
919            command line switch to actually activate it
920    
921            * Thuban/UI/main.py (options): New. Container for options set on
922            the commmand line
923            (main): Add the --enable-attribute-editing flag.
924    
925            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
926            editing is enabled use the grid ctrl which allows editing of the
927            values
928    
929            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
930            New. Just delegate this to the underlying table.
931    
932    2003-11-20  Bernhard Herzog  <[email protected]>
933    
934            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
935            Skip this test if run under non-posix systems since it only works
936            there
937    
938    2003-11-19  Bernhard Herzog  <[email protected]>
939    
940            * Thuban/Model/resource.py: Rework the way gdal support is
941            determined so that we can give a reason in the about why gdal is
942            not supported.
943            (gdal_support_status): New. Variable holding a string with the
944            reason for no gdal support
945    
946            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
947            not supported to the message
948    
949    2003-11-19  Bernhard Herzog  <[email protected]>
950    
951            Remove the old table interface and its test cases
952    
953            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
954            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
955            anymore
956    
957            * Thuban/Model/transientdb.py (TransientTableBase)
958            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
959            anymore
960    
961            * test/test_table.py: Removed since the old interface it tests is
962            gone.
963    
964            * test/runtests.py (main): The old table interface is gone and
965            with it the deprecation warnings so remove the code that turns
966            these warnings into errors
967    
968    2003-11-19  Bernhard Herzog  <[email protected]>
969    
970            * test/test_table.py: Revert to revision 1.5 again. Changing the
971            tests to use the new table interface is completely wrong since the
972            whole purpose of the tests in this module is to test the old
973            interface.
974    
975    2003-11-18  Bernhard Herzog  <[email protected]>
976    
977            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
978            New. Test whether the connection matches a set of connection
979            parameters
980    
981            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
982            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
983            for existing connections with the same parameters and break out of
984            the loop correctly.
985    
986            * test/test_postgis_db.py (TestBriefDescription)
987            (TestPostGISSimple.test_brief_description): Rename
988            TestBriefDescription to TestPostGISSimple and the test method to
989            test_brief_description so that we can add more test methods.
990            (TestPostGISSimple.test_matches_parameters): New. Test the new
991            MatchesParameters method
992    
993    2003-11-18  Bernhard Herzog  <[email protected]>
994    
995            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
996            _was_destroyed, to indicate whether an publisher instance has
997            already been destroyed.
998            (Publisher.Unsubscribe): Only disconnect if the publisher has not
999            been destroyed yet.
1000            (Publisher.Destroy): Set the _was_destroyed flag to true.
1001    
1002            * test/test_connector.py
1003            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
1004            calling Unsubscribe after Destroy doesn't raise an exception
1005    
1006    2003-11-14  Bernhard Herzog  <[email protected]>
1007    
1008            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
1009            typo in doc-string
1010    
1011    2003-11-13  Bernhard Herzog  <[email protected]>
1012    
1013            Quote table and column names properly for postgis.
1014    
1015            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
1016            quote an identifier for use in an sql statement
1017            (PostGISColumn.__init__): Add the quoted_name attribute
1018            (PostGISTable.__init__): New instance variable quoted_tablename
1019            (PostGISTable._fetch_table_information): Use the quoted table
1020            name. New isntance variable quoted_geo_col with a quoted version
1021            of geometry_column
1022            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
1023            (PostGISTable.RowOrdinalToId): Use the quoted table name
1024            (PostGISTable.ReadValue, PostGISTable.ValueRange)
1025            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
1026            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
1027            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
1028            Use quoted table and column names
1029    
1030            * test/test_postgis_db.py (TestPostGISSpecialCases)
1031            (TestPostGISIgnoredColumns): Rename the class to
1032            TestPostGISSpecialCases because that better describes the new
1033            cases
1034            (TestPostGISSpecialCases.test_unsupported_types)
1035            (TestPostGISSpecialCases.test): Rename the method to
1036            test_unsupported_types because we need a more descriptive name now
1037            that there are more methods
1038            (TestPostGISSpecialCases.test_table_name_quoting)
1039            (TestPostGISSpecialCases.test_column_name_quoting)
1040            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
1041            cases to test quoting of table and column names in PostGISTable
1042            and PostGISShapeStore
1043    
1044            * test/postgissupport.py
1045            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
1046            AddGeometryColumn desn't support table or column names with sapces
1047            or double quotes
1048    
1049    2003-11-12  Jan-Oliver Wagner <[email protected]>
1050    
1051            * Extensions/wms/__init__.py: New: Init to make this
1052            directory a package.
1053    
1054            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
1055    
1056    2003-11-11  Bernhard Herzog  <[email protected]>
1057    
1058            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
1059            Constant for the file woth deprecated epsg projections
1060            (get_system_proj_file): Update doc-string
1061    
1062            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
1063            above the EPS widgets, introduce a check box for the deprecated
1064            eps projections and a label for the epsg widgets
1065            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
1066            too
1067    
1068    2003-11-11  Bernhard Herzog  <[email protected]>
1069    
1070            Avoid warnings when run under Python 2.3
1071    
1072            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
1073            (BaseRenderer.draw_label_layer): Coordinates must be ints.
1074    
1075            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
1076            real method so that we can convert to int.
1077            (MapRenderer.label_font): The font size mist be an int.
1078    
1079            * Thuban/UI/common.py (Color2wxColour): The color values must be
1080            ints. Also, remove the unnecessary asserts.
1081    
1082            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
1083            (TestUnicodeStrings.test): Python source code should not contain
1084            non-ascii characters unless an encoding is specified in the file.
1085            Therefore use \x escapes in the string literals for non-ascii
1086            characters.
1087    
1088    2003-11-11  Bernhard Herzog  <[email protected]>
1089    
1090            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
1091            parameter so that this function can be used for all proj files in
1092            Resource/Projections
1093            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
1094            get_system_proj_file
1095    
1096            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
1097            ProjFile self.__sysProjFile use a dictionary of system ProjFile
1098            objects self._sys_proj_files
1099            (ProjFrame.build_dialog): Adapt to the new changes in the
1100            ProjectionList constructor. Add a check button to toggle whether
1101            EPSG projections are shown
1102            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
1103            events.
1104            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
1105            the busy cursor if the files have not yet been loaded by the
1106            dialog.
1107            (ProjFrame.load_system_proj): Add a parameter for the name of the
1108            proj file. Maintain the dictionary of system projections
1109            self._sys_proj_files
1110    
1111            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
1112            user_projs parameters into one parameter proj_files which is a
1113            list of proj files.
1114            (ProjectionList._subscribe_proj_files)
1115            (ProjectionList._unsubscribe_proj_files): New. Move
1116            subscription/unsubscription of projfile messages to separate
1117            methods
1118            (ProjectionList.Destroy): The unsubscribe is now done in
1119            _unsubscribe_proj_files
1120            (ProjectionList.update_projections): We now have a list of proj
1121            file objects
1122            (ProjectionList.SetProjFiles): New method to set a new list of
1123            proj file objects
1124    
1125            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
1126            Specify explicitly which system proj file to load.
1127    
1128    2003-11-11  Bernhard Herzog  <[email protected]>
1129    
1130            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
1131            instance variables to cut cyclic references. The GC would have
1132            collected the loader eventually but it can happen that it doesn't
1133            run at all until thuban is closed (2.3 but not 2.2 tries a bit
1134            harder and forces a collection when the interpreter terminates)
1135            (load_session): Call the handler's Destroy method to make sure
1136            that it gets garbage collected early. Otherwise it will be
1137            collected very late if at all and it holds some references to e.g.
1138            shapestores and the session which can lead to leaks (of e.g. the
1139            temporary files)
1140    
1141            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
1142            resource leak in load_session
1143    
1144    2003-11-10  Bernhard Herzog  <[email protected]>
1145    
1146            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
1147            extensions are to be rendered.
1148            (_renderer_extensions): New. List with renderer for layers in
1149            extensions
1150            (add_renderer_extension): New. Add a renderer extension
1151            (init_renderer_extensions): New. Init the renderer extensions
1152            (BaseRenderer.render_map_incrementally): Search
1153            _renderer_extensions for how to draw unknown layer types
1154            (BaseRenderer.draw_raster_data): Add format parameter so that
1155            formats other than BMP can be drawn
1156            (BaseRenderer.draw_raster_layer): Pass an explicit format to
1157            draw_raster_data
1158    
1159            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
1160            strings of the format parameter of draw_raster_data method to wx
1161            constants
1162            (MapRenderer.draw_raster_data): Add the format parameter and use
1163            raster_format_map to map it to the right wxwindows constant for
1164            wxImageFromStream
1165    
1166            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
1167            the format parameter and record it
1168            (TestBaseRenderer.test_raster_no_projection): check the format
1169            paramter of the draw_raster_data method
1170            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
1171            extension facility
1172    
1173    2003-11-07  Bernhard Herzog  <[email protected]>
1174    
1175            Tweak the usage of the sqlite database to make common use cases
1176            more responsive. In most cases copying the data to the sqlite
1177            database takes so long that using sqlite doesn't have enough
1178            advantages.
1179    
1180            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
1181            comments about performance and query the min and max in separate
1182            statements because only that way will indexes be used.
1183            (TransientTableBase.UniqueValues): Add some comments about
1184            performance.
1185            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
1186            Do not copy the data to the transient DB but use the transient
1187            copy if it exists. See the new comments for the performance trade
1188            offs
1189    
1190            * test/test_transientdb.py
1191            (TestTransientTable.test_auto_transient_table): Make sure that the
1192            data is copied to the transient database at some point.
1193    
1194    2003-11-03  Bernhard Herzog  <[email protected]>
1195    
1196            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
1197            globals to locals so that it's a bit faster
1198    
1199    2003-11-03  Bernhard Herzog  <[email protected]>
1200    
1201            * Thuban/UI/baserenderer.py
1202            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
1203            method. ReadValue is faster than ReadRowAsDict since it only reads
1204            one cell especially now that the dbf file objects actually
1205            implement it.
1206    
1207            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
1208            read_attribute method of the dbf objects
1209    
1210    2003-11-03  Bernhard Herzog  <[email protected]>
1211    
1212            * Extensions/profiling/profiling.py (popup_dialog_box): New config
1213            variable to indicate whether the result should be shown in a
1214            dialog box
1215            (profile_screen_renderer, time_screen_renderer): Only show a
1216            dialog box if popup_dialog_box is true.
1217            (profile_screen_renderer): Flush stdout after the printing the
1218            first part of the "profiling..." message
1219    
1220            * Thuban/UI/baserenderer.py
1221            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
1222            brushes for the groups so that they're not created over and over
1223            again
1224    
1225            * Thuban/Model/classification.py (Classification.__getattr__)
1226            (Classification._compile_classification)
1227            (Classification._clear_compiled_classification): New. Methods to
1228            manage a 'compiled' representation of the classification groups
1229            which is created on demand
1230            (Classification.InsertGroup, Classification.RemoveGroup)
1231            (Classification.ReplaceGroup): reset the compiled representation
1232            (Classification.FindGroup): Use the compiled representation to
1233            find the matching group
1234            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
1235    
1236    2003-10-31  Bernhard Herzog  <[email protected]>
1237    
1238            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
1239            Send a CLASS_CHANGED message
1240            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
1241            not return the removed group since it wasn't used.
1242    
1243            * test/test_classification.py
1244            (TestClassification.test_set_default_group): New. Test the
1245            SetDefaultGroup method
1246            (TestClassification.test_insert_group): New. Test the InsertGroup
1247            method
1248            (TestClassification.test_remove_group): New. Test the RemoveGroup
1249            method
1250            (TestClassification.test_replace_group): New. Test the
1251            ReplaceGroup method
1252    
1253    2003-10-31  Bernhard Herzog  <[email protected]>
1254    
1255            * test/test_classification.py (TestClassification.setUp):
1256            Subscribe to the CLASS_CHANGED messages
1257            (TestClassification.tearDown): New. Destroy the classification
1258            properly
1259            (TestClassification.test_defaults): Add tests for the default line
1260            width and whether no messages were sent yet
1261            (TestClassification.test_set_default_properties): Add tests for
1262            messages and setting the default line width
1263            (TestClassification.test_add_singleton)
1264            (TestClassification.test_add_range)
1265            (TestClassification.test_multiple_groups): Add tests for messages
1266    
1267    2003-10-31  Bernhard Herzog  <[email protected]>
1268    
1269            Some more refactoring in preparation for new tests:
1270    
1271            * test/test_classification.py (TestClassification.setUp): New.
1272            Instantiate the classification here. Update the test methods
1273            accordingly.
1274            (TestClassification.test_multiple_groups): Make sure that the two
1275            singletons matching 1 are considered different.
1276    
1277    2003-10-31  Bernhard Herzog  <[email protected]>
1278    
1279            * test/test_classification.py (red, green, blue): New. These
1280            constants were used in several cases. Update the relevant methods.
1281            (TestClassification.test_defaults)
1282            (TestClassification.test_set_default_properties)
1283            (TestClassification.test_add_singleton)
1284            (TestClassification.test_add_range)
1285            (TestClassification.test_multiple_groups)
1286            (TestClassification.test_deepcopy): New. These were formerly all
1287            part of the single method test.
1288            (TestClassification.test_deepcopy): Removed.
1289            (TestClassIterator): Removed. The test case is now a method of
1290            TestClassification since it tests part of the public interface of
1291            Classification
1292            (TestClassification.test_iterator): New. Used to be
1293            TestClassIterator effectively
1294    
1295    2003-10-31  Jan-Oliver Wagner <[email protected]>
1296    
1297            GUIfied the functions of the profiling extension.
1298    
1299            * /Extensions/profiling/__init__.py: New: Init to make this
1300            directory a package.
1301    
1302            * Extensions/profiling/profiling.py: Moved menu entries to
1303            the Extensions menu. Applied _() for strings.
1304            (profile_screen_renderer): Catch the detailed printout and present
1305            it in a dialog.
1306            (time_screen_renderer): Raise a dialog to present the result instead
1307            of printing it to stdout.
1308    
1309    2003-10-31  Bernhard Herzog  <[email protected]>
1310    
1311            * test/test_classification.py (TestClassGroupProperties)
1312            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
1313            (TestClassGroupSingleton, TestClassIterator, TestClassification):
1314            Split TestClassification into several classes, one for each class
1315            being tested. TestClassification itself now only tests
1316            Classification. This split makes changes to the tests a bit easier
1317    
1318    2003-10-31  Bernhard Herzog  <[email protected]>
1319    
1320            * Extensions/profiling/profiling.py: New. Extension to measure
1321            Thuban performance
1322    
1323    2003-10-31  Frank Koormann <[email protected]>
1324    
1325            Added two items to legend popup menu: Remove Layer and Show Layer Table
1326    
1327            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
1328            LegendPanel._OnShowTable): New event handlers, call the corresponding
1329            mainwindow methods.
1330            (LegendTree._OnRightClick): Added items to popup menu.
1331    
1332    2003-10-30  Bernhard Herzog  <[email protected]>
1333    
1334            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
1335            EVT_WINDOW_DESTROY
1336            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
1337            nothing but is convenient for the derived classes.
1338    
1339            * Thuban/UI/tableview.py
1340            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
1341            Unsubscribe the messages here not in OnClose because that might
1342            get called multiple times. Fixes RT #2196
1343            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
1344            anymore.
1345    
1346            * README: Update the minimum requirement for wxPython. Since we
1347            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
1348            the version in which that was introduced for all platforms
1349    
1350    2003-10-30  Frank Koormann <[email protected]>
1351    
1352            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
1353            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
1354            frame.
1355    
1356    2003-10-30  Jan-Oliver Wagner <[email protected]>
1357    
1358            Improved APR import extension, added further EPSG definitions
1359            and some cleanup regarding string class.
1360    
1361            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
1362            Added test for alias 'longlat'.
1363    
1364            * Resources/Projections/epsg-deprecated.proj: New. Contains
1365            deprecated EPSG definitions.
1366    
1367            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
1368            the variable names for objects.
1369    
1370            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
1371            Copied from importAPR and provided with documentation.
1372    
1373            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
1374            Moved to apr.py.
1375            (APR_View): Added object ref 'ITheme'.
1376    
1377            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
1378            split function by corresponding use of the string class method.
1379    
1380            * Thuban/Model/xmlwriter.py: Replaced string replace function by
1381            corresponding string method.
1382    
1383    2003-10-29  Bernhard Herzog  <[email protected]>
1384    
1385            * Thuban/UI/baserenderer.py
1386            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
1387            special case of a classification that only has the default group
1388    
1389    2003-10-27  Bernhard Herzog  <[email protected]>
1390    
1391            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
1392    
1393            * po/de.po: Update.
1394    
1395            * Thuban/UI/application.py
1396            (ThubanApplication.ShowExceptionDialog): Handle translation of the
1397            dialog message properly
1398    
1399    2003-10-27  Bernhard Herzog  <[email protected]>
1400    
1401            Rework how localization works so that we use wx's translation
1402            functions when running Thuban as a normal application but not when
1403            we don't need any UI, such as in the test suite. See the comment
1404            in Thuban/__init__.py for details
1405    
1406            * Thuban/__init__.py (_): Add one level of indirection to make the
1407            translation handling more flexible and to make it possible to use
1408            either wx's translation services or not.
1409            (gettext_identity, translation_function_installed)
1410            (install_translation_function): New function to help with this
1411    
1412            * Thuban/UI/__init__.py: Install the wx specific translation
1413            function if it's OK to do that
1414    
1415            * test/support.py (initthuban): Install a dummy translation
1416            function so that importing Thuban.UI doesn't install a wx specific
1417            one for which would need to import wxPython
1418    
1419    2003-10-27  Bernhard Herzog  <[email protected]>
1420    
1421            * HOWTO-Release: Source archives should be created first and the
1422            binary packages should be created from the source archives.
1423            There's an official debian package now so there's no need to test
1424            the rpm on debian anymore
1425    
1426    2003-10-27  Bernhard Herzog  <[email protected]>
1427    
1428            Several rendering changes:
1429    
1430             - Render the selection into a separate bitmap so that only that
1431               bitmap needs to be redrawn when the selection changes
1432    
1433             - Render incrementally showing previews and allowing interaction
1434               before rendering is complete
1435    
1436             - Update the renderer interface a bit. Most parameters of
1437               RenderMap are now parameters of the constructor
1438    
1439            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
1440            and the update region as parameters. Update the doc-string
1441            (BaseRenderer.render_map_incrementally): New. Generator function
1442            to renders the map incrementally
1443            (BaseRenderer.render_map): Remove the map argument (it's now in
1444            the constructor) and simply iterate over the
1445            render_map_incrementally generator to draw the map.
1446            (BaseRenderer.draw_shape_layer_incrementally)
1447            (BaseRenderer.draw_shape_layer): Renamed to
1448            draw_shape_layer_incrementally and changed into a generator that
1449            yields True every 500 shapes. Used by render_map_incrementally to
1450            render shape layers incrementally
1451    
1452            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
1453            map and region parameters which are now in the constructor
1454            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
1455            the inherited render_map_incrementally.
1456            (BaseRenderer.draw_shape_layer): Removed.
1457            (ScreenRenderer.draw_selection_incrementally): New. The selection
1458            drawing part of the removed draw_shape_layer as a generator
1459            (ScreenRenderer.layer_shapes): Update because of the region
1460            parameter change
1461            (ExportRenderer.__init__): New. Extend the inherited constructor
1462            with the destination region for the drawing
1463            (ExportRenderer.RenderMap): Removed the map and region parameters
1464            which are now in the constructor
1465    
1466            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
1467            bitmap suitable for a preview in a tool
1468            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
1469            bitmap
1470            (MapPrintout.draw_on_dc): Adapt to new renderer interface
1471            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
1472            exists
1473            (MapCanvas.OnIdle): Update the logic to deal with incremental
1474            rendering and the selection bitmap
1475            (MapCanvas._do_redraw): Handle the instantiation of the render
1476            iterator and the redraws during rendering
1477            (MapCanvas._render_iterator): New. Generator to incrementally
1478            redraw both bitmaps
1479            (MapCanvas.Export): Adapt to new renderer interface.
1480            (MapCanvas.full_redraw): Reset the selection bitmap and the
1481            renderer iterator too
1482            (MapCanvas.redraw_selection): New. Force a redraw of the selection
1483            bitmap
1484            (MapCanvas.shape_selected): Only redraw the selection bitmap
1485    
1486            * test/test_baserenderer.py
1487            (TestBaseRenderer.test_polygon_no_projection)
1488            (TestBaseRenderer.test_raster_no_projection)
1489            (TestBaseRenderer.test_point_map_projection)
1490            (TestBaseRenderer.test_point_layer_and_map_projection)
1491            (TestBaseRenderer.test_point_layer_projection)
1492            (TestBaseRenderer.test_point_with_classification): Adapt to new
1493            renderer interface
1494    
1495    2003-10-24  Bernhard Herzog  <[email protected]>
1496    
1497            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
1498            (point_in_polygon_shape, shape_centroid): Raise an exception if
1499            the shape can't be read. Previously invalid shape ids would lead
1500            to a segfault.
1501    
1502            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
1503            New. test whether an exception is raised for invalid shape ids
1504    
1505    2003-10-24  Jan-Oliver Wagner <[email protected]>
1506    
1507            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
1508            as alias for 'latlong'.
1509    
1510            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
1511            as alias for 'latlong'.
1512    
1513    2003-10-24  Jan-Oliver Wagner <[email protected]>
1514    
1515            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
1516            the projection even for the UnknownPanel.
1517            (UnknownProjPanel.__init__): Define the text and create the textctrl
1518            widget.
1519            (UnknownProjPanel._DoLayout): Replaced static text widget by the
1520            textctrl created in __init__.
1521            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
1522            including the parameters of the projection.
1523            
1524    2003-10-24  Jan-Oliver Wagner <[email protected]>
1525    
1526            * Resources/Projections/epsg.proj: New. This is a list of
1527            EPSG codes with parameters for proj. The list has been
1528            generated using devtools/create_epsg.py based on the
1529            file nad/epsg of the proj 4.4.7 package. Four projection
1530            definitions have been deleted as they are not accepted by proj:
1531            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
1532            and "HD72 / EOV".
1533    
1534    2003-10-22  Bernhard Herzog  <[email protected]>
1535    
1536            Some more tweaks to the projection dialog which should fix RT
1537            #1886.
1538    
1539            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
1540            the ProjFile's messages and call the base class methods correctly
1541            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
1542            flag on the newly selected item too. Otherwise some other item is
1543            focused and the first time the focus is moved with the keyboard
1544            the selection moves in unexpected ways.
1545    
1546            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
1547            focus on the OK button, only on the projection list. That way the
1548            list really has the focus initially
1549            (ProjFrame.OnClose): Call the projection list's Destroy method to
1550            make it unsubscribe all messages
1551    
1552    2003-10-21  Bernhard Herzog  <[email protected]>
1553    
1554            Rework the projection dialog to fix a few bugs, including RT 2166
1555            and most of 2168
1556    
1557            * Thuban/UI/projlist.py: New. The class ProjectionList is a
1558            special wxListCtrl to show a list of projections in a more MVC
1559            fashion
1560    
1561            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
1562            throughout the class. The main change is to use the ProjectionList
1563            class instead of a normal wxListBox. Also, add an explicit
1564            "Unknown" projection to the projection choice control.
1565            (ProjPanel.__init__): Add an "unknown" ellipsoid
1566            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
1567            instantiation of the panel's controls to make the tab-order more
1568            natural
1569    
1570    2003-10-21  Bernhard Herzog  <[email protected]>
1571    
1572            * test/test_load.py (TestSingleLayer.file_contents)
1573            (TestSingleLayer.test): Add non-ascii characters to the titles of
1574            session, map and layer. This is effectively a port of the
1575            TestUnicodeStrings test in test_load_0_8.py which for some reason
1576            was only added there.
1577    
1578            * test/test_load_0_9.py (TestSingleLayer.file_contents)
1579            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
1580            characters to the titles of session, map and layer,.
1581    
1582    2003-10-21  Bernhard Herzog  <[email protected]>
1583    
1584            Add EPSG projection handling to .thuban files
1585    
1586            * test/test_save.py (SaveSessionTest.dtd)
1587            (SaveSessionTest.testEmptySession)
1588            (SaveSessionTest.testLayerProjection)
1589            (SaveSessionTest.testRasterLayer)
1590            (SaveSessionTest.testClassifiedLayer)
1591            (SaveSessionTest.test_dbf_table)
1592            (SaveSessionTest.test_joined_table)
1593            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
1594            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
1595            use a and epsg projection to test saving them
1596    
1597            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
1598            namespace
1599            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1600            (TestLayerProjection.file_contents)
1601            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1602            (TestPostGISLayer.file_contents)
1603            (TestPostGISLayerPassword.file_contents)
1604            (TestLoadError.file_contents, TestLoadError.test): Update to use
1605            1.0-dev namespace
1606            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
1607            use 1.0-dev namespace and use an EPSG projection to test whether
1608            loading it works
1609    
1610            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
1611            as of Thuban 0.9. These are now tests to determine whether Thuban
1612            can still read files generated by Thuban 0.9
1613    
1614            * Thuban/Model/save.py (SessionSaver.write)
1615            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
1616            namespace
1617            (SessionSaver.write_projection): Write the projection's epsg
1618            attribute
1619    
1620            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
1621            thuban-1.0-dev.dtd namespace
1622            (SessionLoader.check_attrs): Allow a callable object as conversion
1623            too
1624            (SessionLoader.start_projection, SessionLoader.end_projection)
1625            (SessionLoader.start_parameter): Handle the epsg attribute and
1626            rename a few instance variables to lower case
1627    
1628            * Resources/XML/thuban-1.0.dtd: New. Only difference to
1629            thuban-0.9.dtd is the epsg attribute for projections.
1630    
1631    2003-10-21  Bernhard Herzog  <[email protected]>
1632    
1633            * test/runtests.py (main): Let the user specify which tests to run
1634            on the command line
1635    
1636            * test/support.py (ThubanTestResult.getDescription): Override to
1637            give a better short description. The description can be used as a
1638            parameter to run_tests to run that particular test in isolation.
1639    
1640    2003-10-21  Frank Koormann   <[email protected]>
1641    
1642            Popup menu for legend. Scheduled for the 1.2 release this was too
1643            simple to implement: The popup menu is bound to the legend tree, while
1644            the events are hanlded by its anchestor, the legend panel. This
1645            allows reuse of all the event handlers already implemented for the
1646            legend toolbar buttons.
1647    
1648            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
1649            to add handlers for the events issued by the popup menu.
1650            (LegendPanel._OnToggleVisibility): Handler for toggling layer
1651            visibility event
1652            (LegendPanel._OnProjection): Handler for layer projection event.
1653            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
1654            (LegendTree._OnRightClick): Event handler for right click, select item
1655            and pop up menu.
1656            (LegendTree.ToggleVisibility): Toggle layer visibility
1657            (LegendTree.LayerProjection): Raise layer projection dialog for
1658            current layer.
1659    
1660    2003-10-21  Bernhard Herzog  <[email protected]>
1661    
1662            * Resources/Projections/defaults.proj: Use correct DOCTYPE
1663            declaration. The top-level element is projectionlist not projfile
1664    
1665  2003-10-20  Bernhard Herzog  <[email protected]>  2003-10-20  Bernhard Herzog  <[email protected]>
1666    
1667          * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper          * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper

Legend:
Removed from v.1834  
changed lines
  Added in v.2156

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26