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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26