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

Legend:
Removed from v.1655  
changed lines
  Added in v.2331

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26