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

Legend:
Removed from v.1582  
changed lines
  Added in v.2053

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26