/[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 1629 by jan, Fri Aug 22 12:54:04 2003 UTC revision 2472 by bh, Thu Dec 16 15:18:57 2004 UTC
# Line 1  Line 1 
1    2004-12-16  Bernhard Herzog  <[email protected]>
2    
3            Add support for PostGIS tables with LINESTRING geomentries.
4            Fixes RT#2299
5    
6            * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
7    
8            * test/postgissupport.py
9            (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
10            table to "roads-multi" because it now uses MULTILINESTRING
11            geometries and introduce a new "roads" table that uses LINESTRING
12            (coords_to_multilinestring): Make the doc string more precise
13            (coords_to_linestring): New.  Create a LINESTRING WKT
14            representatin
15            (wkt_converter): Add coords_to_linestring
16            (upload_shapefile): Rephrase the doc-string a bit.
17    
18            * test/test_postgis_db.py (TestPostGISShapestoreArc)
19            (LineStringTests)
20            (TestPostGISShapestoreLineString)
21            (TestPostGISShapestoreMultiLineString): Split
22            TestPostGISShapestoreArc into a base class LineStringTests and two
23            derived classes TestPostGISShapestoreLineString for LINESTRING
24            geometries and TestPostGISShapestoreMultiLineString for
25            MULTILINESTRING geometries.  Most test methods are in the base
26            class with the exception of tests that explicitly check the raw
27            format.
28    
29    2004-12-16  Bernhard Herzog  <[email protected]>
30    
31            Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
32    
33            * test/postgissupport.py (find_postgis_sql): Different postgis
34            versions put the postgis.sql file into slightly different places
35            so we have to look in both.  The updated doc string describes this
36            is more detail.
37    
38            * test/test_postgis_db.py
39            (TestPostGISSpecialCases.test_column_name_quoting): The return
40            value of UniqueValues is unsorted, so it has to be sorted for
41            comparison.
42    
43    2004-12-16  Bernhard Herzog  <[email protected]>
44    
45            Fix for RT#2237
46    
47            * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
48            panel to be shown is the UnknownProjPanel disable the OK and Try
49            buttons.  Otherwise enable them.
50            (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
51            the parameters.  In that case __GetProjection also returns None
52            now.
53    
54    2004-12-15  Bernhard Herzog  <[email protected]>
55    
56            * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
57            minimum number of classes to 2.  The calculate_quantiles needs at
58            least two and raises an exception otherwise.  
59            Fixes RT#2549
60    
61    2004-12-15  Bernhard Herzog  <[email protected]>
62    
63            * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
64            so that it returns a result for select statements.
65            (PostgreSQLServer.server_version): New.  Return the version of the
66            server software.
67            (PostgreSQLServer.require_authentication): The format of
68            pg_hba.conf has changed between PostgrSQL 7.2 and 7.3.  Check the
69            server version and generate the file in the correct format
70    
71    2004-12-15  Bernhard Herzog  <[email protected]>
72    
73            * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
74            in the doc string and rephrase it a little.
75    
76    2004-12-15  Frank Koormann <[email protected]>
77    
78            * test/test_load.py (TestAltPath.checkSession): New, extended checks if
79            session has been loaded successfully. The check is called by the relevant
80            tests after executing load_session().
81    
82    2004-12-13  Bernhard Herzog  <[email protected]>
83    
84            Make sure the region used to determine which shapes are visible
85            actually matches the region on the printed page.  If this isn't
86            done properly some shapes might not be printed.  
87            Fixes RT #2692
88    
89            * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
90            renderer has to be at the same position as the mapregion
91    
92            * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
93            has to be moved by (self.shiftx, self.shifty) too.
94    
95    2004-12-13  Bernhard Herzog  <[email protected]>
96    
97            * libraries/pyprojection/Projection.i: Work around a bug in the
98            generated python code which leads to exception in the __del__
99            method when the constructor fails.  See the comments in the code
100            for more details.
101    
102            * libraries/pyprojection/Projection.py: Updated from Projection.i
103            with SWIG.
104    
105    2004-12-13  Bernhard Herzog  <[email protected]>
106    
107            * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
108            (TestAltPath.test_02_path_error_fix_from_list)
109            (TestAltPath.test_05_path_error_fix_from_list_changed)
110            (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
111            is destroyed in tearDown, so there's no need to do it in a test
112            case.
113    
114            * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
115            debug print
116    
117    2004-12-13  Bernhard Herzog  <[email protected]>
118    
119            * Extensions/svgexport/test/test_svgmapwriter.py
120            (TestDrawSplines.setUp): Do not use super with the unittest
121            classes because in Python 2.2 they're still old-style classes.
122    
123    2004-12-13  Frank Koormann <[email protected]>
124    
125        Alternative Path feature: When loading a (moved) session where
126            shapefiles cannot be found, ask the user. Use the specified path
127            if further shapefiles are missing. However, ask the usr for confirmation
128            in such cases.
129    
130            * test/test_load.py (TestAltPath): New, tests for alternative path feature
131            in load_session()
132            (Shapefile_CallBack): Helper, implements controllable callback.
133    
134            * Thuban/UI/application.py (ThubanApplication.OnInit):
135            Added "alt_path" to self.path
136            (ThubanApplication.OpenSession): Added shapefile_callback as second
137            callback similar to db_connection_callback.
138            (ThubanApplication.run_alt_path_dialog): New, implementaion of
139            shapefile_callback. In addition to raising the dialog the control of
140            self.path('alt_path') is implemented here.
141    
142            * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
143            (SessionLoader.open_shapefile): Open shapefile, eventually with
144            alternative path. This wrapps the "theSession.OpenShapefile(filename)"
145            formerly used in start_fileshapesource()/start_layer().
146            (SessionLoader.start_fileshapesource): Call open_shapefile().
147            (SessionLoader.start_layer): Call open_shapefile().
148            (load_session): Added shapefile_callback.
149    
150            * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
151            feature (search / check).
152            
153            * Doc/manual/thuban-manual.xml: Added documentation of new feature.
154    
155    2004-12-11  Bernhard Reiter <[email protected]>
156    
157             svgexport 0.9.2: Point size supports for maps.
158    
159            * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
160            (def draw_point_shape): new parameter size defaults to 2 as before.
161            (draw_shape_layer_incrementally): Moved draw_func log line higher.
162            Added draw_func call with size when dealing with a point layer.
163    
164            * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
165            
166    2004-12-11  Bernhard Reiter <[email protected]>
167    
168            Made sure that newlines are inserted in the svg path d attributes
169            to raise the chance that the line length will be below 255 characters,
170            as recommended by REC SVG 1.1 in section 8.3.1.
171    
172            * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
173            Adding \n before L's and changed whitespace handling.
174    
175            * Extensions/svgexport/test/test_svgmapwriter.py:
176            Adapted tests to new whitespace handling of DrawPolygon.
177    
178    2004-12-11  Bernhard Reiter <[email protected]>
179    
180            * Doc/technotes/coding_guidelines.txt: easy typo fixed.
181    
182            * Extensions/svgexport/test/test_svgmapwriter.py:
183            Removed test_drawbezier in favour of new test_drawspline3 and
184            test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
185            All only to test DrawSpline.
186    
187            * Extensions/svgexport/svgmapwriter.py(DrawSpline):
188            New implementation now really using the strange algorithm of
189            xfig 3.1's approximated splines and its conversion to postscript
190            with one twist: SVG can do quadratic beziers, so skipped translation
191            to cubic beziers.
192            (TestWithDC): Typo in comment fixed.
193    
194    2004-12-09  Martin Schulze  <[email protected]>
195    
196            * Thuban/Model/classgen.py: Added missing character encoding
197    
198            * Extensions/wms/properties.py (OpenWMSProperties): removed
199    
200            * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
201            support for get_srs_discrepancies() since there are no
202            discrepancies anymore (was a thinko)
203    
204            * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
205            format priority now that more formats are supported globally by
206            the render engine.
207    
208    2004-12-08  Silke Reimer <[email protected]>
209            * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
210            because it is not available in all versions of ogr
211    
212    2004-12-08  Bernhard Reiter <[email protected]>
213            * Extensions/ogr/__init__.py: Added empty __init__.py to heal
214            global tests until a real one is commited.
215    
216    2004-12-07 Nina H�ffmeyer <[email protected]>
217    
218            * /Extensions/ogr/: Adding a new extension to read shapefiles with
219            ogr. It is planned to add other vector formats.
220    
221            * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
222    
223    2004-12-07  Jan-Oliver Wagner <[email protected]>
224    
225            * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
226            part of a (non-)fix to renable that the tests are always
227            executed.
228    
229    2004-12-07  Bernhard Reiter <[email protected]>
230    
231            * Extensions/svgexport/test/test_svgmapwriter.py:
232            Added test_drawbezier() to test DrawSpline().
233    
234            * Extensions/svgexport/svgmapwriter.py(DrawSpline):
235            Really implemented bezier drawing.
236    
237            * Extensions/svgexport/__init__.py: Bumped version of svgexport
238            to 0.9.1 because now the legend examples lines styles
239            will be drawing with beziers.
240    
241    2004-12-05  Martin Schulze  <[email protected]>
242    
243            * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
244            GIF as supported bitmap image formats (helpful for the WMS extension)
245    
246    2004-11-30  Martin Schulze  <[email protected]>
247    
248            * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
249            Improved the test for the internal compare method
250    
251    2004-11-27  Jan-Oliver Wagner <[email protected]>
252    
253            * Thuban/UI/about.py (About.__init__): Added
254            Norbert Solymosi for hungarian translation and Ole Rahn
255            as contrbutor. Moved Bernhard Reiter from Contributor
256            to Developer.
257    
258    2004-11-27  Bernhard Reiter <[email protected]>
259    
260            * Extensions/svgexport/test/test_svgmapwriter.py:
261            Removed Jan from author list as he did not change enough significant
262            lines yet.
263    
264            * Extensions/svgexport/__init__.py: Added Bernhard as author
265            of the Extension.
266    
267    2004-11-27  Jan-Oliver Wagner <[email protected]>
268    
269            * po/hu.po: New. Hungarian translation. Contributed
270            by Norbert Solymosi.
271    
272    2004-11-26  Bernhard Herzog  <[email protected]>
273    
274            * Extensions/svgexport/test/test_svgmapwriter.py
275            (Testobjectexport.test_transparent_polygon): Commented out some
276            debug prints
277    
278    2004-11-24  Jan-Oliver Wagner <[email protected]>
279    
280            Fix broken tests for svg extension and added svg legend
281            to Experimental menu.
282    
283            * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
284            the test run correctly even if the extension is a package.
285            Also removed the "import Thuban" which makes no sense.
286    
287            * Extensions/svgexport/__init__.py: Fix to have the extensions'
288            test module also be executed from the global test routine.
289            This is done by looking for the absense of the DISPLAY variable.
290    
291            * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
292            to Experimental menu since this module has yet not reached a stable
293            status (ie. 1.0).
294    
295    2004-11-22  Bernhard Reiter <[email protected]>
296    
297            * Extensions/svgexport/svgmapwriter.py:
298            Added verbose variable and some logging depending on it.
299            (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
300            because counting i is not necessary.
301            (class Pen, class Brush): Added simple __str__ methods.
302            (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
303            not exported to svg file) Note: holes still unhandled.
304    
305            * Extensions/svgexport/test/test_svgmapwriter.py:
306                    Made a baseclass TestWithDC for test needed a DC.
307                    Added tests for bug #2698 (transparent polygons are not
308                    exported to svg file):
309                    Testobjectexport.test_transparent_polygon()
310    
311            * Thuban/Model/base.py (UnsetModified):
312            Fixed some typos in docstring.
313    
314            * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
315            Added hints on the used algorithm for handling holes.
316    
317    2004-11-20  Jan-Oliver Wagner <[email protected]>
318    
319            Some face lifting for the examples.
320    
321            * Examples/__init__.py: Make this directory a package.
322    
323            * Examples/simple_extensions/__init__.py: Make this directory a package.
324    
325            * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
326            menu to Examples menu.
327    
328            * Examples/simple_extensions/simple_command.py: Some more comments,
329            minor changes.
330    
331            * Examples/simple_extensions/simple_tool.py: Minor changes.
332    
333    2004-11-20  Jan-Oliver Wagner <[email protected]>
334    
335            Changed way of extension registry for wms and added extension
336            registry for umn_mapserver extension.
337    
338            * Extensions/wms/__init__.py: Added registry entry and the importing
339            of the actual wms module. Included a test for the required PyOGCLib.
340    
341            * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
342    
343            * Extensions/umn_mapserver/__init__.py: Added registry entry and the
344            importing of the actual umn mapserver management modules.
345            Included a test for the required Python MapScript.
346    
347    2004-11-20  Jan-Oliver Wagner <[email protected]>
348    
349            Changed way of extension registry for importAPR, bboxdump
350            and added extension registry for svgexport.extension registry for
351            svgexport.
352    
353            * Extensions/importAPR/__init__.py: Added registry entry and the importing
354            of the actual importAPR module.
355    
356            * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
357            __init__.py).
358    
359            * Extensions/bboxdump/__init__.py: Added registry entry and the importing
360            ï¿½ï¿½ï¿½ï¿½of the actual bboxdump module.
361    
362            * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
363            ï¿½ï¿½ï¿½ï¿½__init__.py).
364    
365            * Extensions/svgexport/__init__.py: Added registry entry and the importing
366            of the svgsaver module.
367    
368            * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
369            to Experimental menu since this module has yet not reached a stable
370            status (ie. 1.0).
371    
372    2004-11-18  Jan-Oliver Wagner <[email protected]>
373    
374            Now the hit test considers the size of point symbols.
375    
376            * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
377            'size' defaulting to the previously fixed value 5.
378            Extended doc-string.
379            (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
380            for symbols.
381            Now the size of the largest point symbol is determined to find out
382            about whether the point has been hit.
383            This fixes the problem that only clicks inside a fixed distance of
384            5 where found.
385    
386    2004-11-17  Jan-Oliver Wagner <[email protected]>
387    
388            Another open issue fixed regarding sizeable symbols: correct rendering of
389            selected symbols.
390    
391            * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
392            Added consideration of the specific size of point symbols.
393            The property for each point symbol is retrieved and the size applied
394            for the rendering method.
395            Added doc-string.
396    
397    2004-11-16  Jan-Oliver Wagner <[email protected]>
398    
399            Changed way of Extension Registry for gns2shp and profiling.
400    
401            * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
402            __init__.py).
403    
404            * Extensions/gns2shp/__init__.py: Added registry entry and the importing
405            of the actual gns2shp module.
406    
407            * Extensions/profiling/profiling.py: Removed registry entry (moved to
408            __init__.py).
409    
410            * Extensions/profiling/__init__.py: Added registry entry and the importing
411            of the actual profiling module.
412    
413    2004-10-28  Bernhard Reiter <[email protected]>
414    
415            * Extensions/svgexport/: Minor improvements to doc strings.
416    
417    2004-10-07  Jan-Oliver Wagner <[email protected]>
418    
419            Further elements for sizable point objects now
420            making this feature usable though not yet complete.
421    
422            * Thuban/Model/save.py (SessionSaver.write_classification): Write
423            attribute 'size' for cldata when the shape layer is of point type.
424            This also now make the test_load.py tests happy.
425    
426            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
427            gradient.
428    
429            * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
430            ID_SELPROP_SPINCTRL_LINEWIDTH.
431            (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
432            (ID_SELPROP_SPINCTRL_SIZE): New Id.
433            (SelectPropertiesDialog.__init__): Added a second spin control
434            for the size in case the corresponding layer is of point type.
435            (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
436            (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
437            (SelectPropertiesDialog._OnSpinSize): New. Set size of property
438            and refresh preview.
439    
440    
441    
442    2004-10-04  Martin Schulze  <[email protected]>
443    
444            * Extensions/wms/test/test_parser.py
445            (TestWMSCapabilitiesParser.test_compareLists): Added missing
446            self-test for compareLists()
447            (TestWMSCapabilitiesParser.test_compareDicts): Added missing
448            self-test for compareDicts()
449            (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
450            to verify the test routine fails with non-equal arguments
451            (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
452            to verify the test routine fails with non-equal arguments
453    
454    2004-10-03  Jan-Oliver Wagner <[email protected]>
455    
456            First elements for sizeable point objects.
457    
458            * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
459    
460            * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
461    
462            * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
463            of a corresponding argument is given.
464            (TestSymbolSize): New. Test the size attribute of cldata.
465    
466            * Thuban/Model/classification.py: Removed some trailing whitespaces.
467            (ClassGroupProperties.__init__): Set default size.
468            (ClassGroupProperties.SetProperties): Set the size.
469            (ClassGroupProperties.GetSize): New. Return the size.
470            (ClassGroupProperties.SetSize): New. Set the size.
471            (ClassGroupProperties__eq__): Compare also size.
472            (ClassGroupProperties__repr__): Print also size.
473    
474            * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
475            the size attribute.
476    
477            * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
478            Also, now there is a return value that indicates whether the drawing
479            size exceeded the given rect extent and if so the new extent.
480            Finally, point objects are drawn depending on the size. If either
481            the width or height is exceeded, the new extent is returned.
482            (ClassRenderer.Draw): Now when calling the previewer drawing function,
483            evaluate the return value and, if not None, adapt the grid widget size
484            accordingly and redraw again.
485    
486            * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
487            If the draw function is for points, call it with the size as additional
488            parameter.
489            (BaseRenderer.draw_point_shape): Added additional, optional parameter for
490            the size. Compute the radius using the size.
491    
492            * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
493            that Thuban supports size, apply this correctly.
494    
495            * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
496    
497    2004-10-03  Jan-Oliver Wagner <[email protected]>
498    
499            * Doc/manual/thuban-manual-de.xml: Started translation of
500            Map chapter.
501    
502    2004-10-01  Martin Schulze  <[email protected]>
503    
504            * Extensions/wms/properties.py (wmsProperties.__init__): Extended
505            argument for general use through properties-dialog selector
506            
507            * Thuban/UI/classifier.py: Register properties dialog classes for
508            both provided layer classes/types.
509    
510            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
511            map can be retrieved through the parent which is passed to the
512            constructor anyway and doesn't require an argument of its own,
513            required for the unification of arguments for general use through
514            properties-dialog selector.
515            (MainWindow.OpenOrRaiseDialog): Move the logic for checking
516            whether a dialog is already opened (and raising it to the users
517            attention) and creating a new dialog into a function of its own
518            (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
519            method
520            (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
521            global registration of properties dialog classes (which are indeed
522            layer-specific).
523    
524            * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
525            for general use through properties-dialog selector, the map can be
526            retrieved through the parent and doesn't require an argument of
527            its own.
528    
529            * Extensions/wms/wms.py: Register the properties dialog class for
530            the provided WMS layer
531    
532    2004-09-28  Jan-Oliver Wagner <[email protected]>
533    
534            New feature: Registry for Extensions.
535    
536            * Thuban/UI/extensionregistry.py: This module defines a registry for
537            Extensions.
538    
539            * Thuban/UI/about.py (About.__init__): Added description
540            of the registered extensions with all of the information.
541    
542            * Thuban/Model/extension.py (Extension): Improved doc-string.
543    
544            * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
545            Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
546            Extensions/wms/wms.py: Added registration of the extension.
547    
548    2004-09-27  Bernhard Reiter <[email protected]>
549    
550            More fixes to svgexport to make used ids unique and
551            conforming to XML's Name production.
552    
553            * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
554            test_xml_id_constraints(), test_make_ide_nosetbaseid() and
555            test_make_id_nonintegersetid().  Switched SetID and SetBaseID.
556            Added Bernhard R. as author.
557            * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
558            concatenation char now (makes test_make_ide_nosetbaseid() valid).
559            Also transform second id part with "%d" and catch the TypeError
560            to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
561            Corrected typo inBernhard's author line.
562            (SetBaseID): Return the transformed base id. Transform characters
563            which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
564            import binascii. If to be set string starts with "xml" or so, add "t".
565            (draw_shape_layer_incrementally): use the returned value of SetBaseID
566            for used_baseids checks.
567    
568    2004-09-25  Bernhard Herzog  <[email protected]>
569    
570            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
571            Remove a debug print and some tab characters.
572    
573    2004-09-25  Bernhard Reiter <[email protected]>
574    
575            * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
576            (SetBaseID, SetID, make_id): Improved docstring comments to explain
577            the interaction of the three functions and the XML id contrains.
578    
579    
580    2004-09-23  Jan-Oliver Wagner <[email protected]>
581    
582            * Doc/ThubanModel.xmi: New. UML file for Thuban Model
583            Module.
584    
585            * Doc/README: Added info on ThubanModel.xmi.
586    
587    2004-09-23  Jan-Oliver Wagner <[email protected]>
588    
589            * Doc/README: New. Some info about how to generate technical
590            documentation from the source code.
591            This text was send to the Thuban developer mailing list on
592            September 21st 2004 by Bernhard Reiter.
593    
594    2004-09-21  Bernhard Reiter <[email protected]>
595    
596            Improved the svgexport to only use unique ids. Will issues
597            an error message dialoge when two layer names are the same.
598            ShapeIDs are now added with a dash within the svg ids.
599    
600            * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
601            * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
602            (TestSVGRenderer): New test class with test_make_in() and
603            test_check_for_layer_name_clash()
604            * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
605            and draw_shape_layer_incrementally() to not use a baseid twice,
606            satisfying test_check_for_layer_name_clash()
607            (VirtualDC.make_id): Use a dash between baseit and id, satisfies
608            test_make_in().
609            * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
610            and wxICON_HAND.
611            (write_to_svg): Put dc and rendering in a try statement and on
612            catching SVGmapWriterError notify the user and delete the target file.
613    
614    2004-09-20  Bernhard Reiter <[email protected]>
615    
616            * Model/base.by, Model/layer.py: Fixed typos in docstrings.
617    
618    2004-09-03  Jan Sch�ngel  <[email protected]>
619    
620            * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
621            small bug with the line color. Now the line color will now only set
622            if it is set in Thuban an not Transparent.
623            
624            * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
625            deleting the layers from mapfile. Now all layers will delete backwards
626            from the last.
627    
628    2004-08-20  Silke Reimer <[email protected]>
629    
630            * Thuban/Model/layer.py:
631            Fixes bug in projection handling: Otherwise very large region might not
632            have valid values in the layer's projection.
633    
634    2004-08-20  Silke Reimer <[email protected]>
635    
636            * Thuban/UI/about.py:
637            small changes to be consistent with coding style.
638              
639    2004-08-13  Martin Schulze  <[email protected]>
640    
641            * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
642            Adjusted a comment
643    
644    2004-08-11  Silke Reimer <[email protected]>
645    
646            * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
647                    too many and too enhanced imports of locale
648    
649    2004-08-10  Silke Reimer <[email protected]>
650    
651            * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
652                    function unicodeToLocale() to convert special characters to users
653                    locale encoding
654    
655    2004-08-10  Jan-Oliver Wagner <[email protected]>
656    
657            * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
658            lower case letter'
659    
660    2004-08-09  Jan Sch�ngel  <[email protected]>
661    
662            * ChangeLog: Rewrite the last ChangeLog entry to follow
663            the standard way.
664    
665            * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
666            the function where it is needed, because it don't works if it stands
667            at the beginning.
668            (MF_Layer.__init__): Removed the extra numclassed variable. Now
669            numclasses from the mapscript will be used.
670            (MF_Layer.get_index): New. Return the index of the layer in mapfile.
671            (MF_Layer.set_classes): New. A Classlist will be set to the layer.
672            (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
673            (MF_Layer.remove_allclasses): New. All class of the layer will remove.
674            (MF_Map.create_new_layer): New. A new Layer is created and associated
675            with the mapscript object.
676            (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
677            the mapscript.
678            (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
679            linked to the layer in thuban, else the layerobject linked to the
680            thubanlayer will be used.
681            AnnotationLayer will now store the filename of the shapefile.
682            (MF_Map.remove_layer): If a layer is removed the associated object
683            must be set new.
684            
685            * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
686            layers which are exists in thuban to the mapobj. All removed Layers
687            will be removed from the mapobj.
688            Added comments to all functions.
689            (thuban_to_map): No layer will be removed here.
690            
691            * Extensions/umn_mapserver/mf_handle.py
692            (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
693            Layersettings for the mapserver kann be edited.
694    
695            * Extensions/umn_mapserver/mf_import.py: Now all layers which are
696            imported, will be linked with the associated MF_Layer.
697            (import_mapfile): All layers, which are not selected, will be removed.
698            Disable the "import layer from mapfile" menu option.
699    
700            * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
701            Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
702            layer on permanently.
703    
704    2004-08-03  Jan Sch�ngel  <[email protected]>
705    
706            * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
707            New. This function removes all metadata
708            (MF_Layer.set_group): New. Set the group setting.
709            (MF_Layer.get_group): New. Get the group setting.
710            (MF_Map): Removed the extra numlayers variable, used the mapscript
711            parameter instead.
712            (MF_Map.get_numlayers): New. This get numlayers.
713            (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
714            (MF_Map.add_thubanlayer): Replaced the exception handling by a check
715            if the object is an instance. Also added the annotation layer here to
716            export, but only the layer is created in the mapfile.
717    
718            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
719            the check if a mapobj exist, because its not needed anymore. The
720            export function is only available if a mapobj exist.
721            Use the new function to remove all layers.
722            
723            * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
724            option and the metadata button. The layer dialog is temporary disabled.
725            (Metadata_CustomDataTable): Added some functions to show the grid
726            correct.
727    
728            * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
729            the number of layer from import_mapfile to this function.
730            (AnnotationLayer): New. This Class shows the Annotation layer in
731            thuban. The layer don't do anything. It's only to show the layer
732            and to save the layer order.
733            (add_annotationlayer): New. Import an annotation layer to thuban.
734            (select_layer2import): New. Import only layers to thuban and not
735            the other settings like projection or scalebar.
736            (create_new_mapfile): Moved the _has_umn_mapobj function and the
737            create_new_mapfile functions from mf_handle.py to mf_import.py.
738            
739            * Extensions/umn_mapserver/sample/iceland.map: Added the group
740            parameter to the roads and cultural layers. Also added a new
741            Annotation Layer for the cultural points.
742    
743            * Extensions/umn_mapserver/sample/iceland.html: Added the select
744            option for the annotation layer.
745    
746            * Extensions/umn_mapserver/sample/index.html: Added the start
747            parameter for the annotation layer.
748    
749    2004-08-01  Jan-Oliver Wagner <[email protected]>
750    
751            * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
752            translation completed.
753    
754            * Doc/manual/thuban-manual.xml (Chapter Session Management):
755            Fixed unprecise description for Save Session.
756    
757    2004-07-31  Jan-Oliver Wagner <[email protected]>
758    
759            Started translation of Users Manual into german.
760    
761            * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
762    
763            * Doc/manual/Makefile: Added build instructions for german
764            users manual.
765    
766            * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
767    
768    2004-07-28  Jan Sch�ngel  <[email protected]>
769    
770            * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
771            functions. Now all metadata will handle by the function and its not
772            needed to initialize it from outside. Therefor the associated mapobj
773            will be stored in the Metadata Object. So we can use the special
774            functions from the associated mapobj to get the Metadata.
775            Therefor all initialization code for the metadata is removed from the
776            other classes.
777            (MF_Layer): Added a function to get the metadata object.
778            (MF_Map): Added a function to set the mappath, the path where
779            the mapfile ist stored.
780    
781            * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
782            to set the extent in the mapfile. Now the code is set by the displayed
783            data in the Thuban-view.
784            (export_mapfile): The shapepath is now set empty, until relative
785            pathnames are supported.
786    
787            * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
788            metadata. Yet only mapfile metadata are supported. Layer and class
789            supported are not implemented.
790            Added a dialog to handle layer informations. The dialog only shows the
791            selected layer at the moment.
792    
793            * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
794            code for setting the extent in thuban. Now the extent is set to the
795            given extent from the mapfile.
796            Fixed a logical mistake. Now the extent is set when realy a layer is
797            loaded, and not if one is selected to load.
798    
799            * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
800            move the shown map in the browser.
801    
802            * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
803            line to the mapobj and added metadata to the political layer.
804    
805            * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
806            for Metadata.
807    
808    2004-07-26  Martin Schulze  <[email protected]>
809    
810            * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
811            ClassMapper
812    
813            * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
814            case for the new ClassMapper
815    
816    
817    2004-07-22  Bernhard Herzog  <[email protected]>
818    
819            * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New.  Return the
820            visible extent of the map in projected coordinates
821    
822            * test/test_viewport.py (SimpleViewPortTest.test_default_size)
823            (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
824            tests.
825            (SimpleViewPortTest.test_visible_extent): New. The real test for
826            VisibleExtent()
827    
828    2004-07-22  Bernhard Herzog  <[email protected]>
829    
830            * test/test_viewport.py: Use support.run_tests as the main
831            function when running asa script.
832    
833    2004-07-22  Jan Sch�ngel <[email protected]>
834    
835            * Extensions/umn_mapserver/mf_export.py: Added "import os"
836            Removed the old "import Thuban.UI.mainwindow" code.
837            (tbextent_to_map): Removed the extra function and at the code direct
838            to "thuban_to_map" function.
839            (write_creatorcomment): Added. Now a short comment is added to the
840            beginning of an generated mapfile.
841            (export_mapfile): Now the Path and filename are saved in to variables,
842            and not together in one variable. This is needed for the new
843            write_creatorcomment function.
844                    
845            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
846            import module "re". Also added Range and the ClassGroupRange import
847            from Thuban. Both are needed for the new range expression import.
848            (create_rangeexpression): Added. Creates a Range Expression in Thuban
849            style from a given mapfile expression.
850            (added_rasterlayer): Make some small code changes. The shapepath is
851            now stored in an extra variable and the clazz_name is set empty if no
852            class name set in the mapfile.
853            Changed the Error message for Range Expressions, becaus the new
854            function create a error string which will be shown in the dialog.
855    
856            * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
857            range expression import.
858    
859    2004-07-21  Jan-Oliver Wagner <[email protected]>
860    
861            * Extensions/umn_mapserver/README: Added hint that
862            installation as root can be avoided. Removed all tabs.
863    
864    2004-07-16  Bernhard Herzog  <[email protected]>
865    
866            * test/test_viewport.py
867            (ViewPortTest.test_changing_map_projection): Check that changing
868            the projection of an empty map shown in a viewport doesn't lead to
869            exceptions in the viewport's handler for the
870            MAP_PROJECTION_CHANGED messages
871    
872            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
873            try to keep the same region visible when the map actually contains
874            something
875    
876    2004-07-15  Jan Sch�ngel <[email protected]>
877    
878            * Extensions/umn_mapserver/mapfile.py: Added a function to get the
879            mappath directly from the mapobj. Is needed because of the changes
880            in mf_import.py.
881            (MF_Layer.add_thubanclass): Added a new comment.
882            (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
883            mapobj is empty there is no extent get from thuban an so no one can
884            set to th mapobj.
885            
886            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
887            the discription.
888            Split the funktion in to three smaller ones. The new functions are
889            add_rasterlayer, add_polygonlayer and select_layer2import.
890            Removed the mapfilepath and filepath initialisation, because its know
891            include in the new functions.
892            Now nothing will be imported if cancel is pressed in the
893            layer choice dialog.
894    
895    2004-07-14  Jan Sch�ngel <[email protected]>
896    
897            * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
898            import.
899            (MF_Symbolset): Removed the extra variable for numsymbols.
900            (MF_Class.__init__): Added a comment to the exception clause.
901            Removed the extent init, because it was not needed anymore.
902            (MF_Layer.add_thubanclass): Added the code to set the class name to
903            the expression value from thuban if no label is defined.
904            Added the code to export Range expressions from thuban to the mapfile.
905            (MF_Map.set_extent): Removed the exception and replace it by some if
906            code. If the size of a map is not defined the size will be set to 1,1.
907            This is necessary because if the extent is set, mapscript checks if
908            the size is greater than zero.
909            (MF_Web): Added the get and set function for the template.
910    
911            * Extensions/umn_mapserver/mf_export.py: Added the function to check
912            if a mapobject exists and used it to set the status of the menu items.
913            If no mapfile exists the settings could not be edditied.
914            Define after which menuitem the exportitem will include.
915            
916            * Extensions/umn_mapserver/mf_handle.py: Removed the import
917            Thuban.UI.mainwindow clause, because it is not needed.
918            Added the command Refresh() to all "OnChangeColor()" functions,
919            because the color preview window was not updated on a color change.
920            Added the function to check if a mapobject exists and used it to set the
921            status of the menu items. If no mapobject exists the settings could not
922            be edditied.
923            (Map_Dialog): Moved the imagetype selector from the
924            Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
925            (Web_Dialog): Removed the name label and added the template textbox.
926    
927            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
928            the exception handling on loading the layers by an if statement. It
929            is not necessary to us the exception there.
930            The Filepath creation now use os.path.join to build the path.
931    
932            * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
933            definition from global to the setUp function. Now the testMap will
934            initialize new on each test.
935    
936            * Extensions/umn_mapserver/sample/iceland.map: Include three new
937            classes in the Line Layer, to test logical Expressions.
938            Set the status of the class "Point9" in the Point Layer to off
939            
940    2004-07-13  Bernhard Herzog  <[email protected]>
941    
942            * Thuban/UI/baserenderer.py
943            (BaseRenderer.render_map_incrementally): Fix a logic bug in the
944            optimization that tries not to draw layers under a raster layer.
945            The bug was harmless.  All it effectively did was to produce The a
946            strange messages about not being able to draw Layer instances for
947            all vector layers below a raster layer which would be invisible
948            anyway because the raster layer currently always covers the entire
949            window
950    
951    2004-07-08  Jan Sch�ngel <[email protected]>
952    
953            * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
954            a list of supported outputformats. This formats are not alle supported
955            because there is no possibility to get the outputformat without the
956            name known. Make some formal changes to the code.
957            (MF_Map.set_name()): Fixed a bug if the name is None.
958    
959            * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
960            statement, because its not needed anymore. The Outputformat is now
961            given as string from the object. Make some formal changes to the code.
962    
963            * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
964            most of the new setting which were added during the last changes.
965            Removed the MF_Size Test.
966            
967            * Extensions/umn_mapserver/test/test.map: Added a new class to the
968            cultural Layer to test expressions and the the status of that layer
969            from on to default.
970            Changed the data path the the correct Thuban Data
971            Added the Outputformat Object and Symbol Object
972            
973    2004-07-07  Jan Sch�ngel <[email protected]>
974    
975            * Extensions/umn_mapserver/mapfile.py: Added some new
976            settings to edit (outputformat, label, imagetype)
977    
978            * Extensions/umn_mapserver/mf_handle.py: Added some setting to
979            the Label Dialog and add the OutputDialog.
980            Make some changes to the code order.
981    
982    2004-07-06  Jan Sch�ngel <[email protected]>
983    
984            * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
985            and line Obj and add the scalebar_status_type, scalebar_style_type and
986            scalebar_position_type.
987            Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
988            are only used to create a Symbol like the circle in Thuban.
989            Added the scalebarObject (MF_Scalebar)
990            (MF_Class): Added set_status and get_status.
991            (MF_Layer.add_thubanclass): Added code to set the class status
992            (MF_Map): Added code to handle the symbols and scalebar
993            (MF_Label): Added the set_partials and get_partials functions
994            
995            * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
996            from mapfile. Added a function to create a circle object like the one
997            from thuban if no one exists.
998            
999            * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
1000            press ok in the assosiated dialog and not at the end of the
1001            colordialog.
1002            Added the Dialog for the Scalebar.
1003            (Label_Dialog): Added the offset option
1004    
1005            * Extensions/umn_mapserver/mf_import.py: Added code to import the
1006            status of the Classes.
1007            Fixed a bug with the projection. Now the to_meter parameter will be
1008            added to the Projection only if it doesn't exists.
1009    
1010    2004-07-01  Jan Sch�ngel <[email protected]>
1011    
1012            Added the functionality to handle the content thuban is not
1013            able to handle directly.
1014    
1015            * Extensions/umn_mapserver/mf_handle.py: New. This module extents
1016            Thuban with the possibility to edit the mapfile content.        
1017            
1018            * Extensions/umn_mapserver/mf_import.py: Added the possibility
1019            to import mapfiles without any layer selected. So it is possible
1020            to edit the other settings in a mapfile.
1021            (import_mapfile): Added code to use the editing functions.
1022            Added the possibility to import the projection to a layer if one
1023            is defined.
1024            Status settings (On,Off) will now set in thuban (visible, invisible).
1025            fixed a bug with with classnames. If no classname is set in mapfile
1026            the value in Thuban will set to the expression.
1027            
1028            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
1029            possibility to save a new mapfile or use the old one which is
1030            imported or new created.
1031            Added code to use the editing functions.
1032            Remove some not needed import statements
1033    
1034            * Extensions/umn_mapserver/mapfile.py: Added new types which are
1035            need for the editing functions.
1036            Added needed set-functions for the editing functions.
1037            Added the possibility to export rasterimages.
1038            Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
1039            MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
1040            moment.
1041            (MF_Class.set_thubanstyle): Now point layers will set to a default
1042            symbol to show a circle in mapserver and not only a 1px dot.
1043            (MF_Style.__init__): Fixed a bug with the color. Color was not set
1044            correct before.
1045            (MF_Size): Removed, because it is not needed.
1046            
1047            * Extensions/umn_mapserver/README: Added the hints to use the
1048            export and editing functions, too.
1049    
1050            * Extensions/umn_mapserver/sample/iceland.map: Added the
1051            new parameter "UNITS METERS".
1052            Change the political layer to status OFF.
1053    
1054            * Extensions/umn_mapserver/sample/README: Added some
1055            more details to setup the sample in the MapServer.
1056            
1057    2004-06-26  Bernhard Reiter <[email protected]>
1058    
1059            * Extensions/svgexport/test/test_svgmapwriter.py:
1060            Removed class VFile and used standard StringIO instead.
1061    
1062    2004-06-23  Jan Sch�ngel  <[email protected]>
1063    
1064            Add the export function to the umn_mapserver extension.
1065    
1066            * Extension/umn_mapserver/mf_export.py: New. This module extents
1067            Thuban with the possibility to export the Thuban content.
1068    
1069            * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
1070            with the export module. Especially added the possibility to
1071            add thuban objects directly to the map objects.
1072    
1073            * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
1074            because of the hint from Bernhard Herzog.
1075            Corrected the handling of absolute pathnames.
1076            Changed the Text of the Menu-Item, now the beginning is upper case.
1077    
1078            * Extensions/umn_mapserver/README: Added the --with-tiff statement.
1079    
1080    2004-06-16  Jan Sch�ngel  <[email protected]>
1081    
1082            Add a sample and make some changes.
1083    
1084            * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
1085            import from * to explicit used statements. Changed the
1086            Thuban.UI.mainwindow import phrase, too.
1087            (import_mapfile):Corrected a clerical mistake.
1088            Added wxCHANGE_DIR in OpenFile Dialog.
1089            Added a MultipleChoiceDialog, to select the layers to load from
1090            mapfile into thuban. Thereby the projection is only set if one layer
1091            is selected.
1092            Added the possibility to handle relative pathnames which uses
1093            up-level references.
1094            Removed some doubled code.
1095            Corrected an error with integer values used as label in thuban
1096            ClassGroup.
1097            
1098            * Extensions/umn_mapserver/sample: New.
1099    
1100            * Extensions/umn_mapserver/sample/README: New. Describes the
1101            usage of the sample files.
1102    
1103            * Extensions/umn_mapserver/sample/iceland.map: New. This is
1104            a suitable .map-file for the iceland data.
1105    
1106            * Extensions/umn_mapserver/sample/index.html: New. The template
1107            for the mapfile.  
1108    
1109            * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
1110            file for the Iceland Application on web.
1111    
1112            * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
1113            some details.
1114    
1115            * Extensions/umn_mapserver/test/test_mapserver
1116            (mapserver_import_Test_generalClasses.test_MF_Color):
1117            Corrected the thubancolor test.
1118    
1119    2004-06-15  Jan Sch�ngel  <[email protected]>
1120    
1121            * Extensions/umn_mapserver/README: New. Install instruction.
1122    
1123    2004-06-14  Bernhard Reiter <[email protected]>
1124    
1125            * libraries/thuban/cpl_mfile.h: Added copyright header.
1126    
1127            * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
1128            Free Software License so that it is most useful with gdalwarp
1129            and bmpdataset.
1130    
1131    2004-06-14  Bernhard Herzog  <[email protected]>
1132    
1133            * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
1134            import of wxPython.wx itself (as opposed to the contents of
1135            wxPython.wx).  For some reason wxPython.wx is available as
1136            wxPython.wx.wx in at least some 2.4 releases.  Fixes RT#2482
1137            wrt. wxPython 2.4.
1138    
1139    2004-06-10  Jan Sch�ngel  <[email protected]>
1140    
1141            Initial version of new extension "umn_mapserver".  This extension aims
1142            to manage configuration for the UMN MapServer application.  This
1143            inital version just imports the .map-files and displays all, Thuban is
1144            capable of.
1145    
1146            * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
1147    
1148            * Extensions/umn_mapserver/test/README: New. Describes how to run the
1149            tests.
1150    
1151            * Extensions/umn_mapserver/test/test.map: New. This is a test
1152            .map-file for automated tests of the umn_mapserver extension of
1153            Thuban.
1154    
1155            * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
1156            UMN Mapserver classes.
1157    
1158            * Extensions/umn_mapserver/__init__.py: New. Init to make this
1159            directory a package.
1160    
1161            * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
1162            '.map'-file objects.
1163    
1164            * Extensions/umn_mapserver/mf_import.py: New. This module extends
1165            Thuban with the possibility to handle UMN MapServer mapfiles.
1166    
1167    2004-06-03  Bernhard Herzog  <[email protected]>
1168    
1169            * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
1170            to a tuple before using it as arguments to the % operator.  This
1171            fixes the formatting issue filed in RT#2239 on 2004-01-13 and
1172            reported today on thuban-list by Jan Sch�ngel
1173    
1174            * test/test_layer.py (TestLayerModification.setUp): Save the
1175            filename as an instance variable so we can refer to it in tests
1176            (TestLayerModification.test_tree_info): Uncomment this method
1177            again and make it work.  This tests for the formatting issue
1178            filed in RT#2239 on 2004-01-13
1179    
1180    2004-05-28  Bernhard Herzog  <[email protected]>
1181    
1182            * Thuban/UI/baserenderer.py: Fix some typos.
1183    
1184    2004-05-18  Jan-Oliver Wagner <[email protected]>
1185    
1186            * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
1187            by increasing a field size.
1188    
1189    2004-05-17  Bernhard Herzog  <[email protected]>
1190    
1191            Update to newest shapelib and get rid of Thuban specific
1192            extensions, i.e. use the new DBFUpdateHeader instead of our
1193            DBFCommit kludge
1194    
1195            * libraries/shapelib/shpopen.c: Update to version from current
1196            shapelib CVS.
1197    
1198            * libraries/shapelib/shapefil.h: Update to version from current
1199            shapelib CVS.
1200    
1201            * libraries/shapelib/dbfopen.c: Update to version from current
1202            shapelib CVS.
1203            (DBFCommit): Effectively removed since shapelib itself has
1204            DBFUpdateHeader now which is better for what DBFCommit wanted to
1205            achieve.  
1206            We're now using an unmodified version of dbfopen.
1207    
1208            * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
1209            value '1' to the Lib.dbflibc extension.  This simply reflects the
1210            shapelib and pyshapelib updates
1211    
1212    2004-05-16  Jan-Oliver Wagner <[email protected]>
1213    
1214            Finished introduction of Menu.FindOrInsertMenu.
1215    
1216            * Extensions/drawshape/drawshape.py: Add the command
1217            to the experimental menu additionally to the toolbar.
1218    
1219            * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
1220            finding menu on its own.
1221    
1222            * Doc/manual/thuban-manual.xml: updated sample file
1223            to use FindOrInsertMenu().
1224    
1225            * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
1226            instead of finding menu on its own.
1227    
1228    2004-05-11  Jan-Oliver Wagner <[email protected]>
1229    
1230            * test/test_menu.py (MenuTest.test): Added testing
1231            of method Menu.FindOrInsertMenu.
1232    
1233    2004-05-10  Jan-Oliver Wagner <[email protected]>
1234    
1235            Introduce and use Menu.FindOrInsertMenu.
1236    
1237            * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
1238              given menu or, if not found, insert it.
1239    
1240            * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
1241            /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
1242            /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
1243            menu on its own.
1244    
1245    2004-05-06  Jan-Oliver Wagner <[email protected]>
1246    
1247            Introduce a abstract ColorDialog class and remove
1248            and outdated file.
1249    
1250            * Thuban/UI/proj4dialog.py: Removed. It is has been
1251            replaced by projdialog for quite a while and is not used
1252            anymore.
1253    
1254            * Thuban/UI/colordialog.py: New. Abstraction for color selection
1255            dialog(s).
1256    
1257            * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
1258            Now calls the abstract ColorDialog instead of wxColourDialog.
1259            This also removed the dependency to Color class conversion
1260            from this function.
1261    
1262    2004-05-04  Frank Koormann  <[email protected]>
1263    
1264            * Extensions/bboxdump/__init__.py: Fixed string left over from
1265            copying.
1266    
1267            * Extensions/bboxdump/bboxdump.py (bboxdump):
1268            Use layer.ShapeStore().AllShapes() to loop over shapes instead of
1269            xrange(layer.NumShapes()). Compile the bboxmessage from a list
1270            of formatted outputs (string.join) instead of appending to the
1271            message. Two progress bar dialogs to report progress on the sometimes
1272            lenghty processing.
1273    
1274    2004-04-22  Frank Koormann  <[email protected]>
1275    
1276            New Extension to dump bounding boxes of all shapes of the selected
1277            layer. An optional column can be specified to group the objects,
1278            in this case the bounding box is a union of the separate boxes.
1279            Dump can be displayed in a ScrolledMessageDialog or written to file.
1280            The Extension is simply a combination of available and well tested
1281            Thuban functionality.
1282    
1283            * Extensions/bboxdump/__init__.py: New: Init to make this
1284            directory a package.
1285    
1286            * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
1287            all shapes of the selected layer.
1288    
1289    2004-04-22  Jan-Oliver Wagner <[email protected]>
1290    
1291            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
1292            strings to be i18n now.
1293    
1294    2004-04-18  Jan-Oliver Wagner <[email protected]>
1295    
1296            Changing popup menu of legend from direct building
1297            to using the Menu construction as used for the mainwindow.
1298    
1299            * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
1300            layer_to_bottom, layer_visibility
1301            (MainWindow.LayerToTop): New. Put current layer to the top.
1302            (MainWindow.LayerToBottom): New. Put current layer to bottom.
1303            (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
1304            Replace 1,0 by True, False.
1305            (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
1306            current layer.
1307            (MainWindow.LayerShowTable): Removed raising of dialog.
1308            (_has_selected_layer_visible): New. Support function.
1309    
1310            * Thuban/UI/legend.py: ID_POP_xxx: removed.
1311            (LegendPanel.__init__): Removed EVT_MENU bindings.
1312            (LegendTree._OnRightClick): Replace direct creation of
1313            menu via wx Classes by applying the menu definition
1314            as of Menu class of menu.py.
1315            
1316    2004-04-16  Jan-Oliver Wagner <[email protected]>
1317    
1318            * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
1319        button string to stronger clearify that Thuban will be closed when hitting
1320            the button.
1321    
1322            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
1323            Now for layers without a ShapeStore a corresponding message is given
1324            to the user, that this layer has no table to show.
1325    
1326    2004-04-15  Martin Schulze  <[email protected]>
1327    
1328            * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
1329            recalculate the format for the internal render engine as well.
1330    
1331            * Extensions/wms/properties.py (wmsProperties): First start for a
1332            properties dialog.  It's functional for a first selection of
1333            layers, but still has some weired wxWidgets/GTK problems but
1334            beautification can be done later.
1335    
1336            * Extensions/wms/layer.py: Added more documentation
1337            (WMSLayer.getFormats): New: Return list of supported image formats
1338            by the WMS server
1339            (WMSLayer.getLayers): New: Return the list of layer names
1340            supported by the WMS server
1341            (WMSLayer.getLayerTitle): New: Return the title of the named layer
1342            (WMSLayer.getWMSFormat): New: Return the image format that is used
1343            for WMS GetMap requests
1344            (WMSLayer.setWMSFormat): New: Set the image format that is used
1345            for WMS GetMap requests
1346            (WMSLayer.__init__): Move away from using only one layer to using
1347            a list of layers (unsorted at the moment, though).
1348            (WMSLayer.getVisibleLayers): New: Return the list of names for all
1349            visible layers
1350            (WMSLayer.setVisibleLayers): New: Set the list of names for all
1351            visible layers
1352    
1353            * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
1354            order to establish a clean structure.
1355    
1356            * Extensions/wms/layer.py: Moved the WMS layer into a file on its
1357            own in order to establish a clean structure.
1358    
1359    2004-04-13  Martin Schulze  <[email protected]>
1360    
1361            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
1362            support for oldstyle (WMS 1.0 apparently) image format
1363            specification.
1364    
1365            * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
1366            supported graphic formats back to JPEG and BMP, PNG and others are
1367            too *cough* experimental...  Sorry, I meant to filter this out
1368            before I committed this part.  This should make the WMS extension
1369            run from CVS again.
1370            (wms_dialog): Reset an empty URL to None so that the subsequent
1371            program can depend on this, since the dialog will indeed return an
1372            empty URL, causing another declaration of love by Python.
1373    
1374            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
1375            Whenever a native BoundingBox request cannot be fulfilled, check
1376            whether the requested SRS is EPSG:3426, in which case return the
1377            LatLonBoundingBox values.
1378    
1379            * Extensions/wms/test/test_parser.py
1380            (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
1381            ignoring AUTO:* SRS.
1382            (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
1383            Added another test method to test whether the LatLonBoundingBox
1384            values will be returned if BoundingBox values are requested with
1385            SRS set to EPSG:3426.
1386    
1387            * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
1388            Added rudimentary support for non-EPSG SRS, i.e. ignore them for
1389            the moment by placing them into a variable which is currently
1390            unused.  Also test whether the EPSG SRS is numerical as it should
1391            be and add an error message if it is not.
1392    
1393            * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
1394            appear in the real world as well.  Since we cannot handle them yet
1395            (OGCLib can't either), we will ignore them for the moment.
1396    
1397            * Extensions/wms/parser.py: Use a variable for denoting the sample
1398            filename
1399            (WMSCapabilitiesParser.peekLayers): Added support for error
1400            messages during grok().  They will be aggregated in an array and
1401            may be displayed later.  We may have to add a classification
1402            "Warning" and "Error" to this.  That requires more experience,
1403            though, since not every error may be lethal.
1404    
1405            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
1406            ShowTable() dialog/frame when the user attempts to display it
1407            while it has been opened before already and not closed again.
1408    
1409    2004-04-11  Martin Schulze  <[email protected]>
1410    
1411            * Extensions/wms/infodialog.py: Adjusted the class documentation
1412    
1413            * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
1414            Switch to using Thuban{Begin,End}BusyCursor instead of the pure
1415            wxWidgets variants.
1416            (WMSLayer.__init__): The epsg_id variable is named top_srs now.
1417    
1418            * Extensions/wms/infodialog.py: Added an information dialog that
1419            will display various information about the WMS current resource,
1420            so that additional information such as the title, the abstract,
1421            fees and access constraints can be displayed for the user if they
1422            are documented in the WMS XML.
1423    
1424    2004-04-10  Martin Schulze  <[email protected]>
1425    
1426            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
1427            string handling.  It's "foo".lower() and not lower(foo) without
1428            lower imported from strings or something.
1429    
1430            * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
1431            from capabilities.py and parser.py.  Implement priority list for
1432            supported graphics formats, take care of wbmp != bmp.  PNG, TIFF
1433            and GIF are supported here, but not yet by main Thuban.  Hence,
1434            support for them may be removed later.  Special contribution to
1435            usability: get wxWidgets to change the cursor when we're waiting
1436            for data from the network so the user won't start to worry.  This
1437            causes a redrawing error/warning, though.
1438    
1439            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
1440            the DOM object.
1441    
1442    2004-04-01  Martin Schulze  <[email protected]>
1443    
1444            * Extensions/wms/capabilities.py: Adjusted documentation
1445            (WMSCapabilities.__init__): Improved documentation, fixed syntax
1446            (WMSCapabilities.saveCapabilities): Only catch IOError when
1447            handling files
1448            (WMSCapabilities.loadCapabilities): Only catch IOError when
1449            handling files
1450            __main__: corrected variable naming
1451            (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
1452            class a specialisation of WMSCapabilitiesParser as well.  Also
1453            execute grok() after loading or fetching capabilities, if that
1454            went well, so that subsequent calls can already access the data.
1455            (WMSCapabilities.getVersion): Export the used version of the
1456            GetCapabilities request, so we can use it for subsequent calls,
1457            i.e. for GetMap requests.
1458            (WMSCapabilities.fetchCapabilities): Added proper error handling
1459            when the GetCapabilities request failed, so that the surrounding
1460            program can act accordingly.
1461    
1462    2004-03-30  Martin Schulze  <[email protected]>
1463    
1464            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
1465            Adjusted the getLayerSRS method to return the list of SRSes
1466            extracted from <SRS> elements instead of <BoundingBox> elements.
1467            Added a bit of documentation as well.
1468            (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
1469            since it was only implemented due to a misunderstanding.
1470    
1471            * Extensions/wms/test/test_parser.py
1472            (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
1473            reflect the corrected interpretation of the standard: i.e. a layer
1474            does not have to define a BoundingBox for all SRSes it supports.
1475            Hence the <SRS></SRS> specification is authoritative, not the list
1476            of BoundingBoxes.
1477            (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
1478            to ensure None is returned for a non-existing SRS.
1479            (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
1480            since it is not applicable anymore.  Listing more SRSes in <SRS>
1481            elements is valid according to the specs.
1482    
1483    2004-03-26  Bernhard Reiter <[email protected]>
1484    
1485            * README: Nicer formatting of text. Improved descriptions.
1486            Reflected wxWidgets name change.
1487            
1488            * Thuban/UI/about.py: Extended copyright to 2004 and added
1489            information about the thuban-devel mailinglist.
1490    
1491    2004-03-24  Martin Schulze  <[email protected]>
1492    
1493            * Extensions/wms/capabilities.py: Renamed the class to contain
1494            'WMS', also added a linebreak where required
1495    
1496            * Extensions/wms/parser.py: Finally added the XML parser for the
1497            GetCapabilities response.
1498    
1499            * Extensions/wms/test/sample.xml: Adjusted the sample file so that
1500            <SRS> elements match the <BoundingBox> elements, except for the
1501            layer 'beschriftung'.
1502    
1503            * Extensions/wms/test/test_parser.py: Encode non-ascii strings
1504            since Python uses unicode strings internally, otherwise
1505            comparisons will fail.  Removed tests for getLayerBBoxSRS() since
1506            the SRS will be calculated anyway and this method is obsoleted by
1507            getLayerSRS().  Denote SRS as strings and not as cardinal numbers.
1508            Move loading the sample file into the setUp method.  Added a test
1509            for finding the integrity problem in the sample response.
1510            Improved formatting.
1511    
1512            * Extensions/wms/domutils.py: Added convenience routines for
1513            handling of Document Object Model (DOM) nodes.
1514    
1515            * Extensions/wms/test/test_domutils.py: Added a test for the
1516            domutils module
1517    
1518    2004-03-19  Martin Schulze  <[email protected]>
1519    
1520            * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
1521            Moved path detection and adding into a module of its own,
1522            adjustpath, which exports thubandir as main Thuban directory.
1523    
1524            * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
1525            detection and adding into a module of its own, adjustpath, which
1526            exports thubandir as main Thuban directory.  Reorganised the
1527            module in order to support the SkipTest feature for Thuban test
1528            cases.
1529    
1530            * Extensions/wms/test/adjustpath.py: Moved path detection and
1531            adding into a module of its own.
1532    
1533    2004-03-18  Martin Schulze  <[email protected]>
1534    
1535            * Extensions/wms/test/test_parser.py: Added another test for
1536            checking whether the WMS XML parser (to be implemented) returns
1537            the information we expect.  This requires a sample WMS WML file
1538            (sample.xml) which has been extracted from the frida server and
1539            "improved" manually.
1540    
1541            * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
1542            main Thuban directory to the path in order to be able to import
1543            random modules.  Adjusted the PyOGCLib detection to reuse the
1544            information gathered.  Also added a note about the PYTHONPATH
1545            environment variable.
1546    
1547            * Extensions/wms/test/test_ogclib.py: The format specification is
1548            a mime-type, not a graphic format, hence image/jpeg wou ld be the
1549            proper format and not JPEG.  We'll also have to take care of the
1550            encoding of / as %2F.
1551    
1552    2004-03-16  Martin Schulze  <[email protected]>
1553    
1554            * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
1555            comprehensive test for the getMapURL method, built compare URLs
1556            according to the documentation in OGC 01-068r3
1557    
1558            * Extensions/wms/capabilities.py (WMSCapabilities): Added the
1559            class WMSCapabilities to manage capabilites, will incorporate
1560            parsing the capabilities response and provide details for other
1561            classes.
1562    
1563    2004-03-12  Bernhard Herzog  <[email protected]>
1564    
1565            Support views in addition to normal tables in the postgis
1566            shapestore
1567    
1568            * Thuban/Model/postgisdb.py
1569            (PostGISShapeStore._fetch_table_information): Add a fallback for
1570            the case where the table name is not in the geometry_columns
1571            table.  This is usually the case for views.  Also, set
1572            self.shapestore here.
1573            (PostGISShapeStore.ShapeType): No need to query the database all
1574            the time.  The shape type is now determined in
1575            _fetch_table_information
1576    
1577            * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
1578            (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
1579            New parameter to specify views.
1580            (PostGISDatabase.has_data): Also compare the views.  New views
1581            parameter
1582            (PostGISDatabase.initdb): Create the views.
1583            (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
1584            view
1585    
1586            * test/test_postgis_db.py
1587            (TestPostGISShapestorePointFromViews): New.  Test a
1588            PostGISShapeStore with a view
1589            (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
1590            the geometry_column explicitly to test whether that works
1591    
1592    2004-03-12  Bernhard Herzog  <[email protected]>
1593    
1594            Final step for explicit id/geometry columns: Loading and saving
1595    
1596            * Resources/XML/thuban-1.1.dtd: New.  Derived from thuban-1.0.dtd
1597            with the following changes:
1598            (dbshapesource): Two new attributes id_column and geometry_column
1599    
1600            * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
1601            (SessionSaver.write_session): Use the new namespace
1602            (SessionSaver.write_data_containers): Write the new dbshapesource
1603            parameters
1604    
1605            * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
1606            the new file format version
1607            (SessionLoader.start_dbshapesource): Handle the new db parameters
1608    
1609            * test/test_save.py: Update to the new dtd and namespace
1610            (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
1611            mock object to provide a working IDColumn method.
1612    
1613            * test/test_load_1_0.py: New.  Copy of the test_load.py before
1614            today's changes but with the round-trip tests removed.
1615    
1616            * test/test_load_0_9.py: Update doc-string.
1617    
1618            * test/test_load.py: Update all .thuban files to the new dtd and
1619            namespace.
1620            (TestPostGISLayer.file_contents): Add the new dbshapesource
1621            paramters
1622    
1623    2004-03-11  Bernhard Herzog  <[email protected]>
1624    
1625            Next step for explicit id/geometry columns: User interaction
1626    
1627            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
1628            the dialog is constructed. Add combo boxes to select id and
1629            geometry column.  Rename some instance variables.
1630            (ChooseDBTableDialog.GetTable): Return id and geometry column
1631            names
1632            (ChooseDBTableDialog.OnTableSelect): New. Event handler for
1633            selections in the table list
1634    
1635            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
1636            and geometry_column
1637    
1638            * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
1639            parameters for id_column and geometry column of PostGISShapeStore
1640            here as well.
1641    
1642            * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
1643            (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
1644            (PostGISConnection.GeometryTables): Use a better query to
1645            determine which relations in the database might be usable for
1646            shapestores.  Now supports views as well but is more PostgreSQL
1647            specific
1648            (PostGISConnection.table_columns): New. Somewhat experimental
1649            method to let the db dialogs provide lists of columns to users so
1650            that they can select id and geometry columns.
1651            (PostGISTable.__init__): The default value of the id_column
1652            parameter is now None it still means "gid" effectively, though.
1653            (PostGISTable.IDColumn): New introspection method to return a
1654            column object for the id column
1655            (PostGISShapeStore.GeometryColumn): New introspection method to
1656            return a column object for the geometry column
1657    
1658            * test/test_postgis_db.py
1659            (TestPostGISConnection.test_gis_tables_non_empty):
1660            Removed. Subsumed by the new:
1661            (TestPostGISConnection.test_gis_tables_with_views_and_tables):
1662            New. Tes the GeometryTables and table_columns methods with actual
1663            tables and views.
1664            (PointTests.test_id_column, PointTests.test_geometry_column):
1665            New. tests for the new methods.
1666            (TestPostGISShapestorePoint.setUp)
1667            (TestPostGISShapestorePointSRID.setUp)
1668            (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
1669            instance variables needed by the new tests
1670    
1671    2004-03-11  Bernhard Herzog  <[email protected]>
1672    
1673            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
1674            numbers given to ReadValue are ordinals.
1675    
1676    2004-03-11  Bernhard Herzog  <[email protected]>
1677    
1678            Elimiate the requirement for PostGIS tables to have a column
1679            called "gid".
1680    
1681            * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
1682            id_column to specify which column to use to identify rows.  Also
1683            new instance variables id_column and quoted_id_column
1684            (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
1685            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
1686            (PostGISTable.SimpleQuery): Use the id column name provided to the
1687            constructor instead of "gid"
1688            (PostGISShapeStore.__init__): New parameter id_column analogously
1689            to PostGISTable.__init__.  This parameter is simply passed through
1690            to the base class constructor
1691            (PostGISShapeStore._create_col_from_description): Fix typo in
1692            doc-string
1693            (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
1694            (PostGISShapeStore.ShapesInRegion): Use the id column name
1695            provided to the constructor instead of "gid"
1696    
1697            * test/postgissupport.py
1698            (PostgreSQLServer.get_default_static_data_db): New static table
1699            landmarks_point_id with an id column != "gid.  Update the comments
1700            a bit.
1701            (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
1702            doc-
1703            (upload_shapefile): New parameter gid_column to use a name other
1704            than "gid" for the column to store the shape ids
1705    
1706            * test/test_postgis_db.py (TableTests): New.  Mixin-class
1707            containing all tests previously in TestPostGISTable.  The actual
1708            tests are the same but the code is a bit more configurable to
1709            allow for different id columns etc.
1710            (TestPostGISTable): Derive from TableTests now for the actual
1711            tests.
1712            (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
1713            except that it the landmarks_point_id table to test the id_column
1714            parameter
1715            (PointTests): Extend the doc-string
1716            (TestPostGISShapestorePointExplicitGIDColumn)
1717            (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
1718            from PointTests to test the explicit id_column parameter.  One
1719            tests with the name of the column holding the shape ids, the other
1720            uses PostgreSQL's OID column.  For the latter a number of methods
1721            have to be overwritten to make them independent of the actual id
1722            values.
1723    
1724    2004-03-08  Silke Reimer  <[email protected]>
1725    
1726            Update debian directory:
1727    
1728            * debian/changelog: Added new version.
1729            * deiban/rules: Updated management of patches (with cbds)
1730            * debian/control: Added cbds to dependencies
1731            * debian/patches/*: New. Adds better support for patches of thuban in
1732                            debian
1733            * debian/menu: Syntax of menu changed slightly
1734            * debian/setup.py.patch: removed because it has been moved to
1735                            debian/patechs/setup.py.patch
1736            
1737    
1738    2004-02-26  Bernhard Herzog  <[email protected]>
1739    
1740            Create the Doc/technotes directory for text files with information
1741            for developers
1742    
1743            * Doc/technotes/README: New. README for the technotes
1744    
1745            * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
1746            Thuban
1747    
1748            * Doc/technotes/release_process.txt: New. Used to be
1749            HOWTO-Release.  Now slightly adapted to technote formatting style.
1750    
1751            * HOWTO-Release: Removed.  It's contents are now in
1752            Doc/technotes/release_process.txt
1753    
1754    2004-02-25  Bernhard Herzog  <[email protected]>
1755    
1756            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
1757            version of wxWindows the module was compiled with so we can check
1758            that against the wxPython version.
1759    
1760            * Thuban/version.py (thuban_branch, thuban_release): New variables
1761            controlling which and how Thuban versions are shown.  See the
1762            comments for details.
1763            (verify_versions): Also check that the wx version that wxproj is
1764            compiled against matches that of the wxPython we use at runtime
1765    
1766    2004-02-20  Bernhard Herzog  <[email protected]>
1767    
1768            * Extensions/wms/wms.py (epsg_code_to_projection): Use
1769            get_system_proj_file to read the epsg projections.  The old way
1770            depended on the current directory being the top Thuban directory.
1771    
1772    2004-02-20  Bernhard Herzog  <[email protected]>
1773    
1774            * Extensions/svgexport/test/test_svgmapwriter.py
1775            (TestVirtualDC.test_clippath): Remove a debug print
1776    
1777    2004-02-20  Bernhard Herzog  <[email protected]>
1778    
1779            * Extensions/svgexport/__init__.py: New.  Turn
1780            Extensions/svgexport into a package.
1781    
1782            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
1783            doc-string a bit.  The doc-string must come first, otherwise it's
1784            not a doc-string.  The __future__ import must be the first thing
1785            after the doc-string.  Use only double quotes in doc-strings.
1786            Single quotes trip up emacs syntax highlighting if the text
1787            contains apostrophes.
1788    
1789    2004-02-20  Bernhard Herzog  <[email protected]>
1790    
1791            * Extensions/svgexport/test/__init__.py,
1792            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
1793            suite for svgexport
1794    
1795            * test/runtests.py (find_test_modules): New. Function with the
1796            module finding code from main.
1797            (main): Use find_test_modules to figure out the default test
1798            modules and take modules from Extensions.svgexport.test too.
1799    
1800    2004-02-19  Bernhard Herzog  <[email protected]>
1801    
1802            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
1803            the mainwindow has a reference to the map of the initial session.
1804            This fixes a bug introduced with the fix for RT#2245
1805    
1806    2004-02-19  Bernhard Herzog  <[email protected]>
1807    
1808            * Extensions/svgexport/svgsaver.py,
1809            Extensions/svgexport/svgmapwriter.py,
1810            Extensions/svgexport/maplegend.py: Added again.  This time in the
1811            correct place.
1812    
1813    2004-02-17  Bernhard Herzog  <[email protected]>
1814    
1815            Fix for RT#2245
1816    
1817            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
1818            instance variables before trying to create any windows.  Creating
1819            windows can start an event loop if e.g. message boxes are popped
1820            up for some reason, and event handlers, especially EVT_UPDATE_UI
1821            may want to access things from the application.
1822            (ThubanApplication.maps_changed): The mainwindow may not have been
1823            created yet, so check whether it has been created before calling
1824            its methods
1825    
1826            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
1827            have a map
1828    
1829    2004-02-17  Bernhard Herzog  <[email protected]>
1830    
1831            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
1832            Extensions/svgmapwriter.py, Extensions/maplegend.py,
1833            extensions/svgexport/svgsaver.py,
1834            extensions/svgexport/svgmapwriter.py,
1835            extensions/svgexport/maplegend.py: Removed.  These files were in
1836            the wrong places or didn't work at all.
1837    
1838    2004-02-16  Bernhard Herzog  <[email protected]>
1839    
1840            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
1841            line
1842    
1843    2004-02-16  Bernhard Herzog  <[email protected]>
1844    
1845            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
1846    
1847    2004-02-15  Markus Rechtien  <[email protected]>
1848            
1849            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
1850            to write a session to a file in SVG format.
1851            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
1852            to write a SVG map of a session.
1853            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
1854            in SVG format for the current session.
1855    
1856    2004-02-13  Bernhard Herzog  <[email protected]>
1857    
1858            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
1859            can't be created, return immediately after displaying the error
1860            message.
1861    
1862    2004-02-11  Bernhard Herzog  <[email protected]>
1863    
1864            Handle postgis tables with more than one geometry column.
1865    
1866            * Thuban/Model/postgisdb.py
1867            (PostGISTable._fetch_table_information): Delegate the creation of
1868            column objects to a different method so that we can extend that in
1869            derived classes
1870            (PostGISTable._create_col_from_description): New. Column object
1871            creation part of _fetch_table_information
1872            (PostGISShapeStore._create_col_from_description): New. Extend
1873            inherited method to handle geometry columns
1874            (PostGISShapeStore.__init__): New parameter geometry_column to
1875            specify which geometry column to use.  Optional but mandatory for
1876            tables with more than one geometry column
1877            (PostGISShapeStore._fetch_table_information): Also use the name of
1878            the geometry column when looking for the srid
1879            (PostGISShapeStore.ShapeType): Also use the name of the geometry
1880            column when looking for the shape type
1881    
1882            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
1883            NonConnectionStore to changes in the PostGISShapeStore
1884    
1885            * test/test_postgis_db.py
1886            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
1887            PostGISShapeStore with tables having two geometry columns.
1888    
1889    2004-02-10  Bernhard Herzog  <[email protected]>
1890    
1891            Fix some postgis problems.  What remains to be done is real
1892            handling of SRIDs as they affect how reprojection is done
1893    
1894            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
1895            doc-string
1896            (PostGISShapeStore._fetch_table_information): New. Extend
1897            inherited method to retrieve srid
1898            (PostGISShapeStore.BoundingBox): Handle tables without data.
1899            extent yields NULL for those
1900            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
1901    
1902            * test/test_postgis_db.py
1903            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
1904            for the special case of a table without any data
1905            (TestPostGISShapestorePointSRID): New class with tests for a table
1906            that uses srids
1907            (PolygonTests): Fix a doc-string typo
1908    
1909            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
1910            reference_systems with a specification of spacial reference
1911            systems to create in the new db.
1912            (PostgreSQLServer.new_postgis_db)
1913            (PostgreSQLServer.get_static_data_db): New parameter
1914            reference_systems to be passed through ultimately to
1915            PostGISDatabase.  In new_postgis_db also check whether an existing
1916            db already has the right srids
1917            (PostgreSQLServer.get_default_static_data_db): Add srids and a
1918            table that uses srids
1919            (PostGISDatabase.initdb): Create the entries for the reference
1920            systems
1921            (PostGISDatabase.has_data): Add reference_systems parameter to
1922            check for those too
1923            (upload_shapefile): New parameter srid to create tables with a
1924            specific srid
1925    
1926    2004-02-06  Frank Koormann  <[email protected]>
1927    
1928            * po/pt_BR.po: Fixed charset
1929    
1930    2004-02-05  Frank Koormann  <[email protected]>
1931    
1932            * po/pt_BR.po: Fixed format string for error message, missing %s
1933            added (Thuban/UI/application.py:273)
1934    
1935    2004-02-03  Frank Koormann  <[email protected]>
1936            
1937            First version of Portuguese (Brazilian) translation
1938    
1939            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
1940            Brazilian Portuguese by Eduardo Patto Kanegae.
1941    
1942            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
1943            translators.
1944    
1945    
1946    2004-01-22  Frank Koormann  <[email protected]>
1947    
1948            * Doc/manual/thuban-manual.xml: Added section on installation of
1949            Thuban under Win32 systems. Fixed image path references in the postgis
1950            section. Some minor source formattings.
1951    
1952    2004-01-21  Frank Koormann  <[email protected]>
1953    
1954            Make Thuban remember path selections (at least for one application run).
1955    
1956            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
1957            attribute of application object. Path is a dictionary of
1958            strings, currently with the items "data" and "projection".  
1959            (Application.SetPath): New, stores path for the specified item.
1960            (Application.Path): New, return path for the specified item.
1961    
1962            * Thuban/UI/mainwindow.py
1963            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
1964            MainWindow.AddLayer, MainWindow.AddRasterLayer,
1965            MainWindow.TableOpen): Access "data" path information of the
1966            application.
1967            
1968            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
1969            Access "projection" path information of the application.
1970    
1971    2004-01-05  Bernhard Herzog  <[email protected]>
1972    
1973            * po/ru.po: Updated translations from Alex Shevlakov
1974    
1975    2004-01-05  Bernhard Herzog  <[email protected]>
1976    
1977            * po/Makefile, po/README: Move the description of how to generate
1978            the translation statistics to the README.
1979    
1980    2003-12-23  Bernhard Herzog  <[email protected]>
1981    
1982            * NEWS: Update for 1.0.0
1983    
1984            * po/it.po: Another update from Maurizio Napolitano
1985    
1986    2003-12-23  Bernhard Herzog  <[email protected]>
1987    
1988            * po/it.po: Updated translation from Maurizio Napolitano
1989    
1990    2003-12-23  Bernhard Herzog  <[email protected]>
1991    
1992            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
1993            for translation
1994    
1995            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
1996            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
1997            strings for translation
1998    
1999            * po/de.po: Update with the newly marked strings.
2000    
2001    2003-12-22  Bernhard Herzog  <[email protected]>
2002    
2003            * HOWTO-Release: Fix the places where version numbers have to be
2004            updated
2005    
2006    2003-12-22  Bernhard Herzog  <[email protected]>
2007    
2008            * setup.py (setup call): 1.0.0, yeah!
2009    
2010            * Thuban/version.py (longversion): 1.0.0, yeah!
2011    
2012            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
2013            1.0.0 namespace too
2014    
2015            * Thuban/Model/save.py (SessionSaver.write_session): Save with
2016            1.0.0 namespace
2017    
2018            * test/test_load.py (LoadSessionTest.dtd)
2019            (TestSingleLayer.file_contents)
2020            (TestNonAsciiColumnName.file_contents)
2021            (TestLayerVisibility.file_contents)
2022            (TestClassification.file_contents, TestLabels.file_contents)
2023            (TestLayerProjection.file_contents)
2024            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2025            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
2026            (TestPostGISLayerPassword.file_contents)
2027            (TestLoadError.file_contents, TestLoadError.test): Update for
2028            1.0.0 namespace
2029    
2030            * test/test_save.py (SaveSessionTest.dtd)
2031            (SaveSessionTest.testEmptySession)
2032            (SaveSessionTest.testSingleLayer)
2033            (SaveSessionTest.testLayerProjection)
2034            (SaveSessionTest.testRasterLayer)
2035            (SaveSessionTest.testClassifiedLayer)
2036            (SaveSessionTest.test_dbf_table)
2037            (SaveSessionTest.test_joined_table)
2038            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
2039    
2040    2003-12-22  Bernhard Herzog  <[email protected]>
2041    
2042            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
2043            alignment flags are byte strings not unicode and that they have
2044            valid values
2045    
2046            * test/test_load.py (TestLabelLayer): New. Test loading (and
2047            indirectly saving) of maps with labels.
2048    
2049    2003-12-22  Bernhard Herzog  <[email protected]>
2050    
2051            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
2052            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
2053            unsubscribe all subscribers.
2054            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
2055            self.grid since it may already have been destroyed.
2056            Fixes RT #2256
2057    
2058    2003-12-19  Bernhard Herzog  <[email protected]>
2059    
2060            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2061    
2062    2003-12-16  Bernhard Herzog  <[email protected]>
2063            
2064            * debian/bitmappath.patch, debian/setup.py.patch:
2065                    added to ensure compliance with FHS for debian
2066            * debian/rules, debian/changelog:
2067                added patches in rules to ensure compliance with FHS for debian
2068    
2069    2003-12-16  Bernhard Herzog  <[email protected]>
2070    
2071            * po/Makefile (mo): Make the output a bit nicer so that it prints
2072            statistics about the translations. Add a comment how produce even
2073            nicer statistics with sed.
2074    
2075    2003-12-09  Frank Koormann   <[email protected]>
2076    
2077            * Resources/Projections/defaults.proj:
2078            French projection sample with correct accents (UNICODE).
2079    
2080    2003-12-05  Bernhard Herzog  <[email protected]>
2081    
2082            * MANIFEST.in: Add the devtools directory
2083    
2084            * setup.py (setup call): Use license instead of licence. This
2085            silences a deprecation warning on Python 2.3
2086    
2087    2003-12-05  Frank Koormann   <[email protected]>
2088    
2089            Documentation synced with 1.0rc1
2090    
2091            * Doc/manual/thuban-manual.xml:
2092            Minor formatting changes and references to database layers .
2093            Introduction.Internationalization: New section on i18n.
2094            MapManagement.AddingandRemovingLayers: Added item on database layers.  
2095            MapManagement.TheLegend: Added section and screenshot on popup menu.
2096            ProjectionManagement: Updated screenshot and sentence on EPSG.
2097            Appendix.SupportedDataSources: Added PostGIS.
2098            Appendix.WorkingwithPostGIS: New section.
2099    
2100            * Doc/manual/images/6_projection.png: Updated screenshot including
2101            EPSG checkboxes.
2102    
2103            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
2104    
2105            * Doc/manual/images/app_postgis_add_layer.png,
2106            Doc/manual/images/app_postgis_db_add.png,
2107            Doc/manual/images/app_postgis_db_management.png:
2108            New screenshots focussing on database layers
2109    
2110    2003-12-05  Frank Koormann   <[email protected]>
2111    
2112            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
2113            write warning to stderr instead of rising a warning dialog
2114    
2115    2003-12-03  Bernhard Herzog  <[email protected]>
2116    
2117            Fix for RT #2243
2118    
2119            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
2120            New. Like has_selected_layer but for shape layers only
2121            (_has_selected_shape_layer): New. Like _has_selected_layer but for
2122            shape layers only
2123            (layer_show_table command, layer_jointable command): Use these
2124            commands should only be available for shape layers
2125    
2126    2003-12-03  Bernhard Herzog  <[email protected]>
2127    
2128            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
2129            publishers that are wx objects and may have been destroyed by wx
2130            already. Fixes RT #2242.
2131    
2132    2003-12-03  Bernhard Herzog  <[email protected]>
2133    
2134            * po/ru.po: Updates from Alex Shevlakov
2135    
2136    2003-12-03  Silke Reimer <silkeintevation.de>
2137    
2138            * debian/control, debian/changelog: Added gdal-support to
2139                    debian package, updated to new thuban version
2140    
2141    
2142    2003-12-03  Bernhard Herzog  <[email protected]>
2143    
2144            * Thuban/Lib/version.py: New. Module for version number
2145            manipulations. The version of make_tuple here also deals better
2146            with more unusual version number strings, such as e.g.
2147            "1.2+cvs20031111"
2148    
2149            * Thuban/version.py (make_tuple): Removed. It's now in
2150            Thuban.Lib.version. Use that implementation instead.
2151    
2152            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
2153    
2154    2003-12-02  Bernhard Herzog  <[email protected]>
2155    
2156            * MANIFEST.in: Add debian files
2157    
2158            * setup.py (setup call): Add packages for the Extensions so that
2159            they're installed too
2160            (data_files): Add READMEs and sample data from some Extensions
2161    
2162            * NEWS: Add note about the extensions in binary packages
2163    
2164    2003-12-02  Bernhard Herzog  <[email protected]>
2165    
2166            * Thuban/Model/save.py (SessionSaver.write_session): Save files
2167            with the thuban-1.0rc1
2168    
2169            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
2170            thuban-1.0rc1 namespace too
2171    
2172            * test/test_save.py (SaveSessionTest.dtd)
2173            (SaveSessionTest.testEmptySession)
2174            (SaveSessionTest.testSingleLayer)
2175            (SaveSessionTest.testLayerProjection)
2176            (SaveSessionTest.testRasterLayer)
2177            (SaveSessionTest.testClassifiedLayer)
2178            (SaveSessionTest.test_dbf_table)
2179            (SaveSessionTest.test_joined_table)
2180            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
2181            namespace
2182    
2183            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
2184            namespace
2185            (TestSingleLayer.file_contents)
2186            (TestNonAsciiColumnName.file_contents)
2187            (TestLayerVisibility.file_contents)
2188            (TestClassification.file_contents, TestLabels.file_contents)
2189            (TestLayerProjection.file_contents)
2190            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2191            (TestPostGISLayer.file_contents)
2192            (TestPostGISLayerPassword.file_contents)
2193            (TestLoadError.file_contents, TestLoadError.test): Update to
2194            thuban-1.0rc1 namespace
2195    
2196    2003-12-01  Bernhard Herzog  <[email protected]>
2197    
2198            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
2199            nt to better match Intevation's current w32 setup
2200    
2201            * HOWTO-Release: Add note about updating MANIFEST.in
2202    
2203            * MANIFEST.in: Add the Extensions
2204    
2205            * NEWS: Update for 1.0rc1
2206    
2207    2003-12-01  Bernhard Herzog  <[email protected]>
2208    
2209            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
2210            cards for the dialog so that shapefiles ending in all uppercase
2211            SHP are listed too
2212    
2213    2003-11-28  Bernhard Herzog  <[email protected]>
2214    
2215            * Thuban/version.py (longversion): Update to 1.0rc1
2216    
2217            * setup.py (setup call): Update version to 1.0rc1. Use the
2218            [email protected] email address as author email instead of my
2219            personal one.
2220    
2221    2003-11-28  Bernhard Herzog  <[email protected]>
2222    
2223            * po/de.po: Update german translation.
2224    
2225    2003-11-28  Bernhard Herzog  <[email protected]>
2226    
2227            Unify the filenames stored in .thuban files so that the .thuban
2228            files are more platform independend
2229    
2230            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
2231            that they can be used on both windows and unix
2232            (SessionSaver.prepare_filename): New. Handle all filename
2233            transformations for filenames stored in the thuban file
2234            (SessionSaver.write_data_containers, SessionSaver.write_layer):
2235            Use prepare_filename
2236    
2237            * test/test_save.py (SaveSessionTest.testSingleLayer)
2238            (SaveSessionTest.testLayerProjection)
2239            (SaveSessionTest.testRasterLayer)
2240            (SaveSessionTest.testClassifiedLayer)
2241            (SaveSessionTest.test_dbf_table)
2242            (SaveSessionTest.test_joined_table): Filenames are always stored
2243            with slashes on all currently supported platforms so adapt all
2244            tests to this
2245    
2246            * test/test_load.py (LoadSessionTest.filenames): With the new
2247            filename scheme the filenames in the tests should be
2248            understandable on all currently supported platforms so we turn
2249            this into an empty list because we don't have to normalize them
2250            anymore
2251    
2252    2003-11-28  Bernhard Herzog  <[email protected]>
2253    
2254            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2255            Add the ellipsoid to the projection since some Proj versions
2256            complain if it's missing.
2257    
2258    2003-11-27  Bernhard Herzog  <[email protected]>
2259    
2260            Corect some bounding box projection problems
2261    
2262            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
2263            version of ForwardBBox
2264            (Projection._transform_bbox): New. common implementation of
2265            ForwardBBox and InverseBBox
2266            (Projection.ForwardBBox): Use _transform_bbox.
2267    
2268            * test/test_proj.py (TestProjection.test): Add test for
2269            InverseBBox
2270    
2271            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
2272            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
2273            new InverseBBox method to determine the unprojected bounding box
2274            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
2275            bbox.
2276    
2277            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2278            Removed.
2279            (TestLayer.test_arc_layer_with_projection): New. This test is
2280            better able to test whether bounding boxes are projected correctly
2281            than test_point_layer_with_projection
2282    
2283            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
2284            InverseBBox to unproject bboxes
2285    
2286    2003-11-25  Bernhard Herzog  <[email protected]>
2287    
2288            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
2289            source code.
2290    
2291    2003-11-25  Bernhard Herzog  <[email protected]>
2292    
2293            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
2294            there for backwards compatibility and all code relying on that
2295            should have been updated by now.
2296    
2297    2003-11-25  Bernhard Herzog  <[email protected]>
2298    
2299            * test/test_load.py (TestClassification.test): Add the missing
2300            round trip test.
2301            (TestClassification.file_contents): Update to the newest file
2302            format
2303    
2304    2003-11-25  Bernhard Herzog  <[email protected]>
2305    
2306            Add very experimental (and possibly dangerous) extension to draw
2307            polygons:
2308    
2309            * Extensions/drawshape/README: New. Brief installation
2310            instructions
2311    
2312            * Extensions/drawshape/drawshape.py: New. Implementation of the
2313            drawshape extensions
2314    
2315            * Extensions/drawshape/patch.diff: Patch to apply before the
2316            extension can be used.
2317    
2318    2003-11-24  Bernhard Herzog  <[email protected]>
2319    
2320            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
2321            (ShapefileStore.__init__): Factor opening the shapefile into a
2322            separate method (the new _open_shapefile). This makes the code a
2323            bit more readable but the real reason is that it makes some evil
2324            hacks easier. :-)
2325    
2326    2003-11-24  Bernhard Herzog  <[email protected]>
2327    
2328            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
2329            converter is specified for an attribute assume it's a string
2330            containing only Latin1 characters. Update doc-string accordingly.
2331            This change should fix many places where unicode objects might
2332            accidentally enter Thuban.
2333    
2334            * test/test_load.py (TestNonAsciiColumnName): New test to check
2335            what happens with column names in DBF files that contain non-ascii
2336            characters
2337    
2338    2003-11-21  Bernhard Herzog  <[email protected]>
2339    
2340            Enable the experimental attribute editing again and introduce a
2341            command line switch to actually activate it
2342    
2343            * Thuban/UI/main.py (options): New. Container for options set on
2344            the commmand line
2345            (main): Add the --enable-attribute-editing flag.
2346    
2347            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
2348            editing is enabled use the grid ctrl which allows editing of the
2349            values
2350    
2351            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
2352            New. Just delegate this to the underlying table.
2353    
2354    2003-11-20  Bernhard Herzog  <[email protected]>
2355    
2356            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
2357            Skip this test if run under non-posix systems since it only works
2358            there
2359    
2360    2003-11-19  Bernhard Herzog  <[email protected]>
2361    
2362            * Thuban/Model/resource.py: Rework the way gdal support is
2363            determined so that we can give a reason in the about why gdal is
2364            not supported.
2365            (gdal_support_status): New. Variable holding a string with the
2366            reason for no gdal support
2367    
2368            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
2369            not supported to the message
2370    
2371    2003-11-19  Bernhard Herzog  <[email protected]>
2372    
2373            Remove the old table interface and its test cases
2374    
2375            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
2376            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
2377            anymore
2378    
2379            * Thuban/Model/transientdb.py (TransientTableBase)
2380            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
2381            anymore
2382    
2383            * test/test_table.py: Removed since the old interface it tests is
2384            gone.
2385    
2386            * test/runtests.py (main): The old table interface is gone and
2387            with it the deprecation warnings so remove the code that turns
2388            these warnings into errors
2389    
2390    2003-11-19  Bernhard Herzog  <[email protected]>
2391    
2392            * test/test_table.py: Revert to revision 1.5 again. Changing the
2393            tests to use the new table interface is completely wrong since the
2394            whole purpose of the tests in this module is to test the old
2395            interface.
2396    
2397    2003-11-18  Bernhard Herzog  <[email protected]>
2398    
2399            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
2400            New. Test whether the connection matches a set of connection
2401            parameters
2402    
2403            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
2404            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
2405            for existing connections with the same parameters and break out of
2406            the loop correctly.
2407    
2408            * test/test_postgis_db.py (TestBriefDescription)
2409            (TestPostGISSimple.test_brief_description): Rename
2410            TestBriefDescription to TestPostGISSimple and the test method to
2411            test_brief_description so that we can add more test methods.
2412            (TestPostGISSimple.test_matches_parameters): New. Test the new
2413            MatchesParameters method
2414    
2415    2003-11-18  Bernhard Herzog  <[email protected]>
2416    
2417            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
2418            _was_destroyed, to indicate whether an publisher instance has
2419            already been destroyed.
2420            (Publisher.Unsubscribe): Only disconnect if the publisher has not
2421            been destroyed yet.
2422            (Publisher.Destroy): Set the _was_destroyed flag to true.
2423    
2424            * test/test_connector.py
2425            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
2426            calling Unsubscribe after Destroy doesn't raise an exception
2427    
2428    2003-11-14  Bernhard Herzog  <[email protected]>
2429    
2430            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
2431            typo in doc-string
2432    
2433    2003-11-13  Bernhard Herzog  <[email protected]>
2434    
2435            Quote table and column names properly for postgis.
2436    
2437            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
2438            quote an identifier for use in an sql statement
2439            (PostGISColumn.__init__): Add the quoted_name attribute
2440            (PostGISTable.__init__): New instance variable quoted_tablename
2441            (PostGISTable._fetch_table_information): Use the quoted table
2442            name. New isntance variable quoted_geo_col with a quoted version
2443            of geometry_column
2444            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
2445            (PostGISTable.RowOrdinalToId): Use the quoted table name
2446            (PostGISTable.ReadValue, PostGISTable.ValueRange)
2447            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
2448            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
2449            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
2450            Use quoted table and column names
2451    
2452            * test/test_postgis_db.py (TestPostGISSpecialCases)
2453            (TestPostGISIgnoredColumns): Rename the class to
2454            TestPostGISSpecialCases because that better describes the new
2455            cases
2456            (TestPostGISSpecialCases.test_unsupported_types)
2457            (TestPostGISSpecialCases.test): Rename the method to
2458            test_unsupported_types because we need a more descriptive name now
2459            that there are more methods
2460            (TestPostGISSpecialCases.test_table_name_quoting)
2461            (TestPostGISSpecialCases.test_column_name_quoting)
2462            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
2463            cases to test quoting of table and column names in PostGISTable
2464            and PostGISShapeStore
2465    
2466            * test/postgissupport.py
2467            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
2468            AddGeometryColumn desn't support table or column names with sapces
2469            or double quotes
2470    
2471    2003-11-12  Jan-Oliver Wagner <[email protected]>
2472    
2473            * Extensions/wms/__init__.py: New: Init to make this
2474            directory a package.
2475    
2476            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
2477    
2478    2003-11-11  Bernhard Herzog  <[email protected]>
2479    
2480            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
2481            Constant for the file woth deprecated epsg projections
2482            (get_system_proj_file): Update doc-string
2483    
2484            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
2485            above the EPS widgets, introduce a check box for the deprecated
2486            eps projections and a label for the epsg widgets
2487            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
2488            too
2489    
2490    2003-11-11  Bernhard Herzog  <[email protected]>
2491    
2492            Avoid warnings when run under Python 2.3
2493    
2494            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
2495            (BaseRenderer.draw_label_layer): Coordinates must be ints.
2496    
2497            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
2498            real method so that we can convert to int.
2499            (MapRenderer.label_font): The font size mist be an int.
2500    
2501            * Thuban/UI/common.py (Color2wxColour): The color values must be
2502            ints. Also, remove the unnecessary asserts.
2503    
2504            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
2505            (TestUnicodeStrings.test): Python source code should not contain
2506            non-ascii characters unless an encoding is specified in the file.
2507            Therefore use \x escapes in the string literals for non-ascii
2508            characters.
2509    
2510    2003-11-11  Bernhard Herzog  <[email protected]>
2511    
2512            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
2513            parameter so that this function can be used for all proj files in
2514            Resource/Projections
2515            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
2516            get_system_proj_file
2517    
2518            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
2519            ProjFile self.__sysProjFile use a dictionary of system ProjFile
2520            objects self._sys_proj_files
2521            (ProjFrame.build_dialog): Adapt to the new changes in the
2522            ProjectionList constructor. Add a check button to toggle whether
2523            EPSG projections are shown
2524            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
2525            events.
2526            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
2527            the busy cursor if the files have not yet been loaded by the
2528            dialog.
2529            (ProjFrame.load_system_proj): Add a parameter for the name of the
2530            proj file. Maintain the dictionary of system projections
2531            self._sys_proj_files
2532    
2533            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
2534            user_projs parameters into one parameter proj_files which is a
2535            list of proj files.
2536            (ProjectionList._subscribe_proj_files)
2537            (ProjectionList._unsubscribe_proj_files): New. Move
2538            subscription/unsubscription of projfile messages to separate
2539            methods
2540            (ProjectionList.Destroy): The unsubscribe is now done in
2541            _unsubscribe_proj_files
2542            (ProjectionList.update_projections): We now have a list of proj
2543            file objects
2544            (ProjectionList.SetProjFiles): New method to set a new list of
2545            proj file objects
2546    
2547            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
2548            Specify explicitly which system proj file to load.
2549    
2550    2003-11-11  Bernhard Herzog  <[email protected]>
2551    
2552            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
2553            instance variables to cut cyclic references. The GC would have
2554            collected the loader eventually but it can happen that it doesn't
2555            run at all until thuban is closed (2.3 but not 2.2 tries a bit
2556            harder and forces a collection when the interpreter terminates)
2557            (load_session): Call the handler's Destroy method to make sure
2558            that it gets garbage collected early. Otherwise it will be
2559            collected very late if at all and it holds some references to e.g.
2560            shapestores and the session which can lead to leaks (of e.g. the
2561            temporary files)
2562    
2563            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
2564            resource leak in load_session
2565    
2566    2003-11-10  Bernhard Herzog  <[email protected]>
2567    
2568            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
2569            extensions are to be rendered.
2570            (_renderer_extensions): New. List with renderer for layers in
2571            extensions
2572            (add_renderer_extension): New. Add a renderer extension
2573            (init_renderer_extensions): New. Init the renderer extensions
2574            (BaseRenderer.render_map_incrementally): Search
2575            _renderer_extensions for how to draw unknown layer types
2576            (BaseRenderer.draw_raster_data): Add format parameter so that
2577            formats other than BMP can be drawn
2578            (BaseRenderer.draw_raster_layer): Pass an explicit format to
2579            draw_raster_data
2580    
2581            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
2582            strings of the format parameter of draw_raster_data method to wx
2583            constants
2584            (MapRenderer.draw_raster_data): Add the format parameter and use
2585            raster_format_map to map it to the right wxwindows constant for
2586            wxImageFromStream
2587    
2588            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
2589            the format parameter and record it
2590            (TestBaseRenderer.test_raster_no_projection): check the format
2591            paramter of the draw_raster_data method
2592            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
2593            extension facility
2594    
2595    2003-11-07  Bernhard Herzog  <[email protected]>
2596    
2597            Tweak the usage of the sqlite database to make common use cases
2598            more responsive. In most cases copying the data to the sqlite
2599            database takes so long that using sqlite doesn't have enough
2600            advantages.
2601    
2602            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
2603            comments about performance and query the min and max in separate
2604            statements because only that way will indexes be used.
2605            (TransientTableBase.UniqueValues): Add some comments about
2606            performance.
2607            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
2608            Do not copy the data to the transient DB but use the transient
2609            copy if it exists. See the new comments for the performance trade
2610            offs
2611    
2612            * test/test_transientdb.py
2613            (TestTransientTable.test_auto_transient_table): Make sure that the
2614            data is copied to the transient database at some point.
2615    
2616    2003-11-03  Bernhard Herzog  <[email protected]>
2617    
2618            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
2619            globals to locals so that it's a bit faster
2620    
2621    2003-11-03  Bernhard Herzog  <[email protected]>
2622    
2623            * Thuban/UI/baserenderer.py
2624            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
2625            method. ReadValue is faster than ReadRowAsDict since it only reads
2626            one cell especially now that the dbf file objects actually
2627            implement it.
2628    
2629            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
2630            read_attribute method of the dbf objects
2631    
2632    2003-11-03  Bernhard Herzog  <[email protected]>
2633    
2634            * Extensions/profiling/profiling.py (popup_dialog_box): New config
2635            variable to indicate whether the result should be shown in a
2636            dialog box
2637            (profile_screen_renderer, time_screen_renderer): Only show a
2638            dialog box if popup_dialog_box is true.
2639            (profile_screen_renderer): Flush stdout after the printing the
2640            first part of the "profiling..." message
2641    
2642            * Thuban/UI/baserenderer.py
2643            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
2644            brushes for the groups so that they're not created over and over
2645            again
2646    
2647            * Thuban/Model/classification.py (Classification.__getattr__)
2648            (Classification._compile_classification)
2649            (Classification._clear_compiled_classification): New. Methods to
2650            manage a 'compiled' representation of the classification groups
2651            which is created on demand
2652            (Classification.InsertGroup, Classification.RemoveGroup)
2653            (Classification.ReplaceGroup): reset the compiled representation
2654            (Classification.FindGroup): Use the compiled representation to
2655            find the matching group
2656            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
2657    
2658    2003-10-31  Bernhard Herzog  <[email protected]>
2659    
2660            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
2661            Send a CLASS_CHANGED message
2662            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
2663            not return the removed group since it wasn't used.
2664    
2665            * test/test_classification.py
2666            (TestClassification.test_set_default_group): New. Test the
2667            SetDefaultGroup method
2668            (TestClassification.test_insert_group): New. Test the InsertGroup
2669            method
2670            (TestClassification.test_remove_group): New. Test the RemoveGroup
2671            method
2672            (TestClassification.test_replace_group): New. Test the
2673            ReplaceGroup method
2674    
2675    2003-10-31  Bernhard Herzog  <[email protected]>
2676    
2677            * test/test_classification.py (TestClassification.setUp):
2678            Subscribe to the CLASS_CHANGED messages
2679            (TestClassification.tearDown): New. Destroy the classification
2680            properly
2681            (TestClassification.test_defaults): Add tests for the default line
2682            width and whether no messages were sent yet
2683            (TestClassification.test_set_default_properties): Add tests for
2684            messages and setting the default line width
2685            (TestClassification.test_add_singleton)
2686            (TestClassification.test_add_range)
2687            (TestClassification.test_multiple_groups): Add tests for messages
2688    
2689    2003-10-31  Bernhard Herzog  <[email protected]>
2690    
2691            Some more refactoring in preparation for new tests:
2692    
2693            * test/test_classification.py (TestClassification.setUp): New.
2694            Instantiate the classification here. Update the test methods
2695            accordingly.
2696            (TestClassification.test_multiple_groups): Make sure that the two
2697            singletons matching 1 are considered different.
2698    
2699    2003-10-31  Bernhard Herzog  <[email protected]>
2700    
2701            * test/test_classification.py (red, green, blue): New. These
2702            constants were used in several cases. Update the relevant methods.
2703            (TestClassification.test_defaults)
2704            (TestClassification.test_set_default_properties)
2705            (TestClassification.test_add_singleton)
2706            (TestClassification.test_add_range)
2707            (TestClassification.test_multiple_groups)
2708            (TestClassification.test_deepcopy): New. These were formerly all
2709            part of the single method test.
2710            (TestClassification.test_deepcopy): Removed.
2711            (TestClassIterator): Removed. The test case is now a method of
2712            TestClassification since it tests part of the public interface of
2713            Classification
2714            (TestClassification.test_iterator): New. Used to be
2715            TestClassIterator effectively
2716    
2717    2003-10-31  Jan-Oliver Wagner <[email protected]>
2718    
2719            GUIfied the functions of the profiling extension.
2720    
2721            * /Extensions/profiling/__init__.py: New: Init to make this
2722            directory a package.
2723    
2724            * Extensions/profiling/profiling.py: Moved menu entries to
2725            the Extensions menu. Applied _() for strings.
2726            (profile_screen_renderer): Catch the detailed printout and present
2727            it in a dialog.
2728            (time_screen_renderer): Raise a dialog to present the result instead
2729            of printing it to stdout.
2730    
2731    2003-10-31  Bernhard Herzog  <[email protected]>
2732    
2733            * test/test_classification.py (TestClassGroupProperties)
2734            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
2735            (TestClassGroupSingleton, TestClassIterator, TestClassification):
2736            Split TestClassification into several classes, one for each class
2737            being tested. TestClassification itself now only tests
2738            Classification. This split makes changes to the tests a bit easier
2739    
2740    2003-10-31  Bernhard Herzog  <[email protected]>
2741    
2742            * Extensions/profiling/profiling.py: New. Extension to measure
2743            Thuban performance
2744    
2745    2003-10-31  Frank Koormann <[email protected]>
2746    
2747            Added two items to legend popup menu: Remove Layer and Show Layer Table
2748    
2749            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
2750            LegendPanel._OnShowTable): New event handlers, call the corresponding
2751            mainwindow methods.
2752            (LegendTree._OnRightClick): Added items to popup menu.
2753    
2754    2003-10-30  Bernhard Herzog  <[email protected]>
2755    
2756            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
2757            EVT_WINDOW_DESTROY
2758            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
2759            nothing but is convenient for the derived classes.
2760    
2761            * Thuban/UI/tableview.py
2762            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
2763            Unsubscribe the messages here not in OnClose because that might
2764            get called multiple times. Fixes RT #2196
2765            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
2766            anymore.
2767    
2768            * README: Update the minimum requirement for wxPython. Since we
2769            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
2770            the version in which that was introduced for all platforms
2771    
2772    2003-10-30  Frank Koormann <[email protected]>
2773    
2774            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
2775            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
2776            frame.
2777    
2778    2003-10-30  Jan-Oliver Wagner <[email protected]>
2779    
2780            Improved APR import extension, added further EPSG definitions
2781            and some cleanup regarding string class.
2782    
2783            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
2784            Added test for alias 'longlat'.
2785    
2786            * Resources/Projections/epsg-deprecated.proj: New. Contains
2787            deprecated EPSG definitions.
2788    
2789            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
2790            the variable names for objects.
2791    
2792            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
2793            Copied from importAPR and provided with documentation.
2794    
2795            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
2796            Moved to apr.py.
2797            (APR_View): Added object ref 'ITheme'.
2798    
2799            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
2800            split function by corresponding use of the string class method.
2801    
2802            * Thuban/Model/xmlwriter.py: Replaced string replace function by
2803            corresponding string method.
2804    
2805    2003-10-29  Bernhard Herzog  <[email protected]>
2806    
2807            * Thuban/UI/baserenderer.py
2808            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
2809            special case of a classification that only has the default group
2810    
2811    2003-10-27  Bernhard Herzog  <[email protected]>
2812    
2813            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2814    
2815            * po/de.po: Update.
2816    
2817            * Thuban/UI/application.py
2818            (ThubanApplication.ShowExceptionDialog): Handle translation of the
2819            dialog message properly
2820    
2821    2003-10-27  Bernhard Herzog  <[email protected]>
2822    
2823            Rework how localization works so that we use wx's translation
2824            functions when running Thuban as a normal application but not when
2825            we don't need any UI, such as in the test suite. See the comment
2826            in Thuban/__init__.py for details
2827    
2828            * Thuban/__init__.py (_): Add one level of indirection to make the
2829            translation handling more flexible and to make it possible to use
2830            either wx's translation services or not.
2831            (gettext_identity, translation_function_installed)
2832            (install_translation_function): New function to help with this
2833    
2834            * Thuban/UI/__init__.py: Install the wx specific translation
2835            function if it's OK to do that
2836    
2837            * test/support.py (initthuban): Install a dummy translation
2838            function so that importing Thuban.UI doesn't install a wx specific
2839            one for which would need to import wxPython
2840    
2841    2003-10-27  Bernhard Herzog  <[email protected]>
2842    
2843            * HOWTO-Release: Source archives should be created first and the
2844            binary packages should be created from the source archives.
2845            There's an official debian package now so there's no need to test
2846            the rpm on debian anymore
2847    
2848    2003-10-27  Bernhard Herzog  <[email protected]>
2849    
2850            Several rendering changes:
2851    
2852             - Render the selection into a separate bitmap so that only that
2853               bitmap needs to be redrawn when the selection changes
2854    
2855             - Render incrementally showing previews and allowing interaction
2856               before rendering is complete
2857    
2858             - Update the renderer interface a bit. Most parameters of
2859               RenderMap are now parameters of the constructor
2860    
2861            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
2862            and the update region as parameters. Update the doc-string
2863            (BaseRenderer.render_map_incrementally): New. Generator function
2864            to renders the map incrementally
2865            (BaseRenderer.render_map): Remove the map argument (it's now in
2866            the constructor) and simply iterate over the
2867            render_map_incrementally generator to draw the map.
2868            (BaseRenderer.draw_shape_layer_incrementally)
2869            (BaseRenderer.draw_shape_layer): Renamed to
2870            draw_shape_layer_incrementally and changed into a generator that
2871            yields True every 500 shapes. Used by render_map_incrementally to
2872            render shape layers incrementally
2873    
2874            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
2875            map and region parameters which are now in the constructor
2876            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
2877            the inherited render_map_incrementally.
2878            (BaseRenderer.draw_shape_layer): Removed.
2879            (ScreenRenderer.draw_selection_incrementally): New. The selection
2880            drawing part of the removed draw_shape_layer as a generator
2881            (ScreenRenderer.layer_shapes): Update because of the region
2882            parameter change
2883            (ExportRenderer.__init__): New. Extend the inherited constructor
2884            with the destination region for the drawing
2885            (ExportRenderer.RenderMap): Removed the map and region parameters
2886            which are now in the constructor
2887    
2888            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
2889            bitmap suitable for a preview in a tool
2890            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
2891            bitmap
2892            (MapPrintout.draw_on_dc): Adapt to new renderer interface
2893            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
2894            exists
2895            (MapCanvas.OnIdle): Update the logic to deal with incremental
2896            rendering and the selection bitmap
2897            (MapCanvas._do_redraw): Handle the instantiation of the render
2898            iterator and the redraws during rendering
2899            (MapCanvas._render_iterator): New. Generator to incrementally
2900            redraw both bitmaps
2901            (MapCanvas.Export): Adapt to new renderer interface.
2902            (MapCanvas.full_redraw): Reset the selection bitmap and the
2903            renderer iterator too
2904            (MapCanvas.redraw_selection): New. Force a redraw of the selection
2905            bitmap
2906            (MapCanvas.shape_selected): Only redraw the selection bitmap
2907    
2908            * test/test_baserenderer.py
2909            (TestBaseRenderer.test_polygon_no_projection)
2910            (TestBaseRenderer.test_raster_no_projection)
2911            (TestBaseRenderer.test_point_map_projection)
2912            (TestBaseRenderer.test_point_layer_and_map_projection)
2913            (TestBaseRenderer.test_point_layer_projection)
2914            (TestBaseRenderer.test_point_with_classification): Adapt to new
2915            renderer interface
2916    
2917    2003-10-24  Bernhard Herzog  <[email protected]>
2918    
2919            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
2920            (point_in_polygon_shape, shape_centroid): Raise an exception if
2921            the shape can't be read. Previously invalid shape ids would lead
2922            to a segfault.
2923    
2924            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
2925            New. test whether an exception is raised for invalid shape ids
2926    
2927    2003-10-24  Jan-Oliver Wagner <[email protected]>
2928    
2929            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
2930            as alias for 'latlong'.
2931    
2932            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
2933            as alias for 'latlong'.
2934    
2935    2003-10-24  Jan-Oliver Wagner <[email protected]>
2936    
2937            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
2938            the projection even for the UnknownPanel.
2939            (UnknownProjPanel.__init__): Define the text and create the textctrl
2940            widget.
2941            (UnknownProjPanel._DoLayout): Replaced static text widget by the
2942            textctrl created in __init__.
2943            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
2944            including the parameters of the projection.
2945            
2946    2003-10-24  Jan-Oliver Wagner <[email protected]>
2947    
2948            * Resources/Projections/epsg.proj: New. This is a list of
2949            EPSG codes with parameters for proj. The list has been
2950            generated using devtools/create_epsg.py based on the
2951            file nad/epsg of the proj 4.4.7 package. Four projection
2952            definitions have been deleted as they are not accepted by proj:
2953            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
2954            and "HD72 / EOV".
2955    
2956    2003-10-22  Bernhard Herzog  <[email protected]>
2957    
2958            Some more tweaks to the projection dialog which should fix RT
2959            #1886.
2960    
2961            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
2962            the ProjFile's messages and call the base class methods correctly
2963            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
2964            flag on the newly selected item too. Otherwise some other item is
2965            focused and the first time the focus is moved with the keyboard
2966            the selection moves in unexpected ways.
2967    
2968            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
2969            focus on the OK button, only on the projection list. That way the
2970            list really has the focus initially
2971            (ProjFrame.OnClose): Call the projection list's Destroy method to
2972            make it unsubscribe all messages
2973    
2974    2003-10-21  Bernhard Herzog  <[email protected]>
2975    
2976            Rework the projection dialog to fix a few bugs, including RT 2166
2977            and most of 2168
2978    
2979            * Thuban/UI/projlist.py: New. The class ProjectionList is a
2980            special wxListCtrl to show a list of projections in a more MVC
2981            fashion
2982    
2983            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
2984            throughout the class. The main change is to use the ProjectionList
2985            class instead of a normal wxListBox. Also, add an explicit
2986            "Unknown" projection to the projection choice control.
2987            (ProjPanel.__init__): Add an "unknown" ellipsoid
2988            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
2989            instantiation of the panel's controls to make the tab-order more
2990            natural
2991    
2992    2003-10-21  Bernhard Herzog  <[email protected]>
2993    
2994            * test/test_load.py (TestSingleLayer.file_contents)
2995            (TestSingleLayer.test): Add non-ascii characters to the titles of
2996            session, map and layer. This is effectively a port of the
2997            TestUnicodeStrings test in test_load_0_8.py which for some reason
2998            was only added there.
2999    
3000            * test/test_load_0_9.py (TestSingleLayer.file_contents)
3001            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
3002            characters to the titles of session, map and layer,.
3003    
3004    2003-10-21  Bernhard Herzog  <[email protected]>
3005    
3006            Add EPSG projection handling to .thuban files
3007    
3008            * test/test_save.py (SaveSessionTest.dtd)
3009            (SaveSessionTest.testEmptySession)
3010            (SaveSessionTest.testLayerProjection)
3011            (SaveSessionTest.testRasterLayer)
3012            (SaveSessionTest.testClassifiedLayer)
3013            (SaveSessionTest.test_dbf_table)
3014            (SaveSessionTest.test_joined_table)
3015            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
3016            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
3017            use a and epsg projection to test saving them
3018    
3019            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
3020            namespace
3021            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3022            (TestLayerProjection.file_contents)
3023            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3024            (TestPostGISLayer.file_contents)
3025            (TestPostGISLayerPassword.file_contents)
3026            (TestLoadError.file_contents, TestLoadError.test): Update to use
3027            1.0-dev namespace
3028            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
3029            use 1.0-dev namespace and use an EPSG projection to test whether
3030            loading it works
3031    
3032            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
3033            as of Thuban 0.9. These are now tests to determine whether Thuban
3034            can still read files generated by Thuban 0.9
3035    
3036            * Thuban/Model/save.py (SessionSaver.write)
3037            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
3038            namespace
3039            (SessionSaver.write_projection): Write the projection's epsg
3040            attribute
3041    
3042            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
3043            thuban-1.0-dev.dtd namespace
3044            (SessionLoader.check_attrs): Allow a callable object as conversion
3045            too
3046            (SessionLoader.start_projection, SessionLoader.end_projection)
3047            (SessionLoader.start_parameter): Handle the epsg attribute and
3048            rename a few instance variables to lower case
3049    
3050            * Resources/XML/thuban-1.0.dtd: New. Only difference to
3051            thuban-0.9.dtd is the epsg attribute for projections.
3052    
3053    2003-10-21  Bernhard Herzog  <[email protected]>
3054    
3055            * test/runtests.py (main): Let the user specify which tests to run
3056            on the command line
3057    
3058            * test/support.py (ThubanTestResult.getDescription): Override to
3059            give a better short description. The description can be used as a
3060            parameter to run_tests to run that particular test in isolation.
3061    
3062    2003-10-21  Frank Koormann   <[email protected]>
3063    
3064            Popup menu for legend. Scheduled for the 1.2 release this was too
3065            simple to implement: The popup menu is bound to the legend tree, while
3066            the events are hanlded by its anchestor, the legend panel. This
3067            allows reuse of all the event handlers already implemented for the
3068            legend toolbar buttons.
3069    
3070            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
3071            to add handlers for the events issued by the popup menu.
3072            (LegendPanel._OnToggleVisibility): Handler for toggling layer
3073            visibility event
3074            (LegendPanel._OnProjection): Handler for layer projection event.
3075            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
3076            (LegendTree._OnRightClick): Event handler for right click, select item
3077            and pop up menu.
3078            (LegendTree.ToggleVisibility): Toggle layer visibility
3079            (LegendTree.LayerProjection): Raise layer projection dialog for
3080            current layer.
3081    
3082    2003-10-21  Bernhard Herzog  <[email protected]>
3083    
3084            * Resources/Projections/defaults.proj: Use correct DOCTYPE
3085            declaration. The top-level element is projectionlist not projfile
3086    
3087    2003-10-20  Bernhard Herzog  <[email protected]>
3088    
3089            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
3090            method to write a projfile and display a busy cursor and error
3091            dialogs.
3092            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
3093            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
3094            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
3095            busy cursor while loading the user and system prj files.
3096    
3097    2003-10-16  Bernhard Herzog  <[email protected]>
3098    
3099            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
3100            ProjFile objects
3101            (clear_proj_file_cache): New function to clear the cache. Mainly
3102            useful for use by the test suite
3103            (read_proj_file): Use the cache.
3104    
3105            * test/test_proj.py (TestProjFile): Clarify the doc-string
3106            (ProjFileReadTests): Update doc-string
3107            (ProjFileReadTests.test_get_system_proj_file): Check whether the
3108            system proj files is cached.
3109            (ProjFileLoadTestCase): New base class for the proj file tests
3110            derived from support.FileLoadTestCase to provide some common
3111            behavior.
3112            (TestLoadingProjFile)
3113            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
3114            (TestProjFileWithInvalidParameters.file_contents): Derive from
3115            ProjFileLoadTestCase
3116            (TestLoadingProjFile.test_caching): New. Test whether the cache
3117            works
3118    
3119    2003-10-16      Silke Reimer    <[email protected]>
3120    
3121            * debian/*: New directory with configuration files for building a thuban
3122              deb-package.
3123    
3124    2003-10-14  Bernhard Herzog  <[email protected]>
3125    
3126            * test/test_proj.py: Execute support.run_tests when run as
3127            __main__ so that missing unsubscribes are detected
3128            (TestProjFile.tearDown): Destroy the proj_file properly
3129    
3130    2003-10-14  Bernhard Herzog  <[email protected]>
3131    
3132            * Thuban/Model/messages.py (PROJECTION_ADDED)
3133            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
3134            the ProjFile objects
3135    
3136            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
3137            easily send messages when the projections change
3138            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
3139            when the change was successful
3140    
3141            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
3142            proj file messages
3143            (TestProjFile.test_add_remove)
3144            (TestProjFile.test_remove_non_existing)
3145            (TestProjFile.test_replace)
3146            (TestProjFile.test_replace_non_existing): Test whether the right
3147            messages are sent
3148    
3149    2003-10-14  Bernhard Herzog  <[email protected]>
3150    
3151            * test/test_proj.py (TestProjFile.test): Refactor into several
3152            tests
3153            (TestProjFile.test_add_remove)
3154            (TestProjFile.test_remove_non_existing)
3155            (TestProjFile.test_replace)
3156            (TestProjFile.test_replace_non_existing): Some of the new
3157            individual test cases
3158            (TestProjFileSimple): New class for the rest of the test cases
3159            that came out of the refactoring
3160            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
3161            derived classes don't have to
3162    
3163    2003-10-13  Bernhard Herzog  <[email protected]>
3164    
3165            Add an optional EPSG code to the projection objects and extend the
3166            .proj file format accordingly.
3167    
3168            * Resources/XML/projfile.dtd (element projection): Add epsg
3169            attribute
3170    
3171            * Thuban/Model/proj.py (Projection.__init__): New parameter and
3172            instance variable epsg. Update doc-string
3173            (Projection.EPSGCode, Projection.Label): New methods to provide
3174            access to EPSG code and a label for use in dialogs
3175    
3176            * Thuban/Model/resource.py (ProjFileReader.start_projection)
3177            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
3178            Handle the epsg code attribute when reading or writing proj files
3179    
3180            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
3181            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
3182            (ProjFrame.__FillAvailList): Use the projection's Label method to
3183            get the string for the list box
3184    
3185            * test/test_proj.py (TestProjection.test_label)
3186            (TestProjection.test_label_epsg)
3187            (TestProjection.test_epsgcode_for_non_epsg_projection)
3188            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
3189            for the label and EPSGCode methods
3190            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
3191            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
3192            objects in the test cases and put the expected contents into the
3193            test case methods too. Update doTestWrite accordingly
3194            (TestLoadingProjFile)
3195            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
3196            read tests from TestProjFile.
3197            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
3198            tests are now in the new classes.
3199            (sample_projfile, sample_projfile_data)
3200            (sample_projfile2, sample_projfile_data2): Removed. Not used
3201            anymore.
3202            (TestProjFile.test_read_unreadable_file): No need to reset the
3203            permissions at the end anymore since we use a unique filename
3204    
3205    2003-10-13  Bernhard Herzog  <[email protected]>
3206    
3207            * test/test_proj.py: Some more refactoring of the test cases
3208            (ProjFileTest): New base class for the proj file tests.
3209            (TestProjFile): Derive from ProjFileTest
3210            (TestProjFile.test_read_unreadable_file)
3211            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
3212            the new filename method to get a unique filename
3213            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
3214            (WriteProjFileTests): New class for proj file write tests.
3215            Contains the write test that were in TestProjFile originally.
3216    
3217    2003-10-13  Bernhard Herzog  <[email protected]>
3218    
3219            * test/test_proj.py (TestProjFile.testRead)
3220            (TestProjFile.test_read_non_existing_file)
3221            (TestProjFile.test_read_unreadable_file)
3222            (TestProjFile.test_read_empty_file): Split into several methods.
3223    
3224    2003-10-10  Bernhard Herzog  <[email protected]>
3225    
3226            * Thuban/UI/sizers.py: New file with custom sizers.
3227    
3228            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
3229            all projection type specific panels and put them into a
3230            NotebookLikeSizer. This way the dialog doesn't change its size
3231            when a different projection is selected
3232            (ProjFrame.__init__): Rename projection_panels
3233            projection_panel_defs and reuse projection_panels for a list of
3234            the instantiated panels.
3235            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
3236            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
3237            the panels
3238            (UnknownProjPanel._DoLayout): Place the newlines in the message
3239            differently to make the panel narrower.
3240            (TMPanel._DoLayout): Layout the parameters in one column.
3241    
3242    2003-10-10  Bernhard Herzog  <[email protected]>
3243    
3244            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
3245            that contains all the setup for the dialog's widgets, layout and
3246            event handling.
3247            (__): Call build_dialog to build the dialog.
3248            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
3249            Their functionality is now in build_dialog
3250            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
3251            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
3252            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
3253            different widget names and hierarchy introduced with build_dialog.
3254    
3255    2003-10-10  Bernhard Herzog  <[email protected]>
3256    
3257            * README: Fix typo.
3258    
3259    2003-10-09  Bernhard Herzog  <[email protected]>
3260    
3261            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
3262            projection is already in the list. This is *a lot* faster when
3263            loading files with hundreds of projections since it saves a linear
3264            search. OTOH this will allow adding the same projection to the
3265            user.proj file multiple times in the projection dialog but we'll
3266            deal with that later
3267    
3268    2003-10-09  Jan-Oliver Wagner <[email protected]>
3269    
3270            * devtools: New. Directory for developer tools that are not intended
3271            for the regular user.
3272    
3273            * devtools/create_epsg.py: New. Convert the epsg file of proj into
3274            a python .proj file.
3275    
3276    2003-10-09  Bernhard Herzog  <[email protected]>
3277    
3278            * test/test_proj.py
3279            (TestProjection.test_get_parameter_without_equals_sign): New. Test
3280            whether GetParameter handles parameters without "=" sign correctly
3281    
3282            * Thuban/Model/proj.py (Projection.GetParameter): Handle
3283            parameters that do not contain a "=". Update the doc-string
3284    
3285    2003-10-08  Bernhard Herzog  <[email protected]>
3286    
3287            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
3288            length limit on the projname text control
3289    
3290    2003-10-08  Bernhard Herzog  <[email protected]>
3291    
3292            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
3293            (TestProjection.test_get_projection_units_normal): New. Tests for
3294            the Projection.GetProjectedUnits method
3295    
3296    2003-10-08  Jan-Oliver Wagner <[email protected]>
3297    
3298            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
3299            Added missing 'val' parameter.
3300    
3301    2003-10-08  Bernhard Herzog  <[email protected]>
3302    
3303            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
3304            projection type of the currently selected projection is not known,
3305            i.e. there's no panel for it, use the UnknownProjPanel
3306            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
3307            the actual replacing of the proj panel into the new method
3308            _show_proj_panel.
3309            (UnknownProjPanel): Add doc-string.
3310            (UnknownProjPanel._DoLayout): Insert a newline into the text so
3311            that the panel is not so wide.
3312    
3313    2003-10-08  Bernhard Herzog  <[email protected]>
3314    
3315            * Thuban/Model/resource.py (read_proj_file): Return the warnings
3316            too. Update the doc-string
3317            (get_proj_files): Removed. It wasn't used anywhere
3318            (get_system_proj_files, get_system_proj_file): Rename to
3319            get_system_proj_file and return the ProjFile object and not a list
3320            of ProjFile objects. Update the callers.
3321            (get_user_proj_files, get_user_proj_file): Rename to
3322            get_user_proj_file return the ProjFile object and not a list of
3323            ProjFile objects. Update the callers.
3324            (ProjFileReader.__init__): New instance variable for the warnings.
3325            Rename the __pf ivar to projfile. Update the methods referring to
3326            __pf
3327            (ProjFileReader.end_projection): Catch any errors raised when
3328            instantiating the projection and record that as an error. The
3329            projection will not be in the final ProjFile object.
3330            (ProjFileReader.GetWarnings): New method to return the warnings.
3331    
3332            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
3333            show the warnings from the projfile reader
3334            (ProjFrame._OnImport): Deal with any warnings returned by
3335            read_proj_file
3336            (ProjFrame.__FillAvailList): Deal with any warnings returned by
3337            get_system_proj_file or get_user_proj_file.
3338    
3339            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
3340            (TestProjFileWithInvalidParameters.file_contents): New test cases
3341            to test whether read_proj_file handles invalid projection
3342            parameters correctly
3343            (TestProjFile.test_get_system_proj_file): New. Simple test for
3344            resource.get_system_proj_file
3345    
3346    2003-10-07  Bernhard Herzog  <[email protected]>
3347    
3348            * test/test_derivedshapestore.py
3349            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
3350            properly so that the temporary directories get deleted correctly
3351    
3352    2003-10-06  Bernhard Herzog  <[email protected]>
3353    
3354            Handle the title changes in a proper MVC way.
3355    
3356            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
3357            canvas' TITLE_CHANGED messages
3358            (MainWindow.update_title): New. Update the main window's title
3359            (MainWindow.__SetTitle): Removed. Use update_title instead.
3360            (MainWindow.SetMap): Use update_title instead of __SetTitle
3361            (MainWindow.RenameMap): Do change the window title explicitly
3362            here. That's handled in a proper MVC way now.
3363            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
3364            messages
3365    
3366            * Thuban/Lib/connector.py (Conduit): New class to help classes
3367            that forward messages
3368    
3369            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
3370            (ViewPort): Derive from Conduit instead of Publisher
3371            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
3372            when calling the inherited versions
3373            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
3374            methods to subscribe and unsubscribe map messages
3375            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
3376            handle the map subscriptions
3377            (ViewPort.Map, ViewPort.map_projection_changed)
3378            (ViewPort.layer_projection_changed): Add or update doc-strings
3379    
3380            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
3381            typo
3382            (MyConduit): Helper class for the Conduit test.
3383            (TestConduit): Test cases for Conduit
3384    
3385            * test/test_connector.py: Use support.run_tests as main.
3386    
3387            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
3388            the TITLE_CHANGED messages
3389            (ViewPortTest.test_forwarding_title_changed): New test to check
3390            whether the viewport forwards the map's TITLE_CHANGED messages
3391            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
3392            after the port's because the latter may require a still functional
3393            map.
3394    
3395    2003-10-06  Bernhard Herzog  <[email protected]>
3396    
3397            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
3398            doc-string
3399    
3400    2003-10-06  Bernhard Herzog  <[email protected]>
3401    
3402            * test/test_viewport.py (ViewPortTest.setUp)
3403            (SimpleViewPortTest.test_init_with_size): Move the test for the
3404            initial size as a constructor parameter from ViewPortTest.setUp
3405            method to a new separate test in SimpleViewPortTest.
3406    
3407    2003-10-06  Bernhard Herzog  <[email protected]>
3408    
3409            * test/test_viewport.py (MockView): New class derived from
3410            ViewPort with a mock implementation of GetTextExtent to be used in
3411            the test cases
3412            (ViewPortTest.setUp): Use MockView instead of ViewPort
3413    
3414            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
3415            into what would be a "pure virtual function" in C++: always raise
3416            NotImplementedError. Mock implementations for test cases don't
3417            belong into the real code
3418    
3419    2003-10-02  Bernhard Herzog  <[email protected]>
3420    
3421            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
3422            close the dbf file we create so that it's contents have been
3423            written properly.
3424    
3425            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
3426            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
3427            Update to shapelib 1.2.10
3428    
3429    2003-10-01  Jan-Oliver Wagner <[email protected]>
3430    
3431            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
3432            it annoys lintian which warns about these files not being
3433            executable. The #! isn't necessary here since if you absolutely
3434            must execute them you can always say "python <filename>".
3435    
3436    2003-09-26  Bernhard Herzog  <[email protected]>
3437    
3438            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
3439            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
3440            is ported to a newer the import will fail, so it should be noticed
3441            immediately that this function is gone.
3442            Fixes RT#1919
3443    
3444    2003-09-26  Bernhard Herzog  <[email protected]>
3445    
3446            Add a DTD for the projection files and make thuban write valid
3447            projection files
3448    
3449            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
3450            files
3451    
3452            * Thuban/Model/resource.py (ProjFileSaver.write): Use
3453            'projectionlist' as the name in the document type declaration so
3454            that it matches the element type of the root element.
3455    
3456            * test/test_proj.py (sample_projfile, sample_projfile2): Use
3457            'projectionlist' as the name in the document type declaration just
3458            as it is done now in the files thuban would write
3459            (sample_projfile, sample_projfile_data): Fix spelling of
3460            "Mercator"
3461            (TestProjFile.doTestWrite): Validate the written and the expected
3462            XML data
3463            (TestProjFile): Derive from ValidationTest so that we can run xml
3464            validation tests
3465    
3466    2003-09-24  Bernhard Herzog  <[email protected]>
3467    
3468            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
3469            modify the list returned by map.Layers() in place since it is the
3470            actual list of layers used by the map.
3471    
3472    2003-09-23  Jan-Oliver Wagner <[email protected]>
3473    
3474            * Doc/manual/thuban-manual.xml: Added subsection to chapter
3475            Extensions to describe the extensions coming with the Thuban
3476            standard package (gns2shp and importAPR).
3477    
3478    2003-09-23  Bernhard Herzog  <[email protected]>
3479    
3480            * libraries/thuban/wxproj.cpp (project_point): if there's an
3481            inverse but no forward projection, convert to degrees after
3482            applying the inverse projection. Fixes RT#2096
3483    
3484            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
3485            implicitly tests for the fix to RT#2096
3486    
3487            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
3488            Check that the sequences have the same lengths
3489    
3490            * Resources/Projections/defaults.proj (Geographic projection): Use
3491            a much more precise value for the to_meter attribute.
3492    
3493    2003-09-22  Bernhard Herzog  <[email protected]>
3494    
3495            * test/support.py (initthuban): Make sure to unset the LANG env.
3496            var. so that tests that compare translated strings work. Solves RT
3497            #2094
3498    
3499    2003-09-22  Jan-Oliver Wagner <[email protected]>
3500    
3501            Small improvement of APR import.
3502    
3503            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
3504            Added tests for text-ranges.
3505    
3506            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
3507            returns a string object if the range is based on text.
3508    
3509            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
3510            range retrieval.
3511    
3512    2003-09-22  Jan-Oliver Wagner <[email protected]>
3513    
3514            Initial version of the importAPR extension which is in
3515            experimental state.
3516    
3517            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
3518            /Extensions/importAPR/test/: New directories.
3519    
3520            * /Extensions/importAPR/samples/README: New: Howto load the samples.
3521    
3522            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
3523            file which refers to the Thuban Iceland demo data.
3524    
3525            * /Extensions/importAPR/test/README: New: Howto execute the tests.
3526    
3527            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
3528    
3529            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
3530            as in '.apr'-files.
3531    
3532            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
3533            ODB Objects as in '.apr', '.avl' and other files.
3534    
3535            * /Extensions/importAPR/__init__.py: New: Init to make this
3536            directory a package.
3537    
3538            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
3539            project file (.apr) and convert it to Thuban.
3540    
3541    2003-09-22  Jan-Oliver Wagner <[email protected]>
3542    
3543            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
3544    
3545    2003-09-19  Jan-Oliver Wagner <[email protected]>
3546    
3547            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
3548            with description on RPM installation and RPM binary package
3549            creation.
3550    
3551    2003-09-18  Bernhard Herzog  <[email protected]>
3552    
3553            * setup.py (data_files): Only add the mo files if the Locales
3554            directory actually exists, so that setup.py works with a fresh CVS
3555            checkout
3556    
3557    2003-09-12  Jan-Oliver Wagner <[email protected]>
3558    
3559            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
3560            in viewport, not anymore in view
3561    
3562    2003-09-04  Jan-Oliver Wagner <[email protected]>
3563    
3564            Introducing first Extension (gns2shp).
3565    
3566            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
3567    
3568            * Extensions/__init__.py: New. init to make this dir a package.
3569    
3570            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
3571    
3572            * Extensions/gns2shp/test/README: New. some info on this test directory.
3573    
3574            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
3575    
3576            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
3577            of Shapefile from GNS text file format
3578    
3579    2003-09-03  Jan-Oliver Wagner <[email protected]>
3580    
3581            Fix/workaround for bug #2019:
3582            https://intevation.de/rt/webrt?serial_num=2019
3583    
3584            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
3585            (IdentifyView.__init__): Added another button that allows to
3586            stop the identify mode.
3587            (IdentifyView.OnStop): New. Stops the identify mode.
3588    
3589    2003-09-03  Jan-Oliver Wagner <[email protected]>
3590    
3591            Introducing a new exception dialog that allows to exit the
3592            application immediately.
3593            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
3594    
3595            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
3596    
3597            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
3598            Made strings available to translations. Exchanged the simple
3599            ScrolledMessageDialog by the new ExceptionDialog.
3600    
3601    2003-09-01  Bernhard Herzog  <[email protected]>
3602    
3603            * NEWS: New. Summary of changes and release notes.
3604    
3605            * MANIFEST.in: Add NEWS
3606    
3607    2003-09-01  Bernhard Herzog  <[email protected]>
3608    
3609            * MANIFEST.in: Correct the include statement for the mo-files and
3610            include the documentation too.
3611    
3612            * setup.py (data_files): Add the .mo files
3613            (setup call): Up to version 0.9.0
3614    
3615    2003-09-01  Bernhard Herzog  <[email protected]>
3616    
3617            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
3618            parameter list to just parent and session
3619            (ChooseDBTableDialog.__set_properties): Removed. Setting the
3620            selection of empty list boxes is not allowed (and produces C++
3621            assertion errors) and the rest of the setup is better done in
3622            __init__ anyway.
3623            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
3624            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
3625            builtins True/False for booleans to avoid warnings from wxPython
3626    
3627            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
3628            ChooseDBTableDialog constructor parameters.
3629    
3630    2003-09-01  Bernhard Herzog  <[email protected]>
3631    
3632            * Thuban/Model/postgisdb.py
3633            (PostGISTable): Extend doc-string
3634            (PostGISTable._fetch_table_information): Set the column index
3635            correctly, pretending ignored columns don't exist.
3636    
3637            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
3638            for postgis tables with data types not yet supported by thuban.
3639    
3640    2003-08-29  Bernhard Herzog  <[email protected]>
3641    
3642            * HOWTO-Release: Tweak item about running the tests.
3643    
3644    2003-08-29  Jan-Oliver Wagner <[email protected]>
3645    
3646            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
3647    
3648    2003-08-29  Bernhard Herzog  <[email protected]>
3649    
3650            Add some missing parameters to projections. Proj complains about
3651            them on windows but for some reason not on Linux.
3652    
3653            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
3654            missing required projection parameters
3655    
3656            * test/test_proj.py (TestProjFile.test): Add missing required
3657            projection parameters
3658    
3659            * test/test_load_0_8.py (TestLayerProjection.file_contents)
3660            (TestLayerProjection.test): Add missing required projection
3661            parameters and tests for them
3662    
3663            * test/test_load.py (TestLayerProjection.file_contents)
3664            (TestLayerProjection.test): Add missing required projection
3665            parameters and tests for them
3666    
3667            * test/test_layer.py (TestLayer.test_base_layer): Add missing
3668            required projection parameters
3669    
3670    2003-08-29  Bernhard Herzog  <[email protected]>
3671    
3672            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
3673            access the pj_errno because directly accessing pj_errno doesn't
3674            work on windows if the proj library is in a DLL
3675    
3676            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
3677    
3678    2003-08-28  Bernhard Herzog  <[email protected]>
3679    
3680            * test/test_proj.py: Import things from Thuban after calling
3681            initthuban
3682    
3683            * test/test_load.py (LoadSessionTest.filenames): New class
3684            variable with the filename attributes to normalize
3685            (LoadSessionTest.check_format): Pass self.filenames to
3686            sax_eventlist to normalize the filename attributes
3687    
3688            * test/xmlsupport.py: Add cvs keywords
3689            (SaxEventLister.__init__): New parameter filenames which indicates
3690            attributes that contain filenames
3691            (SaxEventLister.startElementNS): Normalize the filename attributes
3692            with os.path.normpath
3693            (sax_eventlist): New parameter filenames to pass through to
3694            SaxEventLister
3695    
3696            * test/test_derivedshapestore.py: Make this file callable as a
3697            program to execute the tests
3698            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
3699            the session to self.session so that it gets destroyed properly
3700    
3701            * test/test_layer.py (TestLayer.tearDown): Call the session's
3702            Destroy method
3703    
3704            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
3705            too if it exists
3706            (TestMapAddLayer.test_add_layer): Bind the session to self.session
3707            so that it gets destroyed properly
3708    
3709            * test/postgissupport.py (reason_for_not_running_tests): Add a
3710            test for the existence of popen2.Popen4.
3711    
3712            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
3713            reliable way to destroy the sessions created in the test cases
3714            (SaveSessionTest.test_dbf_table): Bind the session to self.session
3715            so that it gets destroyed properly
3716            (SaveSessionTest.testLayerProjection): Bind the session to
3717            self.session so that it gets destroyed properly
3718    
3719            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
3720            sure that the session is destroyed properly
3721    
3722            * test/test_shapefilestore.py: Make this callable as a program to
3723            execute the tests
3724    
3725            * test/test_scalebar.py: Remove unnecessary import of _ from
3726            Thuban
3727    
3728            * test/support.py (print_garbage_information): Call initthuban
3729            here because it may be called indirectly from test cases that test
3730            test support modules which do not use anything from thuban itself
3731            (ThubanTestProgram.runTests): Remove unnecessary debug print
3732    
3733    2003-08-28  Bernhard Herzog  <[email protected]>
3734    
3735            * Thuban/version.py (longversion): Update to 0.9
3736    
3737            * Thuban/UI/mainwindow.py: Remove some unused imports
3738    
3739            * README: Add section about required additional software. Add date
3740            and revision CVS keywords
3741    
3742            * HOWTO-Release: Add item about the translations. Add date and
3743            revision CVs keywords and change formatting to match README a bit
3744            better
3745    
3746            * po/de.po: Update for 0.9
3747    
3748            * test/README: Tweak the wording a little because many tests are
3749            not really unittest.
3750    
3751    2003-08-27  Bernhard Herzog  <[email protected]>
3752    
3753            As preparation for the 0.9 release, switch thuban files to a
3754            non-dev namespace
3755    
3756            * Thuban/Model/save.py (SessionSaver.write_session): Write files
3757            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
3758            namespace
3759    
3760            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3761            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
3762    
3763            * test/test_save.py (SaveSessionTest.dtd)
3764            (SaveSessionTest.testEmptySession)
3765            (SaveSessionTest.testSingleLayer)
3766            (SaveSessionTest.testLayerProjection)
3767            (SaveSessionTest.testRasterLayer)
3768            (SaveSessionTest.testClassifiedLayer)
3769            (SaveSessionTest.test_dbf_table)
3770            (SaveSessionTest.test_joined_table)
3771            (SaveSessionTest.test_save_postgis): Update for new namespace
3772    
3773            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
3774            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3775            (TestLayerProjection.file_contents)
3776            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3777            (TestPostGISLayer.file_contents)
3778            (TestPostGISLayerPassword.file_contents)
3779            (TestLoadError.file_contents, TestLoadError.test): Update for new
3780            namespace
3781    
3782    2003-08-27  Bernhard Herzog  <[email protected]>
3783    
3784            Make the table interface distinguish between row ids (an integer
3785            that uniquely identifies a row) and row ordinals (a simple row
3786            count from 0 to NumRows() - 1)
3787    
3788            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
3789            (PostGISTable.RowOrdinalToId): New methods to conver between row
3790            ids and row ordinals
3791            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
3792            parameter row_is_ordinal to indicate whether the row parameter is
3793            the row id or the ordinal
3794    
3795            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
3796            (TransientTableBase.RowOrdinalToId)
3797            (AutoTransientTable.RowIdToOrdinal)
3798            (AutoTransientTable.RowOrdinalToId): Same new methods as in
3799            PostGISTable.
3800            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
3801            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
3802            Same new parameter as in PostGISTable.
3803    
3804            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
3805            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
3806            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
3807            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
3808            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
3809            parameter as in PostGISTable.
3810    
3811            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
3812            (DataTable.RowOrdinalToId): New methods to convert between row ids
3813            and row ordinals.
3814            (TableGrid.SelectRowById): New method to select a row based on its
3815            ID as opposed to its ordinal
3816            (DataTable.GetValue, TableGrid.OnRangeSelect)
3817            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
3818            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
3819            (LayerTableFrame.__init__): Convert between row ids and row
3820            ordinals as appropriate
3821    
3822            * test/postgissupport.py (PostGISDatabase.__init__): Add
3823            doc-string.
3824            (PostGISDatabase.initdb): The optional third item in a tuple in
3825            tables is now a (key, value) list with additional arguments to
3826            pass to upload_shapefile
3827            (upload_shapefile): New parameter gid_offset to allow gids that
3828            are not the same as the shapeids in the shapefile
3829            (PostgreSQLServer.get_default_static_data_db): Use the new
3830            gid_offset to make the gids in landmarks 1000 higher than the
3831            shapeids in the shapefile
3832    
3833            * test/test_viewport.py
3834            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
3835            new shapeids in the landmarks table
3836    
3837            * test/test_transientdb.py
3838            (TestTransientTable.run_iceland_political_tests)
3839            (TestTransientTable.test_transient_joined_table): Add tests for
3840            the new table methods and new keywords arguments.
3841    
3842            * test/test_postgis_db.py
3843            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
3844            (TestPostGISTable.test_read_value_row_count_mode)
3845            (TestPostGISTable.test_row_id_to_ordinal)
3846            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
3847            table methods and the new arguments
3848            (TestPostGISShapestorePoint.test_shapes_in_region)
3849            (TestPostGISShapestorePoint.test_shape_raw_data)
3850            (TestPostGISShapestorePoint.test_shape_points)
3851            (TestPostGISShapestorePoint.test_shape_shapeid)
3852            (TestPostGISShapestorePoint.test_all_shapes)
3853            (TestPostGISTable.test_simple_query)
3854            (TestPostGISTable.test_simple_query)
3855            (TestPostGISTable.test_simple_query)
3856            (TestPostGISTable.test_read_value)
3857            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
3858            shapeids in the landmarks table
3859    
3860            * test/test_memory_table.py
3861            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
3862            (TestMemoryTable.test_read_value_row_count_mode)
3863            (TestMemoryTable.test_row_id_to_ordinal)
3864            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
3865            table methods and the new arguments
3866    
3867            * test/test_dbf_table.py
3868            (TestDBFTable.test_read_row_as_dict_row_count_mode)
3869            (TestDBFTable.test_read_value_row_count_mode)
3870            (TestDBFTable.test_row_id_to_ordinal)
3871            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
3872            methods and the new arguments
3873    
3874    2003-08-26  Bernhard Herzog  <[email protected]>
3875    
3876            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
3877            more postgis specific but much faster method to get the bounding
3878            box
3879    
3880    2003-08-26  Bernhard Herzog  <[email protected]>
3881    
3882            * Thuban/Model/postgisdb.py (PostGISTable.Title)
3883            (PostGISShapeStore.AllShapes): Add these missing methods.
3884            (PostGISShapeStore.ShapesInRegion): No need to raise
3885            StopIteration. We can simply return
3886    
3887            * test/test_postgis_db.py (TestPostGISTable.test_title)
3888            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
3889            new methods
3890    
3891    2003-08-25  Bernhard Herzog  <[email protected]>
3892    
3893            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
3894    
3895            * test/test_postgis_db.py (PolygonTests): New class containing
3896            those tests from TestPostGISShapestorePolygon that can also be
3897            used to test MUTLIPOLYGON tables
3898            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
3899            so derive from that
3900            (TestPostGISShapestoreMultiPolygon): New class with tests for
3901            MUTLIPOLYGON tables
3902    
3903            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
3904            tables argument to have tuples with three items to override the
3905            WKT type used.
3906            (PostgreSQLServer.get_default_static_data_db): Use the above to
3907            create a polygon table with MUTLIPOLYGONs
3908            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
3909            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
3910            coords_to*
3911            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
3912            (wkt_converter): New. Map WKT types to converters
3913            (upload_shapefile): New parameter force_wkt_type to use a
3914            different WKT type than the default
3915    
3916    2003-08-25  Bernhard Herzog  <[email protected]>
3917    
3918            * Thuban/UI/application.py
3919            (ThubanApplication.run_db_param_dialog): New. Suitable as a
3920            db_connection_callback. Main difference is that the dialog run
3921            from this method doesn't have a parent so it can be used even when
3922            there is no main window
3923            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
3924            no db_connection_callback was given. This way the dialog pops up
3925            even when the .thuban file was given as a command line parameter.
3926    
3927    2003-08-25  Bernhard Herzog  <[email protected]>
3928    
3929            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
3930            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
3931            which leads to an effectively frozen X session because the user
3932            can only interact with the dialog but the mouse is still grabbed
3933            by the canvas.
3934            Also, call the tool's Hide method before MouseLeftUp because
3935            MouseLeftUp may change the tool's coordinates.
3936    
3937    2003-08-25  Bernhard Herzog  <[email protected]>
3938    
3939            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
3940            LoadCancelled exceptions and handle them by returning immediately.
3941    
3942    2003-08-25  Bernhard Herzog  <[email protected]>
3943    
3944            GUI part of loading sessions with postgis connections which may
3945            require user interaction to get passwords or updated parameters
3946    
3947            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
3948            bit nucer and be more generic.
3949            (DBFrame.OnAdd): Adapt to new DBDialog interface
3950    
3951            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
3952            optional parameter db_connection_callback which is passed to
3953            load_session.
3954    
3955            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
3956            Suitable as a db_connection_callback
3957            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
3958            db_connection_callback of the application's OpenSession method
3959    
3960    
3961    2003-08-25  Bernhard Herzog  <[email protected]>
3962    
3963            Basic loading of sessions containing postgis connections:
3964    
3965            * Thuban/Model/load.py (LoadError): Add doc-string
3966            (LoadCancelled): New exception class to indicate a cancelled load
3967            (SessionLoader.__init__): Add the db_connection_callback parameter
3968            which will be used by the loader to get updated parameters and a
3969            password for a database connection
3970            (SessionLoader.__init__): Add the new XML elements to the
3971            dispatchers dictionary
3972            (SessionLoader.check_attrs): Two new conversions, ascii to convert
3973            to a byte-string object and idref as a generic id reference
3974            (SessionLoader.start_dbconnection)
3975            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
3976            elements
3977            (load_session): Add the db_connection_callback to pass through the
3978            SessionLoader
3979    
3980            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
3981            New classes to test loading of sessions with postgis database
3982            connections.
3983    
3984    2003-08-25  Bernhard Herzog  <[email protected]>
3985    
3986            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
3987            replace it and the comment with __BuildDate__ by the Source: and
3988            Id: cvs keywords as used in the other files.
3989    
3990    2003-08-25  Bernhard Herzog  <[email protected]>
3991    
3992            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
3993            LoadError when a required attribute is missing. The code used to
3994            be commented out for some reason, but probably should have been
3995            active.
3996    
3997            * test/test_load.py (TestLoadError.test): Test the message in the
3998            LoadError too to make sure it really is about the missing
3999            attribute
4000    
4001    2003-08-22  Bernhard Herzog  <[email protected]>
4002    
4003            * test/test_save.py (SaveSessionTest.test_dbf_table)
4004            (SaveSessionTest.test_joined_table): Add XML validation tests.
4005    
4006    2003-08-22  Bernhard Herzog  <[email protected]>
4007    
4008            Implement saving a session with a postgis connection
4009    
4010            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
4011            elements for database connections and shapestores using db
4012            connections
4013            (session): Add the dbconnections to the content model
4014    
4015            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
4016            Write the db connections
4017            (SessionSaver.write_session): Call write_db_connections to write
4018            the connection before the data sources
4019            (SessionSaver.write_data_containers): Handle postgis shapestores
4020    
4021            * test/test_save.py (SaveSessionTest.thubanids)
4022            (SaveSessionTest.thubanidrefs): Update for new DTD
4023            (SaveSessionTest.test_save_postgis): New. Test saving a session
4024            with postgis connections
4025    
4026            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
4027            (PostGISTable.TableName): New accessor methods for the connection
4028            and table name
4029    
4030            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
4031            (TestPostGISTable.test_dbname): New methods to test the new
4032            PostGISConnection methods
4033    
4034    2003-08-22  Bernhard Herzog  <[email protected]>
4035    
4036            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
4037            for exceptions occurring when establishing a Database connection
4038            (PostGISConnection.connect): Catch psycopg.OperationalError during
4039            connects and raise ConnectionError.
4040    
4041            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
4042            tests for database exceptions
4043    
4044    2003-08-22  Bernhard Herzog  <[email protected]>
4045    
4046            Prepare the test suite for tests with required authentication
4047    
4048            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
4049            variables with two predefined users/passwords, one for the admin
4050            and one for a non-privileged user.
4051            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
4052            the non-privileged user to the database and set the admin password
4053            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
4054            Better error reporting
4055            (PostgreSQLServer.connection_params)
4056            (PostgreSQLServer.connection_string): New methods to return
4057            information about how to connect to the server
4058            (PostgreSQLServer.execute_sql): New. Convenience method to execute
4059            SQL statements
4060            (PostgreSQLServer.require_authentication): Toggle whether the
4061            server requires authentication
4062            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
4063            Add or alter users
4064            (PostGISDatabase.initdb): Pass the admin name one the
4065            subprocesses' command lines. Grant select rights on
4066            geometry_columns to everybody.
4067            (upload_shapefile): Use the admin name and password when
4068            connecting. Grant select rights on the new table to everybody.
4069    
4070            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
4071            server's new methods to get the connection parameters.
4072    
4073            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
4074            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
4075            server's new methods to get the connection parameters.
4076    
4077            * test/test_postgis_db.py
4078            (TestPostGISConnection.test_gis_tables_empty)
4079            (TestPostGISConnection.test_gis_tables_non_empty)
4080            (PostGISStaticTests.setUp): Use the server's new methods to get
4081            the connection parameters.
4082    
4083    2003-08-22  Bernhard Herzog  <[email protected]>
4084    
4085            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
4086    
4087            * Thuban/version.py: Add psycopg version
4088    
4089            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
4090            version of the psycopg module
4091    
4092    2003-08-22  Bernhard Herzog  <[email protected]>
4093    
4094            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
4095            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
4096            at the moment. The functionality should probably be implemented
4097            some time, though.
4098            (DBFrame.OnRemove): Display a message if the connection can't be
4099            removed because it's still in use.
4100    
4101  2003-08-22  Jan-Oliver Wagner <[email protected]>  2003-08-22  Jan-Oliver Wagner <[email protected]>
4102    
4103          * Thuban/UI/about.py (About.__init__): split up the huge about          * Thuban/UI/about.py (About.__init__): split up the huge about
# Line 756  Line 4856 
4856    
4857          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
4858          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
4859          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
4860          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
4861    
4862          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
# Line 1871  Line 5971 
5971          Fix problem of hidden properties dialog under windows after double          Fix problem of hidden properties dialog under windows after double
5972          click on layer tree:          click on layer tree:
5973          The tree control always gets an Expanded / Collapsed event after          The tree control always gets an Expanded / Collapsed event after
5974          the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply          the ItemActivated  on double click, which raises the main window again.
5975            We add a second ItemActivated event to the queue, which simply
5976          raises the already displayed window.          raises the already displayed window.
5977    
5978          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable

Legend:
Removed from v.1629  
changed lines
  Added in v.2472

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26