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

Legend:
Removed from v.1878  
changed lines
  Added in v.2395

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26