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

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

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

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26