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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26