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

Legend:
Removed from v.1573  
changed lines
  Added in v.2026

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26