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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26