/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1582  
changed lines
  Added in v.2481

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26