/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1655 by bh, Mon Aug 25 16:05:33 2003 UTC revision 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]>  2003-08-25  Bernhard Herzog  <[email protected]>
1592    
1593          * Thuban/UI/application.py          * Thuban/UI/application.py
# Line 941  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.1655  
changed lines
  Added in v.1971

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26