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

Legend:
Removed from v.1632  
changed lines
  Added in v.2535

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26