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

Legend:
Removed from v.1582  
changed lines
  Added in v.2462

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26