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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26