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

Legend:
Removed from v.1745  
changed lines
  Added in v.2333

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26