/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26