/[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 1534 by jonathan, Thu Jul 31 12:44:30 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]>  2003-07-31  Jonathan Coles   <[email protected]>
5181    
5182          * Doc/manual/thuban-manual.xml: Fix the list of required packages          * Doc/manual/thuban-manual.xml: Fix the list of required packages
# Line 150  Line 5329 
5329    
5330          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
5331          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
5332          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
5333          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
5334    
5335          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
# Line 1265  Line 6444 
6444          Fix problem of hidden properties dialog under windows after double          Fix problem of hidden properties dialog under windows after double
6445          click on layer tree:          click on layer tree:
6446          The tree control always gets an Expanded / Collapsed event after          The tree control always gets an Expanded / Collapsed event after
6447          the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply          the ItemActivated  on double click, which raises the main window again.
6448            We add a second ItemActivated event to the queue, which simply
6449          raises the already displayed window.          raises the already displayed window.
6450    
6451          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable          * Thuban/UI/legend.py (LegendTree.__init__): Instance variable

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26