/[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 1532 by frank, Thu Jul 31 10:58:24 2003 UTC revision 2029 by silke, Tue Dec 16 11:05:00 2003 UTC
# Line 1  Line 1 
1    2003-12-16  Bernhard Herzog  <[email protected]>
2            
3            * debian/bitmappath.patch, debian/setup.py.patch:
4                    added to ensure compliance with FHS for debian
5            * debian/rules, debian/changelog:
6                added patches in rules to ensure compliance with FHS for debian
7    
8    2003-12-16  Bernhard Herzog  <[email protected]>
9    
10            * po/Makefile (mo): Make the output a bit nicer so that it prints
11            statistics about the translations. Add a comment how produce even
12            nicer statistics with sed.
13    
14    2003-12-09  Frank Koormann   <[email protected]>
15    
16            * Resources/Projections/defaults.proj:
17            French projection sample with correct accents (UNICODE).
18    
19    2003-12-05  Bernhard Herzog  <[email protected]>
20    
21            * MANIFEST.in: Add the devtools directory
22    
23            * setup.py (setup call): Use license instead of licence. This
24            silences a deprecation warning on Python 2.3
25    
26    2003-12-05  Frank Koormann   <[email protected]>
27    
28            Documentation synced with 1.0rc1
29    
30            * Doc/manual/thuban-manual.xml:
31            Minor formatting changes and references to database layers .
32            Introduction.Internationalization: New section on i18n.
33            MapManagement.AddingandRemovingLayers: Added item on database layers.  
34            MapManagement.TheLegend: Added section and screenshot on popup menu.
35            ProjectionManagement: Updated screenshot and sentence on EPSG.
36            Appendix.SupportedDataSources: Added PostGIS.
37            Appendix.WorkingwithPostGIS: New section.
38    
39            * Doc/manual/images/6_projection.png: Updated screenshot including
40            EPSG checkboxes.
41    
42            * Doc/manual/images/3_5_popup_menu.png: New, popup menu screenshot.
43    
44            * Doc/manual/images/app_postgis_add_layer.png,
45            Doc/manual/images/app_postgis_db_add.png,
46            Doc/manual/images/app_postgis_db_management.png:
47            New screenshots focussing on database layers
48    
49    2003-12-05  Frank Koormann   <[email protected]>
50    
51            * Thuban/UI/projdialog.py (load_user_proj): If user.proj is missing
52            write warning to stderr instead of rising a warning dialog
53    
54    2003-12-03  Bernhard Herzog  <[email protected]>
55    
56            Fix for RT #2243
57    
58            * Thuban/UI/mainwindow.py (MainWindow.has_selected_shape_layer):
59            New. Like has_selected_layer but for shape layers only
60            (_has_selected_shape_layer): New. Like _has_selected_layer but for
61            shape layers only
62            (layer_show_table command, layer_jointable command): Use these
63            commands should only be available for shape layers
64    
65    2003-12-03  Bernhard Herzog  <[email protected]>
66    
67            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
68            publishers that are wx objects and may have been destroyed by wx
69            already. Fixes RT #2242.
70    
71    2003-12-03  Bernhard Herzog  <[email protected]>
72    
73            * po/ru.po: Updates from Alex Shevlakov
74    
75    2003-12-03  Silke Reimer <silkeintevation.de>
76    
77            * debian/control, debian/changelog: Added gdal-support to
78                    debian package, updated to new thuban version
79    
80    
81    2003-12-03  Bernhard Herzog  <[email protected]>
82    
83            * Thuban/Lib/version.py: New. Module for version number
84            manipulations. The version of make_tuple here also deals better
85            with more unusual version number strings, such as e.g.
86            "1.2+cvs20031111"
87    
88            * Thuban/version.py (make_tuple): Removed. It's now in
89            Thuban.Lib.version. Use that implementation instead.
90    
91            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
92    
93    2003-12-02  Bernhard Herzog  <[email protected]>
94    
95            * MANIFEST.in: Add debian files
96    
97            * setup.py (setup call): Add packages for the Extensions so that
98            they're installed too
99            (data_files): Add READMEs and sample data from some Extensions
100    
101            * NEWS: Add note about the extensions in binary packages
102    
103    2003-12-02  Bernhard Herzog  <[email protected]>
104    
105            * Thuban/Model/save.py (SessionSaver.write_session): Save files
106            with the thuban-1.0rc1
107    
108            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
109            thuban-1.0rc1 namespace too
110    
111            * test/test_save.py (SaveSessionTest.dtd)
112            (SaveSessionTest.testEmptySession)
113            (SaveSessionTest.testSingleLayer)
114            (SaveSessionTest.testLayerProjection)
115            (SaveSessionTest.testRasterLayer)
116            (SaveSessionTest.testClassifiedLayer)
117            (SaveSessionTest.test_dbf_table)
118            (SaveSessionTest.test_joined_table)
119            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
120            namespace
121    
122            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
123            namespace
124            (TestSingleLayer.file_contents)
125            (TestNonAsciiColumnName.file_contents)
126            (TestLayerVisibility.file_contents)
127            (TestClassification.file_contents, TestLabels.file_contents)
128            (TestLayerProjection.file_contents)
129            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
130            (TestPostGISLayer.file_contents)
131            (TestPostGISLayerPassword.file_contents)
132            (TestLoadError.file_contents, TestLoadError.test): Update to
133            thuban-1.0rc1 namespace
134    
135    2003-12-01  Bernhard Herzog  <[email protected]>
136    
137            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
138            nt to better match Intevation's current w32 setup
139    
140            * HOWTO-Release: Add note about updating MANIFEST.in
141    
142            * MANIFEST.in: Add the Extensions
143    
144            * NEWS: Update for 1.0rc1
145    
146    2003-12-01  Bernhard Herzog  <[email protected]>
147    
148            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
149            cards for the dialog so that shapefiles ending in all uppercase
150            SHP are listed too
151    
152    2003-11-28  Bernhard Herzog  <[email protected]>
153    
154            * Thuban/version.py (longversion): Update to 1.0rc1
155    
156            * setup.py (setup call): Update version to 1.0rc1. Use the
157            [email protected] email address as author email instead of my
158            personal one.
159    
160    2003-11-28  Bernhard Herzog  <[email protected]>
161    
162            * po/de.po: Update german translation.
163    
164    2003-11-28  Bernhard Herzog  <[email protected]>
165    
166            Unify the filenames stored in .thuban files so that the .thuban
167            files are more platform independend
168    
169            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
170            that they can be used on both windows and unix
171            (SessionSaver.prepare_filename): New. Handle all filename
172            transformations for filenames stored in the thuban file
173            (SessionSaver.write_data_containers, SessionSaver.write_layer):
174            Use prepare_filename
175    
176            * test/test_save.py (SaveSessionTest.testSingleLayer)
177            (SaveSessionTest.testLayerProjection)
178            (SaveSessionTest.testRasterLayer)
179            (SaveSessionTest.testClassifiedLayer)
180            (SaveSessionTest.test_dbf_table)
181            (SaveSessionTest.test_joined_table): Filenames are always stored
182            with slashes on all currently supported platforms so adapt all
183            tests to this
184    
185            * test/test_load.py (LoadSessionTest.filenames): With the new
186            filename scheme the filenames in the tests should be
187            understandable on all currently supported platforms so we turn
188            this into an empty list because we don't have to normalize them
189            anymore
190    
191    2003-11-28  Bernhard Herzog  <[email protected]>
192    
193            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
194            Add the ellipsoid to the projection since some Proj versions
195            complain if it's missing.
196    
197    2003-11-27  Bernhard Herzog  <[email protected]>
198    
199            Corect some bounding box projection problems
200    
201            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
202            version of ForwardBBox
203            (Projection._transform_bbox): New. common implementation of
204            ForwardBBox and InverseBBox
205            (Projection.ForwardBBox): Use _transform_bbox.
206    
207            * test/test_proj.py (TestProjection.test): Add test for
208            InverseBBox
209    
210            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
211            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
212            new InverseBBox method to determine the unprojected bounding box
213            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
214            bbox.
215    
216            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
217            Removed.
218            (TestLayer.test_arc_layer_with_projection): New. This test is
219            better able to test whether bounding boxes are projected correctly
220            than test_point_layer_with_projection
221    
222            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
223            InverseBBox to unproject bboxes
224    
225    2003-11-25  Bernhard Herzog  <[email protected]>
226    
227            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
228            source code.
229    
230    2003-11-25  Bernhard Herzog  <[email protected]>
231    
232            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
233            there for backwards compatibility and all code relying on that
234            should have been updated by now.
235    
236    2003-11-25  Bernhard Herzog  <[email protected]>
237    
238            * test/test_load.py (TestClassification.test): Add the missing
239            round trip test.
240            (TestClassification.file_contents): Update to the newest file
241            format
242    
243    2003-11-25  Bernhard Herzog  <[email protected]>
244    
245            Add very experimental (and possibly dangerous) extension to draw
246            polygons:
247    
248            * Extensions/drawshape/README: New. Brief installation
249            instructions
250    
251            * Extensions/drawshape/drawshape.py: New. Implementation of the
252            drawshape extensions
253    
254            * Extensions/drawshape/patch.diff: Patch to apply before the
255            extension can be used.
256    
257    2003-11-24  Bernhard Herzog  <[email protected]>
258    
259            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
260            (ShapefileStore.__init__): Factor opening the shapefile into a
261            separate method (the new _open_shapefile). This makes the code a
262            bit more readable but the real reason is that it makes some evil
263            hacks easier. :-)
264    
265    2003-11-24  Bernhard Herzog  <[email protected]>
266    
267            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
268            converter is specified for an attribute assume it's a string
269            containing only Latin1 characters. Update doc-string accordingly.
270            This change should fix many places where unicode objects might
271            accidentally enter Thuban.
272    
273            * test/test_load.py (TestNonAsciiColumnName): New test to check
274            what happens with column names in DBF files that contain non-ascii
275            characters
276    
277    2003-11-21  Bernhard Herzog  <[email protected]>
278    
279            Enable the experimental attribute editing again and introduce a
280            command line switch to actually activate it
281    
282            * Thuban/UI/main.py (options): New. Container for options set on
283            the commmand line
284            (main): Add the --enable-attribute-editing flag.
285    
286            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
287            editing is enabled use the grid ctrl which allows editing of the
288            values
289    
290            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
291            New. Just delegate this to the underlying table.
292    
293    2003-11-20  Bernhard Herzog  <[email protected]>
294    
295            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
296            Skip this test if run under non-posix systems since it only works
297            there
298    
299    2003-11-19  Bernhard Herzog  <[email protected]>
300    
301            * Thuban/Model/resource.py: Rework the way gdal support is
302            determined so that we can give a reason in the about why gdal is
303            not supported.
304            (gdal_support_status): New. Variable holding a string with the
305            reason for no gdal support
306    
307            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
308            not supported to the message
309    
310    2003-11-19  Bernhard Herzog  <[email protected]>
311    
312            Remove the old table interface and its test cases
313    
314            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
315            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
316            anymore
317    
318            * Thuban/Model/transientdb.py (TransientTableBase)
319            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
320            anymore
321    
322            * test/test_table.py: Removed since the old interface it tests is
323            gone.
324    
325            * test/runtests.py (main): The old table interface is gone and
326            with it the deprecation warnings so remove the code that turns
327            these warnings into errors
328    
329    2003-11-19  Bernhard Herzog  <[email protected]>
330    
331            * test/test_table.py: Revert to revision 1.5 again. Changing the
332            tests to use the new table interface is completely wrong since the
333            whole purpose of the tests in this module is to test the old
334            interface.
335    
336    2003-11-18  Bernhard Herzog  <[email protected]>
337    
338            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
339            New. Test whether the connection matches a set of connection
340            parameters
341    
342            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
343            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
344            for existing connections with the same parameters and break out of
345            the loop correctly.
346    
347            * test/test_postgis_db.py (TestBriefDescription)
348            (TestPostGISSimple.test_brief_description): Rename
349            TestBriefDescription to TestPostGISSimple and the test method to
350            test_brief_description so that we can add more test methods.
351            (TestPostGISSimple.test_matches_parameters): New. Test the new
352            MatchesParameters method
353    
354    2003-11-18  Bernhard Herzog  <[email protected]>
355    
356            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
357            _was_destroyed, to indicate whether an publisher instance has
358            already been destroyed.
359            (Publisher.Unsubscribe): Only disconnect if the publisher has not
360            been destroyed yet.
361            (Publisher.Destroy): Set the _was_destroyed flag to true.
362    
363            * test/test_connector.py
364            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
365            calling Unsubscribe after Destroy doesn't raise an exception
366    
367    2003-11-14  Bernhard Herzog  <[email protected]>
368    
369            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
370            typo in doc-string
371    
372    2003-11-13  Bernhard Herzog  <[email protected]>
373    
374            Quote table and column names properly for postgis.
375    
376            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
377            quote an identifier for use in an sql statement
378            (PostGISColumn.__init__): Add the quoted_name attribute
379            (PostGISTable.__init__): New instance variable quoted_tablename
380            (PostGISTable._fetch_table_information): Use the quoted table
381            name. New isntance variable quoted_geo_col with a quoted version
382            of geometry_column
383            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
384            (PostGISTable.RowOrdinalToId): Use the quoted table name
385            (PostGISTable.ReadValue, PostGISTable.ValueRange)
386            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
387            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
388            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
389            Use quoted table and column names
390    
391            * test/test_postgis_db.py (TestPostGISSpecialCases)
392            (TestPostGISIgnoredColumns): Rename the class to
393            TestPostGISSpecialCases because that better describes the new
394            cases
395            (TestPostGISSpecialCases.test_unsupported_types)
396            (TestPostGISSpecialCases.test): Rename the method to
397            test_unsupported_types because we need a more descriptive name now
398            that there are more methods
399            (TestPostGISSpecialCases.test_table_name_quoting)
400            (TestPostGISSpecialCases.test_column_name_quoting)
401            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
402            cases to test quoting of table and column names in PostGISTable
403            and PostGISShapeStore
404    
405            * test/postgissupport.py
406            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
407            AddGeometryColumn desn't support table or column names with sapces
408            or double quotes
409    
410    2003-11-12  Jan-Oliver Wagner <[email protected]>
411    
412            * Extensions/wms/__init__.py: New: Init to make this
413            directory a package.
414    
415            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
416    
417    2003-11-11  Bernhard Herzog  <[email protected]>
418    
419            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
420            Constant for the file woth deprecated epsg projections
421            (get_system_proj_file): Update doc-string
422    
423            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
424            above the EPS widgets, introduce a check box for the deprecated
425            eps projections and a label for the epsg widgets
426            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
427            too
428    
429    2003-11-11  Bernhard Herzog  <[email protected]>
430    
431            Avoid warnings when run under Python 2.3
432    
433            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
434            (BaseRenderer.draw_label_layer): Coordinates must be ints.
435    
436            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
437            real method so that we can convert to int.
438            (MapRenderer.label_font): The font size mist be an int.
439    
440            * Thuban/UI/common.py (Color2wxColour): The color values must be
441            ints. Also, remove the unnecessary asserts.
442    
443            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
444            (TestUnicodeStrings.test): Python source code should not contain
445            non-ascii characters unless an encoding is specified in the file.
446            Therefore use \x escapes in the string literals for non-ascii
447            characters.
448    
449    2003-11-11  Bernhard Herzog  <[email protected]>
450    
451            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
452            parameter so that this function can be used for all proj files in
453            Resource/Projections
454            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
455            get_system_proj_file
456    
457            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
458            ProjFile self.__sysProjFile use a dictionary of system ProjFile
459            objects self._sys_proj_files
460            (ProjFrame.build_dialog): Adapt to the new changes in the
461            ProjectionList constructor. Add a check button to toggle whether
462            EPSG projections are shown
463            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
464            events.
465            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
466            the busy cursor if the files have not yet been loaded by the
467            dialog.
468            (ProjFrame.load_system_proj): Add a parameter for the name of the
469            proj file. Maintain the dictionary of system projections
470            self._sys_proj_files
471    
472            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
473            user_projs parameters into one parameter proj_files which is a
474            list of proj files.
475            (ProjectionList._subscribe_proj_files)
476            (ProjectionList._unsubscribe_proj_files): New. Move
477            subscription/unsubscription of projfile messages to separate
478            methods
479            (ProjectionList.Destroy): The unsubscribe is now done in
480            _unsubscribe_proj_files
481            (ProjectionList.update_projections): We now have a list of proj
482            file objects
483            (ProjectionList.SetProjFiles): New method to set a new list of
484            proj file objects
485    
486            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
487            Specify explicitly which system proj file to load.
488    
489    2003-11-11  Bernhard Herzog  <[email protected]>
490    
491            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
492            instance variables to cut cyclic references. The GC would have
493            collected the loader eventually but it can happen that it doesn't
494            run at all until thuban is closed (2.3 but not 2.2 tries a bit
495            harder and forces a collection when the interpreter terminates)
496            (load_session): Call the handler's Destroy method to make sure
497            that it gets garbage collected early. Otherwise it will be
498            collected very late if at all and it holds some references to e.g.
499            shapestores and the session which can lead to leaks (of e.g. the
500            temporary files)
501    
502            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
503            resource leak in load_session
504    
505    2003-11-10  Bernhard Herzog  <[email protected]>
506    
507            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
508            extensions are to be rendered.
509            (_renderer_extensions): New. List with renderer for layers in
510            extensions
511            (add_renderer_extension): New. Add a renderer extension
512            (init_renderer_extensions): New. Init the renderer extensions
513            (BaseRenderer.render_map_incrementally): Search
514            _renderer_extensions for how to draw unknown layer types
515            (BaseRenderer.draw_raster_data): Add format parameter so that
516            formats other than BMP can be drawn
517            (BaseRenderer.draw_raster_layer): Pass an explicit format to
518            draw_raster_data
519    
520            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
521            strings of the format parameter of draw_raster_data method to wx
522            constants
523            (MapRenderer.draw_raster_data): Add the format parameter and use
524            raster_format_map to map it to the right wxwindows constant for
525            wxImageFromStream
526    
527            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
528            the format parameter and record it
529            (TestBaseRenderer.test_raster_no_projection): check the format
530            paramter of the draw_raster_data method
531            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
532            extension facility
533    
534    2003-11-07  Bernhard Herzog  <[email protected]>
535    
536            Tweak the usage of the sqlite database to make common use cases
537            more responsive. In most cases copying the data to the sqlite
538            database takes so long that using sqlite doesn't have enough
539            advantages.
540    
541            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
542            comments about performance and query the min and max in separate
543            statements because only that way will indexes be used.
544            (TransientTableBase.UniqueValues): Add some comments about
545            performance.
546            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
547            Do not copy the data to the transient DB but use the transient
548            copy if it exists. See the new comments for the performance trade
549            offs
550    
551            * test/test_transientdb.py
552            (TestTransientTable.test_auto_transient_table): Make sure that the
553            data is copied to the transient database at some point.
554    
555    2003-11-03  Bernhard Herzog  <[email protected]>
556    
557            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
558            globals to locals so that it's a bit faster
559    
560    2003-11-03  Bernhard Herzog  <[email protected]>
561    
562            * Thuban/UI/baserenderer.py
563            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
564            method. ReadValue is faster than ReadRowAsDict since it only reads
565            one cell especially now that the dbf file objects actually
566            implement it.
567    
568            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
569            read_attribute method of the dbf objects
570    
571    2003-11-03  Bernhard Herzog  <[email protected]>
572    
573            * Extensions/profiling/profiling.py (popup_dialog_box): New config
574            variable to indicate whether the result should be shown in a
575            dialog box
576            (profile_screen_renderer, time_screen_renderer): Only show a
577            dialog box if popup_dialog_box is true.
578            (profile_screen_renderer): Flush stdout after the printing the
579            first part of the "profiling..." message
580    
581            * Thuban/UI/baserenderer.py
582            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
583            brushes for the groups so that they're not created over and over
584            again
585    
586            * Thuban/Model/classification.py (Classification.__getattr__)
587            (Classification._compile_classification)
588            (Classification._clear_compiled_classification): New. Methods to
589            manage a 'compiled' representation of the classification groups
590            which is created on demand
591            (Classification.InsertGroup, Classification.RemoveGroup)
592            (Classification.ReplaceGroup): reset the compiled representation
593            (Classification.FindGroup): Use the compiled representation to
594            find the matching group
595            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
596    
597    2003-10-31  Bernhard Herzog  <[email protected]>
598    
599            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
600            Send a CLASS_CHANGED message
601            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
602            not return the removed group since it wasn't used.
603    
604            * test/test_classification.py
605            (TestClassification.test_set_default_group): New. Test the
606            SetDefaultGroup method
607            (TestClassification.test_insert_group): New. Test the InsertGroup
608            method
609            (TestClassification.test_remove_group): New. Test the RemoveGroup
610            method
611            (TestClassification.test_replace_group): New. Test the
612            ReplaceGroup method
613    
614    2003-10-31  Bernhard Herzog  <[email protected]>
615    
616            * test/test_classification.py (TestClassification.setUp):
617            Subscribe to the CLASS_CHANGED messages
618            (TestClassification.tearDown): New. Destroy the classification
619            properly
620            (TestClassification.test_defaults): Add tests for the default line
621            width and whether no messages were sent yet
622            (TestClassification.test_set_default_properties): Add tests for
623            messages and setting the default line width
624            (TestClassification.test_add_singleton)
625            (TestClassification.test_add_range)
626            (TestClassification.test_multiple_groups): Add tests for messages
627    
628    2003-10-31  Bernhard Herzog  <[email protected]>
629    
630            Some more refactoring in preparation for new tests:
631    
632            * test/test_classification.py (TestClassification.setUp): New.
633            Instantiate the classification here. Update the test methods
634            accordingly.
635            (TestClassification.test_multiple_groups): Make sure that the two
636            singletons matching 1 are considered different.
637    
638    2003-10-31  Bernhard Herzog  <[email protected]>
639    
640            * test/test_classification.py (red, green, blue): New. These
641            constants were used in several cases. Update the relevant methods.
642            (TestClassification.test_defaults)
643            (TestClassification.test_set_default_properties)
644            (TestClassification.test_add_singleton)
645            (TestClassification.test_add_range)
646            (TestClassification.test_multiple_groups)
647            (TestClassification.test_deepcopy): New. These were formerly all
648            part of the single method test.
649            (TestClassification.test_deepcopy): Removed.
650            (TestClassIterator): Removed. The test case is now a method of
651            TestClassification since it tests part of the public interface of
652            Classification
653            (TestClassification.test_iterator): New. Used to be
654            TestClassIterator effectively
655    
656    2003-10-31  Jan-Oliver Wagner <[email protected]>
657    
658            GUIfied the functions of the profiling extension.
659    
660            * /Extensions/profiling/__init__.py: New: Init to make this
661            directory a package.
662    
663            * Extensions/profiling/profiling.py: Moved menu entries to
664            the Extensions menu. Applied _() for strings.
665            (profile_screen_renderer): Catch the detailed printout and present
666            it in a dialog.
667            (time_screen_renderer): Raise a dialog to present the result instead
668            of printing it to stdout.
669    
670    2003-10-31  Bernhard Herzog  <[email protected]>
671    
672            * test/test_classification.py (TestClassGroupProperties)
673            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
674            (TestClassGroupSingleton, TestClassIterator, TestClassification):
675            Split TestClassification into several classes, one for each class
676            being tested. TestClassification itself now only tests
677            Classification. This split makes changes to the tests a bit easier
678    
679    2003-10-31  Bernhard Herzog  <[email protected]>
680    
681            * Extensions/profiling/profiling.py: New. Extension to measure
682            Thuban performance
683    
684    2003-10-31  Frank Koormann <[email protected]>
685    
686            Added two items to legend popup menu: Remove Layer and Show Layer Table
687    
688            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
689            LegendPanel._OnShowTable): New event handlers, call the corresponding
690            mainwindow methods.
691            (LegendTree._OnRightClick): Added items to popup menu.
692    
693    2003-10-30  Bernhard Herzog  <[email protected]>
694    
695            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
696            EVT_WINDOW_DESTROY
697            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
698            nothing but is convenient for the derived classes.
699    
700            * Thuban/UI/tableview.py
701            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
702            Unsubscribe the messages here not in OnClose because that might
703            get called multiple times. Fixes RT #2196
704            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
705            anymore.
706    
707            * README: Update the minimum requirement for wxPython. Since we
708            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
709            the version in which that was introduced for all platforms
710    
711    2003-10-30  Frank Koormann <[email protected]>
712    
713            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
714            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
715            frame.
716    
717    2003-10-30  Jan-Oliver Wagner <[email protected]>
718    
719            Improved APR import extension, added further EPSG definitions
720            and some cleanup regarding string class.
721    
722            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
723            Added test for alias 'longlat'.
724    
725            * Resources/Projections/epsg-deprecated.proj: New. Contains
726            deprecated EPSG definitions.
727    
728            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
729            the variable names for objects.
730    
731            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
732            Copied from importAPR and provided with documentation.
733    
734            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
735            Moved to apr.py.
736            (APR_View): Added object ref 'ITheme'.
737    
738            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
739            split function by corresponding use of the string class method.
740    
741            * Thuban/Model/xmlwriter.py: Replaced string replace function by
742            corresponding string method.
743    
744    2003-10-29  Bernhard Herzog  <[email protected]>
745    
746            * Thuban/UI/baserenderer.py
747            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
748            special case of a classification that only has the default group
749    
750    2003-10-27  Bernhard Herzog  <[email protected]>
751    
752            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
753    
754            * po/de.po: Update.
755    
756            * Thuban/UI/application.py
757            (ThubanApplication.ShowExceptionDialog): Handle translation of the
758            dialog message properly
759    
760    2003-10-27  Bernhard Herzog  <[email protected]>
761    
762            Rework how localization works so that we use wx's translation
763            functions when running Thuban as a normal application but not when
764            we don't need any UI, such as in the test suite. See the comment
765            in Thuban/__init__.py for details
766    
767            * Thuban/__init__.py (_): Add one level of indirection to make the
768            translation handling more flexible and to make it possible to use
769            either wx's translation services or not.
770            (gettext_identity, translation_function_installed)
771            (install_translation_function): New function to help with this
772    
773            * Thuban/UI/__init__.py: Install the wx specific translation
774            function if it's OK to do that
775    
776            * test/support.py (initthuban): Install a dummy translation
777            function so that importing Thuban.UI doesn't install a wx specific
778            one for which would need to import wxPython
779    
780    2003-10-27  Bernhard Herzog  <[email protected]>
781    
782            * HOWTO-Release: Source archives should be created first and the
783            binary packages should be created from the source archives.
784            There's an official debian package now so there's no need to test
785            the rpm on debian anymore
786    
787    2003-10-27  Bernhard Herzog  <[email protected]>
788    
789            Several rendering changes:
790    
791             - Render the selection into a separate bitmap so that only that
792               bitmap needs to be redrawn when the selection changes
793    
794             - Render incrementally showing previews and allowing interaction
795               before rendering is complete
796    
797             - Update the renderer interface a bit. Most parameters of
798               RenderMap are now parameters of the constructor
799    
800            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
801            and the update region as parameters. Update the doc-string
802            (BaseRenderer.render_map_incrementally): New. Generator function
803            to renders the map incrementally
804            (BaseRenderer.render_map): Remove the map argument (it's now in
805            the constructor) and simply iterate over the
806            render_map_incrementally generator to draw the map.
807            (BaseRenderer.draw_shape_layer_incrementally)
808            (BaseRenderer.draw_shape_layer): Renamed to
809            draw_shape_layer_incrementally and changed into a generator that
810            yields True every 500 shapes. Used by render_map_incrementally to
811            render shape layers incrementally
812    
813            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
814            map and region parameters which are now in the constructor
815            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
816            the inherited render_map_incrementally.
817            (BaseRenderer.draw_shape_layer): Removed.
818            (ScreenRenderer.draw_selection_incrementally): New. The selection
819            drawing part of the removed draw_shape_layer as a generator
820            (ScreenRenderer.layer_shapes): Update because of the region
821            parameter change
822            (ExportRenderer.__init__): New. Extend the inherited constructor
823            with the destination region for the drawing
824            (ExportRenderer.RenderMap): Removed the map and region parameters
825            which are now in the constructor
826    
827            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
828            bitmap suitable for a preview in a tool
829            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
830            bitmap
831            (MapPrintout.draw_on_dc): Adapt to new renderer interface
832            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
833            exists
834            (MapCanvas.OnIdle): Update the logic to deal with incremental
835            rendering and the selection bitmap
836            (MapCanvas._do_redraw): Handle the instantiation of the render
837            iterator and the redraws during rendering
838            (MapCanvas._render_iterator): New. Generator to incrementally
839            redraw both bitmaps
840            (MapCanvas.Export): Adapt to new renderer interface.
841            (MapCanvas.full_redraw): Reset the selection bitmap and the
842            renderer iterator too
843            (MapCanvas.redraw_selection): New. Force a redraw of the selection
844            bitmap
845            (MapCanvas.shape_selected): Only redraw the selection bitmap
846    
847            * test/test_baserenderer.py
848            (TestBaseRenderer.test_polygon_no_projection)
849            (TestBaseRenderer.test_raster_no_projection)
850            (TestBaseRenderer.test_point_map_projection)
851            (TestBaseRenderer.test_point_layer_and_map_projection)
852            (TestBaseRenderer.test_point_layer_projection)
853            (TestBaseRenderer.test_point_with_classification): Adapt to new
854            renderer interface
855    
856    2003-10-24  Bernhard Herzog  <[email protected]>
857    
858            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
859            (point_in_polygon_shape, shape_centroid): Raise an exception if
860            the shape can't be read. Previously invalid shape ids would lead
861            to a segfault.
862    
863            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
864            New. test whether an exception is raised for invalid shape ids
865    
866    2003-10-24  Jan-Oliver Wagner <[email protected]>
867    
868            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
869            as alias for 'latlong'.
870    
871            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
872            as alias for 'latlong'.
873    
874    2003-10-24  Jan-Oliver Wagner <[email protected]>
875    
876            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
877            the projection even for the UnknownPanel.
878            (UnknownProjPanel.__init__): Define the text and create the textctrl
879            widget.
880            (UnknownProjPanel._DoLayout): Replaced static text widget by the
881            textctrl created in __init__.
882            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
883            including the parameters of the projection.
884            
885    2003-10-24  Jan-Oliver Wagner <[email protected]>
886    
887            * Resources/Projections/epsg.proj: New. This is a list of
888            EPSG codes with parameters for proj. The list has been
889            generated using devtools/create_epsg.py based on the
890            file nad/epsg of the proj 4.4.7 package. Four projection
891            definitions have been deleted as they are not accepted by proj:
892            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
893            and "HD72 / EOV".
894    
895    2003-10-22  Bernhard Herzog  <[email protected]>
896    
897            Some more tweaks to the projection dialog which should fix RT
898            #1886.
899    
900            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
901            the ProjFile's messages and call the base class methods correctly
902            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
903            flag on the newly selected item too. Otherwise some other item is
904            focused and the first time the focus is moved with the keyboard
905            the selection moves in unexpected ways.
906    
907            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
908            focus on the OK button, only on the projection list. That way the
909            list really has the focus initially
910            (ProjFrame.OnClose): Call the projection list's Destroy method to
911            make it unsubscribe all messages
912    
913    2003-10-21  Bernhard Herzog  <[email protected]>
914    
915            Rework the projection dialog to fix a few bugs, including RT 2166
916            and most of 2168
917    
918            * Thuban/UI/projlist.py: New. The class ProjectionList is a
919            special wxListCtrl to show a list of projections in a more MVC
920            fashion
921    
922            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
923            throughout the class. The main change is to use the ProjectionList
924            class instead of a normal wxListBox. Also, add an explicit
925            "Unknown" projection to the projection choice control.
926            (ProjPanel.__init__): Add an "unknown" ellipsoid
927            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
928            instantiation of the panel's controls to make the tab-order more
929            natural
930    
931    2003-10-21  Bernhard Herzog  <[email protected]>
932    
933            * test/test_load.py (TestSingleLayer.file_contents)
934            (TestSingleLayer.test): Add non-ascii characters to the titles of
935            session, map and layer. This is effectively a port of the
936            TestUnicodeStrings test in test_load_0_8.py which for some reason
937            was only added there.
938    
939            * test/test_load_0_9.py (TestSingleLayer.file_contents)
940            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
941            characters to the titles of session, map and layer,.
942    
943    2003-10-21  Bernhard Herzog  <[email protected]>
944    
945            Add EPSG projection handling to .thuban files
946    
947            * test/test_save.py (SaveSessionTest.dtd)
948            (SaveSessionTest.testEmptySession)
949            (SaveSessionTest.testLayerProjection)
950            (SaveSessionTest.testRasterLayer)
951            (SaveSessionTest.testClassifiedLayer)
952            (SaveSessionTest.test_dbf_table)
953            (SaveSessionTest.test_joined_table)
954            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
955            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
956            use a and epsg projection to test saving them
957    
958            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
959            namespace
960            (TestLayerVisibility.file_contents, TestLabels.file_contents)
961            (TestLayerProjection.file_contents)
962            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
963            (TestPostGISLayer.file_contents)
964            (TestPostGISLayerPassword.file_contents)
965            (TestLoadError.file_contents, TestLoadError.test): Update to use
966            1.0-dev namespace
967            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
968            use 1.0-dev namespace and use an EPSG projection to test whether
969            loading it works
970    
971            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
972            as of Thuban 0.9. These are now tests to determine whether Thuban
973            can still read files generated by Thuban 0.9
974    
975            * Thuban/Model/save.py (SessionSaver.write)
976            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
977            namespace
978            (SessionSaver.write_projection): Write the projection's epsg
979            attribute
980    
981            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
982            thuban-1.0-dev.dtd namespace
983            (SessionLoader.check_attrs): Allow a callable object as conversion
984            too
985            (SessionLoader.start_projection, SessionLoader.end_projection)
986            (SessionLoader.start_parameter): Handle the epsg attribute and
987            rename a few instance variables to lower case
988    
989            * Resources/XML/thuban-1.0.dtd: New. Only difference to
990            thuban-0.9.dtd is the epsg attribute for projections.
991    
992    2003-10-21  Bernhard Herzog  <[email protected]>
993    
994            * test/runtests.py (main): Let the user specify which tests to run
995            on the command line
996    
997            * test/support.py (ThubanTestResult.getDescription): Override to
998            give a better short description. The description can be used as a
999            parameter to run_tests to run that particular test in isolation.
1000    
1001    2003-10-21  Frank Koormann   <[email protected]>
1002    
1003            Popup menu for legend. Scheduled for the 1.2 release this was too
1004            simple to implement: The popup menu is bound to the legend tree, while
1005            the events are hanlded by its anchestor, the legend panel. This
1006            allows reuse of all the event handlers already implemented for the
1007            legend toolbar buttons.
1008    
1009            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
1010            to add handlers for the events issued by the popup menu.
1011            (LegendPanel._OnToggleVisibility): Handler for toggling layer
1012            visibility event
1013            (LegendPanel._OnProjection): Handler for layer projection event.
1014            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
1015            (LegendTree._OnRightClick): Event handler for right click, select item
1016            and pop up menu.
1017            (LegendTree.ToggleVisibility): Toggle layer visibility
1018            (LegendTree.LayerProjection): Raise layer projection dialog for
1019            current layer.
1020    
1021    2003-10-21  Bernhard Herzog  <[email protected]>
1022    
1023            * Resources/Projections/defaults.proj: Use correct DOCTYPE
1024            declaration. The top-level element is projectionlist not projfile
1025    
1026    2003-10-20  Bernhard Herzog  <[email protected]>
1027    
1028            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
1029            method to write a projfile and display a busy cursor and error
1030            dialogs.
1031            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
1032            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
1033            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
1034            busy cursor while loading the user and system prj files.
1035    
1036    2003-10-16  Bernhard Herzog  <[email protected]>
1037    
1038            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
1039            ProjFile objects
1040            (clear_proj_file_cache): New function to clear the cache. Mainly
1041            useful for use by the test suite
1042            (read_proj_file): Use the cache.
1043    
1044            * test/test_proj.py (TestProjFile): Clarify the doc-string
1045            (ProjFileReadTests): Update doc-string
1046            (ProjFileReadTests.test_get_system_proj_file): Check whether the
1047            system proj files is cached.
1048            (ProjFileLoadTestCase): New base class for the proj file tests
1049            derived from support.FileLoadTestCase to provide some common
1050            behavior.
1051            (TestLoadingProjFile)
1052            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
1053            (TestProjFileWithInvalidParameters.file_contents): Derive from
1054            ProjFileLoadTestCase
1055            (TestLoadingProjFile.test_caching): New. Test whether the cache
1056            works
1057    
1058    2003-10-16      Silke Reimer    <[email protected]>
1059    
1060            * debian/*: New directory with configuration files for building a thuban
1061              deb-package.
1062    
1063    2003-10-14  Bernhard Herzog  <[email protected]>
1064    
1065            * test/test_proj.py: Execute support.run_tests when run as
1066            __main__ so that missing unsubscribes are detected
1067            (TestProjFile.tearDown): Destroy the proj_file properly
1068    
1069    2003-10-14  Bernhard Herzog  <[email protected]>
1070    
1071            * Thuban/Model/messages.py (PROJECTION_ADDED)
1072            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
1073            the ProjFile objects
1074    
1075            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
1076            easily send messages when the projections change
1077            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
1078            when the change was successful
1079    
1080            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
1081            proj file messages
1082            (TestProjFile.test_add_remove)
1083            (TestProjFile.test_remove_non_existing)
1084            (TestProjFile.test_replace)
1085            (TestProjFile.test_replace_non_existing): Test whether the right
1086            messages are sent
1087    
1088    2003-10-14  Bernhard Herzog  <[email protected]>
1089    
1090            * test/test_proj.py (TestProjFile.test): Refactor into several
1091            tests
1092            (TestProjFile.test_add_remove)
1093            (TestProjFile.test_remove_non_existing)
1094            (TestProjFile.test_replace)
1095            (TestProjFile.test_replace_non_existing): Some of the new
1096            individual test cases
1097            (TestProjFileSimple): New class for the rest of the test cases
1098            that came out of the refactoring
1099            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
1100            derived classes don't have to
1101    
1102    2003-10-13  Bernhard Herzog  <[email protected]>
1103    
1104            Add an optional EPSG code to the projection objects and extend the
1105            .proj file format accordingly.
1106    
1107            * Resources/XML/projfile.dtd (element projection): Add epsg
1108            attribute
1109    
1110            * Thuban/Model/proj.py (Projection.__init__): New parameter and
1111            instance variable epsg. Update doc-string
1112            (Projection.EPSGCode, Projection.Label): New methods to provide
1113            access to EPSG code and a label for use in dialogs
1114    
1115            * Thuban/Model/resource.py (ProjFileReader.start_projection)
1116            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
1117            Handle the epsg code attribute when reading or writing proj files
1118    
1119            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
1120            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
1121            (ProjFrame.__FillAvailList): Use the projection's Label method to
1122            get the string for the list box
1123    
1124            * test/test_proj.py (TestProjection.test_label)
1125            (TestProjection.test_label_epsg)
1126            (TestProjection.test_epsgcode_for_non_epsg_projection)
1127            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
1128            for the label and EPSGCode methods
1129            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
1130            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
1131            objects in the test cases and put the expected contents into the
1132            test case methods too. Update doTestWrite accordingly
1133            (TestLoadingProjFile)
1134            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
1135            read tests from TestProjFile.
1136            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
1137            tests are now in the new classes.
1138            (sample_projfile, sample_projfile_data)
1139            (sample_projfile2, sample_projfile_data2): Removed. Not used
1140            anymore.
1141            (TestProjFile.test_read_unreadable_file): No need to reset the
1142            permissions at the end anymore since we use a unique filename
1143    
1144    2003-10-13  Bernhard Herzog  <[email protected]>
1145    
1146            * test/test_proj.py: Some more refactoring of the test cases
1147            (ProjFileTest): New base class for the proj file tests.
1148            (TestProjFile): Derive from ProjFileTest
1149            (TestProjFile.test_read_unreadable_file)
1150            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
1151            the new filename method to get a unique filename
1152            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
1153            (WriteProjFileTests): New class for proj file write tests.
1154            Contains the write test that were in TestProjFile originally.
1155    
1156    2003-10-13  Bernhard Herzog  <[email protected]>
1157    
1158            * test/test_proj.py (TestProjFile.testRead)
1159            (TestProjFile.test_read_non_existing_file)
1160            (TestProjFile.test_read_unreadable_file)
1161            (TestProjFile.test_read_empty_file): Split into several methods.
1162    
1163    2003-10-10  Bernhard Herzog  <[email protected]>
1164    
1165            * Thuban/UI/sizers.py: New file with custom sizers.
1166    
1167            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
1168            all projection type specific panels and put them into a
1169            NotebookLikeSizer. This way the dialog doesn't change its size
1170            when a different projection is selected
1171            (ProjFrame.__init__): Rename projection_panels
1172            projection_panel_defs and reuse projection_panels for a list of
1173            the instantiated panels.
1174            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
1175            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
1176            the panels
1177            (UnknownProjPanel._DoLayout): Place the newlines in the message
1178            differently to make the panel narrower.
1179            (TMPanel._DoLayout): Layout the parameters in one column.
1180    
1181    2003-10-10  Bernhard Herzog  <[email protected]>
1182    
1183            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
1184            that contains all the setup for the dialog's widgets, layout and
1185            event handling.
1186            (__): Call build_dialog to build the dialog.
1187            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
1188            Their functionality is now in build_dialog
1189            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
1190            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
1191            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
1192            different widget names and hierarchy introduced with build_dialog.
1193    
1194    2003-10-10  Bernhard Herzog  <[email protected]>
1195    
1196            * README: Fix typo.
1197    
1198    2003-10-09  Bernhard Herzog  <[email protected]>
1199    
1200            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
1201            projection is already in the list. This is *a lot* faster when
1202            loading files with hundreds of projections since it saves a linear
1203            search. OTOH this will allow adding the same projection to the
1204            user.proj file multiple times in the projection dialog but we'll
1205            deal with that later
1206    
1207    2003-10-09  Jan-Oliver Wagner <[email protected]>
1208    
1209            * devtools: New. Directory for developer tools that are not intended
1210            for the regular user.
1211    
1212            * devtools/create_epsg.py: New. Convert the epsg file of proj into
1213            a python .proj file.
1214    
1215    2003-10-09  Bernhard Herzog  <[email protected]>
1216    
1217            * test/test_proj.py
1218            (TestProjection.test_get_parameter_without_equals_sign): New. Test
1219            whether GetParameter handles parameters without "=" sign correctly
1220    
1221            * Thuban/Model/proj.py (Projection.GetParameter): Handle
1222            parameters that do not contain a "=". Update the doc-string
1223    
1224    2003-10-08  Bernhard Herzog  <[email protected]>
1225    
1226            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
1227            length limit on the projname text control
1228    
1229    2003-10-08  Bernhard Herzog  <[email protected]>
1230    
1231            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1232            (TestProjection.test_get_projection_units_normal): New. Tests for
1233            the Projection.GetProjectedUnits method
1234    
1235    2003-10-08  Jan-Oliver Wagner <[email protected]>
1236    
1237            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1238            Added missing 'val' parameter.
1239    
1240    2003-10-08  Bernhard Herzog  <[email protected]>
1241    
1242            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1243            projection type of the currently selected projection is not known,
1244            i.e. there's no panel for it, use the UnknownProjPanel
1245            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1246            the actual replacing of the proj panel into the new method
1247            _show_proj_panel.
1248            (UnknownProjPanel): Add doc-string.
1249            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1250            that the panel is not so wide.
1251    
1252    2003-10-08  Bernhard Herzog  <[email protected]>
1253    
1254            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1255            too. Update the doc-string
1256            (get_proj_files): Removed. It wasn't used anywhere
1257            (get_system_proj_files, get_system_proj_file): Rename to
1258            get_system_proj_file and return the ProjFile object and not a list
1259            of ProjFile objects. Update the callers.
1260            (get_user_proj_files, get_user_proj_file): Rename to
1261            get_user_proj_file return the ProjFile object and not a list of
1262            ProjFile objects. Update the callers.
1263            (ProjFileReader.__init__): New instance variable for the warnings.
1264            Rename the __pf ivar to projfile. Update the methods referring to
1265            __pf
1266            (ProjFileReader.end_projection): Catch any errors raised when
1267            instantiating the projection and record that as an error. The
1268            projection will not be in the final ProjFile object.
1269            (ProjFileReader.GetWarnings): New method to return the warnings.
1270    
1271            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1272            show the warnings from the projfile reader
1273            (ProjFrame._OnImport): Deal with any warnings returned by
1274            read_proj_file
1275            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1276            get_system_proj_file or get_user_proj_file.
1277    
1278            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1279            (TestProjFileWithInvalidParameters.file_contents): New test cases
1280            to test whether read_proj_file handles invalid projection
1281            parameters correctly
1282            (TestProjFile.test_get_system_proj_file): New. Simple test for
1283            resource.get_system_proj_file
1284    
1285    2003-10-07  Bernhard Herzog  <[email protected]>
1286    
1287            * test/test_derivedshapestore.py
1288            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1289            properly so that the temporary directories get deleted correctly
1290    
1291    2003-10-06  Bernhard Herzog  <[email protected]>
1292    
1293            Handle the title changes in a proper MVC way.
1294    
1295            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1296            canvas' TITLE_CHANGED messages
1297            (MainWindow.update_title): New. Update the main window's title
1298            (MainWindow.__SetTitle): Removed. Use update_title instead.
1299            (MainWindow.SetMap): Use update_title instead of __SetTitle
1300            (MainWindow.RenameMap): Do change the window title explicitly
1301            here. That's handled in a proper MVC way now.
1302            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1303            messages
1304    
1305            * Thuban/Lib/connector.py (Conduit): New class to help classes
1306            that forward messages
1307    
1308            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1309            (ViewPort): Derive from Conduit instead of Publisher
1310            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1311            when calling the inherited versions
1312            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1313            methods to subscribe and unsubscribe map messages
1314            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1315            handle the map subscriptions
1316            (ViewPort.Map, ViewPort.map_projection_changed)
1317            (ViewPort.layer_projection_changed): Add or update doc-strings
1318    
1319            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1320            typo
1321            (MyConduit): Helper class for the Conduit test.
1322            (TestConduit): Test cases for Conduit
1323    
1324            * test/test_connector.py: Use support.run_tests as main.
1325    
1326            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1327            the TITLE_CHANGED messages
1328            (ViewPortTest.test_forwarding_title_changed): New test to check
1329            whether the viewport forwards the map's TITLE_CHANGED messages
1330            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1331            after the port's because the latter may require a still functional
1332            map.
1333    
1334    2003-10-06  Bernhard Herzog  <[email protected]>
1335    
1336            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1337            doc-string
1338    
1339    2003-10-06  Bernhard Herzog  <[email protected]>
1340    
1341            * test/test_viewport.py (ViewPortTest.setUp)
1342            (SimpleViewPortTest.test_init_with_size): Move the test for the
1343            initial size as a constructor parameter from ViewPortTest.setUp
1344            method to a new separate test in SimpleViewPortTest.
1345    
1346    2003-10-06  Bernhard Herzog  <[email protected]>
1347    
1348            * test/test_viewport.py (MockView): New class derived from
1349            ViewPort with a mock implementation of GetTextExtent to be used in
1350            the test cases
1351            (ViewPortTest.setUp): Use MockView instead of ViewPort
1352    
1353            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1354            into what would be a "pure virtual function" in C++: always raise
1355            NotImplementedError. Mock implementations for test cases don't
1356            belong into the real code
1357    
1358    2003-10-02  Bernhard Herzog  <[email protected]>
1359    
1360            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1361            close the dbf file we create so that it's contents have been
1362            written properly.
1363    
1364            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1365            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1366            Update to shapelib 1.2.10
1367    
1368    2003-10-01  Jan-Oliver Wagner <[email protected]>
1369    
1370            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1371            it annoys lintian which warns about these files not being
1372            executable. The #! isn't necessary here since if you absolutely
1373            must execute them you can always say "python <filename>".
1374    
1375    2003-09-26  Bernhard Herzog  <[email protected]>
1376    
1377            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1378            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1379            is ported to a newer the import will fail, so it should be noticed
1380            immediately that this function is gone.
1381            Fixes RT#1919
1382    
1383    2003-09-26  Bernhard Herzog  <[email protected]>
1384    
1385            Add a DTD for the projection files and make thuban write valid
1386            projection files
1387    
1388            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1389            files
1390    
1391            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1392            'projectionlist' as the name in the document type declaration so
1393            that it matches the element type of the root element.
1394    
1395            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1396            'projectionlist' as the name in the document type declaration just
1397            as it is done now in the files thuban would write
1398            (sample_projfile, sample_projfile_data): Fix spelling of
1399            "Mercator"
1400            (TestProjFile.doTestWrite): Validate the written and the expected
1401            XML data
1402            (TestProjFile): Derive from ValidationTest so that we can run xml
1403            validation tests
1404    
1405    2003-09-24  Bernhard Herzog  <[email protected]>
1406    
1407            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1408            modify the list returned by map.Layers() in place since it is the
1409            actual list of layers used by the map.
1410    
1411    2003-09-23  Jan-Oliver Wagner <[email protected]>
1412    
1413            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1414            Extensions to describe the extensions coming with the Thuban
1415            standard package (gns2shp and importAPR).
1416    
1417    2003-09-23  Bernhard Herzog  <[email protected]>
1418    
1419            * libraries/thuban/wxproj.cpp (project_point): if there's an
1420            inverse but no forward projection, convert to degrees after
1421            applying the inverse projection. Fixes RT#2096
1422    
1423            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1424            implicitly tests for the fix to RT#2096
1425    
1426            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1427            Check that the sequences have the same lengths
1428    
1429            * Resources/Projections/defaults.proj (Geographic projection): Use
1430            a much more precise value for the to_meter attribute.
1431    
1432    2003-09-22  Bernhard Herzog  <[email protected]>
1433    
1434            * test/support.py (initthuban): Make sure to unset the LANG env.
1435            var. so that tests that compare translated strings work. Solves RT
1436            #2094
1437    
1438    2003-09-22  Jan-Oliver Wagner <[email protected]>
1439    
1440            Small improvement of APR import.
1441    
1442            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1443            Added tests for text-ranges.
1444    
1445            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1446            returns a string object if the range is based on text.
1447    
1448            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1449            range retrieval.
1450    
1451    2003-09-22  Jan-Oliver Wagner <[email protected]>
1452    
1453            Initial version of the importAPR extension which is in
1454            experimental state.
1455    
1456            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1457            /Extensions/importAPR/test/: New directories.
1458    
1459            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1460    
1461            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1462            file which refers to the Thuban Iceland demo data.
1463    
1464            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1465    
1466            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1467    
1468            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1469            as in '.apr'-files.
1470    
1471            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1472            ODB Objects as in '.apr', '.avl' and other files.
1473    
1474            * /Extensions/importAPR/__init__.py: New: Init to make this
1475            directory a package.
1476    
1477            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1478            project file (.apr) and convert it to Thuban.
1479    
1480    2003-09-22  Jan-Oliver Wagner <[email protected]>
1481    
1482            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1483    
1484    2003-09-19  Jan-Oliver Wagner <[email protected]>
1485    
1486            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1487            with description on RPM installation and RPM binary package
1488            creation.
1489    
1490    2003-09-18  Bernhard Herzog  <[email protected]>
1491    
1492            * setup.py (data_files): Only add the mo files if the Locales
1493            directory actually exists, so that setup.py works with a fresh CVS
1494            checkout
1495    
1496    2003-09-12  Jan-Oliver Wagner <[email protected]>
1497    
1498            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1499            in viewport, not anymore in view
1500    
1501    2003-09-04  Jan-Oliver Wagner <[email protected]>
1502    
1503            Introducing first Extension (gns2shp).
1504    
1505            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1506    
1507            * Extensions/__init__.py: New. init to make this dir a package.
1508    
1509            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1510    
1511            * Extensions/gns2shp/test/README: New. some info on this test directory.
1512    
1513            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1514    
1515            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1516            of Shapefile from GNS text file format
1517    
1518    2003-09-03  Jan-Oliver Wagner <[email protected]>
1519    
1520            Fix/workaround for bug #2019:
1521            https://intevation.de/rt/webrt?serial_num=2019
1522    
1523            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1524            (IdentifyView.__init__): Added another button that allows to
1525            stop the identify mode.
1526            (IdentifyView.OnStop): New. Stops the identify mode.
1527    
1528    2003-09-03  Jan-Oliver Wagner <[email protected]>
1529    
1530            Introducing a new exception dialog that allows to exit the
1531            application immediately.
1532            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1533    
1534            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1535    
1536            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1537            Made strings available to translations. Exchanged the simple
1538            ScrolledMessageDialog by the new ExceptionDialog.
1539    
1540    2003-09-01  Bernhard Herzog  <[email protected]>
1541    
1542            * NEWS: New. Summary of changes and release notes.
1543    
1544            * MANIFEST.in: Add NEWS
1545    
1546    2003-09-01  Bernhard Herzog  <[email protected]>
1547    
1548            * MANIFEST.in: Correct the include statement for the mo-files and
1549            include the documentation too.
1550    
1551            * setup.py (data_files): Add the .mo files
1552            (setup call): Up to version 0.9.0
1553    
1554    2003-09-01  Bernhard Herzog  <[email protected]>
1555    
1556            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1557            parameter list to just parent and session
1558            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1559            selection of empty list boxes is not allowed (and produces C++
1560            assertion errors) and the rest of the setup is better done in
1561            __init__ anyway.
1562            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1563            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1564            builtins True/False for booleans to avoid warnings from wxPython
1565    
1566            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1567            ChooseDBTableDialog constructor parameters.
1568    
1569    2003-09-01  Bernhard Herzog  <[email protected]>
1570    
1571            * Thuban/Model/postgisdb.py
1572            (PostGISTable): Extend doc-string
1573            (PostGISTable._fetch_table_information): Set the column index
1574            correctly, pretending ignored columns don't exist.
1575    
1576            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1577            for postgis tables with data types not yet supported by thuban.
1578    
1579    2003-08-29  Bernhard Herzog  <[email protected]>
1580    
1581            * HOWTO-Release: Tweak item about running the tests.
1582    
1583    2003-08-29  Jan-Oliver Wagner <[email protected]>
1584    
1585            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1586    
1587    2003-08-29  Bernhard Herzog  <[email protected]>
1588    
1589            Add some missing parameters to projections. Proj complains about
1590            them on windows but for some reason not on Linux.
1591    
1592            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1593            missing required projection parameters
1594    
1595            * test/test_proj.py (TestProjFile.test): Add missing required
1596            projection parameters
1597    
1598            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1599            (TestLayerProjection.test): Add missing required projection
1600            parameters and tests for them
1601    
1602            * test/test_load.py (TestLayerProjection.file_contents)
1603            (TestLayerProjection.test): Add missing required projection
1604            parameters and tests for them
1605    
1606            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1607            required projection parameters
1608    
1609    2003-08-29  Bernhard Herzog  <[email protected]>
1610    
1611            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1612            access the pj_errno because directly accessing pj_errno doesn't
1613            work on windows if the proj library is in a DLL
1614    
1615            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1616    
1617    2003-08-28  Bernhard Herzog  <[email protected]>
1618    
1619            * test/test_proj.py: Import things from Thuban after calling
1620            initthuban
1621    
1622            * test/test_load.py (LoadSessionTest.filenames): New class
1623            variable with the filename attributes to normalize
1624            (LoadSessionTest.check_format): Pass self.filenames to
1625            sax_eventlist to normalize the filename attributes
1626    
1627            * test/xmlsupport.py: Add cvs keywords
1628            (SaxEventLister.__init__): New parameter filenames which indicates
1629            attributes that contain filenames
1630            (SaxEventLister.startElementNS): Normalize the filename attributes
1631            with os.path.normpath
1632            (sax_eventlist): New parameter filenames to pass through to
1633            SaxEventLister
1634    
1635            * test/test_derivedshapestore.py: Make this file callable as a
1636            program to execute the tests
1637            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1638            the session to self.session so that it gets destroyed properly
1639    
1640            * test/test_layer.py (TestLayer.tearDown): Call the session's
1641            Destroy method
1642    
1643            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1644            too if it exists
1645            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1646            so that it gets destroyed properly
1647    
1648            * test/postgissupport.py (reason_for_not_running_tests): Add a
1649            test for the existence of popen2.Popen4.
1650    
1651            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1652            reliable way to destroy the sessions created in the test cases
1653            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1654            so that it gets destroyed properly
1655            (SaveSessionTest.testLayerProjection): Bind the session to
1656            self.session so that it gets destroyed properly
1657    
1658            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1659            sure that the session is destroyed properly
1660    
1661            * test/test_shapefilestore.py: Make this callable as a program to
1662            execute the tests
1663    
1664            * test/test_scalebar.py: Remove unnecessary import of _ from
1665            Thuban
1666    
1667            * test/support.py (print_garbage_information): Call initthuban
1668            here because it may be called indirectly from test cases that test
1669            test support modules which do not use anything from thuban itself
1670            (ThubanTestProgram.runTests): Remove unnecessary debug print
1671    
1672    2003-08-28  Bernhard Herzog  <[email protected]>
1673    
1674            * Thuban/version.py (longversion): Update to 0.9
1675    
1676            * Thuban/UI/mainwindow.py: Remove some unused imports
1677    
1678            * README: Add section about required additional software. Add date
1679            and revision CVS keywords
1680    
1681            * HOWTO-Release: Add item about the translations. Add date and
1682            revision CVs keywords and change formatting to match README a bit
1683            better
1684    
1685            * po/de.po: Update for 0.9
1686    
1687            * test/README: Tweak the wording a little because many tests are
1688            not really unittest.
1689    
1690    2003-08-27  Bernhard Herzog  <[email protected]>
1691    
1692            As preparation for the 0.9 release, switch thuban files to a
1693            non-dev namespace
1694    
1695            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1696            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1697            namespace
1698    
1699            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1700            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1701    
1702            * test/test_save.py (SaveSessionTest.dtd)
1703            (SaveSessionTest.testEmptySession)
1704            (SaveSessionTest.testSingleLayer)
1705            (SaveSessionTest.testLayerProjection)
1706            (SaveSessionTest.testRasterLayer)
1707            (SaveSessionTest.testClassifiedLayer)
1708            (SaveSessionTest.test_dbf_table)
1709            (SaveSessionTest.test_joined_table)
1710            (SaveSessionTest.test_save_postgis): Update for new namespace
1711    
1712            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
1713            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1714            (TestLayerProjection.file_contents)
1715            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1716            (TestPostGISLayer.file_contents)
1717            (TestPostGISLayerPassword.file_contents)
1718            (TestLoadError.file_contents, TestLoadError.test): Update for new
1719            namespace
1720    
1721    2003-08-27  Bernhard Herzog  <[email protected]>
1722    
1723            Make the table interface distinguish between row ids (an integer
1724            that uniquely identifies a row) and row ordinals (a simple row
1725            count from 0 to NumRows() - 1)
1726    
1727            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
1728            (PostGISTable.RowOrdinalToId): New methods to conver between row
1729            ids and row ordinals
1730            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
1731            parameter row_is_ordinal to indicate whether the row parameter is
1732            the row id or the ordinal
1733    
1734            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
1735            (TransientTableBase.RowOrdinalToId)
1736            (AutoTransientTable.RowIdToOrdinal)
1737            (AutoTransientTable.RowOrdinalToId): Same new methods as in
1738            PostGISTable.
1739            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
1740            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
1741            Same new parameter as in PostGISTable.
1742    
1743            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
1744            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
1745            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
1746            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
1747            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
1748            parameter as in PostGISTable.
1749    
1750            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
1751            (DataTable.RowOrdinalToId): New methods to convert between row ids
1752            and row ordinals.
1753            (TableGrid.SelectRowById): New method to select a row based on its
1754            ID as opposed to its ordinal
1755            (DataTable.GetValue, TableGrid.OnRangeSelect)
1756            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
1757            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
1758            (LayerTableFrame.__init__): Convert between row ids and row
1759            ordinals as appropriate
1760    
1761            * test/postgissupport.py (PostGISDatabase.__init__): Add
1762            doc-string.
1763            (PostGISDatabase.initdb): The optional third item in a tuple in
1764            tables is now a (key, value) list with additional arguments to
1765            pass to upload_shapefile
1766            (upload_shapefile): New parameter gid_offset to allow gids that
1767            are not the same as the shapeids in the shapefile
1768            (PostgreSQLServer.get_default_static_data_db): Use the new
1769            gid_offset to make the gids in landmarks 1000 higher than the
1770            shapeids in the shapefile
1771    
1772            * test/test_viewport.py
1773            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
1774            new shapeids in the landmarks table
1775    
1776            * test/test_transientdb.py
1777            (TestTransientTable.run_iceland_political_tests)
1778            (TestTransientTable.test_transient_joined_table): Add tests for
1779            the new table methods and new keywords arguments.
1780    
1781            * test/test_postgis_db.py
1782            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
1783            (TestPostGISTable.test_read_value_row_count_mode)
1784            (TestPostGISTable.test_row_id_to_ordinal)
1785            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
1786            table methods and the new arguments
1787            (TestPostGISShapestorePoint.test_shapes_in_region)
1788            (TestPostGISShapestorePoint.test_shape_raw_data)
1789            (TestPostGISShapestorePoint.test_shape_points)
1790            (TestPostGISShapestorePoint.test_shape_shapeid)
1791            (TestPostGISShapestorePoint.test_all_shapes)
1792            (TestPostGISTable.test_simple_query)
1793            (TestPostGISTable.test_simple_query)
1794            (TestPostGISTable.test_simple_query)
1795            (TestPostGISTable.test_read_value)
1796            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
1797            shapeids in the landmarks table
1798    
1799            * test/test_memory_table.py
1800            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
1801            (TestMemoryTable.test_read_value_row_count_mode)
1802            (TestMemoryTable.test_row_id_to_ordinal)
1803            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
1804            table methods and the new arguments
1805    
1806            * test/test_dbf_table.py
1807            (TestDBFTable.test_read_row_as_dict_row_count_mode)
1808            (TestDBFTable.test_read_value_row_count_mode)
1809            (TestDBFTable.test_row_id_to_ordinal)
1810            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
1811            methods and the new arguments
1812    
1813    2003-08-26  Bernhard Herzog  <[email protected]>
1814    
1815            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
1816            more postgis specific but much faster method to get the bounding
1817            box
1818    
1819    2003-08-26  Bernhard Herzog  <[email protected]>
1820    
1821            * Thuban/Model/postgisdb.py (PostGISTable.Title)
1822            (PostGISShapeStore.AllShapes): Add these missing methods.
1823            (PostGISShapeStore.ShapesInRegion): No need to raise
1824            StopIteration. We can simply return
1825    
1826            * test/test_postgis_db.py (TestPostGISTable.test_title)
1827            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
1828            new methods
1829    
1830    2003-08-25  Bernhard Herzog  <[email protected]>
1831    
1832            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
1833    
1834            * test/test_postgis_db.py (PolygonTests): New class containing
1835            those tests from TestPostGISShapestorePolygon that can also be
1836            used to test MUTLIPOLYGON tables
1837            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
1838            so derive from that
1839            (TestPostGISShapestoreMultiPolygon): New class with tests for
1840            MUTLIPOLYGON tables
1841    
1842            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
1843            tables argument to have tuples with three items to override the
1844            WKT type used.
1845            (PostgreSQLServer.get_default_static_data_db): Use the above to
1846            create a polygon table with MUTLIPOLYGONs
1847            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
1848            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
1849            coords_to*
1850            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
1851            (wkt_converter): New. Map WKT types to converters
1852            (upload_shapefile): New parameter force_wkt_type to use a
1853            different WKT type than the default
1854    
1855    2003-08-25  Bernhard Herzog  <[email protected]>
1856    
1857            * Thuban/UI/application.py
1858            (ThubanApplication.run_db_param_dialog): New. Suitable as a
1859            db_connection_callback. Main difference is that the dialog run
1860            from this method doesn't have a parent so it can be used even when
1861            there is no main window
1862            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
1863            no db_connection_callback was given. This way the dialog pops up
1864            even when the .thuban file was given as a command line parameter.
1865    
1866    2003-08-25  Bernhard Herzog  <[email protected]>
1867    
1868            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
1869            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
1870            which leads to an effectively frozen X session because the user
1871            can only interact with the dialog but the mouse is still grabbed
1872            by the canvas.
1873            Also, call the tool's Hide method before MouseLeftUp because
1874            MouseLeftUp may change the tool's coordinates.
1875    
1876    2003-08-25  Bernhard Herzog  <[email protected]>
1877    
1878            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
1879            LoadCancelled exceptions and handle them by returning immediately.
1880    
1881    2003-08-25  Bernhard Herzog  <[email protected]>
1882    
1883            GUI part of loading sessions with postgis connections which may
1884            require user interaction to get passwords or updated parameters
1885    
1886            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
1887            bit nucer and be more generic.
1888            (DBFrame.OnAdd): Adapt to new DBDialog interface
1889    
1890            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
1891            optional parameter db_connection_callback which is passed to
1892            load_session.
1893    
1894            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
1895            Suitable as a db_connection_callback
1896            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
1897            db_connection_callback of the application's OpenSession method
1898    
1899    
1900    2003-08-25  Bernhard Herzog  <[email protected]>
1901    
1902            Basic loading of sessions containing postgis connections:
1903    
1904            * Thuban/Model/load.py (LoadError): Add doc-string
1905            (LoadCancelled): New exception class to indicate a cancelled load
1906            (SessionLoader.__init__): Add the db_connection_callback parameter
1907            which will be used by the loader to get updated parameters and a
1908            password for a database connection
1909            (SessionLoader.__init__): Add the new XML elements to the
1910            dispatchers dictionary
1911            (SessionLoader.check_attrs): Two new conversions, ascii to convert
1912            to a byte-string object and idref as a generic id reference
1913            (SessionLoader.start_dbconnection)
1914            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
1915            elements
1916            (load_session): Add the db_connection_callback to pass through the
1917            SessionLoader
1918    
1919            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
1920            New classes to test loading of sessions with postgis database
1921            connections.
1922    
1923    2003-08-25  Bernhard Herzog  <[email protected]>
1924    
1925            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
1926            replace it and the comment with __BuildDate__ by the Source: and
1927            Id: cvs keywords as used in the other files.
1928    
1929    2003-08-25  Bernhard Herzog  <[email protected]>
1930    
1931            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
1932            LoadError when a required attribute is missing. The code used to
1933            be commented out for some reason, but probably should have been
1934            active.
1935    
1936            * test/test_load.py (TestLoadError.test): Test the message in the
1937            LoadError too to make sure it really is about the missing
1938            attribute
1939    
1940    2003-08-22  Bernhard Herzog  <[email protected]>
1941    
1942            * test/test_save.py (SaveSessionTest.test_dbf_table)
1943            (SaveSessionTest.test_joined_table): Add XML validation tests.
1944    
1945    2003-08-22  Bernhard Herzog  <[email protected]>
1946    
1947            Implement saving a session with a postgis connection
1948    
1949            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
1950            elements for database connections and shapestores using db
1951            connections
1952            (session): Add the dbconnections to the content model
1953    
1954            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
1955            Write the db connections
1956            (SessionSaver.write_session): Call write_db_connections to write
1957            the connection before the data sources
1958            (SessionSaver.write_data_containers): Handle postgis shapestores
1959    
1960            * test/test_save.py (SaveSessionTest.thubanids)
1961            (SaveSessionTest.thubanidrefs): Update for new DTD
1962            (SaveSessionTest.test_save_postgis): New. Test saving a session
1963            with postgis connections
1964    
1965            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
1966            (PostGISTable.TableName): New accessor methods for the connection
1967            and table name
1968    
1969            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
1970            (TestPostGISTable.test_dbname): New methods to test the new
1971            PostGISConnection methods
1972    
1973    2003-08-22  Bernhard Herzog  <[email protected]>
1974    
1975            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
1976            for exceptions occurring when establishing a Database connection
1977            (PostGISConnection.connect): Catch psycopg.OperationalError during
1978            connects and raise ConnectionError.
1979    
1980            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
1981            tests for database exceptions
1982    
1983    2003-08-22  Bernhard Herzog  <[email protected]>
1984    
1985            Prepare the test suite for tests with required authentication
1986    
1987            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
1988            variables with two predefined users/passwords, one for the admin
1989            and one for a non-privileged user.
1990            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
1991            the non-privileged user to the database and set the admin password
1992            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
1993            Better error reporting
1994            (PostgreSQLServer.connection_params)
1995            (PostgreSQLServer.connection_string): New methods to return
1996            information about how to connect to the server
1997            (PostgreSQLServer.execute_sql): New. Convenience method to execute
1998            SQL statements
1999            (PostgreSQLServer.require_authentication): Toggle whether the
2000            server requires authentication
2001            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
2002            Add or alter users
2003            (PostGISDatabase.initdb): Pass the admin name one the
2004            subprocesses' command lines. Grant select rights on
2005            geometry_columns to everybody.
2006            (upload_shapefile): Use the admin name and password when
2007            connecting. Grant select rights on the new table to everybody.
2008    
2009            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
2010            server's new methods to get the connection parameters.
2011    
2012            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
2013            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
2014            server's new methods to get the connection parameters.
2015    
2016            * test/test_postgis_db.py
2017            (TestPostGISConnection.test_gis_tables_empty)
2018            (TestPostGISConnection.test_gis_tables_non_empty)
2019            (PostGISStaticTests.setUp): Use the server's new methods to get
2020            the connection parameters.
2021    
2022    2003-08-22  Bernhard Herzog  <[email protected]>
2023    
2024            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
2025    
2026            * Thuban/version.py: Add psycopg version
2027    
2028            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
2029            version of the psycopg module
2030    
2031    2003-08-22  Bernhard Herzog  <[email protected]>
2032    
2033            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
2034            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
2035            at the moment. The functionality should probably be implemented
2036            some time, though.
2037            (DBFrame.OnRemove): Display a message if the connection can't be
2038            removed because it's still in use.
2039    
2040    2003-08-22  Jan-Oliver Wagner <[email protected]>
2041    
2042            * Thuban/UI/about.py (About.__init__): split up the huge about
2043            text into elements/lists for easier translation. This fixes bug
2044            https://intevation.de/rt/webrt?serial_num=2058
2045            Also, made some forgotten string available for the i18n.
2046    
2047    2003-08-21  Bernhard Herzog  <[email protected]>
2048    
2049            Make postgis support really optional including insensitive menu
2050            items.
2051    
2052            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
2053            whether the postgis is supported.
2054    
2055            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
2056            to make postgis support optional
2057    
2058            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
2059            version of Thuban.Model.postgisdb.has_postgis_support
2060            (database_management command): Make it only sensitive if postgis
2061            is supported.
2062    
2063    2003-08-21  Jan-Oliver Wagner <[email protected]>
2064    
2065            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
2066            (section Adding and Removing Layers): Added text and described
2067            multi-selection.
2068            (chapter Extensions): New.
2069    
2070    2003-08-21  Jan-Oliver Wagner <[email protected]>
2071    
2072            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
2073            settings to allow multiple files to load into the map.
2074            Also reduced selection to *.shp as a default.
2075    
2076    2003-08-20  Bernhard Herzog  <[email protected]>
2077    
2078            Add dialogs and commands to open database connections and add
2079            database layers.
2080    
2081            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
2082            method to open the database connection management dialog
2083            (MainWindow.AddDBLayer): New method to add a layer from a database
2084            (_has_dbconnections): New helper function to use for sensitivity
2085            (database_management command, layer_add_db command): New commands
2086            that call the above new methods.
2087            (main_menu): Add the new commands to the menu.
2088    
2089            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
2090            (PostGISConnection.connect): Establish the actual connection in a
2091            separate method and call it in __init__. This makes it easier to
2092            override the behavior in test cases
2093            (PostGISConnection.BriefDescription): New method to return a brief
2094            description for use in dialogs.
2095    
2096            * test/test_postgis_db.py (NonConnection): DB connection that
2097            doesn't actually connect
2098            (TestBriefDescription): New class with tests for the new
2099            BriefDescription method
2100    
2101    2003-08-19  Jan-Oliver Wagner <[email protected]>
2102    
2103            Moved anything from extensions to libraries.
2104    
2105            * libraries: New.
2106    
2107            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
2108    
2109            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
2110            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
2111            been moved here from thuban/extensions/pyprojection/
2112            See there in the Attic for the older history.
2113    
2114            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
2115            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
2116            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
2117            have been moved here from thuban/extensions/pyshapelib/
2118            See there in the Attic for the older history.
2119    
2120            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
2121            files have been moved here from thuban/extensions/shapelib/
2122            See there in the Attic for the older history.
2123    
2124            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2125            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
2126            thuban/extensions/thuban/
2127            See there in the Attic for the older history.
2128    
2129            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
2130    
2131            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
2132            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
2133    
2134            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
2135            Moved to libraries/shapelib.
2136    
2137            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
2138            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
2139            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
2140            Moved to libraries/pyshapelib.
2141    
2142            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
2143            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
2144            Moved to libraries/pyprojection.
2145    
2146            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
2147    
2148            * extensions: Removed.
2149    
2150    2003-08-19  Bernhard Herzog  <[email protected]>
2151    
2152            * test/test_viewport.py (ViewPortTest): We don't use the
2153            facilities of FileTestMixin so don't derive from it.
2154            (TestViewportWithPostGIS): New class with tests for using a
2155            viewport on a map with postgis layers.
2156    
2157    2003-08-19  Bernhard Herzog  <[email protected]>
2158    
2159            Add the db connection management to the session.
2160    
2161            * Thuban/Model/session.py (Session.__init__): New instance
2162            variable db_connections
2163            (Session.AddDBConnection, Session.DBConnections)
2164            (Session.HasDBConnections, Session.CanRemoveDBConnection)
2165            (Session.RemoveDBConnection): New methods to manage and query the
2166            db connections managed by the session
2167            (Session.OpenDBShapeStore): New method to open a shapestore from a
2168            db connection
2169    
2170            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
2171            messages for the db connection handling in the session
2172    
2173            * test/test_postgis_session.py: New. test cases for the session's
2174            db connection handling with postgis connections
2175    
2176    2003-08-19  Bernhard Herzog  <[email protected]>
2177    
2178            Add very basic postgis database support and the corresponding test
2179            cases. The test cases require a PostgreSQL + postgis installation
2180            but no existing database. The database will be created
2181            automatically by the test cases
2182    
2183            * test/README: Add note about skipped tests and the requirements
2184            of the postgis tests.
2185    
2186            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
2187    
2188            * test/test_postgis_db.py: New. Test cases for the postgis
2189            support.
2190    
2191            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
2192            format
2193    
2194            * test/test_wellknowntext.py: New. Test cases for the
2195            wellknowntext parser
2196    
2197            * test/postgissupport.py: New. Support module for tests involving
2198            a postgis database.
2199    
2200            * test/support.py (execute_as_testsuite): Shut down the postmaster
2201            if it's still running after the tests
2202    
2203            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
2204            well known text format
2205    
2206    2003-08-19  Jan-Oliver Wagner <[email protected]>
2207    
2208            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
2209            message dialog.
2210    
2211    2003-08-18  Bernhard Herzog  <[email protected]>
2212    
2213            * test/support.py (ThubanTestResult.printErrors): Indent the
2214            reason for the skips in the output to make it a bit more readable.
2215            (execute_as_testsuite): New helper function to run a test suite
2216            and print some more information.
2217            (run_tests): Use execute_as_testsuite to run the tests
2218    
2219            * test/runtests.py (main): Use execute_as_testsuite to run the
2220            tests
2221    
2222    2003-08-18  Bernhard Herzog  <[email protected]>
2223    
2224            Fix some bugs in Thuban and the test suite that were uncovered by
2225            changes introduced in Python 2.3:
2226    
2227            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
2228            filename is an absolute name
2229    
2230            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
2231            filename is an absolute name
2232    
2233            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
2234            unique filename to save to and use the correct relative filename
2235            in the expected output.
2236            (SaveSessionTest.test_dbf_table): Use the correct relative
2237            filename in the expected output.
2238    
2239            * test/test_layer.py (TestLayer.test_raster_layer): Update the
2240            test to check whether the filename is absolute.
2241    
2242    2003-08-18  Jan-Oliver Wagner <[email protected]>
2243    
2244            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
2245    
2246    2003-08-15  Bernhard Herzog  <[email protected]>
2247    
2248            Change the way shapes are returned by a shape store. The
2249            ShapesInRegion method returns an iterator over actual shape
2250            objects instead of a list of shape ids.
2251    
2252            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
2253            id.
2254            (ShapefileStore.ShapesInRegion): Return an iterator over the
2255            shapes which yields shape objects instead of returning a list of
2256            shape ids
2257            (ShapefileStore.AllShapes): New. Return an iterator over all
2258            shapes in the shape store
2259            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
2260    
2261            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
2262            doc-string.
2263    
2264            * Thuban/UI/baserenderer.py
2265            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
2266            layer_shapes and make it return an iterator containg shapes
2267            instead of a list of ids.
2268            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
2269            layer_shapes() change
2270    
2271            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
2272            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
2273    
2274            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
2275            changes in the ShapesInRegion return value.
2276            (ViewPort._get_hit_tester): Remove commented out code
2277    
2278            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
2279            new return value.
2280            (SimpleShapeStore.AllShapes): New. Implement this method too.
2281    
2282            * test/test_layer.py (TestLayer.test_arc_layer)
2283            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2284            (TestLayer.test_point_layer_with_projection)
2285            (TestLayer.test_derived_store): Adapt to changes in the
2286            ShapesInRegion return value.
2287    
2288            * test/test_shapefilestore.py
2289            (TestShapefileStoreArc.test_shapes_in_region)
2290            (TestShapefileStorePolygon.test_shapes_in_region)
2291            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
2292            in the ShapesInRegion return value.
2293            (TestShapefileStorePoint.test_all_shapes)
2294            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
2295            methods
2296    
2297            * test/test_derivedshapestore.py
2298            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
2299            the ShapesInRegion return value.
2300            (TestDerivedShapeStore.test_all_shapes)
2301            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
2302            methods
2303    
2304    2003-08-15  Bernhard Herzog  <[email protected]>
2305    
2306            Make the renderers deal correctly with raw vs. python level
2307            representation of shape geometries
2308    
2309            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
2310            Return a flag useraw in addition to the callable and the parameter
2311            to indicate whether the callable can deal with the raw shape data
2312            or uses the higher level python lists of coordinates. The callable
2313            now should accept either the raw data or the return value of the
2314            shape's Points() method.
2315            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
2316            change
2317            (BaseRenderer.projected_points): Instead of the shape id use the
2318            points list as parameter.
2319            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
2320            (BaseRenderer.draw_point_shape): Adapt to projected_points()
2321            change and accept the points list as parameter instead of the
2322            shape id.
2323    
2324            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
2325            the useraw flag as required by the BaseRenderer
2326            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
2327            changes.
2328    
2329            * test/test_baserenderer.py
2330            (TestBaseRenderer.test_point_with_classification): New test for
2331            rendering a map with classifications.
2332    
2333    2003-08-15  Bernhard Herzog  <[email protected]>
2334    
2335            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2336            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
2337            (ViewPort._get_hit_tester, ViewPort.projected_points)
2338            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
2339            (ViewPort._find_label_at): Split the find_shape_at method into
2340            several new methods and use the functions in the hit-test module.
2341    
2342            * Thuban/UI/hittest.py: New module with Python-level hit-testing
2343            functions
2344    
2345            * test/test_hittest.py: New. Test for the new hittest module
2346    
2347    2003-08-15  Bernhard Herzog  <[email protected]>
2348    
2349            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
2350            projection to all corners of the bounding box to get a better
2351            approximation of the projected bounding box
2352    
2353            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
2354            New. Test coordinate handling of a layer with a projection.
2355            Catches the bug fixed in Layer.ShapesInRegion
2356    
2357    2003-08-15  Bernhard Herzog  <[email protected]>
2358    
2359            Move some of the mock objects in test_baserenderer into their own
2360            module so they can easily be used from other tests
2361    
2362            * test/mockgeo.py: New test helper module with some mock objects
2363            for geometry related things like shapes, shapestores and
2364            projections.
2365    
2366            * test/test_mockgeo.py: New. Tests for the new helper module
2367    
2368            * test/test_baserenderer.py: Some of the mock-objects are in
2369            mockgeo now.
2370    
2371    2003-08-12  Jan-Oliver Wagner <[email protected]>
2372    
2373            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
2374    
2375    2003-08-12  Bernhard Herzog  <[email protected]>
2376    
2377            * po/de.po: New. German translations by Bjoern Broscheit
2378    
2379    2003-08-12  Bernhard Herzog  <[email protected]>
2380    
2381            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
2382            strings have to be one string literal.
2383    
2384    2003-08-11  Bernhard Herzog  <[email protected]>
2385    
2386            * test/support.py (FloatComparisonMixin.assertPointListEquals):
2387            New. This method was used in various derived classes, but it's
2388            better to have it here.
2389    
2390            * test/test_shapefilestore.py
2391            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
2392            FloatComparisonMixin
2393    
2394            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
2395            It's now in FloatComparisonMixin
2396    
2397            * test/test_derivedshapestore.py
2398            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
2399            in FloatComparisonMixin
2400    
2401    2003-08-11  Bernhard Herzog  <[email protected]>
2402    
2403            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
2404            error message
2405    
2406    2003-08-08  Jan-Oliver Wagner <[email protected]>
2407    
2408            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
2409            with version number.
2410            Changed title to reflect version number of Thuban.
2411    
2412    2003-08-08  Jan-Oliver Wagner <[email protected]>
2413    
2414            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
2415            the list corresponds to the "About" web page.
2416    
2417    2003-08-08  Bernhard Herzog  <[email protected]>
2418    
2419            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
2420            Make sure translated strings are recognized as one string literal.
2421    
2422            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
2423            Make sure translated strings are recognized as one string literal.
2424    
2425            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
2426            translated strings are recognized as one string literal.
2427    
2428            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
2429            sure translated strings are recognized as one string literal.
2430    
2431    2003-08-07  Bernhard Herzog  <[email protected]>
2432    
2433            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
2434            Simply delegates to the original shapestore.
2435    
2436            * test/test_derivedshapestore.py
2437            (TestDerivedShapeStore.test_raw_format): New. Test case for
2438            DerivedShapeStore.RawShapeFormat
2439    
2440    2003-08-07  Bernhard Herzog  <[email protected]>
2441    
2442            Add raw data interface to shape objects.
2443    
2444            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
2445            class to ShapefileShape which now holds shapefile specific
2446            information.
2447            (ShapefileShape.compute_bbox): Simplified to not cache any
2448            information. The way this method is used that shouldn't matter
2449            performance wise.
2450            (ShapefileShape.RawData): New. Return the shapeid which is the raw
2451            data format for shapes from shapefiles.
2452            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
2453            in the shape objects returned by a shapestore. For a
2454            ShapefileStore this is always RAW_SHAPEFILE.
2455            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
2456            method.
2457    
2458            * test/test_shapefilestore.py
2459            (TestShapefileStore.test_raw_format): New test to test the raw
2460            format feature of shapes.
2461    
2462            * Thuban/Model/layer.py: Remove the unused import of Shape from
2463            data. It was only there for interface compatibility but it's not
2464            used inside of Thuban and the generic Shape class has gone away.
2465    
2466            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
2467            the raw data format and only use an optimized version of its a
2468            shapefile.
2469    
2470    2003-08-07  Bernhard Herzog  <[email protected]>
2471    
2472            * test/test_baserenderer.py (SimpleShape): Shape class for the
2473            tests.
2474            (SimpleShapeStore.Shape): Use SimpleShape instead of
2475            Thuban.Model.data.Shape to make the tests independed of the coming
2476            changes.
2477    
2478    2003-08-07  Bernhard Herzog  <[email protected]>
2479    
2480            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
2481            (ThubanTestProgram): New classes that extend the respective
2482            classes from unittest. These new version support skipping tests
2483            under certain expected conditions. In the Thuban test suite we
2484            uses this for tests that require the optional gdal support.
2485            (run_tests): Use ThubanTestProgram instead of the unittest.main()
2486    
2487            * test/runtests.py (main): Use the new ThubanTestRunner instead of
2488            the normal one from unittest
2489    
2490            * test/test_layer.py (TestLayer.test_raster_layer): If this test
2491            is not run because gdal support isn't available report this to the
2492            runner.
2493    
2494            * test/test_baserenderer.py
2495            (TestBaseRenderer.test_raster_no_projection): Do not run this test
2496            if gdal support isn't available and report this to the runner.
2497    
2498    2003-08-06  Bernhard Herzog  <[email protected]>
2499    
2500            Rearrange the renderers a bit, partly in preparation for changes
2501            required for the postgis merge, partly to make it more testable.
2502            Also make the representation of coordinates in Shapes more
2503            consistent.
2504    
2505            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
2506            this class is now in BaseRenderer. This class is now practically
2507            only a specialization of BaseRenderer for rendering to an actual
2508            wx DC.
2509            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
2510            to get the shapetype specific rendering functions.
2511    
2512            * Thuban/UI/baserenderer.py: New file with the basic rendering
2513            logic. The code in this file is completely independend of wx.
2514            (BaseRenderer): Class with the basic rendering logic
2515    
2516            * test/test_baserenderer.py: New. Test cases for BaseRenderer
2517    
2518            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2519            error_on_redraw to guard agains endless loops and stack overflows
2520            when there's a bug in the rendering code that raises exceptions.
2521            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
2522            rendering into a separate method _do_redraw so that error handling
2523            is a bit easier. When an exception occurs, set error_on_redraw to
2524            true. When it's true on entry to OnIdle do nothing and return
2525            immediately.
2526    
2527            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
2528            Shape object will always have the coordinates as a list of list of
2529            coordinate pairs (tuples).
2530            (Shape.compute_bbox): Adapt to new representation.
2531    
2532            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2533            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
2534            Shape objects.
2535    
2536            * test/test_shapefilestore.py
2537            (ShapefileStoreTests.assertFloatTuplesEqual)
2538            (ShapefileStoreTests.assertPointListEquals): Rename to
2539            assertPointListEquals and change purpose to checking equality of
2540            the lists returned by Shape.Points().
2541            (TestShapefileStoreArc.test_shape)
2542            (TestShapefileStorePolygon.test_shape)
2543            (TestShapefileStorePoint.test_shape): Use the new
2544            assertPointListEquals instead of assertFloatTuplesEqual
2545    
2546            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
2547            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
2548            and change purpose to checking equality of the lists returned by
2549            Shape.Points().
2550            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
2551            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2552            (TestLayer.test_derived_store): Use the new assertPointListEquals
2553            instead of assertFloatTuplesEqual
2554    
2555            * test/test_derivedshapestore.py
2556            (TestDerivedShapeStore.assertFloatTuplesEqual)
2557            (TestDerivedShapeStore.assertPointListEquals): Rename to
2558            assertPointListEquals and change purpose to checking equality of
2559            the lists returned by Shape.Points().
2560            (TestDerivedShapeStore.test_shape): Use the new
2561            assertPointListEquals instead of assertFloatTuplesEqual
2562    
2563    2003-08-06  Jan-Oliver Wagner <[email protected]>
2564    
2565            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
2566            a bounding box. A dialog is raised in case, no bounding box
2567            is found. This fixes bug #2043:
2568            https://intevation.de/rt/webrt?serial_num=2043
2569    
2570    2003-08-05  Bernhard Herzog  <[email protected]>
2571    
2572            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
2573            object look like a Color instantiation. Formerly it looked like a
2574            tuple.
2575    
2576            * test/test_color.py (TestColor.test_repr)
2577            (TestColor.test_equality, TestColor.test_inequality): New. test
2578            some more apects of the Color class
2579            (TestTransparent.test_repr, TestTransparent.test_hex)
2580            (TestTransparent.test_equality): New. Test cases for the
2581            Transparent object.
2582    
2583    2003-08-04  Jan-Oliver Wagner <[email protected]>
2584    
2585            * Doc/manual/thuban-manual.xml: a number of small improvements.
2586            The resulting file is the version submitted for GREAT-ER II.
2587    
2588    2003-08-01  Bernhard Herzog  <[email protected]>
2589    
2590            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
2591            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
2592            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
2593    
2594            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
2595            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
2596            (ThubanEndBusyCursor): Add doc-strings
2597    
2598    2003-08-01  Bernhard Herzog  <[email protected]>
2599    
2600            First step towards PostGIS integration. More abstraction by movin
2601            more code from the layer to the shapestore. More methods of the
2602            layer are now simply delegated to the equivalent method of the
2603            shapestore. The SHAPETYPE_* constants are now in data not in
2604            layer.
2605    
2606            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2607            (SHAPETYPE_POINT, Shape): Move these constants and classes from
2608            layer.py to data.py
2609            (ShapefileStore.__init__): More Initialization for the new methods
2610            and functionality.
2611            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
2612            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
2613            (ShapefileStore.Shape): New methods that were formerly implemented
2614            in the layer.
2615            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
2616            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
2617            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
2618            equivalents of the new shape methods. These versions are simply
2619            delegated to the original shapstore.
2620    
2621            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2622            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
2623            (Layer.SetShapeStore): Removed the initializatin of instance
2624            variables that were needed for the stuff that's now in
2625            ShapefileStore
2626            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
2627            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
2628            shapestore.
2629    
2630            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
2631            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
2632            instead of layer.
2633    
2634            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
2635    
2636            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
2637    
2638            * test/test_layer.py: Import the SHAPETYPE_* constants from data
2639            instead of layer.
2640            (TestLayer.test_derived_store): Remove the test for the exception
2641            when instantiating the DerivedShapeStore with an incompatible
2642            table which is now in test_derivedshapestore.py. Add some more
2643            tests of the layer methods to determine whether they work for a
2644            DerivedShapeStore as well.
2645    
2646    2003-07-31  Jonathan Coles   <[email protected]>
2647    
2648            * Doc/manual/thuban-manual.xml: Fix the list of required packages
2649            by just listing the name and where they can be found.
2650    
2651  2003-07-31  Frank Koormann   <[email protected]>  2003-07-31  Frank Koormann   <[email protected]>
2652    
2653          * Doc/manual/thuban-manual.xml:          * Doc/manual/thuban-manual.xml:
# Line 145  Line 2795 
2795    
2796          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
2797          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
2798          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
2799          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
2800    
2801          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

Legend:
Removed from v.1532  
changed lines
  Added in v.2029

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26