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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26