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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26