/[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 1760 by bh, Fri Sep 26 18:36:12 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]>
1666    
1667            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
1668            method to write a projfile and display a busy cursor and error
1669            dialogs.
1670            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
1671            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
1672            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
1673            busy cursor while loading the user and system prj files.
1674    
1675    2003-10-16  Bernhard Herzog  <[email protected]>
1676    
1677            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
1678            ProjFile objects
1679            (clear_proj_file_cache): New function to clear the cache. Mainly
1680            useful for use by the test suite
1681            (read_proj_file): Use the cache.
1682    
1683            * test/test_proj.py (TestProjFile): Clarify the doc-string
1684            (ProjFileReadTests): Update doc-string
1685            (ProjFileReadTests.test_get_system_proj_file): Check whether the
1686            system proj files is cached.
1687            (ProjFileLoadTestCase): New base class for the proj file tests
1688            derived from support.FileLoadTestCase to provide some common
1689            behavior.
1690            (TestLoadingProjFile)
1691            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
1692            (TestProjFileWithInvalidParameters.file_contents): Derive from
1693            ProjFileLoadTestCase
1694            (TestLoadingProjFile.test_caching): New. Test whether the cache
1695            works
1696    
1697    2003-10-16      Silke Reimer    <[email protected]>
1698    
1699            * debian/*: New directory with configuration files for building a thuban
1700              deb-package.
1701    
1702    2003-10-14  Bernhard Herzog  <[email protected]>
1703    
1704            * test/test_proj.py: Execute support.run_tests when run as
1705            __main__ so that missing unsubscribes are detected
1706            (TestProjFile.tearDown): Destroy the proj_file properly
1707    
1708    2003-10-14  Bernhard Herzog  <[email protected]>
1709    
1710            * Thuban/Model/messages.py (PROJECTION_ADDED)
1711            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
1712            the ProjFile objects
1713    
1714            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
1715            easily send messages when the projections change
1716            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
1717            when the change was successful
1718    
1719            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
1720            proj file messages
1721            (TestProjFile.test_add_remove)
1722            (TestProjFile.test_remove_non_existing)
1723            (TestProjFile.test_replace)
1724            (TestProjFile.test_replace_non_existing): Test whether the right
1725            messages are sent
1726    
1727    2003-10-14  Bernhard Herzog  <[email protected]>
1728    
1729            * test/test_proj.py (TestProjFile.test): Refactor into several
1730            tests
1731            (TestProjFile.test_add_remove)
1732            (TestProjFile.test_remove_non_existing)
1733            (TestProjFile.test_replace)
1734            (TestProjFile.test_replace_non_existing): Some of the new
1735            individual test cases
1736            (TestProjFileSimple): New class for the rest of the test cases
1737            that came out of the refactoring
1738            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
1739            derived classes don't have to
1740    
1741    2003-10-13  Bernhard Herzog  <[email protected]>
1742    
1743            Add an optional EPSG code to the projection objects and extend the
1744            .proj file format accordingly.
1745    
1746            * Resources/XML/projfile.dtd (element projection): Add epsg
1747            attribute
1748    
1749            * Thuban/Model/proj.py (Projection.__init__): New parameter and
1750            instance variable epsg. Update doc-string
1751            (Projection.EPSGCode, Projection.Label): New methods to provide
1752            access to EPSG code and a label for use in dialogs
1753    
1754            * Thuban/Model/resource.py (ProjFileReader.start_projection)
1755            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
1756            Handle the epsg code attribute when reading or writing proj files
1757    
1758            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
1759            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
1760            (ProjFrame.__FillAvailList): Use the projection's Label method to
1761            get the string for the list box
1762    
1763            * test/test_proj.py (TestProjection.test_label)
1764            (TestProjection.test_label_epsg)
1765            (TestProjection.test_epsgcode_for_non_epsg_projection)
1766            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
1767            for the label and EPSGCode methods
1768            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
1769            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
1770            objects in the test cases and put the expected contents into the
1771            test case methods too. Update doTestWrite accordingly
1772            (TestLoadingProjFile)
1773            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
1774            read tests from TestProjFile.
1775            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
1776            tests are now in the new classes.
1777            (sample_projfile, sample_projfile_data)
1778            (sample_projfile2, sample_projfile_data2): Removed. Not used
1779            anymore.
1780            (TestProjFile.test_read_unreadable_file): No need to reset the
1781            permissions at the end anymore since we use a unique filename
1782    
1783    2003-10-13  Bernhard Herzog  <[email protected]>
1784    
1785            * test/test_proj.py: Some more refactoring of the test cases
1786            (ProjFileTest): New base class for the proj file tests.
1787            (TestProjFile): Derive from ProjFileTest
1788            (TestProjFile.test_read_unreadable_file)
1789            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
1790            the new filename method to get a unique filename
1791            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
1792            (WriteProjFileTests): New class for proj file write tests.
1793            Contains the write test that were in TestProjFile originally.
1794    
1795    2003-10-13  Bernhard Herzog  <[email protected]>
1796    
1797            * test/test_proj.py (TestProjFile.testRead)
1798            (TestProjFile.test_read_non_existing_file)
1799            (TestProjFile.test_read_unreadable_file)
1800            (TestProjFile.test_read_empty_file): Split into several methods.
1801    
1802    2003-10-10  Bernhard Herzog  <[email protected]>
1803    
1804            * Thuban/UI/sizers.py: New file with custom sizers.
1805    
1806            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
1807            all projection type specific panels and put them into a
1808            NotebookLikeSizer. This way the dialog doesn't change its size
1809            when a different projection is selected
1810            (ProjFrame.__init__): Rename projection_panels
1811            projection_panel_defs and reuse projection_panels for a list of
1812            the instantiated panels.
1813            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
1814            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
1815            the panels
1816            (UnknownProjPanel._DoLayout): Place the newlines in the message
1817            differently to make the panel narrower.
1818            (TMPanel._DoLayout): Layout the parameters in one column.
1819    
1820    2003-10-10  Bernhard Herzog  <[email protected]>
1821    
1822            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
1823            that contains all the setup for the dialog's widgets, layout and
1824            event handling.
1825            (__): Call build_dialog to build the dialog.
1826            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
1827            Their functionality is now in build_dialog
1828            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
1829            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
1830            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
1831            different widget names and hierarchy introduced with build_dialog.
1832    
1833    2003-10-10  Bernhard Herzog  <[email protected]>
1834    
1835            * README: Fix typo.
1836    
1837    2003-10-09  Bernhard Herzog  <[email protected]>
1838    
1839            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
1840            projection is already in the list. This is *a lot* faster when
1841            loading files with hundreds of projections since it saves a linear
1842            search. OTOH this will allow adding the same projection to the
1843            user.proj file multiple times in the projection dialog but we'll
1844            deal with that later
1845    
1846    2003-10-09  Jan-Oliver Wagner <[email protected]>
1847    
1848            * devtools: New. Directory for developer tools that are not intended
1849            for the regular user.
1850    
1851            * devtools/create_epsg.py: New. Convert the epsg file of proj into
1852            a python .proj file.
1853    
1854    2003-10-09  Bernhard Herzog  <[email protected]>
1855    
1856            * test/test_proj.py
1857            (TestProjection.test_get_parameter_without_equals_sign): New. Test
1858            whether GetParameter handles parameters without "=" sign correctly
1859    
1860            * Thuban/Model/proj.py (Projection.GetParameter): Handle
1861            parameters that do not contain a "=". Update the doc-string
1862    
1863    2003-10-08  Bernhard Herzog  <[email protected]>
1864    
1865            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
1866            length limit on the projname text control
1867    
1868    2003-10-08  Bernhard Herzog  <[email protected]>
1869    
1870            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1871            (TestProjection.test_get_projection_units_normal): New. Tests for
1872            the Projection.GetProjectedUnits method
1873    
1874    2003-10-08  Jan-Oliver Wagner <[email protected]>
1875    
1876            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1877            Added missing 'val' parameter.
1878    
1879    2003-10-08  Bernhard Herzog  <[email protected]>
1880    
1881            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1882            projection type of the currently selected projection is not known,
1883            i.e. there's no panel for it, use the UnknownProjPanel
1884            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1885            the actual replacing of the proj panel into the new method
1886            _show_proj_panel.
1887            (UnknownProjPanel): Add doc-string.
1888            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1889            that the panel is not so wide.
1890    
1891    2003-10-08  Bernhard Herzog  <[email protected]>
1892    
1893            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1894            too. Update the doc-string
1895            (get_proj_files): Removed. It wasn't used anywhere
1896            (get_system_proj_files, get_system_proj_file): Rename to
1897            get_system_proj_file and return the ProjFile object and not a list
1898            of ProjFile objects. Update the callers.
1899            (get_user_proj_files, get_user_proj_file): Rename to
1900            get_user_proj_file return the ProjFile object and not a list of
1901            ProjFile objects. Update the callers.
1902            (ProjFileReader.__init__): New instance variable for the warnings.
1903            Rename the __pf ivar to projfile. Update the methods referring to
1904            __pf
1905            (ProjFileReader.end_projection): Catch any errors raised when
1906            instantiating the projection and record that as an error. The
1907            projection will not be in the final ProjFile object.
1908            (ProjFileReader.GetWarnings): New method to return the warnings.
1909    
1910            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1911            show the warnings from the projfile reader
1912            (ProjFrame._OnImport): Deal with any warnings returned by
1913            read_proj_file
1914            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1915            get_system_proj_file or get_user_proj_file.
1916    
1917            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1918            (TestProjFileWithInvalidParameters.file_contents): New test cases
1919            to test whether read_proj_file handles invalid projection
1920            parameters correctly
1921            (TestProjFile.test_get_system_proj_file): New. Simple test for
1922            resource.get_system_proj_file
1923    
1924    2003-10-07  Bernhard Herzog  <[email protected]>
1925    
1926            * test/test_derivedshapestore.py
1927            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1928            properly so that the temporary directories get deleted correctly
1929    
1930    2003-10-06  Bernhard Herzog  <[email protected]>
1931    
1932            Handle the title changes in a proper MVC way.
1933    
1934            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1935            canvas' TITLE_CHANGED messages
1936            (MainWindow.update_title): New. Update the main window's title
1937            (MainWindow.__SetTitle): Removed. Use update_title instead.
1938            (MainWindow.SetMap): Use update_title instead of __SetTitle
1939            (MainWindow.RenameMap): Do change the window title explicitly
1940            here. That's handled in a proper MVC way now.
1941            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1942            messages
1943    
1944            * Thuban/Lib/connector.py (Conduit): New class to help classes
1945            that forward messages
1946    
1947            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1948            (ViewPort): Derive from Conduit instead of Publisher
1949            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1950            when calling the inherited versions
1951            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1952            methods to subscribe and unsubscribe map messages
1953            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1954            handle the map subscriptions
1955            (ViewPort.Map, ViewPort.map_projection_changed)
1956            (ViewPort.layer_projection_changed): Add or update doc-strings
1957    
1958            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1959            typo
1960            (MyConduit): Helper class for the Conduit test.
1961            (TestConduit): Test cases for Conduit
1962    
1963            * test/test_connector.py: Use support.run_tests as main.
1964    
1965            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1966            the TITLE_CHANGED messages
1967            (ViewPortTest.test_forwarding_title_changed): New test to check
1968            whether the viewport forwards the map's TITLE_CHANGED messages
1969            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1970            after the port's because the latter may require a still functional
1971            map.
1972    
1973    2003-10-06  Bernhard Herzog  <[email protected]>
1974    
1975            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1976            doc-string
1977    
1978    2003-10-06  Bernhard Herzog  <[email protected]>
1979    
1980            * test/test_viewport.py (ViewPortTest.setUp)
1981            (SimpleViewPortTest.test_init_with_size): Move the test for the
1982            initial size as a constructor parameter from ViewPortTest.setUp
1983            method to a new separate test in SimpleViewPortTest.
1984    
1985    2003-10-06  Bernhard Herzog  <[email protected]>
1986    
1987            * test/test_viewport.py (MockView): New class derived from
1988            ViewPort with a mock implementation of GetTextExtent to be used in
1989            the test cases
1990            (ViewPortTest.setUp): Use MockView instead of ViewPort
1991    
1992            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1993            into what would be a "pure virtual function" in C++: always raise
1994            NotImplementedError. Mock implementations for test cases don't
1995            belong into the real code
1996    
1997    2003-10-02  Bernhard Herzog  <[email protected]>
1998    
1999            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
2000            close the dbf file we create so that it's contents have been
2001            written properly.
2002    
2003            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
2004            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
2005            Update to shapelib 1.2.10
2006    
2007    2003-10-01  Jan-Oliver Wagner <[email protected]>
2008    
2009            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
2010            it annoys lintian which warns about these files not being
2011            executable. The #! isn't necessary here since if you absolutely
2012            must execute them you can always say "python <filename>".
2013    
2014  2003-09-26  Bernhard Herzog  <[email protected]>  2003-09-26  Bernhard Herzog  <[email protected]>
2015    
2016          * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's          * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
# Line 1421  Line 3434 
3434    
3435          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
3436          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
3437          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
3438          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
3439    
3440          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26