/[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 1272 by jonathan, Fri Jun 20 16:43:13 2003 UTC revision 2331 by jschuengel, Mon Aug 9 11:42:52 2004 UTC
# Line 1  Line 1 
1    2004-08-09  Jan Sch�ngel  <[email protected]>
2    
3            * ChangeLog: Rewrite the last ChangeLog entry to follow
4            the standard way.
5    
6            * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
7            the function where it is needed, because it don't works if it stands
8            at the beginning.
9            (MF_Layer.__init__): Removed the extra numclassed variable. Now
10            numclasses from the mapscript will be used.
11            (MF_Layer.get_index): New. Return the index of the layer in mapfile.
12            (MF_Layer.set_classes): New. A Classlist will be set to the layer.
13            (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
14            (MF_Layer.remove_allclasses): New. All class of the layer will remove.
15            (MF_Map.create_new_layer): New. A new Layer is created and associated
16            with the mapscript object.
17            (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
18            the mapscript.
19            (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
20            linked to the layer in thuban, else the layerobject linked to the
21            thubanlayer will be used.
22            AnnotationLayer will now store the filename of the shapefile.
23            (MF_Map.remove_layer): If a layer is removed the associated object
24            must be set new.
25            
26            * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
27            layers which are exists in thuban to the mapobj. All removed Layers
28            will be removed from the mapobj.
29            Added comments to all functions.
30            (thuban_to_map): No layer will be removed here.
31            
32            * Extensions/umn_mapserver/mf_handle.py
33            (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
34            Layersettings for the mapserver kann be edited.
35    
36            * Extensions/umn_mapserver/mf_import.py: Now all layers which are
37            imported, will be linked with the associated MF_Layer.
38            (import_mapfile): All layers, which are not selected, will be removed.
39            Disable the "import layer from mapfile" menu option.
40    
41            * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
42            Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
43            layer on permanently.
44    
45    2004-08-03  Jan Sch�ngel  <[email protected]>
46    
47            * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
48            New. This function removes all metadata
49            (MF_Layer.set_group): New. Set the group setting.
50            (MF_Layer.get_group): New. Get the group setting.
51            (MF_Map): Removed the extra numlayers variable, used the mapscript
52            parameter instead.
53            (MF_Map.get_numlayers): New. This get numlayers.
54            (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
55            (MF_Map.add_thubanlayer): Replaced the exception handling by a check
56            if the object is an instance. Also added the annotation layer here to
57            export, but only the layer is created in the mapfile.
58    
59            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
60            the check if a mapobj exist, because its not needed anymore. The
61            export function is only available if a mapobj exist.
62            Use the new function to remove all layers.
63            
64            * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
65            option and the metadata button. The layer dialog is temporary disabled.
66            (Metadata_CustomDataTable): Added some functions to show the grid
67            correct.
68    
69            * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
70            the number of layer from import_mapfile to this function.
71            (AnnotationLayer): New. This Class shows the Annotation layer in
72            thuban. The layer don't do anything. It's only to show the layer
73            and to save the layer order.
74            (add_annotationlayer): New. Import an annotation layer to thuban.
75            (select_layer2import): New. Import only layers to thuban and not
76            the other settings like projection or scalebar.
77            (create_new_mapfile): Moved the _has_umn_mapobj function and the
78            create_new_mapfile functions from mf_handle.py to mf_import.py.
79            
80            * Extensions/umn_mapserver/sample/iceland.map: Added the group
81            parameter to the roads and cultural layers. Also added a new
82            Annotation Layer for the cultural points.
83    
84            * Extensions/umn_mapserver/sample/iceland.html: Added the select
85            option for the annotation layer.
86    
87            * Extensions/umn_mapserver/sample/index.html: Added the start
88            parameter for the annotation layer.
89    
90    2004-08-01  Jan-Oliver Wagner <[email protected]>
91    
92            * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
93            translation completed.
94    
95            * Doc/manual/thuban-manual.xml (Chapter Session Management):
96            Fixed unprecise description for Save Session.
97    
98    2004-07-31  Jan-Oliver Wagner <[email protected]>
99    
100            Started translation of Users Manual into german.
101    
102            * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
103    
104            * Doc/manual/Makefile: Added build instructions for german
105            users manual.
106    
107            * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
108    
109    2004-07-28  Jan Sch�ngel  <[email protected]>
110    
111            * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
112            functions. Now all metadata will handle by the function and its not
113            needed to initialize it from outside. Therefor the associated mapobj
114            will be stored in the Metadata Object. So we can use the special
115            functions from the associated mapobj to get the Metadata.
116            Therefor all initialization code for the metadata is removed from the
117            other classes.
118            (MF_Layer): Added a function to get the metadata object.
119            (MF_Map): Added a function to set the mappath, the path where
120            the mapfile ist stored.
121    
122            * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
123            to set the extent in the mapfile. Now the code is set by the displayed
124            data in the Thuban-view.
125            (export_mapfile): The shapepath is now set empty, until relative
126            pathnames are supported.
127    
128            * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
129            metadata. Yet only mapfile metadata are supported. Layer and class
130            supported are not implemented.
131            Added a dialog to handle layer informations. The dialog only shows the
132            selected layer at the moment.
133    
134            * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
135            code for setting the extent in thuban. Now the extent is set to the
136            given extent from the mapfile.
137            Fixed a logical mistake. Now the extent is set when realy a layer is
138            loaded, and not if one is selected to load.
139    
140            * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
141            move the shown map in the browser.
142    
143            * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
144            line to the mapobj and added metadata to the political layer.
145    
146            * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
147            for Metadata.
148    
149    2004-07-26  Martin Schulze  <[email protected]>
150    
151            * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
152            ClassMapper
153    
154            * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
155            case for the new ClassMapper
156    
157    
158    2004-07-22  Bernhard Herzog  <[email protected]>
159    
160            * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New.  Return the
161            visible extent of the map in projected coordinates
162    
163            * test/test_viewport.py (SimpleViewPortTest.test_default_size)
164            (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
165            tests.
166            (SimpleViewPortTest.test_visible_extent): New. The real test for
167            VisibleExtent()
168    
169    2004-07-22  Bernhard Herzog  <[email protected]>
170    
171            * test/test_viewport.py: Use support.run_tests as the main
172            function when running asa script.
173    
174    2004-07-22  Jan Sch�ngel <[email protected]>
175    
176            * Extensions/umn_mapserver/mf_export.py: Added "import os"
177            Removed the old "import Thuban.UI.mainwindow" code.
178            (tbextent_to_map): Removed the extra function and at the code direct
179            to "thuban_to_map" function.
180            (write_creatorcomment): Added. Now a short comment is added to the
181            beginning of an generated mapfile.
182            (export_mapfile): Now the Path and filename are saved in to variables,
183            and not together in one variable. This is needed for the new
184            write_creatorcomment function.
185                    
186            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
187            import module "re". Also added Range and the ClassGroupRange import
188            from Thuban. Both are needed for the new range expression import.
189            (create_rangeexpression): Added. Creates a Range Expression in Thuban
190            style from a given mapfile expression.
191            (added_rasterlayer): Make some small code changes. The shapepath is
192            now stored in an extra variable and the clazz_name is set empty if no
193            class name set in the mapfile.
194            Changed the Error message for Range Expressions, becaus the new
195            function create a error string which will be shown in the dialog.
196    
197            * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
198            range expression import.
199    
200    2004-07-21  Jan-Oliver Wagner <[email protected]>
201    
202            * Extensions/umn_mapserver/README: Added hint that
203            installation as root can be avoided. Removed all tabs.
204    
205    2004-07-16  Bernhard Herzog  <[email protected]>
206    
207            * test/test_viewport.py
208            (ViewPortTest.test_changing_map_projection): Check that changing
209            the projection of an empty map shown in a viewport doesn't lead to
210            exceptions in the viewport's handler for the
211            MAP_PROJECTION_CHANGED messages
212    
213            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
214            try to keep the same region visible when the map actually contains
215            something
216    
217    2004-07-15  Jan Sch�ngel <[email protected]>
218    
219            * Extensions/umn_mapserver/mapfile.py: Added a function to get the
220            mappath directly from the mapobj. Is needed because of the changes
221            in mf_import.py.
222            (MF_Layer.add_thubanclass): Added a new comment.
223            (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
224            mapobj is empty there is no extent get from thuban an so no one can
225            set to th mapobj.
226            
227            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
228            the discription.
229            Split the funktion in to three smaller ones. The new functions are
230            add_rasterlayer, add_polygonlayer and select_layer2import.
231            Removed the mapfilepath and filepath initialisation, because its know
232            include in the new functions.
233            Now nothing will be imported if cancel is pressed in the
234            layer choice dialog.
235    
236    2004-07-14  Jan Sch�ngel <[email protected]>
237    
238            * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
239            import.
240            (MF_Symbolset): Removed the extra variable for numsymbols.
241            (MF_Class.__init__): Added a comment to the exception clause.
242            Removed the extent init, because it was not needed anymore.
243            (MF_Layer.add_thubanclass): Added the code to set the class name to
244            the expression value from thuban if no label is defined.
245            Added the code to export Range expressions from thuban to the mapfile.
246            (MF_Map.set_extent): Removed the exception and replace it by some if
247            code. If the size of a map is not defined the size will be set to 1,1.
248            This is necessary because if the extent is set, mapscript checks if
249            the size is greater than zero.
250            (MF_Web): Added the get and set function for the template.
251    
252            * Extensions/umn_mapserver/mf_export.py: Added the function to check
253            if a mapobject exists and used it to set the status of the menu items.
254            If no mapfile exists the settings could not be edditied.
255            Define after which menuitem the exportitem will include.
256            
257            * Extensions/umn_mapserver/mf_handle.py: Removed the import
258            Thuban.UI.mainwindow clause, because it is not needed.
259            Added the command Refresh() to all "OnChangeColor()" functions,
260            because the color preview window was not updated on a color change.
261            Added the function to check if a mapobject exists and used it to set the
262            status of the menu items. If no mapobject exists the settings could not
263            be edditied.
264            (Map_Dialog): Moved the imagetype selector from the
265            Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
266            (Web_Dialog): Removed the name label and added the template textbox.
267    
268            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
269            the exception handling on loading the layers by an if statement. It
270            is not necessary to us the exception there.
271            The Filepath creation now use os.path.join to build the path.
272    
273            * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
274            definition from global to the setUp function. Now the testMap will
275            initialize new on each test.
276    
277            * Extensions/umn_mapserver/sample/iceland.map: Include three new
278            classes in the Line Layer, to test logical Expressions.
279            Set the status of the class "Point9" in the Point Layer to off
280            
281    2004-07-13  Bernhard Herzog  <[email protected]>
282    
283            * Thuban/UI/baserenderer.py
284            (BaseRenderer.render_map_incrementally): Fix a logic bug in the
285            optimization that tries not to draw layers under a raster layer.
286            The bug was harmless.  All it effectively did was to produce The a
287            strange messages about not being able to draw Layer instances for
288            all vector layers below a raster layer which would be invisible
289            anyway because the raster layer currently always covers the entire
290            window
291    
292    2004-07-08  Jan Sch�ngel <[email protected]>
293    
294            * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
295            a list of supported outputformats. This formats are not alle supported
296            because there is no possibility to get the outputformat without the
297            name known. Make some formal changes to the code.
298            (MF_Map.set_name()): Fixed a bug if the name is None.
299    
300            * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
301            statement, because its not needed anymore. The Outputformat is now
302            given as string from the object. Make some formal changes to the code.
303    
304            * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
305            most of the new setting which were added during the last changes.
306            Removed the MF_Size Test.
307            
308            * Extensions/umn_mapserver/test/test.map: Added a new class to the
309            cultural Layer to test expressions and the the status of that layer
310            from on to default.
311            Changed the data path the the correct Thuban Data
312            Added the Outputformat Object and Symbol Object
313            
314    2004-07-07  Jan Sch�ngel <[email protected]>
315    
316            * Extensions/umn_mapserver/mapfile.py: Added some new
317            settings to edit (outputformat, label, imagetype)
318    
319            * Extensions/umn_mapserver/mf_handle.py: Added some setting to
320            the Label Dialog and add the OutputDialog.
321            Make some changes to the code order.
322    
323    2004-07-06  Jan Sch�ngel <[email protected]>
324    
325            * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
326            and line Obj and add the scalebar_status_type, scalebar_style_type and
327            scalebar_position_type.
328            Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
329            are only used to create a Symbol like the circle in Thuban.
330            Added the scalebarObject (MF_Scalebar)
331            (MF_Class): Added set_status and get_status.
332            (MF_Layer.add_thubanclass): Added code to set the class status
333            (MF_Map): Added code to handle the symbols and scalebar
334            (MF_Label): Added the set_partials and get_partials functions
335            
336            * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
337            from mapfile. Added a function to create a circle object like the one
338            from thuban if no one exists.
339            
340            * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
341            press ok in the assosiated dialog and not at the end of the
342            colordialog.
343            Added the Dialog for the Scalebar.
344            (Label_Dialog): Added the offset option
345    
346            * Extensions/umn_mapserver/mf_import.py: Added code to import the
347            status of the Classes.
348            Fixed a bug with the projection. Now the to_meter parameter will be
349            added to the Projection only if it doesn't exists.
350    
351    2004-07-01  Jan Sch�ngel <[email protected]>
352    
353            Added the functionality to handle the content thuban is not
354            able to handle directly.
355    
356            * Extensions/umn_mapserver/mf_handle.py: New. This module extents
357            Thuban with the possibility to edit the mapfile content.        
358            
359            * Extensions/umn_mapserver/mf_import.py: Added the possibility
360            to import mapfiles without any layer selected. So it is possible
361            to edit the other settings in a mapfile.
362            (import_mapfile): Added code to use the editing functions.
363            Added the possibility to import the projection to a layer if one
364            is defined.
365            Status settings (On,Off) will now set in thuban (visible, invisible).
366            fixed a bug with with classnames. If no classname is set in mapfile
367            the value in Thuban will set to the expression.
368            
369            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
370            possibility to save a new mapfile or use the old one which is
371            imported or new created.
372            Added code to use the editing functions.
373            Remove some not needed import statements
374    
375            * Extensions/umn_mapserver/mapfile.py: Added new types which are
376            need for the editing functions.
377            Added needed set-functions for the editing functions.
378            Added the possibility to export rasterimages.
379            Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
380            MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
381            moment.
382            (MF_Class.set_thubanstyle): Now point layers will set to a default
383            symbol to show a circle in mapserver and not only a 1px dot.
384            (MF_Style.__init__): Fixed a bug with the color. Color was not set
385            correct before.
386            (MF_Size): Removed, because it is not needed.
387            
388            * Extensions/umn_mapserver/README: Added the hints to use the
389            export and editing functions, too.
390    
391            * Extensions/umn_mapserver/sample/iceland.map: Added the
392            new parameter "UNITS METERS".
393            Change the political layer to status OFF.
394    
395            * Extensions/umn_mapserver/sample/README: Added some
396            more details to setup the sample in the MapServer.
397            
398    2004-06-26  Bernhard Reiter <[email protected]>
399    
400            * Extensions/svgexport/test/test_svgmapwriter.py:
401            Removed class VFile and used standard StringIO instead.
402    
403    2004-06-23  Jan Sch�ngel  <[email protected]>
404    
405            Add the export function to the umn_mapserver extension.
406    
407            * Extension/umn_mapserver/mf_export.py: New. This module extents
408            Thuban with the possibility to export the Thuban content.
409    
410            * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
411            with the export module. Especially added the possibility to
412            add thuban objects directly to the map objects.
413    
414            * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
415            because of the hint from Bernhard Herzog.
416            Corrected the handling of absolute pathnames.
417            Changed the Text of the Menu-Item, now the beginning is upper case.
418    
419            * Extensions/umn_mapserver/README: Added the --with-tiff statement.
420    
421    2004-06-16  Jan Sch�ngel  <[email protected]>
422    
423            Add a sample and make some changes.
424    
425            * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
426            import from * to explicit used statements. Changed the
427            Thuban.UI.mainwindow import phrase, too.
428            (import_mapfile):Corrected a clerical mistake.
429            Added wxCHANGE_DIR in OpenFile Dialog.
430            Added a MultipleChoiceDialog, to select the layers to load from
431            mapfile into thuban. Thereby the projection is only set if one layer
432            is selected.
433            Added the possibility to handle relative pathnames which uses
434            up-level references.
435            Removed some doubled code.
436            Corrected an error with integer values used as label in thuban
437            ClassGroup.
438            
439            * Extensions/umn_mapserver/sample: New.
440    
441            * Extensions/umn_mapserver/sample/README: New. Describes the
442            usage of the sample files.
443    
444            * Extensions/umn_mapserver/sample/iceland.map: New. This is
445            a suitable .map-file for the iceland data.
446    
447            * Extensions/umn_mapserver/sample/index.html: New. The template
448            for the mapfile.  
449    
450            * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
451            file for the Iceland Application on web.
452    
453            * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
454            some details.
455    
456            * Extensions/umn_mapserver/test/test_mapserver
457            (mapserver_import_Test_generalClasses.test_MF_Color):
458            Corrected the thubancolor test.
459    
460    2004-06-15  Jan Sch�ngel  <[email protected]>
461    
462            * Extensions/umn_mapserver/README: New. Install instruction.
463    
464    2004-06-14  Bernhard Reiter <[email protected]>
465    
466            * libraries/thuban/cpl_mfile.h: Added copyright header.
467    
468            * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
469            Free Software License so that it is most useful with gdalwarp
470            and bmpdataset.
471    
472    2004-06-14  Bernhard Herzog  <[email protected]>
473    
474            * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
475            import of wxPython.wx itself (as opposed to the contents of
476            wxPython.wx).  For some reason wxPython.wx is available as
477            wxPython.wx.wx in at least some 2.4 releases.  Fixes RT#2482
478            wrt. wxPython 2.4.
479    
480    2004-06-10  Jan Sch�ngel  <[email protected]>
481    
482            Initial version of new extension "umn_mapserver".  This extension aims
483            to manage configuration for the UMN MapServer application.  This
484            inital version just imports the .map-files and displays all, Thuban is
485            capable of.
486    
487            * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
488    
489            * Extensions/umn_mapserver/test/README: New. Describes how to run the
490            tests.
491    
492            * Extensions/umn_mapserver/test/test.map: New. This is a test
493            .map-file for automated tests of the umn_mapserver extension of
494            Thuban.
495    
496            * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
497            UMN Mapserver classes.
498    
499            * Extensions/umn_mapserver/__init__.py: New. Init to make this
500            directory a package.
501    
502            * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
503            '.map'-file objects.
504    
505            * Extensions/umn_mapserver/mf_import.py: New. This module extends
506            Thuban with the possibility to handle UMN MapServer mapfiles.
507    
508    2004-06-03  Bernhard Herzog  <[email protected]>
509    
510            * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
511            to a tuple before using it as arguments to the % operator.  This
512            fixes the formatting issue filed in RT#2239 on 2004-01-13 and
513            reported today on thuban-list by Jan Sch�ngel
514    
515            * test/test_layer.py (TestLayerModification.setUp): Save the
516            filename as an instance variable so we can refer to it in tests
517            (TestLayerModification.test_tree_info): Uncomment this method
518            again and make it work.  This tests for the formatting issue
519            filed in RT#2239 on 2004-01-13
520    
521    2004-05-28  Bernhard Herzog  <[email protected]>
522    
523            * Thuban/UI/baserenderer.py: Fix some typos.
524    
525    2004-05-18  Jan-Oliver Wagner <[email protected]>
526    
527            * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
528            by increasing a field size.
529    
530    2004-05-17  Bernhard Herzog  <[email protected]>
531    
532            Update to newest shapelib and get rid of Thuban specific
533            extensions, i.e. use the new DBFUpdateHeader instead of our
534            DBFCommit kludge
535    
536            * libraries/shapelib/shpopen.c: Update to version from current
537            shapelib CVS.
538    
539            * libraries/shapelib/shapefil.h: Update to version from current
540            shapelib CVS.
541    
542            * libraries/shapelib/dbfopen.c: Update to version from current
543            shapelib CVS.
544            (DBFCommit): Effectively removed since shapelib itself has
545            DBFUpdateHeader now which is better for what DBFCommit wanted to
546            achieve.  
547            We're now using an unmodified version of dbfopen.
548    
549            * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
550            value '1' to the Lib.dbflibc extension.  This simply reflects the
551            shapelib and pyshapelib updates
552    
553    2004-05-16  Jan-Oliver Wagner <[email protected]>
554    
555            Finished introduction of Menu.FindOrInsertMenu.
556    
557            * Extensions/drawshape/drawshape.py: Add the command
558            to the experimental menu additionally to the toolbar.
559    
560            * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
561            finding menu on its own.
562    
563            * Doc/manual/thuban-manual.xml: updated sample file
564            to use FindOrInsertMenu().
565    
566            * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
567            instead of finding menu on its own.
568    
569    2004-05-11  Jan-Oliver Wagner <[email protected]>
570    
571            * test/test_menu.py (MenuTest.test): Added testing
572            of method Menu.FindOrInsertMenu.
573    
574    2004-05-10  Jan-Oliver Wagner <[email protected]>
575    
576            Introduce and use Menu.FindOrInsertMenu.
577    
578            * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
579              given menu or, if not found, insert it.
580    
581            * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
582            /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
583            /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
584            menu on its own.
585    
586    2004-05-06  Jan-Oliver Wagner <[email protected]>
587    
588            Introduce a abstract ColorDialog class and remove
589            and outdated file.
590    
591            * Thuban/UI/proj4dialog.py: Removed. It is has been
592            replaced by projdialog for quite a while and is not used
593            anymore.
594    
595            * Thuban/UI/colordialog.py: New. Abstraction for color selection
596            dialog(s).
597    
598            * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
599            Now calls the abstract ColorDialog instead of wxColourDialog.
600            This also removed the dependency to Color class conversion
601            from this function.
602    
603    2004-05-04  Frank Koormann  <[email protected]>
604    
605            * Extensions/bboxdump/__init__.py: Fixed string left over from
606            copying.
607    
608            * Extensions/bboxdump/bboxdump.py (bboxdump):
609            Use layer.ShapeStore().AllShapes() to loop over shapes instead of
610            xrange(layer.NumShapes()). Compile the bboxmessage from a list
611            of formatted outputs (string.join) instead of appending to the
612            message. Two progress bar dialogs to report progress on the sometimes
613            lenghty processing.
614    
615    2004-04-22  Frank Koormann  <[email protected]>
616    
617            New Extension to dump bounding boxes of all shapes of the selected
618            layer. An optional column can be specified to group the objects,
619            in this case the bounding box is a union of the separate boxes.
620            Dump can be displayed in a ScrolledMessageDialog or written to file.
621            The Extension is simply a combination of available and well tested
622            Thuban functionality.
623    
624            * Extensions/bboxdump/__init__.py: New: Init to make this
625            directory a package.
626    
627            * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
628            all shapes of the selected layer.
629    
630    2004-04-22  Jan-Oliver Wagner <[email protected]>
631    
632            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
633            strings to be i18n now.
634    
635    2004-04-18  Jan-Oliver Wagner <[email protected]>
636    
637            Changing popup menu of legend from direct building
638            to using the Menu construction as used for the mainwindow.
639    
640            * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
641            layer_to_bottom, layer_visibility
642            (MainWindow.LayerToTop): New. Put current layer to the top.
643            (MainWindow.LayerToBottom): New. Put current layer to bottom.
644            (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
645            Replace 1,0 by True, False.
646            (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
647            current layer.
648            (MainWindow.LayerShowTable): Removed raising of dialog.
649            (_has_selected_layer_visible): New. Support function.
650    
651            * Thuban/UI/legend.py: ID_POP_xxx: removed.
652            (LegendPanel.__init__): Removed EVT_MENU bindings.
653            (LegendTree._OnRightClick): Replace direct creation of
654            menu via wx Classes by applying the menu definition
655            as of Menu class of menu.py.
656            
657    2004-04-16  Jan-Oliver Wagner <[email protected]>
658    
659            * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
660        button string to stronger clearify that Thuban will be closed when hitting
661            the button.
662    
663            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
664            Now for layers without a ShapeStore a corresponding message is given
665            to the user, that this layer has no table to show.
666    
667    2004-04-15  Martin Schulze  <[email protected]>
668    
669            * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
670            recalculate the format for the internal render engine as well.
671    
672            * Extensions/wms/properties.py (wmsProperties): First start for a
673            properties dialog.  It's functional for a first selection of
674            layers, but still has some weired wxWidgets/GTK problems but
675            beautification can be done later.
676    
677            * Extensions/wms/layer.py: Added more documentation
678            (WMSLayer.getFormats): New: Return list of supported image formats
679            by the WMS server
680            (WMSLayer.getLayers): New: Return the list of layer names
681            supported by the WMS server
682            (WMSLayer.getLayerTitle): New: Return the title of the named layer
683            (WMSLayer.getWMSFormat): New: Return the image format that is used
684            for WMS GetMap requests
685            (WMSLayer.setWMSFormat): New: Set the image format that is used
686            for WMS GetMap requests
687            (WMSLayer.__init__): Move away from using only one layer to using
688            a list of layers (unsorted at the moment, though).
689            (WMSLayer.getVisibleLayers): New: Return the list of names for all
690            visible layers
691            (WMSLayer.setVisibleLayers): New: Set the list of names for all
692            visible layers
693    
694            * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
695            order to establish a clean structure.
696    
697            * Extensions/wms/layer.py: Moved the WMS layer into a file on its
698            own in order to establish a clean structure.
699    
700    2004-04-13  Martin Schulze  <[email protected]>
701    
702            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
703            support for oldstyle (WMS 1.0 apparently) image format
704            specification.
705    
706            * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
707            supported graphic formats back to JPEG and BMP, PNG and others are
708            too *cough* experimental...  Sorry, I meant to filter this out
709            before I committed this part.  This should make the WMS extension
710            run from CVS again.
711            (wms_dialog): Reset an empty URL to None so that the subsequent
712            program can depend on this, since the dialog will indeed return an
713            empty URL, causing another declaration of love by Python.
714    
715            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
716            Whenever a native BoundingBox request cannot be fulfilled, check
717            whether the requested SRS is EPSG:3426, in which case return the
718            LatLonBoundingBox values.
719    
720            * Extensions/wms/test/test_parser.py
721            (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
722            ignoring AUTO:* SRS.
723            (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
724            Added another test method to test whether the LatLonBoundingBox
725            values will be returned if BoundingBox values are requested with
726            SRS set to EPSG:3426.
727    
728            * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
729            Added rudimentary support for non-EPSG SRS, i.e. ignore them for
730            the moment by placing them into a variable which is currently
731            unused.  Also test whether the EPSG SRS is numerical as it should
732            be and add an error message if it is not.
733    
734            * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
735            appear in the real world as well.  Since we cannot handle them yet
736            (OGCLib can't either), we will ignore them for the moment.
737    
738            * Extensions/wms/parser.py: Use a variable for denoting the sample
739            filename
740            (WMSCapabilitiesParser.peekLayers): Added support for error
741            messages during grok().  They will be aggregated in an array and
742            may be displayed later.  We may have to add a classification
743            "Warning" and "Error" to this.  That requires more experience,
744            though, since not every error may be lethal.
745    
746            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
747            ShowTable() dialog/frame when the user attempts to display it
748            while it has been opened before already and not closed again.
749    
750    2004-04-11  Martin Schulze  <[email protected]>
751    
752            * Extensions/wms/infodialog.py: Adjusted the class documentation
753    
754            * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
755            Switch to using Thuban{Begin,End}BusyCursor instead of the pure
756            wxWidgets variants.
757            (WMSLayer.__init__): The epsg_id variable is named top_srs now.
758    
759            * Extensions/wms/infodialog.py: Added an information dialog that
760            will display various information about the WMS current resource,
761            so that additional information such as the title, the abstract,
762            fees and access constraints can be displayed for the user if they
763            are documented in the WMS XML.
764    
765    2004-04-10  Martin Schulze  <[email protected]>
766    
767            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
768            string handling.  It's "foo".lower() and not lower(foo) without
769            lower imported from strings or something.
770    
771            * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
772            from capabilities.py and parser.py.  Implement priority list for
773            supported graphics formats, take care of wbmp != bmp.  PNG, TIFF
774            and GIF are supported here, but not yet by main Thuban.  Hence,
775            support for them may be removed later.  Special contribution to
776            usability: get wxWidgets to change the cursor when we're waiting
777            for data from the network so the user won't start to worry.  This
778            causes a redrawing error/warning, though.
779    
780            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
781            the DOM object.
782    
783    2004-04-01  Martin Schulze  <[email protected]>
784    
785            * Extensions/wms/capabilities.py: Adjusted documentation
786            (WMSCapabilities.__init__): Improved documentation, fixed syntax
787            (WMSCapabilities.saveCapabilities): Only catch IOError when
788            handling files
789            (WMSCapabilities.loadCapabilities): Only catch IOError when
790            handling files
791            __main__: corrected variable naming
792            (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
793            class a specialisation of WMSCapabilitiesParser as well.  Also
794            execute grok() after loading or fetching capabilities, if that
795            went well, so that subsequent calls can already access the data.
796            (WMSCapabilities.getVersion): Export the used version of the
797            GetCapabilities request, so we can use it for subsequent calls,
798            i.e. for GetMap requests.
799            (WMSCapabilities.fetchCapabilities): Added proper error handling
800            when the GetCapabilities request failed, so that the surrounding
801            program can act accordingly.
802    
803    2004-03-30  Martin Schulze  <[email protected]>
804    
805            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
806            Adjusted the getLayerSRS method to return the list of SRSes
807            extracted from <SRS> elements instead of <BoundingBox> elements.
808            Added a bit of documentation as well.
809            (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
810            since it was only implemented due to a misunderstanding.
811    
812            * Extensions/wms/test/test_parser.py
813            (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
814            reflect the corrected interpretation of the standard: i.e. a layer
815            does not have to define a BoundingBox for all SRSes it supports.
816            Hence the <SRS></SRS> specification is authoritative, not the list
817            of BoundingBoxes.
818            (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
819            to ensure None is returned for a non-existing SRS.
820            (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
821            since it is not applicable anymore.  Listing more SRSes in <SRS>
822            elements is valid according to the specs.
823    
824    2004-03-26  Bernhard Reiter <[email protected]>
825    
826            * README: Nicer formatting of text. Improved descriptions.
827            Reflected wxWidgets name change.
828            
829            * Thuban/UI/about.py: Extended copyright to 2004 and added
830            information about the thuban-devel mailinglist.
831    
832    2004-03-24  Martin Schulze  <[email protected]>
833    
834            * Extensions/wms/capabilities.py: Renamed the class to contain
835            'WMS', also added a linebreak where required
836    
837            * Extensions/wms/parser.py: Finally added the XML parser for the
838            GetCapabilities response.
839    
840            * Extensions/wms/test/sample.xml: Adjusted the sample file so that
841            <SRS> elements match the <BoundingBox> elements, except for the
842            layer 'beschriftung'.
843    
844            * Extensions/wms/test/test_parser.py: Encode non-ascii strings
845            since Python uses unicode strings internally, otherwise
846            comparisons will fail.  Removed tests for getLayerBBoxSRS() since
847            the SRS will be calculated anyway and this method is obsoleted by
848            getLayerSRS().  Denote SRS as strings and not as cardinal numbers.
849            Move loading the sample file into the setUp method.  Added a test
850            for finding the integrity problem in the sample response.
851            Improved formatting.
852    
853            * Extensions/wms/domutils.py: Added convenience routines for
854            handling of Document Object Model (DOM) nodes.
855    
856            * Extensions/wms/test/test_domutils.py: Added a test for the
857            domutils module
858    
859    2004-03-19  Martin Schulze  <[email protected]>
860    
861            * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
862            Moved path detection and adding into a module of its own,
863            adjustpath, which exports thubandir as main Thuban directory.
864    
865            * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
866            detection and adding into a module of its own, adjustpath, which
867            exports thubandir as main Thuban directory.  Reorganised the
868            module in order to support the SkipTest feature for Thuban test
869            cases.
870    
871            * Extensions/wms/test/adjustpath.py: Moved path detection and
872            adding into a module of its own.
873    
874    2004-03-18  Martin Schulze  <[email protected]>
875    
876            * Extensions/wms/test/test_parser.py: Added another test for
877            checking whether the WMS XML parser (to be implemented) returns
878            the information we expect.  This requires a sample WMS WML file
879            (sample.xml) which has been extracted from the frida server and
880            "improved" manually.
881    
882            * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
883            main Thuban directory to the path in order to be able to import
884            random modules.  Adjusted the PyOGCLib detection to reuse the
885            information gathered.  Also added a note about the PYTHONPATH
886            environment variable.
887    
888            * Extensions/wms/test/test_ogclib.py: The format specification is
889            a mime-type, not a graphic format, hence image/jpeg wou ld be the
890            proper format and not JPEG.  We'll also have to take care of the
891            encoding of / as %2F.
892    
893    2004-03-16  Martin Schulze  <[email protected]>
894    
895            * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
896            comprehensive test for the getMapURL method, built compare URLs
897            according to the documentation in OGC 01-068r3
898    
899            * Extensions/wms/capabilities.py (WMSCapabilities): Added the
900            class WMSCapabilities to manage capabilites, will incorporate
901            parsing the capabilities response and provide details for other
902            classes.
903    
904    2004-03-12  Bernhard Herzog  <[email protected]>
905    
906            Support views in addition to normal tables in the postgis
907            shapestore
908    
909            * Thuban/Model/postgisdb.py
910            (PostGISShapeStore._fetch_table_information): Add a fallback for
911            the case where the table name is not in the geometry_columns
912            table.  This is usually the case for views.  Also, set
913            self.shapestore here.
914            (PostGISShapeStore.ShapeType): No need to query the database all
915            the time.  The shape type is now determined in
916            _fetch_table_information
917    
918            * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
919            (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
920            New parameter to specify views.
921            (PostGISDatabase.has_data): Also compare the views.  New views
922            parameter
923            (PostGISDatabase.initdb): Create the views.
924            (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
925            view
926    
927            * test/test_postgis_db.py
928            (TestPostGISShapestorePointFromViews): New.  Test a
929            PostGISShapeStore with a view
930            (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
931            the geometry_column explicitly to test whether that works
932    
933    2004-03-12  Bernhard Herzog  <[email protected]>
934    
935            Final step for explicit id/geometry columns: Loading and saving
936    
937            * Resources/XML/thuban-1.1.dtd: New.  Derived from thuban-1.0.dtd
938            with the following changes:
939            (dbshapesource): Two new attributes id_column and geometry_column
940    
941            * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
942            (SessionSaver.write_session): Use the new namespace
943            (SessionSaver.write_data_containers): Write the new dbshapesource
944            parameters
945    
946            * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
947            the new file format version
948            (SessionLoader.start_dbshapesource): Handle the new db parameters
949    
950            * test/test_save.py: Update to the new dtd and namespace
951            (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
952            mock object to provide a working IDColumn method.
953    
954            * test/test_load_1_0.py: New.  Copy of the test_load.py before
955            today's changes but with the round-trip tests removed.
956    
957            * test/test_load_0_9.py: Update doc-string.
958    
959            * test/test_load.py: Update all .thuban files to the new dtd and
960            namespace.
961            (TestPostGISLayer.file_contents): Add the new dbshapesource
962            paramters
963    
964    2004-03-11  Bernhard Herzog  <[email protected]>
965    
966            Next step for explicit id/geometry columns: User interaction
967    
968            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
969            the dialog is constructed. Add combo boxes to select id and
970            geometry column.  Rename some instance variables.
971            (ChooseDBTableDialog.GetTable): Return id and geometry column
972            names
973            (ChooseDBTableDialog.OnTableSelect): New. Event handler for
974            selections in the table list
975    
976            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
977            and geometry_column
978    
979            * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
980            parameters for id_column and geometry column of PostGISShapeStore
981            here as well.
982    
983            * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
984            (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
985            (PostGISConnection.GeometryTables): Use a better query to
986            determine which relations in the database might be usable for
987            shapestores.  Now supports views as well but is more PostgreSQL
988            specific
989            (PostGISConnection.table_columns): New. Somewhat experimental
990            method to let the db dialogs provide lists of columns to users so
991            that they can select id and geometry columns.
992            (PostGISTable.__init__): The default value of the id_column
993            parameter is now None it still means "gid" effectively, though.
994            (PostGISTable.IDColumn): New introspection method to return a
995            column object for the id column
996            (PostGISShapeStore.GeometryColumn): New introspection method to
997            return a column object for the geometry column
998    
999            * test/test_postgis_db.py
1000            (TestPostGISConnection.test_gis_tables_non_empty):
1001            Removed. Subsumed by the new:
1002            (TestPostGISConnection.test_gis_tables_with_views_and_tables):
1003            New. Tes the GeometryTables and table_columns methods with actual
1004            tables and views.
1005            (PointTests.test_id_column, PointTests.test_geometry_column):
1006            New. tests for the new methods.
1007            (TestPostGISShapestorePoint.setUp)
1008            (TestPostGISShapestorePointSRID.setUp)
1009            (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
1010            instance variables needed by the new tests
1011    
1012    2004-03-11  Bernhard Herzog  <[email protected]>
1013    
1014            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
1015            numbers given to ReadValue are ordinals.
1016    
1017    2004-03-11  Bernhard Herzog  <[email protected]>
1018    
1019            Elimiate the requirement for PostGIS tables to have a column
1020            called "gid".
1021    
1022            * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
1023            id_column to specify which column to use to identify rows.  Also
1024            new instance variables id_column and quoted_id_column
1025            (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
1026            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
1027            (PostGISTable.SimpleQuery): Use the id column name provided to the
1028            constructor instead of "gid"
1029            (PostGISShapeStore.__init__): New parameter id_column analogously
1030            to PostGISTable.__init__.  This parameter is simply passed through
1031            to the base class constructor
1032            (PostGISShapeStore._create_col_from_description): Fix typo in
1033            doc-string
1034            (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
1035            (PostGISShapeStore.ShapesInRegion): Use the id column name
1036            provided to the constructor instead of "gid"
1037    
1038            * test/postgissupport.py
1039            (PostgreSQLServer.get_default_static_data_db): New static table
1040            landmarks_point_id with an id column != "gid.  Update the comments
1041            a bit.
1042            (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
1043            doc-
1044            (upload_shapefile): New parameter gid_column to use a name other
1045            than "gid" for the column to store the shape ids
1046    
1047            * test/test_postgis_db.py (TableTests): New.  Mixin-class
1048            containing all tests previously in TestPostGISTable.  The actual
1049            tests are the same but the code is a bit more configurable to
1050            allow for different id columns etc.
1051            (TestPostGISTable): Derive from TableTests now for the actual
1052            tests.
1053            (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
1054            except that it the landmarks_point_id table to test the id_column
1055            parameter
1056            (PointTests): Extend the doc-string
1057            (TestPostGISShapestorePointExplicitGIDColumn)
1058            (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
1059            from PointTests to test the explicit id_column parameter.  One
1060            tests with the name of the column holding the shape ids, the other
1061            uses PostgreSQL's OID column.  For the latter a number of methods
1062            have to be overwritten to make them independent of the actual id
1063            values.
1064    
1065    2004-03-08  Silke Reimer  <[email protected]>
1066    
1067            Update debian directory:
1068    
1069            * debian/changelog: Added new version.
1070            * deiban/rules: Updated management of patches (with cbds)
1071            * debian/control: Added cbds to dependencies
1072            * debian/patches/*: New. Adds better support for patches of thuban in
1073                            debian
1074            * debian/menu: Syntax of menu changed slightly
1075            * debian/setup.py.patch: removed because it has been moved to
1076                            debian/patechs/setup.py.patch
1077            
1078    
1079    2004-02-26  Bernhard Herzog  <[email protected]>
1080    
1081            Create the Doc/technotes directory for text files with information
1082            for developers
1083    
1084            * Doc/technotes/README: New. README for the technotes
1085    
1086            * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
1087            Thuban
1088    
1089            * Doc/technotes/release_process.txt: New. Used to be
1090            HOWTO-Release.  Now slightly adapted to technote formatting style.
1091    
1092            * HOWTO-Release: Removed.  It's contents are now in
1093            Doc/technotes/release_process.txt
1094    
1095    2004-02-25  Bernhard Herzog  <[email protected]>
1096    
1097            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
1098            version of wxWindows the module was compiled with so we can check
1099            that against the wxPython version.
1100    
1101            * Thuban/version.py (thuban_branch, thuban_release): New variables
1102            controlling which and how Thuban versions are shown.  See the
1103            comments for details.
1104            (verify_versions): Also check that the wx version that wxproj is
1105            compiled against matches that of the wxPython we use at runtime
1106    
1107    2004-02-20  Bernhard Herzog  <[email protected]>
1108    
1109            * Extensions/wms/wms.py (epsg_code_to_projection): Use
1110            get_system_proj_file to read the epsg projections.  The old way
1111            depended on the current directory being the top Thuban directory.
1112    
1113    2004-02-20  Bernhard Herzog  <[email protected]>
1114    
1115            * Extensions/svgexport/test/test_svgmapwriter.py
1116            (TestVirtualDC.test_clippath): Remove a debug print
1117    
1118    2004-02-20  Bernhard Herzog  <[email protected]>
1119    
1120            * Extensions/svgexport/__init__.py: New.  Turn
1121            Extensions/svgexport into a package.
1122    
1123            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
1124            doc-string a bit.  The doc-string must come first, otherwise it's
1125            not a doc-string.  The __future__ import must be the first thing
1126            after the doc-string.  Use only double quotes in doc-strings.
1127            Single quotes trip up emacs syntax highlighting if the text
1128            contains apostrophes.
1129    
1130    2004-02-20  Bernhard Herzog  <[email protected]>
1131    
1132            * Extensions/svgexport/test/__init__.py,
1133            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
1134            suite for svgexport
1135    
1136            * test/runtests.py (find_test_modules): New. Function with the
1137            module finding code from main.
1138            (main): Use find_test_modules to figure out the default test
1139            modules and take modules from Extensions.svgexport.test too.
1140    
1141    2004-02-19  Bernhard Herzog  <[email protected]>
1142    
1143            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
1144            the mainwindow has a reference to the map of the initial session.
1145            This fixes a bug introduced with the fix for RT#2245
1146    
1147    2004-02-19  Bernhard Herzog  <[email protected]>
1148    
1149            * Extensions/svgexport/svgsaver.py,
1150            Extensions/svgexport/svgmapwriter.py,
1151            Extensions/svgexport/maplegend.py: Added again.  This time in the
1152            correct place.
1153    
1154    2004-02-17  Bernhard Herzog  <[email protected]>
1155    
1156            Fix for RT#2245
1157    
1158            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
1159            instance variables before trying to create any windows.  Creating
1160            windows can start an event loop if e.g. message boxes are popped
1161            up for some reason, and event handlers, especially EVT_UPDATE_UI
1162            may want to access things from the application.
1163            (ThubanApplication.maps_changed): The mainwindow may not have been
1164            created yet, so check whether it has been created before calling
1165            its methods
1166    
1167            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
1168            have a map
1169    
1170    2004-02-17  Bernhard Herzog  <[email protected]>
1171    
1172            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
1173            Extensions/svgmapwriter.py, Extensions/maplegend.py,
1174            extensions/svgexport/svgsaver.py,
1175            extensions/svgexport/svgmapwriter.py,
1176            extensions/svgexport/maplegend.py: Removed.  These files were in
1177            the wrong places or didn't work at all.
1178    
1179    2004-02-16  Bernhard Herzog  <[email protected]>
1180    
1181            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
1182            line
1183    
1184    2004-02-16  Bernhard Herzog  <[email protected]>
1185    
1186            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
1187    
1188    2004-02-15  Markus Rechtien  <[email protected]>
1189            
1190            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
1191            to write a session to a file in SVG format.
1192            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
1193            to write a SVG map of a session.
1194            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
1195            in SVG format for the current session.
1196    
1197    2004-02-13  Bernhard Herzog  <[email protected]>
1198    
1199            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
1200            can't be created, return immediately after displaying the error
1201            message.
1202    
1203    2004-02-11  Bernhard Herzog  <[email protected]>
1204    
1205            Handle postgis tables with more than one geometry column.
1206    
1207            * Thuban/Model/postgisdb.py
1208            (PostGISTable._fetch_table_information): Delegate the creation of
1209            column objects to a different method so that we can extend that in
1210            derived classes
1211            (PostGISTable._create_col_from_description): New. Column object
1212            creation part of _fetch_table_information
1213            (PostGISShapeStore._create_col_from_description): New. Extend
1214            inherited method to handle geometry columns
1215            (PostGISShapeStore.__init__): New parameter geometry_column to
1216            specify which geometry column to use.  Optional but mandatory for
1217            tables with more than one geometry column
1218            (PostGISShapeStore._fetch_table_information): Also use the name of
1219            the geometry column when looking for the srid
1220            (PostGISShapeStore.ShapeType): Also use the name of the geometry
1221            column when looking for the shape type
1222    
1223            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
1224            NonConnectionStore to changes in the PostGISShapeStore
1225    
1226            * test/test_postgis_db.py
1227            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
1228            PostGISShapeStore with tables having two geometry columns.
1229    
1230    2004-02-10  Bernhard Herzog  <[email protected]>
1231    
1232            Fix some postgis problems.  What remains to be done is real
1233            handling of SRIDs as they affect how reprojection is done
1234    
1235            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
1236            doc-string
1237            (PostGISShapeStore._fetch_table_information): New. Extend
1238            inherited method to retrieve srid
1239            (PostGISShapeStore.BoundingBox): Handle tables without data.
1240            extent yields NULL for those
1241            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
1242    
1243            * test/test_postgis_db.py
1244            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
1245            for the special case of a table without any data
1246            (TestPostGISShapestorePointSRID): New class with tests for a table
1247            that uses srids
1248            (PolygonTests): Fix a doc-string typo
1249    
1250            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
1251            reference_systems with a specification of spacial reference
1252            systems to create in the new db.
1253            (PostgreSQLServer.new_postgis_db)
1254            (PostgreSQLServer.get_static_data_db): New parameter
1255            reference_systems to be passed through ultimately to
1256            PostGISDatabase.  In new_postgis_db also check whether an existing
1257            db already has the right srids
1258            (PostgreSQLServer.get_default_static_data_db): Add srids and a
1259            table that uses srids
1260            (PostGISDatabase.initdb): Create the entries for the reference
1261            systems
1262            (PostGISDatabase.has_data): Add reference_systems parameter to
1263            check for those too
1264            (upload_shapefile): New parameter srid to create tables with a
1265            specific srid
1266    
1267    2004-02-06  Frank Koormann  <[email protected]>
1268    
1269            * po/pt_BR.po: Fixed charset
1270    
1271    2004-02-05  Frank Koormann  <[email protected]>
1272    
1273            * po/pt_BR.po: Fixed format string for error message, missing %s
1274            added (Thuban/UI/application.py:273)
1275    
1276    2004-02-03  Frank Koormann  <[email protected]>
1277            
1278            First version of Portuguese (Brazilian) translation
1279    
1280            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
1281            Brazilian Portuguese by Eduardo Patto Kanegae.
1282    
1283            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
1284            translators.
1285    
1286    
1287    2004-01-22  Frank Koormann  <[email protected]>
1288    
1289            * Doc/manual/thuban-manual.xml: Added section on installation of
1290            Thuban under Win32 systems. Fixed image path references in the postgis
1291            section. Some minor source formattings.
1292    
1293    2004-01-21  Frank Koormann  <[email protected]>
1294    
1295            Make Thuban remember path selections (at least for one application run).
1296    
1297            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
1298            attribute of application object. Path is a dictionary of
1299            strings, currently with the items "data" and "projection".  
1300            (Application.SetPath): New, stores path for the specified item.
1301            (Application.Path): New, return path for the specified item.
1302    
1303            * Thuban/UI/mainwindow.py
1304            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
1305            MainWindow.AddLayer, MainWindow.AddRasterLayer,
1306            MainWindow.TableOpen): Access "data" path information of the
1307            application.
1308            
1309            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
1310            Access "projection" path information of the application.
1311    
1312    2004-01-05  Bernhard Herzog  <[email protected]>
1313    
1314            * po/ru.po: Updated translations from Alex Shevlakov
1315    
1316    2004-01-05  Bernhard Herzog  <[email protected]>
1317    
1318            * po/Makefile, po/README: Move the description of how to generate
1319            the translation statistics to the README.
1320    
1321    2003-12-23  Bernhard Herzog  <[email protected]>
1322    
1323            * NEWS: Update for 1.0.0
1324    
1325            * po/it.po: Another update from Maurizio Napolitano
1326    
1327    2003-12-23  Bernhard Herzog  <[email protected]>
1328    
1329            * po/it.po: Updated translation from Maurizio Napolitano
1330    
1331    2003-12-23  Bernhard Herzog  <[email protected]>
1332    
1333            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
1334            for translation
1335    
1336            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
1337            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
1338            strings for translation
1339    
1340            * po/de.po: Update with the newly marked strings.
1341    
1342    2003-12-22  Bernhard Herzog  <[email protected]>
1343    
1344            * HOWTO-Release: Fix the places where version numbers have to be
1345            updated
1346    
1347    2003-12-22  Bernhard Herzog  <[email protected]>
1348    
1349            * setup.py (setup call): 1.0.0, yeah!
1350    
1351            * Thuban/version.py (longversion): 1.0.0, yeah!
1352    
1353            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1354            1.0.0 namespace too
1355    
1356            * Thuban/Model/save.py (SessionSaver.write_session): Save with
1357            1.0.0 namespace
1358    
1359            * test/test_load.py (LoadSessionTest.dtd)
1360            (TestSingleLayer.file_contents)
1361            (TestNonAsciiColumnName.file_contents)
1362            (TestLayerVisibility.file_contents)
1363            (TestClassification.file_contents, TestLabels.file_contents)
1364            (TestLayerProjection.file_contents)
1365            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1366            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
1367            (TestPostGISLayerPassword.file_contents)
1368            (TestLoadError.file_contents, TestLoadError.test): Update for
1369            1.0.0 namespace
1370    
1371            * test/test_save.py (SaveSessionTest.dtd)
1372            (SaveSessionTest.testEmptySession)
1373            (SaveSessionTest.testSingleLayer)
1374            (SaveSessionTest.testLayerProjection)
1375            (SaveSessionTest.testRasterLayer)
1376            (SaveSessionTest.testClassifiedLayer)
1377            (SaveSessionTest.test_dbf_table)
1378            (SaveSessionTest.test_joined_table)
1379            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
1380    
1381    2003-12-22  Bernhard Herzog  <[email protected]>
1382    
1383            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
1384            alignment flags are byte strings not unicode and that they have
1385            valid values
1386    
1387            * test/test_load.py (TestLabelLayer): New. Test loading (and
1388            indirectly saving) of maps with labels.
1389    
1390    2003-12-22  Bernhard Herzog  <[email protected]>
1391    
1392            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
1393            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
1394            unsubscribe all subscribers.
1395            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
1396            self.grid since it may already have been destroyed.
1397            Fixes RT #2256
1398    
1399    2003-12-19  Bernhard Herzog  <[email protected]>
1400    
1401            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
1402    
1403    2003-12-16  Bernhard Herzog  <[email protected]>
1404            
1405            * debian/bitmappath.patch, debian/setup.py.patch:
1406                    added to ensure compliance with FHS for debian
1407            * debian/rules, debian/changelog:
1408                added patches in rules to ensure compliance with FHS for debian
1409    
1410    2003-12-16  Bernhard Herzog  <[email protected]>
1411    
1412            * po/Makefile (mo): Make the output a bit nicer so that it prints
1413            statistics about the translations. Add a comment how produce even
1414            nicer statistics with sed.
1415    
1416    2003-12-09  Frank Koormann   <[email protected]>
1417    
1418            * Resources/Projections/defaults.proj:
1419            French projection sample with correct accents (UNICODE).
1420    
1421    2003-12-05  Bernhard Herzog  <[email protected]>
1422    
1423            * MANIFEST.in: Add the devtools directory
1424    
1425            * setup.py (setup call): Use license instead of licence. This
1426            silences a deprecation warning on Python 2.3
1427    
1428    2003-12-05  Frank Koormann   <[email protected]>
1429    
1430            Documentation synced with 1.0rc1
1431    
1432            * Doc/manual/thuban-manual.xml:
1433            Minor formatting changes and references to database layers .
1434            Introduction.Internationalization: New section on i18n.
1435            MapManagement.AddingandRemovingLayers: Added item on database layers.  
1436            MapManagement.TheLegend: Added section and screenshot on popup menu.
1437            ProjectionManagement: Updated screenshot and sentence on EPSG.
1438            Appendix.SupportedDataSources: Added PostGIS.
1439            Appendix.WorkingwithPostGIS: New section.
1440    
1441            * Doc/manual/images/6_projection.png: Updated screenshot including
1442            EPSG checkboxes.
1443    
1444            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
1445    
1446            * Doc/manual/images/app_postgis_add_layer.png,
1447            Doc/manual/images/app_postgis_db_add.png,
1448            Doc/manual/images/app_postgis_db_management.png:
1449            New screenshots focussing on database layers
1450    
1451    2003-12-05  Frank Koormann   <[email protected]>
1452    
1453            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
1454            write warning to stderr instead of rising a warning dialog
1455    
1456    2003-12-03  Bernhard Herzog  <[email protected]>
1457    
1458            Fix for RT #2243
1459    
1460            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
1461            New. Like has_selected_layer but for shape layers only
1462            (_has_selected_shape_layer): New. Like _has_selected_layer but for
1463            shape layers only
1464            (layer_show_table command, layer_jointable command): Use these
1465            commands should only be available for shape layers
1466    
1467    2003-12-03  Bernhard Herzog  <[email protected]>
1468    
1469            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
1470            publishers that are wx objects and may have been destroyed by wx
1471            already. Fixes RT #2242.
1472    
1473    2003-12-03  Bernhard Herzog  <[email protected]>
1474    
1475            * po/ru.po: Updates from Alex Shevlakov
1476    
1477    2003-12-03  Silke Reimer <silkeintevation.de>
1478    
1479            * debian/control, debian/changelog: Added gdal-support to
1480                    debian package, updated to new thuban version
1481    
1482    
1483    2003-12-03  Bernhard Herzog  <[email protected]>
1484    
1485            * Thuban/Lib/version.py: New. Module for version number
1486            manipulations. The version of make_tuple here also deals better
1487            with more unusual version number strings, such as e.g.
1488            "1.2+cvs20031111"
1489    
1490            * Thuban/version.py (make_tuple): Removed. It's now in
1491            Thuban.Lib.version. Use that implementation instead.
1492    
1493            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
1494    
1495    2003-12-02  Bernhard Herzog  <[email protected]>
1496    
1497            * MANIFEST.in: Add debian files
1498    
1499            * setup.py (setup call): Add packages for the Extensions so that
1500            they're installed too
1501            (data_files): Add READMEs and sample data from some Extensions
1502    
1503            * NEWS: Add note about the extensions in binary packages
1504    
1505    2003-12-02  Bernhard Herzog  <[email protected]>
1506    
1507            * Thuban/Model/save.py (SessionSaver.write_session): Save files
1508            with the thuban-1.0rc1
1509    
1510            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
1511            thuban-1.0rc1 namespace too
1512    
1513            * test/test_save.py (SaveSessionTest.dtd)
1514            (SaveSessionTest.testEmptySession)
1515            (SaveSessionTest.testSingleLayer)
1516            (SaveSessionTest.testLayerProjection)
1517            (SaveSessionTest.testRasterLayer)
1518            (SaveSessionTest.testClassifiedLayer)
1519            (SaveSessionTest.test_dbf_table)
1520            (SaveSessionTest.test_joined_table)
1521            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
1522            namespace
1523    
1524            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
1525            namespace
1526            (TestSingleLayer.file_contents)
1527            (TestNonAsciiColumnName.file_contents)
1528            (TestLayerVisibility.file_contents)
1529            (TestClassification.file_contents, TestLabels.file_contents)
1530            (TestLayerProjection.file_contents)
1531            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1532            (TestPostGISLayer.file_contents)
1533            (TestPostGISLayerPassword.file_contents)
1534            (TestLoadError.file_contents, TestLoadError.test): Update to
1535            thuban-1.0rc1 namespace
1536    
1537    2003-12-01  Bernhard Herzog  <[email protected]>
1538    
1539            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
1540            nt to better match Intevation's current w32 setup
1541    
1542            * HOWTO-Release: Add note about updating MANIFEST.in
1543    
1544            * MANIFEST.in: Add the Extensions
1545    
1546            * NEWS: Update for 1.0rc1
1547    
1548    2003-12-01  Bernhard Herzog  <[email protected]>
1549    
1550            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
1551            cards for the dialog so that shapefiles ending in all uppercase
1552            SHP are listed too
1553    
1554    2003-11-28  Bernhard Herzog  <[email protected]>
1555    
1556            * Thuban/version.py (longversion): Update to 1.0rc1
1557    
1558            * setup.py (setup call): Update version to 1.0rc1. Use the
1559            [email protected] email address as author email instead of my
1560            personal one.
1561    
1562    2003-11-28  Bernhard Herzog  <[email protected]>
1563    
1564            * po/de.po: Update german translation.
1565    
1566    2003-11-28  Bernhard Herzog  <[email protected]>
1567    
1568            Unify the filenames stored in .thuban files so that the .thuban
1569            files are more platform independend
1570    
1571            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
1572            that they can be used on both windows and unix
1573            (SessionSaver.prepare_filename): New. Handle all filename
1574            transformations for filenames stored in the thuban file
1575            (SessionSaver.write_data_containers, SessionSaver.write_layer):
1576            Use prepare_filename
1577    
1578            * test/test_save.py (SaveSessionTest.testSingleLayer)
1579            (SaveSessionTest.testLayerProjection)
1580            (SaveSessionTest.testRasterLayer)
1581            (SaveSessionTest.testClassifiedLayer)
1582            (SaveSessionTest.test_dbf_table)
1583            (SaveSessionTest.test_joined_table): Filenames are always stored
1584            with slashes on all currently supported platforms so adapt all
1585            tests to this
1586    
1587            * test/test_load.py (LoadSessionTest.filenames): With the new
1588            filename scheme the filenames in the tests should be
1589            understandable on all currently supported platforms so we turn
1590            this into an empty list because we don't have to normalize them
1591            anymore
1592    
1593    2003-11-28  Bernhard Herzog  <[email protected]>
1594    
1595            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
1596            Add the ellipsoid to the projection since some Proj versions
1597            complain if it's missing.
1598    
1599    2003-11-27  Bernhard Herzog  <[email protected]>
1600    
1601            Corect some bounding box projection problems
1602    
1603            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
1604            version of ForwardBBox
1605            (Projection._transform_bbox): New. common implementation of
1606            ForwardBBox and InverseBBox
1607            (Projection.ForwardBBox): Use _transform_bbox.
1608    
1609            * test/test_proj.py (TestProjection.test): Add test for
1610            InverseBBox
1611    
1612            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
1613            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
1614            new InverseBBox method to determine the unprojected bounding box
1615            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
1616            bbox.
1617    
1618            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
1619            Removed.
1620            (TestLayer.test_arc_layer_with_projection): New. This test is
1621            better able to test whether bounding boxes are projected correctly
1622            than test_point_layer_with_projection
1623    
1624            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
1625            InverseBBox to unproject bboxes
1626    
1627    2003-11-25  Bernhard Herzog  <[email protected]>
1628    
1629            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
1630            source code.
1631    
1632    2003-11-25  Bernhard Herzog  <[email protected]>
1633    
1634            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
1635            there for backwards compatibility and all code relying on that
1636            should have been updated by now.
1637    
1638    2003-11-25  Bernhard Herzog  <[email protected]>
1639    
1640            * test/test_load.py (TestClassification.test): Add the missing
1641            round trip test.
1642            (TestClassification.file_contents): Update to the newest file
1643            format
1644    
1645    2003-11-25  Bernhard Herzog  <[email protected]>
1646    
1647            Add very experimental (and possibly dangerous) extension to draw
1648            polygons:
1649    
1650            * Extensions/drawshape/README: New. Brief installation
1651            instructions
1652    
1653            * Extensions/drawshape/drawshape.py: New. Implementation of the
1654            drawshape extensions
1655    
1656            * Extensions/drawshape/patch.diff: Patch to apply before the
1657            extension can be used.
1658    
1659    2003-11-24  Bernhard Herzog  <[email protected]>
1660    
1661            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
1662            (ShapefileStore.__init__): Factor opening the shapefile into a
1663            separate method (the new _open_shapefile). This makes the code a
1664            bit more readable but the real reason is that it makes some evil
1665            hacks easier. :-)
1666    
1667    2003-11-24  Bernhard Herzog  <[email protected]>
1668    
1669            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
1670            converter is specified for an attribute assume it's a string
1671            containing only Latin1 characters. Update doc-string accordingly.
1672            This change should fix many places where unicode objects might
1673            accidentally enter Thuban.
1674    
1675            * test/test_load.py (TestNonAsciiColumnName): New test to check
1676            what happens with column names in DBF files that contain non-ascii
1677            characters
1678    
1679    2003-11-21  Bernhard Herzog  <[email protected]>
1680    
1681            Enable the experimental attribute editing again and introduce a
1682            command line switch to actually activate it
1683    
1684            * Thuban/UI/main.py (options): New. Container for options set on
1685            the commmand line
1686            (main): Add the --enable-attribute-editing flag.
1687    
1688            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
1689            editing is enabled use the grid ctrl which allows editing of the
1690            values
1691    
1692            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
1693            New. Just delegate this to the underlying table.
1694    
1695    2003-11-20  Bernhard Herzog  <[email protected]>
1696    
1697            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
1698            Skip this test if run under non-posix systems since it only works
1699            there
1700    
1701    2003-11-19  Bernhard Herzog  <[email protected]>
1702    
1703            * Thuban/Model/resource.py: Rework the way gdal support is
1704            determined so that we can give a reason in the about why gdal is
1705            not supported.
1706            (gdal_support_status): New. Variable holding a string with the
1707            reason for no gdal support
1708    
1709            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
1710            not supported to the message
1711    
1712    2003-11-19  Bernhard Herzog  <[email protected]>
1713    
1714            Remove the old table interface and its test cases
1715    
1716            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
1717            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
1718            anymore
1719    
1720            * Thuban/Model/transientdb.py (TransientTableBase)
1721            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
1722            anymore
1723    
1724            * test/test_table.py: Removed since the old interface it tests is
1725            gone.
1726    
1727            * test/runtests.py (main): The old table interface is gone and
1728            with it the deprecation warnings so remove the code that turns
1729            these warnings into errors
1730    
1731    2003-11-19  Bernhard Herzog  <[email protected]>
1732    
1733            * test/test_table.py: Revert to revision 1.5 again. Changing the
1734            tests to use the new table interface is completely wrong since the
1735            whole purpose of the tests in this module is to test the old
1736            interface.
1737    
1738    2003-11-18  Bernhard Herzog  <[email protected]>
1739    
1740            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
1741            New. Test whether the connection matches a set of connection
1742            parameters
1743    
1744            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
1745            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
1746            for existing connections with the same parameters and break out of
1747            the loop correctly.
1748    
1749            * test/test_postgis_db.py (TestBriefDescription)
1750            (TestPostGISSimple.test_brief_description): Rename
1751            TestBriefDescription to TestPostGISSimple and the test method to
1752            test_brief_description so that we can add more test methods.
1753            (TestPostGISSimple.test_matches_parameters): New. Test the new
1754            MatchesParameters method
1755    
1756    2003-11-18  Bernhard Herzog  <[email protected]>
1757    
1758            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
1759            _was_destroyed, to indicate whether an publisher instance has
1760            already been destroyed.
1761            (Publisher.Unsubscribe): Only disconnect if the publisher has not
1762            been destroyed yet.
1763            (Publisher.Destroy): Set the _was_destroyed flag to true.
1764    
1765            * test/test_connector.py
1766            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
1767            calling Unsubscribe after Destroy doesn't raise an exception
1768    
1769    2003-11-14  Bernhard Herzog  <[email protected]>
1770    
1771            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
1772            typo in doc-string
1773    
1774    2003-11-13  Bernhard Herzog  <[email protected]>
1775    
1776            Quote table and column names properly for postgis.
1777    
1778            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
1779            quote an identifier for use in an sql statement
1780            (PostGISColumn.__init__): Add the quoted_name attribute
1781            (PostGISTable.__init__): New instance variable quoted_tablename
1782            (PostGISTable._fetch_table_information): Use the quoted table
1783            name. New isntance variable quoted_geo_col with a quoted version
1784            of geometry_column
1785            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
1786            (PostGISTable.RowOrdinalToId): Use the quoted table name
1787            (PostGISTable.ReadValue, PostGISTable.ValueRange)
1788            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
1789            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
1790            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
1791            Use quoted table and column names
1792    
1793            * test/test_postgis_db.py (TestPostGISSpecialCases)
1794            (TestPostGISIgnoredColumns): Rename the class to
1795            TestPostGISSpecialCases because that better describes the new
1796            cases
1797            (TestPostGISSpecialCases.test_unsupported_types)
1798            (TestPostGISSpecialCases.test): Rename the method to
1799            test_unsupported_types because we need a more descriptive name now
1800            that there are more methods
1801            (TestPostGISSpecialCases.test_table_name_quoting)
1802            (TestPostGISSpecialCases.test_column_name_quoting)
1803            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
1804            cases to test quoting of table and column names in PostGISTable
1805            and PostGISShapeStore
1806    
1807            * test/postgissupport.py
1808            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
1809            AddGeometryColumn desn't support table or column names with sapces
1810            or double quotes
1811    
1812    2003-11-12  Jan-Oliver Wagner <[email protected]>
1813    
1814            * Extensions/wms/__init__.py: New: Init to make this
1815            directory a package.
1816    
1817            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
1818    
1819    2003-11-11  Bernhard Herzog  <[email protected]>
1820    
1821            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
1822            Constant for the file woth deprecated epsg projections
1823            (get_system_proj_file): Update doc-string
1824    
1825            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
1826            above the EPS widgets, introduce a check box for the deprecated
1827            eps projections and a label for the epsg widgets
1828            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
1829            too
1830    
1831    2003-11-11  Bernhard Herzog  <[email protected]>
1832    
1833            Avoid warnings when run under Python 2.3
1834    
1835            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
1836            (BaseRenderer.draw_label_layer): Coordinates must be ints.
1837    
1838            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
1839            real method so that we can convert to int.
1840            (MapRenderer.label_font): The font size mist be an int.
1841    
1842            * Thuban/UI/common.py (Color2wxColour): The color values must be
1843            ints. Also, remove the unnecessary asserts.
1844    
1845            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
1846            (TestUnicodeStrings.test): Python source code should not contain
1847            non-ascii characters unless an encoding is specified in the file.
1848            Therefore use \x escapes in the string literals for non-ascii
1849            characters.
1850    
1851    2003-11-11  Bernhard Herzog  <[email protected]>
1852    
1853            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
1854            parameter so that this function can be used for all proj files in
1855            Resource/Projections
1856            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
1857            get_system_proj_file
1858    
1859            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
1860            ProjFile self.__sysProjFile use a dictionary of system ProjFile
1861            objects self._sys_proj_files
1862            (ProjFrame.build_dialog): Adapt to the new changes in the
1863            ProjectionList constructor. Add a check button to toggle whether
1864            EPSG projections are shown
1865            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
1866            events.
1867            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
1868            the busy cursor if the files have not yet been loaded by the
1869            dialog.
1870            (ProjFrame.load_system_proj): Add a parameter for the name of the
1871            proj file. Maintain the dictionary of system projections
1872            self._sys_proj_files
1873    
1874            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
1875            user_projs parameters into one parameter proj_files which is a
1876            list of proj files.
1877            (ProjectionList._subscribe_proj_files)
1878            (ProjectionList._unsubscribe_proj_files): New. Move
1879            subscription/unsubscription of projfile messages to separate
1880            methods
1881            (ProjectionList.Destroy): The unsubscribe is now done in
1882            _unsubscribe_proj_files
1883            (ProjectionList.update_projections): We now have a list of proj
1884            file objects
1885            (ProjectionList.SetProjFiles): New method to set a new list of
1886            proj file objects
1887    
1888            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
1889            Specify explicitly which system proj file to load.
1890    
1891    2003-11-11  Bernhard Herzog  <[email protected]>
1892    
1893            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
1894            instance variables to cut cyclic references. The GC would have
1895            collected the loader eventually but it can happen that it doesn't
1896            run at all until thuban is closed (2.3 but not 2.2 tries a bit
1897            harder and forces a collection when the interpreter terminates)
1898            (load_session): Call the handler's Destroy method to make sure
1899            that it gets garbage collected early. Otherwise it will be
1900            collected very late if at all and it holds some references to e.g.
1901            shapestores and the session which can lead to leaks (of e.g. the
1902            temporary files)
1903    
1904            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
1905            resource leak in load_session
1906    
1907    2003-11-10  Bernhard Herzog  <[email protected]>
1908    
1909            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
1910            extensions are to be rendered.
1911            (_renderer_extensions): New. List with renderer for layers in
1912            extensions
1913            (add_renderer_extension): New. Add a renderer extension
1914            (init_renderer_extensions): New. Init the renderer extensions
1915            (BaseRenderer.render_map_incrementally): Search
1916            _renderer_extensions for how to draw unknown layer types
1917            (BaseRenderer.draw_raster_data): Add format parameter so that
1918            formats other than BMP can be drawn
1919            (BaseRenderer.draw_raster_layer): Pass an explicit format to
1920            draw_raster_data
1921    
1922            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
1923            strings of the format parameter of draw_raster_data method to wx
1924            constants
1925            (MapRenderer.draw_raster_data): Add the format parameter and use
1926            raster_format_map to map it to the right wxwindows constant for
1927            wxImageFromStream
1928    
1929            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
1930            the format parameter and record it
1931            (TestBaseRenderer.test_raster_no_projection): check the format
1932            paramter of the draw_raster_data method
1933            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
1934            extension facility
1935    
1936    2003-11-07  Bernhard Herzog  <[email protected]>
1937    
1938            Tweak the usage of the sqlite database to make common use cases
1939            more responsive. In most cases copying the data to the sqlite
1940            database takes so long that using sqlite doesn't have enough
1941            advantages.
1942    
1943            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
1944            comments about performance and query the min and max in separate
1945            statements because only that way will indexes be used.
1946            (TransientTableBase.UniqueValues): Add some comments about
1947            performance.
1948            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
1949            Do not copy the data to the transient DB but use the transient
1950            copy if it exists. See the new comments for the performance trade
1951            offs
1952    
1953            * test/test_transientdb.py
1954            (TestTransientTable.test_auto_transient_table): Make sure that the
1955            data is copied to the transient database at some point.
1956    
1957    2003-11-03  Bernhard Herzog  <[email protected]>
1958    
1959            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
1960            globals to locals so that it's a bit faster
1961    
1962    2003-11-03  Bernhard Herzog  <[email protected]>
1963    
1964            * Thuban/UI/baserenderer.py
1965            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
1966            method. ReadValue is faster than ReadRowAsDict since it only reads
1967            one cell especially now that the dbf file objects actually
1968            implement it.
1969    
1970            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
1971            read_attribute method of the dbf objects
1972    
1973    2003-11-03  Bernhard Herzog  <[email protected]>
1974    
1975            * Extensions/profiling/profiling.py (popup_dialog_box): New config
1976            variable to indicate whether the result should be shown in a
1977            dialog box
1978            (profile_screen_renderer, time_screen_renderer): Only show a
1979            dialog box if popup_dialog_box is true.
1980            (profile_screen_renderer): Flush stdout after the printing the
1981            first part of the "profiling..." message
1982    
1983            * Thuban/UI/baserenderer.py
1984            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
1985            brushes for the groups so that they're not created over and over
1986            again
1987    
1988            * Thuban/Model/classification.py (Classification.__getattr__)
1989            (Classification._compile_classification)
1990            (Classification._clear_compiled_classification): New. Methods to
1991            manage a 'compiled' representation of the classification groups
1992            which is created on demand
1993            (Classification.InsertGroup, Classification.RemoveGroup)
1994            (Classification.ReplaceGroup): reset the compiled representation
1995            (Classification.FindGroup): Use the compiled representation to
1996            find the matching group
1997            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
1998    
1999    2003-10-31  Bernhard Herzog  <[email protected]>
2000    
2001            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
2002            Send a CLASS_CHANGED message
2003            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
2004            not return the removed group since it wasn't used.
2005    
2006            * test/test_classification.py
2007            (TestClassification.test_set_default_group): New. Test the
2008            SetDefaultGroup method
2009            (TestClassification.test_insert_group): New. Test the InsertGroup
2010            method
2011            (TestClassification.test_remove_group): New. Test the RemoveGroup
2012            method
2013            (TestClassification.test_replace_group): New. Test the
2014            ReplaceGroup method
2015    
2016    2003-10-31  Bernhard Herzog  <[email protected]>
2017    
2018            * test/test_classification.py (TestClassification.setUp):
2019            Subscribe to the CLASS_CHANGED messages
2020            (TestClassification.tearDown): New. Destroy the classification
2021            properly
2022            (TestClassification.test_defaults): Add tests for the default line
2023            width and whether no messages were sent yet
2024            (TestClassification.test_set_default_properties): Add tests for
2025            messages and setting the default line width
2026            (TestClassification.test_add_singleton)
2027            (TestClassification.test_add_range)
2028            (TestClassification.test_multiple_groups): Add tests for messages
2029    
2030    2003-10-31  Bernhard Herzog  <[email protected]>
2031    
2032            Some more refactoring in preparation for new tests:
2033    
2034            * test/test_classification.py (TestClassification.setUp): New.
2035            Instantiate the classification here. Update the test methods
2036            accordingly.
2037            (TestClassification.test_multiple_groups): Make sure that the two
2038            singletons matching 1 are considered different.
2039    
2040    2003-10-31  Bernhard Herzog  <[email protected]>
2041    
2042            * test/test_classification.py (red, green, blue): New. These
2043            constants were used in several cases. Update the relevant methods.
2044            (TestClassification.test_defaults)
2045            (TestClassification.test_set_default_properties)
2046            (TestClassification.test_add_singleton)
2047            (TestClassification.test_add_range)
2048            (TestClassification.test_multiple_groups)
2049            (TestClassification.test_deepcopy): New. These were formerly all
2050            part of the single method test.
2051            (TestClassification.test_deepcopy): Removed.
2052            (TestClassIterator): Removed. The test case is now a method of
2053            TestClassification since it tests part of the public interface of
2054            Classification
2055            (TestClassification.test_iterator): New. Used to be
2056            TestClassIterator effectively
2057    
2058    2003-10-31  Jan-Oliver Wagner <[email protected]>
2059    
2060            GUIfied the functions of the profiling extension.
2061    
2062            * /Extensions/profiling/__init__.py: New: Init to make this
2063            directory a package.
2064    
2065            * Extensions/profiling/profiling.py: Moved menu entries to
2066            the Extensions menu. Applied _() for strings.
2067            (profile_screen_renderer): Catch the detailed printout and present
2068            it in a dialog.
2069            (time_screen_renderer): Raise a dialog to present the result instead
2070            of printing it to stdout.
2071    
2072    2003-10-31  Bernhard Herzog  <[email protected]>
2073    
2074            * test/test_classification.py (TestClassGroupProperties)
2075            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
2076            (TestClassGroupSingleton, TestClassIterator, TestClassification):
2077            Split TestClassification into several classes, one for each class
2078            being tested. TestClassification itself now only tests
2079            Classification. This split makes changes to the tests a bit easier
2080    
2081    2003-10-31  Bernhard Herzog  <[email protected]>
2082    
2083            * Extensions/profiling/profiling.py: New. Extension to measure
2084            Thuban performance
2085    
2086    2003-10-31  Frank Koormann <[email protected]>
2087    
2088            Added two items to legend popup menu: Remove Layer and Show Layer Table
2089    
2090            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
2091            LegendPanel._OnShowTable): New event handlers, call the corresponding
2092            mainwindow methods.
2093            (LegendTree._OnRightClick): Added items to popup menu.
2094    
2095    2003-10-30  Bernhard Herzog  <[email protected]>
2096    
2097            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
2098            EVT_WINDOW_DESTROY
2099            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
2100            nothing but is convenient for the derived classes.
2101    
2102            * Thuban/UI/tableview.py
2103            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
2104            Unsubscribe the messages here not in OnClose because that might
2105            get called multiple times. Fixes RT #2196
2106            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
2107            anymore.
2108    
2109            * README: Update the minimum requirement for wxPython. Since we
2110            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
2111            the version in which that was introduced for all platforms
2112    
2113    2003-10-30  Frank Koormann <[email protected]>
2114    
2115            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
2116            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
2117            frame.
2118    
2119    2003-10-30  Jan-Oliver Wagner <[email protected]>
2120    
2121            Improved APR import extension, added further EPSG definitions
2122            and some cleanup regarding string class.
2123    
2124            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
2125            Added test for alias 'longlat'.
2126    
2127            * Resources/Projections/epsg-deprecated.proj: New. Contains
2128            deprecated EPSG definitions.
2129    
2130            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
2131            the variable names for objects.
2132    
2133            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
2134            Copied from importAPR and provided with documentation.
2135    
2136            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
2137            Moved to apr.py.
2138            (APR_View): Added object ref 'ITheme'.
2139    
2140            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
2141            split function by corresponding use of the string class method.
2142    
2143            * Thuban/Model/xmlwriter.py: Replaced string replace function by
2144            corresponding string method.
2145    
2146    2003-10-29  Bernhard Herzog  <[email protected]>
2147    
2148            * Thuban/UI/baserenderer.py
2149            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
2150            special case of a classification that only has the default group
2151    
2152    2003-10-27  Bernhard Herzog  <[email protected]>
2153    
2154            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2155    
2156            * po/de.po: Update.
2157    
2158            * Thuban/UI/application.py
2159            (ThubanApplication.ShowExceptionDialog): Handle translation of the
2160            dialog message properly
2161    
2162    2003-10-27  Bernhard Herzog  <[email protected]>
2163    
2164            Rework how localization works so that we use wx's translation
2165            functions when running Thuban as a normal application but not when
2166            we don't need any UI, such as in the test suite. See the comment
2167            in Thuban/__init__.py for details
2168    
2169            * Thuban/__init__.py (_): Add one level of indirection to make the
2170            translation handling more flexible and to make it possible to use
2171            either wx's translation services or not.
2172            (gettext_identity, translation_function_installed)
2173            (install_translation_function): New function to help with this
2174    
2175            * Thuban/UI/__init__.py: Install the wx specific translation
2176            function if it's OK to do that
2177    
2178            * test/support.py (initthuban): Install a dummy translation
2179            function so that importing Thuban.UI doesn't install a wx specific
2180            one for which would need to import wxPython
2181    
2182    2003-10-27  Bernhard Herzog  <[email protected]>
2183    
2184            * HOWTO-Release: Source archives should be created first and the
2185            binary packages should be created from the source archives.
2186            There's an official debian package now so there's no need to test
2187            the rpm on debian anymore
2188    
2189    2003-10-27  Bernhard Herzog  <[email protected]>
2190    
2191            Several rendering changes:
2192    
2193             - Render the selection into a separate bitmap so that only that
2194               bitmap needs to be redrawn when the selection changes
2195    
2196             - Render incrementally showing previews and allowing interaction
2197               before rendering is complete
2198    
2199             - Update the renderer interface a bit. Most parameters of
2200               RenderMap are now parameters of the constructor
2201    
2202            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
2203            and the update region as parameters. Update the doc-string
2204            (BaseRenderer.render_map_incrementally): New. Generator function
2205            to renders the map incrementally
2206            (BaseRenderer.render_map): Remove the map argument (it's now in
2207            the constructor) and simply iterate over the
2208            render_map_incrementally generator to draw the map.
2209            (BaseRenderer.draw_shape_layer_incrementally)
2210            (BaseRenderer.draw_shape_layer): Renamed to
2211            draw_shape_layer_incrementally and changed into a generator that
2212            yields True every 500 shapes. Used by render_map_incrementally to
2213            render shape layers incrementally
2214    
2215            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
2216            map and region parameters which are now in the constructor
2217            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
2218            the inherited render_map_incrementally.
2219            (BaseRenderer.draw_shape_layer): Removed.
2220            (ScreenRenderer.draw_selection_incrementally): New. The selection
2221            drawing part of the removed draw_shape_layer as a generator
2222            (ScreenRenderer.layer_shapes): Update because of the region
2223            parameter change
2224            (ExportRenderer.__init__): New. Extend the inherited constructor
2225            with the destination region for the drawing
2226            (ExportRenderer.RenderMap): Removed the map and region parameters
2227            which are now in the constructor
2228    
2229            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
2230            bitmap suitable for a preview in a tool
2231            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
2232            bitmap
2233            (MapPrintout.draw_on_dc): Adapt to new renderer interface
2234            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
2235            exists
2236            (MapCanvas.OnIdle): Update the logic to deal with incremental
2237            rendering and the selection bitmap
2238            (MapCanvas._do_redraw): Handle the instantiation of the render
2239            iterator and the redraws during rendering
2240            (MapCanvas._render_iterator): New. Generator to incrementally
2241            redraw both bitmaps
2242            (MapCanvas.Export): Adapt to new renderer interface.
2243            (MapCanvas.full_redraw): Reset the selection bitmap and the
2244            renderer iterator too
2245            (MapCanvas.redraw_selection): New. Force a redraw of the selection
2246            bitmap
2247            (MapCanvas.shape_selected): Only redraw the selection bitmap
2248    
2249            * test/test_baserenderer.py
2250            (TestBaseRenderer.test_polygon_no_projection)
2251            (TestBaseRenderer.test_raster_no_projection)
2252            (TestBaseRenderer.test_point_map_projection)
2253            (TestBaseRenderer.test_point_layer_and_map_projection)
2254            (TestBaseRenderer.test_point_layer_projection)
2255            (TestBaseRenderer.test_point_with_classification): Adapt to new
2256            renderer interface
2257    
2258    2003-10-24  Bernhard Herzog  <[email protected]>
2259    
2260            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
2261            (point_in_polygon_shape, shape_centroid): Raise an exception if
2262            the shape can't be read. Previously invalid shape ids would lead
2263            to a segfault.
2264    
2265            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
2266            New. test whether an exception is raised for invalid shape ids
2267    
2268    2003-10-24  Jan-Oliver Wagner <[email protected]>
2269    
2270            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
2271            as alias for 'latlong'.
2272    
2273            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
2274            as alias for 'latlong'.
2275    
2276    2003-10-24  Jan-Oliver Wagner <[email protected]>
2277    
2278            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
2279            the projection even for the UnknownPanel.
2280            (UnknownProjPanel.__init__): Define the text and create the textctrl
2281            widget.
2282            (UnknownProjPanel._DoLayout): Replaced static text widget by the
2283            textctrl created in __init__.
2284            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
2285            including the parameters of the projection.
2286            
2287    2003-10-24  Jan-Oliver Wagner <[email protected]>
2288    
2289            * Resources/Projections/epsg.proj: New. This is a list of
2290            EPSG codes with parameters for proj. The list has been
2291            generated using devtools/create_epsg.py based on the
2292            file nad/epsg of the proj 4.4.7 package. Four projection
2293            definitions have been deleted as they are not accepted by proj:
2294            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
2295            and "HD72 / EOV".
2296    
2297    2003-10-22  Bernhard Herzog  <[email protected]>
2298    
2299            Some more tweaks to the projection dialog which should fix RT
2300            #1886.
2301    
2302            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
2303            the ProjFile's messages and call the base class methods correctly
2304            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
2305            flag on the newly selected item too. Otherwise some other item is
2306            focused and the first time the focus is moved with the keyboard
2307            the selection moves in unexpected ways.
2308    
2309            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
2310            focus on the OK button, only on the projection list. That way the
2311            list really has the focus initially
2312            (ProjFrame.OnClose): Call the projection list's Destroy method to
2313            make it unsubscribe all messages
2314    
2315    2003-10-21  Bernhard Herzog  <[email protected]>
2316    
2317            Rework the projection dialog to fix a few bugs, including RT 2166
2318            and most of 2168
2319    
2320            * Thuban/UI/projlist.py: New. The class ProjectionList is a
2321            special wxListCtrl to show a list of projections in a more MVC
2322            fashion
2323    
2324            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
2325            throughout the class. The main change is to use the ProjectionList
2326            class instead of a normal wxListBox. Also, add an explicit
2327            "Unknown" projection to the projection choice control.
2328            (ProjPanel.__init__): Add an "unknown" ellipsoid
2329            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
2330            instantiation of the panel's controls to make the tab-order more
2331            natural
2332    
2333    2003-10-21  Bernhard Herzog  <[email protected]>
2334    
2335            * test/test_load.py (TestSingleLayer.file_contents)
2336            (TestSingleLayer.test): Add non-ascii characters to the titles of
2337            session, map and layer. This is effectively a port of the
2338            TestUnicodeStrings test in test_load_0_8.py which for some reason
2339            was only added there.
2340    
2341            * test/test_load_0_9.py (TestSingleLayer.file_contents)
2342            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
2343            characters to the titles of session, map and layer,.
2344    
2345    2003-10-21  Bernhard Herzog  <[email protected]>
2346    
2347            Add EPSG projection handling to .thuban files
2348    
2349            * test/test_save.py (SaveSessionTest.dtd)
2350            (SaveSessionTest.testEmptySession)
2351            (SaveSessionTest.testLayerProjection)
2352            (SaveSessionTest.testRasterLayer)
2353            (SaveSessionTest.testClassifiedLayer)
2354            (SaveSessionTest.test_dbf_table)
2355            (SaveSessionTest.test_joined_table)
2356            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
2357            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
2358            use a and epsg projection to test saving them
2359    
2360            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
2361            namespace
2362            (TestLayerVisibility.file_contents, TestLabels.file_contents)
2363            (TestLayerProjection.file_contents)
2364            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2365            (TestPostGISLayer.file_contents)
2366            (TestPostGISLayerPassword.file_contents)
2367            (TestLoadError.file_contents, TestLoadError.test): Update to use
2368            1.0-dev namespace
2369            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
2370            use 1.0-dev namespace and use an EPSG projection to test whether
2371            loading it works
2372    
2373            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
2374            as of Thuban 0.9. These are now tests to determine whether Thuban
2375            can still read files generated by Thuban 0.9
2376    
2377            * Thuban/Model/save.py (SessionSaver.write)
2378            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
2379            namespace
2380            (SessionSaver.write_projection): Write the projection's epsg
2381            attribute
2382    
2383            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
2384            thuban-1.0-dev.dtd namespace
2385            (SessionLoader.check_attrs): Allow a callable object as conversion
2386            too
2387            (SessionLoader.start_projection, SessionLoader.end_projection)
2388            (SessionLoader.start_parameter): Handle the epsg attribute and
2389            rename a few instance variables to lower case
2390    
2391            * Resources/XML/thuban-1.0.dtd: New. Only difference to
2392            thuban-0.9.dtd is the epsg attribute for projections.
2393    
2394    2003-10-21  Bernhard Herzog  <[email protected]>
2395    
2396            * test/runtests.py (main): Let the user specify which tests to run
2397            on the command line
2398    
2399            * test/support.py (ThubanTestResult.getDescription): Override to
2400            give a better short description. The description can be used as a
2401            parameter to run_tests to run that particular test in isolation.
2402    
2403    2003-10-21  Frank Koormann   <[email protected]>
2404    
2405            Popup menu for legend. Scheduled for the 1.2 release this was too
2406            simple to implement: The popup menu is bound to the legend tree, while
2407            the events are hanlded by its anchestor, the legend panel. This
2408            allows reuse of all the event handlers already implemented for the
2409            legend toolbar buttons.
2410    
2411            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
2412            to add handlers for the events issued by the popup menu.
2413            (LegendPanel._OnToggleVisibility): Handler for toggling layer
2414            visibility event
2415            (LegendPanel._OnProjection): Handler for layer projection event.
2416            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
2417            (LegendTree._OnRightClick): Event handler for right click, select item
2418            and pop up menu.
2419            (LegendTree.ToggleVisibility): Toggle layer visibility
2420            (LegendTree.LayerProjection): Raise layer projection dialog for
2421            current layer.
2422    
2423    2003-10-21  Bernhard Herzog  <[email protected]>
2424    
2425            * Resources/Projections/defaults.proj: Use correct DOCTYPE
2426            declaration. The top-level element is projectionlist not projfile
2427    
2428    2003-10-20  Bernhard Herzog  <[email protected]>
2429    
2430            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
2431            method to write a projfile and display a busy cursor and error
2432            dialogs.
2433            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
2434            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
2435            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
2436            busy cursor while loading the user and system prj files.
2437    
2438    2003-10-16  Bernhard Herzog  <[email protected]>
2439    
2440            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
2441            ProjFile objects
2442            (clear_proj_file_cache): New function to clear the cache. Mainly
2443            useful for use by the test suite
2444            (read_proj_file): Use the cache.
2445    
2446            * test/test_proj.py (TestProjFile): Clarify the doc-string
2447            (ProjFileReadTests): Update doc-string
2448            (ProjFileReadTests.test_get_system_proj_file): Check whether the
2449            system proj files is cached.
2450            (ProjFileLoadTestCase): New base class for the proj file tests
2451            derived from support.FileLoadTestCase to provide some common
2452            behavior.
2453            (TestLoadingProjFile)
2454            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
2455            (TestProjFileWithInvalidParameters.file_contents): Derive from
2456            ProjFileLoadTestCase
2457            (TestLoadingProjFile.test_caching): New. Test whether the cache
2458            works
2459    
2460    2003-10-16      Silke Reimer    <[email protected]>
2461    
2462            * debian/*: New directory with configuration files for building a thuban
2463              deb-package.
2464    
2465    2003-10-14  Bernhard Herzog  <[email protected]>
2466    
2467            * test/test_proj.py: Execute support.run_tests when run as
2468            __main__ so that missing unsubscribes are detected
2469            (TestProjFile.tearDown): Destroy the proj_file properly
2470    
2471    2003-10-14  Bernhard Herzog  <[email protected]>
2472    
2473            * Thuban/Model/messages.py (PROJECTION_ADDED)
2474            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
2475            the ProjFile objects
2476    
2477            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
2478            easily send messages when the projections change
2479            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
2480            when the change was successful
2481    
2482            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
2483            proj file messages
2484            (TestProjFile.test_add_remove)
2485            (TestProjFile.test_remove_non_existing)
2486            (TestProjFile.test_replace)
2487            (TestProjFile.test_replace_non_existing): Test whether the right
2488            messages are sent
2489    
2490    2003-10-14  Bernhard Herzog  <[email protected]>
2491    
2492            * test/test_proj.py (TestProjFile.test): Refactor into several
2493            tests
2494            (TestProjFile.test_add_remove)
2495            (TestProjFile.test_remove_non_existing)
2496            (TestProjFile.test_replace)
2497            (TestProjFile.test_replace_non_existing): Some of the new
2498            individual test cases
2499            (TestProjFileSimple): New class for the rest of the test cases
2500            that came out of the refactoring
2501            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
2502            derived classes don't have to
2503    
2504    2003-10-13  Bernhard Herzog  <[email protected]>
2505    
2506            Add an optional EPSG code to the projection objects and extend the
2507            .proj file format accordingly.
2508    
2509            * Resources/XML/projfile.dtd (element projection): Add epsg
2510            attribute
2511    
2512            * Thuban/Model/proj.py (Projection.__init__): New parameter and
2513            instance variable epsg. Update doc-string
2514            (Projection.EPSGCode, Projection.Label): New methods to provide
2515            access to EPSG code and a label for use in dialogs
2516    
2517            * Thuban/Model/resource.py (ProjFileReader.start_projection)
2518            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
2519            Handle the epsg code attribute when reading or writing proj files
2520    
2521            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
2522            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
2523            (ProjFrame.__FillAvailList): Use the projection's Label method to
2524            get the string for the list box
2525    
2526            * test/test_proj.py (TestProjection.test_label)
2527            (TestProjection.test_label_epsg)
2528            (TestProjection.test_epsgcode_for_non_epsg_projection)
2529            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
2530            for the label and EPSGCode methods
2531            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
2532            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
2533            objects in the test cases and put the expected contents into the
2534            test case methods too. Update doTestWrite accordingly
2535            (TestLoadingProjFile)
2536            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
2537            read tests from TestProjFile.
2538            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
2539            tests are now in the new classes.
2540            (sample_projfile, sample_projfile_data)
2541            (sample_projfile2, sample_projfile_data2): Removed. Not used
2542            anymore.
2543            (TestProjFile.test_read_unreadable_file): No need to reset the
2544            permissions at the end anymore since we use a unique filename
2545    
2546    2003-10-13  Bernhard Herzog  <[email protected]>
2547    
2548            * test/test_proj.py: Some more refactoring of the test cases
2549            (ProjFileTest): New base class for the proj file tests.
2550            (TestProjFile): Derive from ProjFileTest
2551            (TestProjFile.test_read_unreadable_file)
2552            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
2553            the new filename method to get a unique filename
2554            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
2555            (WriteProjFileTests): New class for proj file write tests.
2556            Contains the write test that were in TestProjFile originally.
2557    
2558    2003-10-13  Bernhard Herzog  <[email protected]>
2559    
2560            * test/test_proj.py (TestProjFile.testRead)
2561            (TestProjFile.test_read_non_existing_file)
2562            (TestProjFile.test_read_unreadable_file)
2563            (TestProjFile.test_read_empty_file): Split into several methods.
2564    
2565    2003-10-10  Bernhard Herzog  <[email protected]>
2566    
2567            * Thuban/UI/sizers.py: New file with custom sizers.
2568    
2569            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
2570            all projection type specific panels and put them into a
2571            NotebookLikeSizer. This way the dialog doesn't change its size
2572            when a different projection is selected
2573            (ProjFrame.__init__): Rename projection_panels
2574            projection_panel_defs and reuse projection_panels for a list of
2575            the instantiated panels.
2576            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
2577            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
2578            the panels
2579            (UnknownProjPanel._DoLayout): Place the newlines in the message
2580            differently to make the panel narrower.
2581            (TMPanel._DoLayout): Layout the parameters in one column.
2582    
2583    2003-10-10  Bernhard Herzog  <[email protected]>
2584    
2585            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
2586            that contains all the setup for the dialog's widgets, layout and
2587            event handling.
2588            (__): Call build_dialog to build the dialog.
2589            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
2590            Their functionality is now in build_dialog
2591            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
2592            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
2593            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
2594            different widget names and hierarchy introduced with build_dialog.
2595    
2596    2003-10-10  Bernhard Herzog  <[email protected]>
2597    
2598            * README: Fix typo.
2599    
2600    2003-10-09  Bernhard Herzog  <[email protected]>
2601    
2602            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
2603            projection is already in the list. This is *a lot* faster when
2604            loading files with hundreds of projections since it saves a linear
2605            search. OTOH this will allow adding the same projection to the
2606            user.proj file multiple times in the projection dialog but we'll
2607            deal with that later
2608    
2609    2003-10-09  Jan-Oliver Wagner <[email protected]>
2610    
2611            * devtools: New. Directory for developer tools that are not intended
2612            for the regular user.
2613    
2614            * devtools/create_epsg.py: New. Convert the epsg file of proj into
2615            a python .proj file.
2616    
2617    2003-10-09  Bernhard Herzog  <[email protected]>
2618    
2619            * test/test_proj.py
2620            (TestProjection.test_get_parameter_without_equals_sign): New. Test
2621            whether GetParameter handles parameters without "=" sign correctly
2622    
2623            * Thuban/Model/proj.py (Projection.GetParameter): Handle
2624            parameters that do not contain a "=". Update the doc-string
2625    
2626    2003-10-08  Bernhard Herzog  <[email protected]>
2627    
2628            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
2629            length limit on the projname text control
2630    
2631    2003-10-08  Bernhard Herzog  <[email protected]>
2632    
2633            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
2634            (TestProjection.test_get_projection_units_normal): New. Tests for
2635            the Projection.GetProjectedUnits method
2636    
2637    2003-10-08  Jan-Oliver Wagner <[email protected]>
2638    
2639            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
2640            Added missing 'val' parameter.
2641    
2642    2003-10-08  Bernhard Herzog  <[email protected]>
2643    
2644            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
2645            projection type of the currently selected projection is not known,
2646            i.e. there's no panel for it, use the UnknownProjPanel
2647            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
2648            the actual replacing of the proj panel into the new method
2649            _show_proj_panel.
2650            (UnknownProjPanel): Add doc-string.
2651            (UnknownProjPanel._DoLayout): Insert a newline into the text so
2652            that the panel is not so wide.
2653    
2654    2003-10-08  Bernhard Herzog  <[email protected]>
2655    
2656            * Thuban/Model/resource.py (read_proj_file): Return the warnings
2657            too. Update the doc-string
2658            (get_proj_files): Removed. It wasn't used anywhere
2659            (get_system_proj_files, get_system_proj_file): Rename to
2660            get_system_proj_file and return the ProjFile object and not a list
2661            of ProjFile objects. Update the callers.
2662            (get_user_proj_files, get_user_proj_file): Rename to
2663            get_user_proj_file return the ProjFile object and not a list of
2664            ProjFile objects. Update the callers.
2665            (ProjFileReader.__init__): New instance variable for the warnings.
2666            Rename the __pf ivar to projfile. Update the methods referring to
2667            __pf
2668            (ProjFileReader.end_projection): Catch any errors raised when
2669            instantiating the projection and record that as an error. The
2670            projection will not be in the final ProjFile object.
2671            (ProjFileReader.GetWarnings): New method to return the warnings.
2672    
2673            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
2674            show the warnings from the projfile reader
2675            (ProjFrame._OnImport): Deal with any warnings returned by
2676            read_proj_file
2677            (ProjFrame.__FillAvailList): Deal with any warnings returned by
2678            get_system_proj_file or get_user_proj_file.
2679    
2680            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
2681            (TestProjFileWithInvalidParameters.file_contents): New test cases
2682            to test whether read_proj_file handles invalid projection
2683            parameters correctly
2684            (TestProjFile.test_get_system_proj_file): New. Simple test for
2685            resource.get_system_proj_file
2686    
2687    2003-10-07  Bernhard Herzog  <[email protected]>
2688    
2689            * test/test_derivedshapestore.py
2690            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
2691            properly so that the temporary directories get deleted correctly
2692    
2693    2003-10-06  Bernhard Herzog  <[email protected]>
2694    
2695            Handle the title changes in a proper MVC way.
2696    
2697            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
2698            canvas' TITLE_CHANGED messages
2699            (MainWindow.update_title): New. Update the main window's title
2700            (MainWindow.__SetTitle): Removed. Use update_title instead.
2701            (MainWindow.SetMap): Use update_title instead of __SetTitle
2702            (MainWindow.RenameMap): Do change the window title explicitly
2703            here. That's handled in a proper MVC way now.
2704            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
2705            messages
2706    
2707            * Thuban/Lib/connector.py (Conduit): New class to help classes
2708            that forward messages
2709    
2710            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
2711            (ViewPort): Derive from Conduit instead of Publisher
2712            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
2713            when calling the inherited versions
2714            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
2715            methods to subscribe and unsubscribe map messages
2716            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
2717            handle the map subscriptions
2718            (ViewPort.Map, ViewPort.map_projection_changed)
2719            (ViewPort.layer_projection_changed): Add or update doc-strings
2720    
2721            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
2722            typo
2723            (MyConduit): Helper class for the Conduit test.
2724            (TestConduit): Test cases for Conduit
2725    
2726            * test/test_connector.py: Use support.run_tests as main.
2727    
2728            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
2729            the TITLE_CHANGED messages
2730            (ViewPortTest.test_forwarding_title_changed): New test to check
2731            whether the viewport forwards the map's TITLE_CHANGED messages
2732            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
2733            after the port's because the latter may require a still functional
2734            map.
2735    
2736    2003-10-06  Bernhard Herzog  <[email protected]>
2737    
2738            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
2739            doc-string
2740    
2741    2003-10-06  Bernhard Herzog  <[email protected]>
2742    
2743            * test/test_viewport.py (ViewPortTest.setUp)
2744            (SimpleViewPortTest.test_init_with_size): Move the test for the
2745            initial size as a constructor parameter from ViewPortTest.setUp
2746            method to a new separate test in SimpleViewPortTest.
2747    
2748    2003-10-06  Bernhard Herzog  <[email protected]>
2749    
2750            * test/test_viewport.py (MockView): New class derived from
2751            ViewPort with a mock implementation of GetTextExtent to be used in
2752            the test cases
2753            (ViewPortTest.setUp): Use MockView instead of ViewPort
2754    
2755            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
2756            into what would be a "pure virtual function" in C++: always raise
2757            NotImplementedError. Mock implementations for test cases don't
2758            belong into the real code
2759    
2760    2003-10-02  Bernhard Herzog  <[email protected]>
2761    
2762            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
2763            close the dbf file we create so that it's contents have been
2764            written properly.
2765    
2766            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
2767            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
2768            Update to shapelib 1.2.10
2769    
2770    2003-10-01  Jan-Oliver Wagner <[email protected]>
2771    
2772            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
2773            it annoys lintian which warns about these files not being
2774            executable. The #! isn't necessary here since if you absolutely
2775            must execute them you can always say "python <filename>".
2776    
2777    2003-09-26  Bernhard Herzog  <[email protected]>
2778    
2779            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
2780            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
2781            is ported to a newer the import will fail, so it should be noticed
2782            immediately that this function is gone.
2783            Fixes RT#1919
2784    
2785    2003-09-26  Bernhard Herzog  <[email protected]>
2786    
2787            Add a DTD for the projection files and make thuban write valid
2788            projection files
2789    
2790            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
2791            files
2792    
2793            * Thuban/Model/resource.py (ProjFileSaver.write): Use
2794            'projectionlist' as the name in the document type declaration so
2795            that it matches the element type of the root element.
2796    
2797            * test/test_proj.py (sample_projfile, sample_projfile2): Use
2798            'projectionlist' as the name in the document type declaration just
2799            as it is done now in the files thuban would write
2800            (sample_projfile, sample_projfile_data): Fix spelling of
2801            "Mercator"
2802            (TestProjFile.doTestWrite): Validate the written and the expected
2803            XML data
2804            (TestProjFile): Derive from ValidationTest so that we can run xml
2805            validation tests
2806    
2807    2003-09-24  Bernhard Herzog  <[email protected]>
2808    
2809            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
2810            modify the list returned by map.Layers() in place since it is the
2811            actual list of layers used by the map.
2812    
2813    2003-09-23  Jan-Oliver Wagner <[email protected]>
2814    
2815            * Doc/manual/thuban-manual.xml: Added subsection to chapter
2816            Extensions to describe the extensions coming with the Thuban
2817            standard package (gns2shp and importAPR).
2818    
2819    2003-09-23  Bernhard Herzog  <[email protected]>
2820    
2821            * libraries/thuban/wxproj.cpp (project_point): if there's an
2822            inverse but no forward projection, convert to degrees after
2823            applying the inverse projection. Fixes RT#2096
2824    
2825            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
2826            implicitly tests for the fix to RT#2096
2827    
2828            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
2829            Check that the sequences have the same lengths
2830    
2831            * Resources/Projections/defaults.proj (Geographic projection): Use
2832            a much more precise value for the to_meter attribute.
2833    
2834    2003-09-22  Bernhard Herzog  <[email protected]>
2835    
2836            * test/support.py (initthuban): Make sure to unset the LANG env.
2837            var. so that tests that compare translated strings work. Solves RT
2838            #2094
2839    
2840    2003-09-22  Jan-Oliver Wagner <[email protected]>
2841    
2842            Small improvement of APR import.
2843    
2844            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
2845            Added tests for text-ranges.
2846    
2847            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
2848            returns a string object if the range is based on text.
2849    
2850            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
2851            range retrieval.
2852    
2853    2003-09-22  Jan-Oliver Wagner <[email protected]>
2854    
2855            Initial version of the importAPR extension which is in
2856            experimental state.
2857    
2858            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
2859            /Extensions/importAPR/test/: New directories.
2860    
2861            * /Extensions/importAPR/samples/README: New: Howto load the samples.
2862    
2863            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
2864            file which refers to the Thuban Iceland demo data.
2865    
2866            * /Extensions/importAPR/test/README: New: Howto execute the tests.
2867    
2868            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
2869    
2870            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
2871            as in '.apr'-files.
2872    
2873            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
2874            ODB Objects as in '.apr', '.avl' and other files.
2875    
2876            * /Extensions/importAPR/__init__.py: New: Init to make this
2877            directory a package.
2878    
2879            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
2880            project file (.apr) and convert it to Thuban.
2881    
2882    2003-09-22  Jan-Oliver Wagner <[email protected]>
2883    
2884            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
2885    
2886    2003-09-19  Jan-Oliver Wagner <[email protected]>
2887    
2888            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
2889            with description on RPM installation and RPM binary package
2890            creation.
2891    
2892    2003-09-18  Bernhard Herzog  <[email protected]>
2893    
2894            * setup.py (data_files): Only add the mo files if the Locales
2895            directory actually exists, so that setup.py works with a fresh CVS
2896            checkout
2897    
2898    2003-09-12  Jan-Oliver Wagner <[email protected]>
2899    
2900            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
2901            in viewport, not anymore in view
2902    
2903    2003-09-04  Jan-Oliver Wagner <[email protected]>
2904    
2905            Introducing first Extension (gns2shp).
2906    
2907            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
2908    
2909            * Extensions/__init__.py: New. init to make this dir a package.
2910    
2911            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
2912    
2913            * Extensions/gns2shp/test/README: New. some info on this test directory.
2914    
2915            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
2916    
2917            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
2918            of Shapefile from GNS text file format
2919    
2920    2003-09-03  Jan-Oliver Wagner <[email protected]>
2921    
2922            Fix/workaround for bug #2019:
2923            https://intevation.de/rt/webrt?serial_num=2019
2924    
2925            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
2926            (IdentifyView.__init__): Added another button that allows to
2927            stop the identify mode.
2928            (IdentifyView.OnStop): New. Stops the identify mode.
2929    
2930    2003-09-03  Jan-Oliver Wagner <[email protected]>
2931    
2932            Introducing a new exception dialog that allows to exit the
2933            application immediately.
2934            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
2935    
2936            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
2937    
2938            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2939            Made strings available to translations. Exchanged the simple
2940            ScrolledMessageDialog by the new ExceptionDialog.
2941    
2942    2003-09-01  Bernhard Herzog  <[email protected]>
2943    
2944            * NEWS: New. Summary of changes and release notes.
2945    
2946            * MANIFEST.in: Add NEWS
2947    
2948    2003-09-01  Bernhard Herzog  <[email protected]>
2949    
2950            * MANIFEST.in: Correct the include statement for the mo-files and
2951            include the documentation too.
2952    
2953            * setup.py (data_files): Add the .mo files
2954            (setup call): Up to version 0.9.0
2955    
2956    2003-09-01  Bernhard Herzog  <[email protected]>
2957    
2958            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
2959            parameter list to just parent and session
2960            (ChooseDBTableDialog.__set_properties): Removed. Setting the
2961            selection of empty list boxes is not allowed (and produces C++
2962            assertion errors) and the rest of the setup is better done in
2963            __init__ anyway.
2964            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
2965            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
2966            builtins True/False for booleans to avoid warnings from wxPython
2967    
2968            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
2969            ChooseDBTableDialog constructor parameters.
2970    
2971    2003-09-01  Bernhard Herzog  <[email protected]>
2972    
2973            * Thuban/Model/postgisdb.py
2974            (PostGISTable): Extend doc-string
2975            (PostGISTable._fetch_table_information): Set the column index
2976            correctly, pretending ignored columns don't exist.
2977    
2978            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
2979            for postgis tables with data types not yet supported by thuban.
2980    
2981    2003-08-29  Bernhard Herzog  <[email protected]>
2982    
2983            * HOWTO-Release: Tweak item about running the tests.
2984    
2985    2003-08-29  Jan-Oliver Wagner <[email protected]>
2986    
2987            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
2988    
2989    2003-08-29  Bernhard Herzog  <[email protected]>
2990    
2991            Add some missing parameters to projections. Proj complains about
2992            them on windows but for some reason not on Linux.
2993    
2994            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
2995            missing required projection parameters
2996    
2997            * test/test_proj.py (TestProjFile.test): Add missing required
2998            projection parameters
2999    
3000            * test/test_load_0_8.py (TestLayerProjection.file_contents)
3001            (TestLayerProjection.test): Add missing required projection
3002            parameters and tests for them
3003    
3004            * test/test_load.py (TestLayerProjection.file_contents)
3005            (TestLayerProjection.test): Add missing required projection
3006            parameters and tests for them
3007    
3008            * test/test_layer.py (TestLayer.test_base_layer): Add missing
3009            required projection parameters
3010    
3011    2003-08-29  Bernhard Herzog  <[email protected]>
3012    
3013            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
3014            access the pj_errno because directly accessing pj_errno doesn't
3015            work on windows if the proj library is in a DLL
3016    
3017            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
3018    
3019    2003-08-28  Bernhard Herzog  <[email protected]>
3020    
3021            * test/test_proj.py: Import things from Thuban after calling
3022            initthuban
3023    
3024            * test/test_load.py (LoadSessionTest.filenames): New class
3025            variable with the filename attributes to normalize
3026            (LoadSessionTest.check_format): Pass self.filenames to
3027            sax_eventlist to normalize the filename attributes
3028    
3029            * test/xmlsupport.py: Add cvs keywords
3030            (SaxEventLister.__init__): New parameter filenames which indicates
3031            attributes that contain filenames
3032            (SaxEventLister.startElementNS): Normalize the filename attributes
3033            with os.path.normpath
3034            (sax_eventlist): New parameter filenames to pass through to
3035            SaxEventLister
3036    
3037            * test/test_derivedshapestore.py: Make this file callable as a
3038            program to execute the tests
3039            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
3040            the session to self.session so that it gets destroyed properly
3041    
3042            * test/test_layer.py (TestLayer.tearDown): Call the session's
3043            Destroy method
3044    
3045            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
3046            too if it exists
3047            (TestMapAddLayer.test_add_layer): Bind the session to self.session
3048            so that it gets destroyed properly
3049    
3050            * test/postgissupport.py (reason_for_not_running_tests): Add a
3051            test for the existence of popen2.Popen4.
3052    
3053            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
3054            reliable way to destroy the sessions created in the test cases
3055            (SaveSessionTest.test_dbf_table): Bind the session to self.session
3056            so that it gets destroyed properly
3057            (SaveSessionTest.testLayerProjection): Bind the session to
3058            self.session so that it gets destroyed properly
3059    
3060            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
3061            sure that the session is destroyed properly
3062    
3063            * test/test_shapefilestore.py: Make this callable as a program to
3064            execute the tests
3065    
3066            * test/test_scalebar.py: Remove unnecessary import of _ from
3067            Thuban
3068    
3069            * test/support.py (print_garbage_information): Call initthuban
3070            here because it may be called indirectly from test cases that test
3071            test support modules which do not use anything from thuban itself
3072            (ThubanTestProgram.runTests): Remove unnecessary debug print
3073    
3074    2003-08-28  Bernhard Herzog  <[email protected]>
3075    
3076            * Thuban/version.py (longversion): Update to 0.9
3077    
3078            * Thuban/UI/mainwindow.py: Remove some unused imports
3079    
3080            * README: Add section about required additional software. Add date
3081            and revision CVS keywords
3082    
3083            * HOWTO-Release: Add item about the translations. Add date and
3084            revision CVs keywords and change formatting to match README a bit
3085            better
3086    
3087            * po/de.po: Update for 0.9
3088    
3089            * test/README: Tweak the wording a little because many tests are
3090            not really unittest.
3091    
3092    2003-08-27  Bernhard Herzog  <[email protected]>
3093    
3094            As preparation for the 0.9 release, switch thuban files to a
3095            non-dev namespace
3096    
3097            * Thuban/Model/save.py (SessionSaver.write_session): Write files
3098            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
3099            namespace
3100    
3101            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
3102            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
3103    
3104            * test/test_save.py (SaveSessionTest.dtd)
3105            (SaveSessionTest.testEmptySession)
3106            (SaveSessionTest.testSingleLayer)
3107            (SaveSessionTest.testLayerProjection)
3108            (SaveSessionTest.testRasterLayer)
3109            (SaveSessionTest.testClassifiedLayer)
3110            (SaveSessionTest.test_dbf_table)
3111            (SaveSessionTest.test_joined_table)
3112            (SaveSessionTest.test_save_postgis): Update for new namespace
3113    
3114            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
3115            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3116            (TestLayerProjection.file_contents)
3117            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3118            (TestPostGISLayer.file_contents)
3119            (TestPostGISLayerPassword.file_contents)
3120            (TestLoadError.file_contents, TestLoadError.test): Update for new
3121            namespace
3122    
3123    2003-08-27  Bernhard Herzog  <[email protected]>
3124    
3125            Make the table interface distinguish between row ids (an integer
3126            that uniquely identifies a row) and row ordinals (a simple row
3127            count from 0 to NumRows() - 1)
3128    
3129            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
3130            (PostGISTable.RowOrdinalToId): New methods to conver between row
3131            ids and row ordinals
3132            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
3133            parameter row_is_ordinal to indicate whether the row parameter is
3134            the row id or the ordinal
3135    
3136            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
3137            (TransientTableBase.RowOrdinalToId)
3138            (AutoTransientTable.RowIdToOrdinal)
3139            (AutoTransientTable.RowOrdinalToId): Same new methods as in
3140            PostGISTable.
3141            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
3142            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
3143            Same new parameter as in PostGISTable.
3144    
3145            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
3146            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
3147            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
3148            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
3149            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
3150            parameter as in PostGISTable.
3151    
3152            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
3153            (DataTable.RowOrdinalToId): New methods to convert between row ids
3154            and row ordinals.
3155            (TableGrid.SelectRowById): New method to select a row based on its
3156            ID as opposed to its ordinal
3157            (DataTable.GetValue, TableGrid.OnRangeSelect)
3158            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
3159            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
3160            (LayerTableFrame.__init__): Convert between row ids and row
3161            ordinals as appropriate
3162    
3163            * test/postgissupport.py (PostGISDatabase.__init__): Add
3164            doc-string.
3165            (PostGISDatabase.initdb): The optional third item in a tuple in
3166            tables is now a (key, value) list with additional arguments to
3167            pass to upload_shapefile
3168            (upload_shapefile): New parameter gid_offset to allow gids that
3169            are not the same as the shapeids in the shapefile
3170            (PostgreSQLServer.get_default_static_data_db): Use the new
3171            gid_offset to make the gids in landmarks 1000 higher than the
3172            shapeids in the shapefile
3173    
3174            * test/test_viewport.py
3175            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
3176            new shapeids in the landmarks table
3177    
3178            * test/test_transientdb.py
3179            (TestTransientTable.run_iceland_political_tests)
3180            (TestTransientTable.test_transient_joined_table): Add tests for
3181            the new table methods and new keywords arguments.
3182    
3183            * test/test_postgis_db.py
3184            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
3185            (TestPostGISTable.test_read_value_row_count_mode)
3186            (TestPostGISTable.test_row_id_to_ordinal)
3187            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
3188            table methods and the new arguments
3189            (TestPostGISShapestorePoint.test_shapes_in_region)
3190            (TestPostGISShapestorePoint.test_shape_raw_data)
3191            (TestPostGISShapestorePoint.test_shape_points)
3192            (TestPostGISShapestorePoint.test_shape_shapeid)
3193            (TestPostGISShapestorePoint.test_all_shapes)
3194            (TestPostGISTable.test_simple_query)
3195            (TestPostGISTable.test_simple_query)
3196            (TestPostGISTable.test_simple_query)
3197            (TestPostGISTable.test_read_value)
3198            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
3199            shapeids in the landmarks table
3200    
3201            * test/test_memory_table.py
3202            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
3203            (TestMemoryTable.test_read_value_row_count_mode)
3204            (TestMemoryTable.test_row_id_to_ordinal)
3205            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
3206            table methods and the new arguments
3207    
3208            * test/test_dbf_table.py
3209            (TestDBFTable.test_read_row_as_dict_row_count_mode)
3210            (TestDBFTable.test_read_value_row_count_mode)
3211            (TestDBFTable.test_row_id_to_ordinal)
3212            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
3213            methods and the new arguments
3214    
3215    2003-08-26  Bernhard Herzog  <[email protected]>
3216    
3217            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
3218            more postgis specific but much faster method to get the bounding
3219            box
3220    
3221    2003-08-26  Bernhard Herzog  <[email protected]>
3222    
3223            * Thuban/Model/postgisdb.py (PostGISTable.Title)
3224            (PostGISShapeStore.AllShapes): Add these missing methods.
3225            (PostGISShapeStore.ShapesInRegion): No need to raise
3226            StopIteration. We can simply return
3227    
3228            * test/test_postgis_db.py (TestPostGISTable.test_title)
3229            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
3230            new methods
3231    
3232    2003-08-25  Bernhard Herzog  <[email protected]>
3233    
3234            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
3235    
3236            * test/test_postgis_db.py (PolygonTests): New class containing
3237            those tests from TestPostGISShapestorePolygon that can also be
3238            used to test MUTLIPOLYGON tables
3239            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
3240            so derive from that
3241            (TestPostGISShapestoreMultiPolygon): New class with tests for
3242            MUTLIPOLYGON tables
3243    
3244            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
3245            tables argument to have tuples with three items to override the
3246            WKT type used.
3247            (PostgreSQLServer.get_default_static_data_db): Use the above to
3248            create a polygon table with MUTLIPOLYGONs
3249            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
3250            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
3251            coords_to*
3252            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
3253            (wkt_converter): New. Map WKT types to converters
3254            (upload_shapefile): New parameter force_wkt_type to use a
3255            different WKT type than the default
3256    
3257    2003-08-25  Bernhard Herzog  <[email protected]>
3258    
3259            * Thuban/UI/application.py
3260            (ThubanApplication.run_db_param_dialog): New. Suitable as a
3261            db_connection_callback. Main difference is that the dialog run
3262            from this method doesn't have a parent so it can be used even when
3263            there is no main window
3264            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
3265            no db_connection_callback was given. This way the dialog pops up
3266            even when the .thuban file was given as a command line parameter.
3267    
3268    2003-08-25  Bernhard Herzog  <[email protected]>
3269    
3270            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
3271            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
3272            which leads to an effectively frozen X session because the user
3273            can only interact with the dialog but the mouse is still grabbed
3274            by the canvas.
3275            Also, call the tool's Hide method before MouseLeftUp because
3276            MouseLeftUp may change the tool's coordinates.
3277    
3278    2003-08-25  Bernhard Herzog  <[email protected]>
3279    
3280            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
3281            LoadCancelled exceptions and handle them by returning immediately.
3282    
3283    2003-08-25  Bernhard Herzog  <[email protected]>
3284    
3285            GUI part of loading sessions with postgis connections which may
3286            require user interaction to get passwords or updated parameters
3287    
3288            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
3289            bit nucer and be more generic.
3290            (DBFrame.OnAdd): Adapt to new DBDialog interface
3291    
3292            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
3293            optional parameter db_connection_callback which is passed to
3294            load_session.
3295    
3296            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
3297            Suitable as a db_connection_callback
3298            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
3299            db_connection_callback of the application's OpenSession method
3300    
3301    
3302    2003-08-25  Bernhard Herzog  <[email protected]>
3303    
3304            Basic loading of sessions containing postgis connections:
3305    
3306            * Thuban/Model/load.py (LoadError): Add doc-string
3307            (LoadCancelled): New exception class to indicate a cancelled load
3308            (SessionLoader.__init__): Add the db_connection_callback parameter
3309            which will be used by the loader to get updated parameters and a
3310            password for a database connection
3311            (SessionLoader.__init__): Add the new XML elements to the
3312            dispatchers dictionary
3313            (SessionLoader.check_attrs): Two new conversions, ascii to convert
3314            to a byte-string object and idref as a generic id reference
3315            (SessionLoader.start_dbconnection)
3316            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
3317            elements
3318            (load_session): Add the db_connection_callback to pass through the
3319            SessionLoader
3320    
3321            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
3322            New classes to test loading of sessions with postgis database
3323            connections.
3324    
3325    2003-08-25  Bernhard Herzog  <[email protected]>
3326    
3327            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
3328            replace it and the comment with __BuildDate__ by the Source: and
3329            Id: cvs keywords as used in the other files.
3330    
3331    2003-08-25  Bernhard Herzog  <[email protected]>
3332    
3333            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
3334            LoadError when a required attribute is missing. The code used to
3335            be commented out for some reason, but probably should have been
3336            active.
3337    
3338            * test/test_load.py (TestLoadError.test): Test the message in the
3339            LoadError too to make sure it really is about the missing
3340            attribute
3341    
3342    2003-08-22  Bernhard Herzog  <[email protected]>
3343    
3344            * test/test_save.py (SaveSessionTest.test_dbf_table)
3345            (SaveSessionTest.test_joined_table): Add XML validation tests.
3346    
3347    2003-08-22  Bernhard Herzog  <[email protected]>
3348    
3349            Implement saving a session with a postgis connection
3350    
3351            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
3352            elements for database connections and shapestores using db
3353            connections
3354            (session): Add the dbconnections to the content model
3355    
3356            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
3357            Write the db connections
3358            (SessionSaver.write_session): Call write_db_connections to write
3359            the connection before the data sources
3360            (SessionSaver.write_data_containers): Handle postgis shapestores
3361    
3362            * test/test_save.py (SaveSessionTest.thubanids)
3363            (SaveSessionTest.thubanidrefs): Update for new DTD
3364            (SaveSessionTest.test_save_postgis): New. Test saving a session
3365            with postgis connections
3366    
3367            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
3368            (PostGISTable.TableName): New accessor methods for the connection
3369            and table name
3370    
3371            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
3372            (TestPostGISTable.test_dbname): New methods to test the new
3373            PostGISConnection methods
3374    
3375    2003-08-22  Bernhard Herzog  <[email protected]>
3376    
3377            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
3378            for exceptions occurring when establishing a Database connection
3379            (PostGISConnection.connect): Catch psycopg.OperationalError during
3380            connects and raise ConnectionError.
3381    
3382            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
3383            tests for database exceptions
3384    
3385    2003-08-22  Bernhard Herzog  <[email protected]>
3386    
3387            Prepare the test suite for tests with required authentication
3388    
3389            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
3390            variables with two predefined users/passwords, one for the admin
3391            and one for a non-privileged user.
3392            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
3393            the non-privileged user to the database and set the admin password
3394            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
3395            Better error reporting
3396            (PostgreSQLServer.connection_params)
3397            (PostgreSQLServer.connection_string): New methods to return
3398            information about how to connect to the server
3399            (PostgreSQLServer.execute_sql): New. Convenience method to execute
3400            SQL statements
3401            (PostgreSQLServer.require_authentication): Toggle whether the
3402            server requires authentication
3403            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
3404            Add or alter users
3405            (PostGISDatabase.initdb): Pass the admin name one the
3406            subprocesses' command lines. Grant select rights on
3407            geometry_columns to everybody.
3408            (upload_shapefile): Use the admin name and password when
3409            connecting. Grant select rights on the new table to everybody.
3410    
3411            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
3412            server's new methods to get the connection parameters.
3413    
3414            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
3415            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
3416            server's new methods to get the connection parameters.
3417    
3418            * test/test_postgis_db.py
3419            (TestPostGISConnection.test_gis_tables_empty)
3420            (TestPostGISConnection.test_gis_tables_non_empty)
3421            (PostGISStaticTests.setUp): Use the server's new methods to get
3422            the connection parameters.
3423    
3424    2003-08-22  Bernhard Herzog  <[email protected]>
3425    
3426            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
3427    
3428            * Thuban/version.py: Add psycopg version
3429    
3430            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
3431            version of the psycopg module
3432    
3433    2003-08-22  Bernhard Herzog  <[email protected]>
3434    
3435            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
3436            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
3437            at the moment. The functionality should probably be implemented
3438            some time, though.
3439            (DBFrame.OnRemove): Display a message if the connection can't be
3440            removed because it's still in use.
3441    
3442    2003-08-22  Jan-Oliver Wagner <[email protected]>
3443    
3444            * Thuban/UI/about.py (About.__init__): split up the huge about
3445            text into elements/lists for easier translation. This fixes bug
3446            https://intevation.de/rt/webrt?serial_num=2058
3447            Also, made some forgotten string available for the i18n.
3448    
3449    2003-08-21  Bernhard Herzog  <[email protected]>
3450    
3451            Make postgis support really optional including insensitive menu
3452            items.
3453    
3454            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
3455            whether the postgis is supported.
3456    
3457            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
3458            to make postgis support optional
3459    
3460            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
3461            version of Thuban.Model.postgisdb.has_postgis_support
3462            (database_management command): Make it only sensitive if postgis
3463            is supported.
3464    
3465    2003-08-21  Jan-Oliver Wagner <[email protected]>
3466    
3467            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
3468            (section Adding and Removing Layers): Added text and described
3469            multi-selection.
3470            (chapter Extensions): New.
3471    
3472    2003-08-21  Jan-Oliver Wagner <[email protected]>
3473    
3474            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
3475            settings to allow multiple files to load into the map.
3476            Also reduced selection to *.shp as a default.
3477    
3478    2003-08-20  Bernhard Herzog  <[email protected]>
3479    
3480            Add dialogs and commands to open database connections and add
3481            database layers.
3482    
3483            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
3484            method to open the database connection management dialog
3485            (MainWindow.AddDBLayer): New method to add a layer from a database
3486            (_has_dbconnections): New helper function to use for sensitivity
3487            (database_management command, layer_add_db command): New commands
3488            that call the above new methods.
3489            (main_menu): Add the new commands to the menu.
3490    
3491            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
3492            (PostGISConnection.connect): Establish the actual connection in a
3493            separate method and call it in __init__. This makes it easier to
3494            override the behavior in test cases
3495            (PostGISConnection.BriefDescription): New method to return a brief
3496            description for use in dialogs.
3497    
3498            * test/test_postgis_db.py (NonConnection): DB connection that
3499            doesn't actually connect
3500            (TestBriefDescription): New class with tests for the new
3501            BriefDescription method
3502    
3503    2003-08-19  Jan-Oliver Wagner <[email protected]>
3504    
3505            Moved anything from extensions to libraries.
3506    
3507            * libraries: New.
3508    
3509            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
3510    
3511            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
3512            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
3513            been moved here from thuban/extensions/pyprojection/
3514            See there in the Attic for the older history.
3515    
3516            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
3517            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
3518            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
3519            have been moved here from thuban/extensions/pyshapelib/
3520            See there in the Attic for the older history.
3521    
3522            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
3523            files have been moved here from thuban/extensions/shapelib/
3524            See there in the Attic for the older history.
3525    
3526            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
3527            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
3528            thuban/extensions/thuban/
3529            See there in the Attic for the older history.
3530    
3531            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
3532    
3533            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
3534            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
3535    
3536            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
3537            Moved to libraries/shapelib.
3538    
3539            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
3540            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
3541            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
3542            Moved to libraries/pyshapelib.
3543    
3544            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
3545            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
3546            Moved to libraries/pyprojection.
3547    
3548            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
3549    
3550            * extensions: Removed.
3551    
3552    2003-08-19  Bernhard Herzog  <[email protected]>
3553    
3554            * test/test_viewport.py (ViewPortTest): We don't use the
3555            facilities of FileTestMixin so don't derive from it.
3556            (TestViewportWithPostGIS): New class with tests for using a
3557            viewport on a map with postgis layers.
3558    
3559    2003-08-19  Bernhard Herzog  <[email protected]>
3560    
3561            Add the db connection management to the session.
3562    
3563            * Thuban/Model/session.py (Session.__init__): New instance
3564            variable db_connections
3565            (Session.AddDBConnection, Session.DBConnections)
3566            (Session.HasDBConnections, Session.CanRemoveDBConnection)
3567            (Session.RemoveDBConnection): New methods to manage and query the
3568            db connections managed by the session
3569            (Session.OpenDBShapeStore): New method to open a shapestore from a
3570            db connection
3571    
3572            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
3573            messages for the db connection handling in the session
3574    
3575            * test/test_postgis_session.py: New. test cases for the session's
3576            db connection handling with postgis connections
3577    
3578    2003-08-19  Bernhard Herzog  <[email protected]>
3579    
3580            Add very basic postgis database support and the corresponding test
3581            cases. The test cases require a PostgreSQL + postgis installation
3582            but no existing database. The database will be created
3583            automatically by the test cases
3584    
3585            * test/README: Add note about skipped tests and the requirements
3586            of the postgis tests.
3587    
3588            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
3589    
3590            * test/test_postgis_db.py: New. Test cases for the postgis
3591            support.
3592    
3593            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
3594            format
3595    
3596            * test/test_wellknowntext.py: New. Test cases for the
3597            wellknowntext parser
3598    
3599            * test/postgissupport.py: New. Support module for tests involving
3600            a postgis database.
3601    
3602            * test/support.py (execute_as_testsuite): Shut down the postmaster
3603            if it's still running after the tests
3604    
3605            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
3606            well known text format
3607    
3608    2003-08-19  Jan-Oliver Wagner <[email protected]>
3609    
3610            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
3611            message dialog.
3612    
3613    2003-08-18  Bernhard Herzog  <[email protected]>
3614    
3615            * test/support.py (ThubanTestResult.printErrors): Indent the
3616            reason for the skips in the output to make it a bit more readable.
3617            (execute_as_testsuite): New helper function to run a test suite
3618            and print some more information.
3619            (run_tests): Use execute_as_testsuite to run the tests
3620    
3621            * test/runtests.py (main): Use execute_as_testsuite to run the
3622            tests
3623    
3624    2003-08-18  Bernhard Herzog  <[email protected]>
3625    
3626            Fix some bugs in Thuban and the test suite that were uncovered by
3627            changes introduced in Python 2.3:
3628    
3629            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
3630            filename is an absolute name
3631    
3632            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
3633            filename is an absolute name
3634    
3635            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
3636            unique filename to save to and use the correct relative filename
3637            in the expected output.
3638            (SaveSessionTest.test_dbf_table): Use the correct relative
3639            filename in the expected output.
3640    
3641            * test/test_layer.py (TestLayer.test_raster_layer): Update the
3642            test to check whether the filename is absolute.
3643    
3644    2003-08-18  Jan-Oliver Wagner <[email protected]>
3645    
3646            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
3647    
3648    2003-08-15  Bernhard Herzog  <[email protected]>
3649    
3650            Change the way shapes are returned by a shape store. The
3651            ShapesInRegion method returns an iterator over actual shape
3652            objects instead of a list of shape ids.
3653    
3654            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
3655            id.
3656            (ShapefileStore.ShapesInRegion): Return an iterator over the
3657            shapes which yields shape objects instead of returning a list of
3658            shape ids
3659            (ShapefileStore.AllShapes): New. Return an iterator over all
3660            shapes in the shape store
3661            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
3662    
3663            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
3664            doc-string.
3665    
3666            * Thuban/UI/baserenderer.py
3667            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
3668            layer_shapes and make it return an iterator containg shapes
3669            instead of a list of ids.
3670            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
3671            layer_shapes() change
3672    
3673            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
3674            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
3675    
3676            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
3677            changes in the ShapesInRegion return value.
3678            (ViewPort._get_hit_tester): Remove commented out code
3679    
3680            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
3681            new return value.
3682            (SimpleShapeStore.AllShapes): New. Implement this method too.
3683    
3684            * test/test_layer.py (TestLayer.test_arc_layer)
3685            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
3686            (TestLayer.test_point_layer_with_projection)
3687            (TestLayer.test_derived_store): Adapt to changes in the
3688            ShapesInRegion return value.
3689    
3690            * test/test_shapefilestore.py
3691            (TestShapefileStoreArc.test_shapes_in_region)
3692            (TestShapefileStorePolygon.test_shapes_in_region)
3693            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
3694            in the ShapesInRegion return value.
3695            (TestShapefileStorePoint.test_all_shapes)
3696            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
3697            methods
3698    
3699            * test/test_derivedshapestore.py
3700            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
3701            the ShapesInRegion return value.
3702            (TestDerivedShapeStore.test_all_shapes)
3703            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
3704            methods
3705    
3706    2003-08-15  Bernhard Herzog  <[email protected]>
3707    
3708            Make the renderers deal correctly with raw vs. python level
3709            representation of shape geometries
3710    
3711            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
3712            Return a flag useraw in addition to the callable and the parameter
3713            to indicate whether the callable can deal with the raw shape data
3714            or uses the higher level python lists of coordinates. The callable
3715            now should accept either the raw data or the return value of the
3716            shape's Points() method.
3717            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
3718            change
3719            (BaseRenderer.projected_points): Instead of the shape id use the
3720            points list as parameter.
3721            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
3722            (BaseRenderer.draw_point_shape): Adapt to projected_points()
3723            change and accept the points list as parameter instead of the
3724            shape id.
3725    
3726            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
3727            the useraw flag as required by the BaseRenderer
3728            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
3729            changes.
3730    
3731            * test/test_baserenderer.py
3732            (TestBaseRenderer.test_point_with_classification): New test for
3733            rendering a map with classifications.
3734    
3735    2003-08-15  Bernhard Herzog  <[email protected]>
3736    
3737            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
3738            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
3739            (ViewPort._get_hit_tester, ViewPort.projected_points)
3740            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
3741            (ViewPort._find_label_at): Split the find_shape_at method into
3742            several new methods and use the functions in the hit-test module.
3743    
3744            * Thuban/UI/hittest.py: New module with Python-level hit-testing
3745            functions
3746    
3747            * test/test_hittest.py: New. Test for the new hittest module
3748    
3749    2003-08-15  Bernhard Herzog  <[email protected]>
3750    
3751            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
3752            projection to all corners of the bounding box to get a better
3753            approximation of the projected bounding box
3754    
3755            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
3756            New. Test coordinate handling of a layer with a projection.
3757            Catches the bug fixed in Layer.ShapesInRegion
3758    
3759    2003-08-15  Bernhard Herzog  <[email protected]>
3760    
3761            Move some of the mock objects in test_baserenderer into their own
3762            module so they can easily be used from other tests
3763    
3764            * test/mockgeo.py: New test helper module with some mock objects
3765            for geometry related things like shapes, shapestores and
3766            projections.
3767    
3768            * test/test_mockgeo.py: New. Tests for the new helper module
3769    
3770            * test/test_baserenderer.py: Some of the mock-objects are in
3771            mockgeo now.
3772    
3773    2003-08-12  Jan-Oliver Wagner <[email protected]>
3774    
3775            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
3776    
3777    2003-08-12  Bernhard Herzog  <[email protected]>
3778    
3779            * po/de.po: New. German translations by Bjoern Broscheit
3780    
3781    2003-08-12  Bernhard Herzog  <[email protected]>
3782    
3783            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
3784            strings have to be one string literal.
3785    
3786    2003-08-11  Bernhard Herzog  <[email protected]>
3787    
3788            * test/support.py (FloatComparisonMixin.assertPointListEquals):
3789            New. This method was used in various derived classes, but it's
3790            better to have it here.
3791    
3792            * test/test_shapefilestore.py
3793            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
3794            FloatComparisonMixin
3795    
3796            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
3797            It's now in FloatComparisonMixin
3798    
3799            * test/test_derivedshapestore.py
3800            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
3801            in FloatComparisonMixin
3802    
3803    2003-08-11  Bernhard Herzog  <[email protected]>
3804    
3805            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
3806            error message
3807    
3808    2003-08-08  Jan-Oliver Wagner <[email protected]>
3809    
3810            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
3811            with version number.
3812            Changed title to reflect version number of Thuban.
3813    
3814    2003-08-08  Jan-Oliver Wagner <[email protected]>
3815    
3816            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
3817            the list corresponds to the "About" web page.
3818    
3819    2003-08-08  Bernhard Herzog  <[email protected]>
3820    
3821            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
3822            Make sure translated strings are recognized as one string literal.
3823    
3824            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
3825            Make sure translated strings are recognized as one string literal.
3826    
3827            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
3828            translated strings are recognized as one string literal.
3829    
3830            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
3831            sure translated strings are recognized as one string literal.
3832    
3833    2003-08-07  Bernhard Herzog  <[email protected]>
3834    
3835            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
3836            Simply delegates to the original shapestore.
3837    
3838            * test/test_derivedshapestore.py
3839            (TestDerivedShapeStore.test_raw_format): New. Test case for
3840            DerivedShapeStore.RawShapeFormat
3841    
3842    2003-08-07  Bernhard Herzog  <[email protected]>
3843    
3844            Add raw data interface to shape objects.
3845    
3846            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
3847            class to ShapefileShape which now holds shapefile specific
3848            information.
3849            (ShapefileShape.compute_bbox): Simplified to not cache any
3850            information. The way this method is used that shouldn't matter
3851            performance wise.
3852            (ShapefileShape.RawData): New. Return the shapeid which is the raw
3853            data format for shapes from shapefiles.
3854            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
3855            in the shape objects returned by a shapestore. For a
3856            ShapefileStore this is always RAW_SHAPEFILE.
3857            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
3858            method.
3859    
3860            * test/test_shapefilestore.py
3861            (TestShapefileStore.test_raw_format): New test to test the raw
3862            format feature of shapes.
3863    
3864            * Thuban/Model/layer.py: Remove the unused import of Shape from
3865            data. It was only there for interface compatibility but it's not
3866            used inside of Thuban and the generic Shape class has gone away.
3867    
3868            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
3869            the raw data format and only use an optimized version of its a
3870            shapefile.
3871    
3872    2003-08-07  Bernhard Herzog  <[email protected]>
3873    
3874            * test/test_baserenderer.py (SimpleShape): Shape class for the
3875            tests.
3876            (SimpleShapeStore.Shape): Use SimpleShape instead of
3877            Thuban.Model.data.Shape to make the tests independed of the coming
3878            changes.
3879    
3880    2003-08-07  Bernhard Herzog  <[email protected]>
3881    
3882            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
3883            (ThubanTestProgram): New classes that extend the respective
3884            classes from unittest. These new version support skipping tests
3885            under certain expected conditions. In the Thuban test suite we
3886            uses this for tests that require the optional gdal support.
3887            (run_tests): Use ThubanTestProgram instead of the unittest.main()
3888    
3889            * test/runtests.py (main): Use the new ThubanTestRunner instead of
3890            the normal one from unittest
3891    
3892            * test/test_layer.py (TestLayer.test_raster_layer): If this test
3893            is not run because gdal support isn't available report this to the
3894            runner.
3895    
3896            * test/test_baserenderer.py
3897            (TestBaseRenderer.test_raster_no_projection): Do not run this test
3898            if gdal support isn't available and report this to the runner.
3899    
3900    2003-08-06  Bernhard Herzog  <[email protected]>
3901    
3902            Rearrange the renderers a bit, partly in preparation for changes
3903            required for the postgis merge, partly to make it more testable.
3904            Also make the representation of coordinates in Shapes more
3905            consistent.
3906    
3907            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
3908            this class is now in BaseRenderer. This class is now practically
3909            only a specialization of BaseRenderer for rendering to an actual
3910            wx DC.
3911            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
3912            to get the shapetype specific rendering functions.
3913    
3914            * Thuban/UI/baserenderer.py: New file with the basic rendering
3915            logic. The code in this file is completely independend of wx.
3916            (BaseRenderer): Class with the basic rendering logic
3917    
3918            * test/test_baserenderer.py: New. Test cases for BaseRenderer
3919    
3920            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
3921            error_on_redraw to guard agains endless loops and stack overflows
3922            when there's a bug in the rendering code that raises exceptions.
3923            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
3924            rendering into a separate method _do_redraw so that error handling
3925            is a bit easier. When an exception occurs, set error_on_redraw to
3926            true. When it's true on entry to OnIdle do nothing and return
3927            immediately.
3928    
3929            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
3930            Shape object will always have the coordinates as a list of list of
3931            coordinate pairs (tuples).
3932            (Shape.compute_bbox): Adapt to new representation.
3933    
3934            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
3935            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
3936            Shape objects.
3937    
3938            * test/test_shapefilestore.py
3939            (ShapefileStoreTests.assertFloatTuplesEqual)
3940            (ShapefileStoreTests.assertPointListEquals): Rename to
3941            assertPointListEquals and change purpose to checking equality of
3942            the lists returned by Shape.Points().
3943            (TestShapefileStoreArc.test_shape)
3944            (TestShapefileStorePolygon.test_shape)
3945            (TestShapefileStorePoint.test_shape): Use the new
3946            assertPointListEquals instead of assertFloatTuplesEqual
3947    
3948            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
3949            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
3950            and change purpose to checking equality of the lists returned by
3951            Shape.Points().
3952            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
3953            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
3954            (TestLayer.test_derived_store): Use the new assertPointListEquals
3955            instead of assertFloatTuplesEqual
3956    
3957            * test/test_derivedshapestore.py
3958            (TestDerivedShapeStore.assertFloatTuplesEqual)
3959            (TestDerivedShapeStore.assertPointListEquals): Rename to
3960            assertPointListEquals and change purpose to checking equality of
3961            the lists returned by Shape.Points().
3962            (TestDerivedShapeStore.test_shape): Use the new
3963            assertPointListEquals instead of assertFloatTuplesEqual
3964    
3965    2003-08-06  Jan-Oliver Wagner <[email protected]>
3966    
3967            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
3968            a bounding box. A dialog is raised in case, no bounding box
3969            is found. This fixes bug #2043:
3970            https://intevation.de/rt/webrt?serial_num=2043
3971    
3972    2003-08-05  Bernhard Herzog  <[email protected]>
3973    
3974            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
3975            object look like a Color instantiation. Formerly it looked like a
3976            tuple.
3977    
3978            * test/test_color.py (TestColor.test_repr)
3979            (TestColor.test_equality, TestColor.test_inequality): New. test
3980            some more apects of the Color class
3981            (TestTransparent.test_repr, TestTransparent.test_hex)
3982            (TestTransparent.test_equality): New. Test cases for the
3983            Transparent object.
3984    
3985    2003-08-04  Jan-Oliver Wagner <[email protected]>
3986    
3987            * Doc/manual/thuban-manual.xml: a number of small improvements.
3988            The resulting file is the version submitted for GREAT-ER II.
3989    
3990    2003-08-01  Bernhard Herzog  <[email protected]>
3991    
3992            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
3993            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
3994            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
3995    
3996            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
3997            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
3998            (ThubanEndBusyCursor): Add doc-strings
3999    
4000    2003-08-01  Bernhard Herzog  <[email protected]>
4001    
4002            First step towards PostGIS integration. More abstraction by movin
4003            more code from the layer to the shapestore. More methods of the
4004            layer are now simply delegated to the equivalent method of the
4005            shapestore. The SHAPETYPE_* constants are now in data not in
4006            layer.
4007    
4008            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4009            (SHAPETYPE_POINT, Shape): Move these constants and classes from
4010            layer.py to data.py
4011            (ShapefileStore.__init__): More Initialization for the new methods
4012            and functionality.
4013            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
4014            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
4015            (ShapefileStore.Shape): New methods that were formerly implemented
4016            in the layer.
4017            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
4018            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
4019            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
4020            equivalents of the new shape methods. These versions are simply
4021            delegated to the original shapstore.
4022    
4023            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
4024            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
4025            (Layer.SetShapeStore): Removed the initializatin of instance
4026            variables that were needed for the stuff that's now in
4027            ShapefileStore
4028            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
4029            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
4030            shapestore.
4031    
4032            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
4033            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
4034            instead of layer.
4035    
4036            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
4037    
4038            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
4039    
4040            * test/test_layer.py: Import the SHAPETYPE_* constants from data
4041            instead of layer.
4042            (TestLayer.test_derived_store): Remove the test for the exception
4043            when instantiating the DerivedShapeStore with an incompatible
4044            table which is now in test_derivedshapestore.py. Add some more
4045            tests of the layer methods to determine whether they work for a
4046            DerivedShapeStore as well.
4047    
4048    2003-07-31  Jonathan Coles   <[email protected]>
4049    
4050            * Doc/manual/thuban-manual.xml: Fix the list of required packages
4051            by just listing the name and where they can be found.
4052    
4053    2003-07-31  Frank Koormann   <[email protected]>
4054    
4055            * Doc/manual/thuban-manual.xml:
4056            Changed the screenshot elements to figure.
4057            Changed some variablelist elements to itemizedlist.
4058            Added section on GDAL formats.
4059    
4060    2003-07-31  Jonathan Coles   <[email protected]>
4061    
4062            * Doc/manual/thuban-manual.xml: Added a few sentences about
4063            the Fix Border Color option when generating classes.
4064    
4065    2003-07-30  Jonathan Coles   <[email protected]>
4066    
4067            * Thuban/Model/classgen.py: Add docstrings. Rename specific
4068            Ramp instances to use lower_case_style.
4069    
4070            * Thuban/UI/classgen.py: Use renamed Ramp instances.
4071            
4072            * Thuban/UI/classifier.py: Add docstrings.
4073    
4074            * Thuban/UI/dock.py: Add docstrings.
4075    
4076            * test/test_classgen.py: Use renamed Ramp instances.
4077    
4078    2003-07-30  Bernhard Herzog  <[email protected]>
4079    
4080            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
4081            was never used in Thuban.
4082    
4083    2003-07-30  Bernhard Herzog  <[email protected]>
4084    
4085            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
4086            method directly instead of going through the transient_table
4087            method. This faster because transient_table may force the copy of
4088            a DBF file into the transient database and setting a table's title
4089            doesnm't affect the title of the associated transient table, so
4090            this fixes RT #2042
4091    
4092            * Thuban/UI/main.py (__version__): Don't import the already
4093            removed show_exception_dialog.
4094    
4095    2003-07-29  Jonathan Coles   <[email protected]>
4096    
4097            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4098            Put back this method and remove the equivalent function since we
4099            are setting the exception hook from within this class (OnInit).
4100    
4101    2003-07-29  Jonathan Coles   <[email protected]>
4102    
4103            * Doc/manual/images/5_2_custom_ramp.png,
4104            Doc/manual/images/5_2_quantiles.png,
4105            Doc/manual/images/5_2_uniform_dist.png,
4106            Doc/manual/images/5_2_unique_values.png,
4107            Doc/manual/images/8_int_error.png: New screen shots.
4108    
4109            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
4110            some points, and added more screen shots.
4111    
4112    2003-07-29  Bernhard Herzog  <[email protected]>
4113    
4114            * Thuban/Model/data.py: Remove the now unused import of warnings
4115    
4116    2003-07-29  Bernhard Herzog  <[email protected]>
4117    
4118            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
4119            deprecated since before the 0.8 release and isn't used in Thuban
4120            itself anymore.
4121    
4122            * Thuban/Model/transientdb.py: Remove some unnecessary imports
4123    
4124    2003-07-29  Jonathan Coles   <[email protected]>
4125    
4126            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
4127            python exception hook here so that we are sure to catch any
4128            Thuban exception that happen during initialization.
4129    
4130            * Thuban/UI/main.py (main): Don't set the exception hook here,
4131            it will get set in ThubanApplication.OnInit.
4132    
4133    2003-07-29  Jonathan Coles   <[email protected]>
4134                                                                                
4135            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4136            Removed and called it show_exception_dialog() so that the exception
4137            handler can be set before the class is created.
4138                                                                                
4139            * Thuban/UI/main.py (main): Install the exception handler before
4140            a ThubanApplication is created.
4141                                                                                    
4142    2003-07-29  Bernhard Herzog  <[email protected]>
4143    
4144            * po/it.po: New. Italian translation by Maurizio Napolitano
4145    
4146            * po/ru.po: New. Russian translation by Alex Shevlakov
4147    
4148    2003-07-29  Frank Koormann   <[email protected]>
4149    
4150            * Doc/manual/thuban-manual.xml: Extended section on supported
4151            projections.
4152            
4153    2003-07-29  Frank Koormann   <[email protected]>
4154    
4155            * Doc/manual/thuban-manual.xml: gaspell-checked.
4156    
4157    2003-07-29  Jonathan Coles   <[email protected]>
4158    
4159            * Doc/manual/images/3_5_legend.png: Added border to improve look
4160            on white background.
4161    
4162    2003-07-29  Jonathan Coles   <[email protected]>
4163    
4164            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
4165            descriptions for the legend toolbar.
4166    
4167            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
4168            cursor from dialog box.
4169    
4170    2003-07-28  Jonathan Coles   <[email protected]>
4171    
4172            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
4173    
4174            * Doc/manual/images/2_4_session_tree.png,
4175            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
4176            Doc/manual/images/4_2_layer_properties.png,
4177            Doc/manual/images/4_2_raster_layer_properties.png,
4178            Doc/manual/images/5_3_genclass.png,
4179            Doc/manual/images/5_classification.png,
4180            Doc/manual/images/6_projection.png,
4181            Doc/manual/images/7_1_table_view.png,
4182            Doc/manual/images/7_2_5_join.png: New screenshots.
4183    
4184    2003-07-24  Jonathan Coles   <[email protected]>
4185    
4186            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
4187    
4188    2003-07-24  Jonathan Coles   <[email protected]>
4189    
4190            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
4191            chapter on Layer Management.
4192    
4193            * Doc/manual/Makefile: New. Makefile to generate all formats for the
4194            manual and images.
4195    
4196    2003-07-24  Bernhard Herzog  <[email protected]>
4197    
4198            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
4199            it annoys lintian which warns about these files not being
4200            executable. The #! isn't necessary here since if you absolutely
4201            must execute them you can always say "python <filename>".
4202    
4203            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
4204            superfluous code to set brush and pen for point shapes
4205    
4206            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
4207            belong in viewport anyway
4208    
4209    2003-07-24  Frank Koormann   <[email protected]>
4210    
4211            * Doc/manual/thuban-manual.xml: Added section on table management.
4212    
4213    2003-07-24  Bernhard Herzog  <[email protected]>
4214    
4215            * test/runtests.py (main): Recognize the long "verbose" option
4216            correctly.
4217    
4218    2003-07-22  Jonathan Coles   <[email protected]>
4219    
4220            * Doc/manual/thuban-manual.xml: Continue to write first revision
4221            of the manual.
4222    
4223            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
4224            with Begin/EndDrawing() calls to ensure we aren't doing to
4225            many updates to the dc during rendering.
4226            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
4227            a pen and brush argument so they need to be passed to the function.
4228    
4229            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
4230            Calculates the minimum and maximum scale values. Factored out
4231            of set_view_transform so that it could be used to zoom all the
4232            way into a single point.
4233            (ViewPort.set_view_transform): Call calc_min_max_scales().
4234            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
4235            if only a single point is selected.
4236    
4237            * Doc/manual/images/1_2_legend_close.png,
4238            Doc/manual/images/1_2_legend_dock.png,
4239            Doc/manual/images/1_2_mainwindow.png,
4240            Doc/manual/images/1_2_mainwindow.ps,
4241            Doc/manual/images/1_2_mainwindow.sk,
4242            Doc/manual/images/3_2_fullextent.png,
4243            Doc/manual/images/3_2_fulllayerextent.png,
4244            Doc/manual/images/3_2_fullshapeextent.png,
4245            Doc/manual/images/3_2_pan.png,
4246            Doc/manual/images/3_2_zoomin.png,
4247            Doc/manual/images/3_2_zoomout.png,
4248            Doc/manual/images/3_3_identify.png,
4249            Doc/manual/images/3_3_label.png,
4250            Doc/manual/images/3_5_invisible.png,
4251            Doc/manual/images/3_5_movedown.png,
4252            Doc/manual/images/3_5_moveup.png,
4253            Doc/manual/images/3_5_props.png,
4254            Doc/manual/images/3_5_tobottom.png,
4255            Doc/manual/images/3_5_totop.png,
4256            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
4257    
4258    2003-07-18  Bernhard Herzog  <[email protected]>
4259    
4260            * Thuban/UI/messages.py (MAP_REPLACED): New message.
4261    
4262            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
4263            after the new map has been assigned
4264    
4265            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
4266            Delegate MAP_REPLACED to the canvas too
4267            (MainWindow.prepare_new_session): Removed. Thanks to the new
4268            MAP_REPLACED message it's no longer needed
4269            (MainWindow.OpenSession, MainWindow.NewSession):
4270            prepare_new_session has been removed.
4271    
4272            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
4273            MAP_REPLACED so that we can close the dialog if a new map is set.
4274            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
4275            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
4276            dialog
4277    
4278            * test/test_viewport.py (SimpleViewPortTest)
4279            (SimpleViewPortTest.test_default_size): Add doc-strings
4280            (ViewPortTest.setUp): Bind map to self.map so we can use it in
4281            tests. Subscribe to MAP_REPLACED messages too.
4282            (ViewPortTest.tearDown): No need to explicitly unsubscribe
4283            (ViewPortTest.test_set_map): New test for the SetMap method.
4284    
4285    2003-07-18  Bernhard Herzog  <[email protected]>
4286    
4287            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
4288            Move this test from ViewPortTest.setUp to this new separate test
4289            case. setUp is not the place for the actual tests.
4290            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
4291            more of the test from setUp to the new test test_inital_settings.
4292            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
4293            (ViewPortTest.test_proj_conv): Split test_proj_conv into
4294            test_win_to_proj and test_proj_to_win and make the tests easier to
4295            understand
4296            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
4297            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
4298            (ViewPortTest.test_unprojected_rect_around_point)
4299            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
4300            Reformat to increase readability.
4301    
4302    2003-07-18  Bernhard Herzog  <[email protected]>
4303    
4304            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
4305    
4306    2003-07-18  Bernhard Herzog  <[email protected]>
4307    
4308            * test/runtests.py: The test suite can now be run without an X
4309            connection. To make sure this remains true, remove the DISPLAY
4310            environment variable so that an error occurs if the wxGTK is
4311            imported accidentally
4312    
4313    2003-07-18  Bernhard Herzog  <[email protected]>
4314    
4315            * Thuban/UI/viewport.py: Remove unused imports
4316    
4317            * Thuban/UI/view.py: Remove unused imports
4318    
4319    2003-07-18  Bernhard Herzog  <[email protected]>
4320    
4321            * test/test_export.py Remove unused imports. The OutputTransform
4322            function is now in viewport.py and is called output_transform
4323            (TestScalebar.test_output_transform)
4324            (TestScalebar.test_OutputTransform): Renamed to
4325            test_output_transform and updated to use output_transform instead
4326            of OutputTransform
4327    
4328            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
4329            renamed.
4330            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
4331            renamed to output_transform
4332    
4333            * Thuban/UI/viewport.py (OutputTransform, output_transform):
4334            Rename to output_transform
4335    
4336    2003-07-18  Bernhard Herzog  <[email protected]>
4337    
4338            * Thuban/Model/layer.py (Layer.__init__): Rename
4339            classificationField to classificatin_column and init it here so
4340            that it can be used in SetClassificationColumn
4341            (Layer.GetClassificationColumn, Layer.GetClassificationField):
4342            Rename to GetClassificationColumn.
4343            (Layer.SetClassificationColumn, Layer.SetClassificationField):
4344            Rename to SetClassificationColumn and issue a LAYER_CHANGED
4345            message if the column changes.
4346            (Layer._classification_changed, Layer.ClassChanged): Rename to
4347            _classification_changed. Update the callers.
4348            (Layer.SetShapeStore): Further field->column renames.
4349    
4350            * Thuban/Model/load.py (SessionLoader.start_classification)
4351            (SessionLoader.start_clpoint): Updates because of
4352            field->column method name changes in the Layer class
4353    
4354            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
4355            because of field->column method name changes in the Layer class
4356    
4357            * Thuban/UI/classifier.py (Classifier.__init__)
4358            (Classifier._OnTry, Classifier._OnRevert): Updates because of
4359            field->column method name changes in the Layer class
4360    
4361            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
4362            because of field->column method name changes in the Layer class
4363    
4364            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
4365            of field->column method name changes in the Layer class
4366    
4367            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
4368            (SaveSessionTest.testClassifiedLayer): Update because of
4369            field->column method name changes in the Layer class
4370    
4371            * test/test_layer.py (SetShapeStoreTests.setUp)
4372            (SetShapeStoreTests.test_sanity): Update because of field->column
4373            method name changes in the Layer class
4374            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
4375            (TestLayerModification.test_sanity)
4376            (TestLayerModification.test_initial_settings): remove unsued code
4377            and rename to test_sanity.
4378            (TestLayerModification.test_set_classification): New test for
4379            SetClassification and SetClassificationField.
4380    
4381    2003-07-18  Bernhard Herzog  <[email protected]>
4382    
4383            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
4384            the non-fixed values as well. The old test would have accepted a
4385            fixed ramp that only returnes the fixed properties
4386    
4387    2003-07-17  Jonathan Coles   <[email protected]>
4388    
4389            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
4390            shots for the manual. The XCF file is the source image and
4391            has additional layers to support changes.
4392    
4393            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
4394    
4395            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
4396            Return both the new class and the field name.
4397    
4398            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
4399            fit the map to the window as this changes any zoom level that
4400            the user may have set.
4401    
4402    2003-07-16  Jonathan Coles   <[email protected]>
4403    
4404            * Thuban/Model/classgen.py (generate_singletons,
4405            generate_uniform_distribution, generate_quantiles): Remove
4406            fixes parameter, but maintain the same functionality by having
4407            the calling function pass a FixedRamp object for the ramp.
4408            (FixedRamp): New. Adapts a ramp to have fixed property values.
4409    
4410            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
4411            (Classification): Inherit from Publisher.
4412            (Classification.__init__): Remove the layer parameter.
4413            Classifications no longer need to have a parent layer.
4414            (Classification.GetField, Classification.GetFieldType,
4415            Classification.SetFieldInfo): Removed. The field name is stored
4416            in the layer, and the type can be retreived by calling
4417            Layer.GetFieldType().
4418            (Classification._set_layer, Classification.GetLayer): Removed.
4419            Classifications no longer have a parent layer.
4420    
4421            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
4422            classification.
4423            (Layer.SetShapeStore): Reset the classification first while
4424            we still have the old shape store to work with.
4425            (Layer.GetClassificationField, Layer.SetClassificationField):
4426            New. Method for getting/setting the field to classify on.
4427            (Layer.SetClassification): Simplified now that the layer
4428            simply has to hold a reference to the classification and not
4429            tell the classification who owns it.
4430            Fixes RTbug #2023.
4431    
4432            * Thuban/Model/load.py (SessionLoader.start_classification):
4433            Set the field name on the layer, not the classification.
4434    
4435            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
4436            classification is modified.
4437    
4438            * Thuban/Model/save.py (SessionSaver.write_classification):
4439            Get the field name and type from the layer.
4440    
4441            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
4442            parameter records to rows and add docstring. Fixes RTbug #1997.
4443    
4444            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
4445            ramp when we need to fix certain values of a ramp rather than
4446            using the old fixes parameter. Fixes RTbug #2024.
4447    
4448            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
4449            parameter.
4450            (ClassTable.Reset): Add fieldType parameter and use it, rather
4451            than asking the classification.
4452            (Classifier.__init__): Remember the original class's field
4453            and ask the layer for the field type, rather than the classification.
4454            (Classifier.__SetGridTable): Retrieve the field and field type
4455            for the table because they are not in the classification.
4456            (Classifier._OnTry, Classifier._OnRevert): Set the classification
4457            field on the layer in addition to the classification itself.
4458    
4459            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
4460            classification field from layer.
4461    
4462            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
4463            classification field from layer. Split up tests and remove
4464            *-imports. Fixes RTbug #1992.
4465    
4466            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
4467    
4468            * test/test_classification.py
4469            (TestClassification.test_classification): Remove tests for methods
4470            that no longer exist.
4471    
4472            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
4473            __init__ no longer has a field parameter, use SetClassificationField.
4474            (SetShapeStoreTests.test_sanity): Use layer object to get class
4475            field info.
4476    
4477            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
4478            SetClassificationField on layer to set class field info.
4479    
4480            * test/test_viewport.py: Renamed from test/test_view.py.
4481    
4482    2003-07-16  Jan-Oliver Wagner <[email protected]>
4483    
4484            * Doc/manual/thuban-manual.xml: Added authors and an initial
4485            coarse structure.
4486    
4487    2003-07-15  Bernhard Herzog  <[email protected]>
4488    
4489            * test/support.py (FloatComparisonMixin): This is a mix-in class
4490            and therefore should not be derived from any other class.
4491    
4492            * test/test_range.py (RangeTest): FloatComparisonMixin is a
4493            mix-in, so derive from TestCase as well.
4494    
4495    2003-07-15  Bernhard Herzog  <[email protected]>
4496    
4497            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
4498            draw_func handling a bit to remove one layer of indirection. This
4499            makes the renderer about 10% faster in the non-classifying case
4500            and the code a bit cleaner
4501            (MapRenderer.draw_point_shape): Add the pen and brush parameters
4502            and set them in the dc. Now the draw_point_shape method and
4503            wxproj's draw_polygon_shape function have basically the same
4504            signature so that both can be directly used as draw_func
4505    
4506    2003-07-15  Bernhard Herzog  <[email protected]>
4507    
4508            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
4509            string values (in addition to the labels) as UTF 8
4510    
4511            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
4512            values if the field type is string
4513    
4514            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
4515            saving a session with non-ascii string classification values.
4516    
4517            * test/test_load.py (TestClassification.file_contents)
4518            (TestClassification.test): Check for non-ascii values in string
4519            classifications
4520    
4521    2003-07-14  Jonathan Coles   <[email protected]>
4522    
4523            * test/test_view.py: New. Tests for ViewPort.
4524    
4525    2003-07-14  Frank Koormann   <[email protected]>
4526    
4527            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
4528            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
4529    
4530            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
4531            unicode strings from session file: session title, map title and
4532            projection name.
4533            
4534    2003-07-10  Jonathan Coles   <[email protected]>
4535    
4536            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
4537            drag_stop, not drag_move when the mouse is released.
4538    
4539    2003-07-10  Jonathan Coles   <[email protected]>
4540    
4541            The most important part of this is the seperation of view.py into
4542            two pieces. viewport.py now has a class called ViewPort which
4543            contains all the non-wx parts of view.py and can therefore be
4544            tested. view.py contains only the wx-specific parts and is fairly
4545            simple.
4546    
4547            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
4548            RTTbug #1992.
4549            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
4550            RTTbug #1992.
4551    
4552            * Thuban/Model/classgen.py (generate_singletons,
4553            generate_uniform_distribution, generate_quantiles):
4554            Added 'fixes' parameter so that property attributes can
4555            be held constant over the generated classification groups.
4556            (CustomRamp.GetProperties): Remove unused variables.
4557    
4558            * Thuban/Model/map.py (Map.SetProjection): Send the old
4559            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
4560            event.
4561    
4562            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
4563            parameter which is a list of records that restricts which
4564            records are saved. Fixes RTbug #1997.
4565    
4566            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4567            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
4568    
4569            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
4570            to allow the user to fix line color/width on generated groups.
4571            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
4572            functions to optionally fix group properties.
4573    
4574            * Thuban/UI/main.py (main): Set exception hook to the
4575            ShowExceptionDialog. Fixes RTbug #1993.
4576    
4577            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
4578            the table window when it is selectd to be shown.
4579    
4580            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
4581            Export Selection button and move the export buttons underneath
4582            the table.
4583            (QueryTableFrame.UpdateStatusText): Added event argument so
4584            that it can respond to grid selection events. The status text
4585            is now updated even when the table is not associated with a
4586            layer as was previously assumed.
4587            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
4588            UpdateStatusText responds to these events.
4589            (QueryTableFrame.OnSaveAs): Renamed to doExport.
4590            (QueryTableFrame.doExport): Helper function that saves the
4591            entire table, or selected rows, to a file.
4592            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
4593            Respond to export button events and call doExport.
4594    
4595            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
4596            the function doesn't return NULL without first setting a Python
4597            Error.
4598    
4599            * test/runtests.py (main): Only print "Unknown option" for
4600            unsupported options.
4601    
4602            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
4603            optional epsilon argument to specify floating point accuracy.
4604            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
4605            for each item test.
4606    
4607            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
4608            tests for saving selected records.
4609    
4610            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
4611            tests for saving selected records.
4612    
4613            * test/test_map.py (TestMapWithContents.test_set_projection):
4614            MAP_PROJECTION_CHANGED events send the old projection.
4615    
4616            * test/test_session.py
4617            (TestSessionWithContent.test_forward_map_projection):
4618            MAP_PROJECTION_CHANGED events send the old projection.
4619    
4620            * test/test_table.py (TableTest): Update tests to use non-deprecated
4621            functions.
4622    
4623    2003-07-08  Bernhard Herzog  <[email protected]>
4624    
4625            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
4626            constants in the column objects are the standard ones defined in
4627            the table module.
4628    
4629            * test/test_transientdb.py
4630            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
4631            exporting transient tables as DBF works. This should catch the bug
4632            just fixed in TransientTableBase.Width.
4633    
4634    2003-07-08  Bernhard Herzog  <[email protected]>
4635    
4636            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
4637            interpolated colors correctly.
4638    
4639            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
4640            New. Test case for the fix in classgen.py
4641    
4642    2003-07-08  Bernhard Herzog  <[email protected]>
4643    
4644            * test/runtests.py (main): Make the default output less verbose
4645            and add a verbosity option (-v) to get the old output
4646    
4647    2003-07-08  Bernhard Herzog  <[email protected]>
4648    
4649            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
4650            0.9.
4651    
4652            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
4653            New. Return the join type
4654    
4655            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
4656            DTD
4657            (SessionSaver.write_data_containers): Save the join type for
4658            joined tables
4659    
4660            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
4661            namespace
4662            (SessionLoader.start_jointable): Handle the jointype attribute
4663    
4664            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
4665            as of Thuban 0.8. These are now tests to determine whether Thuban
4666            can still read files generated by Thuban 0.8
4667    
4668            * test/test_load.py (LoadSessionTest.dtd)
4669            (TestSingleLayer.file_contents)
4670            (TestLayerVisibility.file_contents, TestLabels.file_contents)
4671            (TestLayerProjection.file_contents)
4672            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4673            (TestJoinedTable.file_contents)
4674            (TestLoadError.file_contents): Update for new DTD
4675            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
4676            for new join type attribute
4677    
4678            * test/test_save.py (SaveSessionTest.dtd)
4679            (SaveSessionTest.testEmptySession)
4680            (SaveSessionTest.testSingleLayer)
4681            (SaveSessionTest.testLayerProjection)
4682            (SaveSessionTest.testRasterLayer)
4683            (SaveSessionTest.testClassifiedLayer)
4684            (SaveSessionTest.test_dbf_table)
4685            (SaveSessionTest.test_joined_table): Update for new DTD
4686            (SaveSessionTest.test_joined_table): Add test for new join type
4687            attribute
4688    
4689    2003-07-04  Bernhard Herzog  <[email protected]>
4690    
4691            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
4692            function for table_to_dbf
4693            (table_to_dbf): Deal with names longer than the 10 character limit
4694    
4695            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
4696            doc-string
4697            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
4698            long column names
4699    
4700    2003-07-03  Bernhard Herzog  <[email protected]>
4701    
4702            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
4703    
4704    2003-07-03  Bernhard Herzog  <[email protected]>
4705    
4706            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
4707            for the Thuban manual and README with some basic information about
4708            the manual
4709    
4710    2003-07-03  Bernhard Herzog  <[email protected]>
4711    
4712            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
4713            Update doc-string
4714            (TransientJoinedTable.create): Do not modify the column objects of
4715            the input tables in place and copy all columns of the input tables
4716            into the joined table after all.
4717    
4718            * test/test_transientdb.py
4719            (TestTransientTable.test_transient_joined_table_same_column_name):
4720            Update to reflect the new behavior
4721            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
4722            Update to reflect the new behavior
4723            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
4724            New test case for a bug which modified the column objects in place
4725    
4726    2003-07-02  Jonathan Coles   <[email protected]>
4727    
4728            * Thuban/Model/classgen.py (generate_singletons,
4729            generate_uniform_distribution, generate_quantiles,
4730            GenQuantiles0): Make sure maxValue isn't less than
4731            one, otherwise we could divide by zero.
4732    
4733            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
4734            ClassGenTest.doClassSingleTest): Call doBoundsTest to
4735            check the end classification groups against the
4736            proper property values.
4737            (ClassGenTest.doBoundsTest): New. Checks the first and
4738            last classification groups to make sure their properties
4739            are the correct upper and lower bounds for a color ramp.
4740    
4741    2003-07-02  Jonathan Coles   <[email protected]>
4742    
4743            * Thuban/Model/classgen.py (generate_singletons,
4744            generate_uniform_distribution, generate_quantiles,
4745            GenQuantiles0): The denominator was one to high when
4746            calculating the index for the ramp causing the index
4747            to never to reach one.
4748    
4749    2003-07-02  Jonathan Coles   <[email protected]>
4750    
4751            Changed the singature of ClassGroupRange.__init__ and
4752            ClassGroupRange.SetRange() so that the min/max values are
4753            passed as a tuple. This makes a better calling scheme for
4754            when a Range object is passed instead.
4755    
4756            * Thuban/Model/classgen.py: Fixed parameters to
4757            ClassGroupRange constructor.
4758    
4759            * Thuban/Model/classification.py (ClassGroupRange.__init__):
4760            Consolidate the min/max parameters into a single _range which
4761            can either be a tuple or a Range object.
4762            (ClassGroupRange.SetRange): Consolidate the min/max parameters
4763            into a single _range which can either be a tuple or a Range object.
4764    
4765            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
4766            call to ClassGroupRange constructor to use a tuple.
4767    
4768            * Thuban/Model/layer.py (Layer.SetClassification): Switch
4769            the classification instance variable to the new class
4770            before calling _set_layer otherwise subscribers to a
4771            LAYER_CHANGED event will not see any difference.
4772    
4773            * test/test_classification.py: Fix tests of ClassGroupRange
4774            so that they use the new signature.
4775    
4776            * test/test_load.py: Fix use of ClassGroupRange so that it
4777            uses the new signature.
4778    
4779            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
4780            uses the new signature.
4781    
4782            * test/test_save.py: Fix use of ClassGroupRange so that it
4783            uses the new signature.
4784    
4785    
4786    2003-07-01  Jonathan Coles   <[email protected]>
4787    
4788            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
4789            Import used objects/class from color.
4790            (generate_singletons): We don't
4791            need the numGroups parameter anymore because we are using
4792            the new ramps with GetProperties().
4793            (generate_uniform_distribution): Use new ramp method
4794            GetProperties().
4795            (generate_quantiles, GenQuantiles0): Use new ramp method
4796            GetProperties().
4797            (CustomRamp.SetNumGroups): Removed. The ramps now map
4798            a value from 0 to 1 to class properties so the number
4799            of groups is not needed ahead of time.
4800            (CustomRamp.next): Removed. CustomRamp does not support
4801            interation anymore.
4802            (CustomRamp.GetProperties): Returns a ClassGroupProperties
4803            object based on the index value from 0 to 1 that is
4804            passed to it.
4805            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
4806            Made into instances of Monochromatic class instread of
4807            deriving from it.
4808            (HotToCold.SetNumGroups): Removed. See CustomRamp.
4809            (HotToCold.next): Removed. See CustomRamp.
4810    
4811            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
4812            (Classification.SetField, Classification.SetFieldType):
4813            Replaced with SetFieldInfo.
4814            (Classification.SetFieldInfo): New. Does a better job of
4815            what SetField and SetFieldType used to do by combining
4816            their function since they should really always be done
4817            at the same time.
4818            (Classification.SetLayer): Renamed to _set_layer.
4819            (Classification._set_layer): Should only be called from
4820            Layer's SetClassification. This does not cause a recursive
4821            call as SetLayer did because we know that Layer knows about
4822            the classification.
4823    
4824            * Thuban/Model/color.py: Fixes RTbug #1971.
4825            (_Transparent): Renamed from Transparent so it doesn't
4826            conflict with the module variable.
4827            (Transparent, Black): Renamed from Color.Transparent,
4828            Color.Black so they are not class variables.
4829    
4830            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
4831            (Layer.Destroy): We don't need to call SetClassification
4832            anymore to clear out the back reference in the classifcation
4833            to the layer. It's better to set it to None using _set_layer,
4834            and we won't be creating another clas object too.
4835            (Layer.SetClassification): Classification._set_layer is not
4836            recursive so remove all the locking variables. Also clean
4837            up the code so that it remains unchanged if something fails.
4838    
4839            * Thuban/Model/load.py: Fixes RTbug #1971.
4840            (SessionLoader.start_classification): Call
4841            Classification.SetFieldInfo().
4842    
4843            * Thuban/Model/save.py: Removed import of Color which wasn't
4844            being used.
4845    
4846            * Thuban/UI/classgen.py: Fixes RTbug #1972.
4847            (ClassGenDialog.__init__): Color ramps are now instances
4848            already so we don't need to create any new objects.
4849            (ClassGenDialog.OnOK): Check for numGroups is no longer
4850            necessary because we never use it.
4851    
4852            * Thuban/UI/classifier.py: Fixes RTbug #1971.
4853            (Classifier.__BuildClassification, Classifier.__SetGridTable):
4854            Call Classification.SetFieldInfo() instead of SetFieldType.
4855    
4856            * Thuban/UI/renderer.py: Fixes RTbug #1971.
4857    
4858            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
4859            (MapCanvas.__init__): Subscribe to the idle time event. Set
4860            background color to white.
4861            (MapCanvas.OnPaint): Set a flag indicating that we should
4862            render the map during idle time. If we already have a bitmap
4863            just draw it now.
4864            (MapCanvas.OnIdle): New. Render the map only during idle time.
4865            This also fixes a problem with the busy cursor under gtk.
4866    
4867            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
4868            Fix calls to generate_singletons because the signature changed.
4869    
4870            * test/test_classification.py: Fix color references and
4871            change calls to Classification.[SetField|SetFieldType] to
4872            SetFieldInfo.
4873    
4874            * test/test_load.py: Fix color references.
4875    
4876            * test/test_load_0_2.py: Fix color references.
4877    
4878            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
4879            Change calls to Classification.[SetField|SetFieldType] to
4880            SetFieldInfo.
4881    
4882    2003-07-01  Frank Koormann   <[email protected]>
4883    
4884            MERGE from the greater-ms3 branch.
4885    
4886            * test/test_transientdb.py
4887            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
4888            New. Test join of two tables with partly equal column names.
4889    
4890            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
4891            If duplicates in left and right tables column names are found,
4892            append '_' (underscores) to the name until it is unique.
4893            Create always new internal names for the resulting table and reference
4894            columns in the join statement with <table>.<column>
4895    
4896    2003-07-01  Bernhard Herzog  <[email protected]>
4897    
4898            * test/test_transientdb.py
4899            (TestTransientTable.test_transient_joined_table_same_column_name):
4900            New. Test whether joining on columns with the same names in both
4901            tables works.
4902            
4903            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
4904            sure to use the right internal names even when joining on field
4905            with the same names in both tables. Also, detect duplicate names
4906            in the joined table correctly.
4907    
4908    2003-07-01  Frank Koormann   <[email protected]>
4909    
4910            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
4911            Reverse List of layers to render in same order as in desktop legend.
4912    
4913    2003-06-30  Jonathan Coles   <[email protected]>
4914    
4915            * Thuban/version.py (make_tuple): Takes a version string
4916            and splits it into a tuple of at most three integers.
4917            Used make_tuple() to make tuple versions of the version
4918            numbers.
4919    
4920            * Thuban/UI/about.py: Add Thuban email addresses.
4921    
4922    2003-06-30  Jonathan Coles   <[email protected]>
4923    
4924            * Thuban/version.py: SQLite/PySQLite version dependencies
4925            were too high.
4926    
4927    2003-06-30  Jonathan Coles   <[email protected]>
4928    
4929            * Thuban/version.py: Update version to 0.8.1
4930            
4931            * MANIFEST.in: Added Projections so that default.proj is
4932            included.
4933    
4934    2003-06-26  Jonathan Coles   <[email protected]>
4935    
4936            New About box with lots more information including library
4937            versions and credits. More/better version checking before
4938            Thuban starts.
4939    
4940            * Thuban/UI/about.py: New. New About box that displays
4941            library version information and credits.
4942    
4943            * Thuban/version.py: Added new 'versions' dictionary which
4944            contains the verions of various libraries which are checked
4945            when the module loads.
4946            (verify_versions): Check all version numbers and returns
4947            a list of errors.
4948    
4949            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
4950            Reset the status of the buttons as the situation warrants,
4951            but in a better more reliable way by not relying on the
4952            current status to determine what needs to change.
4953    
4954            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
4955            (verify_versions): Remove most of the code since it is
4956            now in Thuban.version.verify_versions.o
4957    
4958            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
4959            About box in Thuban.UI.about.
4960    
4961            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
4962            Returns the version of gdal library being used as a string.
4963    
4964            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
4965            Removed.
4966            (get_proj_version): Return the version of PROJ that the file
4967            was compiled with.
4968            (get_gtk_version): Return th version of GTK that the file
4969            was compiled with.
4970    
4971    2003-06-25  Jonathan Coles   <[email protected]>
4972    
4973            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
4974            of the SelectPropertiesDialog should be self so the window
4975            appears on top.
4976            (ClassGroupPropertiesCtrl.DoEdit): The parent
4977            of the SelectPropertiesDialog should be self so the window
4978            appears on top.
4979    
4980            * Thuban/UI/resource.py: Cleaned up how we determine file
4981            extensions.
4982            (GetImageResource): Return an wxImage from our Resources.
4983    
4984    2003-06-24  Jonathan Coles   <[email protected]>
4985    
4986            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
4987            Check that a layer has a classification before trying
4988            to get it. Raster layers don't have classifications.
4989    
4990    2003-06-23  Jonathan Coles   <[email protected]>
4991            
4992            * setup.py: Add Resources/XML to resource list.
4993        
4994    2003-06-23  Jonathan Coles   <[email protected]>
4995    
4996            * setup.cfg: Fix copyright dates
4997        
4998    2003-06-23  Jonathan Coles   <[email protected]>
4999    
5000            * MANIFEST.in: Update with Resources/XML
5001    
5002            * setup.py: Don't include Locale resources yet as we don't
5003            have any and it causes problems building the distribution
5004            for Windows. Update version to 0.8.0.
5005    
5006            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
5007    
5008            * Thuban/UI/mainwindow.py: Add blank line at the end because
5009            file was not being read correctly building the Windows
5010            distribution.
5011    
5012    2003-06-23  Jonathan Coles   <[email protected]>
5013    
5014            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
5015    
5016            * Thuban/version.py: Temporarily update longversion for
5017            the 0.8 release so that it doesn't have the cvs revision.
5018    
5019    2003-06-23  Jonathan Coles   <[email protected]>
5020    
5021            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
5022            to make sure that we don't create reentrant possibilities with
5023            wxYield.
5024    
5025            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
5026            directly to avoid the wxSafeYield() call which generates an
5027            OnPaint event causing infinite recursion. Don't try to catch
5028            exception anymore. This was for before there were limits on map
5029            scaling.
5030    
5031    2003-06-23  Bernhard Herzog  <[email protected]>
5032    
5033            Bug fix for RT #1961:
5034    
5035            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
5036            Register DerivedShapestores with the session
5037    
5038            * Thuban/Model/session.py (Session.Tables): Make sure each table
5039            is only listed once.
5040    
5041            * test/test_load.py (TestJoinedTable.test): Add check_format call.
5042            Update file contents to match the one written out.
5043    
5044    2003-06-20  Bernhard Herzog  <[email protected]>
5045    
5046            * test/xmlsupport.py (SaxEventLister.startElementNS)
5047            (SaxEventLister.endElementNS): Do not include the qname. Python
5048            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
5049            is (presumably incorrectly) None, whereas it's a string with the
5050            element name in the later versions.
5051    
5052            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
5053            (TestEventList.test_even_list_namespace): Update tests to reflect
5054            the new behaviour
5055            (TestEventList.test_even_list_id_normalization): Fix doc-string
5056    
5057    2003-06-20  Jonathan Coles   <[email protected]>
5058    
5059            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
5060            by deriving classes to determine if that layer supports shapes.
5061            (Layer): Override HasShapes and return true.
5062    
5063            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
5064            instead of a direct call to wx[Begin|End]CusyCursor().
5065            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
5066            table data.
5067    
5068            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
5069            New. Wrappers around the wxWindows functions that allow us to
5070            make additional calls such as wxYield which gives the native
5071            system a chance to update the cursor correctly.
5072    
5073            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
5074            instead of a direct call to wx[Begin|End]CusyCursor().
5075    
5076            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
5077            instead of a direct call to wx[Begin|End]CusyCursor().
5078            (MapCanvas.find_shape_at): Check if the current search layer
5079            support shapes, otherwise go on to the next layer.
5080    
5081            * test/test_layer.py: Add tests in each type of layer for
5082            HasClassification() and HasShapes()
5083    
5084  2003-06-20  Jonathan Coles   <[email protected]>  2003-06-20  Jonathan Coles   <[email protected]>
5085    
5086          * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after          * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
# Line 229  Line 5312 
5312          Fix problem of hidden properties dialog under windows after double          Fix problem of hidden properties dialog under windows after double
5313          click on layer tree:          click on layer tree:
5314          The tree control always gets an Expanded / Collapsed event after          The tree control always gets an Expanded / Collapsed event after
5315          the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply          the ItemActivated  on double click, which raises the main window again.
5316            We add a second ItemActivated event to the queue, which simply
5317          raises the already displayed window.          raises the already displayed window.
5318    
5319          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26