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

Legend:
Removed from v.1760  
changed lines
  Added in v.2537

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26