/[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 1169 by jonathan, Thu Jun 12 12:43:02 2003 UTC revision 2553 by jonathan, Fri Jan 28 19:10:07 2005 UTC
# Line 1  Line 1 
1    2005-01-28  Jonathan Coles <[email protected]>
2    
3            * libraries/thuban/gdalwarp.cpp (GetImageData): Recode how the
4            mask is packed into a bit array. It's now slightly faster.
5    
6    2005-01-28  Jonathan Coles <[email protected]>
7    
8            * Thuban/Model/layer.py (RasterLayer.__init__): Make use_mask
9            default to true.
10    
11            * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Remove
12            code that loads the state of the layer's use_mask flag. Its
13            usefulness is still being debated.
14    
15            * Thuban/Model/save.py (SessionSaver.write_layer): Remove
16            code that saves the state of the layer's use_mask flag. Its
17            usefulness is still being debated.
18    
19            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer): Pass
20            options to ProjectRasterFile based on the state of layer.UseMask().
21            Catch more exceptions from ProjectRasterFile so that Thuban doesn't
22            quit is there is a problem projecting.
23            (BaseRenderer.draw_raster_data): Change the documentation to
24            describe the new format (XBM) that the mask data will be in.
25    
26            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): The mask
27            data is in XBM format when format='RAW' which means it doesn't
28            need to be converted to a wxImage before being used as a mask
29            for a wxBitmap. Assume that if format != 'RAW' that the image
30            data and mask data are in the same format.
31    
32            * libraries/thuban/gdalwarp.cpp (GetImageData): If alpha is enabled
33            and a mask is requested, convert the alpha band to a bit array in
34            XBM format. if an alpha channel is requested, simply return the
35            data in the alpha band. Provide better error handling by returning
36            python error messages (also fixes RT #2947).
37            (ProjectRasterFile): Support multiple mask options, rather than simply
38            a flag indicating that a mask should or should not be used. Provide
39            better error handling by returning python error messages.
40    
41            * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
42            Add mask data to test.
43    
44            * test/test_layer.py (TestLayer.test_raster_layer): Test that a layer
45            should use the mask by default.
46            (TestLayerModificaton.test_raster_layer): Test that a layer should use
47            the mask by default.
48    
49            * test/test_load.py (TestRasterLayer.test): Remove testing for
50            use_mask flag in file.
51    
52            * test/test_save.py (SaveSessionTest.testRasterLayer): Remove testing
53            for use_mask in file.
54    
55            * test/test_load_1_0_1.py: Removed. Shouldn't have been checked in.
56            
57    2005-01-26  Jonathan Coles <[email protected]>
58    
59            Add a new dialog box for raster layers. The dialog box allows
60            the user to toggle a mask that is generated by ProjectRasterFile
61            and is used to only draw the real parts of the projected image.
62    
63            * Thuban/UI/baserenderer.py (BaseRenderer.draw_raster_layer):
64            Instruct the warping code to generate a mask if the raster layer
65            requests one.
66            (BaseRenderer.draw_raster_data): Removed obsolete optional mask argument.
67    
68            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Removed
69            obsolete optional mask argument.
70    
71            * Thuban/UI/classifier.py (Classifier): Change the parent class
72            to LayerProperties and rework the code to support layout calls
73            from the parent.
74            (Classifier.dialog_layout): New. Layout the dialog box.
75            (Classifier.map_layers_removed): Removed. Moved to parent class.
76            (Classifier.map_replaced): Removed. Moved to parent class.
77            (Classifier._OnTry): Renamed to OnTry to support parent class.
78            (Classifier.OnClose): Removed. Supplied in parent class.
79            (Classifier._OnCloseBtn): Removed. Supplied in parent class as OnCloseBtn.
80            (Classifier._OnOK): Renamed to OnOK to support parent class.
81            (Classifier._OnRevert): Renamed to OnRevert to support parent class.
82    
83            * Thuban/UI/layerproperties.py: New. Base class for layer properties
84            dialog boxes.
85    
86            * Thuban/UI/rasterlayerproperties.py: New. Class for displaying
87            raster layer properties.
88    
89            * libraries/thuban/gdalwarp.cpp: Replace the old gdalwarp.cpp code
90            with the non-simple version supplied with gdal. This allows added
91            features such as creating an alpha band.
92            (GetImageData): Generate a mask array from the alpha band that is
93            generated by gdal if the user has selected it. Try to support images
94            that have more than three bands, such as images with RGB plus an
95            alpha band.
96            (ProjectRasterFile): Convert python argument for mask and tell
97            gdal to enable or disable an alpha band.
98    
99            * Thuban/Model/layer.py (BaseLayer.Type): New. Returns a string
100            describing what kind of layer the class is. Defaults to "Unknown",
101            but should be overridden by subclasses.
102            (Layer.Type): New. Override base class method.
103            (RasterLayer.__init__): Create a flag for using a mask. Record extra
104            data from gdal for display in the properties dialog.
105            (RasterLayer.Type): New. Override base class method.
106            (RasterLayer.UseMask): New. Returns True if the mask should be used.
107            (RasterLayer.SetUseMask): New. Set if the mask should be used.
108            (RasterLayer.ImageInfo): New. Return extra information about the image.
109    
110            * Thuban/Model/load.py (SessionLoader.start_rasterlayer): Load
111            the mask information.
112    
113            * Thuban/Model/save.py (SessionSaver.write_layer): Save mask information.
114    
115            * Thuban/UI/mainwindow.py: Register the RasterLayerProperties and
116            Classifier classes as dialogs to use with the proper layer types.
117    
118            * test/test_baserenderer.py (TestBaseRenderer.test_raster_no_projection):
119            Fix test.
120    
121            * test/test_layer.py (TestLayer.test_raster_layer): Test new methods.
122            (TestLayerModification.build_path): New. Support function.
123            (TestLayerModification.test_raster_layer): New. Test new methods.
124    
125            * test/test_save.py (SaveSessionTest.testRasterLayer): Add tests for mask.
126    
127            * test/test_load.py (TestRasterLayer): Add tests for mask.
128    
129            * test/test_load_1_0_1.py: New. Copied from test_load.py.
130    
131            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Removed
132            obsolete optional mask argument.
133    
134    2005-01-26  Nina H�ffmeyer <[email protected]>
135    
136            * Extensions/ogr/ogrshapes.py: Added two dictionaries to ShapeStore
137            which maps the ids and the ordinals. Fixed RowIdToOrdinal(),
138            RowOrdinalToId() and ReadRowAsDict().
139    
140            * Extensions/ogr/ogrstart.py: Added menu item which opens database
141            layers for existing database connections.
142    
143            * Extensions/ogr/test/test_OGRShapestore.py: Fixed a message string.
144    
145    
146    2005-01-26  Jan-Oliver Wagner <[email protected]>
147    
148            * Doc/manual/thuban-manual-de.xml: More translations.
149    
150    2005-01-24  Bernhard Herzog  <[email protected]>
151    
152            Rework the status bar updates a bit to make sure the message about
153            the projections is produced at the right times.
154    
155            * Thuban/UI/mainwindow.py (MainWindow.update_status_bar_messages):
156            New class variable with messages that may require a status bar
157            update.
158            (MainWindow.view_position_changed)
159            (MainWindow.update_status_bar): Rename from view_position_changed
160            to update_status_bar.  It's meaning has changed now that it may
161            also generate messages about problems with projection settings.
162            (MainWindow.__init__): Use the new update_status_bar_messages
163            class variable to subscribe update_status_bar
164            (MainWindow.set_position_text): Update doc-string.  This method
165            has to be renamed at some point.  See doc-string and comments.
166            (MainWindow.OnClose): Unsubscribe update_status_bar from all
167            messages in update_status_bar_messages
168    
169            * Thuban/UI/viewport.py (ViewPort.forwarded_map_messages): New
170            class attribute.  map messages to be forwarded by the viewport.
171            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): (un)subscribe
172            the messages in forwarded_map_messages
173    
174    2005-01-21  Bernhard Herzog  <[email protected]>
175    
176            * test/postgissupport.py (PostGISDatabase.__init__): Tweak
177            doc-string
178            (find_postgis_sql): Update for postgis-1.0.0-rc1, which uses a
179            different name for the initialization SQL file.
180    
181    2005-01-21  Jonathan Coles <[email protected]>
182    
183            * Thuban/UI/baserenderer.py (proj_params_to_str): New. Takes
184            a projection and returns a formatted string representing the
185            parameters to feed to gdalwarp. This function eliminates
186            redundancy in draw_raster_layer().
187            (BaseRenderer.render_map_incrementally): Removed the optimization which
188            drew the top most raster layer first and then only those vector-
189            based layers that are above it. With the support for transparency
190            this optimization breaks correct behaviour.
191            (BaseRenderer.draw_raster_layer): Reorganize code to support possible
192            future enhancements to raster layer bounding box. The old behaviour has
193            not changed. Also, change calling parameters to draw_raster_data()
194            to specify new RAW data format and mask.
195            (BaseRenderer.draw_raster_data): Change signature to include an optional
196            parameter for mask information. Change documentation to mention
197            support for new parameter and added option for RAW data format.
198            The data argument is now a list of [width, height, data].
199    
200            * Thuban/UI/renderer.py (MapRenderer.draw_raster_data): Add new optional
201            mask parameter. Add new condition for RAW format, which
202            significantly reduces rendering time. Add condition for
203            mask parameter.
204    
205            * libraries/thuban/gdalwarp.cpp (GetImageData): New. Creates a
206            data array of RGB values from the projected image returned from
207            the gdal warping functions. In the case of palette based images, it
208            converts the NO_DATA index to the mask color.
209            (ProjectRasterFile): Removed all custom memory driver references
210            and replaced it with the standard in-memory dataset provided
211            by gdal. The return data is no longer a BMP file, but an array
212            of RGB values, one set triple per pixel.
213    
214            * libraries/thuban/bmpdataset.cpp: Removed. Unnecessary.
215            * libraries/thuban/cpl_mfile.h: Removed. Unnecessary.
216            * libraries/thuban/cpl_mfile.cpp: Removed. Unnecessary.
217    
218            * setup.py (thuban_build_ext.finalize_options): Removed mention
219            of cpl_mfile.cpp and bmpdataset.cpp files in the list of source
220            files. These are obsolete with the new version of gdalwarp.cpp
221    
222            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data):
223            Updated signature.
224            (TestBaseRenderer.test_raster_no_projection): Changed the test
225            data to be data in the uncompressed RAW format returned from
226            ProjectRasterFile.
227    
228    2005-01-21  Jan-Oliver Wagner <[email protected]>
229    
230            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Made
231            string available for i18n.
232    
233    2005-01-20  Russell Nelson  <[email protected]>
234    
235            * Resources/Projections/defaults.proj: Ruin the speling of the
236            Lambert-93 projection so it doesn't run into the wx UTF-8 bug.
237            It's the wrong thing to do in the long run, but it's necessary for
238            those users until that bug is fixed.  Otherwise the projection
239            dialog segfaults.  Better to annoy some Lambert-93 users with a
240            spelling mistake than every Fedora Core 3 user of Thuban-CVS.
241    
242    2005-01-20  Bernhard Reiter <[email protected]>
243    
244            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Added
245            docstring and comment that the warning code here is a hack.
246    
247    2005-01-20  Russell Nelson  <[email protected]>
248    
249            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed): Warn
250            user about misprojected layers when their lat/lon bounding
251            box exceeds rational lat/lon values.
252    
253    2005-01-20  Bernhard Reiter <[email protected]>
254    
255            * Thuban/UI/about.py (unicodeToLocale): Improved:
256            Use 'ascii' and then 'replace' for other characters
257            when getdefaultlocale returns None. Thanks to Bernhard H. .
258    
259    2005-01-20  Bernhard Reiter <[email protected]>
260    
261            * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Added a comment
262            that OnRangeText might be called twice and using None as argument.
263    
264    2005-01-20  Bernhard Reiter <[email protected]>
265    
266            * Thuban/UI/classgen.py (GenQuantilesPanel.OnRetrieve): Add a
267            OnRangeText(0) to work around a different in wx Behaviour noticed
268            on MacOSX, thanks to Lorenzo Moretti and Daniel Calvelo for the fix.
269    
270    2005-01-20  Bernhard Reiter <[email protected]>
271    
272            * Thuban/UI/about.py: take iso-8859-15 when getdefaultlocale returns
273            None. (Fixes rt#2910.)
274            
275    2005-01-18  Frank Koormann <[email protected]>
276    
277            New Extension: mouseposition
278            Tool to collect mouse click positions (map coordinates) in a dialog.
279    
280            * Extensions/mouseposition/__init__.py: New, extension registration
281    
282            * Extensions/mouseposition/mouseposition.py: New, implements the
283            dialog and adds a tool to Thuban mainwindow.
284    
285            * Extensions/mouseposition/position.xpm: New, icon for tool.
286    
287    2005-01-14  Jan-Oliver Wagner <[email protected]>
288    
289            * Doc/manual/thuban-manual-de.xml: More translations.
290    
291    2005-01-11  Frank Koormann <[email protected]>
292    
293            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
294            Fix indention bug.
295    
296    2005-01-09  Frank Koormann <[email protected]>
297    
298            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer):
299            BugFix 2901: Explicitly copy layers ClassificationColumn since it
300            is not part of the layers Classification.
301    
302    2005-01-03  Frank Koormann <[email protected]>
303    
304            * Thuban/UI/renderer.py (ScreenRendererdraw_selection_incrementally):
305            BugFix 2883: Former implementation only worked on classified point
306            layers: KeyError was raised, now use the default size if field is None.
307    
308    2004-12-27  Bernhard Reiter <[email protected]>
309    
310            svgexport 1.0.0cvs: Fixed label export.
311    
312            * Extensions/svgexport/test/test_svgmapwriter.py:
313            class TestSVGRenderer(): New class; new test test_label_font().
314    
315            * Extensions/svgexport/svgmapwriter.py
316            (SVGRenderer.label_font()): initialised Font size with self.factor now,
317            makes test_label_font happy.
318    
319            * Extensions/svgexport/TODO: crossed out fixed label export item.
320            Added item for options.
321    
322            * Extensions/svgexport/__init__.py: Bumped version to 1.0.0cvs.
323    
324    2004-12-27  Russell Nelson  <[email protected]>
325    
326            Middle mouse button pans.
327    
328            * Thuban/UI/view.py (MapCanvas.__init__): Subscribe also
329            OnMiddleDown and OnMiddleUp events.
330            (MapCanvas.OnMiddleDown): New. Activate the pan tool and remember the
331            previously used tool.
332            (MapCanvas.OnMiddleUp): New. Reactivate the remebered tool used before
333            pressing the middle mouse button.
334    
335    2004-12-27  Jan-Oliver Wagner <[email protected]>
336    
337            * Doc/manual/thuban-manual-de.xml: More translations.
338    
339    2004-12-23  Jan-Oliver Wagner <[email protected]>
340    
341            * Thuban/UI/projdialog.py (ProjFrame.load_user_proj): Added a
342            \n to stderr after the warnings. Thanks to Russell Nelson.
343    
344    2004-12-20  Nina Hueffmeyer <[email protected]>
345    
346            * Extensions/ogr/ogrshapes.py: Fixed some issues from
347            Bernhard (coding guidelines etc.). Additionally it is now possible to
348            display shapefiles containing feature collections (e.g.polygons
349            with holes). Works with gdal 1.2.1 now.
350    
351            * Extensions/ogr/test/test_OGRShapestore.py: Fixed some issues
352            from Bernhard (coding guidelines etc.). If ogr can't be imported,
353            tests are skipped now.
354    
355            * Extensions/ogr/ogrstart.py: Fixed some typings.
356    
357    2004-12-20  Bernhard Reiter <[email protected]>
358    
359            * Extensions/svgexport/TODO: updated to add support for
360            raster layers and labels for 1.0.1.
361    
362            * Extensions/svgexport/svgmapwriter.py (draw_raster_layer):
363            Issue a warning now.
364    
365    2004-12-19  Bernhard Reiter <[email protected]>
366    
367            * Extensions/svgexport/TODO: Added idea to support triggering
368            the application down the pipe.
369    
370    2004-12-19  Bernhard Reiter <[email protected]>
371    
372            svgexport: Improved code quality, mainly by better naming.
373    
374            * Extensions/svgexport/svgmapwriter.py:
375            DrawPath() renamed to DrawPolygonPath(),
376            added documentation, improved comments and variable names.
377            
378            * Extensions/svgexport/svgmapwriter.py,
379              Extensions/svgexport/test/test_svgmapwriter.py:
380            All using DrawPolygonPath() now, the default parameter closed=True
381            omitted.
382    
383            * Extensions/svgexport/test/test_svgmapwriter.py:
384            renamed test_polygon_opened() to test_polyline()
385            renamed test_transparent_polygon() to test_transparent_polyline()
386    
387    2004-12-18  Jan-Oliver Wagner <[email protected]>
388    
389            Some fixes of gns2shp extension.
390    
391            * Extensions/gns2shp/test/__init__.py: New. Make this directory a
392            package.
393    
394            * Extensions/gns2shp/test/test_gns2shp.py: Add some import paths
395            dynamically.
396    
397            * Extensions/gns2shp/test/README: Simplified description how to test.
398    
399            * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed doc-string,
400            fixed some dimensions of fields according to the GNS documentation
401            which seems to change undocumented.
402            Now killing trailing \n and/or \r from MODIFY_DATE.
403            This fixes RT#2453.
404    
405    2004-12-18  Bernhard Reiter <[email protected]>
406    
407            svgexport 1.0.0: Treats holes and islands nicely. Documentation added.
408    
409            * Extensions/svgexport/test/test_svgmapwriter.py:
410            Added new tests: test_export_polygon_with_hole()
411            and test_polygon_with_hole().
412    
413            * Extensions/svgexport/svgmapwriter.py
414            (draw_polygon_shape()): Uses DrawPath correctly now.
415    
416            * Doc/manual/thuban-manual.xml: Added documentation for stable
417            extention svgexport.    
418            * Doc/manual/thuban-manual-de.xml: Copied English section about
419            svexport over.
420    
421            * Extensions/svgexport/__init__.py: Bumped version number to 1.0.0.
422    
423            * Extensions/svgexport/svgsaver.py,maplegend.py:
424            Moved from experimental to stable extension menu.
425    
426            * Extensions/svgexport/TODO: updated.
427    
428    
429    2004-12-18  Bernhard Reiter <[email protected]>
430    
431            Added Extensions/svgexport/TODO
432    
433    2004-12-18  Bernhard Reiter <[email protected]>
434    
435            Refactored in svgexport:
436            DrawPath replaces DrawPolygon; added newline in front of "M" in paths.
437    
438            * Extensions/svgexport/svgmapwriter.py
439            Added verbosity level 3 to print out polygon points.
440            (class Point): added __repr__
441            (class Brush, __str__()): Added space after ,.
442            (DrawPolygon): Renamed to DrawPath()
443            (DrawPath): Takes list of polygons as input now, adds \n before "M"s.
444            (DrawLines): Using DrawPath now.
445    
446            * Extensions/svgexport/test/test_svgmapwriter.py:
447            Replaced DrawPolygon() calls with DrawPath() and put the first argument
448            inside another list. Adapted test data with a newline before "M".
449    
450    2004-12-18  Bernhard Reiter <[email protected]>
451            
452            Refactored svgexport tests: 9 double tests runs eliminated;
453            code size reduced by 8 lines.
454    
455            * Extensions/svgexport/test/test_svgmapwriter.py:
456            (class TestWithDC): Renamed to BaseTestWithDC, moved to top.
457            (class BaseWithDCtools): New, subclass from BaseTestWithDC.
458            (class TestDrawSplines): now subclass from BaseTestWithDCtools,
459            this fixed the double running of the nine tests of TestVirtualDC.
460            (class TestVirtualDC): Using self.dc and self.file from setUp().
461    
462    2004-12-17  Bernhard Herzog  <[email protected]>
463    
464            Two windows specific fixes ported from thuban-1�0-branch:
465    
466            * Thuban/UI/about.py (unicodeToLocale): Use getdefaultlocale
467            instead of getlocale because getlocale doesn't return a usable
468            encoding name on a german windows 2000
469    
470            * setup.py: windows build: Removed the absolute path names and
471            made all prfixes relative to the directory containing setup.py.
472            Makes it a little easier to adapt to a different system.
473    
474    2004-12-16  Bernhard Herzog  <[email protected]>
475    
476            Add support for PostGIS tables with LINESTRING geometries.
477            Fixes RT#2299
478    
479            * Thuban/Model/postgisdb.py (shapetype_map): Add LINESTRING
480    
481            * test/postgissupport.py
482            (PostgreSQLServer.get_default_static_data_db): Rename the "roads"
483            table to "roads-multi" because it now uses MULTILINESTRING
484            geometries and introduce a new "roads" table that uses LINESTRING
485            (coords_to_multilinestring): Make the doc string more precise
486            (coords_to_linestring): New.  Create a LINESTRING WKT
487            representatin
488            (wkt_converter): Add coords_to_linestring
489            (upload_shapefile): Rephrase the doc-string a bit.
490    
491            * test/test_postgis_db.py (TestPostGISShapestoreArc)
492            (LineStringTests)
493            (TestPostGISShapestoreLineString)
494            (TestPostGISShapestoreMultiLineString): Split
495            TestPostGISShapestoreArc into a base class LineStringTests and two
496            derived classes TestPostGISShapestoreLineString for LINESTRING
497            geometries and TestPostGISShapestoreMultiLineString for
498            MULTILINESTRING geometries.  Most test methods are in the base
499            class with the exception of tests that explicitly check the raw
500            format.
501    
502    2004-12-16  Bernhard Herzog  <[email protected]>
503    
504            Make the test suite work with PostGIS 0.8.2 and PostgreSQL 7.4
505    
506            * test/postgissupport.py (find_postgis_sql): Different postgis
507            versions put the postgis.sql file into slightly different places
508            so we have to look in both.  The updated doc string describes this
509            is more detail.
510    
511            * test/test_postgis_db.py
512            (TestPostGISSpecialCases.test_column_name_quoting): The return
513            value of UniqueValues is unsorted, so it has to be sorted for
514            comparison.
515    
516    2004-12-16  Bernhard Herzog  <[email protected]>
517    
518            Fix for RT#2237
519    
520            * Thuban/UI/projdialog.py (ProjFrame._show_proj_panel): If the
521            panel to be shown is the UnknownProjPanel disable the OK and Try
522            buttons.  Otherwise enable them.
523            (ProjFrame.__GetProjection): The UnknownProjPanel returns None for
524            the parameters.  In that case __GetProjection also returns None
525            now.
526    
527    2004-12-15  Bernhard Herzog  <[email protected]>
528    
529            * Thuban/UI/classgen.py (GenQuantilesPanel.__init__): Set the
530            minimum number of classes to 2.  The calculate_quantiles needs at
531            least two and raises an exception otherwise.  
532            Fixes RT#2549
533    
534    2004-12-15  Bernhard Herzog  <[email protected]>
535    
536            * test/postgissupport.py (PostgreSQLServer.execute_sql): Extend to
537            so that it returns a result for select statements.
538            (PostgreSQLServer.server_version): New.  Return the version of the
539            server software.
540            (PostgreSQLServer.require_authentication): The format of
541            pg_hba.conf has changed between PostgrSQL 7.2 and 7.3.  Check the
542            server version and generate the file in the correct format
543    
544    2004-12-15  Bernhard Herzog  <[email protected]>
545    
546            * test/postgissupport.py (PostgreSQLServer.is_running): Fix typo
547            in the doc string and rephrase it a little.
548    
549    2004-12-15  Frank Koormann <[email protected]>
550    
551            * test/test_load.py (TestAltPath.checkSession): New, extended checks if
552            session has been loaded successfully. The check is called by the relevant
553            tests after executing load_session().
554    
555    2004-12-13  Bernhard Herzog  <[email protected]>
556    
557            Make sure the region used to determine which shapes are visible
558            actually matches the region on the printed page.  If this isn't
559            done properly some shapes might not be printed.  
560            Fixes RT #2692
561    
562            * Thuban/UI/view.py (MapPrintout.draw_on_dc): The region for the
563            renderer has to be at the same position as the mapregion
564    
565            * Thuban/UI/renderer.py (ExportRenderer.RenderMap): self.region
566            has to be moved by (self.shiftx, self.shifty) too.
567    
568    2004-12-13  Bernhard Herzog  <[email protected]>
569    
570            * libraries/pyprojection/Projection.i: Work around a bug in the
571            generated python code which leads to exception in the __del__
572            method when the constructor fails.  See the comments in the code
573            for more details.
574    
575            * libraries/pyprojection/Projection.py: Updated from Projection.i
576            with SWIG.
577    
578    2004-12-13  Bernhard Herzog  <[email protected]>
579    
580            * test/test_load.py (TestAltPath.test_01_single_path_error_fix)
581            (TestAltPath.test_02_path_error_fix_from_list)
582            (TestAltPath.test_05_path_error_fix_from_list_changed)
583            (TestAltPath.test_06_path_error_fix_from_list_fails): self.session
584            is destroyed in tearDown, so there's no need to do it in a test
585            case.
586    
587            * Thuban/Model/load.py (SessionLoader.open_shapefile): Remove a
588            debug print
589    
590    2004-12-13  Bernhard Herzog  <[email protected]>
591    
592            * Extensions/svgexport/test/test_svgmapwriter.py
593            (TestDrawSplines.setUp): Do not use super with the unittest
594            classes because in Python 2.2 they're still old-style classes.
595    
596    2004-12-13  Frank Koormann <[email protected]>
597    
598        Alternative Path feature: When loading a (moved) session where
599            shapefiles cannot be found, ask the user. Use the specified path
600            if further shapefiles are missing. However, ask the usr for confirmation
601            in such cases.
602    
603            * test/test_load.py (TestAltPath): New, tests for alternative path feature
604            in load_session()
605            (Shapefile_CallBack): Helper, implements controllable callback.
606    
607            * Thuban/UI/application.py (ThubanApplication.OnInit):
608            Added "alt_path" to self.path
609            (ThubanApplication.OpenSession): Added shapefile_callback as second
610            callback similar to db_connection_callback.
611            (ThubanApplication.run_alt_path_dialog): New, implementaion of
612            shapefile_callback. In addition to raising the dialog the control of
613            self.path('alt_path') is implemented here.
614    
615            * Thuban/Model/load.py (SessionLoader.__init__): Added shapefile_callback.
616            (SessionLoader.open_shapefile): Open shapefile, eventually with
617            alternative path. This wrapps the "theSession.OpenShapefile(filename)"
618            formerly used in start_fileshapesource()/start_layer().
619            (SessionLoader.start_fileshapesource): Call open_shapefile().
620            (SessionLoader.start_layer): Call open_shapefile().
621            (load_session): Added shapefile_callback.
622    
623            * Thuban/UI/altpathdialog.py: New, implements dialogs for alternative path
624            feature (search / check).
625            
626            * Doc/manual/thuban-manual.xml: Added documentation of new feature.
627    
628    2004-12-11  Bernhard Reiter <[email protected]>
629    
630             svgexport 0.9.2: Point size supports for maps.
631    
632            * Extensions/svgexport/svgmapwriter.py: Added import of SHAPETYPE_POINT
633            (def draw_point_shape): new parameter size defaults to 2 as before.
634            (draw_shape_layer_incrementally): Moved draw_func log line higher.
635            Added draw_func call with size when dealing with a point layer.
636    
637            * Extensions/svgexport/__init__.py: bumped version to 0.9.2.
638            
639    2004-12-11  Bernhard Reiter <[email protected]>
640    
641            Made sure that newlines are inserted in the svg path d attributes
642            to raise the chance that the line length will be below 255 characters,
643            as recommended by REC SVG 1.1 in section 8.3.1.
644    
645            * Extensions/svgexport/svgmapwriter.py(DrawPolygon):
646            Adding \n before L's and changed whitespace handling.
647    
648            * Extensions/svgexport/test/test_svgmapwriter.py:
649            Adapted tests to new whitespace handling of DrawPolygon.
650    
651    2004-12-11  Bernhard Reiter <[email protected]>
652    
653            * Doc/technotes/coding_guidelines.txt: easy typo fixed.
654    
655            * Extensions/svgexport/test/test_svgmapwriter.py:
656            Removed test_drawbezier in favour of new test_drawspline3 and
657            test_drawspline4 within new class TestDrawSplines(TestVirtualDC).
658            All only to test DrawSpline.
659    
660            * Extensions/svgexport/svgmapwriter.py(DrawSpline):
661            New implementation now really using the strange algorithm of
662            xfig 3.1's approximated splines and its conversion to postscript
663            with one twist: SVG can do quadratic beziers, so skipped translation
664            to cubic beziers.
665            (TestWithDC): Typo in comment fixed.
666    
667    2004-12-09  Martin Schulze  <[email protected]>
668    
669            * Thuban/Model/classgen.py: Added missing character encoding
670    
671            * Extensions/wms/properties.py (OpenWMSProperties): removed
672    
673            * Extensions/wms/parser.py (WMSCapabilitiesParser.error): Dropped
674            support for get_srs_discrepancies() since there are no
675            discrepancies anymore (was a thinko)
676    
677            * Extensions/wms/layer.py (WMSLayer.GetMapImg): Improved graphic
678            format priority now that more formats are supported globally by
679            the render engine.
680    
681    2004-12-08  Silke Reimer <[email protected]>
682            * Extensions/ogr/ogrshapes.py: Substituted ogr-method CloseRings
683            because it is not available in all versions of ogr
684    
685    2004-12-08  Bernhard Reiter <[email protected]>
686            * Extensions/ogr/__init__.py: Added empty __init__.py to heal
687            global tests until a real one is commited.
688    
689    2004-12-07 Nina H�ffmeyer <[email protected]>
690    
691            * /Extensions/ogr/: Adding a new extension to read shapefiles with
692            ogr. It is planned to add other vector formats.
693    
694            * /test/runtests.py: Adding tests from /Extensions/ogr/test/.
695    
696    2004-12-07  Jan-Oliver Wagner <[email protected]>
697    
698            * /Extensions/svgexport/test/test_svgmapwriter.py: Reverting
699            part of a (non-)fix to renable that the tests are always
700            executed.
701    
702    2004-12-07  Bernhard Reiter <[email protected]>
703    
704            * Extensions/svgexport/test/test_svgmapwriter.py:
705            Added test_drawbezier() to test DrawSpline().
706    
707            * Extensions/svgexport/svgmapwriter.py(DrawSpline):
708            Really implemented bezier drawing.
709    
710            * Extensions/svgexport/__init__.py: Bumped version of svgexport
711            to 0.9.1 because now the legend examples lines styles
712            will be drawing with beziers.
713    
714    2004-12-05  Martin Schulze  <[email protected]>
715    
716            * Thuban/UI/renderer.py (raster_format_map): Added PNG, TIFF and
717            GIF as supported bitmap image formats (helpful for the WMS extension)
718    
719    2004-11-30  Martin Schulze  <[email protected]>
720    
721            * Extensions/wms/test/test_ogclib.py (TestOGCLib.test_compareURLs):
722            Improved the test for the internal compare method
723    
724    2004-11-27  Jan-Oliver Wagner <[email protected]>
725    
726            * Thuban/UI/about.py (About.__init__): Added
727            Norbert Solymosi for hungarian translation and Ole Rahn
728            as contrbutor. Moved Bernhard Reiter from Contributor
729            to Developer.
730    
731    2004-11-27  Bernhard Reiter <[email protected]>
732    
733            * Extensions/svgexport/test/test_svgmapwriter.py:
734            Removed Jan from author list as he did not change enough significant
735            lines yet.
736    
737            * Extensions/svgexport/__init__.py: Added Bernhard as author
738            of the Extension.
739    
740    2004-11-27  Jan-Oliver Wagner <[email protected]>
741    
742            * po/hu.po: New. Hungarian translation. Contributed
743            by Norbert Solymosi.
744    
745    2004-11-26  Bernhard Herzog  <[email protected]>
746    
747            * Extensions/svgexport/test/test_svgmapwriter.py
748            (Testobjectexport.test_transparent_polygon): Commented out some
749            debug prints
750    
751    2004-11-24  Jan-Oliver Wagner <[email protected]>
752    
753            Fix broken tests for svg extension and added svg legend
754            to Experimental menu.
755    
756            * Extensions/svgexport/test/test_svgmapwriter.py: Fix to have
757            the test run correctly even if the extension is a package.
758            Also removed the "import Thuban" which makes no sense.
759    
760            * Extensions/svgexport/__init__.py: Fix to have the extensions'
761            test module also be executed from the global test routine.
762            This is done by looking for the absense of the DISPLAY variable.
763    
764            * Extensions/svgexport/maplegend.py: Moved the menu entry from Extensions
765            to Experimental menu since this module has yet not reached a stable
766            status (ie. 1.0).
767    
768    2004-11-22  Bernhard Reiter <[email protected]>
769    
770            * Extensions/svgexport/svgmapwriter.py:
771            Added verbose variable and some logging depending on it.
772            (class VirtualDC(XMLWriter)): Minor improvement in the polygon loop,
773            because counting i is not necessary.
774            (class Pen, class Brush): Added simple __str__ methods.
775            (SVGRenderer.draw_polygone_shape): Fix #2698 (transparent polygons are
776            not exported to svg file) Note: holes still unhandled.
777    
778            * Extensions/svgexport/test/test_svgmapwriter.py:
779                    Made a baseclass TestWithDC for test needed a DC.
780                    Added tests for bug #2698 (transparent polygons are not
781                    exported to svg file):
782                    Testobjectexport.test_transparent_polygon()
783    
784            * Thuban/Model/base.py (UnsetModified):
785            Fixed some typos in docstring.
786    
787            * Thuban/UI/baserenderer.py (BaseRenderer.draw_polygon_shape()):
788            Added hints on the used algorithm for handling holes.
789    
790    2004-11-20  Jan-Oliver Wagner <[email protected]>
791    
792            Some face lifting for the examples.
793    
794            * Examples/__init__.py: Make this directory a package.
795    
796            * Examples/simple_extensions/__init__.py: Make this directory a package.
797    
798            * Examples/simple_extensions/hello_world.py: Moved entry from Extensions
799            menu to Examples menu.
800    
801            * Examples/simple_extensions/simple_command.py: Some more comments,
802            minor changes.
803    
804            * Examples/simple_extensions/simple_tool.py: Minor changes.
805    
806    2004-11-20  Jan-Oliver Wagner <[email protected]>
807    
808            Changed way of extension registry for wms and added extension
809            registry for umn_mapserver extension.
810    
811            * Extensions/wms/__init__.py: Added registry entry and the importing
812            of the actual wms module. Included a test for the required PyOGCLib.
813    
814            * Extensions/wms/wms.py: Removed registry entry (moved to __init__.py).
815    
816            * Extensions/umn_mapserver/__init__.py: Added registry entry and the
817            importing of the actual umn mapserver management modules.
818            Included a test for the required Python MapScript.
819    
820    2004-11-20  Jan-Oliver Wagner <[email protected]>
821    
822            Changed way of extension registry for importAPR, bboxdump
823            and added extension registry for svgexport.extension registry for
824            svgexport.
825    
826            * Extensions/importAPR/__init__.py: Added registry entry and the importing
827            of the actual importAPR module.
828    
829            * Extensions/importAPR/importAPR.py: Removed registry entry (moved to
830            __init__.py).
831    
832            * Extensions/bboxdump/__init__.py: Added registry entry and the importing
833            ï¿½ï¿½ï¿½ï¿½of the actual bboxdump module.
834    
835            * Extensions/bboxdump/bboxdump.py: Removed registry entry (moved to
836            ï¿½ï¿½ï¿½ï¿½__init__.py).
837    
838            * Extensions/svgexport/__init__.py: Added registry entry and the importing
839            of the svgsaver module.
840    
841            * Extensions/svgexport/svgsaver.py: Moved the menu entry from Extensions
842            to Experimental menu since this module has yet not reached a stable
843            status (ie. 1.0).
844    
845    2004-11-18  Jan-Oliver Wagner <[email protected]>
846    
847            Now the hit test considers the size of point symbols.
848    
849            * Thuban/UI/viewport.py (ViewPort._hit_point): Added optional parameter
850            'size' defaulting to the previously fixed value 5.
851            Extended doc-string.
852            (Viewport._find_shape_in_layer): Resolved FIXME regarding flexibility
853            for symbols.
854            Now the size of the largest point symbol is determined to find out
855            about whether the point has been hit.
856            This fixes the problem that only clicks inside a fixed distance of
857            5 where found.
858    
859    2004-11-17  Jan-Oliver Wagner <[email protected]>
860    
861            Another open issue fixed regarding sizeable symbols: correct rendering of
862            selected symbols.
863    
864            * Thuban/UI/renderer.py (ScreenRenderer.draw_selection_incrementally):
865            Added consideration of the specific size of point symbols.
866            The property for each point symbol is retrieved and the size applied
867            for the rendering method.
868            Added doc-string.
869    
870    2004-11-16  Jan-Oliver Wagner <[email protected]>
871    
872            Changed way of Extension Registry for gns2shp and profiling.
873    
874            * Extensions/gns2shp/gns2shp.py: Removed registry entry (moved to
875            __init__.py).
876    
877            * Extensions/gns2shp/__init__.py: Added registry entry and the importing
878            of the actual gns2shp module.
879    
880            * Extensions/profiling/profiling.py: Removed registry entry (moved to
881            __init__.py).
882    
883            * Extensions/profiling/__init__.py: Added registry entry and the importing
884            of the actual profiling module.
885    
886    2004-10-28  Bernhard Reiter <[email protected]>
887    
888            * Extensions/svgexport/: Minor improvements to doc strings.
889    
890    2004-10-07  Jan-Oliver Wagner <[email protected]>
891    
892            Further elements for sizable point objects now
893            making this feature usable though not yet complete.
894    
895            * Thuban/Model/save.py (SessionSaver.write_classification): Write
896            attribute 'size' for cldata when the shape layer is of point type.
897            This also now make the test_load.py tests happy.
898    
899            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Added size
900            gradient.
901    
902            * Thuban/UI/classifier.py (ID_SELPROP_SPINCTRL): Renamed to
903            ID_SELPROP_SPINCTRL_LINEWIDTH.
904            (ID_SELPROP_SPINCTRL_LINEWIDTH): New Id replaces ID_SELPROP_SPINCTRL.
905            (ID_SELPROP_SPINCTRL_SIZE): New Id.
906            (SelectPropertiesDialog.__init__): Added a second spin control
907            for the size in case the corresponding layer is of point type.
908            (SelectPropertiesDialog._OnSpin): Renamed to _OnSpinLineWidth.
909            (SelectPropertiesDialog._OnSpinLineWidth): New. Former _OnSpin.
910            (SelectPropertiesDialog._OnSpinSize): New. Set size of property
911            and refresh preview.
912    
913    
914    
915    2004-10-04  Martin Schulze  <[email protected]>
916    
917            * Extensions/wms/test/test_parser.py
918            (TestWMSCapabilitiesParser.test_compareLists): Added missing
919            self-test for compareLists()
920            (TestWMSCapabilitiesParser.test_compareDicts): Added missing
921            self-test for compareDicts()
922            (TestWMSCapabilitiesParser.test_compareLists): Adding more tests
923            to verify the test routine fails with non-equal arguments
924            (TestWMSCapabilitiesParser.test_compareDicts): Adding more tests
925            to verify the test routine fails with non-equal arguments
926    
927    2004-10-03  Jan-Oliver Wagner <[email protected]>
928    
929            First elements for sizeable point objects.
930    
931            * Resources/XML/thuban-1.1.dtd: Added size attribute to cldata.
932    
933            * Data/iceland_sample_size.thuban: New. Sample for sized point objects.
934    
935            * test/test_load.py (ClassificationTest.TestLayers): Added SetSize in case
936            of a corresponding argument is given.
937            (TestSymbolSize): New. Test the size attribute of cldata.
938    
939            * Thuban/Model/classification.py: Removed some trailing whitespaces.
940            (ClassGroupProperties.__init__): Set default size.
941            (ClassGroupProperties.SetProperties): Set the size.
942            (ClassGroupProperties.GetSize): New. Return the size.
943            (ClassGroupProperties.SetSize): New. Set the size.
944            (ClassGroupProperties__eq__): Compare also size.
945            (ClassGroupProperties__repr__): Print also size.
946    
947            * Thuban/Model/load.py (SessionLoader.start_cldata): Also parse
948            the size attribute.
949    
950            * Thuban/UI/classifier.py (ClassDataPreviewer.Draw): Added doc-string.
951            Also, now there is a return value that indicates whether the drawing
952            size exceeded the given rect extent and if so the new extent.
953            Finally, point objects are drawn depending on the size. If either
954            the width or height is exceeded, the new extent is returned.
955            (ClassRenderer.Draw): Now when calling the previewer drawing function,
956            evaluate the return value and, if not None, adapt the grid widget size
957            accordingly and redraw again.
958    
959            * Thuban/UI/baserenderer.py (BaseRenderer.draw_shape_layer_incrementally):
960            If the draw function is for points, call it with the size as additional
961            parameter.
962            (BaseRenderer.draw_point_shape): Added additional, optional parameter for
963            the size. Compute the radius using the size.
964    
965            * Extensions/importAPR/apr.py (APR_BMkSym.GetThubanProp): Now
966            that Thuban supports size, apply this correctly.
967    
968            * Extensions/importAPR/importAPR.py: Bumped version to 0.1.1.
969    
970    2004-10-03  Jan-Oliver Wagner <[email protected]>
971    
972            * Doc/manual/thuban-manual-de.xml: Started translation of
973            Map chapter.
974    
975    2004-10-01  Martin Schulze  <[email protected]>
976    
977            * Extensions/wms/properties.py (wmsProperties.__init__): Extended
978            argument for general use through properties-dialog selector
979            
980            * Thuban/UI/classifier.py: Register properties dialog classes for
981            both provided layer classes/types.
982    
983            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): The
984            map can be retrieved through the parent which is passed to the
985            constructor anyway and doesn't require an argument of its own,
986            required for the unification of arguments for general use through
987            properties-dialog selector.
988            (MainWindow.OpenOrRaiseDialog): Move the logic for checking
989            whether a dialog is already opened (and raising it to the users
990            attention) and creating a new dialog into a function of its own
991            (MainWindow.OpenLayerProperties): Use the new OpenOrRaiseDialog()
992            method
993            (MainWindow.OpenLayerProperties): Utilise the new ClassMapper for
994            global registration of properties dialog classes (which are indeed
995            layer-specific).
996    
997            * Thuban/UI/classifier.py (Classifier.__init__): Unify arguments
998            for general use through properties-dialog selector, the map can be
999            retrieved through the parent and doesn't require an argument of
1000            its own.
1001    
1002            * Extensions/wms/wms.py: Register the properties dialog class for
1003            the provided WMS layer
1004    
1005    2004-09-28  Jan-Oliver Wagner <[email protected]>
1006    
1007            New feature: Registry for Extensions.
1008    
1009            * Thuban/UI/extensionregistry.py: This module defines a registry for
1010            Extensions.
1011    
1012            * Thuban/UI/about.py (About.__init__): Added description
1013            of the registered extensions with all of the information.
1014    
1015            * Thuban/Model/extension.py (Extension): Improved doc-string.
1016    
1017            * Extensions/gns2shp/gns2shp.py, Extensions/importAPR/importAPR.py,
1018            Extensions/bboxdump/bboxdump.py, Extensions/profiling/profiling.py,
1019            Extensions/wms/wms.py: Added registration of the extension.
1020    
1021    2004-09-27  Bernhard Reiter <[email protected]>
1022    
1023            More fixes to svgexport to make used ids unique and
1024            conforming to XML's Name production.
1025    
1026            * Extensions/svgexport/test/test_svgmapwriter.py: Added new tests
1027            test_xml_id_constraints(), test_make_ide_nosetbaseid() and
1028            test_make_id_nonintegersetid().  Switched SetID and SetBaseID.
1029            Added Bernhard R. as author.
1030            * Extensions/svgexport/svgmapwriter.py (make_id): Using "_" as
1031            concatenation char now (makes test_make_ide_nosetbaseid() valid).
1032            Also transform second id part with "%d" and catch the TypeError
1033            to raise SVGMapWriterError (making test_make_id_nonintegersetid() ok).
1034            Corrected typo inBernhard's author line.
1035            (SetBaseID): Return the transformed base id. Transform characters
1036            which are not alnum() or in ".-_" to binascii.b2a_hex(). Added
1037            import binascii. If to be set string starts with "xml" or so, add "t".
1038            (draw_shape_layer_incrementally): use the returned value of SetBaseID
1039            for used_baseids checks.
1040    
1041    2004-09-25  Bernhard Herzog  <[email protected]>
1042    
1043            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
1044            Remove a debug print and some tab characters.
1045    
1046    2004-09-25  Bernhard Reiter <[email protected]>
1047    
1048            * Extensions/svgexport/svgmapwriter.py: Added Bernhard R. as Author.
1049            (SetBaseID, SetID, make_id): Improved docstring comments to explain
1050            the interaction of the three functions and the XML id contrains.
1051    
1052    
1053    2004-09-23  Jan-Oliver Wagner <[email protected]>
1054    
1055            * Doc/ThubanModel.xmi: New. UML file for Thuban Model
1056            Module.
1057    
1058            * Doc/README: Added info on ThubanModel.xmi.
1059    
1060    2004-09-23  Jan-Oliver Wagner <[email protected]>
1061    
1062            * Doc/README: New. Some info about how to generate technical
1063            documentation from the source code.
1064            This text was send to the Thuban developer mailing list on
1065            September 21st 2004 by Bernhard Reiter.
1066    
1067    2004-09-21  Bernhard Reiter <[email protected]>
1068    
1069            Improved the svgexport to only use unique ids. Will issues
1070            an error message dialoge when two layer names are the same.
1071            ShapeIDs are now added with a dash within the svg ids.
1072    
1073            * Extensions/svgexport/svgmapwriter.py (SVGMapWriterError): New.
1074            * Extensions/svgexport/test/test_svgmapwriter.py: Added imports
1075            (TestSVGRenderer): New test class with test_make_in() and
1076            test_check_for_layer_name_clash()
1077            * Extensions/svgexport/svgmapwriter.py (SVGRenderer): Fixed __init__()
1078            and draw_shape_layer_incrementally() to not use a baseid twice,
1079            satisfying test_check_for_layer_name_clash()
1080            (VirtualDC.make_id): Use a dash between baseit and id, satisfies
1081            test_make_in().
1082            * Extensions/svexport/svgsaver.py: Import SVGMapWriterError, wxOK
1083            and wxICON_HAND.
1084            (write_to_svg): Put dc and rendering in a try statement and on
1085            catching SVGmapWriterError notify the user and delete the target file.
1086    
1087    2004-09-20  Bernhard Reiter <[email protected]>
1088    
1089            * Model/base.by, Model/layer.py: Fixed typos in docstrings.
1090    
1091    2004-09-03  Jan Sch�ngel  <[email protected]>
1092    
1093            * Extensions/umn_mapserver/mapfile(MF_Class.add_thubanstyle): Fix a
1094            small bug with the line color. Now the line color will now only set
1095            if it is set in Thuban an not Transparent.
1096            
1097            * Extensions/umn_mapserver/mf_export(tblayer_to_map): Fixed a bug with
1098            deleting the layers from mapfile. Now all layers will delete backwards
1099            from the last.
1100    
1101    2004-08-20  Silke Reimer <[email protected]>
1102    
1103            * Thuban/Model/layer.py:
1104            Fixes bug in projection handling: Otherwise very large region might not
1105            have valid values in the layer's projection.
1106    
1107    2004-08-20  Silke Reimer <[email protected]>
1108    
1109            * Thuban/UI/about.py:
1110            small changes to be consistent with coding style.
1111              
1112    2004-08-13  Martin Schulze  <[email protected]>
1113    
1114            * Extensions/wms/test/test_ogclib.py (TestOGCLib.compare_URLs):
1115            Adjusted a comment
1116    
1117    2004-08-11  Silke Reimer <[email protected]>
1118    
1119            * Thuban/UI/about.py: Small changes to encoding related stuff to avoid
1120                    too many and too enhanced imports of locale
1121    
1122    2004-08-10  Silke Reimer <[email protected]>
1123    
1124            * Thuban/UI/about.py: Fixed encoding problem of about dialog: Added
1125                    function unicodeToLocale() to convert special characters to users
1126                    locale encoding
1127    
1128    2004-08-10  Jan-Oliver Wagner <[email protected]>
1129    
1130            * Doc/technotes/coding_guidelines.txt: Added rule 'Method names start with
1131            lower case letter'
1132    
1133    2004-08-09  Jan Sch�ngel  <[email protected]>
1134    
1135            * ChangeLog: Rewrite the last ChangeLog entry to follow
1136            the standard way.
1137    
1138            * Extensions/umn_mapserver/mapfile: Moved the import AnnotationLayer to
1139            the function where it is needed, because it don't works if it stands
1140            at the beginning.
1141            (MF_Layer.__init__): Removed the extra numclassed variable. Now
1142            numclasses from the mapscript will be used.
1143            (MF_Layer.get_index): New. Return the index of the layer in mapfile.
1144            (MF_Layer.set_classes): New. A Classlist will be set to the layer.
1145            (MF_Layer.set_metadata): New. A Metadata mapscript object will set.
1146            (MF_Layer.remove_allclasses): New. All class of the layer will remove.
1147            (MF_Map.create_new_layer): New. A new Layer is created and associated
1148            with the mapscript object.
1149            (MF_Map.set_layerorder): New. The Layer order like in thuban is set in
1150            the mapscript.
1151            (MF_Map.add_thubanlayer): Now a new layerobj is created if no one is
1152            linked to the layer in thuban, else the layerobject linked to the
1153            thubanlayer will be used.
1154            AnnotationLayer will now store the filename of the shapefile.
1155            (MF_Map.remove_layer): If a layer is removed the associated object
1156            must be set new.
1157            
1158            * Extensions/umn_mapserver/mf_export.py(tb_layer_to_map): Add all
1159            layers which are exists in thuban to the mapobj. All removed Layers
1160            will be removed from the mapobj.
1161            Added comments to all functions.
1162            (thuban_to_map): No layer will be removed here.
1163            
1164            * Extensions/umn_mapserver/mf_handle.py
1165            (_has_umn_mapobj_and_selectedlayer): Activating the layer menu. Now
1166            Layersettings for the mapserver kann be edited.
1167    
1168            * Extensions/umn_mapserver/mf_import.py: Now all layers which are
1169            imported, will be linked with the associated MF_Layer.
1170            (import_mapfile): All layers, which are not selected, will be removed.
1171            Disable the "import layer from mapfile" menu option.
1172    
1173            * Extensions/umn_mapserver/sample/iceland.map: Set the status of the
1174            Annotation Layer from DEFAULT to OFF. The DEFAULT setting turns the
1175            layer on permanently.
1176    
1177    2004-08-03  Jan Sch�ngel  <[email protected]>
1178    
1179            * Extensions/umn_mapserver/mapfile.py(MF_Metadata.remove_allmetadata):
1180            New. This function removes all metadata
1181            (MF_Layer.set_group): New. Set the group setting.
1182            (MF_Layer.get_group): New. Get the group setting.
1183            (MF_Map): Removed the extra numlayers variable, used the mapscript
1184            parameter instead.
1185            (MF_Map.get_numlayers): New. This get numlayers.
1186            (MF_Map.remove_all_layers): New. Removes all layers from the mapobj.
1187            (MF_Map.add_thubanlayer): Replaced the exception handling by a check
1188            if the object is an instance. Also added the annotation layer here to
1189            export, but only the layer is created in the mapfile.
1190    
1191            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Removed
1192            the check if a mapobj exist, because its not needed anymore. The
1193            export function is only available if a mapobj exist.
1194            Use the new function to remove all layers.
1195            
1196            * Extensions/umn_mapserver/mf_handle.py(Layer_Dialog): Added a group
1197            option and the metadata button. The layer dialog is temporary disabled.
1198            (Metadata_CustomDataTable): Added some functions to show the grid
1199            correct.
1200    
1201            * Extensions/umn_mapserver/mf_import.py: Moved the code for showing
1202            the number of layer from import_mapfile to this function.
1203            (AnnotationLayer): New. This Class shows the Annotation layer in
1204            thuban. The layer don't do anything. It's only to show the layer
1205            and to save the layer order.
1206            (add_annotationlayer): New. Import an annotation layer to thuban.
1207            (select_layer2import): New. Import only layers to thuban and not
1208            the other settings like projection or scalebar.
1209            (create_new_mapfile): Moved the _has_umn_mapobj function and the
1210            create_new_mapfile functions from mf_handle.py to mf_import.py.
1211            
1212            * Extensions/umn_mapserver/sample/iceland.map: Added the group
1213            parameter to the roads and cultural layers. Also added a new
1214            Annotation Layer for the cultural points.
1215    
1216            * Extensions/umn_mapserver/sample/iceland.html: Added the select
1217            option for the annotation layer.
1218    
1219            * Extensions/umn_mapserver/sample/index.html: Added the start
1220            parameter for the annotation layer.
1221    
1222    2004-08-01  Jan-Oliver Wagner <[email protected]>
1223    
1224            * Doc/manual/thuban-manual-de.xml (Chapter Session Management):
1225            translation completed.
1226    
1227            * Doc/manual/thuban-manual.xml (Chapter Session Management):
1228            Fixed unprecise description for Save Session.
1229    
1230    2004-07-31  Jan-Oliver Wagner <[email protected]>
1231    
1232            Started translation of Users Manual into german.
1233    
1234            * Doc/manual/thuban-manual-de.xml: New. German Users Manual.
1235    
1236            * Doc/manual/Makefile: Added build instructions for german
1237            users manual.
1238    
1239            * Doc/manual/thuban-manual.xml: Minor corrections in Introduction.
1240    
1241    2004-07-28  Jan Sch�ngel  <[email protected]>
1242    
1243            * Extensions/umn_mapserver/mapfile.py(MF_Metadata): Changed all class
1244            functions. Now all metadata will handle by the function and its not
1245            needed to initialize it from outside. Therefor the associated mapobj
1246            will be stored in the Metadata Object. So we can use the special
1247            functions from the associated mapobj to get the Metadata.
1248            Therefor all initialization code for the metadata is removed from the
1249            other classes.
1250            (MF_Layer): Added a function to get the metadata object.
1251            (MF_Map): Added a function to set the mappath, the path where
1252            the mapfile ist stored.
1253    
1254            * Extensions/umn_mapserver/mf_export.py(thuban_to_map): Changed the code
1255            to set the extent in the mapfile. Now the code is set by the displayed
1256            data in the Thuban-view.
1257            (export_mapfile): The shapepath is now set empty, until relative
1258            pathnames are supported.
1259    
1260            * Extension/umn_mapserver/mf_handle.py: Added a dialog to handle
1261            metadata. Yet only mapfile metadata are supported. Layer and class
1262            supported are not implemented.
1263            Added a dialog to handle layer informations. The dialog only shows the
1264            selected layer at the moment.
1265    
1266            * Extensions/umn_mapserver/mf_import.py(import_mapfile): Changed the
1267            code for setting the extent in thuban. Now the extent is set to the
1268            given extent from the mapfile.
1269            Fixed a logical mistake. Now the extent is set when realy a layer is
1270            loaded, and not if one is selected to load.
1271    
1272            * Extensions/umn_mapserver/sample/iceland.html: Added code to zoom and
1273            move the shown map in the browser.
1274    
1275            * Extensions/umn_mapserver/sample/iceland.map: Added a new metadata
1276            line to the mapobj and added metadata to the political layer.
1277    
1278            * Extensions/umn_mapserver/test/test_mapserver.py: Changed the test
1279            for Metadata.
1280    
1281    2004-07-26  Martin Schulze  <[email protected]>
1282    
1283            * Thuban/Lib/classmapper.py (ClassMapper.has): Added the new
1284            ClassMapper
1285    
1286            * test/test_classmapper.py (TestMapping.test_mapper): Added a Test
1287            case for the new ClassMapper
1288    
1289    
1290    2004-07-22  Bernhard Herzog  <[email protected]>
1291    
1292            * Thuban/UI/viewport.py (ViewPort.VisibleExtent): New.  Return the
1293            visible extent of the map in projected coordinates
1294    
1295            * test/test_viewport.py (SimpleViewPortTest.test_default_size)
1296            (SimpleViewPortTest.test_init_with_size): Add some VisibleExtent()
1297            tests.
1298            (SimpleViewPortTest.test_visible_extent): New. The real test for
1299            VisibleExtent()
1300    
1301    2004-07-22  Bernhard Herzog  <[email protected]>
1302    
1303            * test/test_viewport.py: Use support.run_tests as the main
1304            function when running asa script.
1305    
1306    2004-07-22  Jan Sch�ngel <[email protected]>
1307    
1308            * Extensions/umn_mapserver/mf_export.py: Added "import os"
1309            Removed the old "import Thuban.UI.mainwindow" code.
1310            (tbextent_to_map): Removed the extra function and at the code direct
1311            to "thuban_to_map" function.
1312            (write_creatorcomment): Added. Now a short comment is added to the
1313            beginning of an generated mapfile.
1314            (export_mapfile): Now the Path and filename are saved in to variables,
1315            and not together in one variable. This is needed for the new
1316            write_creatorcomment function.
1317                    
1318            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Added the
1319            import module "re". Also added Range and the ClassGroupRange import
1320            from Thuban. Both are needed for the new range expression import.
1321            (create_rangeexpression): Added. Creates a Range Expression in Thuban
1322            style from a given mapfile expression.
1323            (added_rasterlayer): Make some small code changes. The shapepath is
1324            now stored in an extra variable and the clazz_name is set empty if no
1325            class name set in the mapfile.
1326            Changed the Error message for Range Expressions, becaus the new
1327            function create a error string which will be shown in the dialog.
1328    
1329            * Extensions/umn_mapserver/test/test_mapserver.py: Added a test for the
1330            range expression import.
1331    
1332    2004-07-21  Jan-Oliver Wagner <[email protected]>
1333    
1334            * Extensions/umn_mapserver/README: Added hint that
1335            installation as root can be avoided. Removed all tabs.
1336    
1337    2004-07-16  Bernhard Herzog  <[email protected]>
1338    
1339            * test/test_viewport.py
1340            (ViewPortTest.test_changing_map_projection): Check that changing
1341            the projection of an empty map shown in a viewport doesn't lead to
1342            exceptions in the viewport's handler for the
1343            MAP_PROJECTION_CHANGED messages
1344    
1345            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Only
1346            try to keep the same region visible when the map actually contains
1347            something
1348    
1349    2004-07-15  Jan Sch�ngel <[email protected]>
1350    
1351            * Extensions/umn_mapserver/mapfile.py: Added a function to get the
1352            mappath directly from the mapobj. Is needed because of the changes
1353            in mf_import.py.
1354            (MF_Layer.add_thubanclass): Added a new comment.
1355            (MF_Map.set_extent): Fixed a bug with exporting empty mapobj. If the
1356            mapobj is empty there is no extent get from thuban an so no one can
1357            set to th mapobj.
1358            
1359            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Updated
1360            the discription.
1361            Split the funktion in to three smaller ones. The new functions are
1362            add_rasterlayer, add_polygonlayer and select_layer2import.
1363            Removed the mapfilepath and filepath initialisation, because its know
1364            include in the new functions.
1365            Now nothing will be imported if cancel is pressed in the
1366            layer choice dialog.
1367    
1368    2004-07-14  Jan Sch�ngel <[email protected]>
1369    
1370            * Extensions/umn_mapserver/mapfile.py: Added ClassGroupDefault to
1371            import.
1372            (MF_Symbolset): Removed the extra variable for numsymbols.
1373            (MF_Class.__init__): Added a comment to the exception clause.
1374            Removed the extent init, because it was not needed anymore.
1375            (MF_Layer.add_thubanclass): Added the code to set the class name to
1376            the expression value from thuban if no label is defined.
1377            Added the code to export Range expressions from thuban to the mapfile.
1378            (MF_Map.set_extent): Removed the exception and replace it by some if
1379            code. If the size of a map is not defined the size will be set to 1,1.
1380            This is necessary because if the extent is set, mapscript checks if
1381            the size is greater than zero.
1382            (MF_Web): Added the get and set function for the template.
1383    
1384            * Extensions/umn_mapserver/mf_export.py: Added the function to check
1385            if a mapobject exists and used it to set the status of the menu items.
1386            If no mapfile exists the settings could not be edditied.
1387            Define after which menuitem the exportitem will include.
1388            
1389            * Extensions/umn_mapserver/mf_handle.py: Removed the import
1390            Thuban.UI.mainwindow clause, because it is not needed.
1391            Added the command Refresh() to all "OnChangeColor()" functions,
1392            because the color preview window was not updated on a color change.
1393            Added the function to check if a mapobject exists and used it to set the
1394            status of the menu items. If no mapobject exists the settings could not
1395            be edditied.
1396            (Map_Dialog): Moved the imagetype selector from the
1397            Outputformat_Dialog to Map_Dialog and removed Outputformat_Dialog.
1398            (Web_Dialog): Removed the name label and added the template textbox.
1399    
1400            * Extensions/umn_mapserver/mf_import.py (import_mapfile): Replace
1401            the exception handling on loading the layers by an if statement. It
1402            is not necessary to us the exception there.
1403            The Filepath creation now use os.path.join to build the path.
1404    
1405            * Extensions/umn_mapserver/test/test_mapserver.py: Moved the testMap
1406            definition from global to the setUp function. Now the testMap will
1407            initialize new on each test.
1408    
1409            * Extensions/umn_mapserver/sample/iceland.map: Include three new
1410            classes in the Line Layer, to test logical Expressions.
1411            Set the status of the class "Point9" in the Point Layer to off
1412            
1413    2004-07-13  Bernhard Herzog  <[email protected]>
1414    
1415            * Thuban/UI/baserenderer.py
1416            (BaseRenderer.render_map_incrementally): Fix a logic bug in the
1417            optimization that tries not to draw layers under a raster layer.
1418            The bug was harmless.  All it effectively did was to produce The a
1419            strange messages about not being able to draw Layer instances for
1420            all vector layers below a raster layer which would be invisible
1421            anyway because the raster layer currently always covers the entire
1422            window
1423    
1424    2004-07-08  Jan Sch�ngel <[email protected]>
1425    
1426            * Extensions/umn_mapserver/mapfile.py: Added code to generade and get
1427            a list of supported outputformats. This formats are not alle supported
1428            because there is no possibility to get the outputformat without the
1429            name known. Make some formal changes to the code.
1430            (MF_Map.set_name()): Fixed a bug if the name is None.
1431    
1432            * Extensions/umn_mapserver/mf_handle.py: Removed the image_type import
1433            statement, because its not needed anymore. The Outputformat is now
1434            given as string from the object. Make some formal changes to the code.
1435    
1436            * Extensions/umn_mapserver/test/test_mapserver.py: Added new test for
1437            most of the new setting which were added during the last changes.
1438            Removed the MF_Size Test.
1439            
1440            * Extensions/umn_mapserver/test/test.map: Added a new class to the
1441            cultural Layer to test expressions and the the status of that layer
1442            from on to default.
1443            Changed the data path the the correct Thuban Data
1444            Added the Outputformat Object and Symbol Object
1445            
1446    2004-07-07  Jan Sch�ngel <[email protected]>
1447    
1448            * Extensions/umn_mapserver/mapfile.py: Added some new
1449            settings to edit (outputformat, label, imagetype)
1450    
1451            * Extensions/umn_mapserver/mf_handle.py: Added some setting to
1452            the Label Dialog and add the OutputDialog.
1453            Make some changes to the code order.
1454    
1455    2004-07-06  Jan Sch�ngel <[email protected]>
1456    
1457            * Extensions/umn_mapserver/mapfile.py: Added the symbolObj, pointObj
1458            and line Obj and add the scalebar_status_type, scalebar_style_type and
1459            scalebar_position_type.
1460            Added the symbol- and symbolsetObject (MF_Symbol,MF_Symbolset). The
1461            are only used to create a Symbol like the circle in Thuban.
1462            Added the scalebarObject (MF_Scalebar)
1463            (MF_Class): Added set_status and get_status.
1464            (MF_Layer.add_thubanclass): Added code to set the class status
1465            (MF_Map): Added code to handle the symbols and scalebar
1466            (MF_Label): Added the set_partials and get_partials functions
1467            
1468            * Extensions/umn_mapserver/mf_export.py: Added MF_Symbol to import
1469            from mapfile. Added a function to create a circle object like the one
1470            from thuban if no one exists.
1471            
1472            * Extensions/umn_mapserver/mf_handle.py: All colors are now set when
1473            press ok in the assosiated dialog and not at the end of the
1474            colordialog.
1475            Added the Dialog for the Scalebar.
1476            (Label_Dialog): Added the offset option
1477    
1478            * Extensions/umn_mapserver/mf_import.py: Added code to import the
1479            status of the Classes.
1480            Fixed a bug with the projection. Now the to_meter parameter will be
1481            added to the Projection only if it doesn't exists.
1482    
1483    2004-07-01  Jan Sch�ngel <[email protected]>
1484    
1485            Added the functionality to handle the content thuban is not
1486            able to handle directly.
1487    
1488            * Extensions/umn_mapserver/mf_handle.py: New. This module extents
1489            Thuban with the possibility to edit the mapfile content.        
1490            
1491            * Extensions/umn_mapserver/mf_import.py: Added the possibility
1492            to import mapfiles without any layer selected. So it is possible
1493            to edit the other settings in a mapfile.
1494            (import_mapfile): Added code to use the editing functions.
1495            Added the possibility to import the projection to a layer if one
1496            is defined.
1497            Status settings (On,Off) will now set in thuban (visible, invisible).
1498            fixed a bug with with classnames. If no classname is set in mapfile
1499            the value in Thuban will set to the expression.
1500            
1501            * Extensions/umn_mapserver/mf_export.py(export_mapfile): Added the
1502            possibility to save a new mapfile or use the old one which is
1503            imported or new created.
1504            Added code to use the editing functions.
1505            Remove some not needed import statements
1506    
1507            * Extensions/umn_mapserver/mapfile.py: Added new types which are
1508            need for the editing functions.
1509            Added needed set-functions for the editing functions.
1510            Added the possibility to export rasterimages.
1511            Added new classes (MF_Web, MF_Label, MF_Legend, MF_Symbol,
1512            MF_SymbolSet). MF_Symbol and MF_SymbolSet are not needed at the
1513            moment.
1514            (MF_Class.set_thubanstyle): Now point layers will set to a default
1515            symbol to show a circle in mapserver and not only a 1px dot.
1516            (MF_Style.__init__): Fixed a bug with the color. Color was not set
1517            correct before.
1518            (MF_Size): Removed, because it is not needed.
1519            
1520            * Extensions/umn_mapserver/README: Added the hints to use the
1521            export and editing functions, too.
1522    
1523            * Extensions/umn_mapserver/sample/iceland.map: Added the
1524            new parameter "UNITS METERS".
1525            Change the political layer to status OFF.
1526    
1527            * Extensions/umn_mapserver/sample/README: Added some
1528            more details to setup the sample in the MapServer.
1529            
1530    2004-06-26  Bernhard Reiter <[email protected]>
1531    
1532            * Extensions/svgexport/test/test_svgmapwriter.py:
1533            Removed class VFile and used standard StringIO instead.
1534    
1535    2004-06-23  Jan Sch�ngel  <[email protected]>
1536    
1537            Add the export function to the umn_mapserver extension.
1538    
1539            * Extension/umn_mapserver/mf_export.py: New. This module extents
1540            Thuban with the possibility to export the Thuban content.
1541    
1542            * Extensions/umn_mapserver/mapfile.py: Expand the classes to use
1543            with the export module. Especially added the possibility to
1544            add thuban objects directly to the map objects.
1545    
1546            * Extensions/umn_mapserver/mf_import.py: Removed the wxCHANGE_DIR,
1547            because of the hint from Bernhard Herzog.
1548            Corrected the handling of absolute pathnames.
1549            Changed the Text of the Menu-Item, now the beginning is upper case.
1550    
1551            * Extensions/umn_mapserver/README: Added the --with-tiff statement.
1552    
1553    2004-06-16  Jan Sch�ngel  <[email protected]>
1554    
1555            Add a sample and make some changes.
1556    
1557            * Extension/umn_mapserver/mf_import.py: Changed the wxPython.wx
1558            import from * to explicit used statements. Changed the
1559            Thuban.UI.mainwindow import phrase, too.
1560            (import_mapfile):Corrected a clerical mistake.
1561            Added wxCHANGE_DIR in OpenFile Dialog.
1562            Added a MultipleChoiceDialog, to select the layers to load from
1563            mapfile into thuban. Thereby the projection is only set if one layer
1564            is selected.
1565            Added the possibility to handle relative pathnames which uses
1566            up-level references.
1567            Removed some doubled code.
1568            Corrected an error with integer values used as label in thuban
1569            ClassGroup.
1570            
1571            * Extensions/umn_mapserver/sample: New.
1572    
1573            * Extensions/umn_mapserver/sample/README: New. Describes the
1574            usage of the sample files.
1575    
1576            * Extensions/umn_mapserver/sample/iceland.map: New. This is
1577            a suitable .map-file for the iceland data.
1578    
1579            * Extensions/umn_mapserver/sample/index.html: New. The template
1580            for the mapfile.  
1581    
1582            * Extensions/umn_mapserver/sample/iceland.html: New. Initialisation
1583            file for the Iceland Application on web.
1584    
1585            * Extensions/umn_mapserver/README: Corrected a inaccuracy and added
1586            some details.
1587    
1588            * Extensions/umn_mapserver/test/test_mapserver
1589            (mapserver_import_Test_generalClasses.test_MF_Color):
1590            Corrected the thubancolor test.
1591    
1592    2004-06-15  Jan Sch�ngel  <[email protected]>
1593    
1594            * Extensions/umn_mapserver/README: New. Install instruction.
1595    
1596    2004-06-14  Bernhard Reiter <[email protected]>
1597    
1598            * libraries/thuban/cpl_mfile.h: Added copyright header.
1599    
1600            * libraries/thuban/ cpl_mfile.cpp, cpl_mfile.h: Added non-protecting
1601            Free Software License so that it is most useful with gdalwarp
1602            and bmpdataset.
1603    
1604    2004-06-14  Bernhard Herzog  <[email protected]>
1605    
1606            * Thuban/UI/multiplechoicedialog.py (__version__): Add missing
1607            import of wxPython.wx itself (as opposed to the contents of
1608            wxPython.wx).  For some reason wxPython.wx is available as
1609            wxPython.wx.wx in at least some 2.4 releases.  Fixes RT#2482
1610            wrt. wxPython 2.4.
1611    
1612    2004-06-10  Jan Sch�ngel  <[email protected]>
1613    
1614            Initial version of new extension "umn_mapserver".  This extension aims
1615            to manage configuration for the UMN MapServer application.  This
1616            inital version just imports the .map-files and displays all, Thuban is
1617            capable of.
1618    
1619            * Extensions/umn_mapserver, Extensions/umn_mapserver/test: New.
1620    
1621            * Extensions/umn_mapserver/test/README: New. Describes how to run the
1622            tests.
1623    
1624            * Extensions/umn_mapserver/test/test.map: New. This is a test
1625            .map-file for automated tests of the umn_mapserver extension of
1626            Thuban.
1627    
1628            * Extensions/umn_mapserver/test/test_mapserver.py: New. Tests for
1629            UMN Mapserver classes.
1630    
1631            * Extensions/umn_mapserver/__init__.py: New. Init to make this
1632            directory a package.
1633    
1634            * Extensions/umn_mapserver/mapfile.py: New. Classes to represent
1635            '.map'-file objects.
1636    
1637            * Extensions/umn_mapserver/mf_import.py: New. This module extends
1638            Thuban with the possibility to handle UMN MapServer mapfiles.
1639    
1640    2004-06-03  Bernhard Herzog  <[email protected]>
1641    
1642            * Thuban/Model/layer.py (Layer.TreeInfo): Convert the bounding box
1643            to a tuple before using it as arguments to the % operator.  This
1644            fixes the formatting issue filed in RT#2239 on 2004-01-13 and
1645            reported today on thuban-list by Jan Sch�ngel
1646    
1647            * test/test_layer.py (TestLayerModification.setUp): Save the
1648            filename as an instance variable so we can refer to it in tests
1649            (TestLayerModification.test_tree_info): Uncomment this method
1650            again and make it work.  This tests for the formatting issue
1651            filed in RT#2239 on 2004-01-13
1652    
1653    2004-05-28  Bernhard Herzog  <[email protected]>
1654    
1655            * Thuban/UI/baserenderer.py: Fix some typos.
1656    
1657    2004-05-18  Jan-Oliver Wagner <[email protected]>
1658    
1659            * Extensions/gns2shp/gns2shp.py (gns2shp): Fixed a bug
1660            by increasing a field size.
1661    
1662    2004-05-17  Bernhard Herzog  <[email protected]>
1663    
1664            Update to newest shapelib and get rid of Thuban specific
1665            extensions, i.e. use the new DBFUpdateHeader instead of our
1666            DBFCommit kludge
1667    
1668            * libraries/shapelib/shpopen.c: Update to version from current
1669            shapelib CVS.
1670    
1671            * libraries/shapelib/shapefil.h: Update to version from current
1672            shapelib CVS.
1673    
1674            * libraries/shapelib/dbfopen.c: Update to version from current
1675            shapelib CVS.
1676            (DBFCommit): Effectively removed since shapelib itself has
1677            DBFUpdateHeader now which is better for what DBFCommit wanted to
1678            achieve.  
1679            We're now using an unmodified version of dbfopen.
1680    
1681            * setup.py (extensions): Add the HAVE_UPDATE_HEADER macro with
1682            value '1' to the Lib.dbflibc extension.  This simply reflects the
1683            shapelib and pyshapelib updates
1684    
1685    2004-05-16  Jan-Oliver Wagner <[email protected]>
1686    
1687            Finished introduction of Menu.FindOrInsertMenu.
1688    
1689            * Extensions/drawshape/drawshape.py: Add the command
1690            to the experimental menu additionally to the toolbar.
1691    
1692            * Extensions/svgexport/svgsaver.py: Use FindOrInsertMenu() instead of
1693            finding menu on its own.
1694    
1695            * Doc/manual/thuban-manual.xml: updated sample file
1696            to use FindOrInsertMenu().
1697    
1698            * Examples/simple_extensions/hello_world.py: Use FindOrInsertMenu()
1699            instead of finding menu on its own.
1700    
1701    2004-05-11  Jan-Oliver Wagner <[email protected]>
1702    
1703            * test/test_menu.py (MenuTest.test): Added testing
1704            of method Menu.FindOrInsertMenu.
1705    
1706    2004-05-10  Jan-Oliver Wagner <[email protected]>
1707    
1708            Introduce and use Menu.FindOrInsertMenu.
1709    
1710            * Thuban/UI/menu.py (Menu.FindOrInsertMenu): New. Find a
1711              given menu or, if not found, insert it.
1712    
1713            * Extensions/bboxdump/bboxdump.py, /Extensions/gns2shp/gns2shp.py,
1714            /Extensions/importAPR/importAPR.py, Extensions/profiling/profiling.py,
1715            /Extensions/wms/wms.py: Use FindOrInsertMenu() instead of finding
1716            menu on its own.
1717    
1718    2004-05-06  Jan-Oliver Wagner <[email protected]>
1719    
1720            Introduce a abstract ColorDialog class and remove
1721            and outdated file.
1722    
1723            * Thuban/UI/proj4dialog.py: Removed. It is has been
1724            replaced by projdialog for quite a while and is not used
1725            anymore.
1726    
1727            * Thuban/UI/colordialog.py: New. Abstraction for color selection
1728            dialog(s).
1729    
1730            * Thuban/UI/classifier.py (SelectPropertiesDialog.__GetColor):
1731            Now calls the abstract ColorDialog instead of wxColourDialog.
1732            This also removed the dependency to Color class conversion
1733            from this function.
1734    
1735    2004-05-04  Frank Koormann  <[email protected]>
1736    
1737            * Extensions/bboxdump/__init__.py: Fixed string left over from
1738            copying.
1739    
1740            * Extensions/bboxdump/bboxdump.py (bboxdump):
1741            Use layer.ShapeStore().AllShapes() to loop over shapes instead of
1742            xrange(layer.NumShapes()). Compile the bboxmessage from a list
1743            of formatted outputs (string.join) instead of appending to the
1744            message. Two progress bar dialogs to report progress on the sometimes
1745            lenghty processing.
1746    
1747    2004-04-22  Frank Koormann  <[email protected]>
1748    
1749            New Extension to dump bounding boxes of all shapes of the selected
1750            layer. An optional column can be specified to group the objects,
1751            in this case the bounding box is a union of the separate boxes.
1752            Dump can be displayed in a ScrolledMessageDialog or written to file.
1753            The Extension is simply a combination of available and well tested
1754            Thuban functionality.
1755    
1756            * Extensions/bboxdump/__init__.py: New: Init to make this
1757            directory a package.
1758    
1759            * Extensions/bboxdump/bboxdump.py: New: Dump bounding boxes of
1760            all shapes of the selected layer.
1761    
1762    2004-04-22  Jan-Oliver Wagner <[email protected]>
1763    
1764            * Thuban/UI/classgen.py (GenUniquePanel.__init__): Fixed two
1765            strings to be i18n now.
1766    
1767    2004-04-18  Jan-Oliver Wagner <[email protected]>
1768    
1769            Changing popup menu of legend from direct building
1770            to using the Menu construction as used for the mainwindow.
1771    
1772            * Thuban/UI/mainwindow.py: New method commands: layer_to_top,
1773            layer_to_bottom, layer_visibility
1774            (MainWindow.LayerToTop): New. Put current layer to the top.
1775            (MainWindow.LayerToBottom): New. Put current layer to bottom.
1776            (MainWindow.HideLayer, MainWindow.ShowLayer, _has_visible_map):
1777            Replace 1,0 by True, False.
1778            (MainWindow.ToggleLayerVisibility): New. Toggle visibility of
1779            current layer.
1780            (MainWindow.LayerShowTable): Removed raising of dialog.
1781            (_has_selected_layer_visible): New. Support function.
1782    
1783            * Thuban/UI/legend.py: ID_POP_xxx: removed.
1784            (LegendPanel.__init__): Removed EVT_MENU bindings.
1785            (LegendTree._OnRightClick): Replace direct creation of
1786            menu via wx Classes by applying the menu definition
1787            as of Menu class of menu.py.
1788            
1789    2004-04-16  Jan-Oliver Wagner <[email protected]>
1790    
1791            * Thuban/UI/exceptiondialog.py (ExceptionDialog.dialog_layout): Improved
1792        button string to stronger clearify that Thuban will be closed when hitting
1793            the button.
1794    
1795            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Added docstring.
1796            Now for layers without a ShapeStore a corresponding message is given
1797            to the user, that this layer has no table to show.
1798    
1799    2004-04-15  Martin Schulze  <[email protected]>
1800    
1801            * Extensions/wms/layer.py (WMSLayer.setWMSFormat): Need to
1802            recalculate the format for the internal render engine as well.
1803    
1804            * Extensions/wms/properties.py (wmsProperties): First start for a
1805            properties dialog.  It's functional for a first selection of
1806            layers, but still has some weired wxWidgets/GTK problems but
1807            beautification can be done later.
1808    
1809            * Extensions/wms/layer.py: Added more documentation
1810            (WMSLayer.getFormats): New: Return list of supported image formats
1811            by the WMS server
1812            (WMSLayer.getLayers): New: Return the list of layer names
1813            supported by the WMS server
1814            (WMSLayer.getLayerTitle): New: Return the title of the named layer
1815            (WMSLayer.getWMSFormat): New: Return the image format that is used
1816            for WMS GetMap requests
1817            (WMSLayer.setWMSFormat): New: Set the image format that is used
1818            for WMS GetMap requests
1819            (WMSLayer.__init__): Move away from using only one layer to using
1820            a list of layers (unsorted at the moment, though).
1821            (WMSLayer.getVisibleLayers): New: Return the list of names for all
1822            visible layers
1823            (WMSLayer.setVisibleLayers): New: Set the list of names for all
1824            visible layers
1825    
1826            * Extensions/wms/wms.py: Moved the WMS layer into layer.py in
1827            order to establish a clean structure.
1828    
1829            * Extensions/wms/layer.py: Moved the WMS layer into a file on its
1830            own in order to establish a clean structure.
1831    
1832    2004-04-13  Martin Schulze  <[email protected]>
1833    
1834            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Added
1835            support for oldstyle (WMS 1.0 apparently) image format
1836            specification.
1837    
1838            * Extensions/wms/wms.py (WMSLayer.calcFormat): Reduce the list of
1839            supported graphic formats back to JPEG and BMP, PNG and others are
1840            too *cough* experimental...  Sorry, I meant to filter this out
1841            before I committed this part.  This should make the WMS extension
1842            run from CVS again.
1843            (wms_dialog): Reset an empty URL to None so that the subsequent
1844            program can depend on this, since the dialog will indeed return an
1845            empty URL, causing another declaration of love by Python.
1846    
1847            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerBBox):
1848            Whenever a native BoundingBox request cannot be fulfilled, check
1849            whether the requested SRS is EPSG:3426, in which case return the
1850            LatLonBoundingBox values.
1851    
1852            * Extensions/wms/test/test_parser.py
1853            (TestWMSCapabilitiesParser.test_LayerSRS): Added a test for
1854            ignoring AUTO:* SRS.
1855            (TestWMSCapabilitiesParser.test_LatLonBoundingBoxes_as_bboxes):
1856            Added another test method to test whether the LatLonBoundingBox
1857            values will be returned if BoundingBox values are requested with
1858            SRS set to EPSG:3426.
1859    
1860            * Extensions/wms/parser.py (WMSCapabilitiesParser.peekLayers):
1861            Added rudimentary support for non-EPSG SRS, i.e. ignore them for
1862            the moment by placing them into a variable which is currently
1863            unused.  Also test whether the EPSG SRS is numerical as it should
1864            be and add an error message if it is not.
1865    
1866            * Extensions/wms/test/sample.xml: Added AUTO:* SRS since they
1867            appear in the real world as well.  Since we cannot handle them yet
1868            (OGCLib can't either), we will ignore them for the moment.
1869    
1870            * Extensions/wms/parser.py: Use a variable for denoting the sample
1871            filename
1872            (WMSCapabilitiesParser.peekLayers): Added support for error
1873            messages during grok().  They will be aggregated in an array and
1874            may be displayed later.  We may have to add a classification
1875            "Warning" and "Error" to this.  That requires more experience,
1876            though, since not every error may be lethal.
1877    
1878            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Raise the
1879            ShowTable() dialog/frame when the user attempts to display it
1880            while it has been opened before already and not closed again.
1881    
1882    2004-04-11  Martin Schulze  <[email protected]>
1883    
1884            * Extensions/wms/infodialog.py: Adjusted the class documentation
1885    
1886            * Extensions/wms/wms.py (WMSLayer.__init__, WMSLayer.GetMapImg):
1887            Switch to using Thuban{Begin,End}BusyCursor instead of the pure
1888            wxWidgets variants.
1889            (WMSLayer.__init__): The epsg_id variable is named top_srs now.
1890    
1891            * Extensions/wms/infodialog.py: Added an information dialog that
1892            will display various information about the WMS current resource,
1893            so that additional information such as the title, the abstract,
1894            fees and access constraints can be displayed for the user if they
1895            are documented in the WMS XML.
1896    
1897    2004-04-10  Martin Schulze  <[email protected]>
1898    
1899            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Adjusted
1900            string handling.  It's "foo".lower() and not lower(foo) without
1901            lower imported from strings or something.
1902    
1903            * Extensions/wms/wms.py (WMSLayer): Incorporated WMSCapabilities
1904            from capabilities.py and parser.py.  Implement priority list for
1905            supported graphics formats, take care of wbmp != bmp.  PNG, TIFF
1906            and GIF are supported here, but not yet by main Thuban.  Hence,
1907            support for them may be removed later.  Special contribution to
1908            usability: get wxWidgets to change the cursor when we're waiting
1909            for data from the network so the user won't start to worry.  This
1910            causes a redrawing error/warning, though.
1911    
1912            * Extensions/wms/parser.py (WMSCapabilitiesParser.grok): Unlink
1913            the DOM object.
1914    
1915    2004-04-01  Martin Schulze  <[email protected]>
1916    
1917            * Extensions/wms/capabilities.py: Adjusted documentation
1918            (WMSCapabilities.__init__): Improved documentation, fixed syntax
1919            (WMSCapabilities.saveCapabilities): Only catch IOError when
1920            handling files
1921            (WMSCapabilities.loadCapabilities): Only catch IOError when
1922            handling files
1923            __main__: corrected variable naming
1924            (WMSCapabilities.fetchCapabilities,loadCapabilities): Make this
1925            class a specialisation of WMSCapabilitiesParser as well.  Also
1926            execute grok() after loading or fetching capabilities, if that
1927            went well, so that subsequent calls can already access the data.
1928            (WMSCapabilities.getVersion): Export the used version of the
1929            GetCapabilities request, so we can use it for subsequent calls,
1930            i.e. for GetMap requests.
1931            (WMSCapabilities.fetchCapabilities): Added proper error handling
1932            when the GetCapabilities request failed, so that the surrounding
1933            program can act accordingly.
1934    
1935    2004-03-30  Martin Schulze  <[email protected]>
1936    
1937            * Extensions/wms/parser.py (WMSCapabilitiesParser.getLayerSRS):
1938            Adjusted the getLayerSRS method to return the list of SRSes
1939            extracted from <SRS> elements instead of <BoundingBox> elements.
1940            Added a bit of documentation as well.
1941            (WMSCapabilitiesParser.checkLayerSRS): Removed integrity test
1942            since it was only implemented due to a misunderstanding.
1943    
1944            * Extensions/wms/test/test_parser.py
1945            (TestWMSCapabilitiesParser.test_LayerSRS): Adjust the tests to
1946            reflect the corrected interpretation of the standard: i.e. a layer
1947            does not have to define a BoundingBox for all SRSes it supports.
1948            Hence the <SRS></SRS> specification is authoritative, not the list
1949            of BoundingBoxes.
1950            (TestWMSCapabilitiesParser.test_BoundingBoxes): Added a new test
1951            to ensure None is returned for a non-existing SRS.
1952            (TestWMSCapabilitiesParser.test_grok): Removed test_grok method
1953            since it is not applicable anymore.  Listing more SRSes in <SRS>
1954            elements is valid according to the specs.
1955    
1956    2004-03-26  Bernhard Reiter <[email protected]>
1957    
1958            * README: Nicer formatting of text. Improved descriptions.
1959            Reflected wxWidgets name change.
1960            
1961            * Thuban/UI/about.py: Extended copyright to 2004 and added
1962            information about the thuban-devel mailinglist.
1963    
1964    2004-03-24  Martin Schulze  <[email protected]>
1965    
1966            * Extensions/wms/capabilities.py: Renamed the class to contain
1967            'WMS', also added a linebreak where required
1968    
1969            * Extensions/wms/parser.py: Finally added the XML parser for the
1970            GetCapabilities response.
1971    
1972            * Extensions/wms/test/sample.xml: Adjusted the sample file so that
1973            <SRS> elements match the <BoundingBox> elements, except for the
1974            layer 'beschriftung'.
1975    
1976            * Extensions/wms/test/test_parser.py: Encode non-ascii strings
1977            since Python uses unicode strings internally, otherwise
1978            comparisons will fail.  Removed tests for getLayerBBoxSRS() since
1979            the SRS will be calculated anyway and this method is obsoleted by
1980            getLayerSRS().  Denote SRS as strings and not as cardinal numbers.
1981            Move loading the sample file into the setUp method.  Added a test
1982            for finding the integrity problem in the sample response.
1983            Improved formatting.
1984    
1985            * Extensions/wms/domutils.py: Added convenience routines for
1986            handling of Document Object Model (DOM) nodes.
1987    
1988            * Extensions/wms/test/test_domutils.py: Added a test for the
1989            domutils module
1990    
1991    2004-03-19  Martin Schulze  <[email protected]>
1992    
1993            * Extensions/wms/test/test_parser.py (TestWMSCapabilitiesParser):
1994            Moved path detection and adding into a module of its own,
1995            adjustpath, which exports thubandir as main Thuban directory.
1996    
1997            * Extensions/wms/test/test_ogclib.py (TestWMSLib): Moved path
1998            detection and adding into a module of its own, adjustpath, which
1999            exports thubandir as main Thuban directory.  Reorganised the
2000            module in order to support the SkipTest feature for Thuban test
2001            cases.
2002    
2003            * Extensions/wms/test/adjustpath.py: Moved path detection and
2004            adding into a module of its own.
2005    
2006    2004-03-18  Martin Schulze  <[email protected]>
2007    
2008            * Extensions/wms/test/test_parser.py: Added another test for
2009            checking whether the WMS XML parser (to be implemented) returns
2010            the information we expect.  This requires a sample WMS WML file
2011            (sample.xml) which has been extracted from the frida server and
2012            "improved" manually.
2013    
2014            * Extensions/wms/test/test_ogclib.py: Added legacy code to add the
2015            main Thuban directory to the path in order to be able to import
2016            random modules.  Adjusted the PyOGCLib detection to reuse the
2017            information gathered.  Also added a note about the PYTHONPATH
2018            environment variable.
2019    
2020            * Extensions/wms/test/test_ogclib.py: The format specification is
2021            a mime-type, not a graphic format, hence image/jpeg wou ld be the
2022            proper format and not JPEG.  We'll also have to take care of the
2023            encoding of / as %2F.
2024    
2025    2004-03-16  Martin Schulze  <[email protected]>
2026    
2027            * Extensions/wms/test/test_ogclib.py: Added a (hopefully)
2028            comprehensive test for the getMapURL method, built compare URLs
2029            according to the documentation in OGC 01-068r3
2030    
2031            * Extensions/wms/capabilities.py (WMSCapabilities): Added the
2032            class WMSCapabilities to manage capabilites, will incorporate
2033            parsing the capabilities response and provide details for other
2034            classes.
2035    
2036    2004-03-12  Bernhard Herzog  <[email protected]>
2037    
2038            Support views in addition to normal tables in the postgis
2039            shapestore
2040    
2041            * Thuban/Model/postgisdb.py
2042            (PostGISShapeStore._fetch_table_information): Add a fallback for
2043            the case where the table name is not in the geometry_columns
2044            table.  This is usually the case for views.  Also, set
2045            self.shapestore here.
2046            (PostGISShapeStore.ShapeType): No need to query the database all
2047            the time.  The shape type is now determined in
2048            _fetch_table_information
2049    
2050            * test/postgissupport.py (PostgreSQLServer.new_postgis_db)
2051            (PostgreSQLServer.get_static_data_db, PostGISDatabase.__init__):
2052            New parameter to specify views.
2053            (PostGISDatabase.has_data): Also compare the views.  New views
2054            parameter
2055            (PostGISDatabase.initdb): Create the views.
2056            (PostgreSQLServer.get_default_static_data_db): Add the v_landmarks
2057            view
2058    
2059            * test/test_postgis_db.py
2060            (TestPostGISShapestorePointFromViews): New.  Test a
2061            PostGISShapeStore with a view
2062            (TestPostGISShapestorePointOIDAsGIDColumn.setUp): Pass the name of
2063            the geometry_column explicitly to test whether that works
2064    
2065    2004-03-12  Bernhard Herzog  <[email protected]>
2066    
2067            Final step for explicit id/geometry columns: Loading and saving
2068    
2069            * Resources/XML/thuban-1.1.dtd: New.  Derived from thuban-1.0.dtd
2070            with the following changes:
2071            (dbshapesource): Two new attributes id_column and geometry_column
2072    
2073            * Thuban/Model/save.py (SessionSaver.write): Use the new dtd
2074            (SessionSaver.write_session): Use the new namespace
2075            (SessionSaver.write_data_containers): Write the new dbshapesource
2076            parameters
2077    
2078            * Thuban/Model/load.py (SessionLoader.__init__): New namespace for
2079            the new file format version
2080            (SessionLoader.start_dbshapesource): Handle the new db parameters
2081    
2082            * test/test_save.py: Update to the new dtd and namespace
2083            (SaveSessionTest.test_save_postgis): Update the NonConnectionStore
2084            mock object to provide a working IDColumn method.
2085    
2086            * test/test_load_1_0.py: New.  Copy of the test_load.py before
2087            today's changes but with the round-trip tests removed.
2088    
2089            * test/test_load_0_9.py: Update doc-string.
2090    
2091            * test/test_load.py: Update all .thuban files to the new dtd and
2092            namespace.
2093            (TestPostGISLayer.file_contents): Add the new dbshapesource
2094            paramters
2095    
2096    2004-03-11  Bernhard Herzog  <[email protected]>
2097    
2098            Next step for explicit id/geometry columns: User interaction
2099    
2100            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Rework how
2101            the dialog is constructed. Add combo boxes to select id and
2102            geometry column.  Rename some instance variables.
2103            (ChooseDBTableDialog.GetTable): Return id and geometry column
2104            names
2105            (ChooseDBTableDialog.OnTableSelect): New. Event handler for
2106            selections in the table list
2107    
2108            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Use id_column
2109            and geometry_column
2110    
2111            * Thuban/Model/session.py (Session.OpenDBShapeStore): Add the new
2112            parameters for id_column and geometry column of PostGISShapeStore
2113            here as well.
2114    
2115            * Thuban/Model/postgisdb.py (type_map): Add ROWID psycog type.
2116            (_raw_type_map): New. Map raw PostgreSQL type ints to thuban types
2117            (PostGISConnection.GeometryTables): Use a better query to
2118            determine which relations in the database might be usable for
2119            shapestores.  Now supports views as well but is more PostgreSQL
2120            specific
2121            (PostGISConnection.table_columns): New. Somewhat experimental
2122            method to let the db dialogs provide lists of columns to users so
2123            that they can select id and geometry columns.
2124            (PostGISTable.__init__): The default value of the id_column
2125            parameter is now None it still means "gid" effectively, though.
2126            (PostGISTable.IDColumn): New introspection method to return a
2127            column object for the id column
2128            (PostGISShapeStore.GeometryColumn): New introspection method to
2129            return a column object for the geometry column
2130    
2131            * test/test_postgis_db.py
2132            (TestPostGISConnection.test_gis_tables_non_empty):
2133            Removed. Subsumed by the new:
2134            (TestPostGISConnection.test_gis_tables_with_views_and_tables):
2135            New. Tes the GeometryTables and table_columns methods with actual
2136            tables and views.
2137            (PointTests.test_id_column, PointTests.test_geometry_column):
2138            New. tests for the new methods.
2139            (TestPostGISShapestorePoint.setUp)
2140            (TestPostGISShapestorePointSRID.setUp)
2141            (TestPostGISShapestorePointExplicitGIDColumn.setUp): Fill the
2142            instance variables needed by the new tests
2143    
2144    2004-03-11  Bernhard Herzog  <[email protected]>
2145    
2146            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): The row
2147            numbers given to ReadValue are ordinals.
2148    
2149    2004-03-11  Bernhard Herzog  <[email protected]>
2150    
2151            Elimiate the requirement for PostGIS tables to have a column
2152            called "gid".
2153    
2154            * Thuban/Model/postgisdb.py (PostGISTable.__init__): New parameter
2155            id_column to specify which column to use to identify rows.  Also
2156            new instance variables id_column and quoted_id_column
2157            (PostGISTable.RowIdToOrdinal, PostGISTable.RowOrdinalToId)
2158            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue)
2159            (PostGISTable.SimpleQuery): Use the id column name provided to the
2160            constructor instead of "gid"
2161            (PostGISShapeStore.__init__): New parameter id_column analogously
2162            to PostGISTable.__init__.  This parameter is simply passed through
2163            to the base class constructor
2164            (PostGISShapeStore._create_col_from_description): Fix typo in
2165            doc-string
2166            (PostGISShapeStore.Shape, PostGISShapeStore.AllShapes)
2167            (PostGISShapeStore.ShapesInRegion): Use the id column name
2168            provided to the constructor instead of "gid"
2169    
2170            * test/postgissupport.py
2171            (PostgreSQLServer.get_default_static_data_db): New static table
2172            landmarks_point_id with an id column != "gid.  Update the comments
2173            a bit.
2174            (skip_if_addgeometrycolumn_does_not_use_quote_ident): Fix typo in
2175            doc-
2176            (upload_shapefile): New parameter gid_column to use a name other
2177            than "gid" for the column to store the shape ids
2178    
2179            * test/test_postgis_db.py (TableTests): New.  Mixin-class
2180            containing all tests previously in TestPostGISTable.  The actual
2181            tests are the same but the code is a bit more configurable to
2182            allow for different id columns etc.
2183            (TestPostGISTable): Derive from TableTests now for the actual
2184            tests.
2185            (TestPostGISTableExplicitGIDColumn): New. Like TestPostGISTable
2186            except that it the landmarks_point_id table to test the id_column
2187            parameter
2188            (PointTests): Extend the doc-string
2189            (TestPostGISShapestorePointExplicitGIDColumn)
2190            (TestPostGISShapestorePointOIDAsGIDColumn): New classes derived
2191            from PointTests to test the explicit id_column parameter.  One
2192            tests with the name of the column holding the shape ids, the other
2193            uses PostgreSQL's OID column.  For the latter a number of methods
2194            have to be overwritten to make them independent of the actual id
2195            values.
2196    
2197    2004-03-08  Silke Reimer  <[email protected]>
2198    
2199            Update debian directory:
2200    
2201            * debian/changelog: Added new version.
2202            * deiban/rules: Updated management of patches (with cbds)
2203            * debian/control: Added cbds to dependencies
2204            * debian/patches/*: New. Adds better support for patches of thuban in
2205                            debian
2206            * debian/menu: Syntax of menu changed slightly
2207            * debian/setup.py.patch: removed because it has been moved to
2208                            debian/patechs/setup.py.patch
2209            
2210    
2211    2004-02-26  Bernhard Herzog  <[email protected]>
2212    
2213            Create the Doc/technotes directory for text files with information
2214            for developers
2215    
2216            * Doc/technotes/README: New. README for the technotes
2217    
2218            * Doc/technotes/coding_guidelines.txt: New. Coding guidelines for
2219            Thuban
2220    
2221            * Doc/technotes/release_process.txt: New. Used to be
2222            HOWTO-Release.  Now slightly adapted to technote formatting style.
2223    
2224            * HOWTO-Release: Removed.  It's contents are now in
2225            Doc/technotes/release_process.txt
2226    
2227    2004-02-25  Bernhard Herzog  <[email protected]>
2228    
2229            * libraries/thuban/wxproj.cpp (get_wx_version): New.  Return the
2230            version of wxWindows the module was compiled with so we can check
2231            that against the wxPython version.
2232    
2233            * Thuban/version.py (thuban_branch, thuban_release): New variables
2234            controlling which and how Thuban versions are shown.  See the
2235            comments for details.
2236            (verify_versions): Also check that the wx version that wxproj is
2237            compiled against matches that of the wxPython we use at runtime
2238    
2239    2004-02-20  Bernhard Herzog  <[email protected]>
2240    
2241            * Extensions/wms/wms.py (epsg_code_to_projection): Use
2242            get_system_proj_file to read the epsg projections.  The old way
2243            depended on the current directory being the top Thuban directory.
2244    
2245    2004-02-20  Bernhard Herzog  <[email protected]>
2246    
2247            * Extensions/svgexport/test/test_svgmapwriter.py
2248            (TestVirtualDC.test_clippath): Remove a debug print
2249    
2250    2004-02-20  Bernhard Herzog  <[email protected]>
2251    
2252            * Extensions/svgexport/__init__.py: New.  Turn
2253            Extensions/svgexport into a package.
2254    
2255            * Extensions/svgexport/svgmapwriter.py: Reorder the imports and
2256            doc-string a bit.  The doc-string must come first, otherwise it's
2257            not a doc-string.  The __future__ import must be the first thing
2258            after the doc-string.  Use only double quotes in doc-strings.
2259            Single quotes trip up emacs syntax highlighting if the text
2260            contains apostrophes.
2261    
2262    2004-02-20  Bernhard Herzog  <[email protected]>
2263    
2264            * Extensions/svgexport/test/__init__.py,
2265            Extensions/svgexport/test/test_svgmapwriter.py: New. Initial test
2266            suite for svgexport
2267    
2268            * test/runtests.py (find_test_modules): New. Function with the
2269            module finding code from main.
2270            (main): Use find_test_modules to figure out the default test
2271            modules and take modules from Extensions.svgexport.test too.
2272    
2273    2004-02-19  Bernhard Herzog  <[email protected]>
2274    
2275            * Thuban/UI/application.py (ThubanApplication.OnInit): Make sure
2276            the mainwindow has a reference to the map of the initial session.
2277            This fixes a bug introduced with the fix for RT#2245
2278    
2279    2004-02-19  Bernhard Herzog  <[email protected]>
2280    
2281            * Extensions/svgexport/svgsaver.py,
2282            Extensions/svgexport/svgmapwriter.py,
2283            Extensions/svgexport/maplegend.py: Added again.  This time in the
2284            correct place.
2285    
2286    2004-02-17  Bernhard Herzog  <[email protected]>
2287    
2288            Fix for RT#2245
2289    
2290            * Thuban/UI/application.py (ThubanApplication.OnInit): Initialize
2291            instance variables before trying to create any windows.  Creating
2292            windows can start an event loop if e.g. message boxes are popped
2293            up for some reason, and event handlers, especially EVT_UPDATE_UI
2294            may want to access things from the application.
2295            (ThubanApplication.maps_changed): The mainwindow may not have been
2296            created yet, so check whether it has been created before calling
2297            its methods
2298    
2299            * Thuban/UI/view.py (MapCanvas.OnIdle): Only try to redraw if we
2300            have a map
2301    
2302    2004-02-17  Bernhard Herzog  <[email protected]>
2303    
2304            * test/test_svgmapwriter.py, Extensions/svgsaver.py,
2305            Extensions/svgmapwriter.py, Extensions/maplegend.py,
2306            extensions/svgexport/svgsaver.py,
2307            extensions/svgexport/svgmapwriter.py,
2308            extensions/svgexport/maplegend.py: Removed.  These files were in
2309            the wrong places or didn't work at all.
2310    
2311    2004-02-16  Bernhard Herzog  <[email protected]>
2312    
2313            * Thuban/UI/view.py (MapCanvas.Export): Remove accidentally added
2314            line
2315    
2316    2004-02-16  Bernhard Herzog  <[email protected]>
2317    
2318            * Thuban/UI/view.py (MapCanvas.Export): Avoid UnboundLocalError.
2319    
2320    2004-02-15  Markus Rechtien  <[email protected]>
2321            
2322            * Extensions/svgexport/svgmapwriter.py: New. Adds the capability
2323            to write a session to a file in SVG format.
2324            * Extensions/svgexport/svgsaver.py: New. Uses svgmapwriter.py
2325            to write a SVG map of a session.
2326            * Extensions/svgexport/maplegend: New. Writes a basic maplegend
2327            in SVG format for the current session.
2328    
2329    2004-02-13  Bernhard Herzog  <[email protected]>
2330    
2331            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): When the layer
2332            can't be created, return immediately after displaying the error
2333            message.
2334    
2335    2004-02-11  Bernhard Herzog  <[email protected]>
2336    
2337            Handle postgis tables with more than one geometry column.
2338    
2339            * Thuban/Model/postgisdb.py
2340            (PostGISTable._fetch_table_information): Delegate the creation of
2341            column objects to a different method so that we can extend that in
2342            derived classes
2343            (PostGISTable._create_col_from_description): New. Column object
2344            creation part of _fetch_table_information
2345            (PostGISShapeStore._create_col_from_description): New. Extend
2346            inherited method to handle geometry columns
2347            (PostGISShapeStore.__init__): New parameter geometry_column to
2348            specify which geometry column to use.  Optional but mandatory for
2349            tables with more than one geometry column
2350            (PostGISShapeStore._fetch_table_information): Also use the name of
2351            the geometry column when looking for the srid
2352            (PostGISShapeStore.ShapeType): Also use the name of the geometry
2353            column when looking for the shape type
2354    
2355            * test/test_save.py (SaveSessionTest.test_save_postgis): Adapt
2356            NonConnectionStore to changes in the PostGISShapeStore
2357    
2358            * test/test_postgis_db.py
2359            (TestPostGISSpecialCases.test_shapestore_two_geom_cols): Test
2360            PostGISShapeStore with tables having two geometry columns.
2361    
2362    2004-02-10  Bernhard Herzog  <[email protected]>
2363    
2364            Fix some postgis problems.  What remains to be done is real
2365            handling of SRIDs as they affect how reprojection is done
2366    
2367            * Thuban/Model/postgisdb.py (quote_identifier): Fix typo in
2368            doc-string
2369            (PostGISShapeStore._fetch_table_information): New. Extend
2370            inherited method to retrieve srid
2371            (PostGISShapeStore.BoundingBox): Handle tables without data.
2372            extent yields NULL for those
2373            (PostGISShapeStore.ShapesInRegion): Use the srid of the table.
2374    
2375            * test/test_postgis_db.py
2376            (TestPostGISSpecialCases.test_shapestore_empty_table): New test
2377            for the special case of a table without any data
2378            (TestPostGISShapestorePointSRID): New class with tests for a table
2379            that uses srids
2380            (PolygonTests): Fix a doc-string typo
2381    
2382            * test/postgissupport.py (PostGISDatabase.__init__): New parameter
2383            reference_systems with a specification of spacial reference
2384            systems to create in the new db.
2385            (PostgreSQLServer.new_postgis_db)
2386            (PostgreSQLServer.get_static_data_db): New parameter
2387            reference_systems to be passed through ultimately to
2388            PostGISDatabase.  In new_postgis_db also check whether an existing
2389            db already has the right srids
2390            (PostgreSQLServer.get_default_static_data_db): Add srids and a
2391            table that uses srids
2392            (PostGISDatabase.initdb): Create the entries for the reference
2393            systems
2394            (PostGISDatabase.has_data): Add reference_systems parameter to
2395            check for those too
2396            (upload_shapefile): New parameter srid to create tables with a
2397            specific srid
2398    
2399    2004-02-06  Frank Koormann  <[email protected]>
2400    
2401            * po/pt_BR.po: Fixed charset
2402    
2403    2004-02-05  Frank Koormann  <[email protected]>
2404    
2405            * po/pt_BR.po: Fixed format string for error message, missing %s
2406            added (Thuban/UI/application.py:273)
2407    
2408    2004-02-03  Frank Koormann  <[email protected]>
2409            
2410            First version of Portuguese (Brazilian) translation
2411    
2412            * po/pt_BR.po: New, translation of pot (2004-01-15 16:07+0300) for
2413            Brazilian Portuguese by Eduardo Patto Kanegae.
2414    
2415            * Thuban/UI/about.py (About.__init.py__): Added Eduardo to the list of
2416            translators.
2417    
2418    
2419    2004-01-22  Frank Koormann  <[email protected]>
2420    
2421            * Doc/manual/thuban-manual.xml: Added section on installation of
2422            Thuban under Win32 systems. Fixed image path references in the postgis
2423            section. Some minor source formattings.
2424    
2425    2004-01-21  Frank Koormann  <[email protected]>
2426    
2427            Make Thuban remember path selections (at least for one application run).
2428    
2429            * Thuban/UI/application.py (Application.OnInit): Initialize path as a
2430            attribute of application object. Path is a dictionary of
2431            strings, currently with the items "data" and "projection".  
2432            (Application.SetPath): New, stores path for the specified item.
2433            (Application.Path): New, return path for the specified item.
2434    
2435            * Thuban/UI/mainwindow.py
2436            (MainWindow.OpenSession, MainWindow.SaveSessionAs,
2437            MainWindow.AddLayer, MainWindow.AddRasterLayer,
2438            MainWindow.TableOpen): Access "data" path information of the
2439            application.
2440            
2441            * Thuban/UI/projdialog.py (ProjFrame._OnImport, ProjFrame._OnExport):
2442            Access "projection" path information of the application.
2443    
2444    2004-01-05  Bernhard Herzog  <[email protected]>
2445    
2446            * po/ru.po: Updated translations from Alex Shevlakov
2447    
2448    2004-01-05  Bernhard Herzog  <[email protected]>
2449    
2450            * po/Makefile, po/README: Move the description of how to generate
2451            the translation statistics to the README.
2452    
2453    2003-12-23  Bernhard Herzog  <[email protected]>
2454    
2455            * NEWS: Update for 1.0.0
2456    
2457            * po/it.po: Another update from Maurizio Napolitano
2458    
2459    2003-12-23  Bernhard Herzog  <[email protected]>
2460    
2461            * po/it.po: Updated translation from Maurizio Napolitano
2462    
2463    2003-12-23  Bernhard Herzog  <[email protected]>
2464    
2465            * Thuban/UI/join.py (JoinDialog.__init__): Mark one more string
2466            for translation
2467    
2468            * Thuban/UI/mainwindow.py (MainWindow.TableRename)
2469            (MainWindow.RenameMap, MainWindow.RenameLayer): Mark some more
2470            strings for translation
2471    
2472            * po/de.po: Update with the newly marked strings.
2473    
2474    2003-12-22  Bernhard Herzog  <[email protected]>
2475    
2476            * HOWTO-Release: Fix the places where version numbers have to be
2477            updated
2478    
2479    2003-12-22  Bernhard Herzog  <[email protected]>
2480    
2481            * setup.py (setup call): 1.0.0, yeah!
2482    
2483            * Thuban/version.py (longversion): 1.0.0, yeah!
2484    
2485            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
2486            1.0.0 namespace too
2487    
2488            * Thuban/Model/save.py (SessionSaver.write_session): Save with
2489            1.0.0 namespace
2490    
2491            * test/test_load.py (LoadSessionTest.dtd)
2492            (TestSingleLayer.file_contents)
2493            (TestNonAsciiColumnName.file_contents)
2494            (TestLayerVisibility.file_contents)
2495            (TestClassification.file_contents, TestLabels.file_contents)
2496            (TestLayerProjection.file_contents)
2497            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2498            (TestLabelLayer.file_contents, TestPostGISLayer.file_contents)
2499            (TestPostGISLayerPassword.file_contents)
2500            (TestLoadError.file_contents, TestLoadError.test): Update for
2501            1.0.0 namespace
2502    
2503            * test/test_save.py (SaveSessionTest.dtd)
2504            (SaveSessionTest.testEmptySession)
2505            (SaveSessionTest.testSingleLayer)
2506            (SaveSessionTest.testLayerProjection)
2507            (SaveSessionTest.testRasterLayer)
2508            (SaveSessionTest.testClassifiedLayer)
2509            (SaveSessionTest.test_dbf_table)
2510            (SaveSessionTest.test_joined_table)
2511            (SaveSessionTest.test_save_postgis): Update for 1.0.0 namespace
2512    
2513    2003-12-22  Bernhard Herzog  <[email protected]>
2514    
2515            * Thuban/Model/load.py (SessionLoader.start_label): Make sure the
2516            alignment flags are byte strings not unicode and that they have
2517            valid values
2518    
2519            * test/test_load.py (TestLabelLayer): New. Test loading (and
2520            indirectly saving) of maps with labels.
2521    
2522    2003-12-22  Bernhard Herzog  <[email protected]>
2523    
2524            * Thuban/UI/tableview.py (TableGrid.OnDestroy)
2525            (TableGrid.__init__): Handle EVT_WINDOW_DESTROY in the grid to
2526            unsubscribe all subscribers.
2527            (LayerTableFrame.OnDestroy): Do not unsubscribe any messages from
2528            self.grid since it may already have been destroyed.
2529            Fixes RT #2256
2530    
2531    2003-12-19  Bernhard Herzog  <[email protected]>
2532    
2533            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
2534    
2535    2003-12-16  Bernhard Herzog  <[email protected]>
2536            
2537            * debian/bitmappath.patch, debian/setup.py.patch:
2538                    added to ensure compliance with FHS for debian
2539            * debian/rules, debian/changelog:
2540                added patches in rules to ensure compliance with FHS for debian
2541    
2542    2003-12-16  Bernhard Herzog  <[email protected]>
2543    
2544            * po/Makefile (mo): Make the output a bit nicer so that it prints
2545            statistics about the translations. Add a comment how produce even
2546            nicer statistics with sed.
2547    
2548    2003-12-09  Frank Koormann   <[email protected]>
2549    
2550            * Resources/Projections/defaults.proj:
2551            French projection sample with correct accents (UNICODE).
2552    
2553    2003-12-05  Bernhard Herzog  <[email protected]>
2554    
2555            * MANIFEST.in: Add the devtools directory
2556    
2557            * setup.py (setup call): Use license instead of licence. This
2558            silences a deprecation warning on Python 2.3
2559    
2560    2003-12-05  Frank Koormann   <[email protected]>
2561    
2562            Documentation synced with 1.0rc1
2563    
2564            * Doc/manual/thuban-manual.xml:
2565            Minor formatting changes and references to database layers .
2566            Introduction.Internationalization: New section on i18n.
2567            MapManagement.AddingandRemovingLayers: Added item on database layers.  
2568            MapManagement.TheLegend: Added section and screenshot on popup menu.
2569            ProjectionManagement: Updated screenshot and sentence on EPSG.
2570            Appendix.SupportedDataSources: Added PostGIS.
2571            Appendix.WorkingwithPostGIS: New section.
2572    
2573            * Doc/manual/images/6_projection.png: Updated screenshot including
2574            EPSG checkboxes.
2575    
2576            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
2577    
2578            * Doc/manual/images/app_postgis_add_layer.png,
2579            Doc/manual/images/app_postgis_db_add.png,
2580            Doc/manual/images/app_postgis_db_management.png:
2581            New screenshots focussing on database layers
2582    
2583    2003-12-05  Frank Koormann   <[email protected]>
2584    
2585            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
2586            write warning to stderr instead of rising a warning dialog
2587    
2588    2003-12-03  Bernhard Herzog  <[email protected]>
2589    
2590            Fix for RT #2243
2591    
2592            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
2593            New. Like has_selected_layer but for shape layers only
2594            (_has_selected_shape_layer): New. Like _has_selected_layer but for
2595            shape layers only
2596            (layer_show_table command, layer_jointable command): Use these
2597            commands should only be available for shape layers
2598    
2599    2003-12-03  Bernhard Herzog  <[email protected]>
2600    
2601            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
2602            publishers that are wx objects and may have been destroyed by wx
2603            already. Fixes RT #2242.
2604    
2605    2003-12-03  Bernhard Herzog  <[email protected]>
2606    
2607            * po/ru.po: Updates from Alex Shevlakov
2608    
2609    2003-12-03  Silke Reimer <silkeintevation.de>
2610    
2611            * debian/control, debian/changelog: Added gdal-support to
2612                    debian package, updated to new thuban version
2613    
2614    
2615    2003-12-03  Bernhard Herzog  <[email protected]>
2616    
2617            * Thuban/Lib/version.py: New. Module for version number
2618            manipulations. The version of make_tuple here also deals better
2619            with more unusual version number strings, such as e.g.
2620            "1.2+cvs20031111"
2621    
2622            * Thuban/version.py (make_tuple): Removed. It's now in
2623            Thuban.Lib.version. Use that implementation instead.
2624    
2625            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
2626    
2627    2003-12-02  Bernhard Herzog  <[email protected]>
2628    
2629            * MANIFEST.in: Add debian files
2630    
2631            * setup.py (setup call): Add packages for the Extensions so that
2632            they're installed too
2633            (data_files): Add READMEs and sample data from some Extensions
2634    
2635            * NEWS: Add note about the extensions in binary packages
2636    
2637    2003-12-02  Bernhard Herzog  <[email protected]>
2638    
2639            * Thuban/Model/save.py (SessionSaver.write_session): Save files
2640            with the thuban-1.0rc1
2641    
2642            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
2643            thuban-1.0rc1 namespace too
2644    
2645            * test/test_save.py (SaveSessionTest.dtd)
2646            (SaveSessionTest.testEmptySession)
2647            (SaveSessionTest.testSingleLayer)
2648            (SaveSessionTest.testLayerProjection)
2649            (SaveSessionTest.testRasterLayer)
2650            (SaveSessionTest.testClassifiedLayer)
2651            (SaveSessionTest.test_dbf_table)
2652            (SaveSessionTest.test_joined_table)
2653            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
2654            namespace
2655    
2656            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
2657            namespace
2658            (TestSingleLayer.file_contents)
2659            (TestNonAsciiColumnName.file_contents)
2660            (TestLayerVisibility.file_contents)
2661            (TestClassification.file_contents, TestLabels.file_contents)
2662            (TestLayerProjection.file_contents)
2663            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2664            (TestPostGISLayer.file_contents)
2665            (TestPostGISLayerPassword.file_contents)
2666            (TestLoadError.file_contents, TestLoadError.test): Update to
2667            thuban-1.0rc1 namespace
2668    
2669    2003-12-01  Bernhard Herzog  <[email protected]>
2670    
2671            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
2672            nt to better match Intevation's current w32 setup
2673    
2674            * HOWTO-Release: Add note about updating MANIFEST.in
2675    
2676            * MANIFEST.in: Add the Extensions
2677    
2678            * NEWS: Update for 1.0rc1
2679    
2680    2003-12-01  Bernhard Herzog  <[email protected]>
2681    
2682            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
2683            cards for the dialog so that shapefiles ending in all uppercase
2684            SHP are listed too
2685    
2686    2003-11-28  Bernhard Herzog  <[email protected]>
2687    
2688            * Thuban/version.py (longversion): Update to 1.0rc1
2689    
2690            * setup.py (setup call): Update version to 1.0rc1. Use the
2691            [email protected] email address as author email instead of my
2692            personal one.
2693    
2694    2003-11-28  Bernhard Herzog  <[email protected]>
2695    
2696            * po/de.po: Update german translation.
2697    
2698    2003-11-28  Bernhard Herzog  <[email protected]>
2699    
2700            Unify the filenames stored in .thuban files so that the .thuban
2701            files are more platform independend
2702    
2703            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
2704            that they can be used on both windows and unix
2705            (SessionSaver.prepare_filename): New. Handle all filename
2706            transformations for filenames stored in the thuban file
2707            (SessionSaver.write_data_containers, SessionSaver.write_layer):
2708            Use prepare_filename
2709    
2710            * test/test_save.py (SaveSessionTest.testSingleLayer)
2711            (SaveSessionTest.testLayerProjection)
2712            (SaveSessionTest.testRasterLayer)
2713            (SaveSessionTest.testClassifiedLayer)
2714            (SaveSessionTest.test_dbf_table)
2715            (SaveSessionTest.test_joined_table): Filenames are always stored
2716            with slashes on all currently supported platforms so adapt all
2717            tests to this
2718    
2719            * test/test_load.py (LoadSessionTest.filenames): With the new
2720            filename scheme the filenames in the tests should be
2721            understandable on all currently supported platforms so we turn
2722            this into an empty list because we don't have to normalize them
2723            anymore
2724    
2725    2003-11-28  Bernhard Herzog  <[email protected]>
2726    
2727            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
2728            Add the ellipsoid to the projection since some Proj versions
2729            complain if it's missing.
2730    
2731    2003-11-27  Bernhard Herzog  <[email protected]>
2732    
2733            Corect some bounding box projection problems
2734    
2735            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
2736            version of ForwardBBox
2737            (Projection._transform_bbox): New. common implementation of
2738            ForwardBBox and InverseBBox
2739            (Projection.ForwardBBox): Use _transform_bbox.
2740    
2741            * test/test_proj.py (TestProjection.test): Add test for
2742            InverseBBox
2743    
2744            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
2745            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
2746            new InverseBBox method to determine the unprojected bounding box
2747            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
2748            bbox.
2749    
2750            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2751            Removed.
2752            (TestLayer.test_arc_layer_with_projection): New. This test is
2753            better able to test whether bounding boxes are projected correctly
2754            than test_point_layer_with_projection
2755    
2756            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
2757            InverseBBox to unproject bboxes
2758    
2759    2003-11-25  Bernhard Herzog  <[email protected]>
2760    
2761            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
2762            source code.
2763    
2764    2003-11-25  Bernhard Herzog  <[email protected]>
2765    
2766            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
2767            there for backwards compatibility and all code relying on that
2768            should have been updated by now.
2769    
2770    2003-11-25  Bernhard Herzog  <[email protected]>
2771    
2772            * test/test_load.py (TestClassification.test): Add the missing
2773            round trip test.
2774            (TestClassification.file_contents): Update to the newest file
2775            format
2776    
2777    2003-11-25  Bernhard Herzog  <[email protected]>
2778    
2779            Add very experimental (and possibly dangerous) extension to draw
2780            polygons:
2781    
2782            * Extensions/drawshape/README: New. Brief installation
2783            instructions
2784    
2785            * Extensions/drawshape/drawshape.py: New. Implementation of the
2786            drawshape extensions
2787    
2788            * Extensions/drawshape/patch.diff: Patch to apply before the
2789            extension can be used.
2790    
2791    2003-11-24  Bernhard Herzog  <[email protected]>
2792    
2793            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
2794            (ShapefileStore.__init__): Factor opening the shapefile into a
2795            separate method (the new _open_shapefile). This makes the code a
2796            bit more readable but the real reason is that it makes some evil
2797            hacks easier. :-)
2798    
2799    2003-11-24  Bernhard Herzog  <[email protected]>
2800    
2801            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
2802            converter is specified for an attribute assume it's a string
2803            containing only Latin1 characters. Update doc-string accordingly.
2804            This change should fix many places where unicode objects might
2805            accidentally enter Thuban.
2806    
2807            * test/test_load.py (TestNonAsciiColumnName): New test to check
2808            what happens with column names in DBF files that contain non-ascii
2809            characters
2810    
2811    2003-11-21  Bernhard Herzog  <[email protected]>
2812    
2813            Enable the experimental attribute editing again and introduce a
2814            command line switch to actually activate it
2815    
2816            * Thuban/UI/main.py (options): New. Container for options set on
2817            the commmand line
2818            (main): Add the --enable-attribute-editing flag.
2819    
2820            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
2821            editing is enabled use the grid ctrl which allows editing of the
2822            values
2823    
2824            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
2825            New. Just delegate this to the underlying table.
2826    
2827    2003-11-20  Bernhard Herzog  <[email protected]>
2828    
2829            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
2830            Skip this test if run under non-posix systems since it only works
2831            there
2832    
2833    2003-11-19  Bernhard Herzog  <[email protected]>
2834    
2835            * Thuban/Model/resource.py: Rework the way gdal support is
2836            determined so that we can give a reason in the about why gdal is
2837            not supported.
2838            (gdal_support_status): New. Variable holding a string with the
2839            reason for no gdal support
2840    
2841            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
2842            not supported to the message
2843    
2844    2003-11-19  Bernhard Herzog  <[email protected]>
2845    
2846            Remove the old table interface and its test cases
2847    
2848            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
2849            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
2850            anymore
2851    
2852            * Thuban/Model/transientdb.py (TransientTableBase)
2853            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
2854            anymore
2855    
2856            * test/test_table.py: Removed since the old interface it tests is
2857            gone.
2858    
2859            * test/runtests.py (main): The old table interface is gone and
2860            with it the deprecation warnings so remove the code that turns
2861            these warnings into errors
2862    
2863    2003-11-19  Bernhard Herzog  <[email protected]>
2864    
2865            * test/test_table.py: Revert to revision 1.5 again. Changing the
2866            tests to use the new table interface is completely wrong since the
2867            whole purpose of the tests in this module is to test the old
2868            interface.
2869    
2870    2003-11-18  Bernhard Herzog  <[email protected]>
2871    
2872            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
2873            New. Test whether the connection matches a set of connection
2874            parameters
2875    
2876            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
2877            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
2878            for existing connections with the same parameters and break out of
2879            the loop correctly.
2880    
2881            * test/test_postgis_db.py (TestBriefDescription)
2882            (TestPostGISSimple.test_brief_description): Rename
2883            TestBriefDescription to TestPostGISSimple and the test method to
2884            test_brief_description so that we can add more test methods.
2885            (TestPostGISSimple.test_matches_parameters): New. Test the new
2886            MatchesParameters method
2887    
2888    2003-11-18  Bernhard Herzog  <[email protected]>
2889    
2890            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
2891            _was_destroyed, to indicate whether an publisher instance has
2892            already been destroyed.
2893            (Publisher.Unsubscribe): Only disconnect if the publisher has not
2894            been destroyed yet.
2895            (Publisher.Destroy): Set the _was_destroyed flag to true.
2896    
2897            * test/test_connector.py
2898            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
2899            calling Unsubscribe after Destroy doesn't raise an exception
2900    
2901    2003-11-14  Bernhard Herzog  <[email protected]>
2902    
2903            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
2904            typo in doc-string
2905    
2906    2003-11-13  Bernhard Herzog  <[email protected]>
2907    
2908            Quote table and column names properly for postgis.
2909    
2910            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
2911            quote an identifier for use in an sql statement
2912            (PostGISColumn.__init__): Add the quoted_name attribute
2913            (PostGISTable.__init__): New instance variable quoted_tablename
2914            (PostGISTable._fetch_table_information): Use the quoted table
2915            name. New isntance variable quoted_geo_col with a quoted version
2916            of geometry_column
2917            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
2918            (PostGISTable.RowOrdinalToId): Use the quoted table name
2919            (PostGISTable.ReadValue, PostGISTable.ValueRange)
2920            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
2921            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
2922            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
2923            Use quoted table and column names
2924    
2925            * test/test_postgis_db.py (TestPostGISSpecialCases)
2926            (TestPostGISIgnoredColumns): Rename the class to
2927            TestPostGISSpecialCases because that better describes the new
2928            cases
2929            (TestPostGISSpecialCases.test_unsupported_types)
2930            (TestPostGISSpecialCases.test): Rename the method to
2931            test_unsupported_types because we need a more descriptive name now
2932            that there are more methods
2933            (TestPostGISSpecialCases.test_table_name_quoting)
2934            (TestPostGISSpecialCases.test_column_name_quoting)
2935            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
2936            cases to test quoting of table and column names in PostGISTable
2937            and PostGISShapeStore
2938    
2939            * test/postgissupport.py
2940            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
2941            AddGeometryColumn desn't support table or column names with sapces
2942            or double quotes
2943    
2944    2003-11-12  Jan-Oliver Wagner <[email protected]>
2945    
2946            * Extensions/wms/__init__.py: New: Init to make this
2947            directory a package.
2948    
2949            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
2950    
2951    2003-11-11  Bernhard Herzog  <[email protected]>
2952    
2953            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
2954            Constant for the file woth deprecated epsg projections
2955            (get_system_proj_file): Update doc-string
2956    
2957            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
2958            above the EPS widgets, introduce a check box for the deprecated
2959            eps projections and a label for the epsg widgets
2960            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
2961            too
2962    
2963    2003-11-11  Bernhard Herzog  <[email protected]>
2964    
2965            Avoid warnings when run under Python 2.3
2966    
2967            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
2968            (BaseRenderer.draw_label_layer): Coordinates must be ints.
2969    
2970            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
2971            real method so that we can convert to int.
2972            (MapRenderer.label_font): The font size mist be an int.
2973    
2974            * Thuban/UI/common.py (Color2wxColour): The color values must be
2975            ints. Also, remove the unnecessary asserts.
2976    
2977            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
2978            (TestUnicodeStrings.test): Python source code should not contain
2979            non-ascii characters unless an encoding is specified in the file.
2980            Therefore use \x escapes in the string literals for non-ascii
2981            characters.
2982    
2983    2003-11-11  Bernhard Herzog  <[email protected]>
2984    
2985            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
2986            parameter so that this function can be used for all proj files in
2987            Resource/Projections
2988            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
2989            get_system_proj_file
2990    
2991            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
2992            ProjFile self.__sysProjFile use a dictionary of system ProjFile
2993            objects self._sys_proj_files
2994            (ProjFrame.build_dialog): Adapt to the new changes in the
2995            ProjectionList constructor. Add a check button to toggle whether
2996            EPSG projections are shown
2997            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
2998            events.
2999            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
3000            the busy cursor if the files have not yet been loaded by the
3001            dialog.
3002            (ProjFrame.load_system_proj): Add a parameter for the name of the
3003            proj file. Maintain the dictionary of system projections
3004            self._sys_proj_files
3005    
3006            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
3007            user_projs parameters into one parameter proj_files which is a
3008            list of proj files.
3009            (ProjectionList._subscribe_proj_files)
3010            (ProjectionList._unsubscribe_proj_files): New. Move
3011            subscription/unsubscription of projfile messages to separate
3012            methods
3013            (ProjectionList.Destroy): The unsubscribe is now done in
3014            _unsubscribe_proj_files
3015            (ProjectionList.update_projections): We now have a list of proj
3016            file objects
3017            (ProjectionList.SetProjFiles): New method to set a new list of
3018            proj file objects
3019    
3020            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
3021            Specify explicitly which system proj file to load.
3022    
3023    2003-11-11  Bernhard Herzog  <[email protected]>
3024    
3025            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
3026            instance variables to cut cyclic references. The GC would have
3027            collected the loader eventually but it can happen that it doesn't
3028            run at all until thuban is closed (2.3 but not 2.2 tries a bit
3029            harder and forces a collection when the interpreter terminates)
3030            (load_session): Call the handler's Destroy method to make sure
3031            that it gets garbage collected early. Otherwise it will be
3032            collected very late if at all and it holds some references to e.g.
3033            shapestores and the session which can lead to leaks (of e.g. the
3034            temporary files)
3035    
3036            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
3037            resource leak in load_session
3038    
3039    2003-11-10  Bernhard Herzog  <[email protected]>
3040    
3041            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
3042            extensions are to be rendered.
3043            (_renderer_extensions): New. List with renderer for layers in
3044            extensions
3045            (add_renderer_extension): New. Add a renderer extension
3046            (init_renderer_extensions): New. Init the renderer extensions
3047            (BaseRenderer.render_map_incrementally): Search
3048            _renderer_extensions for how to draw unknown layer types
3049            (BaseRenderer.draw_raster_data): Add format parameter so that
3050            formats other than BMP can be drawn
3051            (BaseRenderer.draw_raster_layer): Pass an explicit format to
3052            draw_raster_data
3053    
3054            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
3055            strings of the format parameter of draw_raster_data method to wx
3056            constants
3057            (MapRenderer.draw_raster_data): Add the format parameter and use
3058            raster_format_map to map it to the right wxwindows constant for
3059            wxImageFromStream
3060    
3061            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
3062            the format parameter and record it
3063            (TestBaseRenderer.test_raster_no_projection): check the format
3064            paramter of the draw_raster_data method
3065            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
3066            extension facility
3067    
3068    2003-11-07  Bernhard Herzog  <[email protected]>
3069    
3070            Tweak the usage of the sqlite database to make common use cases
3071            more responsive. In most cases copying the data to the sqlite
3072            database takes so long that using sqlite doesn't have enough
3073            advantages.
3074    
3075            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
3076            comments about performance and query the min and max in separate
3077            statements because only that way will indexes be used.
3078            (TransientTableBase.UniqueValues): Add some comments about
3079            performance.
3080            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
3081            Do not copy the data to the transient DB but use the transient
3082            copy if it exists. See the new comments for the performance trade
3083            offs
3084    
3085            * test/test_transientdb.py
3086            (TestTransientTable.test_auto_transient_table): Make sure that the
3087            data is copied to the transient database at some point.
3088    
3089    2003-11-03  Bernhard Herzog  <[email protected]>
3090    
3091            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
3092            globals to locals so that it's a bit faster
3093    
3094    2003-11-03  Bernhard Herzog  <[email protected]>
3095    
3096            * Thuban/UI/baserenderer.py
3097            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
3098            method. ReadValue is faster than ReadRowAsDict since it only reads
3099            one cell especially now that the dbf file objects actually
3100            implement it.
3101    
3102            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
3103            read_attribute method of the dbf objects
3104    
3105    2003-11-03  Bernhard Herzog  <[email protected]>
3106    
3107            * Extensions/profiling/profiling.py (popup_dialog_box): New config
3108            variable to indicate whether the result should be shown in a
3109            dialog box
3110            (profile_screen_renderer, time_screen_renderer): Only show a
3111            dialog box if popup_dialog_box is true.
3112            (profile_screen_renderer): Flush stdout after the printing the
3113            first part of the "profiling..." message
3114    
3115            * Thuban/UI/baserenderer.py
3116            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
3117            brushes for the groups so that they're not created over and over
3118            again
3119    
3120            * Thuban/Model/classification.py (Classification.__getattr__)
3121            (Classification._compile_classification)
3122            (Classification._clear_compiled_classification): New. Methods to
3123            manage a 'compiled' representation of the classification groups
3124            which is created on demand
3125            (Classification.InsertGroup, Classification.RemoveGroup)
3126            (Classification.ReplaceGroup): reset the compiled representation
3127            (Classification.FindGroup): Use the compiled representation to
3128            find the matching group
3129            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
3130    
3131    2003-10-31  Bernhard Herzog  <[email protected]>
3132    
3133            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
3134            Send a CLASS_CHANGED message
3135            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
3136            not return the removed group since it wasn't used.
3137    
3138            * test/test_classification.py
3139            (TestClassification.test_set_default_group): New. Test the
3140            SetDefaultGroup method
3141            (TestClassification.test_insert_group): New. Test the InsertGroup
3142            method
3143            (TestClassification.test_remove_group): New. Test the RemoveGroup
3144            method
3145            (TestClassification.test_replace_group): New. Test the
3146            ReplaceGroup method
3147    
3148    2003-10-31  Bernhard Herzog  <[email protected]>
3149    
3150            * test/test_classification.py (TestClassification.setUp):
3151            Subscribe to the CLASS_CHANGED messages
3152            (TestClassification.tearDown): New. Destroy the classification
3153            properly
3154            (TestClassification.test_defaults): Add tests for the default line
3155            width and whether no messages were sent yet
3156            (TestClassification.test_set_default_properties): Add tests for
3157            messages and setting the default line width
3158            (TestClassification.test_add_singleton)
3159            (TestClassification.test_add_range)
3160            (TestClassification.test_multiple_groups): Add tests for messages
3161    
3162    2003-10-31  Bernhard Herzog  <[email protected]>
3163    
3164            Some more refactoring in preparation for new tests:
3165    
3166            * test/test_classification.py (TestClassification.setUp): New.
3167            Instantiate the classification here. Update the test methods
3168            accordingly.
3169            (TestClassification.test_multiple_groups): Make sure that the two
3170            singletons matching 1 are considered different.
3171    
3172    2003-10-31  Bernhard Herzog  <[email protected]>
3173    
3174            * test/test_classification.py (red, green, blue): New. These
3175            constants were used in several cases. Update the relevant methods.
3176            (TestClassification.test_defaults)
3177            (TestClassification.test_set_default_properties)
3178            (TestClassification.test_add_singleton)
3179            (TestClassification.test_add_range)
3180            (TestClassification.test_multiple_groups)
3181            (TestClassification.test_deepcopy): New. These were formerly all
3182            part of the single method test.
3183            (TestClassification.test_deepcopy): Removed.
3184            (TestClassIterator): Removed. The test case is now a method of
3185            TestClassification since it tests part of the public interface of
3186            Classification
3187            (TestClassification.test_iterator): New. Used to be
3188            TestClassIterator effectively
3189    
3190    2003-10-31  Jan-Oliver Wagner <[email protected]>
3191    
3192            GUIfied the functions of the profiling extension.
3193    
3194            * /Extensions/profiling/__init__.py: New: Init to make this
3195            directory a package.
3196    
3197            * Extensions/profiling/profiling.py: Moved menu entries to
3198            the Extensions menu. Applied _() for strings.
3199            (profile_screen_renderer): Catch the detailed printout and present
3200            it in a dialog.
3201            (time_screen_renderer): Raise a dialog to present the result instead
3202            of printing it to stdout.
3203    
3204    2003-10-31  Bernhard Herzog  <[email protected]>
3205    
3206            * test/test_classification.py (TestClassGroupProperties)
3207            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
3208            (TestClassGroupSingleton, TestClassIterator, TestClassification):
3209            Split TestClassification into several classes, one for each class
3210            being tested. TestClassification itself now only tests
3211            Classification. This split makes changes to the tests a bit easier
3212    
3213    2003-10-31  Bernhard Herzog  <[email protected]>
3214    
3215            * Extensions/profiling/profiling.py: New. Extension to measure
3216            Thuban performance
3217    
3218    2003-10-31  Frank Koormann <[email protected]>
3219    
3220            Added two items to legend popup menu: Remove Layer and Show Layer Table
3221    
3222            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
3223            LegendPanel._OnShowTable): New event handlers, call the corresponding
3224            mainwindow methods.
3225            (LegendTree._OnRightClick): Added items to popup menu.
3226    
3227    2003-10-30  Bernhard Herzog  <[email protected]>
3228    
3229            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
3230            EVT_WINDOW_DESTROY
3231            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
3232            nothing but is convenient for the derived classes.
3233    
3234            * Thuban/UI/tableview.py
3235            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
3236            Unsubscribe the messages here not in OnClose because that might
3237            get called multiple times. Fixes RT #2196
3238            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
3239            anymore.
3240    
3241            * README: Update the minimum requirement for wxPython. Since we
3242            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
3243            the version in which that was introduced for all platforms
3244    
3245    2003-10-30  Frank Koormann <[email protected]>
3246    
3247            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
3248            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
3249            frame.
3250    
3251    2003-10-30  Jan-Oliver Wagner <[email protected]>
3252    
3253            Improved APR import extension, added further EPSG definitions
3254            and some cleanup regarding string class.
3255    
3256            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
3257            Added test for alias 'longlat'.
3258    
3259            * Resources/Projections/epsg-deprecated.proj: New. Contains
3260            deprecated EPSG definitions.
3261    
3262            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
3263            the variable names for objects.
3264    
3265            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
3266            Copied from importAPR and provided with documentation.
3267    
3268            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
3269            Moved to apr.py.
3270            (APR_View): Added object ref 'ITheme'.
3271    
3272            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
3273            split function by corresponding use of the string class method.
3274    
3275            * Thuban/Model/xmlwriter.py: Replaced string replace function by
3276            corresponding string method.
3277    
3278    2003-10-29  Bernhard Herzog  <[email protected]>
3279    
3280            * Thuban/UI/baserenderer.py
3281            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
3282            special case of a classification that only has the default group
3283    
3284    2003-10-27  Bernhard Herzog  <[email protected]>
3285    
3286            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
3287    
3288            * po/de.po: Update.
3289    
3290            * Thuban/UI/application.py
3291            (ThubanApplication.ShowExceptionDialog): Handle translation of the
3292            dialog message properly
3293    
3294    2003-10-27  Bernhard Herzog  <[email protected]>
3295    
3296            Rework how localization works so that we use wx's translation
3297            functions when running Thuban as a normal application but not when
3298            we don't need any UI, such as in the test suite. See the comment
3299            in Thuban/__init__.py for details
3300    
3301            * Thuban/__init__.py (_): Add one level of indirection to make the
3302            translation handling more flexible and to make it possible to use
3303            either wx's translation services or not.
3304            (gettext_identity, translation_function_installed)
3305            (install_translation_function): New function to help with this
3306    
3307            * Thuban/UI/__init__.py: Install the wx specific translation
3308            function if it's OK to do that
3309    
3310            * test/support.py (initthuban): Install a dummy translation
3311            function so that importing Thuban.UI doesn't install a wx specific
3312            one for which would need to import wxPython
3313    
3314    2003-10-27  Bernhard Herzog  <[email protected]>
3315    
3316            * HOWTO-Release: Source archives should be created first and the
3317            binary packages should be created from the source archives.
3318            There's an official debian package now so there's no need to test
3319            the rpm on debian anymore
3320    
3321    2003-10-27  Bernhard Herzog  <[email protected]>
3322    
3323            Several rendering changes:
3324    
3325             - Render the selection into a separate bitmap so that only that
3326               bitmap needs to be redrawn when the selection changes
3327    
3328             - Render incrementally showing previews and allowing interaction
3329               before rendering is complete
3330    
3331             - Update the renderer interface a bit. Most parameters of
3332               RenderMap are now parameters of the constructor
3333    
3334            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
3335            and the update region as parameters. Update the doc-string
3336            (BaseRenderer.render_map_incrementally): New. Generator function
3337            to renders the map incrementally
3338            (BaseRenderer.render_map): Remove the map argument (it's now in
3339            the constructor) and simply iterate over the
3340            render_map_incrementally generator to draw the map.
3341            (BaseRenderer.draw_shape_layer_incrementally)
3342            (BaseRenderer.draw_shape_layer): Renamed to
3343            draw_shape_layer_incrementally and changed into a generator that
3344            yields True every 500 shapes. Used by render_map_incrementally to
3345            render shape layers incrementally
3346    
3347            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
3348            map and region parameters which are now in the constructor
3349            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
3350            the inherited render_map_incrementally.
3351            (BaseRenderer.draw_shape_layer): Removed.
3352            (ScreenRenderer.draw_selection_incrementally): New. The selection
3353            drawing part of the removed draw_shape_layer as a generator
3354            (ScreenRenderer.layer_shapes): Update because of the region
3355            parameter change
3356            (ExportRenderer.__init__): New. Extend the inherited constructor
3357            with the destination region for the drawing
3358            (ExportRenderer.RenderMap): Removed the map and region parameters
3359            which are now in the constructor
3360    
3361            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
3362            bitmap suitable for a preview in a tool
3363            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
3364            bitmap
3365            (MapPrintout.draw_on_dc): Adapt to new renderer interface
3366            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
3367            exists
3368            (MapCanvas.OnIdle): Update the logic to deal with incremental
3369            rendering and the selection bitmap
3370            (MapCanvas._do_redraw): Handle the instantiation of the render
3371            iterator and the redraws during rendering
3372            (MapCanvas._render_iterator): New. Generator to incrementally
3373            redraw both bitmaps
3374            (MapCanvas.Export): Adapt to new renderer interface.
3375            (MapCanvas.full_redraw): Reset the selection bitmap and the
3376            renderer iterator too
3377            (MapCanvas.redraw_selection): New. Force a redraw of the selection
3378            bitmap
3379            (MapCanvas.shape_selected): Only redraw the selection bitmap
3380    
3381            * test/test_baserenderer.py
3382            (TestBaseRenderer.test_polygon_no_projection)
3383            (TestBaseRenderer.test_raster_no_projection)
3384            (TestBaseRenderer.test_point_map_projection)
3385            (TestBaseRenderer.test_point_layer_and_map_projection)
3386            (TestBaseRenderer.test_point_layer_projection)
3387            (TestBaseRenderer.test_point_with_classification): Adapt to new
3388            renderer interface
3389    
3390    2003-10-24  Bernhard Herzog  <[email protected]>
3391    
3392            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
3393            (point_in_polygon_shape, shape_centroid): Raise an exception if
3394            the shape can't be read. Previously invalid shape ids would lead
3395            to a segfault.
3396    
3397            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
3398            New. test whether an exception is raised for invalid shape ids
3399    
3400    2003-10-24  Jan-Oliver Wagner <[email protected]>
3401    
3402            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
3403            as alias for 'latlong'.
3404    
3405            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
3406            as alias for 'latlong'.
3407    
3408    2003-10-24  Jan-Oliver Wagner <[email protected]>
3409    
3410            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
3411            the projection even for the UnknownPanel.
3412            (UnknownProjPanel.__init__): Define the text and create the textctrl
3413            widget.
3414            (UnknownProjPanel._DoLayout): Replaced static text widget by the
3415            textctrl created in __init__.
3416            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
3417            including the parameters of the projection.
3418            
3419    2003-10-24  Jan-Oliver Wagner <[email protected]>
3420    
3421            * Resources/Projections/epsg.proj: New. This is a list of
3422            EPSG codes with parameters for proj. The list has been
3423            generated using devtools/create_epsg.py based on the
3424            file nad/epsg of the proj 4.4.7 package. Four projection
3425            definitions have been deleted as they are not accepted by proj:
3426            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
3427            and "HD72 / EOV".
3428    
3429    2003-10-22  Bernhard Herzog  <[email protected]>
3430    
3431            Some more tweaks to the projection dialog which should fix RT
3432            #1886.
3433    
3434            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
3435            the ProjFile's messages and call the base class methods correctly
3436            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
3437            flag on the newly selected item too. Otherwise some other item is
3438            focused and the first time the focus is moved with the keyboard
3439            the selection moves in unexpected ways.
3440    
3441            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
3442            focus on the OK button, only on the projection list. That way the
3443            list really has the focus initially
3444            (ProjFrame.OnClose): Call the projection list's Destroy method to
3445            make it unsubscribe all messages
3446    
3447    2003-10-21  Bernhard Herzog  <[email protected]>
3448    
3449            Rework the projection dialog to fix a few bugs, including RT 2166
3450            and most of 2168
3451    
3452            * Thuban/UI/projlist.py: New. The class ProjectionList is a
3453            special wxListCtrl to show a list of projections in a more MVC
3454            fashion
3455    
3456            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
3457            throughout the class. The main change is to use the ProjectionList
3458            class instead of a normal wxListBox. Also, add an explicit
3459            "Unknown" projection to the projection choice control.
3460            (ProjPanel.__init__): Add an "unknown" ellipsoid
3461            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
3462            instantiation of the panel's controls to make the tab-order more
3463            natural
3464    
3465    2003-10-21  Bernhard Herzog  <[email protected]>
3466    
3467            * test/test_load.py (TestSingleLayer.file_contents)
3468            (TestSingleLayer.test): Add non-ascii characters to the titles of
3469            session, map and layer. This is effectively a port of the
3470            TestUnicodeStrings test in test_load_0_8.py which for some reason
3471            was only added there.
3472    
3473            * test/test_load_0_9.py (TestSingleLayer.file_contents)
3474            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
3475            characters to the titles of session, map and layer,.
3476    
3477    2003-10-21  Bernhard Herzog  <[email protected]>
3478    
3479            Add EPSG projection handling to .thuban files
3480    
3481            * test/test_save.py (SaveSessionTest.dtd)
3482            (SaveSessionTest.testEmptySession)
3483            (SaveSessionTest.testLayerProjection)
3484            (SaveSessionTest.testRasterLayer)
3485            (SaveSessionTest.testClassifiedLayer)
3486            (SaveSessionTest.test_dbf_table)
3487            (SaveSessionTest.test_joined_table)
3488            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
3489            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
3490            use a and epsg projection to test saving them
3491    
3492            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
3493            namespace
3494            (TestLayerVisibility.file_contents, TestLabels.file_contents)
3495            (TestLayerProjection.file_contents)
3496            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
3497            (TestPostGISLayer.file_contents)
3498            (TestPostGISLayerPassword.file_contents)
3499            (TestLoadError.file_contents, TestLoadError.test): Update to use
3500            1.0-dev namespace
3501            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
3502            use 1.0-dev namespace and use an EPSG projection to test whether
3503            loading it works
3504    
3505            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
3506            as of Thuban 0.9. These are now tests to determine whether Thuban
3507            can still read files generated by Thuban 0.9
3508    
3509            * Thuban/Model/save.py (SessionSaver.write)
3510            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
3511            namespace
3512            (SessionSaver.write_projection): Write the projection's epsg
3513            attribute
3514    
3515            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
3516            thuban-1.0-dev.dtd namespace
3517            (SessionLoader.check_attrs): Allow a callable object as conversion
3518            too
3519            (SessionLoader.start_projection, SessionLoader.end_projection)
3520            (SessionLoader.start_parameter): Handle the epsg attribute and
3521            rename a few instance variables to lower case
3522    
3523            * Resources/XML/thuban-1.0.dtd: New. Only difference to
3524            thuban-0.9.dtd is the epsg attribute for projections.
3525    
3526    2003-10-21  Bernhard Herzog  <[email protected]>
3527    
3528            * test/runtests.py (main): Let the user specify which tests to run
3529            on the command line
3530    
3531            * test/support.py (ThubanTestResult.getDescription): Override to
3532            give a better short description. The description can be used as a
3533            parameter to run_tests to run that particular test in isolation.
3534    
3535    2003-10-21  Frank Koormann   <[email protected]>
3536    
3537            Popup menu for legend. Scheduled for the 1.2 release this was too
3538            simple to implement: The popup menu is bound to the legend tree, while
3539            the events are hanlded by its anchestor, the legend panel. This
3540            allows reuse of all the event handlers already implemented for the
3541            legend toolbar buttons.
3542    
3543            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
3544            to add handlers for the events issued by the popup menu.
3545            (LegendPanel._OnToggleVisibility): Handler for toggling layer
3546            visibility event
3547            (LegendPanel._OnProjection): Handler for layer projection event.
3548            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
3549            (LegendTree._OnRightClick): Event handler for right click, select item
3550            and pop up menu.
3551            (LegendTree.ToggleVisibility): Toggle layer visibility
3552            (LegendTree.LayerProjection): Raise layer projection dialog for
3553            current layer.
3554    
3555    2003-10-21  Bernhard Herzog  <[email protected]>
3556    
3557            * Resources/Projections/defaults.proj: Use correct DOCTYPE
3558            declaration. The top-level element is projectionlist not projfile
3559    
3560    2003-10-20  Bernhard Herzog  <[email protected]>
3561    
3562            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
3563            method to write a projfile and display a busy cursor and error
3564            dialogs.
3565            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
3566            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
3567            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
3568            busy cursor while loading the user and system prj files.
3569    
3570    2003-10-16  Bernhard Herzog  <[email protected]>
3571    
3572            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
3573            ProjFile objects
3574            (clear_proj_file_cache): New function to clear the cache. Mainly
3575            useful for use by the test suite
3576            (read_proj_file): Use the cache.
3577    
3578            * test/test_proj.py (TestProjFile): Clarify the doc-string
3579            (ProjFileReadTests): Update doc-string
3580            (ProjFileReadTests.test_get_system_proj_file): Check whether the
3581            system proj files is cached.
3582            (ProjFileLoadTestCase): New base class for the proj file tests
3583            derived from support.FileLoadTestCase to provide some common
3584            behavior.
3585            (TestLoadingProjFile)
3586            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
3587            (TestProjFileWithInvalidParameters.file_contents): Derive from
3588            ProjFileLoadTestCase
3589            (TestLoadingProjFile.test_caching): New. Test whether the cache
3590            works
3591    
3592    2003-10-16      Silke Reimer    <[email protected]>
3593    
3594            * debian/*: New directory with configuration files for building a thuban
3595              deb-package.
3596    
3597    2003-10-14  Bernhard Herzog  <[email protected]>
3598    
3599            * test/test_proj.py: Execute support.run_tests when run as
3600            __main__ so that missing unsubscribes are detected
3601            (TestProjFile.tearDown): Destroy the proj_file properly
3602    
3603    2003-10-14  Bernhard Herzog  <[email protected]>
3604    
3605            * Thuban/Model/messages.py (PROJECTION_ADDED)
3606            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
3607            the ProjFile objects
3608    
3609            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
3610            easily send messages when the projections change
3611            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
3612            when the change was successful
3613    
3614            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
3615            proj file messages
3616            (TestProjFile.test_add_remove)
3617            (TestProjFile.test_remove_non_existing)
3618            (TestProjFile.test_replace)
3619            (TestProjFile.test_replace_non_existing): Test whether the right
3620            messages are sent
3621    
3622    2003-10-14  Bernhard Herzog  <[email protected]>
3623    
3624            * test/test_proj.py (TestProjFile.test): Refactor into several
3625            tests
3626            (TestProjFile.test_add_remove)
3627            (TestProjFile.test_remove_non_existing)
3628            (TestProjFile.test_replace)
3629            (TestProjFile.test_replace_non_existing): Some of the new
3630            individual test cases
3631            (TestProjFileSimple): New class for the rest of the test cases
3632            that came out of the refactoring
3633            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
3634            derived classes don't have to
3635    
3636    2003-10-13  Bernhard Herzog  <[email protected]>
3637    
3638            Add an optional EPSG code to the projection objects and extend the
3639            .proj file format accordingly.
3640    
3641            * Resources/XML/projfile.dtd (element projection): Add epsg
3642            attribute
3643    
3644            * Thuban/Model/proj.py (Projection.__init__): New parameter and
3645            instance variable epsg. Update doc-string
3646            (Projection.EPSGCode, Projection.Label): New methods to provide
3647            access to EPSG code and a label for use in dialogs
3648    
3649            * Thuban/Model/resource.py (ProjFileReader.start_projection)
3650            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
3651            Handle the epsg code attribute when reading or writing proj files
3652    
3653            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
3654            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
3655            (ProjFrame.__FillAvailList): Use the projection's Label method to
3656            get the string for the list box
3657    
3658            * test/test_proj.py (TestProjection.test_label)
3659            (TestProjection.test_label_epsg)
3660            (TestProjection.test_epsgcode_for_non_epsg_projection)
3661            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
3662            for the label and EPSGCode methods
3663            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
3664            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
3665            objects in the test cases and put the expected contents into the
3666            test case methods too. Update doTestWrite accordingly
3667            (TestLoadingProjFile)
3668            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
3669            read tests from TestProjFile.
3670            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
3671            tests are now in the new classes.
3672            (sample_projfile, sample_projfile_data)
3673            (sample_projfile2, sample_projfile_data2): Removed. Not used
3674            anymore.
3675            (TestProjFile.test_read_unreadable_file): No need to reset the
3676            permissions at the end anymore since we use a unique filename
3677    
3678    2003-10-13  Bernhard Herzog  <[email protected]>
3679    
3680            * test/test_proj.py: Some more refactoring of the test cases
3681            (ProjFileTest): New base class for the proj file tests.
3682            (TestProjFile): Derive from ProjFileTest
3683            (TestProjFile.test_read_unreadable_file)
3684            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
3685            the new filename method to get a unique filename
3686            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
3687            (WriteProjFileTests): New class for proj file write tests.
3688            Contains the write test that were in TestProjFile originally.
3689    
3690    2003-10-13  Bernhard Herzog  <[email protected]>
3691    
3692            * test/test_proj.py (TestProjFile.testRead)
3693            (TestProjFile.test_read_non_existing_file)
3694            (TestProjFile.test_read_unreadable_file)
3695            (TestProjFile.test_read_empty_file): Split into several methods.
3696    
3697    2003-10-10  Bernhard Herzog  <[email protected]>
3698    
3699            * Thuban/UI/sizers.py: New file with custom sizers.
3700    
3701            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
3702            all projection type specific panels and put them into a
3703            NotebookLikeSizer. This way the dialog doesn't change its size
3704            when a different projection is selected
3705            (ProjFrame.__init__): Rename projection_panels
3706            projection_panel_defs and reuse projection_panels for a list of
3707            the instantiated panels.
3708            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
3709            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
3710            the panels
3711            (UnknownProjPanel._DoLayout): Place the newlines in the message
3712            differently to make the panel narrower.
3713            (TMPanel._DoLayout): Layout the parameters in one column.
3714    
3715    2003-10-10  Bernhard Herzog  <[email protected]>
3716    
3717            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
3718            that contains all the setup for the dialog's widgets, layout and
3719            event handling.
3720            (__): Call build_dialog to build the dialog.
3721            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
3722            Their functionality is now in build_dialog
3723            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
3724            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
3725            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
3726            different widget names and hierarchy introduced with build_dialog.
3727    
3728    2003-10-10  Bernhard Herzog  <[email protected]>
3729    
3730            * README: Fix typo.
3731    
3732    2003-10-09  Bernhard Herzog  <[email protected]>
3733    
3734            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
3735            projection is already in the list. This is *a lot* faster when
3736            loading files with hundreds of projections since it saves a linear
3737            search. OTOH this will allow adding the same projection to the
3738            user.proj file multiple times in the projection dialog but we'll
3739            deal with that later
3740    
3741    2003-10-09  Jan-Oliver Wagner <[email protected]>
3742    
3743            * devtools: New. Directory for developer tools that are not intended
3744            for the regular user.
3745    
3746            * devtools/create_epsg.py: New. Convert the epsg file of proj into
3747            a python .proj file.
3748    
3749    2003-10-09  Bernhard Herzog  <[email protected]>
3750    
3751            * test/test_proj.py
3752            (TestProjection.test_get_parameter_without_equals_sign): New. Test
3753            whether GetParameter handles parameters without "=" sign correctly
3754    
3755            * Thuban/Model/proj.py (Projection.GetParameter): Handle
3756            parameters that do not contain a "=". Update the doc-string
3757    
3758    2003-10-08  Bernhard Herzog  <[email protected]>
3759    
3760            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
3761            length limit on the projname text control
3762    
3763    2003-10-08  Bernhard Herzog  <[email protected]>
3764    
3765            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
3766            (TestProjection.test_get_projection_units_normal): New. Tests for
3767            the Projection.GetProjectedUnits method
3768    
3769    2003-10-08  Jan-Oliver Wagner <[email protected]>
3770    
3771            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
3772            Added missing 'val' parameter.
3773    
3774    2003-10-08  Bernhard Herzog  <[email protected]>
3775    
3776            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
3777            projection type of the currently selected projection is not known,
3778            i.e. there's no panel for it, use the UnknownProjPanel
3779            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
3780            the actual replacing of the proj panel into the new method
3781            _show_proj_panel.
3782            (UnknownProjPanel): Add doc-string.
3783            (UnknownProjPanel._DoLayout): Insert a newline into the text so
3784            that the panel is not so wide.
3785    
3786    2003-10-08  Bernhard Herzog  <[email protected]>
3787    
3788            * Thuban/Model/resource.py (read_proj_file): Return the warnings
3789            too. Update the doc-string
3790            (get_proj_files): Removed. It wasn't used anywhere
3791            (get_system_proj_files, get_system_proj_file): Rename to
3792            get_system_proj_file and return the ProjFile object and not a list
3793            of ProjFile objects. Update the callers.
3794            (get_user_proj_files, get_user_proj_file): Rename to
3795            get_user_proj_file return the ProjFile object and not a list of
3796            ProjFile objects. Update the callers.
3797            (ProjFileReader.__init__): New instance variable for the warnings.
3798            Rename the __pf ivar to projfile. Update the methods referring to
3799            __pf
3800            (ProjFileReader.end_projection): Catch any errors raised when
3801            instantiating the projection and record that as an error. The
3802            projection will not be in the final ProjFile object.
3803            (ProjFileReader.GetWarnings): New method to return the warnings.
3804    
3805            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
3806            show the warnings from the projfile reader
3807            (ProjFrame._OnImport): Deal with any warnings returned by
3808            read_proj_file
3809            (ProjFrame.__FillAvailList): Deal with any warnings returned by
3810            get_system_proj_file or get_user_proj_file.
3811    
3812            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
3813            (TestProjFileWithInvalidParameters.file_contents): New test cases
3814            to test whether read_proj_file handles invalid projection
3815            parameters correctly
3816            (TestProjFile.test_get_system_proj_file): New. Simple test for
3817            resource.get_system_proj_file
3818    
3819    2003-10-07  Bernhard Herzog  <[email protected]>
3820    
3821            * test/test_derivedshapestore.py
3822            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
3823            properly so that the temporary directories get deleted correctly
3824    
3825    2003-10-06  Bernhard Herzog  <[email protected]>
3826    
3827            Handle the title changes in a proper MVC way.
3828    
3829            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
3830            canvas' TITLE_CHANGED messages
3831            (MainWindow.update_title): New. Update the main window's title
3832            (MainWindow.__SetTitle): Removed. Use update_title instead.
3833            (MainWindow.SetMap): Use update_title instead of __SetTitle
3834            (MainWindow.RenameMap): Do change the window title explicitly
3835            here. That's handled in a proper MVC way now.
3836            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
3837            messages
3838    
3839            * Thuban/Lib/connector.py (Conduit): New class to help classes
3840            that forward messages
3841    
3842            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
3843            (ViewPort): Derive from Conduit instead of Publisher
3844            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
3845            when calling the inherited versions
3846            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
3847            methods to subscribe and unsubscribe map messages
3848            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
3849            handle the map subscriptions
3850            (ViewPort.Map, ViewPort.map_projection_changed)
3851            (ViewPort.layer_projection_changed): Add or update doc-strings
3852    
3853            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
3854            typo
3855            (MyConduit): Helper class for the Conduit test.
3856            (TestConduit): Test cases for Conduit
3857    
3858            * test/test_connector.py: Use support.run_tests as main.
3859    
3860            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
3861            the TITLE_CHANGED messages
3862            (ViewPortTest.test_forwarding_title_changed): New test to check
3863            whether the viewport forwards the map's TITLE_CHANGED messages
3864            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
3865            after the port's because the latter may require a still functional
3866            map.
3867    
3868    2003-10-06  Bernhard Herzog  <[email protected]>
3869    
3870            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
3871            doc-string
3872    
3873    2003-10-06  Bernhard Herzog  <[email protected]>
3874    
3875            * test/test_viewport.py (ViewPortTest.setUp)
3876            (SimpleViewPortTest.test_init_with_size): Move the test for the
3877            initial size as a constructor parameter from ViewPortTest.setUp
3878            method to a new separate test in SimpleViewPortTest.
3879    
3880    2003-10-06  Bernhard Herzog  <[email protected]>
3881    
3882            * test/test_viewport.py (MockView): New class derived from
3883            ViewPort with a mock implementation of GetTextExtent to be used in
3884            the test cases
3885            (ViewPortTest.setUp): Use MockView instead of ViewPort
3886    
3887            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
3888            into what would be a "pure virtual function" in C++: always raise
3889            NotImplementedError. Mock implementations for test cases don't
3890            belong into the real code
3891    
3892    2003-10-02  Bernhard Herzog  <[email protected]>
3893    
3894            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
3895            close the dbf file we create so that it's contents have been
3896            written properly.
3897    
3898            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
3899            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
3900            Update to shapelib 1.2.10
3901    
3902    2003-10-01  Jan-Oliver Wagner <[email protected]>
3903    
3904            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
3905            it annoys lintian which warns about these files not being
3906            executable. The #! isn't necessary here since if you absolutely
3907            must execute them you can always say "python <filename>".
3908    
3909    2003-09-26  Bernhard Herzog  <[email protected]>
3910    
3911            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
3912            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
3913            is ported to a newer the import will fail, so it should be noticed
3914            immediately that this function is gone.
3915            Fixes RT#1919
3916    
3917    2003-09-26  Bernhard Herzog  <[email protected]>
3918    
3919            Add a DTD for the projection files and make thuban write valid
3920            projection files
3921    
3922            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
3923            files
3924    
3925            * Thuban/Model/resource.py (ProjFileSaver.write): Use
3926            'projectionlist' as the name in the document type declaration so
3927            that it matches the element type of the root element.
3928    
3929            * test/test_proj.py (sample_projfile, sample_projfile2): Use
3930            'projectionlist' as the name in the document type declaration just
3931            as it is done now in the files thuban would write
3932            (sample_projfile, sample_projfile_data): Fix spelling of
3933            "Mercator"
3934            (TestProjFile.doTestWrite): Validate the written and the expected
3935            XML data
3936            (TestProjFile): Derive from ValidationTest so that we can run xml
3937            validation tests
3938    
3939    2003-09-24  Bernhard Herzog  <[email protected]>
3940    
3941            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
3942            modify the list returned by map.Layers() in place since it is the
3943            actual list of layers used by the map.
3944    
3945    2003-09-23  Jan-Oliver Wagner <[email protected]>
3946    
3947            * Doc/manual/thuban-manual.xml: Added subsection to chapter
3948            Extensions to describe the extensions coming with the Thuban
3949            standard package (gns2shp and importAPR).
3950    
3951    2003-09-23  Bernhard Herzog  <[email protected]>
3952    
3953            * libraries/thuban/wxproj.cpp (project_point): if there's an
3954            inverse but no forward projection, convert to degrees after
3955            applying the inverse projection. Fixes RT#2096
3956    
3957            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
3958            implicitly tests for the fix to RT#2096
3959    
3960            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
3961            Check that the sequences have the same lengths
3962    
3963            * Resources/Projections/defaults.proj (Geographic projection): Use
3964            a much more precise value for the to_meter attribute.
3965    
3966    2003-09-22  Bernhard Herzog  <[email protected]>
3967    
3968            * test/support.py (initthuban): Make sure to unset the LANG env.
3969            var. so that tests that compare translated strings work. Solves RT
3970            #2094
3971    
3972    2003-09-22  Jan-Oliver Wagner <[email protected]>
3973    
3974            Small improvement of APR import.
3975    
3976            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
3977            Added tests for text-ranges.
3978    
3979            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
3980            returns a string object if the range is based on text.
3981    
3982            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
3983            range retrieval.
3984    
3985    2003-09-22  Jan-Oliver Wagner <[email protected]>
3986    
3987            Initial version of the importAPR extension which is in
3988            experimental state.
3989    
3990            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
3991            /Extensions/importAPR/test/: New directories.
3992    
3993            * /Extensions/importAPR/samples/README: New: Howto load the samples.
3994    
3995            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
3996            file which refers to the Thuban Iceland demo data.
3997    
3998            * /Extensions/importAPR/test/README: New: Howto execute the tests.
3999    
4000            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
4001    
4002            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
4003            as in '.apr'-files.
4004    
4005            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
4006            ODB Objects as in '.apr', '.avl' and other files.
4007    
4008            * /Extensions/importAPR/__init__.py: New: Init to make this
4009            directory a package.
4010    
4011            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
4012            project file (.apr) and convert it to Thuban.
4013    
4014    2003-09-22  Jan-Oliver Wagner <[email protected]>
4015    
4016            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
4017    
4018    2003-09-19  Jan-Oliver Wagner <[email protected]>
4019    
4020            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
4021            with description on RPM installation and RPM binary package
4022            creation.
4023    
4024    2003-09-18  Bernhard Herzog  <[email protected]>
4025    
4026            * setup.py (data_files): Only add the mo files if the Locales
4027            directory actually exists, so that setup.py works with a fresh CVS
4028            checkout
4029    
4030    2003-09-12  Jan-Oliver Wagner <[email protected]>
4031    
4032            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
4033            in viewport, not anymore in view
4034    
4035    2003-09-04  Jan-Oliver Wagner <[email protected]>
4036    
4037            Introducing first Extension (gns2shp).
4038    
4039            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
4040    
4041            * Extensions/__init__.py: New. init to make this dir a package.
4042    
4043            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
4044    
4045            * Extensions/gns2shp/test/README: New. some info on this test directory.
4046    
4047            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
4048    
4049            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
4050            of Shapefile from GNS text file format
4051    
4052    2003-09-03  Jan-Oliver Wagner <[email protected]>
4053    
4054            Fix/workaround for bug #2019:
4055            https://intevation.de/rt/webrt?serial_num=2019
4056    
4057            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
4058            (IdentifyView.__init__): Added another button that allows to
4059            stop the identify mode.
4060            (IdentifyView.OnStop): New. Stops the identify mode.
4061    
4062    2003-09-03  Jan-Oliver Wagner <[email protected]>
4063    
4064            Introducing a new exception dialog that allows to exit the
4065            application immediately.
4066            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
4067    
4068            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
4069    
4070            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
4071            Made strings available to translations. Exchanged the simple
4072            ScrolledMessageDialog by the new ExceptionDialog.
4073    
4074    2003-09-01  Bernhard Herzog  <[email protected]>
4075    
4076            * NEWS: New. Summary of changes and release notes.
4077    
4078            * MANIFEST.in: Add NEWS
4079    
4080    2003-09-01  Bernhard Herzog  <[email protected]>
4081    
4082            * MANIFEST.in: Correct the include statement for the mo-files and
4083            include the documentation too.
4084    
4085            * setup.py (data_files): Add the .mo files
4086            (setup call): Up to version 0.9.0
4087    
4088    2003-09-01  Bernhard Herzog  <[email protected]>
4089    
4090            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
4091            parameter list to just parent and session
4092            (ChooseDBTableDialog.__set_properties): Removed. Setting the
4093            selection of empty list boxes is not allowed (and produces C++
4094            assertion errors) and the rest of the setup is better done in
4095            __init__ anyway.
4096            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
4097            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
4098            builtins True/False for booleans to avoid warnings from wxPython
4099    
4100            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
4101            ChooseDBTableDialog constructor parameters.
4102    
4103    2003-09-01  Bernhard Herzog  <[email protected]>
4104    
4105            * Thuban/Model/postgisdb.py
4106            (PostGISTable): Extend doc-string
4107            (PostGISTable._fetch_table_information): Set the column index
4108            correctly, pretending ignored columns don't exist.
4109    
4110            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
4111            for postgis tables with data types not yet supported by thuban.
4112    
4113    2003-08-29  Bernhard Herzog  <[email protected]>
4114    
4115            * HOWTO-Release: Tweak item about running the tests.
4116    
4117    2003-08-29  Jan-Oliver Wagner <[email protected]>
4118    
4119            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
4120    
4121    2003-08-29  Bernhard Herzog  <[email protected]>
4122    
4123            Add some missing parameters to projections. Proj complains about
4124            them on windows but for some reason not on Linux.
4125    
4126            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
4127            missing required projection parameters
4128    
4129            * test/test_proj.py (TestProjFile.test): Add missing required
4130            projection parameters
4131    
4132            * test/test_load_0_8.py (TestLayerProjection.file_contents)
4133            (TestLayerProjection.test): Add missing required projection
4134            parameters and tests for them
4135    
4136            * test/test_load.py (TestLayerProjection.file_contents)
4137            (TestLayerProjection.test): Add missing required projection
4138            parameters and tests for them
4139    
4140            * test/test_layer.py (TestLayer.test_base_layer): Add missing
4141            required projection parameters
4142    
4143    2003-08-29  Bernhard Herzog  <[email protected]>
4144    
4145            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
4146            access the pj_errno because directly accessing pj_errno doesn't
4147            work on windows if the proj library is in a DLL
4148    
4149            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
4150    
4151    2003-08-28  Bernhard Herzog  <[email protected]>
4152    
4153            * test/test_proj.py: Import things from Thuban after calling
4154            initthuban
4155    
4156            * test/test_load.py (LoadSessionTest.filenames): New class
4157            variable with the filename attributes to normalize
4158            (LoadSessionTest.check_format): Pass self.filenames to
4159            sax_eventlist to normalize the filename attributes
4160    
4161            * test/xmlsupport.py: Add cvs keywords
4162            (SaxEventLister.__init__): New parameter filenames which indicates
4163            attributes that contain filenames
4164            (SaxEventLister.startElementNS): Normalize the filename attributes
4165            with os.path.normpath
4166            (sax_eventlist): New parameter filenames to pass through to
4167            SaxEventLister
4168    
4169            * test/test_derivedshapestore.py: Make this file callable as a
4170            program to execute the tests
4171            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
4172            the session to self.session so that it gets destroyed properly
4173    
4174            * test/test_layer.py (TestLayer.tearDown): Call the session's
4175            Destroy method
4176    
4177            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
4178            too if it exists
4179            (TestMapAddLayer.test_add_layer): Bind the session to self.session
4180            so that it gets destroyed properly
4181    
4182            * test/postgissupport.py (reason_for_not_running_tests): Add a
4183            test for the existence of popen2.Popen4.
4184    
4185            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
4186            reliable way to destroy the sessions created in the test cases
4187            (SaveSessionTest.test_dbf_table): Bind the session to self.session
4188            so that it gets destroyed properly
4189            (SaveSessionTest.testLayerProjection): Bind the session to
4190            self.session so that it gets destroyed properly
4191    
4192            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
4193            sure that the session is destroyed properly
4194    
4195            * test/test_shapefilestore.py: Make this callable as a program to
4196            execute the tests
4197    
4198            * test/test_scalebar.py: Remove unnecessary import of _ from
4199            Thuban
4200    
4201            * test/support.py (print_garbage_information): Call initthuban
4202            here because it may be called indirectly from test cases that test
4203            test support modules which do not use anything from thuban itself
4204            (ThubanTestProgram.runTests): Remove unnecessary debug print
4205    
4206    2003-08-28  Bernhard Herzog  <[email protected]>
4207    
4208            * Thuban/version.py (longversion): Update to 0.9
4209    
4210            * Thuban/UI/mainwindow.py: Remove some unused imports
4211    
4212            * README: Add section about required additional software. Add date
4213            and revision CVS keywords
4214    
4215            * HOWTO-Release: Add item about the translations. Add date and
4216            revision CVs keywords and change formatting to match README a bit
4217            better
4218    
4219            * po/de.po: Update for 0.9
4220    
4221            * test/README: Tweak the wording a little because many tests are
4222            not really unittest.
4223    
4224    2003-08-27  Bernhard Herzog  <[email protected]>
4225    
4226            As preparation for the 0.9 release, switch thuban files to a
4227            non-dev namespace
4228    
4229            * Thuban/Model/save.py (SessionSaver.write_session): Write files
4230            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
4231            namespace
4232    
4233            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
4234            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
4235    
4236            * test/test_save.py (SaveSessionTest.dtd)
4237            (SaveSessionTest.testEmptySession)
4238            (SaveSessionTest.testSingleLayer)
4239            (SaveSessionTest.testLayerProjection)
4240            (SaveSessionTest.testRasterLayer)
4241            (SaveSessionTest.testClassifiedLayer)
4242            (SaveSessionTest.test_dbf_table)
4243            (SaveSessionTest.test_joined_table)
4244            (SaveSessionTest.test_save_postgis): Update for new namespace
4245    
4246            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
4247            (TestLayerVisibility.file_contents, TestLabels.file_contents)
4248            (TestLayerProjection.file_contents)
4249            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
4250            (TestPostGISLayer.file_contents)
4251            (TestPostGISLayerPassword.file_contents)
4252            (TestLoadError.file_contents, TestLoadError.test): Update for new
4253            namespace
4254    
4255    2003-08-27  Bernhard Herzog  <[email protected]>
4256    
4257            Make the table interface distinguish between row ids (an integer
4258            that uniquely identifies a row) and row ordinals (a simple row
4259            count from 0 to NumRows() - 1)
4260    
4261            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
4262            (PostGISTable.RowOrdinalToId): New methods to conver between row
4263            ids and row ordinals
4264            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
4265            parameter row_is_ordinal to indicate whether the row parameter is
4266            the row id or the ordinal
4267    
4268            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
4269            (TransientTableBase.RowOrdinalToId)
4270            (AutoTransientTable.RowIdToOrdinal)
4271            (AutoTransientTable.RowOrdinalToId): Same new methods as in
4272            PostGISTable.
4273            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
4274            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
4275            Same new parameter as in PostGISTable.
4276    
4277            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
4278            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
4279            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
4280            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
4281            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
4282            parameter as in PostGISTable.
4283    
4284            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
4285            (DataTable.RowOrdinalToId): New methods to convert between row ids
4286            and row ordinals.
4287            (TableGrid.SelectRowById): New method to select a row based on its
4288            ID as opposed to its ordinal
4289            (DataTable.GetValue, TableGrid.OnRangeSelect)
4290            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
4291            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
4292            (LayerTableFrame.__init__): Convert between row ids and row
4293            ordinals as appropriate
4294    
4295            * test/postgissupport.py (PostGISDatabase.__init__): Add
4296            doc-string.
4297            (PostGISDatabase.initdb): The optional third item in a tuple in
4298            tables is now a (key, value) list with additional arguments to
4299            pass to upload_shapefile
4300            (upload_shapefile): New parameter gid_offset to allow gids that
4301            are not the same as the shapeids in the shapefile
4302            (PostgreSQLServer.get_default_static_data_db): Use the new
4303            gid_offset to make the gids in landmarks 1000 higher than the
4304            shapeids in the shapefile
4305    
4306            * test/test_viewport.py
4307            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
4308            new shapeids in the landmarks table
4309    
4310            * test/test_transientdb.py
4311            (TestTransientTable.run_iceland_political_tests)
4312            (TestTransientTable.test_transient_joined_table): Add tests for
4313            the new table methods and new keywords arguments.
4314    
4315            * test/test_postgis_db.py
4316            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
4317            (TestPostGISTable.test_read_value_row_count_mode)
4318            (TestPostGISTable.test_row_id_to_ordinal)
4319            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
4320            table methods and the new arguments
4321            (TestPostGISShapestorePoint.test_shapes_in_region)
4322            (TestPostGISShapestorePoint.test_shape_raw_data)
4323            (TestPostGISShapestorePoint.test_shape_points)
4324            (TestPostGISShapestorePoint.test_shape_shapeid)
4325            (TestPostGISShapestorePoint.test_all_shapes)
4326            (TestPostGISTable.test_simple_query)
4327            (TestPostGISTable.test_simple_query)
4328            (TestPostGISTable.test_simple_query)
4329            (TestPostGISTable.test_read_value)
4330            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
4331            shapeids in the landmarks table
4332    
4333            * test/test_memory_table.py
4334            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
4335            (TestMemoryTable.test_read_value_row_count_mode)
4336            (TestMemoryTable.test_row_id_to_ordinal)
4337            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
4338            table methods and the new arguments
4339    
4340            * test/test_dbf_table.py
4341            (TestDBFTable.test_read_row_as_dict_row_count_mode)
4342            (TestDBFTable.test_read_value_row_count_mode)
4343            (TestDBFTable.test_row_id_to_ordinal)
4344            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
4345            methods and the new arguments
4346    
4347    2003-08-26  Bernhard Herzog  <[email protected]>
4348    
4349            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
4350            more postgis specific but much faster method to get the bounding
4351            box
4352    
4353    2003-08-26  Bernhard Herzog  <[email protected]>
4354    
4355            * Thuban/Model/postgisdb.py (PostGISTable.Title)
4356            (PostGISShapeStore.AllShapes): Add these missing methods.
4357            (PostGISShapeStore.ShapesInRegion): No need to raise
4358            StopIteration. We can simply return
4359    
4360            * test/test_postgis_db.py (TestPostGISTable.test_title)
4361            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
4362            new methods
4363    
4364    2003-08-25  Bernhard Herzog  <[email protected]>
4365    
4366            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
4367    
4368            * test/test_postgis_db.py (PolygonTests): New class containing
4369            those tests from TestPostGISShapestorePolygon that can also be
4370            used to test MUTLIPOLYGON tables
4371            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
4372            so derive from that
4373            (TestPostGISShapestoreMultiPolygon): New class with tests for
4374            MUTLIPOLYGON tables
4375    
4376            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
4377            tables argument to have tuples with three items to override the
4378            WKT type used.
4379            (PostgreSQLServer.get_default_static_data_db): Use the above to
4380            create a polygon table with MUTLIPOLYGONs
4381            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
4382            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
4383            coords_to*
4384            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
4385            (wkt_converter): New. Map WKT types to converters
4386            (upload_shapefile): New parameter force_wkt_type to use a
4387            different WKT type than the default
4388    
4389    2003-08-25  Bernhard Herzog  <[email protected]>
4390    
4391            * Thuban/UI/application.py
4392            (ThubanApplication.run_db_param_dialog): New. Suitable as a
4393            db_connection_callback. Main difference is that the dialog run
4394            from this method doesn't have a parent so it can be used even when
4395            there is no main window
4396            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
4397            no db_connection_callback was given. This way the dialog pops up
4398            even when the .thuban file was given as a command line parameter.
4399    
4400    2003-08-25  Bernhard Herzog  <[email protected]>
4401    
4402            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
4403            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
4404            which leads to an effectively frozen X session because the user
4405            can only interact with the dialog but the mouse is still grabbed
4406            by the canvas.
4407            Also, call the tool's Hide method before MouseLeftUp because
4408            MouseLeftUp may change the tool's coordinates.
4409    
4410    2003-08-25  Bernhard Herzog  <[email protected]>
4411    
4412            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
4413            LoadCancelled exceptions and handle them by returning immediately.
4414    
4415    2003-08-25  Bernhard Herzog  <[email protected]>
4416    
4417            GUI part of loading sessions with postgis connections which may
4418            require user interaction to get passwords or updated parameters
4419    
4420            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
4421            bit nucer and be more generic.
4422            (DBFrame.OnAdd): Adapt to new DBDialog interface
4423    
4424            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
4425            optional parameter db_connection_callback which is passed to
4426            load_session.
4427    
4428            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
4429            Suitable as a db_connection_callback
4430            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
4431            db_connection_callback of the application's OpenSession method
4432    
4433    
4434    2003-08-25  Bernhard Herzog  <[email protected]>
4435    
4436            Basic loading of sessions containing postgis connections:
4437    
4438            * Thuban/Model/load.py (LoadError): Add doc-string
4439            (LoadCancelled): New exception class to indicate a cancelled load
4440            (SessionLoader.__init__): Add the db_connection_callback parameter
4441            which will be used by the loader to get updated parameters and a
4442            password for a database connection
4443            (SessionLoader.__init__): Add the new XML elements to the
4444            dispatchers dictionary
4445            (SessionLoader.check_attrs): Two new conversions, ascii to convert
4446            to a byte-string object and idref as a generic id reference
4447            (SessionLoader.start_dbconnection)
4448            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
4449            elements
4450            (load_session): Add the db_connection_callback to pass through the
4451            SessionLoader
4452    
4453            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
4454            New classes to test loading of sessions with postgis database
4455            connections.
4456    
4457    2003-08-25  Bernhard Herzog  <[email protected]>
4458    
4459            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
4460            replace it and the comment with __BuildDate__ by the Source: and
4461            Id: cvs keywords as used in the other files.
4462    
4463    2003-08-25  Bernhard Herzog  <[email protected]>
4464    
4465            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
4466            LoadError when a required attribute is missing. The code used to
4467            be commented out for some reason, but probably should have been
4468            active.
4469    
4470            * test/test_load.py (TestLoadError.test): Test the message in the
4471            LoadError too to make sure it really is about the missing
4472            attribute
4473    
4474    2003-08-22  Bernhard Herzog  <[email protected]>
4475    
4476            * test/test_save.py (SaveSessionTest.test_dbf_table)
4477            (SaveSessionTest.test_joined_table): Add XML validation tests.
4478    
4479    2003-08-22  Bernhard Herzog  <[email protected]>
4480    
4481            Implement saving a session with a postgis connection
4482    
4483            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
4484            elements for database connections and shapestores using db
4485            connections
4486            (session): Add the dbconnections to the content model
4487    
4488            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
4489            Write the db connections
4490            (SessionSaver.write_session): Call write_db_connections to write
4491            the connection before the data sources
4492            (SessionSaver.write_data_containers): Handle postgis shapestores
4493    
4494            * test/test_save.py (SaveSessionTest.thubanids)
4495            (SaveSessionTest.thubanidrefs): Update for new DTD
4496            (SaveSessionTest.test_save_postgis): New. Test saving a session
4497            with postgis connections
4498    
4499            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
4500            (PostGISTable.TableName): New accessor methods for the connection
4501            and table name
4502    
4503            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
4504            (TestPostGISTable.test_dbname): New methods to test the new
4505            PostGISConnection methods
4506    
4507    2003-08-22  Bernhard Herzog  <[email protected]>
4508    
4509            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
4510            for exceptions occurring when establishing a Database connection
4511            (PostGISConnection.connect): Catch psycopg.OperationalError during
4512            connects and raise ConnectionError.
4513    
4514            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
4515            tests for database exceptions
4516    
4517    2003-08-22  Bernhard Herzog  <[email protected]>
4518    
4519            Prepare the test suite for tests with required authentication
4520    
4521            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
4522            variables with two predefined users/passwords, one for the admin
4523            and one for a non-privileged user.
4524            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
4525            the non-privileged user to the database and set the admin password
4526            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
4527            Better error reporting
4528            (PostgreSQLServer.connection_params)
4529            (PostgreSQLServer.connection_string): New methods to return
4530            information about how to connect to the server
4531            (PostgreSQLServer.execute_sql): New. Convenience method to execute
4532            SQL statements
4533            (PostgreSQLServer.require_authentication): Toggle whether the
4534            server requires authentication
4535            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
4536            Add or alter users
4537            (PostGISDatabase.initdb): Pass the admin name one the
4538            subprocesses' command lines. Grant select rights on
4539            geometry_columns to everybody.
4540            (upload_shapefile): Use the admin name and password when
4541            connecting. Grant select rights on the new table to everybody.
4542    
4543            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
4544            server's new methods to get the connection parameters.
4545    
4546            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
4547            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
4548            server's new methods to get the connection parameters.
4549    
4550            * test/test_postgis_db.py
4551            (TestPostGISConnection.test_gis_tables_empty)
4552            (TestPostGISConnection.test_gis_tables_non_empty)
4553            (PostGISStaticTests.setUp): Use the server's new methods to get
4554            the connection parameters.
4555    
4556    2003-08-22  Bernhard Herzog  <[email protected]>
4557    
4558            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
4559    
4560            * Thuban/version.py: Add psycopg version
4561    
4562            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
4563            version of the psycopg module
4564    
4565    2003-08-22  Bernhard Herzog  <[email protected]>
4566    
4567            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
4568            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
4569            at the moment. The functionality should probably be implemented
4570            some time, though.
4571            (DBFrame.OnRemove): Display a message if the connection can't be
4572            removed because it's still in use.
4573    
4574    2003-08-22  Jan-Oliver Wagner <[email protected]>
4575    
4576            * Thuban/UI/about.py (About.__init__): split up the huge about
4577            text into elements/lists for easier translation. This fixes bug
4578            https://intevation.de/rt/webrt?serial_num=2058
4579            Also, made some forgotten string available for the i18n.
4580    
4581    2003-08-21  Bernhard Herzog  <[email protected]>
4582    
4583            Make postgis support really optional including insensitive menu
4584            items.
4585    
4586            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
4587            whether the postgis is supported.
4588    
4589            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
4590            to make postgis support optional
4591    
4592            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
4593            version of Thuban.Model.postgisdb.has_postgis_support
4594            (database_management command): Make it only sensitive if postgis
4595            is supported.
4596    
4597    2003-08-21  Jan-Oliver Wagner <[email protected]>
4598    
4599            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
4600            (section Adding and Removing Layers): Added text and described
4601            multi-selection.
4602            (chapter Extensions): New.
4603    
4604    2003-08-21  Jan-Oliver Wagner <[email protected]>
4605    
4606            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
4607            settings to allow multiple files to load into the map.
4608            Also reduced selection to *.shp as a default.
4609    
4610    2003-08-20  Bernhard Herzog  <[email protected]>
4611    
4612            Add dialogs and commands to open database connections and add
4613            database layers.
4614    
4615            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
4616            method to open the database connection management dialog
4617            (MainWindow.AddDBLayer): New method to add a layer from a database
4618            (_has_dbconnections): New helper function to use for sensitivity
4619            (database_management command, layer_add_db command): New commands
4620            that call the above new methods.
4621            (main_menu): Add the new commands to the menu.
4622    
4623            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
4624            (PostGISConnection.connect): Establish the actual connection in a
4625            separate method and call it in __init__. This makes it easier to
4626            override the behavior in test cases
4627            (PostGISConnection.BriefDescription): New method to return a brief
4628            description for use in dialogs.
4629    
4630            * test/test_postgis_db.py (NonConnection): DB connection that
4631            doesn't actually connect
4632            (TestBriefDescription): New class with tests for the new
4633            BriefDescription method
4634    
4635    2003-08-19  Jan-Oliver Wagner <[email protected]>
4636    
4637            Moved anything from extensions to libraries.
4638    
4639            * libraries: New.
4640    
4641            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
4642    
4643            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
4644            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
4645            been moved here from thuban/extensions/pyprojection/
4646            See there in the Attic for the older history.
4647    
4648            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
4649            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
4650            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
4651            have been moved here from thuban/extensions/pyshapelib/
4652            See there in the Attic for the older history.
4653    
4654            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
4655            files have been moved here from thuban/extensions/shapelib/
4656            See there in the Attic for the older history.
4657    
4658            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4659            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
4660            thuban/extensions/thuban/
4661            See there in the Attic for the older history.
4662    
4663            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
4664    
4665            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
4666            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
4667    
4668            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
4669            Moved to libraries/shapelib.
4670    
4671            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
4672            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
4673            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
4674            Moved to libraries/pyshapelib.
4675    
4676            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
4677            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
4678            Moved to libraries/pyprojection.
4679    
4680            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
4681    
4682            * extensions: Removed.
4683    
4684    2003-08-19  Bernhard Herzog  <[email protected]>
4685    
4686            * test/test_viewport.py (ViewPortTest): We don't use the
4687            facilities of FileTestMixin so don't derive from it.
4688            (TestViewportWithPostGIS): New class with tests for using a
4689            viewport on a map with postgis layers.
4690    
4691    2003-08-19  Bernhard Herzog  <[email protected]>
4692    
4693            Add the db connection management to the session.
4694    
4695            * Thuban/Model/session.py (Session.__init__): New instance
4696            variable db_connections
4697            (Session.AddDBConnection, Session.DBConnections)
4698            (Session.HasDBConnections, Session.CanRemoveDBConnection)
4699            (Session.RemoveDBConnection): New methods to manage and query the
4700            db connections managed by the session
4701            (Session.OpenDBShapeStore): New method to open a shapestore from a
4702            db connection
4703    
4704            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
4705            messages for the db connection handling in the session
4706    
4707            * test/test_postgis_session.py: New. test cases for the session's
4708            db connection handling with postgis connections
4709    
4710    2003-08-19  Bernhard Herzog  <[email protected]>
4711    
4712            Add very basic postgis database support and the corresponding test
4713            cases. The test cases require a PostgreSQL + postgis installation
4714            but no existing database. The database will be created
4715            automatically by the test cases
4716    
4717            * test/README: Add note about skipped tests and the requirements
4718            of the postgis tests.
4719    
4720            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
4721    
4722            * test/test_postgis_db.py: New. Test cases for the postgis
4723            support.
4724    
4725            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
4726            format
4727    
4728            * test/test_wellknowntext.py: New. Test cases for the
4729            wellknowntext parser
4730    
4731            * test/postgissupport.py: New. Support module for tests involving
4732            a postgis database.
4733    
4734            * test/support.py (execute_as_testsuite): Shut down the postmaster
4735            if it's still running after the tests
4736    
4737            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
4738            well known text format
4739    
4740    2003-08-19  Jan-Oliver Wagner <[email protected]>
4741    
4742            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
4743            message dialog.
4744    
4745    2003-08-18  Bernhard Herzog  <[email protected]>
4746    
4747            * test/support.py (ThubanTestResult.printErrors): Indent the
4748            reason for the skips in the output to make it a bit more readable.
4749            (execute_as_testsuite): New helper function to run a test suite
4750            and print some more information.
4751            (run_tests): Use execute_as_testsuite to run the tests
4752    
4753            * test/runtests.py (main): Use execute_as_testsuite to run the
4754            tests
4755    
4756    2003-08-18  Bernhard Herzog  <[email protected]>
4757    
4758            Fix some bugs in Thuban and the test suite that were uncovered by
4759            changes introduced in Python 2.3:
4760    
4761            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
4762            filename is an absolute name
4763    
4764            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
4765            filename is an absolute name
4766    
4767            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
4768            unique filename to save to and use the correct relative filename
4769            in the expected output.
4770            (SaveSessionTest.test_dbf_table): Use the correct relative
4771            filename in the expected output.
4772    
4773            * test/test_layer.py (TestLayer.test_raster_layer): Update the
4774            test to check whether the filename is absolute.
4775    
4776    2003-08-18  Jan-Oliver Wagner <[email protected]>
4777    
4778            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
4779    
4780    2003-08-15  Bernhard Herzog  <[email protected]>
4781    
4782            Change the way shapes are returned by a shape store. The
4783            ShapesInRegion method returns an iterator over actual shape
4784            objects instead of a list of shape ids.
4785    
4786            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
4787            id.
4788            (ShapefileStore.ShapesInRegion): Return an iterator over the
4789            shapes which yields shape objects instead of returning a list of
4790            shape ids
4791            (ShapefileStore.AllShapes): New. Return an iterator over all
4792            shapes in the shape store
4793            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
4794    
4795            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
4796            doc-string.
4797    
4798            * Thuban/UI/baserenderer.py
4799            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
4800            layer_shapes and make it return an iterator containg shapes
4801            instead of a list of ids.
4802            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
4803            layer_shapes() change
4804    
4805            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
4806            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
4807    
4808            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
4809            changes in the ShapesInRegion return value.
4810            (ViewPort._get_hit_tester): Remove commented out code
4811    
4812            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
4813            new return value.
4814            (SimpleShapeStore.AllShapes): New. Implement this method too.
4815    
4816            * test/test_layer.py (TestLayer.test_arc_layer)
4817            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
4818            (TestLayer.test_point_layer_with_projection)
4819            (TestLayer.test_derived_store): Adapt to changes in the
4820            ShapesInRegion return value.
4821    
4822            * test/test_shapefilestore.py
4823            (TestShapefileStoreArc.test_shapes_in_region)
4824            (TestShapefileStorePolygon.test_shapes_in_region)
4825            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
4826            in the ShapesInRegion return value.
4827            (TestShapefileStorePoint.test_all_shapes)
4828            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
4829            methods
4830    
4831            * test/test_derivedshapestore.py
4832            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
4833            the ShapesInRegion return value.
4834            (TestDerivedShapeStore.test_all_shapes)
4835            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
4836            methods
4837    
4838    2003-08-15  Bernhard Herzog  <[email protected]>
4839    
4840            Make the renderers deal correctly with raw vs. python level
4841            representation of shape geometries
4842    
4843            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
4844            Return a flag useraw in addition to the callable and the parameter
4845            to indicate whether the callable can deal with the raw shape data
4846            or uses the higher level python lists of coordinates. The callable
4847            now should accept either the raw data or the return value of the
4848            shape's Points() method.
4849            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
4850            change
4851            (BaseRenderer.projected_points): Instead of the shape id use the
4852            points list as parameter.
4853            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
4854            (BaseRenderer.draw_point_shape): Adapt to projected_points()
4855            change and accept the points list as parameter instead of the
4856            shape id.
4857    
4858            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
4859            the useraw flag as required by the BaseRenderer
4860            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
4861            changes.
4862    
4863            * test/test_baserenderer.py
4864            (TestBaseRenderer.test_point_with_classification): New test for
4865            rendering a map with classifications.
4866    
4867    2003-08-15  Bernhard Herzog  <[email protected]>
4868    
4869            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
4870            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
4871            (ViewPort._get_hit_tester, ViewPort.projected_points)
4872            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
4873            (ViewPort._find_label_at): Split the find_shape_at method into
4874            several new methods and use the functions in the hit-test module.
4875    
4876            * Thuban/UI/hittest.py: New module with Python-level hit-testing
4877            functions
4878    
4879            * test/test_hittest.py: New. Test for the new hittest module
4880    
4881    2003-08-15  Bernhard Herzog  <[email protected]>
4882    
4883            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
4884            projection to all corners of the bounding box to get a better
4885            approximation of the projected bounding box
4886    
4887            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
4888            New. Test coordinate handling of a layer with a projection.
4889            Catches the bug fixed in Layer.ShapesInRegion
4890    
4891    2003-08-15  Bernhard Herzog  <[email protected]>
4892    
4893            Move some of the mock objects in test_baserenderer into their own
4894            module so they can easily be used from other tests
4895    
4896            * test/mockgeo.py: New test helper module with some mock objects
4897            for geometry related things like shapes, shapestores and
4898            projections.
4899    
4900            * test/test_mockgeo.py: New. Tests for the new helper module
4901    
4902            * test/test_baserenderer.py: Some of the mock-objects are in
4903            mockgeo now.
4904    
4905    2003-08-12  Jan-Oliver Wagner <[email protected]>
4906    
4907            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
4908    
4909    2003-08-12  Bernhard Herzog  <[email protected]>
4910    
4911            * po/de.po: New. German translations by Bjoern Broscheit
4912    
4913    2003-08-12  Bernhard Herzog  <[email protected]>
4914    
4915            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
4916            strings have to be one string literal.
4917    
4918    2003-08-11  Bernhard Herzog  <[email protected]>
4919    
4920            * test/support.py (FloatComparisonMixin.assertPointListEquals):
4921            New. This method was used in various derived classes, but it's
4922            better to have it here.
4923    
4924            * test/test_shapefilestore.py
4925            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
4926            FloatComparisonMixin
4927    
4928            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
4929            It's now in FloatComparisonMixin
4930    
4931            * test/test_derivedshapestore.py
4932            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
4933            in FloatComparisonMixin
4934    
4935    2003-08-11  Bernhard Herzog  <[email protected]>
4936    
4937            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
4938            error message
4939    
4940    2003-08-08  Jan-Oliver Wagner <[email protected]>
4941    
4942            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
4943            with version number.
4944            Changed title to reflect version number of Thuban.
4945    
4946    2003-08-08  Jan-Oliver Wagner <[email protected]>
4947    
4948            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
4949            the list corresponds to the "About" web page.
4950    
4951    2003-08-08  Bernhard Herzog  <[email protected]>
4952    
4953            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
4954            Make sure translated strings are recognized as one string literal.
4955    
4956            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
4957            Make sure translated strings are recognized as one string literal.
4958    
4959            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
4960            translated strings are recognized as one string literal.
4961    
4962            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
4963            sure translated strings are recognized as one string literal.
4964    
4965    2003-08-07  Bernhard Herzog  <[email protected]>
4966    
4967            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
4968            Simply delegates to the original shapestore.
4969    
4970            * test/test_derivedshapestore.py
4971            (TestDerivedShapeStore.test_raw_format): New. Test case for
4972            DerivedShapeStore.RawShapeFormat
4973    
4974    2003-08-07  Bernhard Herzog  <[email protected]>
4975    
4976            Add raw data interface to shape objects.
4977    
4978            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
4979            class to ShapefileShape which now holds shapefile specific
4980            information.
4981            (ShapefileShape.compute_bbox): Simplified to not cache any
4982            information. The way this method is used that shouldn't matter
4983            performance wise.
4984            (ShapefileShape.RawData): New. Return the shapeid which is the raw
4985            data format for shapes from shapefiles.
4986            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
4987            in the shape objects returned by a shapestore. For a
4988            ShapefileStore this is always RAW_SHAPEFILE.
4989            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
4990            method.
4991    
4992            * test/test_shapefilestore.py
4993            (TestShapefileStore.test_raw_format): New test to test the raw
4994            format feature of shapes.
4995    
4996            * Thuban/Model/layer.py: Remove the unused import of Shape from
4997            data. It was only there for interface compatibility but it's not
4998            used inside of Thuban and the generic Shape class has gone away.
4999    
5000            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
5001            the raw data format and only use an optimized version of its a
5002            shapefile.
5003    
5004    2003-08-07  Bernhard Herzog  <[email protected]>
5005    
5006            * test/test_baserenderer.py (SimpleShape): Shape class for the
5007            tests.
5008            (SimpleShapeStore.Shape): Use SimpleShape instead of
5009            Thuban.Model.data.Shape to make the tests independed of the coming
5010            changes.
5011    
5012    2003-08-07  Bernhard Herzog  <[email protected]>
5013    
5014            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
5015            (ThubanTestProgram): New classes that extend the respective
5016            classes from unittest. These new version support skipping tests
5017            under certain expected conditions. In the Thuban test suite we
5018            uses this for tests that require the optional gdal support.
5019            (run_tests): Use ThubanTestProgram instead of the unittest.main()
5020    
5021            * test/runtests.py (main): Use the new ThubanTestRunner instead of
5022            the normal one from unittest
5023    
5024            * test/test_layer.py (TestLayer.test_raster_layer): If this test
5025            is not run because gdal support isn't available report this to the
5026            runner.
5027    
5028            * test/test_baserenderer.py
5029            (TestBaseRenderer.test_raster_no_projection): Do not run this test
5030            if gdal support isn't available and report this to the runner.
5031    
5032    2003-08-06  Bernhard Herzog  <[email protected]>
5033    
5034            Rearrange the renderers a bit, partly in preparation for changes
5035            required for the postgis merge, partly to make it more testable.
5036            Also make the representation of coordinates in Shapes more
5037            consistent.
5038    
5039            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
5040            this class is now in BaseRenderer. This class is now practically
5041            only a specialization of BaseRenderer for rendering to an actual
5042            wx DC.
5043            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
5044            to get the shapetype specific rendering functions.
5045    
5046            * Thuban/UI/baserenderer.py: New file with the basic rendering
5047            logic. The code in this file is completely independend of wx.
5048            (BaseRenderer): Class with the basic rendering logic
5049    
5050            * test/test_baserenderer.py: New. Test cases for BaseRenderer
5051    
5052            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
5053            error_on_redraw to guard agains endless loops and stack overflows
5054            when there's a bug in the rendering code that raises exceptions.
5055            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
5056            rendering into a separate method _do_redraw so that error handling
5057            is a bit easier. When an exception occurs, set error_on_redraw to
5058            true. When it's true on entry to OnIdle do nothing and return
5059            immediately.
5060    
5061            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
5062            Shape object will always have the coordinates as a list of list of
5063            coordinate pairs (tuples).
5064            (Shape.compute_bbox): Adapt to new representation.
5065    
5066            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
5067            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
5068            Shape objects.
5069    
5070            * test/test_shapefilestore.py
5071            (ShapefileStoreTests.assertFloatTuplesEqual)
5072            (ShapefileStoreTests.assertPointListEquals): Rename to
5073            assertPointListEquals and change purpose to checking equality of
5074            the lists returned by Shape.Points().
5075            (TestShapefileStoreArc.test_shape)
5076            (TestShapefileStorePolygon.test_shape)
5077            (TestShapefileStorePoint.test_shape): Use the new
5078            assertPointListEquals instead of assertFloatTuplesEqual
5079    
5080            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
5081            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
5082            and change purpose to checking equality of the lists returned by
5083            Shape.Points().
5084            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
5085            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
5086            (TestLayer.test_derived_store): Use the new assertPointListEquals
5087            instead of assertFloatTuplesEqual
5088    
5089            * test/test_derivedshapestore.py
5090            (TestDerivedShapeStore.assertFloatTuplesEqual)
5091            (TestDerivedShapeStore.assertPointListEquals): Rename to
5092            assertPointListEquals and change purpose to checking equality of
5093            the lists returned by Shape.Points().
5094            (TestDerivedShapeStore.test_shape): Use the new
5095            assertPointListEquals instead of assertFloatTuplesEqual
5096    
5097    2003-08-06  Jan-Oliver Wagner <[email protected]>
5098    
5099            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
5100            a bounding box. A dialog is raised in case, no bounding box
5101            is found. This fixes bug #2043:
5102            https://intevation.de/rt/webrt?serial_num=2043
5103    
5104    2003-08-05  Bernhard Herzog  <[email protected]>
5105    
5106            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
5107            object look like a Color instantiation. Formerly it looked like a
5108            tuple.
5109    
5110            * test/test_color.py (TestColor.test_repr)
5111            (TestColor.test_equality, TestColor.test_inequality): New. test
5112            some more apects of the Color class
5113            (TestTransparent.test_repr, TestTransparent.test_hex)
5114            (TestTransparent.test_equality): New. Test cases for the
5115            Transparent object.
5116    
5117    2003-08-04  Jan-Oliver Wagner <[email protected]>
5118    
5119            * Doc/manual/thuban-manual.xml: a number of small improvements.
5120            The resulting file is the version submitted for GREAT-ER II.
5121    
5122    2003-08-01  Bernhard Herzog  <[email protected]>
5123    
5124            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
5125            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
5126            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
5127    
5128            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
5129            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
5130            (ThubanEndBusyCursor): Add doc-strings
5131    
5132    2003-08-01  Bernhard Herzog  <[email protected]>
5133    
5134            First step towards PostGIS integration. More abstraction by movin
5135            more code from the layer to the shapestore. More methods of the
5136            layer are now simply delegated to the equivalent method of the
5137            shapestore. The SHAPETYPE_* constants are now in data not in
5138            layer.
5139    
5140            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5141            (SHAPETYPE_POINT, Shape): Move these constants and classes from
5142            layer.py to data.py
5143            (ShapefileStore.__init__): More Initialization for the new methods
5144            and functionality.
5145            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
5146            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
5147            (ShapefileStore.Shape): New methods that were formerly implemented
5148            in the layer.
5149            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
5150            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
5151            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
5152            equivalents of the new shape methods. These versions are simply
5153            delegated to the original shapstore.
5154    
5155            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
5156            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
5157            (Layer.SetShapeStore): Removed the initializatin of instance
5158            variables that were needed for the stuff that's now in
5159            ShapefileStore
5160            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
5161            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
5162            shapestore.
5163    
5164            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
5165            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
5166            instead of layer.
5167    
5168            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
5169    
5170            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
5171    
5172            * test/test_layer.py: Import the SHAPETYPE_* constants from data
5173            instead of layer.
5174            (TestLayer.test_derived_store): Remove the test for the exception
5175            when instantiating the DerivedShapeStore with an incompatible
5176            table which is now in test_derivedshapestore.py. Add some more
5177            tests of the layer methods to determine whether they work for a
5178            DerivedShapeStore as well.
5179    
5180    2003-07-31  Jonathan Coles   <[email protected]>
5181    
5182            * Doc/manual/thuban-manual.xml: Fix the list of required packages
5183            by just listing the name and where they can be found.
5184    
5185    2003-07-31  Frank Koormann   <[email protected]>
5186    
5187            * Doc/manual/thuban-manual.xml:
5188            Changed the screenshot elements to figure.
5189            Changed some variablelist elements to itemizedlist.
5190            Added section on GDAL formats.
5191    
5192    2003-07-31  Jonathan Coles   <[email protected]>
5193    
5194            * Doc/manual/thuban-manual.xml: Added a few sentences about
5195            the Fix Border Color option when generating classes.
5196    
5197    2003-07-30  Jonathan Coles   <[email protected]>
5198    
5199            * Thuban/Model/classgen.py: Add docstrings. Rename specific
5200            Ramp instances to use lower_case_style.
5201    
5202            * Thuban/UI/classgen.py: Use renamed Ramp instances.
5203            
5204            * Thuban/UI/classifier.py: Add docstrings.
5205    
5206            * Thuban/UI/dock.py: Add docstrings.
5207    
5208            * test/test_classgen.py: Use renamed Ramp instances.
5209    
5210    2003-07-30  Bernhard Herzog  <[email protected]>
5211    
5212            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
5213            was never used in Thuban.
5214    
5215    2003-07-30  Bernhard Herzog  <[email protected]>
5216    
5217            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
5218            method directly instead of going through the transient_table
5219            method. This faster because transient_table may force the copy of
5220            a DBF file into the transient database and setting a table's title
5221            doesnm't affect the title of the associated transient table, so
5222            this fixes RT #2042
5223    
5224            * Thuban/UI/main.py (__version__): Don't import the already
5225            removed show_exception_dialog.
5226    
5227    2003-07-29  Jonathan Coles   <[email protected]>
5228    
5229            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5230            Put back this method and remove the equivalent function since we
5231            are setting the exception hook from within this class (OnInit).
5232    
5233    2003-07-29  Jonathan Coles   <[email protected]>
5234    
5235            * Doc/manual/images/5_2_custom_ramp.png,
5236            Doc/manual/images/5_2_quantiles.png,
5237            Doc/manual/images/5_2_uniform_dist.png,
5238            Doc/manual/images/5_2_unique_values.png,
5239            Doc/manual/images/8_int_error.png: New screen shots.
5240    
5241            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
5242            some points, and added more screen shots.
5243    
5244    2003-07-29  Bernhard Herzog  <[email protected]>
5245    
5246            * Thuban/Model/data.py: Remove the now unused import of warnings
5247    
5248    2003-07-29  Bernhard Herzog  <[email protected]>
5249    
5250            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
5251            deprecated since before the 0.8 release and isn't used in Thuban
5252            itself anymore.
5253    
5254            * Thuban/Model/transientdb.py: Remove some unnecessary imports
5255    
5256    2003-07-29  Jonathan Coles   <[email protected]>
5257    
5258            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
5259            python exception hook here so that we are sure to catch any
5260            Thuban exception that happen during initialization.
5261    
5262            * Thuban/UI/main.py (main): Don't set the exception hook here,
5263            it will get set in ThubanApplication.OnInit.
5264    
5265    2003-07-29  Jonathan Coles   <[email protected]>
5266                                                                                
5267            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5268            Removed and called it show_exception_dialog() so that the exception
5269            handler can be set before the class is created.
5270                                                                                
5271            * Thuban/UI/main.py (main): Install the exception handler before
5272            a ThubanApplication is created.
5273                                                                                    
5274    2003-07-29  Bernhard Herzog  <[email protected]>
5275    
5276            * po/it.po: New. Italian translation by Maurizio Napolitano
5277    
5278            * po/ru.po: New. Russian translation by Alex Shevlakov
5279    
5280    2003-07-29  Frank Koormann   <[email protected]>
5281    
5282            * Doc/manual/thuban-manual.xml: Extended section on supported
5283            projections.
5284            
5285    2003-07-29  Frank Koormann   <[email protected]>
5286    
5287            * Doc/manual/thuban-manual.xml: gaspell-checked.
5288    
5289    2003-07-29  Jonathan Coles   <[email protected]>
5290    
5291            * Doc/manual/images/3_5_legend.png: Added border to improve look
5292            on white background.
5293    
5294    2003-07-29  Jonathan Coles   <[email protected]>
5295    
5296            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
5297            descriptions for the legend toolbar.
5298    
5299            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
5300            cursor from dialog box.
5301    
5302    2003-07-28  Jonathan Coles   <[email protected]>
5303    
5304            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
5305    
5306            * Doc/manual/images/2_4_session_tree.png,
5307            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
5308            Doc/manual/images/4_2_layer_properties.png,
5309            Doc/manual/images/4_2_raster_layer_properties.png,
5310            Doc/manual/images/5_3_genclass.png,
5311            Doc/manual/images/5_classification.png,
5312            Doc/manual/images/6_projection.png,
5313            Doc/manual/images/7_1_table_view.png,
5314            Doc/manual/images/7_2_5_join.png: New screenshots.
5315    
5316    2003-07-24  Jonathan Coles   <[email protected]>
5317    
5318            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
5319    
5320    2003-07-24  Jonathan Coles   <[email protected]>
5321    
5322            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
5323            chapter on Layer Management.
5324    
5325            * Doc/manual/Makefile: New. Makefile to generate all formats for the
5326            manual and images.
5327    
5328    2003-07-24  Bernhard Herzog  <[email protected]>
5329    
5330            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
5331            it annoys lintian which warns about these files not being
5332            executable. The #! isn't necessary here since if you absolutely
5333            must execute them you can always say "python <filename>".
5334    
5335            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
5336            superfluous code to set brush and pen for point shapes
5337    
5338            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
5339            belong in viewport anyway
5340    
5341    2003-07-24  Frank Koormann   <[email protected]>
5342    
5343            * Doc/manual/thuban-manual.xml: Added section on table management.
5344    
5345    2003-07-24  Bernhard Herzog  <[email protected]>
5346    
5347            * test/runtests.py (main): Recognize the long "verbose" option
5348            correctly.
5349    
5350    2003-07-22  Jonathan Coles   <[email protected]>
5351    
5352            * Doc/manual/thuban-manual.xml: Continue to write first revision
5353            of the manual.
5354    
5355            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
5356            with Begin/EndDrawing() calls to ensure we aren't doing to
5357            many updates to the dc during rendering.
5358            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
5359            a pen and brush argument so they need to be passed to the function.
5360    
5361            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
5362            Calculates the minimum and maximum scale values. Factored out
5363            of set_view_transform so that it could be used to zoom all the
5364            way into a single point.
5365            (ViewPort.set_view_transform): Call calc_min_max_scales().
5366            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
5367            if only a single point is selected.
5368    
5369            * Doc/manual/images/1_2_legend_close.png,
5370            Doc/manual/images/1_2_legend_dock.png,
5371            Doc/manual/images/1_2_mainwindow.png,
5372            Doc/manual/images/1_2_mainwindow.ps,
5373            Doc/manual/images/1_2_mainwindow.sk,
5374            Doc/manual/images/3_2_fullextent.png,
5375            Doc/manual/images/3_2_fulllayerextent.png,
5376            Doc/manual/images/3_2_fullshapeextent.png,
5377            Doc/manual/images/3_2_pan.png,
5378            Doc/manual/images/3_2_zoomin.png,
5379            Doc/manual/images/3_2_zoomout.png,
5380            Doc/manual/images/3_3_identify.png,
5381            Doc/manual/images/3_3_label.png,
5382            Doc/manual/images/3_5_invisible.png,
5383            Doc/manual/images/3_5_movedown.png,
5384            Doc/manual/images/3_5_moveup.png,
5385            Doc/manual/images/3_5_props.png,
5386            Doc/manual/images/3_5_tobottom.png,
5387            Doc/manual/images/3_5_totop.png,
5388            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
5389    
5390    2003-07-18  Bernhard Herzog  <[email protected]>
5391    
5392            * Thuban/UI/messages.py (MAP_REPLACED): New message.
5393    
5394            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
5395            after the new map has been assigned
5396    
5397            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
5398            Delegate MAP_REPLACED to the canvas too
5399            (MainWindow.prepare_new_session): Removed. Thanks to the new
5400            MAP_REPLACED message it's no longer needed
5401            (MainWindow.OpenSession, MainWindow.NewSession):
5402            prepare_new_session has been removed.
5403    
5404            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
5405            MAP_REPLACED so that we can close the dialog if a new map is set.
5406            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
5407            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
5408            dialog
5409    
5410            * test/test_viewport.py (SimpleViewPortTest)
5411            (SimpleViewPortTest.test_default_size): Add doc-strings
5412            (ViewPortTest.setUp): Bind map to self.map so we can use it in
5413            tests. Subscribe to MAP_REPLACED messages too.
5414            (ViewPortTest.tearDown): No need to explicitly unsubscribe
5415            (ViewPortTest.test_set_map): New test for the SetMap method.
5416    
5417    2003-07-18  Bernhard Herzog  <[email protected]>
5418    
5419            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
5420            Move this test from ViewPortTest.setUp to this new separate test
5421            case. setUp is not the place for the actual tests.
5422            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
5423            more of the test from setUp to the new test test_inital_settings.
5424            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
5425            (ViewPortTest.test_proj_conv): Split test_proj_conv into
5426            test_win_to_proj and test_proj_to_win and make the tests easier to
5427            understand
5428            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
5429            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
5430            (ViewPortTest.test_unprojected_rect_around_point)
5431            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
5432            Reformat to increase readability.
5433    
5434    2003-07-18  Bernhard Herzog  <[email protected]>
5435    
5436            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
5437    
5438    2003-07-18  Bernhard Herzog  <[email protected]>
5439    
5440            * test/runtests.py: The test suite can now be run without an X
5441            connection. To make sure this remains true, remove the DISPLAY
5442            environment variable so that an error occurs if the wxGTK is
5443            imported accidentally
5444    
5445    2003-07-18  Bernhard Herzog  <[email protected]>
5446    
5447            * Thuban/UI/viewport.py: Remove unused imports
5448    
5449            * Thuban/UI/view.py: Remove unused imports
5450    
5451    2003-07-18  Bernhard Herzog  <[email protected]>
5452    
5453            * test/test_export.py Remove unused imports. The OutputTransform
5454            function is now in viewport.py and is called output_transform
5455            (TestScalebar.test_output_transform)
5456            (TestScalebar.test_OutputTransform): Renamed to
5457            test_output_transform and updated to use output_transform instead
5458            of OutputTransform
5459    
5460            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
5461            renamed.
5462            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
5463            renamed to output_transform
5464    
5465            * Thuban/UI/viewport.py (OutputTransform, output_transform):
5466            Rename to output_transform
5467    
5468    2003-07-18  Bernhard Herzog  <[email protected]>
5469    
5470            * Thuban/Model/layer.py (Layer.__init__): Rename
5471            classificationField to classificatin_column and init it here so
5472            that it can be used in SetClassificationColumn
5473            (Layer.GetClassificationColumn, Layer.GetClassificationField):
5474            Rename to GetClassificationColumn.
5475            (Layer.SetClassificationColumn, Layer.SetClassificationField):
5476            Rename to SetClassificationColumn and issue a LAYER_CHANGED
5477            message if the column changes.
5478            (Layer._classification_changed, Layer.ClassChanged): Rename to
5479            _classification_changed. Update the callers.
5480            (Layer.SetShapeStore): Further field->column renames.
5481    
5482            * Thuban/Model/load.py (SessionLoader.start_classification)
5483            (SessionLoader.start_clpoint): Updates because of
5484            field->column method name changes in the Layer class
5485    
5486            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
5487            because of field->column method name changes in the Layer class
5488    
5489            * Thuban/UI/classifier.py (Classifier.__init__)
5490            (Classifier._OnTry, Classifier._OnRevert): Updates because of
5491            field->column method name changes in the Layer class
5492    
5493            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
5494            because of field->column method name changes in the Layer class
5495    
5496            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
5497            of field->column method name changes in the Layer class
5498    
5499            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
5500            (SaveSessionTest.testClassifiedLayer): Update because of
5501            field->column method name changes in the Layer class
5502    
5503            * test/test_layer.py (SetShapeStoreTests.setUp)
5504            (SetShapeStoreTests.test_sanity): Update because of field->column
5505            method name changes in the Layer class
5506            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
5507            (TestLayerModification.test_sanity)
5508            (TestLayerModification.test_initial_settings): remove unsued code
5509            and rename to test_sanity.
5510            (TestLayerModification.test_set_classification): New test for
5511            SetClassification and SetClassificationField.
5512    
5513    2003-07-18  Bernhard Herzog  <[email protected]>
5514    
5515            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
5516            the non-fixed values as well. The old test would have accepted a
5517            fixed ramp that only returnes the fixed properties
5518    
5519    2003-07-17  Jonathan Coles   <[email protected]>
5520    
5521            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
5522            shots for the manual. The XCF file is the source image and
5523            has additional layers to support changes.
5524    
5525            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
5526    
5527            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
5528            Return both the new class and the field name.
5529    
5530            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
5531            fit the map to the window as this changes any zoom level that
5532            the user may have set.
5533    
5534    2003-07-16  Jonathan Coles   <[email protected]>
5535    
5536            * Thuban/Model/classgen.py (generate_singletons,
5537            generate_uniform_distribution, generate_quantiles): Remove
5538            fixes parameter, but maintain the same functionality by having
5539            the calling function pass a FixedRamp object for the ramp.
5540            (FixedRamp): New. Adapts a ramp to have fixed property values.
5541    
5542            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
5543            (Classification): Inherit from Publisher.
5544            (Classification.__init__): Remove the layer parameter.
5545            Classifications no longer need to have a parent layer.
5546            (Classification.GetField, Classification.GetFieldType,
5547            Classification.SetFieldInfo): Removed. The field name is stored
5548            in the layer, and the type can be retreived by calling
5549            Layer.GetFieldType().
5550            (Classification._set_layer, Classification.GetLayer): Removed.
5551            Classifications no longer have a parent layer.
5552    
5553            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
5554            classification.
5555            (Layer.SetShapeStore): Reset the classification first while
5556            we still have the old shape store to work with.
5557            (Layer.GetClassificationField, Layer.SetClassificationField):
5558            New. Method for getting/setting the field to classify on.
5559            (Layer.SetClassification): Simplified now that the layer
5560            simply has to hold a reference to the classification and not
5561            tell the classification who owns it.
5562            Fixes RTbug #2023.
5563    
5564            * Thuban/Model/load.py (SessionLoader.start_classification):
5565            Set the field name on the layer, not the classification.
5566    
5567            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
5568            classification is modified.
5569    
5570            * Thuban/Model/save.py (SessionSaver.write_classification):
5571            Get the field name and type from the layer.
5572    
5573            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
5574            parameter records to rows and add docstring. Fixes RTbug #1997.
5575    
5576            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
5577            ramp when we need to fix certain values of a ramp rather than
5578            using the old fixes parameter. Fixes RTbug #2024.
5579    
5580            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
5581            parameter.
5582            (ClassTable.Reset): Add fieldType parameter and use it, rather
5583            than asking the classification.
5584            (Classifier.__init__): Remember the original class's field
5585            and ask the layer for the field type, rather than the classification.
5586            (Classifier.__SetGridTable): Retrieve the field and field type
5587            for the table because they are not in the classification.
5588            (Classifier._OnTry, Classifier._OnRevert): Set the classification
5589            field on the layer in addition to the classification itself.
5590    
5591            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
5592            classification field from layer.
5593    
5594            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
5595            classification field from layer. Split up tests and remove
5596            *-imports. Fixes RTbug #1992.
5597    
5598            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
5599    
5600            * test/test_classification.py
5601            (TestClassification.test_classification): Remove tests for methods
5602            that no longer exist.
5603    
5604            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
5605            __init__ no longer has a field parameter, use SetClassificationField.
5606            (SetShapeStoreTests.test_sanity): Use layer object to get class
5607            field info.
5608    
5609            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
5610            SetClassificationField on layer to set class field info.
5611    
5612            * test/test_viewport.py: Renamed from test/test_view.py.
5613    
5614    2003-07-16  Jan-Oliver Wagner <[email protected]>
5615    
5616            * Doc/manual/thuban-manual.xml: Added authors and an initial
5617            coarse structure.
5618    
5619    2003-07-15  Bernhard Herzog  <[email protected]>
5620    
5621            * test/support.py (FloatComparisonMixin): This is a mix-in class
5622            and therefore should not be derived from any other class.
5623    
5624            * test/test_range.py (RangeTest): FloatComparisonMixin is a
5625            mix-in, so derive from TestCase as well.
5626    
5627    2003-07-15  Bernhard Herzog  <[email protected]>
5628    
5629            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
5630            draw_func handling a bit to remove one layer of indirection. This
5631            makes the renderer about 10% faster in the non-classifying case
5632            and the code a bit cleaner
5633            (MapRenderer.draw_point_shape): Add the pen and brush parameters
5634            and set them in the dc. Now the draw_point_shape method and
5635            wxproj's draw_polygon_shape function have basically the same
5636            signature so that both can be directly used as draw_func
5637    
5638    2003-07-15  Bernhard Herzog  <[email protected]>
5639    
5640            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
5641            string values (in addition to the labels) as UTF 8
5642    
5643            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
5644            values if the field type is string
5645    
5646            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
5647            saving a session with non-ascii string classification values.
5648    
5649            * test/test_load.py (TestClassification.file_contents)
5650            (TestClassification.test): Check for non-ascii values in string
5651            classifications
5652    
5653    2003-07-14  Jonathan Coles   <[email protected]>
5654    
5655            * test/test_view.py: New. Tests for ViewPort.
5656    
5657    2003-07-14  Frank Koormann   <[email protected]>
5658    
5659            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
5660            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
5661    
5662            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
5663            unicode strings from session file: session title, map title and
5664            projection name.
5665            
5666    2003-07-10  Jonathan Coles   <[email protected]>
5667    
5668            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
5669            drag_stop, not drag_move when the mouse is released.
5670    
5671    2003-07-10  Jonathan Coles   <[email protected]>
5672    
5673            The most important part of this is the seperation of view.py into
5674            two pieces. viewport.py now has a class called ViewPort which
5675            contains all the non-wx parts of view.py and can therefore be
5676            tested. view.py contains only the wx-specific parts and is fairly
5677            simple.
5678    
5679            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
5680            RTTbug #1992.
5681            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
5682            RTTbug #1992.
5683    
5684            * Thuban/Model/classgen.py (generate_singletons,
5685            generate_uniform_distribution, generate_quantiles):
5686            Added 'fixes' parameter so that property attributes can
5687            be held constant over the generated classification groups.
5688            (CustomRamp.GetProperties): Remove unused variables.
5689    
5690            * Thuban/Model/map.py (Map.SetProjection): Send the old
5691            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
5692            event.
5693    
5694            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
5695            parameter which is a list of records that restricts which
5696            records are saved. Fixes RTbug #1997.
5697    
5698            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
5699            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
5700    
5701            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
5702            to allow the user to fix line color/width on generated groups.
5703            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
5704            functions to optionally fix group properties.
5705    
5706            * Thuban/UI/main.py (main): Set exception hook to the
5707            ShowExceptionDialog. Fixes RTbug #1993.
5708    
5709            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
5710            the table window when it is selectd to be shown.
5711    
5712            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
5713            Export Selection button and move the export buttons underneath
5714            the table.
5715            (QueryTableFrame.UpdateStatusText): Added event argument so
5716            that it can respond to grid selection events. The status text
5717            is now updated even when the table is not associated with a
5718            layer as was previously assumed.
5719            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
5720            UpdateStatusText responds to these events.
5721            (QueryTableFrame.OnSaveAs): Renamed to doExport.
5722            (QueryTableFrame.doExport): Helper function that saves the
5723            entire table, or selected rows, to a file.
5724            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
5725            Respond to export button events and call doExport.
5726    
5727            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
5728            the function doesn't return NULL without first setting a Python
5729            Error.
5730    
5731            * test/runtests.py (main): Only print "Unknown option" for
5732            unsupported options.
5733    
5734            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
5735            optional epsilon argument to specify floating point accuracy.
5736            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
5737            for each item test.
5738    
5739            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
5740            tests for saving selected records.
5741    
5742            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5743            tests for saving selected records.
5744    
5745            * test/test_map.py (TestMapWithContents.test_set_projection):
5746            MAP_PROJECTION_CHANGED events send the old projection.
5747    
5748            * test/test_session.py
5749            (TestSessionWithContent.test_forward_map_projection):
5750            MAP_PROJECTION_CHANGED events send the old projection.
5751    
5752            * test/test_table.py (TableTest): Update tests to use non-deprecated
5753            functions.
5754    
5755    2003-07-08  Bernhard Herzog  <[email protected]>
5756    
5757            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
5758            constants in the column objects are the standard ones defined in
5759            the table module.
5760    
5761            * test/test_transientdb.py
5762            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
5763            exporting transient tables as DBF works. This should catch the bug
5764            just fixed in TransientTableBase.Width.
5765    
5766    2003-07-08  Bernhard Herzog  <[email protected]>
5767    
5768            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
5769            interpolated colors correctly.
5770    
5771            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
5772            New. Test case for the fix in classgen.py
5773    
5774    2003-07-08  Bernhard Herzog  <[email protected]>
5775    
5776            * test/runtests.py (main): Make the default output less verbose
5777            and add a verbosity option (-v) to get the old output
5778    
5779    2003-07-08  Bernhard Herzog  <[email protected]>
5780    
5781            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
5782            0.9.
5783    
5784            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
5785            New. Return the join type
5786    
5787            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
5788            DTD
5789            (SessionSaver.write_data_containers): Save the join type for
5790            joined tables
5791    
5792            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
5793            namespace
5794            (SessionLoader.start_jointable): Handle the jointype attribute
5795    
5796            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
5797            as of Thuban 0.8. These are now tests to determine whether Thuban
5798            can still read files generated by Thuban 0.8
5799    
5800            * test/test_load.py (LoadSessionTest.dtd)
5801            (TestSingleLayer.file_contents)
5802            (TestLayerVisibility.file_contents, TestLabels.file_contents)
5803            (TestLayerProjection.file_contents)
5804            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
5805            (TestJoinedTable.file_contents)
5806            (TestLoadError.file_contents): Update for new DTD
5807            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
5808            for new join type attribute
5809    
5810            * test/test_save.py (SaveSessionTest.dtd)
5811            (SaveSessionTest.testEmptySession)
5812            (SaveSessionTest.testSingleLayer)
5813            (SaveSessionTest.testLayerProjection)
5814            (SaveSessionTest.testRasterLayer)
5815            (SaveSessionTest.testClassifiedLayer)
5816            (SaveSessionTest.test_dbf_table)
5817            (SaveSessionTest.test_joined_table): Update for new DTD
5818            (SaveSessionTest.test_joined_table): Add test for new join type
5819            attribute
5820    
5821    2003-07-04  Bernhard Herzog  <[email protected]>
5822    
5823            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
5824            function for table_to_dbf
5825            (table_to_dbf): Deal with names longer than the 10 character limit
5826    
5827            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
5828            doc-string
5829            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
5830            long column names
5831    
5832    2003-07-03  Bernhard Herzog  <[email protected]>
5833    
5834            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
5835    
5836    2003-07-03  Bernhard Herzog  <[email protected]>
5837    
5838            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
5839            for the Thuban manual and README with some basic information about
5840            the manual
5841    
5842    2003-07-03  Bernhard Herzog  <[email protected]>
5843    
5844            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
5845            Update doc-string
5846            (TransientJoinedTable.create): Do not modify the column objects of
5847            the input tables in place and copy all columns of the input tables
5848            into the joined table after all.
5849    
5850            * test/test_transientdb.py
5851            (TestTransientTable.test_transient_joined_table_same_column_name):
5852            Update to reflect the new behavior
5853            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
5854            Update to reflect the new behavior
5855            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
5856            New test case for a bug which modified the column objects in place
5857    
5858    2003-07-02  Jonathan Coles   <[email protected]>
5859    
5860            * Thuban/Model/classgen.py (generate_singletons,
5861            generate_uniform_distribution, generate_quantiles,
5862            GenQuantiles0): Make sure maxValue isn't less than
5863            one, otherwise we could divide by zero.
5864    
5865            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
5866            ClassGenTest.doClassSingleTest): Call doBoundsTest to
5867            check the end classification groups against the
5868            proper property values.
5869            (ClassGenTest.doBoundsTest): New. Checks the first and
5870            last classification groups to make sure their properties
5871            are the correct upper and lower bounds for a color ramp.
5872    
5873    2003-07-02  Jonathan Coles   <[email protected]>
5874    
5875            * Thuban/Model/classgen.py (generate_singletons,
5876            generate_uniform_distribution, generate_quantiles,
5877            GenQuantiles0): The denominator was one to high when
5878            calculating the index for the ramp causing the index
5879            to never to reach one.
5880    
5881    2003-07-02  Jonathan Coles   <[email protected]>
5882    
5883            Changed the singature of ClassGroupRange.__init__ and
5884            ClassGroupRange.SetRange() so that the min/max values are
5885            passed as a tuple. This makes a better calling scheme for
5886            when a Range object is passed instead.
5887    
5888            * Thuban/Model/classgen.py: Fixed parameters to
5889            ClassGroupRange constructor.
5890    
5891            * Thuban/Model/classification.py (ClassGroupRange.__init__):
5892            Consolidate the min/max parameters into a single _range which
5893            can either be a tuple or a Range object.
5894            (ClassGroupRange.SetRange): Consolidate the min/max parameters
5895            into a single _range which can either be a tuple or a Range object.
5896    
5897            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
5898            call to ClassGroupRange constructor to use a tuple.
5899    
5900            * Thuban/Model/layer.py (Layer.SetClassification): Switch
5901            the classification instance variable to the new class
5902            before calling _set_layer otherwise subscribers to a
5903            LAYER_CHANGED event will not see any difference.
5904    
5905            * test/test_classification.py: Fix tests of ClassGroupRange
5906            so that they use the new signature.
5907    
5908            * test/test_load.py: Fix use of ClassGroupRange so that it
5909            uses the new signature.
5910    
5911            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
5912            uses the new signature.
5913    
5914            * test/test_save.py: Fix use of ClassGroupRange so that it
5915            uses the new signature.
5916    
5917    
5918    2003-07-01  Jonathan Coles   <[email protected]>
5919    
5920            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
5921            Import used objects/class from color.
5922            (generate_singletons): We don't
5923            need the numGroups parameter anymore because we are using
5924            the new ramps with GetProperties().
5925            (generate_uniform_distribution): Use new ramp method
5926            GetProperties().
5927            (generate_quantiles, GenQuantiles0): Use new ramp method
5928            GetProperties().
5929            (CustomRamp.SetNumGroups): Removed. The ramps now map
5930            a value from 0 to 1 to class properties so the number
5931            of groups is not needed ahead of time.
5932            (CustomRamp.next): Removed. CustomRamp does not support
5933            interation anymore.
5934            (CustomRamp.GetProperties): Returns a ClassGroupProperties
5935            object based on the index value from 0 to 1 that is
5936            passed to it.
5937            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
5938            Made into instances of Monochromatic class instread of
5939            deriving from it.
5940            (HotToCold.SetNumGroups): Removed. See CustomRamp.
5941            (HotToCold.next): Removed. See CustomRamp.
5942    
5943            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
5944            (Classification.SetField, Classification.SetFieldType):
5945            Replaced with SetFieldInfo.
5946            (Classification.SetFieldInfo): New. Does a better job of
5947            what SetField and SetFieldType used to do by combining
5948            their function since they should really always be done
5949            at the same time.
5950            (Classification.SetLayer): Renamed to _set_layer.
5951            (Classification._set_layer): Should only be called from
5952            Layer's SetClassification. This does not cause a recursive
5953            call as SetLayer did because we know that Layer knows about
5954            the classification.
5955    
5956            * Thuban/Model/color.py: Fixes RTbug #1971.
5957            (_Transparent): Renamed from Transparent so it doesn't
5958            conflict with the module variable.
5959            (Transparent, Black): Renamed from Color.Transparent,
5960            Color.Black so they are not class variables.
5961    
5962            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
5963            (Layer.Destroy): We don't need to call SetClassification
5964            anymore to clear out the back reference in the classifcation
5965            to the layer. It's better to set it to None using _set_layer,
5966            and we won't be creating another clas object too.
5967            (Layer.SetClassification): Classification._set_layer is not
5968            recursive so remove all the locking variables. Also clean
5969            up the code so that it remains unchanged if something fails.
5970    
5971            * Thuban/Model/load.py: Fixes RTbug #1971.
5972            (SessionLoader.start_classification): Call
5973            Classification.SetFieldInfo().
5974    
5975            * Thuban/Model/save.py: Removed import of Color which wasn't
5976            being used.
5977    
5978            * Thuban/UI/classgen.py: Fixes RTbug #1972.
5979            (ClassGenDialog.__init__): Color ramps are now instances
5980            already so we don't need to create any new objects.
5981            (ClassGenDialog.OnOK): Check for numGroups is no longer
5982            necessary because we never use it.
5983    
5984            * Thuban/UI/classifier.py: Fixes RTbug #1971.
5985            (Classifier.__BuildClassification, Classifier.__SetGridTable):
5986            Call Classification.SetFieldInfo() instead of SetFieldType.
5987    
5988            * Thuban/UI/renderer.py: Fixes RTbug #1971.
5989    
5990            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
5991            (MapCanvas.__init__): Subscribe to the idle time event. Set
5992            background color to white.
5993            (MapCanvas.OnPaint): Set a flag indicating that we should
5994            render the map during idle time. If we already have a bitmap
5995            just draw it now.
5996            (MapCanvas.OnIdle): New. Render the map only during idle time.
5997            This also fixes a problem with the busy cursor under gtk.
5998    
5999            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
6000            Fix calls to generate_singletons because the signature changed.
6001    
6002            * test/test_classification.py: Fix color references and
6003            change calls to Classification.[SetField|SetFieldType] to
6004            SetFieldInfo.
6005    
6006            * test/test_load.py: Fix color references.
6007    
6008            * test/test_load_0_2.py: Fix color references.
6009    
6010            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
6011            Change calls to Classification.[SetField|SetFieldType] to
6012            SetFieldInfo.
6013    
6014    2003-07-01  Frank Koormann   <[email protected]>
6015    
6016            MERGE from the greater-ms3 branch.
6017    
6018            * test/test_transientdb.py
6019            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
6020            New. Test join of two tables with partly equal column names.
6021    
6022            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
6023            If duplicates in left and right tables column names are found,
6024            append '_' (underscores) to the name until it is unique.
6025            Create always new internal names for the resulting table and reference
6026            columns in the join statement with <table>.<column>
6027    
6028    2003-07-01  Bernhard Herzog  <[email protected]>
6029    
6030            * test/test_transientdb.py
6031            (TestTransientTable.test_transient_joined_table_same_column_name):
6032            New. Test whether joining on columns with the same names in both
6033            tables works.
6034            
6035            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
6036            sure to use the right internal names even when joining on field
6037            with the same names in both tables. Also, detect duplicate names
6038            in the joined table correctly.
6039    
6040    2003-07-01  Frank Koormann   <[email protected]>
6041    
6042            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6043            Reverse List of layers to render in same order as in desktop legend.
6044    
6045    2003-06-30  Jonathan Coles   <[email protected]>
6046    
6047            * Thuban/version.py (make_tuple): Takes a version string
6048            and splits it into a tuple of at most three integers.
6049            Used make_tuple() to make tuple versions of the version
6050            numbers.
6051    
6052            * Thuban/UI/about.py: Add Thuban email addresses.
6053    
6054    2003-06-30  Jonathan Coles   <[email protected]>
6055    
6056            * Thuban/version.py: SQLite/PySQLite version dependencies
6057            were too high.
6058    
6059    2003-06-30  Jonathan Coles   <[email protected]>
6060    
6061            * Thuban/version.py: Update version to 0.8.1
6062            
6063            * MANIFEST.in: Added Projections so that default.proj is
6064            included.
6065    
6066    2003-06-26  Jonathan Coles   <[email protected]>
6067    
6068            New About box with lots more information including library
6069            versions and credits. More/better version checking before
6070            Thuban starts.
6071    
6072            * Thuban/UI/about.py: New. New About box that displays
6073            library version information and credits.
6074    
6075            * Thuban/version.py: Added new 'versions' dictionary which
6076            contains the verions of various libraries which are checked
6077            when the module loads.
6078            (verify_versions): Check all version numbers and returns
6079            a list of errors.
6080    
6081            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
6082            Reset the status of the buttons as the situation warrants,
6083            but in a better more reliable way by not relying on the
6084            current status to determine what needs to change.
6085    
6086            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
6087            (verify_versions): Remove most of the code since it is
6088            now in Thuban.version.verify_versions.o
6089    
6090            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
6091            About box in Thuban.UI.about.
6092    
6093            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
6094            Returns the version of gdal library being used as a string.
6095    
6096            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
6097            Removed.
6098            (get_proj_version): Return the version of PROJ that the file
6099            was compiled with.
6100            (get_gtk_version): Return th version of GTK that the file
6101            was compiled with.
6102    
6103    2003-06-25  Jonathan Coles   <[email protected]>
6104    
6105            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
6106            of the SelectPropertiesDialog should be self so the window
6107            appears on top.
6108            (ClassGroupPropertiesCtrl.DoEdit): The parent
6109            of the SelectPropertiesDialog should be self so the window
6110            appears on top.
6111    
6112            * Thuban/UI/resource.py: Cleaned up how we determine file
6113            extensions.
6114            (GetImageResource): Return an wxImage from our Resources.
6115    
6116    2003-06-24  Jonathan Coles   <[email protected]>
6117    
6118            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
6119            Check that a layer has a classification before trying
6120            to get it. Raster layers don't have classifications.
6121    
6122    2003-06-23  Jonathan Coles   <[email protected]>
6123            
6124            * setup.py: Add Resources/XML to resource list.
6125        
6126    2003-06-23  Jonathan Coles   <[email protected]>
6127    
6128            * setup.cfg: Fix copyright dates
6129        
6130    2003-06-23  Jonathan Coles   <[email protected]>
6131    
6132            * MANIFEST.in: Update with Resources/XML
6133    
6134            * setup.py: Don't include Locale resources yet as we don't
6135            have any and it causes problems building the distribution
6136            for Windows. Update version to 0.8.0.
6137    
6138            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
6139    
6140            * Thuban/UI/mainwindow.py: Add blank line at the end because
6141            file was not being read correctly building the Windows
6142            distribution.
6143    
6144    2003-06-23  Jonathan Coles   <[email protected]>
6145    
6146            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
6147    
6148            * Thuban/version.py: Temporarily update longversion for
6149            the 0.8 release so that it doesn't have the cvs revision.
6150    
6151    2003-06-23  Jonathan Coles   <[email protected]>
6152    
6153            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
6154            to make sure that we don't create reentrant possibilities with
6155            wxYield.
6156    
6157            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
6158            directly to avoid the wxSafeYield() call which generates an
6159            OnPaint event causing infinite recursion. Don't try to catch
6160            exception anymore. This was for before there were limits on map
6161            scaling.
6162    
6163    2003-06-23  Bernhard Herzog  <[email protected]>
6164    
6165            Bug fix for RT #1961:
6166    
6167            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
6168            Register DerivedShapestores with the session
6169    
6170            * Thuban/Model/session.py (Session.Tables): Make sure each table
6171            is only listed once.
6172    
6173            * test/test_load.py (TestJoinedTable.test): Add check_format call.
6174            Update file contents to match the one written out.
6175    
6176    2003-06-20  Bernhard Herzog  <[email protected]>
6177    
6178            * test/xmlsupport.py (SaxEventLister.startElementNS)
6179            (SaxEventLister.endElementNS): Do not include the qname. Python
6180            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
6181            is (presumably incorrectly) None, whereas it's a string with the
6182            element name in the later versions.
6183    
6184            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
6185            (TestEventList.test_even_list_namespace): Update tests to reflect
6186            the new behaviour
6187            (TestEventList.test_even_list_id_normalization): Fix doc-string
6188    
6189    2003-06-20  Jonathan Coles   <[email protected]>
6190    
6191            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
6192            by deriving classes to determine if that layer supports shapes.
6193            (Layer): Override HasShapes and return true.
6194    
6195            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
6196            instead of a direct call to wx[Begin|End]CusyCursor().
6197            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
6198            table data.
6199    
6200            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
6201            New. Wrappers around the wxWindows functions that allow us to
6202            make additional calls such as wxYield which gives the native
6203            system a chance to update the cursor correctly.
6204    
6205            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
6206            instead of a direct call to wx[Begin|End]CusyCursor().
6207    
6208            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
6209            instead of a direct call to wx[Begin|End]CusyCursor().
6210            (MapCanvas.find_shape_at): Check if the current search layer
6211            support shapes, otherwise go on to the next layer.
6212    
6213            * test/test_layer.py: Add tests in each type of layer for
6214            HasClassification() and HasShapes()
6215    
6216    2003-06-20  Jonathan Coles   <[email protected]>
6217    
6218            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
6219            turning on the busy cursor to allow the system to change the
6220            cursor before we begin painting. This fixes a problem that
6221            was occuring only under GTK. Fixes RTbug #1840.
6222    
6223    2003-06-20  Bernhard Herzog  <[email protected]>
6224    
6225            * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
6226            version.
6227    
6228            * Thuban/Model/save.py (sort_data_stores): New. Make topological
6229            sort of the data sources so they can be written with sources that
6230            data sources that depend on other data sources come after the
6231            sources they depend on.
6232            (SessionSaver.__init__): Add idmap instance variable to map from
6233            objects to the ids used in the file.
6234            (SessionSaver.get_id, SessionSaver.define_id)
6235            (SessionSaver.has_id): New. Methods to manage the idmap
6236            (SessionSaver.write): Use thuban-0.8.dtd
6237            (SessionSaver.write_session): Add a namespace on the session and
6238            write out the data sources before the maps.
6239            (SessionSaver.write_data_containers): New. Write the data
6240            containers.
6241            (SessionSaver.write_layer): Layer elements now refer to a
6242            shapestore and don't contain filenames anymore.
6243    
6244            * Thuban/Model/load.py (LoadError): Exception class to raise when
6245            errors in the files are discovered
6246            (SessionLoader.__init__): Define dispatchers for elements with a
6247            thuban-0.8 namespace too.
6248            (SessionLoader.check_attrs): New helper method to check and
6249            convert attributes
6250            (AttrDesc): New. Helper class for SessionLoader.check_attrs
6251            (SessionLoader.start_fileshapesource)
6252            (SessionLoader.start_derivedshapesource)
6253            (SessionLoader.start_filetable, SessionLoader.start_jointable):
6254            Handlers for the new elements in the new fileformat
6255            (SessionLoader.start_layer): Handle the shapestore attribute in
6256            addition to filename.
6257            (SessionLoader.start_table, SessionLoader.end_table): Removed.
6258            They were never used in the old formats and aren't needed for the
6259            new.
6260    
6261            * Thuban/Model/session.py (Session.DataContainers): New method to
6262            return all "data containers", i.e. shapestores and tables
6263    
6264            * test/xmlsupport.py (SaxEventLister.__init__)
6265            (SaxEventLister.startElementNS, sax_eventlist): Add support to
6266            normalize IDs.
6267    
6268            * test/test_xmlsupport.py
6269            (TestEventList.test_even_list_id_normalization): New test case for
6270            id normalization
6271    
6272            * test/test_load.py (LoadSessionTest.check_format): Use ID
6273            normalization
6274            (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
6275            class atrributes used for ID normalization
6276            (TestSingleLayer, TestLayerVisibility, TestLabels.test)
6277            (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
6278            file format
6279            (TestJoinedTable): New test for loading sessions with joined
6280            tables.
6281            (TestLoadError): New. Test whether missing required attributes
6282            cause a LoadError.
6283    
6284            * test/test_save.py (SaveSessionTest.thubanids)
6285            (SaveSessionTest.thubanidrefs): New class attributes for ID
6286            normalization in .thuban files.
6287            (SaveSessionTest.compare_xml): Use id-normalization.
6288            (SaveSessionTest.testEmptySession)
6289            (SaveSessionTest.testLayerProjection)
6290            (SaveSessionTest.testRasterLayer)
6291            (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
6292            (SaveSessionTest.testLayerProjection): The filename used was the
6293            same as for testSingleLayer. Use a different one.
6294            (SaveSessionTest.test_dbf_table)
6295            (SaveSessionTest.test_joined_table): New test cases for saving the
6296            new data sources structures.
6297            (TestStoreSort, MockDataStore): Classes to test the sorting of the
6298            data stores for writing.
6299    
6300            * test/runtests.py: Add CVS keywords
6301    
6302    2003-06-20  Jonathan Coles   <[email protected]>
6303    
6304            * test/test_session.py
6305            (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
6306            Use the cultural_landmark-point.dbf file for the store so that
6307            the table rows and shape count match.
6308    
6309    2003-06-20  Jonathan Coles   <[email protected]>
6310    
6311            * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
6312            an exception if the number of shapes is different from the
6313            number of rows in the table. Address RTbug #1933.
6314    
6315            * test/test_layer.py (TestLayer.test_derived_store): Add
6316            a test for the new exception in DerivedShapeStore.__init__.
6317    
6318            * test/support.py (FloatTestCase): Removed since there is
6319            already FloatComparisonMixin. Fixes RTbug #1954.
6320            (FloatComparisonMixin.assertFloatEqual): Include test for
6321            infinity that was part of FloatTestCase.
6322    
6323            * test/test_range.py (RangeTest): Inherit from
6324            support.FloatComparisonMixin now that we don't have
6325            support.FloatTestCase.
6326    
6327    2003-06-20  Bernhard Herzog  <[email protected]>
6328    
6329            * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
6330            the implementation in xmlsupport instead.
6331            (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
6332    
6333            * test/test_proj.py: Import sax_eventlist from xmlsupport instead
6334            of test_save
6335    
6336    2003-06-20  Bernhard Herzog  <[email protected]>
6337    
6338            * test/test_load.py (LoadSessionTest.check_format): New helper
6339            method to make sure the test files we load might have been written
6340            by the current thuban version.
6341            (ClassificationTest.TestLayers, TestSingleLayer.test)
6342            (TestLayerVisibility.test, TestClassification.test)
6343            (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
6344            Add check_format() calls and fix the thuban data to match the data
6345            that would be written by saving the session loaded from it.
6346    
6347            * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
6348            the same class and function in test_save.
6349    
6350            * test/test_xmlsupport.py (TestEventList): New. test cases for
6351            sax_eventlist
6352    
6353    2003-06-20  Bernhard Herzog  <[email protected]>
6354    
6355            * Resources/XML/thuban.dtd: Add comment about which versions of
6356            Thuban are covered by this DTD
6357            (map): Fix content model for layers and raster layers. There can
6358            be any number or layers and raster layers in any order.
6359    
6360    2003-06-20  Jonathan Coles   <[email protected]>
6361    
6362            This is mainly about fixing RTbug #1949.
6363    
6364            * Thuban/Model/classification.py: Remove "from __future__"
6365            import statement since python 2.2 is the earliest supported
6366            version.
6367    
6368            * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
6369            Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
6370            depending on the units this projection *forwards* into.
6371    
6372            * Thuban/Model/save.py (SessionSaver.write_classification):
6373            Remove unnecessary use of lambdas and nested functions.
6374    
6375            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
6376            adjustment here if the map projection uses degrees.
6377    
6378            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
6379            scale adjust code since it is now done before calling
6380            this method. Don't do anything if the map projection
6381            is None.
6382    
6383    2003-06-19  Bernhard Herzog  <[email protected]>
6384    
6385            Move version specific load tests to their own file.
6386    
6387            * test/test_load.py: Expand the doc-string to explain a bit how to
6388            handle file format changes.
6389            (TestClassification.test): Update the docstring as this test is
6390            not about Thuban 0.2 anymore.
6391    
6392            * test/test_load_0_2.py: New file with the load tests for thuban
6393            files created with Thuban 0.2 and earlier.
6394    
6395    2003-06-19  Bernhard Herzog  <[email protected]>
6396    
6397            Add XML validation to some of the tests. Validation will only be
6398            done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
6399            To make the DTD available to the test cases it's moved into
6400            Resources/XML
6401    
6402            * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
6403            for versions up to and including 0.2. Two slight changes: added an
6404            encoding specification and fixed the comment which refered to
6405            GRASS, not Thuban
6406    
6407            * test/xmlsupport.py: New support module for tests involving XML.
6408            Currently there's a mix-in class for XML validation.
6409    
6410            * test/test_xmlsupport.py: New. Tests for the xmlsupport module
6411    
6412            * test/test_save.py (SaveSessionTest): Derive from ValidationTest
6413            so that we can validate the
6414            (SaveSessionTest.testEmptySession)
6415            (SaveSessionTest.testSingleLayer)
6416            (SaveSessionTest.testSingleLayer)
6417            (SaveSessionTest.testLayerProjection)
6418            (SaveSessionTest.testRasterLayer)
6419            (SaveSessionTest.testClassifiedLayer): Validate the generated XML
6420    
6421            * test/runtests.py (main): Call print_additional_summary instead
6422            of print_garbage_information
6423    
6424            * test/support.py (resource_dir): New function to return the
6425            "Resource" subdirectory
6426            (print_additional_summary): New function to combine several
6427            summary functions
6428            (run_tests): Use print_additional_summary instead of calling
6429            print_garbage_information directly
6430    
6431    2003-06-19  Bernhard Herzog  <[email protected]>
6432    
6433            * Doc/thuban.dtd (classification): Correct the content model of
6434            the classification element.
6435            (projection): Add the "name" attribute
6436    
6437    2003-06-19  Frank Koormann   <[email protected]>
6438    
6439            MERGE from the greater-ms3 branch.
6440    
6441            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
6442            scale if projection is latlong to get better estimate.
6443    
6444            Fix problem of hidden properties dialog under windows after double
6445            click on layer tree:
6446            The tree control always gets an Expanded / Collapsed event after
6447            the ItemActivated  on double click, which raises the main window again.
6448            We add a second ItemActivated event to the queue, which simply
6449            raises the already displayed window.
6450    
6451            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
6452            raiseProperties initialized to prevent endless loops
6453            (LegendTree._OnItemActivated): Depending on self.raiseProperties
6454            simply raise the properties or open the dialog and issue a second
6455            event.
6456    
6457    2003-06-18  Jonathan Coles   <[email protected]>
6458    
6459            * setup.py: Fix a few problems that occured under Windows.
6460    
6461    2003-06-18  Jonathan Coles   <[email protected]>
6462    
6463            When Thuban loaded the map was redrawn twice because the
6464            legend was being opened after the mainwindow was created
6465            and not during its creation. This meant the map was drawn
6466            initially and then had to be redrawn when the legend
6467            caused the display to change. Now the legend is opened
6468            in the mainwindow constructor which resolves this issue.
6469    
6470            Also, although we were checking for the existence of
6471            gdal and gdalwarp modules, the gdalwarp extension was
6472            still being compiled (which may fail if the system doesn't
6473            have gdal installed). the build_ext command to setup.py
6474            now accepts the flags --with-gdal and --without-gdal.
6475            If --without-gdal is specified setup.py will try to
6476            use the gdal parameters specified by gdal-config. Under
6477            windows, those parameters have to be set in setup.py
6478            as with proj4 an wxWindows.
6479    
6480            * setup.py: Use a list instead of seperate variables for
6481            extension parameters so we can create a generic function
6482            that runs an appropriate *-config script.
6483            (run_cs_script): Renamed from run_wx_script and modified
6484            to accept a second argument which is a list of lists to
6485            be filled in by the values returned from running the command.
6486            (thuban_build_ext): New. Extends the build_ext command and
6487            provides the options --with-gdal/--without-gdal which then
6488            optionally includes the gdalwarp extension.
6489    
6490            * Thuban/Model/resource.py: First check if we can import
6491            the gdalwarp Thuban extension before checking for gdal.
6492            Also added some comments.
6493            
6494            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Check if
6495            the map is None which may be the case if none has been loaded
6496            yet.
6497    
6498            * Thuban/UI/main.py (main): Remove call to ShowLegend.
6499    
6500            * Thuban/UI/mainwindow.py (MainWindow.__init__): Call ShowLegend().
6501    
6502            * Thuban/UI/renderer.py: Check for gdal support before importing
6503            gdalwarp.
6504            (MapRenderer.render_map): Only try to optimize if we have gdal
6505            support otherwise nothing will get drawn.
6506    
6507            * Thuban/UI/view.py (MapCanvas.FitMapToWindow): This may be called
6508            during startup before a map has been created. Check if map is None
6509            before using it and do nothing if it is.
6510    
6511    2003-06-17  Jonathan Coles   <[email protected]>
6512    
6513            Fix the problem with raster layers under Windows that caused
6514            Thuban to crash. The view should respond to layer projection
6515            changed events to update the display. Changes to a projection
6516            should not cause the map to be set to full extent.
6517            
6518            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
6519            current_map_proj to remember the current map projection so that
6520            when the projection changes we know what the previous projection
6521            was.
6522            (MapCanvas.SetMap): Unsubscribe and subscribe to
6523            LAYER_PROJECTION_CHANGED events.
6524            (MapCanvas.projection_changed): Split into two methods that respond
6525            to map and layer projection changes.
6526            (MapCanvas.map_projection_changed): New. Takes the current view and
6527            projects it using the new projection. This does not cause the
6528            map to be redrawn at full extent.
6529            (MapCanvas.layer_projection_changed): New. Cause a redraw which
6530            will draw each layer in its new projection.
6531            
6532            * extensions/thuban/bmpdataset.cpp (BMPDataset::Open): Call
6533            VSIFClose() not VSIFCloseL() to close the file. Fixes a crash
6534            under Windows.
6535            
6536            * extensions/thuban/gdalwarp.cpp (MFILENAME): Padding should be
6537            to twice sizeof(void*) because there are two digits for each
6538            hex byte.
6539    
6540    2003-06-16  Bernhard Herzog  <[email protected]>
6541    
6542            Update to the layer interface: Direct access to the table,
6543            shapetable, shapefile and filename attributes is now actively
6544            deprecated by issuing deprecation warnings for all places where
6545            this happens.
6546    
6547            * Thuban/Model/layer.py (Layer.__getattr__): New. Implement access
6548            to the instance variables table, shapetable, shapefile and
6549            filename via __getattr__ so that we can issue a deprecation
6550            warning.
6551            (Layer.SetShapeStore): Don't set the deprecated instance variables
6552            any more
6553            (Layer.SetShapeStore): Don't use deprecated layer instance
6554            variables
6555            (Layer.Destroy): No need to explicitly remove the instance
6556            variables any more
6557            (Layer.GetFieldType, Layer.Shape): Don't use deprecated layer
6558            instance variables
6559    
6560            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
6561            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve)
6562            (GenQuantilesPanel.GetList, GenQuantilesPanel.OnRetrieve): Don't
6563            use deprecated layer instance variables
6564    
6565            * Thuban/UI/classifier.py (Classifier.__init__): Don't use
6566            deprecated layer instance variables
6567    
6568            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape)
6569            (IdentifyGridCtrl.selected_shape): Don't set the deprecated layer
6570            instance variables
6571    
6572            * Thuban/UI/tableview.py (LayerTableGrid.select_shapes): Don't use
6573            deprecated layer instance variables
6574    
6575            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Don't use
6576            deprecated layer instance variables
6577    
6578            * Thuban/Model/save.py (SessionSaver.write_layer): Don't use
6579            deprecated layer instance variables
6580    
6581            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer)
6582            (MapRenderer.polygon_render_param): Don't use deprecated layer instance
6583            variables
6584    
6585            * test/runtests.py (main): Turn Thuban's deprecation warnings into
6586            errors so that they're cought by the tests
6587    
6588            * test/test_load.py (TestSingleLayer.test): Don't use deprecated
6589            layer instance variables
6590    
6591    2003-06-16  Jonathan Coles   <[email protected]>
6592    
6593            Fix a problem under Windows whereby if the user double-clicks on a
6594            layer in the legend that tree item will expand or collapse as well
6595            as open the layer properties dialog. The state of the tree item
6596            should not be affected.
6597    
6598            * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
6599            preventExpandCollapse and subscribe to expanding and collapsing
6600            events.
6601            (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
6602            collapsing events and will veto the event if it has been triggered
6603            by the user double clicking on a layer.
6604            (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
6605            that an expanding/collapsing event should be vetoed.
6606    
6607    2003-06-13  Bernhard Herzog  <[email protected]>
6608    
6609            * Thuban/UI/classifier.py (Classifier.OnClose)
6610            (Classifier.map_layers_removed)
6611            (Classifier.layer_shapestore_replaced): Unsubscribe the messages
6612            in OnClose and not in map_layers_removed or
6613            layer_shapestore_replaced to make sure it always happens when the
6614            dialog is closed
6615    
6616    2003-06-13  Jonathan Coles   <[email protected]>
6617    
6618            This puts back a fix for Windows where a panel is needed so that
6619            the background of the table view appears correctly.
6620    
6621            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
6622            object that can be used by derived classes to place any
6623            controls (including the grid) onto.
6624            (QueryTableFrame.__init__): Use the panel as the parent window
6625            for all the controls. Reparent the grid so that the panel is
6626            the parent. Call UpdateStatusText() to correctly initialize
6627            the status bar.
6628    
6629    2003-06-13  Jonathan Coles   <[email protected]>
6630    
6631            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
6632            from wxFrame (as opposed to wxDialog like the other classes)
6633            but otherwise behaves like the other classes. This is needed
6634            for the TableView which isn't really a dialog and needs to
6635            have a status bar and control buttons.
6636    
6637            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
6638            instance variable to keep track of how many rows are selected.
6639            Subscribe once to the the events we are interested in.
6640            (ThubanGrid.OnRangeSelect): Only handle event if event handling
6641            hasn't been turned off.
6642            (ThubanGrid.OnSelectCell): Only handle event if event handling
6643            hasn't been turned off.
6644            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
6645            as an event listener (which changes the event handler stack)
6646            simply set an instance variable to False. This is checked in
6647            the event handlers.
6648            (ThubanGrid.GetNumberSelected): Return the number of currently
6649            selected rows.
6650            (TableFrame): Inherit from ThubanFrame so we can have a
6651            status bar and control buttons.
6652            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
6653            Explicitly set which items are selected in the operator choice and
6654            action choice so there is always a valid selection. Fixes RTbug #1941.
6655            Subscribe to grid cell selection events so we can update the
6656            status bar.
6657            (QueryTableFrame.UpdateStatusText): Update the status bar with
6658            how many rows are in the grid, how many columns, and how many
6659            rows are selected.
6660            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
6661            Call UpdateStatusText when cells are (de)selected.
6662            (QueryTableFrame.OnQuery): Use the string value in the value
6663            combo if either the selected item index is 0 or if the string
6664            cannot be found in the predefined list (this happens if the
6665            user changes the text). Fixes RTbug #1940.
6666            Only turn off the grid event listeners if there a query comes
6667            back with a none empty list of ids. in the case that the list
6668            is empty this causes a grid.ClearSelection() call to actually
6669            clear the grid selection which causes the selected items in
6670            the map to be deselected. Fixes RTbug #1939.
6671    
6672            * test/test_save.py (XMLWriterTest.Encode): Check return values.
6673            Fixes RTbug #1851.
6674    
6675    2003-06-13  Bernhard Herzog  <[email protected]>
6676    
6677            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
6678            self.selected_shape with the current selection to make sure the
6679            contents of the dialog are up to date when it's shown for the
6680            first time.
6681            The dialog used to work without this by luck. The recent fix to
6682            the connector module 'broke' a 'feature' the identify view was
6683            relying on, i.e that subscribing to a message in response to
6684            receiving a message of that type would mean that the new
6685            subscriber would also be called for the same message.
6686            
6687    2003-06-12  Jonathan Coles   <[email protected]>
6688    
6689            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
6690            the image is rendered. Fixes RTbug #1937.
6691    
6692    2003-06-12  Jonathan Coles   <[email protected]>
6693    
6694            * Thuban/Lib/fileutil.py: As is done under Windows, create the
6695            user directory if it doesn't exist on a posix system.
6696            Fixes RTbug #1815.
6697    
6698            * Thuban/Model/resource.py (get_user_proj_files): Moved the
6699            called to get_application_dir here, so that the directory
6700            will only be called if this method is invoked.
6701    
6702            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
6703            the projfilepath if no projection is selected.
6704    
6705    2003-06-12  Jonathan Coles   <[email protected]>
6706    
6707            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
6708            the scalebar if the current map has no projection set.
6709    
6710            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
6711            projfilepath label to just the basename of the projection file
6712            rather than include the entire path.
6713    
6714            * Thuban/Model/resource.py: Fix missed proj functions that
6715            needed to be renamed.
6716    
6717    2003-06-12  Jonathan Coles   <[email protected]>
6718    
6719            * Thuban/Model/classification.py: Removed assert statements that
6720            tested if the variable was an instance of Color.
6721    
6722            * Thuban/Model/color.py (Color): Remove commented code that isn't
6723            used.
6724            (Transparent): Renamed from NoColor. Doesn't inherit from Color.
6725            Fixes RTbug #1835.
6726            (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
6727            Needed now that the class doesn't inherit from Color.
6728    
6729    2003-06-12  Jonathan Coles   <[email protected]>
6730    
6731            * test/test_save.py (XMLWriterTest.testEncode): Explicitly
6732            check unicode strings.
6733    
6734            * test/test_layer.py: Check for existence of gdal.
6735    
6736    2003-06-12  Jonathan Coles   <[email protected]>
6737        
6738            * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
6739            that was in load.py
6740    
6741            * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
6742            that was in save.py
6743    
6744    2003-06-12  Jonathan Coles   <[email protected]>
6745    
6746            This is largely a collection of bug fixes. We also handle the
6747            case where gdal is not on the system. The XMLReader and XMLWriter
6748            classes were moved into there own files to resolve some circular
6749            import references and because they shouldn't really be in the
6750            file that is dediciated to reading/writing session files since
6751            they are also used elsewhere.
6752    
6753            * Thuban/Model/classgen.py: Renamed functions to follow the
6754            function_names_with_underscores style. Fixes RTbug #1903.
6755            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
6756    
6757            * Thuban/Model/layer.py: Import gdal only if it available.
6758            (RasterLayer): Handle the case where the gdal library is unavailable.
6759            Addresses RTbug #1877.
6760    
6761            * Thuban/Model/load.py (XMLReader): Moved into seperate file
6762            xmlreader.py.
6763    
6764  2003-06-12  Jonathan Coles   <[email protected]>  2003-06-12  Jonathan Coles   <[email protected]>
6765    
6766          This is largely a collection of bug fixes. We also handle the          This is largely a collection of bug fixes. We also handle the

Legend:
Removed from v.1169  
changed lines
  Added in v.2553

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26