/[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 1655 by bh, Mon Aug 25 16:05:33 2003 UTC revision 2018 by bh, Wed Dec 3 18:43:11 2003 UTC
# Line 1  Line 1 
1    2003-12-03  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/mainwindow.py (MainWindow.Unsubscribe): Deal with
4            publishers that are wx objects and may have been destroyed by wx
5            already. Fixes RT #2242.
6    
7    2003-12-03  Bernhard Herzog  <[email protected]>
8    
9            * po/ru.po: Updates from Alex Shevlakov
10    
11    2003-12-03  Silke Reimer <silkeintevation.de>
12    
13            * debian/control, debian/changelog: Added gdal-support to
14                    debian package, updated to new thuban version
15    
16    
17    2003-12-03  Bernhard Herzog  <[email protected]>
18    
19            * Thuban/Lib/version.py: New. Module for version number
20            manipulations. The version of make_tuple here also deals better
21            with more unusual version number strings, such as e.g.
22            "1.2+cvs20031111"
23    
24            * Thuban/version.py (make_tuple): Removed. It's now in
25            Thuban.Lib.version. Use that implementation instead.
26    
27            * test/test_lib_version.py: New. Tests for Thuban/Lib/version.py
28    
29    2003-12-02  Bernhard Herzog  <[email protected]>
30    
31            * MANIFEST.in: Add debian files
32    
33            * setup.py (setup call): Add packages for the Extensions so that
34            they're installed too
35            (data_files): Add READMEs and sample data from some Extensions
36    
37            * NEWS: Add note about the extensions in binary packages
38    
39    2003-12-02  Bernhard Herzog  <[email protected]>
40    
41            * Thuban/Model/save.py (SessionSaver.write_session): Save files
42            with the thuban-1.0rc1
43    
44            * Thuban/Model/load.py (SessionLoader.__init__): Recognize the
45            thuban-1.0rc1 namespace too
46    
47            * test/test_save.py (SaveSessionTest.dtd)
48            (SaveSessionTest.testEmptySession)
49            (SaveSessionTest.testSingleLayer)
50            (SaveSessionTest.testLayerProjection)
51            (SaveSessionTest.testRasterLayer)
52            (SaveSessionTest.testClassifiedLayer)
53            (SaveSessionTest.test_dbf_table)
54            (SaveSessionTest.test_joined_table)
55            (SaveSessionTest.test_save_postgis): Update to thuban-1.0rc1
56            namespace
57    
58            * test/test_load.py (LoadSessionTest.dtd): Update to thuban-1.0rc1
59            namespace
60            (TestSingleLayer.file_contents)
61            (TestNonAsciiColumnName.file_contents)
62            (TestLayerVisibility.file_contents)
63            (TestClassification.file_contents, TestLabels.file_contents)
64            (TestLayerProjection.file_contents)
65            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
66            (TestPostGISLayer.file_contents)
67            (TestPostGISLayerPassword.file_contents)
68            (TestLoadError.file_contents, TestLoadError.test): Update to
69            thuban-1.0rc1 namespace
70    
71    2003-12-01  Bernhard Herzog  <[email protected]>
72    
73            * setup.py (proj4_prefix, wx_prefix, gdal_prefix): Fix these for
74            nt to better match Intevation's current w32 setup
75    
76            * HOWTO-Release: Add note about updating MANIFEST.in
77    
78            * MANIFEST.in: Add the Extensions
79    
80            * NEWS: Update for 1.0rc1
81    
82    2003-12-01  Bernhard Herzog  <[email protected]>
83    
84            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Change the wild
85            cards for the dialog so that shapefiles ending in all uppercase
86            SHP are listed too
87    
88    2003-11-28  Bernhard Herzog  <[email protected]>
89    
90            * Thuban/version.py (longversion): Update to 1.0rc1
91    
92            * setup.py (setup call): Update version to 1.0rc1. Use the
93            [email protected] email address as author email instead of my
94            personal one.
95    
96    2003-11-28  Bernhard Herzog  <[email protected]>
97    
98            * po/de.po: Update german translation.
99    
100    2003-11-28  Bernhard Herzog  <[email protected]>
101    
102            Unify the filenames stored in .thuban files so that the .thuban
103            files are more platform independend
104    
105            * Thuban/Model/save.py (unify_filename): New. Unify filenames so
106            that they can be used on both windows and unix
107            (SessionSaver.prepare_filename): New. Handle all filename
108            transformations for filenames stored in the thuban file
109            (SessionSaver.write_data_containers, SessionSaver.write_layer):
110            Use prepare_filename
111    
112            * test/test_save.py (SaveSessionTest.testSingleLayer)
113            (SaveSessionTest.testLayerProjection)
114            (SaveSessionTest.testRasterLayer)
115            (SaveSessionTest.testClassifiedLayer)
116            (SaveSessionTest.test_dbf_table)
117            (SaveSessionTest.test_joined_table): Filenames are always stored
118            with slashes on all currently supported platforms so adapt all
119            tests to this
120    
121            * test/test_load.py (LoadSessionTest.filenames): With the new
122            filename scheme the filenames in the tests should be
123            understandable on all currently supported platforms so we turn
124            this into an empty list because we don't have to normalize them
125            anymore
126    
127    2003-11-28  Bernhard Herzog  <[email protected]>
128    
129            * test/test_layer.py (TestLayer.test_arc_layer_with_projection):
130            Add the ellipsoid to the projection since some Proj versions
131            complain if it's missing.
132    
133    2003-11-27  Bernhard Herzog  <[email protected]>
134    
135            Corect some bounding box projection problems
136    
137            * Thuban/Model/proj.py (Projection.InverseBBox): New. Inverse
138            version of ForwardBBox
139            (Projection._transform_bbox): New. common implementation of
140            ForwardBBox and InverseBBox
141            (Projection.ForwardBBox): Use _transform_bbox.
142    
143            * test/test_proj.py (TestProjection.test): Add test for
144            InverseBBox
145    
146            * Thuban/Model/layer.py (Layer.LatLongBoundingBox)
147            (Layer.ShapesBoundingBox, RasterLayer.LatLongBoundingBox): Use the
148            new InverseBBox method to determine the unprojected bounding box
149            (Layer.ShapesInRegion): Use the ForwardBBox method to project the
150            bbox.
151    
152            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
153            Removed.
154            (TestLayer.test_arc_layer_with_projection): New. This test is
155            better able to test whether bounding boxes are projected correctly
156            than test_point_layer_with_projection
157    
158            * Thuban/UI/viewport.py (ViewPort.map_projection_changed): Use
159            InverseBBox to unproject bboxes
160    
161    2003-11-25  Bernhard Herzog  <[email protected]>
162    
163            * Thuban/UI/about.py (About.__init__): Make sure we have ASCII
164            source code.
165    
166    2003-11-25  Bernhard Herzog  <[email protected]>
167    
168            * Thuban/Model/layer.py (Layer.__getattr__): Removed. It was only
169            there for backwards compatibility and all code relying on that
170            should have been updated by now.
171    
172    2003-11-25  Bernhard Herzog  <[email protected]>
173    
174            * test/test_load.py (TestClassification.test): Add the missing
175            round trip test.
176            (TestClassification.file_contents): Update to the newest file
177            format
178    
179    2003-11-25  Bernhard Herzog  <[email protected]>
180    
181            Add very experimental (and possibly dangerous) extension to draw
182            polygons:
183    
184            * Extensions/drawshape/README: New. Brief installation
185            instructions
186    
187            * Extensions/drawshape/drawshape.py: New. Implementation of the
188            drawshape extensions
189    
190            * Extensions/drawshape/patch.diff: Patch to apply before the
191            extension can be used.
192    
193    2003-11-24  Bernhard Herzog  <[email protected]>
194    
195            * Thuban/Model/data.py (ShapefileStore._open_shapefile)
196            (ShapefileStore.__init__): Factor opening the shapefile into a
197            separate method (the new _open_shapefile). This makes the code a
198            bit more readable but the real reason is that it makes some evil
199            hacks easier. :-)
200    
201    2003-11-24  Bernhard Herzog  <[email protected]>
202    
203            * Thuban/Model/load.py (SessionLoader.check_attrs): If no
204            converter is specified for an attribute assume it's a string
205            containing only Latin1 characters. Update doc-string accordingly.
206            This change should fix many places where unicode objects might
207            accidentally enter Thuban.
208    
209            * test/test_load.py (TestNonAsciiColumnName): New test to check
210            what happens with column names in DBF files that contain non-ascii
211            characters
212    
213    2003-11-21  Bernhard Herzog  <[email protected]>
214    
215            Enable the experimental attribute editing again and introduce a
216            command line switch to actually activate it
217    
218            * Thuban/UI/main.py (options): New. Container for options set on
219            the commmand line
220            (main): Add the --enable-attribute-editing flag.
221    
222            * Thuban/UI/identifyview.py (IdentifyView.__init__): If attribute
223            editing is enabled use the grid ctrl which allows editing of the
224            values
225    
226            * Thuban/Model/transientdb.py (AutoTransientTable.write_record):
227            New. Just delegate this to the underlying table.
228    
229    2003-11-20  Bernhard Herzog  <[email protected]>
230    
231            * test/test_proj.py (ProjFileReadTests.test_read_unreadable_file):
232            Skip this test if run under non-posix systems since it only works
233            there
234    
235    2003-11-19  Bernhard Herzog  <[email protected]>
236    
237            * Thuban/Model/resource.py: Rework the way gdal support is
238            determined so that we can give a reason in the about why gdal is
239            not supported.
240            (gdal_support_status): New. Variable holding a string with the
241            reason for no gdal support
242    
243            * Thuban/UI/about.py (About.__init__): Add the reason why gdal is
244            not supported to the message
245    
246    2003-11-19  Bernhard Herzog  <[email protected]>
247    
248            Remove the old table interface and its test cases
249    
250            * Thuban/Model/table.py (OldTableInterfaceMixin): Removed.
251            (DBFTable, MemoryTable): Do not derive from OldTableInterfaceMixin
252            anymore
253    
254            * Thuban/Model/transientdb.py (TransientTableBase)
255            (AutoTransientTable): Do not derive from OldTableInterfaceMixin
256            anymore
257    
258            * test/test_table.py: Removed since the old interface it tests is
259            gone.
260    
261            * test/runtests.py (main): The old table interface is gone and
262            with it the deprecation warnings so remove the code that turns
263            these warnings into errors
264    
265    2003-11-19  Bernhard Herzog  <[email protected]>
266    
267            * test/test_table.py: Revert to revision 1.5 again. Changing the
268            tests to use the new table interface is completely wrong since the
269            whole purpose of the tests in this module is to test the old
270            interface.
271    
272    2003-11-18  Bernhard Herzog  <[email protected]>
273    
274            * Thuban/Model/postgisdb.py (PostGISConnection.MatchesParameters):
275            New. Test whether the connection matches a set of connection
276            parameters
277    
278            * Thuban/UI/dbdialog.py (DBFrame.conns_changed): Fix doc-string
279            (DBFrame.OnAdd): Use the new MatchesParameters method when looking
280            for existing connections with the same parameters and break out of
281            the loop correctly.
282    
283            * test/test_postgis_db.py (TestBriefDescription)
284            (TestPostGISSimple.test_brief_description): Rename
285            TestBriefDescription to TestPostGISSimple and the test method to
286            test_brief_description so that we can add more test methods.
287            (TestPostGISSimple.test_matches_parameters): New. Test the new
288            MatchesParameters method
289    
290    2003-11-18  Bernhard Herzog  <[email protected]>
291    
292            * Thuban/Lib/connector.py (Publisher): Introduce a new flag,
293            _was_destroyed, to indicate whether an publisher instance has
294            already been destroyed.
295            (Publisher.Unsubscribe): Only disconnect if the publisher has not
296            been destroyed yet.
297            (Publisher.Destroy): Set the _was_destroyed flag to true.
298    
299            * test/test_connector.py
300            (TestPublisher.test_unsubscribe_after_destroy): New. Test that
301            calling Unsubscribe after Destroy doesn't raise an exception
302    
303    2003-11-14  Bernhard Herzog  <[email protected]>
304    
305            * Thuban/UI/identifyview.py (IdentifyView.selected_shape): Fix
306            typo in doc-string
307    
308    2003-11-13  Bernhard Herzog  <[email protected]>
309    
310            Quote table and column names properly for postgis.
311    
312            * Thuban/Model/postgisdb.py (quote_identifier): New. Function to
313            quote an identifier for use in an sql statement
314            (PostGISColumn.__init__): Add the quoted_name attribute
315            (PostGISTable.__init__): New instance variable quoted_tablename
316            (PostGISTable._fetch_table_information): Use the quoted table
317            name. New isntance variable quoted_geo_col with a quoted version
318            of geometry_column
319            (PostGISTable.NumRows, PostGISTable.RowIdToOrdinal)
320            (PostGISTable.RowOrdinalToId): Use the quoted table name
321            (PostGISTable.ReadValue, PostGISTable.ValueRange)
322            (PostGISTable.UniqueValues, PostGISTable.SimpleQuery)
323            (PostGISShapeStore.BoundingBox, PostGISShapeStore.Shape)
324            (PostGISShapeStore.AllShapes, PostGISShapeStore.ShapesInRegion):
325            Use quoted table and column names
326    
327            * test/test_postgis_db.py (TestPostGISSpecialCases)
328            (TestPostGISIgnoredColumns): Rename the class to
329            TestPostGISSpecialCases because that better describes the new
330            cases
331            (TestPostGISSpecialCases.test_unsupported_types)
332            (TestPostGISSpecialCases.test): Rename the method to
333            test_unsupported_types because we need a more descriptive name now
334            that there are more methods
335            (TestPostGISSpecialCases.test_table_name_quoting)
336            (TestPostGISSpecialCases.test_column_name_quoting)
337            (TestPostGISSpecialCases.test_shapestore_name_quoting): New test
338            cases to test quoting of table and column names in PostGISTable
339            and PostGISShapeStore
340    
341            * test/postgissupport.py
342            (skip_if_addgeometrycolumn_does_not_use_quote_ident): New. Skip if
343            AddGeometryColumn desn't support table or column names with sapces
344            or double quotes
345    
346    2003-11-12  Jan-Oliver Wagner <[email protected]>
347    
348            * Extensions/wms/__init__.py: New: Init to make this
349            directory a package.
350    
351            * Extensions/wms/wms.py: New: Provide layers via OGC WMS.
352    
353    2003-11-11  Bernhard Herzog  <[email protected]>
354    
355            * Thuban/Model/resource.py (EPSG_DEPRECATED_PROJ_FILE): New.
356            Constant for the file woth deprecated epsg projections
357            (get_system_proj_file): Update doc-string
358    
359            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Add a space
360            above the EPS widgets, introduce a check box for the deprecated
361            eps projections and a label for the epsg widgets
362            (ProjFrame._OnShowEPSG): Handle the deprecated EPSG projections
363            too
364    
365    2003-11-11  Bernhard Herzog  <[email protected]>
366    
367            Avoid warnings when run under Python 2.3
368    
369            * Thuban/UI/baserenderer.py (BaseRenderer.draw_point_shape)
370            (BaseRenderer.draw_label_layer): Coordinates must be ints.
371    
372            * Thuban/UI/renderer.py (MapRenderer.make_point): Turn this into a
373            real method so that we can convert to int.
374            (MapRenderer.label_font): The font size mist be an int.
375    
376            * Thuban/UI/common.py (Color2wxColour): The color values must be
377            ints. Also, remove the unnecessary asserts.
378    
379            * test/test_load_0_8.py (TestUnicodeStrings.file_contents)
380            (TestUnicodeStrings.test): Python source code should not contain
381            non-ascii characters unless an encoding is specified in the file.
382            Therefore use \x escapes in the string literals for non-ascii
383            characters.
384    
385    2003-11-11  Bernhard Herzog  <[email protected]>
386    
387            * Thuban/Model/resource.py (get_system_proj_file): Add a filename
388            parameter so that this function can be used for all proj files in
389            Resource/Projections
390            (DEFAULT_PROJ_FILE, EPSG_PROJ_FILE): New. Predefined filenames for
391            get_system_proj_file
392    
393            * Thuban/UI/projdialog.py (ProjFrame.__init__): Instead of one
394            ProjFile self.__sysProjFile use a dictionary of system ProjFile
395            objects self._sys_proj_files
396            (ProjFrame.build_dialog): Adapt to the new changes in the
397            ProjectionList constructor. Add a check button to toggle whether
398            EPSG projections are shown
399            (ProjFrame._OnShowEPSG): New. Handler for the epsg check button
400            events.
401            (ProjFrame.load_user_proj, ProjFrame.load_system_proj): Only show
402            the busy cursor if the files have not yet been loaded by the
403            dialog.
404            (ProjFrame.load_system_proj): Add a parameter for the name of the
405            proj file. Maintain the dictionary of system projections
406            self._sys_proj_files
407    
408            * Thuban/UI/projlist.py (ProjectionList): Merge the system_projs,
409            user_projs parameters into one parameter proj_files which is a
410            list of proj files.
411            (ProjectionList._subscribe_proj_files)
412            (ProjectionList._unsubscribe_proj_files): New. Move
413            subscription/unsubscription of projfile messages to separate
414            methods
415            (ProjectionList.Destroy): The unsubscribe is now done in
416            _unsubscribe_proj_files
417            (ProjectionList.update_projections): We now have a list of proj
418            file objects
419            (ProjectionList.SetProjFiles): New method to set a new list of
420            proj file objects
421    
422            * test/test_proj.py (ProjFileReadTests.test_get_system_proj_file):
423            Specify explicitly which system proj file to load.
424    
425    2003-11-11  Bernhard Herzog  <[email protected]>
426    
427            * Thuban/Model/load.py (SessionLoader.Destroy): New. Clear all
428            instance variables to cut cyclic references. The GC would have
429            collected the loader eventually but it can happen that it doesn't
430            run at all until thuban is closed (2.3 but not 2.2 tries a bit
431            harder and forces a collection when the interpreter terminates)
432            (load_session): Call the handler's Destroy method to make sure
433            that it gets garbage collected early. Otherwise it will be
434            collected very late if at all and it holds some references to e.g.
435            shapestores and the session which can lead to leaks (of e.g. the
436            temporary files)
437    
438            * test/test_load.py (TestSingleLayer.test_leak): New. test for the
439            resource leak in load_session
440    
441    2003-11-10  Bernhard Herzog  <[email protected]>
442    
443            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
444            extensions are to be rendered.
445            (_renderer_extensions): New. List with renderer for layers in
446            extensions
447            (add_renderer_extension): New. Add a renderer extension
448            (init_renderer_extensions): New. Init the renderer extensions
449            (BaseRenderer.render_map_incrementally): Search
450            _renderer_extensions for how to draw unknown layer types
451            (BaseRenderer.draw_raster_data): Add format parameter so that
452            formats other than BMP can be drawn
453            (BaseRenderer.draw_raster_layer): Pass an explicit format to
454            draw_raster_data
455    
456            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
457            strings of the format parameter of draw_raster_data method to wx
458            constants
459            (MapRenderer.draw_raster_data): Add the format parameter and use
460            raster_format_map to map it to the right wxwindows constant for
461            wxImageFromStream
462    
463            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
464            the format parameter and record it
465            (TestBaseRenderer.test_raster_no_projection): check the format
466            paramter of the draw_raster_data method
467            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
468            extension facility
469    
470    2003-11-07  Bernhard Herzog  <[email protected]>
471    
472            Tweak the usage of the sqlite database to make common use cases
473            more responsive. In most cases copying the data to the sqlite
474            database takes so long that using sqlite doesn't have enough
475            advantages.
476    
477            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
478            comments about performance and query the min and max in separate
479            statements because only that way will indexes be used.
480            (TransientTableBase.UniqueValues): Add some comments about
481            performance.
482            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
483            Do not copy the data to the transient DB but use the transient
484            copy if it exists. See the new comments for the performance trade
485            offs
486    
487            * test/test_transientdb.py
488            (TestTransientTable.test_auto_transient_table): Make sure that the
489            data is copied to the transient database at some point.
490    
491    2003-11-03  Bernhard Herzog  <[email protected]>
492    
493            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
494            globals to locals so that it's a bit faster
495    
496    2003-11-03  Bernhard Herzog  <[email protected]>
497    
498            * Thuban/UI/baserenderer.py
499            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
500            method. ReadValue is faster than ReadRowAsDict since it only reads
501            one cell especially now that the dbf file objects actually
502            implement it.
503    
504            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
505            read_attribute method of the dbf objects
506    
507    2003-11-03  Bernhard Herzog  <[email protected]>
508    
509            * Extensions/profiling/profiling.py (popup_dialog_box): New config
510            variable to indicate whether the result should be shown in a
511            dialog box
512            (profile_screen_renderer, time_screen_renderer): Only show a
513            dialog box if popup_dialog_box is true.
514            (profile_screen_renderer): Flush stdout after the printing the
515            first part of the "profiling..." message
516    
517            * Thuban/UI/baserenderer.py
518            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
519            brushes for the groups so that they're not created over and over
520            again
521    
522            * Thuban/Model/classification.py (Classification.__getattr__)
523            (Classification._compile_classification)
524            (Classification._clear_compiled_classification): New. Methods to
525            manage a 'compiled' representation of the classification groups
526            which is created on demand
527            (Classification.InsertGroup, Classification.RemoveGroup)
528            (Classification.ReplaceGroup): reset the compiled representation
529            (Classification.FindGroup): Use the compiled representation to
530            find the matching group
531            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
532    
533    2003-10-31  Bernhard Herzog  <[email protected]>
534    
535            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
536            Send a CLASS_CHANGED message
537            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
538            not return the removed group since it wasn't used.
539    
540            * test/test_classification.py
541            (TestClassification.test_set_default_group): New. Test the
542            SetDefaultGroup method
543            (TestClassification.test_insert_group): New. Test the InsertGroup
544            method
545            (TestClassification.test_remove_group): New. Test the RemoveGroup
546            method
547            (TestClassification.test_replace_group): New. Test the
548            ReplaceGroup method
549    
550    2003-10-31  Bernhard Herzog  <[email protected]>
551    
552            * test/test_classification.py (TestClassification.setUp):
553            Subscribe to the CLASS_CHANGED messages
554            (TestClassification.tearDown): New. Destroy the classification
555            properly
556            (TestClassification.test_defaults): Add tests for the default line
557            width and whether no messages were sent yet
558            (TestClassification.test_set_default_properties): Add tests for
559            messages and setting the default line width
560            (TestClassification.test_add_singleton)
561            (TestClassification.test_add_range)
562            (TestClassification.test_multiple_groups): Add tests for messages
563    
564    2003-10-31  Bernhard Herzog  <[email protected]>
565    
566            Some more refactoring in preparation for new tests:
567    
568            * test/test_classification.py (TestClassification.setUp): New.
569            Instantiate the classification here. Update the test methods
570            accordingly.
571            (TestClassification.test_multiple_groups): Make sure that the two
572            singletons matching 1 are considered different.
573    
574    2003-10-31  Bernhard Herzog  <[email protected]>
575    
576            * test/test_classification.py (red, green, blue): New. These
577            constants were used in several cases. Update the relevant methods.
578            (TestClassification.test_defaults)
579            (TestClassification.test_set_default_properties)
580            (TestClassification.test_add_singleton)
581            (TestClassification.test_add_range)
582            (TestClassification.test_multiple_groups)
583            (TestClassification.test_deepcopy): New. These were formerly all
584            part of the single method test.
585            (TestClassification.test_deepcopy): Removed.
586            (TestClassIterator): Removed. The test case is now a method of
587            TestClassification since it tests part of the public interface of
588            Classification
589            (TestClassification.test_iterator): New. Used to be
590            TestClassIterator effectively
591    
592    2003-10-31  Jan-Oliver Wagner <[email protected]>
593    
594            GUIfied the functions of the profiling extension.
595    
596            * /Extensions/profiling/__init__.py: New: Init to make this
597            directory a package.
598    
599            * Extensions/profiling/profiling.py: Moved menu entries to
600            the Extensions menu. Applied _() for strings.
601            (profile_screen_renderer): Catch the detailed printout and present
602            it in a dialog.
603            (time_screen_renderer): Raise a dialog to present the result instead
604            of printing it to stdout.
605    
606    2003-10-31  Bernhard Herzog  <[email protected]>
607    
608            * test/test_classification.py (TestClassGroupProperties)
609            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
610            (TestClassGroupSingleton, TestClassIterator, TestClassification):
611            Split TestClassification into several classes, one for each class
612            being tested. TestClassification itself now only tests
613            Classification. This split makes changes to the tests a bit easier
614    
615    2003-10-31  Bernhard Herzog  <[email protected]>
616    
617            * Extensions/profiling/profiling.py: New. Extension to measure
618            Thuban performance
619    
620    2003-10-31  Frank Koormann <[email protected]>
621    
622            Added two items to legend popup menu: Remove Layer and Show Layer Table
623    
624            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
625            LegendPanel._OnShowTable): New event handlers, call the corresponding
626            mainwindow methods.
627            (LegendTree._OnRightClick): Added items to popup menu.
628    
629    2003-10-30  Bernhard Herzog  <[email protected]>
630    
631            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
632            EVT_WINDOW_DESTROY
633            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
634            nothing but is convenient for the derived classes.
635    
636            * Thuban/UI/tableview.py
637            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
638            Unsubscribe the messages here not in OnClose because that might
639            get called multiple times. Fixes RT #2196
640            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
641            anymore.
642    
643            * README: Update the minimum requirement for wxPython. Since we
644            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
645            the version in which that was introduced for all platforms
646    
647    2003-10-30  Frank Koormann <[email protected]>
648    
649            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
650            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
651            frame.
652    
653    2003-10-30  Jan-Oliver Wagner <[email protected]>
654    
655            Improved APR import extension, added further EPSG definitions
656            and some cleanup regarding string class.
657    
658            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
659            Added test for alias 'longlat'.
660    
661            * Resources/Projections/epsg-deprecated.proj: New. Contains
662            deprecated EPSG definitions.
663    
664            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
665            the variable names for objects.
666    
667            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
668            Copied from importAPR and provided with documentation.
669    
670            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
671            Moved to apr.py.
672            (APR_View): Added object ref 'ITheme'.
673    
674            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
675            split function by corresponding use of the string class method.
676    
677            * Thuban/Model/xmlwriter.py: Replaced string replace function by
678            corresponding string method.
679    
680    2003-10-29  Bernhard Herzog  <[email protected]>
681    
682            * Thuban/UI/baserenderer.py
683            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
684            special case of a classification that only has the default group
685    
686    2003-10-27  Bernhard Herzog  <[email protected]>
687    
688            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
689    
690            * po/de.po: Update.
691    
692            * Thuban/UI/application.py
693            (ThubanApplication.ShowExceptionDialog): Handle translation of the
694            dialog message properly
695    
696    2003-10-27  Bernhard Herzog  <[email protected]>
697    
698            Rework how localization works so that we use wx's translation
699            functions when running Thuban as a normal application but not when
700            we don't need any UI, such as in the test suite. See the comment
701            in Thuban/__init__.py for details
702    
703            * Thuban/__init__.py (_): Add one level of indirection to make the
704            translation handling more flexible and to make it possible to use
705            either wx's translation services or not.
706            (gettext_identity, translation_function_installed)
707            (install_translation_function): New function to help with this
708    
709            * Thuban/UI/__init__.py: Install the wx specific translation
710            function if it's OK to do that
711    
712            * test/support.py (initthuban): Install a dummy translation
713            function so that importing Thuban.UI doesn't install a wx specific
714            one for which would need to import wxPython
715    
716    2003-10-27  Bernhard Herzog  <[email protected]>
717    
718            * HOWTO-Release: Source archives should be created first and the
719            binary packages should be created from the source archives.
720            There's an official debian package now so there's no need to test
721            the rpm on debian anymore
722    
723    2003-10-27  Bernhard Herzog  <[email protected]>
724    
725            Several rendering changes:
726    
727             - Render the selection into a separate bitmap so that only that
728               bitmap needs to be redrawn when the selection changes
729    
730             - Render incrementally showing previews and allowing interaction
731               before rendering is complete
732    
733             - Update the renderer interface a bit. Most parameters of
734               RenderMap are now parameters of the constructor
735    
736            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
737            and the update region as parameters. Update the doc-string
738            (BaseRenderer.render_map_incrementally): New. Generator function
739            to renders the map incrementally
740            (BaseRenderer.render_map): Remove the map argument (it's now in
741            the constructor) and simply iterate over the
742            render_map_incrementally generator to draw the map.
743            (BaseRenderer.draw_shape_layer_incrementally)
744            (BaseRenderer.draw_shape_layer): Renamed to
745            draw_shape_layer_incrementally and changed into a generator that
746            yields True every 500 shapes. Used by render_map_incrementally to
747            render shape layers incrementally
748    
749            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
750            map and region parameters which are now in the constructor
751            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
752            the inherited render_map_incrementally.
753            (BaseRenderer.draw_shape_layer): Removed.
754            (ScreenRenderer.draw_selection_incrementally): New. The selection
755            drawing part of the removed draw_shape_layer as a generator
756            (ScreenRenderer.layer_shapes): Update because of the region
757            parameter change
758            (ExportRenderer.__init__): New. Extend the inherited constructor
759            with the destination region for the drawing
760            (ExportRenderer.RenderMap): Removed the map and region parameters
761            which are now in the constructor
762    
763            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
764            bitmap suitable for a preview in a tool
765            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
766            bitmap
767            (MapPrintout.draw_on_dc): Adapt to new renderer interface
768            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
769            exists
770            (MapCanvas.OnIdle): Update the logic to deal with incremental
771            rendering and the selection bitmap
772            (MapCanvas._do_redraw): Handle the instantiation of the render
773            iterator and the redraws during rendering
774            (MapCanvas._render_iterator): New. Generator to incrementally
775            redraw both bitmaps
776            (MapCanvas.Export): Adapt to new renderer interface.
777            (MapCanvas.full_redraw): Reset the selection bitmap and the
778            renderer iterator too
779            (MapCanvas.redraw_selection): New. Force a redraw of the selection
780            bitmap
781            (MapCanvas.shape_selected): Only redraw the selection bitmap
782    
783            * test/test_baserenderer.py
784            (TestBaseRenderer.test_polygon_no_projection)
785            (TestBaseRenderer.test_raster_no_projection)
786            (TestBaseRenderer.test_point_map_projection)
787            (TestBaseRenderer.test_point_layer_and_map_projection)
788            (TestBaseRenderer.test_point_layer_projection)
789            (TestBaseRenderer.test_point_with_classification): Adapt to new
790            renderer interface
791    
792    2003-10-24  Bernhard Herzog  <[email protected]>
793    
794            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
795            (point_in_polygon_shape, shape_centroid): Raise an exception if
796            the shape can't be read. Previously invalid shape ids would lead
797            to a segfault.
798    
799            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
800            New. test whether an exception is raised for invalid shape ids
801    
802    2003-10-24  Jan-Oliver Wagner <[email protected]>
803    
804            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
805            as alias for 'latlong'.
806    
807            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
808            as alias for 'latlong'.
809    
810    2003-10-24  Jan-Oliver Wagner <[email protected]>
811    
812            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
813            the projection even for the UnknownPanel.
814            (UnknownProjPanel.__init__): Define the text and create the textctrl
815            widget.
816            (UnknownProjPanel._DoLayout): Replaced static text widget by the
817            textctrl created in __init__.
818            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
819            including the parameters of the projection.
820            
821    2003-10-24  Jan-Oliver Wagner <[email protected]>
822    
823            * Resources/Projections/epsg.proj: New. This is a list of
824            EPSG codes with parameters for proj. The list has been
825            generated using devtools/create_epsg.py based on the
826            file nad/epsg of the proj 4.4.7 package. Four projection
827            definitions have been deleted as they are not accepted by proj:
828            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
829            and "HD72 / EOV".
830    
831    2003-10-22  Bernhard Herzog  <[email protected]>
832    
833            Some more tweaks to the projection dialog which should fix RT
834            #1886.
835    
836            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
837            the ProjFile's messages and call the base class methods correctly
838            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
839            flag on the newly selected item too. Otherwise some other item is
840            focused and the first time the focus is moved with the keyboard
841            the selection moves in unexpected ways.
842    
843            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
844            focus on the OK button, only on the projection list. That way the
845            list really has the focus initially
846            (ProjFrame.OnClose): Call the projection list's Destroy method to
847            make it unsubscribe all messages
848    
849    2003-10-21  Bernhard Herzog  <[email protected]>
850    
851            Rework the projection dialog to fix a few bugs, including RT 2166
852            and most of 2168
853    
854            * Thuban/UI/projlist.py: New. The class ProjectionList is a
855            special wxListCtrl to show a list of projections in a more MVC
856            fashion
857    
858            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
859            throughout the class. The main change is to use the ProjectionList
860            class instead of a normal wxListBox. Also, add an explicit
861            "Unknown" projection to the projection choice control.
862            (ProjPanel.__init__): Add an "unknown" ellipsoid
863            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
864            instantiation of the panel's controls to make the tab-order more
865            natural
866    
867    2003-10-21  Bernhard Herzog  <[email protected]>
868    
869            * test/test_load.py (TestSingleLayer.file_contents)
870            (TestSingleLayer.test): Add non-ascii characters to the titles of
871            session, map and layer. This is effectively a port of the
872            TestUnicodeStrings test in test_load_0_8.py which for some reason
873            was only added there.
874    
875            * test/test_load_0_9.py (TestSingleLayer.file_contents)
876            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
877            characters to the titles of session, map and layer,.
878    
879    2003-10-21  Bernhard Herzog  <[email protected]>
880    
881            Add EPSG projection handling to .thuban files
882    
883            * test/test_save.py (SaveSessionTest.dtd)
884            (SaveSessionTest.testEmptySession)
885            (SaveSessionTest.testLayerProjection)
886            (SaveSessionTest.testRasterLayer)
887            (SaveSessionTest.testClassifiedLayer)
888            (SaveSessionTest.test_dbf_table)
889            (SaveSessionTest.test_joined_table)
890            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
891            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
892            use a and epsg projection to test saving them
893    
894            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
895            namespace
896            (TestLayerVisibility.file_contents, TestLabels.file_contents)
897            (TestLayerProjection.file_contents)
898            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
899            (TestPostGISLayer.file_contents)
900            (TestPostGISLayerPassword.file_contents)
901            (TestLoadError.file_contents, TestLoadError.test): Update to use
902            1.0-dev namespace
903            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
904            use 1.0-dev namespace and use an EPSG projection to test whether
905            loading it works
906    
907            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
908            as of Thuban 0.9. These are now tests to determine whether Thuban
909            can still read files generated by Thuban 0.9
910    
911            * Thuban/Model/save.py (SessionSaver.write)
912            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
913            namespace
914            (SessionSaver.write_projection): Write the projection's epsg
915            attribute
916    
917            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
918            thuban-1.0-dev.dtd namespace
919            (SessionLoader.check_attrs): Allow a callable object as conversion
920            too
921            (SessionLoader.start_projection, SessionLoader.end_projection)
922            (SessionLoader.start_parameter): Handle the epsg attribute and
923            rename a few instance variables to lower case
924    
925            * Resources/XML/thuban-1.0.dtd: New. Only difference to
926            thuban-0.9.dtd is the epsg attribute for projections.
927    
928    2003-10-21  Bernhard Herzog  <[email protected]>
929    
930            * test/runtests.py (main): Let the user specify which tests to run
931            on the command line
932    
933            * test/support.py (ThubanTestResult.getDescription): Override to
934            give a better short description. The description can be used as a
935            parameter to run_tests to run that particular test in isolation.
936    
937    2003-10-21  Frank Koormann   <[email protected]>
938    
939            Popup menu for legend. Scheduled for the 1.2 release this was too
940            simple to implement: The popup menu is bound to the legend tree, while
941            the events are hanlded by its anchestor, the legend panel. This
942            allows reuse of all the event handlers already implemented for the
943            legend toolbar buttons.
944    
945            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
946            to add handlers for the events issued by the popup menu.
947            (LegendPanel._OnToggleVisibility): Handler for toggling layer
948            visibility event
949            (LegendPanel._OnProjection): Handler for layer projection event.
950            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
951            (LegendTree._OnRightClick): Event handler for right click, select item
952            and pop up menu.
953            (LegendTree.ToggleVisibility): Toggle layer visibility
954            (LegendTree.LayerProjection): Raise layer projection dialog for
955            current layer.
956    
957    2003-10-21  Bernhard Herzog  <[email protected]>
958    
959            * Resources/Projections/defaults.proj: Use correct DOCTYPE
960            declaration. The top-level element is projectionlist not projfile
961    
962    2003-10-20  Bernhard Herzog  <[email protected]>
963    
964            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
965            method to write a projfile and display a busy cursor and error
966            dialogs.
967            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
968            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
969            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
970            busy cursor while loading the user and system prj files.
971    
972    2003-10-16  Bernhard Herzog  <[email protected]>
973    
974            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
975            ProjFile objects
976            (clear_proj_file_cache): New function to clear the cache. Mainly
977            useful for use by the test suite
978            (read_proj_file): Use the cache.
979    
980            * test/test_proj.py (TestProjFile): Clarify the doc-string
981            (ProjFileReadTests): Update doc-string
982            (ProjFileReadTests.test_get_system_proj_file): Check whether the
983            system proj files is cached.
984            (ProjFileLoadTestCase): New base class for the proj file tests
985            derived from support.FileLoadTestCase to provide some common
986            behavior.
987            (TestLoadingProjFile)
988            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
989            (TestProjFileWithInvalidParameters.file_contents): Derive from
990            ProjFileLoadTestCase
991            (TestLoadingProjFile.test_caching): New. Test whether the cache
992            works
993    
994    2003-10-16      Silke Reimer    <[email protected]>
995    
996            * debian/*: New directory with configuration files for building a thuban
997              deb-package.
998    
999    2003-10-14  Bernhard Herzog  <[email protected]>
1000    
1001            * test/test_proj.py: Execute support.run_tests when run as
1002            __main__ so that missing unsubscribes are detected
1003            (TestProjFile.tearDown): Destroy the proj_file properly
1004    
1005    2003-10-14  Bernhard Herzog  <[email protected]>
1006    
1007            * Thuban/Model/messages.py (PROJECTION_ADDED)
1008            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
1009            the ProjFile objects
1010    
1011            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
1012            easily send messages when the projections change
1013            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
1014            when the change was successful
1015    
1016            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
1017            proj file messages
1018            (TestProjFile.test_add_remove)
1019            (TestProjFile.test_remove_non_existing)
1020            (TestProjFile.test_replace)
1021            (TestProjFile.test_replace_non_existing): Test whether the right
1022            messages are sent
1023    
1024    2003-10-14  Bernhard Herzog  <[email protected]>
1025    
1026            * test/test_proj.py (TestProjFile.test): Refactor into several
1027            tests
1028            (TestProjFile.test_add_remove)
1029            (TestProjFile.test_remove_non_existing)
1030            (TestProjFile.test_replace)
1031            (TestProjFile.test_replace_non_existing): Some of the new
1032            individual test cases
1033            (TestProjFileSimple): New class for the rest of the test cases
1034            that came out of the refactoring
1035            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
1036            derived classes don't have to
1037    
1038    2003-10-13  Bernhard Herzog  <[email protected]>
1039    
1040            Add an optional EPSG code to the projection objects and extend the
1041            .proj file format accordingly.
1042    
1043            * Resources/XML/projfile.dtd (element projection): Add epsg
1044            attribute
1045    
1046            * Thuban/Model/proj.py (Projection.__init__): New parameter and
1047            instance variable epsg. Update doc-string
1048            (Projection.EPSGCode, Projection.Label): New methods to provide
1049            access to EPSG code and a label for use in dialogs
1050    
1051            * Thuban/Model/resource.py (ProjFileReader.start_projection)
1052            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
1053            Handle the epsg code attribute when reading or writing proj files
1054    
1055            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
1056            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
1057            (ProjFrame.__FillAvailList): Use the projection's Label method to
1058            get the string for the list box
1059    
1060            * test/test_proj.py (TestProjection.test_label)
1061            (TestProjection.test_label_epsg)
1062            (TestProjection.test_epsgcode_for_non_epsg_projection)
1063            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
1064            for the label and EPSGCode methods
1065            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
1066            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
1067            objects in the test cases and put the expected contents into the
1068            test case methods too. Update doTestWrite accordingly
1069            (TestLoadingProjFile)
1070            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
1071            read tests from TestProjFile.
1072            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
1073            tests are now in the new classes.
1074            (sample_projfile, sample_projfile_data)
1075            (sample_projfile2, sample_projfile_data2): Removed. Not used
1076            anymore.
1077            (TestProjFile.test_read_unreadable_file): No need to reset the
1078            permissions at the end anymore since we use a unique filename
1079    
1080    2003-10-13  Bernhard Herzog  <[email protected]>
1081    
1082            * test/test_proj.py: Some more refactoring of the test cases
1083            (ProjFileTest): New base class for the proj file tests.
1084            (TestProjFile): Derive from ProjFileTest
1085            (TestProjFile.test_read_unreadable_file)
1086            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
1087            the new filename method to get a unique filename
1088            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
1089            (WriteProjFileTests): New class for proj file write tests.
1090            Contains the write test that were in TestProjFile originally.
1091    
1092    2003-10-13  Bernhard Herzog  <[email protected]>
1093    
1094            * test/test_proj.py (TestProjFile.testRead)
1095            (TestProjFile.test_read_non_existing_file)
1096            (TestProjFile.test_read_unreadable_file)
1097            (TestProjFile.test_read_empty_file): Split into several methods.
1098    
1099    2003-10-10  Bernhard Herzog  <[email protected]>
1100    
1101            * Thuban/UI/sizers.py: New file with custom sizers.
1102    
1103            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
1104            all projection type specific panels and put them into a
1105            NotebookLikeSizer. This way the dialog doesn't change its size
1106            when a different projection is selected
1107            (ProjFrame.__init__): Rename projection_panels
1108            projection_panel_defs and reuse projection_panels for a list of
1109            the instantiated panels.
1110            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
1111            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
1112            the panels
1113            (UnknownProjPanel._DoLayout): Place the newlines in the message
1114            differently to make the panel narrower.
1115            (TMPanel._DoLayout): Layout the parameters in one column.
1116    
1117    2003-10-10  Bernhard Herzog  <[email protected]>
1118    
1119            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
1120            that contains all the setup for the dialog's widgets, layout and
1121            event handling.
1122            (__): Call build_dialog to build the dialog.
1123            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
1124            Their functionality is now in build_dialog
1125            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
1126            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
1127            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
1128            different widget names and hierarchy introduced with build_dialog.
1129    
1130    2003-10-10  Bernhard Herzog  <[email protected]>
1131    
1132            * README: Fix typo.
1133    
1134    2003-10-09  Bernhard Herzog  <[email protected]>
1135    
1136            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
1137            projection is already in the list. This is *a lot* faster when
1138            loading files with hundreds of projections since it saves a linear
1139            search. OTOH this will allow adding the same projection to the
1140            user.proj file multiple times in the projection dialog but we'll
1141            deal with that later
1142    
1143    2003-10-09  Jan-Oliver Wagner <[email protected]>
1144    
1145            * devtools: New. Directory for developer tools that are not intended
1146            for the regular user.
1147    
1148            * devtools/create_epsg.py: New. Convert the epsg file of proj into
1149            a python .proj file.
1150    
1151    2003-10-09  Bernhard Herzog  <[email protected]>
1152    
1153            * test/test_proj.py
1154            (TestProjection.test_get_parameter_without_equals_sign): New. Test
1155            whether GetParameter handles parameters without "=" sign correctly
1156    
1157            * Thuban/Model/proj.py (Projection.GetParameter): Handle
1158            parameters that do not contain a "=". Update the doc-string
1159    
1160    2003-10-08  Bernhard Herzog  <[email protected]>
1161    
1162            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
1163            length limit on the projname text control
1164    
1165    2003-10-08  Bernhard Herzog  <[email protected]>
1166    
1167            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
1168            (TestProjection.test_get_projection_units_normal): New. Tests for
1169            the Projection.GetProjectedUnits method
1170    
1171    2003-10-08  Jan-Oliver Wagner <[email protected]>
1172    
1173            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
1174            Added missing 'val' parameter.
1175    
1176    2003-10-08  Bernhard Herzog  <[email protected]>
1177    
1178            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
1179            projection type of the currently selected projection is not known,
1180            i.e. there's no panel for it, use the UnknownProjPanel
1181            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
1182            the actual replacing of the proj panel into the new method
1183            _show_proj_panel.
1184            (UnknownProjPanel): Add doc-string.
1185            (UnknownProjPanel._DoLayout): Insert a newline into the text so
1186            that the panel is not so wide.
1187    
1188    2003-10-08  Bernhard Herzog  <[email protected]>
1189    
1190            * Thuban/Model/resource.py (read_proj_file): Return the warnings
1191            too. Update the doc-string
1192            (get_proj_files): Removed. It wasn't used anywhere
1193            (get_system_proj_files, get_system_proj_file): Rename to
1194            get_system_proj_file and return the ProjFile object and not a list
1195            of ProjFile objects. Update the callers.
1196            (get_user_proj_files, get_user_proj_file): Rename to
1197            get_user_proj_file return the ProjFile object and not a list of
1198            ProjFile objects. Update the callers.
1199            (ProjFileReader.__init__): New instance variable for the warnings.
1200            Rename the __pf ivar to projfile. Update the methods referring to
1201            __pf
1202            (ProjFileReader.end_projection): Catch any errors raised when
1203            instantiating the projection and record that as an error. The
1204            projection will not be in the final ProjFile object.
1205            (ProjFileReader.GetWarnings): New method to return the warnings.
1206    
1207            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
1208            show the warnings from the projfile reader
1209            (ProjFrame._OnImport): Deal with any warnings returned by
1210            read_proj_file
1211            (ProjFrame.__FillAvailList): Deal with any warnings returned by
1212            get_system_proj_file or get_user_proj_file.
1213    
1214            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
1215            (TestProjFileWithInvalidParameters.file_contents): New test cases
1216            to test whether read_proj_file handles invalid projection
1217            parameters correctly
1218            (TestProjFile.test_get_system_proj_file): New. Simple test for
1219            resource.get_system_proj_file
1220    
1221    2003-10-07  Bernhard Herzog  <[email protected]>
1222    
1223            * test/test_derivedshapestore.py
1224            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
1225            properly so that the temporary directories get deleted correctly
1226    
1227    2003-10-06  Bernhard Herzog  <[email protected]>
1228    
1229            Handle the title changes in a proper MVC way.
1230    
1231            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1232            canvas' TITLE_CHANGED messages
1233            (MainWindow.update_title): New. Update the main window's title
1234            (MainWindow.__SetTitle): Removed. Use update_title instead.
1235            (MainWindow.SetMap): Use update_title instead of __SetTitle
1236            (MainWindow.RenameMap): Do change the window title explicitly
1237            here. That's handled in a proper MVC way now.
1238            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
1239            messages
1240    
1241            * Thuban/Lib/connector.py (Conduit): New class to help classes
1242            that forward messages
1243    
1244            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
1245            (ViewPort): Derive from Conduit instead of Publisher
1246            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
1247            when calling the inherited versions
1248            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
1249            methods to subscribe and unsubscribe map messages
1250            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
1251            handle the map subscriptions
1252            (ViewPort.Map, ViewPort.map_projection_changed)
1253            (ViewPort.layer_projection_changed): Add or update doc-strings
1254    
1255            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
1256            typo
1257            (MyConduit): Helper class for the Conduit test.
1258            (TestConduit): Test cases for Conduit
1259    
1260            * test/test_connector.py: Use support.run_tests as main.
1261    
1262            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
1263            the TITLE_CHANGED messages
1264            (ViewPortTest.test_forwarding_title_changed): New test to check
1265            whether the viewport forwards the map's TITLE_CHANGED messages
1266            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
1267            after the port's because the latter may require a still functional
1268            map.
1269    
1270    2003-10-06  Bernhard Herzog  <[email protected]>
1271    
1272            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
1273            doc-string
1274    
1275    2003-10-06  Bernhard Herzog  <[email protected]>
1276    
1277            * test/test_viewport.py (ViewPortTest.setUp)
1278            (SimpleViewPortTest.test_init_with_size): Move the test for the
1279            initial size as a constructor parameter from ViewPortTest.setUp
1280            method to a new separate test in SimpleViewPortTest.
1281    
1282    2003-10-06  Bernhard Herzog  <[email protected]>
1283    
1284            * test/test_viewport.py (MockView): New class derived from
1285            ViewPort with a mock implementation of GetTextExtent to be used in
1286            the test cases
1287            (ViewPortTest.setUp): Use MockView instead of ViewPort
1288    
1289            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
1290            into what would be a "pure virtual function" in C++: always raise
1291            NotImplementedError. Mock implementations for test cases don't
1292            belong into the real code
1293    
1294    2003-10-02  Bernhard Herzog  <[email protected]>
1295    
1296            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
1297            close the dbf file we create so that it's contents have been
1298            written properly.
1299    
1300            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
1301            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
1302            Update to shapelib 1.2.10
1303    
1304    2003-10-01  Jan-Oliver Wagner <[email protected]>
1305    
1306            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
1307            it annoys lintian which warns about these files not being
1308            executable. The #! isn't necessary here since if you absolutely
1309            must execute them you can always say "python <filename>".
1310    
1311    2003-09-26  Bernhard Herzog  <[email protected]>
1312    
1313            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
1314            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
1315            is ported to a newer the import will fail, so it should be noticed
1316            immediately that this function is gone.
1317            Fixes RT#1919
1318    
1319    2003-09-26  Bernhard Herzog  <[email protected]>
1320    
1321            Add a DTD for the projection files and make thuban write valid
1322            projection files
1323    
1324            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
1325            files
1326    
1327            * Thuban/Model/resource.py (ProjFileSaver.write): Use
1328            'projectionlist' as the name in the document type declaration so
1329            that it matches the element type of the root element.
1330    
1331            * test/test_proj.py (sample_projfile, sample_projfile2): Use
1332            'projectionlist' as the name in the document type declaration just
1333            as it is done now in the files thuban would write
1334            (sample_projfile, sample_projfile_data): Fix spelling of
1335            "Mercator"
1336            (TestProjFile.doTestWrite): Validate the written and the expected
1337            XML data
1338            (TestProjFile): Derive from ValidationTest so that we can run xml
1339            validation tests
1340    
1341    2003-09-24  Bernhard Herzog  <[email protected]>
1342    
1343            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
1344            modify the list returned by map.Layers() in place since it is the
1345            actual list of layers used by the map.
1346    
1347    2003-09-23  Jan-Oliver Wagner <[email protected]>
1348    
1349            * Doc/manual/thuban-manual.xml: Added subsection to chapter
1350            Extensions to describe the extensions coming with the Thuban
1351            standard package (gns2shp and importAPR).
1352    
1353    2003-09-23  Bernhard Herzog  <[email protected]>
1354    
1355            * libraries/thuban/wxproj.cpp (project_point): if there's an
1356            inverse but no forward projection, convert to degrees after
1357            applying the inverse projection. Fixes RT#2096
1358    
1359            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
1360            implicitly tests for the fix to RT#2096
1361    
1362            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
1363            Check that the sequences have the same lengths
1364    
1365            * Resources/Projections/defaults.proj (Geographic projection): Use
1366            a much more precise value for the to_meter attribute.
1367    
1368    2003-09-22  Bernhard Herzog  <[email protected]>
1369    
1370            * test/support.py (initthuban): Make sure to unset the LANG env.
1371            var. so that tests that compare translated strings work. Solves RT
1372            #2094
1373    
1374    2003-09-22  Jan-Oliver Wagner <[email protected]>
1375    
1376            Small improvement of APR import.
1377    
1378            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
1379            Added tests for text-ranges.
1380    
1381            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
1382            returns a string object if the range is based on text.
1383    
1384            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
1385            range retrieval.
1386    
1387    2003-09-22  Jan-Oliver Wagner <[email protected]>
1388    
1389            Initial version of the importAPR extension which is in
1390            experimental state.
1391    
1392            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
1393            /Extensions/importAPR/test/: New directories.
1394    
1395            * /Extensions/importAPR/samples/README: New: Howto load the samples.
1396    
1397            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
1398            file which refers to the Thuban Iceland demo data.
1399    
1400            * /Extensions/importAPR/test/README: New: Howto execute the tests.
1401    
1402            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
1403    
1404            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
1405            as in '.apr'-files.
1406    
1407            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
1408            ODB Objects as in '.apr', '.avl' and other files.
1409    
1410            * /Extensions/importAPR/__init__.py: New: Init to make this
1411            directory a package.
1412    
1413            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
1414            project file (.apr) and convert it to Thuban.
1415    
1416    2003-09-22  Jan-Oliver Wagner <[email protected]>
1417    
1418            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
1419    
1420    2003-09-19  Jan-Oliver Wagner <[email protected]>
1421    
1422            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
1423            with description on RPM installation and RPM binary package
1424            creation.
1425    
1426    2003-09-18  Bernhard Herzog  <[email protected]>
1427    
1428            * setup.py (data_files): Only add the mo files if the Locales
1429            directory actually exists, so that setup.py works with a fresh CVS
1430            checkout
1431    
1432    2003-09-12  Jan-Oliver Wagner <[email protected]>
1433    
1434            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
1435            in viewport, not anymore in view
1436    
1437    2003-09-04  Jan-Oliver Wagner <[email protected]>
1438    
1439            Introducing first Extension (gns2shp).
1440    
1441            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1442    
1443            * Extensions/__init__.py: New. init to make this dir a package.
1444    
1445            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1446    
1447            * Extensions/gns2shp/test/README: New. some info on this test directory.
1448    
1449            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1450    
1451            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1452            of Shapefile from GNS text file format
1453    
1454    2003-09-03  Jan-Oliver Wagner <[email protected]>
1455    
1456            Fix/workaround for bug #2019:
1457            https://intevation.de/rt/webrt?serial_num=2019
1458    
1459            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1460            (IdentifyView.__init__): Added another button that allows to
1461            stop the identify mode.
1462            (IdentifyView.OnStop): New. Stops the identify mode.
1463    
1464    2003-09-03  Jan-Oliver Wagner <[email protected]>
1465    
1466            Introducing a new exception dialog that allows to exit the
1467            application immediately.
1468            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1469    
1470            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1471    
1472            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1473            Made strings available to translations. Exchanged the simple
1474            ScrolledMessageDialog by the new ExceptionDialog.
1475    
1476    2003-09-01  Bernhard Herzog  <[email protected]>
1477    
1478            * NEWS: New. Summary of changes and release notes.
1479    
1480            * MANIFEST.in: Add NEWS
1481    
1482    2003-09-01  Bernhard Herzog  <[email protected]>
1483    
1484            * MANIFEST.in: Correct the include statement for the mo-files and
1485            include the documentation too.
1486    
1487            * setup.py (data_files): Add the .mo files
1488            (setup call): Up to version 0.9.0
1489    
1490    2003-09-01  Bernhard Herzog  <[email protected]>
1491    
1492            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1493            parameter list to just parent and session
1494            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1495            selection of empty list boxes is not allowed (and produces C++
1496            assertion errors) and the rest of the setup is better done in
1497            __init__ anyway.
1498            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1499            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1500            builtins True/False for booleans to avoid warnings from wxPython
1501    
1502            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1503            ChooseDBTableDialog constructor parameters.
1504    
1505    2003-09-01  Bernhard Herzog  <[email protected]>
1506    
1507            * Thuban/Model/postgisdb.py
1508            (PostGISTable): Extend doc-string
1509            (PostGISTable._fetch_table_information): Set the column index
1510            correctly, pretending ignored columns don't exist.
1511    
1512            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1513            for postgis tables with data types not yet supported by thuban.
1514    
1515    2003-08-29  Bernhard Herzog  <[email protected]>
1516    
1517            * HOWTO-Release: Tweak item about running the tests.
1518    
1519    2003-08-29  Jan-Oliver Wagner <[email protected]>
1520    
1521            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1522    
1523    2003-08-29  Bernhard Herzog  <[email protected]>
1524    
1525            Add some missing parameters to projections. Proj complains about
1526            them on windows but for some reason not on Linux.
1527    
1528            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1529            missing required projection parameters
1530    
1531            * test/test_proj.py (TestProjFile.test): Add missing required
1532            projection parameters
1533    
1534            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1535            (TestLayerProjection.test): Add missing required projection
1536            parameters and tests for them
1537    
1538            * test/test_load.py (TestLayerProjection.file_contents)
1539            (TestLayerProjection.test): Add missing required projection
1540            parameters and tests for them
1541    
1542            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1543            required projection parameters
1544    
1545    2003-08-29  Bernhard Herzog  <[email protected]>
1546    
1547            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1548            access the pj_errno because directly accessing pj_errno doesn't
1549            work on windows if the proj library is in a DLL
1550    
1551            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1552    
1553    2003-08-28  Bernhard Herzog  <[email protected]>
1554    
1555            * test/test_proj.py: Import things from Thuban after calling
1556            initthuban
1557    
1558            * test/test_load.py (LoadSessionTest.filenames): New class
1559            variable with the filename attributes to normalize
1560            (LoadSessionTest.check_format): Pass self.filenames to
1561            sax_eventlist to normalize the filename attributes
1562    
1563            * test/xmlsupport.py: Add cvs keywords
1564            (SaxEventLister.__init__): New parameter filenames which indicates
1565            attributes that contain filenames
1566            (SaxEventLister.startElementNS): Normalize the filename attributes
1567            with os.path.normpath
1568            (sax_eventlist): New parameter filenames to pass through to
1569            SaxEventLister
1570    
1571            * test/test_derivedshapestore.py: Make this file callable as a
1572            program to execute the tests
1573            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1574            the session to self.session so that it gets destroyed properly
1575    
1576            * test/test_layer.py (TestLayer.tearDown): Call the session's
1577            Destroy method
1578    
1579            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1580            too if it exists
1581            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1582            so that it gets destroyed properly
1583    
1584            * test/postgissupport.py (reason_for_not_running_tests): Add a
1585            test for the existence of popen2.Popen4.
1586    
1587            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1588            reliable way to destroy the sessions created in the test cases
1589            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1590            so that it gets destroyed properly
1591            (SaveSessionTest.testLayerProjection): Bind the session to
1592            self.session so that it gets destroyed properly
1593    
1594            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1595            sure that the session is destroyed properly
1596    
1597            * test/test_shapefilestore.py: Make this callable as a program to
1598            execute the tests
1599    
1600            * test/test_scalebar.py: Remove unnecessary import of _ from
1601            Thuban
1602    
1603            * test/support.py (print_garbage_information): Call initthuban
1604            here because it may be called indirectly from test cases that test
1605            test support modules which do not use anything from thuban itself
1606            (ThubanTestProgram.runTests): Remove unnecessary debug print
1607    
1608    2003-08-28  Bernhard Herzog  <[email protected]>
1609    
1610            * Thuban/version.py (longversion): Update to 0.9
1611    
1612            * Thuban/UI/mainwindow.py: Remove some unused imports
1613    
1614            * README: Add section about required additional software. Add date
1615            and revision CVS keywords
1616    
1617            * HOWTO-Release: Add item about the translations. Add date and
1618            revision CVs keywords and change formatting to match README a bit
1619            better
1620    
1621            * po/de.po: Update for 0.9
1622    
1623            * test/README: Tweak the wording a little because many tests are
1624            not really unittest.
1625    
1626    2003-08-27  Bernhard Herzog  <[email protected]>
1627    
1628            As preparation for the 0.9 release, switch thuban files to a
1629            non-dev namespace
1630    
1631            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1632            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1633            namespace
1634    
1635            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1636            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1637    
1638            * test/test_save.py (SaveSessionTest.dtd)
1639            (SaveSessionTest.testEmptySession)
1640            (SaveSessionTest.testSingleLayer)
1641            (SaveSessionTest.testLayerProjection)
1642            (SaveSessionTest.testRasterLayer)
1643            (SaveSessionTest.testClassifiedLayer)
1644            (SaveSessionTest.test_dbf_table)
1645            (SaveSessionTest.test_joined_table)
1646            (SaveSessionTest.test_save_postgis): Update for new namespace
1647    
1648            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
1649            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1650            (TestLayerProjection.file_contents)
1651            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1652            (TestPostGISLayer.file_contents)
1653            (TestPostGISLayerPassword.file_contents)
1654            (TestLoadError.file_contents, TestLoadError.test): Update for new
1655            namespace
1656    
1657    2003-08-27  Bernhard Herzog  <[email protected]>
1658    
1659            Make the table interface distinguish between row ids (an integer
1660            that uniquely identifies a row) and row ordinals (a simple row
1661            count from 0 to NumRows() - 1)
1662    
1663            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
1664            (PostGISTable.RowOrdinalToId): New methods to conver between row
1665            ids and row ordinals
1666            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
1667            parameter row_is_ordinal to indicate whether the row parameter is
1668            the row id or the ordinal
1669    
1670            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
1671            (TransientTableBase.RowOrdinalToId)
1672            (AutoTransientTable.RowIdToOrdinal)
1673            (AutoTransientTable.RowOrdinalToId): Same new methods as in
1674            PostGISTable.
1675            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
1676            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
1677            Same new parameter as in PostGISTable.
1678    
1679            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
1680            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
1681            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
1682            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
1683            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
1684            parameter as in PostGISTable.
1685    
1686            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
1687            (DataTable.RowOrdinalToId): New methods to convert between row ids
1688            and row ordinals.
1689            (TableGrid.SelectRowById): New method to select a row based on its
1690            ID as opposed to its ordinal
1691            (DataTable.GetValue, TableGrid.OnRangeSelect)
1692            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
1693            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
1694            (LayerTableFrame.__init__): Convert between row ids and row
1695            ordinals as appropriate
1696    
1697            * test/postgissupport.py (PostGISDatabase.__init__): Add
1698            doc-string.
1699            (PostGISDatabase.initdb): The optional third item in a tuple in
1700            tables is now a (key, value) list with additional arguments to
1701            pass to upload_shapefile
1702            (upload_shapefile): New parameter gid_offset to allow gids that
1703            are not the same as the shapeids in the shapefile
1704            (PostgreSQLServer.get_default_static_data_db): Use the new
1705            gid_offset to make the gids in landmarks 1000 higher than the
1706            shapeids in the shapefile
1707    
1708            * test/test_viewport.py
1709            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
1710            new shapeids in the landmarks table
1711    
1712            * test/test_transientdb.py
1713            (TestTransientTable.run_iceland_political_tests)
1714            (TestTransientTable.test_transient_joined_table): Add tests for
1715            the new table methods and new keywords arguments.
1716    
1717            * test/test_postgis_db.py
1718            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
1719            (TestPostGISTable.test_read_value_row_count_mode)
1720            (TestPostGISTable.test_row_id_to_ordinal)
1721            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
1722            table methods and the new arguments
1723            (TestPostGISShapestorePoint.test_shapes_in_region)
1724            (TestPostGISShapestorePoint.test_shape_raw_data)
1725            (TestPostGISShapestorePoint.test_shape_points)
1726            (TestPostGISShapestorePoint.test_shape_shapeid)
1727            (TestPostGISShapestorePoint.test_all_shapes)
1728            (TestPostGISTable.test_simple_query)
1729            (TestPostGISTable.test_simple_query)
1730            (TestPostGISTable.test_simple_query)
1731            (TestPostGISTable.test_read_value)
1732            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
1733            shapeids in the landmarks table
1734    
1735            * test/test_memory_table.py
1736            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
1737            (TestMemoryTable.test_read_value_row_count_mode)
1738            (TestMemoryTable.test_row_id_to_ordinal)
1739            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
1740            table methods and the new arguments
1741    
1742            * test/test_dbf_table.py
1743            (TestDBFTable.test_read_row_as_dict_row_count_mode)
1744            (TestDBFTable.test_read_value_row_count_mode)
1745            (TestDBFTable.test_row_id_to_ordinal)
1746            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
1747            methods and the new arguments
1748    
1749    2003-08-26  Bernhard Herzog  <[email protected]>
1750    
1751            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
1752            more postgis specific but much faster method to get the bounding
1753            box
1754    
1755    2003-08-26  Bernhard Herzog  <[email protected]>
1756    
1757            * Thuban/Model/postgisdb.py (PostGISTable.Title)
1758            (PostGISShapeStore.AllShapes): Add these missing methods.
1759            (PostGISShapeStore.ShapesInRegion): No need to raise
1760            StopIteration. We can simply return
1761    
1762            * test/test_postgis_db.py (TestPostGISTable.test_title)
1763            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
1764            new methods
1765    
1766    2003-08-25  Bernhard Herzog  <[email protected]>
1767    
1768            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
1769    
1770            * test/test_postgis_db.py (PolygonTests): New class containing
1771            those tests from TestPostGISShapestorePolygon that can also be
1772            used to test MUTLIPOLYGON tables
1773            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
1774            so derive from that
1775            (TestPostGISShapestoreMultiPolygon): New class with tests for
1776            MUTLIPOLYGON tables
1777    
1778            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
1779            tables argument to have tuples with three items to override the
1780            WKT type used.
1781            (PostgreSQLServer.get_default_static_data_db): Use the above to
1782            create a polygon table with MUTLIPOLYGONs
1783            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
1784            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
1785            coords_to*
1786            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
1787            (wkt_converter): New. Map WKT types to converters
1788            (upload_shapefile): New parameter force_wkt_type to use a
1789            different WKT type than the default
1790    
1791  2003-08-25  Bernhard Herzog  <[email protected]>  2003-08-25  Bernhard Herzog  <[email protected]>
1792    
1793          * Thuban/UI/application.py          * Thuban/UI/application.py
# Line 941  Line 2731 
2731    
2732          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as          * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
2733          it annoys lintian which warns about these files not being          it annoys lintian which warns about these files not being
2734          executable. The #1 isn't necessary here since if you absolutely          executable. The #! isn't necessary here since if you absolutely
2735          must execute them you can always say "python <filename>".          must execute them you can always say "python <filename>".
2736    
2737          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove          * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove

Legend:
Removed from v.1655  
changed lines
  Added in v.2018

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26