/[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 1272 by jonathan, Fri Jun 20 16:43:13 2003 UTC revision 1929 by bh, Mon Nov 10 16:57:54 2003 UTC
# Line 1  Line 1 
1    2003-11-10  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/baserenderer.py: Add a way to specify how layers in
4            extensions are to be rendered.
5            (_renderer_extensions): New. List with renderer for layers in
6            extensions
7            (add_renderer_extension): New. Add a renderer extension
8            (init_renderer_extensions): New. Init the renderer extensions
9            (BaseRenderer.render_map_incrementally): Search
10            _renderer_extensions for how to draw unknown layer types
11            (BaseRenderer.draw_raster_data): Add format parameter so that
12            formats other than BMP can be drawn
13            (BaseRenderer.draw_raster_layer): Pass an explicit format to
14            draw_raster_data
15    
16            * Thuban/UI/renderer.py (raster_format_map): New. Mapping form the
17            strings of the format parameter of draw_raster_data method to wx
18            constants
19            (MapRenderer.draw_raster_data): Add the format parameter and use
20            raster_format_map to map it to the right wxwindows constant for
21            wxImageFromStream
22    
23            * test/test_baserenderer.py (SimpleRenderer.draw_raster_data): Add
24            the format parameter and record it
25            (TestBaseRenderer.test_raster_no_projection): check the format
26            paramter of the draw_raster_data method
27            (TestBaseRenderer.test_renderer_extension): New. Test the renderer
28            extension facility
29    
30    2003-11-07  Bernhard Herzog  <[email protected]>
31    
32            Tweak the usage of the sqlite database to make common use cases
33            more responsive. In most cases copying the data to the sqlite
34            database takes so long that using sqlite doesn't have enough
35            advantages.
36    
37            * Thuban/Model/transientdb.py (TransientTableBase.ValueRange): Add
38            comments about performance and query the min and max in separate
39            statements because only that way will indexes be used.
40            (TransientTableBase.UniqueValues): Add some comments about
41            performance.
42            (AutoTransientTable.ValueRange, AutoTransientTable.UniqueValues):
43            Do not copy the data to the transient DB but use the transient
44            copy if it exists. See the new comments for the performance trade
45            offs
46    
47            * test/test_transientdb.py
48            (TestTransientTable.test_auto_transient_table): Make sure that the
49            data is copied to the transient database at some point.
50    
51    2003-11-03  Bernhard Herzog  <[email protected]>
52    
53            * Thuban/Model/data.py (ShapefileStore.ShapesInRegion): Bind some
54            globals to locals so that it's a bit faster
55    
56    2003-11-03  Bernhard Herzog  <[email protected]>
57    
58            * Thuban/UI/baserenderer.py
59            (BaseRenderer.draw_shape_layer_incrementally): Use the ReadValue
60            method. ReadValue is faster than ReadRowAsDict since it only reads
61            one cell especially now that the dbf file objects actually
62            implement it.
63    
64            * Thuban/Model/table.py (DBFTable.ReadValue): Use the new
65            read_attribute method of the dbf objects
66    
67    2003-11-03  Bernhard Herzog  <[email protected]>
68    
69            * Extensions/profiling/profiling.py (popup_dialog_box): New config
70            variable to indicate whether the result should be shown in a
71            dialog box
72            (profile_screen_renderer, time_screen_renderer): Only show a
73            dialog box if popup_dialog_box is true.
74            (profile_screen_renderer): Flush stdout after the printing the
75            first part of the "profiling..." message
76    
77            * Thuban/UI/baserenderer.py
78            (BaseRenderer.draw_shape_layer_incrementally): Cache the pens and
79            brushes for the groups so that they're not created over and over
80            again
81    
82            * Thuban/Model/classification.py (Classification.__getattr__)
83            (Classification._compile_classification)
84            (Classification._clear_compiled_classification): New. Methods to
85            manage a 'compiled' representation of the classification groups
86            which is created on demand
87            (Classification.InsertGroup, Classification.RemoveGroup)
88            (Classification.ReplaceGroup): reset the compiled representation
89            (Classification.FindGroup): Use the compiled representation to
90            find the matching group
91            (ClassGroupRange.GetRangeTuple): New. Return the range as a tuple
92    
93    2003-10-31  Bernhard Herzog  <[email protected]>
94    
95            * Thuban/Model/classification.py (Classification.SetDefaultGroup):
96            Send a CLASS_CHANGED message
97            (Classification.RemoveGroup): Send a CLASS_CHANGED message and do
98            not return the removed group since it wasn't used.
99    
100            * test/test_classification.py
101            (TestClassification.test_set_default_group): New. Test the
102            SetDefaultGroup method
103            (TestClassification.test_insert_group): New. Test the InsertGroup
104            method
105            (TestClassification.test_remove_group): New. Test the RemoveGroup
106            method
107            (TestClassification.test_replace_group): New. Test the
108            ReplaceGroup method
109    
110    2003-10-31  Bernhard Herzog  <[email protected]>
111    
112            * test/test_classification.py (TestClassification.setUp):
113            Subscribe to the CLASS_CHANGED messages
114            (TestClassification.tearDown): New. Destroy the classification
115            properly
116            (TestClassification.test_defaults): Add tests for the default line
117            width and whether no messages were sent yet
118            (TestClassification.test_set_default_properties): Add tests for
119            messages and setting the default line width
120            (TestClassification.test_add_singleton)
121            (TestClassification.test_add_range)
122            (TestClassification.test_multiple_groups): Add tests for messages
123    
124    2003-10-31  Bernhard Herzog  <[email protected]>
125    
126            Some more refactoring in preparation for new tests:
127    
128            * test/test_classification.py (TestClassification.setUp): New.
129            Instantiate the classification here. Update the test methods
130            accordingly.
131            (TestClassification.test_multiple_groups): Make sure that the two
132            singletons matching 1 are considered different.
133    
134    2003-10-31  Bernhard Herzog  <[email protected]>
135    
136            * test/test_classification.py (red, green, blue): New. These
137            constants were used in several cases. Update the relevant methods.
138            (TestClassification.test_defaults)
139            (TestClassification.test_set_default_properties)
140            (TestClassification.test_add_singleton)
141            (TestClassification.test_add_range)
142            (TestClassification.test_multiple_groups)
143            (TestClassification.test_deepcopy): New. These were formerly all
144            part of the single method test.
145            (TestClassification.test_deepcopy): Removed.
146            (TestClassIterator): Removed. The test case is now a method of
147            TestClassification since it tests part of the public interface of
148            Classification
149            (TestClassification.test_iterator): New. Used to be
150            TestClassIterator effectively
151    
152    2003-10-31  Jan-Oliver Wagner <[email protected]>
153    
154            GUIfied the functions of the profiling extension.
155    
156            * /Extensions/profiling/__init__.py: New: Init to make this
157            directory a package.
158    
159            * Extensions/profiling/profiling.py: Moved menu entries to
160            the Extensions menu. Applied _() for strings.
161            (profile_screen_renderer): Catch the detailed printout and present
162            it in a dialog.
163            (time_screen_renderer): Raise a dialog to present the result instead
164            of printing it to stdout.
165    
166    2003-10-31  Bernhard Herzog  <[email protected]>
167    
168            * test/test_classification.py (TestClassGroupProperties)
169            (TestClassGroup, TestClassGroupDefault, TestClassGroupRange)
170            (TestClassGroupSingleton, TestClassIterator, TestClassification):
171            Split TestClassification into several classes, one for each class
172            being tested. TestClassification itself now only tests
173            Classification. This split makes changes to the tests a bit easier
174    
175    2003-10-31  Bernhard Herzog  <[email protected]>
176    
177            * Extensions/profiling/profiling.py: New. Extension to measure
178            Thuban performance
179    
180    2003-10-31  Frank Koormann <[email protected]>
181    
182            Added two items to legend popup menu: Remove Layer and Show Layer Table
183    
184            * Thuban/UI/legend.py (LegendPanel._OnRemoveLayer,
185            LegendPanel._OnShowTable): New event handlers, call the corresponding
186            mainwindow methods.
187            (LegendTree._OnRightClick): Added items to popup menu.
188    
189    2003-10-30  Bernhard Herzog  <[email protected]>
190    
191            * Thuban/UI/dialogs.py (ThubanFrame.__init__): Handle
192            EVT_WINDOW_DESTROY
193            (ThubanFrame.OnDestroy): New. Handler for EVT_WINDOW_DESTROY. Does
194            nothing but is convenient for the derived classes.
195    
196            * Thuban/UI/tableview.py
197            (TableFrame.OnDestroy, LayerTableFrame.OnDestroy): New.
198            Unsubscribe the messages here not in OnClose because that might
199            get called multiple times. Fixes RT #2196
200            (TableFrame.OnClose, LayerTableFrame.OnClose): Removed. Not needed
201            anymore.
202    
203            * README: Update the minimum requirement for wxPython. Since we
204            now use the EVT_WINDOW_DESTROY event, we need at least 2.4.0.4,
205            the version in which that was introduced for all platforms
206    
207    2003-10-30  Frank Koormann <[email protected]>
208    
209            * Thuban/UI/join.py (JoinDialog.OnJoin): Wrapped the major parts of
210            the join process in a ThubanBeginBusyCursor, ThubanEndBusyCursor
211            frame.
212    
213    2003-10-30  Jan-Oliver Wagner <[email protected]>
214    
215            Improved APR import extension, added further EPSG definitions
216            and some cleanup regarding string class.
217    
218            * test/test_proj.py (TestProjection.test_get_projection_units_geo):
219            Added test for alias 'longlat'.
220    
221            * Resources/Projections/epsg-deprecated.proj: New. Contains
222            deprecated EPSG definitions.
223    
224            * Extensions/importAPR/odb.py (ODBBaseObject.TreeInfo): Added
225            the variable names for objects.
226    
227            * Extensions/importAPR/apr.py (APR_BLnSym, APR_BMkSym, APR_BShSym): New.
228            Copied from importAPR and provided with documentation.
229    
230            * Extensions/importAPR/importAPR.py (APR_BLnSym, APR_BMkSym, APR_BShSym):
231            Moved to apr.py.
232            (APR_View): Added object ref 'ITheme'.
233    
234            * Thuban/Lib/fileutil.py, Thuban/UI/proj4dialog.py: Replaced string
235            split function by corresponding use of the string class method.
236    
237            * Thuban/Model/xmlwriter.py: Replaced string replace function by
238            corresponding string method.
239    
240    2003-10-29  Bernhard Herzog  <[email protected]>
241    
242            * Thuban/UI/baserenderer.py
243            (BaseRenderer.draw_shape_layer_incrementally): Speed up the
244            special case of a classification that only has the default group
245    
246    2003-10-27  Bernhard Herzog  <[email protected]>
247    
248            * po/fr.po, po/es.po: Updated translations from Daniel Calvelo
249    
250            * po/de.po: Update.
251    
252            * Thuban/UI/application.py
253            (ThubanApplication.ShowExceptionDialog): Handle translation of the
254            dialog message properly
255    
256    2003-10-27  Bernhard Herzog  <[email protected]>
257    
258            Rework how localization works so that we use wx's translation
259            functions when running Thuban as a normal application but not when
260            we don't need any UI, such as in the test suite. See the comment
261            in Thuban/__init__.py for details
262    
263            * Thuban/__init__.py (_): Add one level of indirection to make the
264            translation handling more flexible and to make it possible to use
265            either wx's translation services or not.
266            (gettext_identity, translation_function_installed)
267            (install_translation_function): New function to help with this
268    
269            * Thuban/UI/__init__.py: Install the wx specific translation
270            function if it's OK to do that
271    
272            * test/support.py (initthuban): Install a dummy translation
273            function so that importing Thuban.UI doesn't install a wx specific
274            one for which would need to import wxPython
275    
276    2003-10-27  Bernhard Herzog  <[email protected]>
277    
278            * HOWTO-Release: Source archives should be created first and the
279            binary packages should be created from the source archives.
280            There's an official debian package now so there's no need to test
281            the rpm on debian anymore
282    
283    2003-10-27  Bernhard Herzog  <[email protected]>
284    
285            Several rendering changes:
286    
287             - Render the selection into a separate bitmap so that only that
288               bitmap needs to be redrawn when the selection changes
289    
290             - Render incrementally showing previews and allowing interaction
291               before rendering is complete
292    
293             - Update the renderer interface a bit. Most parameters of
294               RenderMap are now parameters of the constructor
295    
296            * Thuban/UI/baserenderer.py (BaseRenderer.__init__): Add the map
297            and the update region as parameters. Update the doc-string
298            (BaseRenderer.render_map_incrementally): New. Generator function
299            to renders the map incrementally
300            (BaseRenderer.render_map): Remove the map argument (it's now in
301            the constructor) and simply iterate over the
302            render_map_incrementally generator to draw the map.
303            (BaseRenderer.draw_shape_layer_incrementally)
304            (BaseRenderer.draw_shape_layer): Renamed to
305            draw_shape_layer_incrementally and changed into a generator that
306            yields True every 500 shapes. Used by render_map_incrementally to
307            render shape layers incrementally
308    
309            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Removed the
310            map and region parameters which are now in the constructor
311            (ScreenRenderer.RenderMapIncrementally): New. Public frontend for
312            the inherited render_map_incrementally.
313            (BaseRenderer.draw_shape_layer): Removed.
314            (ScreenRenderer.draw_selection_incrementally): New. The selection
315            drawing part of the removed draw_shape_layer as a generator
316            (ScreenRenderer.layer_shapes): Update because of the region
317            parameter change
318            (ExportRenderer.__init__): New. Extend the inherited constructor
319            with the destination region for the drawing
320            (ExportRenderer.RenderMap): Removed the map and region parameters
321            which are now in the constructor
322    
323            * Thuban/UI/view.py (MapCanvas.PreviewBitmap): New. Return a
324            bitmap suitable for a preview in a tool
325            (CanvasPanTool.MouseMove): Use the PreviewBitmap method to get the
326            bitmap
327            (MapPrintout.draw_on_dc): Adapt to new renderer interface
328            (MapCanvas.OnPaint): Handle drawing the selection bitmap if it
329            exists
330            (MapCanvas.OnIdle): Update the logic to deal with incremental
331            rendering and the selection bitmap
332            (MapCanvas._do_redraw): Handle the instantiation of the render
333            iterator and the redraws during rendering
334            (MapCanvas._render_iterator): New. Generator to incrementally
335            redraw both bitmaps
336            (MapCanvas.Export): Adapt to new renderer interface.
337            (MapCanvas.full_redraw): Reset the selection bitmap and the
338            renderer iterator too
339            (MapCanvas.redraw_selection): New. Force a redraw of the selection
340            bitmap
341            (MapCanvas.shape_selected): Only redraw the selection bitmap
342    
343            * test/test_baserenderer.py
344            (TestBaseRenderer.test_polygon_no_projection)
345            (TestBaseRenderer.test_raster_no_projection)
346            (TestBaseRenderer.test_point_map_projection)
347            (TestBaseRenderer.test_point_layer_and_map_projection)
348            (TestBaseRenderer.test_point_layer_projection)
349            (TestBaseRenderer.test_point_with_classification): Adapt to new
350            renderer interface
351    
352    2003-10-24  Bernhard Herzog  <[email protected]>
353    
354            * libraries/thuban/wxproj.cpp (draw_polygon_shape)
355            (point_in_polygon_shape, shape_centroid): Raise an exception if
356            the shape can't be read. Previously invalid shape ids would lead
357            to a segfault.
358    
359            * test/test_wxproj.py (TestShapeCentroid.test_invalid_shape_id):
360            New. test whether an exception is raised for invalid shape ids
361    
362    2003-10-24  Jan-Oliver Wagner <[email protected]>
363    
364            * Thuban/Model/proj.py (Projection.GetProjectedUnits): Added 'longlat'
365            as alias for 'latlong'.
366    
367            * Thuban/UI/projdialog.py (ProjFrame.__init__): Added 'longlat'
368            as alias for 'latlong'.
369    
370    2003-10-24  Jan-Oliver Wagner <[email protected]>
371    
372            * Thuban/UI/projdialog.py (ProjFrame.proj_selection_changed): Set
373            the projection even for the UnknownPanel.
374            (UnknownProjPanel.__init__): Define the text and create the textctrl
375            widget.
376            (UnknownProjPanel._DoLayout): Replaced static text widget by the
377            textctrl created in __init__.
378            (UnknownProjPanel.SetProjection): Set the text for the text ctrl
379            including the parameters of the projection.
380            
381    2003-10-24  Jan-Oliver Wagner <[email protected]>
382    
383            * Resources/Projections/epsg.proj: New. This is a list of
384            EPSG codes with parameters for proj. The list has been
385            generated using devtools/create_epsg.py based on the
386            file nad/epsg of the proj 4.4.7 package. Four projection
387            definitions have been deleted as they are not accepted by proj:
388            "CH1903+ / LV95", "Bern 1898 (Bern) / LV03C", "CH1903 / LV03"
389            and "HD72 / EOV".
390    
391    2003-10-22  Bernhard Herzog  <[email protected]>
392    
393            Some more tweaks to the projection dialog which should fix RT
394            #1886.
395    
396            * Thuban/UI/projlist.py (ProjectionList.Destroy): Unsubscribe from
397            the ProjFile's messages and call the base class methods correctly
398            (ProjectionList.SelectProjection): Set the wxLIST_STATE_FOCUSED
399            flag on the newly selected item too. Otherwise some other item is
400            focused and the first time the focus is moved with the keyboard
401            the selection moves in unexpected ways.
402    
403            * Thuban/UI/projdialog.py (ProjFrame.__init__): Do not set the
404            focus on the OK button, only on the projection list. That way the
405            list really has the focus initially
406            (ProjFrame.OnClose): Call the projection list's Destroy method to
407            make it unsubscribe all messages
408    
409    2003-10-21  Bernhard Herzog  <[email protected]>
410    
411            Rework the projection dialog to fix a few bugs, including RT 2166
412            and most of 2168
413    
414            * Thuban/UI/projlist.py: New. The class ProjectionList is a
415            special wxListCtrl to show a list of projections in a more MVC
416            fashion
417    
418            * Thuban/UI/projdialog.py (ProjFrame): Substantial changes
419            throughout the class. The main change is to use the ProjectionList
420            class instead of a normal wxListBox. Also, add an explicit
421            "Unknown" projection to the projection choice control.
422            (ProjPanel.__init__): Add an "unknown" ellipsoid
423            (TMPanel.__init__, LCCPanel.__init__): Tweak the order of
424            instantiation of the panel's controls to make the tab-order more
425            natural
426    
427    2003-10-21  Bernhard Herzog  <[email protected]>
428    
429            * test/test_load.py (TestSingleLayer.file_contents)
430            (TestSingleLayer.test): Add non-ascii characters to the titles of
431            session, map and layer. This is effectively a port of the
432            TestUnicodeStrings test in test_load_0_8.py which for some reason
433            was only added there.
434    
435            * test/test_load_0_9.py (TestSingleLayer.file_contents)
436            (TestSingleLayer.test): Same as in test_load.py: add non-ascii
437            characters to the titles of session, map and layer,.
438    
439    2003-10-21  Bernhard Herzog  <[email protected]>
440    
441            Add EPSG projection handling to .thuban files
442    
443            * test/test_save.py (SaveSessionTest.dtd)
444            (SaveSessionTest.testEmptySession)
445            (SaveSessionTest.testLayerProjection)
446            (SaveSessionTest.testRasterLayer)
447            (SaveSessionTest.testClassifiedLayer)
448            (SaveSessionTest.test_dbf_table)
449            (SaveSessionTest.test_joined_table)
450            (SaveSessionTest.test_save_postgis): Update to 1.0-dev namespace
451            (SaveSessionTest.testSingleLayer): Update to 1.0-dev namespace and
452            use a and epsg projection to test saving them
453    
454            * test/test_load.py (LoadSessionTest.dtd): Update to 1.0-dev
455            namespace
456            (TestLayerVisibility.file_contents, TestLabels.file_contents)
457            (TestLayerProjection.file_contents)
458            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
459            (TestPostGISLayer.file_contents)
460            (TestPostGISLayerPassword.file_contents)
461            (TestLoadError.file_contents, TestLoadError.test): Update to use
462            1.0-dev namespace
463            (TestSingleLayer.file_contents, TestSingleLayer.test): Update to
464            use 1.0-dev namespace and use an EPSG projection to test whether
465            loading it works
466    
467            * test/test_load_0_9.py: New. Effectively a copy of test_load.py
468            as of Thuban 0.9. These are now tests to determine whether Thuban
469            can still read files generated by Thuban 0.9
470    
471            * Thuban/Model/save.py (SessionSaver.write)
472            (SessionSaver.write_session): Use the 1.0 dtd and 1.0-dev
473            namespace
474            (SessionSaver.write_projection): Write the projection's epsg
475            attribute
476    
477            * Thuban/Model/load.py (SessionLoader.__init__): Also accept the
478            thuban-1.0-dev.dtd namespace
479            (SessionLoader.check_attrs): Allow a callable object as conversion
480            too
481            (SessionLoader.start_projection, SessionLoader.end_projection)
482            (SessionLoader.start_parameter): Handle the epsg attribute and
483            rename a few instance variables to lower case
484    
485            * Resources/XML/thuban-1.0.dtd: New. Only difference to
486            thuban-0.9.dtd is the epsg attribute for projections.
487    
488    2003-10-21  Bernhard Herzog  <[email protected]>
489    
490            * test/runtests.py (main): Let the user specify which tests to run
491            on the command line
492    
493            * test/support.py (ThubanTestResult.getDescription): Override to
494            give a better short description. The description can be used as a
495            parameter to run_tests to run that particular test in isolation.
496    
497    2003-10-21  Frank Koormann   <[email protected]>
498    
499            Popup menu for legend. Scheduled for the 1.2 release this was too
500            simple to implement: The popup menu is bound to the legend tree, while
501            the events are hanlded by its anchestor, the legend panel. This
502            allows reuse of all the event handlers already implemented for the
503            legend toolbar buttons.
504    
505            * Thuban/UI/legend.py (LegendPanel.__init__): EVT_MENU macros
506            to add handlers for the events issued by the popup menu.
507            (LegendPanel._OnToggleVisibility): Handler for toggling layer
508            visibility event
509            (LegendPanel._OnProjection): Handler for layer projection event.
510            (LegendTree.__init__): Added EVT_TREE_ITEM_RIGHT_CLICK
511            (LegendTree._OnRightClick): Event handler for right click, select item
512            and pop up menu.
513            (LegendTree.ToggleVisibility): Toggle layer visibility
514            (LegendTree.LayerProjection): Raise layer projection dialog for
515            current layer.
516    
517    2003-10-21  Bernhard Herzog  <[email protected]>
518    
519            * Resources/Projections/defaults.proj: Use correct DOCTYPE
520            declaration. The top-level element is projectionlist not projfile
521    
522    2003-10-20  Bernhard Herzog  <[email protected]>
523    
524            * Thuban/UI/projdialog.py (ProjFrame.write_proj_file): New. helper
525            method to write a projfile and display a busy cursor and error
526            dialogs.
527            (ProjFrame._OnSave, ProjFrame._OnAddToList, ProjFrame._OnImport)
528            (ProjFrame._OnExport, ProjFrame._OnRemove): Use write_proj_file
529            (ProjFrame.__FillAvailList): Translate "<None>" too and display a
530            busy cursor while loading the user and system prj files.
531    
532    2003-10-16  Bernhard Herzog  <[email protected]>
533    
534            * Thuban/Model/resource.py (projfile_cache): Introduce a cache for
535            ProjFile objects
536            (clear_proj_file_cache): New function to clear the cache. Mainly
537            useful for use by the test suite
538            (read_proj_file): Use the cache.
539    
540            * test/test_proj.py (TestProjFile): Clarify the doc-string
541            (ProjFileReadTests): Update doc-string
542            (ProjFileReadTests.test_get_system_proj_file): Check whether the
543            system proj files is cached.
544            (ProjFileLoadTestCase): New base class for the proj file tests
545            derived from support.FileLoadTestCase to provide some common
546            behavior.
547            (TestLoadingProjFile)
548            (TestLoadingProjFileWithEmptyProjectionlist.file_contents)
549            (TestProjFileWithInvalidParameters.file_contents): Derive from
550            ProjFileLoadTestCase
551            (TestLoadingProjFile.test_caching): New. Test whether the cache
552            works
553    
554    2003-10-16      Silke Reimer    <[email protected]>
555    
556            * debian/*: New directory with configuration files for building a thuban
557              deb-package.
558    
559    2003-10-14  Bernhard Herzog  <[email protected]>
560    
561            * test/test_proj.py: Execute support.run_tests when run as
562            __main__ so that missing unsubscribes are detected
563            (TestProjFile.tearDown): Destroy the proj_file properly
564    
565    2003-10-14  Bernhard Herzog  <[email protected]>
566    
567            * Thuban/Model/messages.py (PROJECTION_ADDED)
568            (PROJECTION_REPLACED, PROJECTION_REMOVED): New message types for
569            the ProjFile objects
570    
571            * Thuban/Model/proj.py (ProjFile): Derive from Publisher so we can
572            easily send messages when the projections change
573            (ProjFile.Add, ProjFile.Remove, ProjFile.Replace): Issue messages
574            when the change was successful
575    
576            * test/test_proj.py (TestProjFile.setUp): Subscribe to some of the
577            proj file messages
578            (TestProjFile.test_add_remove)
579            (TestProjFile.test_remove_non_existing)
580            (TestProjFile.test_replace)
581            (TestProjFile.test_replace_non_existing): Test whether the right
582            messages are sent
583    
584    2003-10-14  Bernhard Herzog  <[email protected]>
585    
586            * test/test_proj.py (TestProjFile.test): Refactor into several
587            tests
588            (TestProjFile.test_add_remove)
589            (TestProjFile.test_remove_non_existing)
590            (TestProjFile.test_replace)
591            (TestProjFile.test_replace_non_existing): Some of the new
592            individual test cases
593            (TestProjFileSimple): New class for the rest of the test cases
594            that came out of the refactoring
595            (ProjFileTest): Derive from xmlsupport.ValidationTest so that the
596            derived classes don't have to
597    
598    2003-10-13  Bernhard Herzog  <[email protected]>
599    
600            Add an optional EPSG code to the projection objects and extend the
601            .proj file format accordingly.
602    
603            * Resources/XML/projfile.dtd (element projection): Add epsg
604            attribute
605    
606            * Thuban/Model/proj.py (Projection.__init__): New parameter and
607            instance variable epsg. Update doc-string
608            (Projection.EPSGCode, Projection.Label): New methods to provide
609            access to EPSG code and a label for use in dialogs
610    
611            * Thuban/Model/resource.py (ProjFileReader.start_projection)
612            (ProjFileReader.end_projection, ProjFileSaver.write_projfile):
613            Handle the epsg code attribute when reading or writing proj files
614    
615            * Thuban/UI/projdialog.py (ProjFrame._OnSave)
616            (ProjFrame._OnAddToList, ProjFrame.__DoOnProjAvail)
617            (ProjFrame.__FillAvailList): Use the projection's Label method to
618            get the string for the list box
619    
620            * test/test_proj.py (TestProjection.test_label)
621            (TestProjection.test_label_epsg)
622            (TestProjection.test_epsgcode_for_non_epsg_projection)
623            (TestProjection.test_epsgcode_for_real_epsg_projection): New tests
624            for the label and EPSGCode methods
625            (WriteProjFileTests.doTestWrite, WriteProjFileTests.test_write)
626            (WriteProjFileTests.test_write_empty_file): Create the ProjFile
627            objects in the test cases and put the expected contents into the
628            test case methods too. Update doTestWrite accordingly
629            (TestLoadingProjFile)
630            (TestLoadingProjFileWithEmptyProjectionlist): New classes with the
631            read tests from TestProjFile.
632            (TestProjFile.doTestRead, TestProjFile.testRead): Removed. These
633            tests are now in the new classes.
634            (sample_projfile, sample_projfile_data)
635            (sample_projfile2, sample_projfile_data2): Removed. Not used
636            anymore.
637            (TestProjFile.test_read_unreadable_file): No need to reset the
638            permissions at the end anymore since we use a unique filename
639    
640    2003-10-13  Bernhard Herzog  <[email protected]>
641    
642            * test/test_proj.py: Some more refactoring of the test cases
643            (ProjFileTest): New base class for the proj file tests.
644            (TestProjFile): Derive from ProjFileTest
645            (TestProjFile.test_read_unreadable_file)
646            (TestProjFile.test_read_empty_file, TestProjFile.doTestRead): Use
647            the new filename method to get a unique filename
648            (TestProjFile.doTestWrite, TestProjFile.testWrite): Removed.
649            (WriteProjFileTests): New class for proj file write tests.
650            Contains the write test that were in TestProjFile originally.
651    
652    2003-10-13  Bernhard Herzog  <[email protected]>
653    
654            * test/test_proj.py (TestProjFile.testRead)
655            (TestProjFile.test_read_non_existing_file)
656            (TestProjFile.test_read_unreadable_file)
657            (TestProjFile.test_read_empty_file): Split into several methods.
658    
659    2003-10-10  Bernhard Herzog  <[email protected]>
660    
661            * Thuban/UI/sizers.py: New file with custom sizers.
662    
663            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): Instantiate
664            all projection type specific panels and put them into a
665            NotebookLikeSizer. This way the dialog doesn't change its size
666            when a different projection is selected
667            (ProjFrame.__init__): Rename projection_panels
668            projection_panel_defs and reuse projection_panels for a list of
669            the instantiated panels.
670            (ProjFrame._show_proj_panel, ProjFrame.__DoOnProjAvail)
671            (ProjFrame.__DoOnProjChoice): Changes due to the new handling of
672            the panels
673            (UnknownProjPanel._DoLayout): Place the newlines in the message
674            differently to make the panel narrower.
675            (TMPanel._DoLayout): Layout the parameters in one column.
676    
677    2003-10-10  Bernhard Herzog  <[email protected]>
678    
679            * Thuban/UI/projdialog.py (ProjFrame.build_dialog): New method
680            that contains all the setup for the dialog's widgets, layout and
681            event handling.
682            (__): Call build_dialog to build the dialog.
683            (ProjFrame.__set_properties, ProjFrame.__do_layout): Removed.
684            Their functionality is now in build_dialog
685            (ProjFrame.__VerifyButtons, ProjFrame.__VerifyButtons)
686            (ProjFrame.__DoOnProjAvail, ProjFrame.__DoOnProjAvail)
687            (ProjFrame.__DoOnProjChoice): Small updates due to slightly
688            different widget names and hierarchy introduced with build_dialog.
689    
690    2003-10-10  Bernhard Herzog  <[email protected]>
691    
692            * README: Fix typo.
693    
694    2003-10-09  Bernhard Herzog  <[email protected]>
695    
696            * Thuban/Model/proj.py (ProjFile.Add): Do not check whether the
697            projection is already in the list. This is *a lot* faster when
698            loading files with hundreds of projections since it saves a linear
699            search. OTOH this will allow adding the same projection to the
700            user.proj file multiple times in the projection dialog but we'll
701            deal with that later
702    
703    2003-10-09  Jan-Oliver Wagner <[email protected]>
704    
705            * devtools: New. Directory for developer tools that are not intended
706            for the regular user.
707    
708            * devtools/create_epsg.py: New. Convert the epsg file of proj into
709            a python .proj file.
710    
711    2003-10-09  Bernhard Herzog  <[email protected]>
712    
713            * test/test_proj.py
714            (TestProjection.test_get_parameter_without_equals_sign): New. Test
715            whether GetParameter handles parameters without "=" sign correctly
716    
717            * Thuban/Model/proj.py (Projection.GetParameter): Handle
718            parameters that do not contain a "=". Update the doc-string
719    
720    2003-10-08  Bernhard Herzog  <[email protected]>
721    
722            * Thuban/UI/projdialog.py (ProjFrame.__set_properties): Remove the
723            length limit on the projname text control
724    
725    2003-10-08  Bernhard Herzog  <[email protected]>
726    
727            * test/test_proj.py (TestProjection.test_get_projection_units_geo)
728            (TestProjection.test_get_projection_units_normal): New. Tests for
729            the Projection.GetProjectedUnits method
730    
731    2003-10-08  Jan-Oliver Wagner <[email protected]>
732    
733            * Thuban/Model/resource.py (get_user_proj_file): small bug-fix:
734            Added missing 'val' parameter.
735    
736    2003-10-08  Bernhard Herzog  <[email protected]>
737    
738            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): When the
739            projection type of the currently selected projection is not known,
740            i.e. there's no panel for it, use the UnknownProjPanel
741            (ProjFrame.__DoOnProjChoice, ProjFrame._show_proj_panel): Split
742            the actual replacing of the proj panel into the new method
743            _show_proj_panel.
744            (UnknownProjPanel): Add doc-string.
745            (UnknownProjPanel._DoLayout): Insert a newline into the text so
746            that the panel is not so wide.
747    
748    2003-10-08  Bernhard Herzog  <[email protected]>
749    
750            * Thuban/Model/resource.py (read_proj_file): Return the warnings
751            too. Update the doc-string
752            (get_proj_files): Removed. It wasn't used anywhere
753            (get_system_proj_files, get_system_proj_file): Rename to
754            get_system_proj_file and return the ProjFile object and not a list
755            of ProjFile objects. Update the callers.
756            (get_user_proj_files, get_user_proj_file): Rename to
757            get_user_proj_file return the ProjFile object and not a list of
758            ProjFile objects. Update the callers.
759            (ProjFileReader.__init__): New instance variable for the warnings.
760            Rename the __pf ivar to projfile. Update the methods referring to
761            __pf
762            (ProjFileReader.end_projection): Catch any errors raised when
763            instantiating the projection and record that as an error. The
764            projection will not be in the final ProjFile object.
765            (ProjFileReader.GetWarnings): New method to return the warnings.
766    
767            * Thuban/UI/projdialog.py (ProjFrame.show_warnings): New method to
768            show the warnings from the projfile reader
769            (ProjFrame._OnImport): Deal with any warnings returned by
770            read_proj_file
771            (ProjFrame.__FillAvailList): Deal with any warnings returned by
772            get_system_proj_file or get_user_proj_file.
773    
774            * test/test_proj.py (TestProjFile.doTestRead): Check the warnings.
775            (TestProjFileWithInvalidParameters.file_contents): New test cases
776            to test whether read_proj_file handles invalid projection
777            parameters correctly
778            (TestProjFile.test_get_system_proj_file): New. Simple test for
779            resource.get_system_proj_file
780    
781    2003-10-07  Bernhard Herzog  <[email protected]>
782    
783            * test/test_derivedshapestore.py
784            (TestDerivedShapeStoreExceptions.tearDown): Clear the session
785            properly so that the temporary directories get deleted correctly
786    
787    2003-10-06  Bernhard Herzog  <[email protected]>
788    
789            Handle the title changes in a proper MVC way.
790    
791            * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
792            canvas' TITLE_CHANGED messages
793            (MainWindow.update_title): New. Update the main window's title
794            (MainWindow.__SetTitle): Removed. Use update_title instead.
795            (MainWindow.SetMap): Use update_title instead of __SetTitle
796            (MainWindow.RenameMap): Do change the window title explicitly
797            here. That's handled in a proper MVC way now.
798            (MainWindow.title_changed): New. Subscriber for the TITLE_CHANGED
799            messages
800    
801            * Thuban/Lib/connector.py (Conduit): New class to help classes
802            that forward messages
803    
804            * Thuban/UI/viewport.py: Forward the map's TITLE_CHANGED messages
805            (ViewPort): Derive from Conduit instead of Publisher
806            (ViewPort.Subscribe, ViewPort.Unsubscribe): Use the new base class
807            when calling the inherited versions
808            (ViewPort._subscribe_map, ViewPort._unsubscribe_map): New helper
809            methods to subscribe and unsubscribe map messages
810            (ViewPort.SetMap, ViewPort.Destroy): Use the new helper methods to
811            handle the map subscriptions
812            (ViewPort.Map, ViewPort.map_projection_changed)
813            (ViewPort.layer_projection_changed): Add or update doc-strings
814    
815            * test/test_connector.py (TestPublisher.test_issue_simple): Fix
816            typo
817            (MyConduit): Helper class for the Conduit test.
818            (TestConduit): Test cases for Conduit
819    
820            * test/test_connector.py: Use support.run_tests as main.
821    
822            * test/test_viewport.py (ViewPortTest.setUp): Also subscribe to
823            the TITLE_CHANGED messages
824            (ViewPortTest.test_forwarding_title_changed): New test to check
825            whether the viewport forwards the map's TITLE_CHANGED messages
826            (TestViewportWithPostGIS.tearDown): Call the map's Destroy method
827            after the port's because the latter may require a still functional
828            map.
829    
830    2003-10-06  Bernhard Herzog  <[email protected]>
831    
832            * Thuban/UI/application.py (ThubanApplication.maps_changed): Add
833            doc-string
834    
835    2003-10-06  Bernhard Herzog  <[email protected]>
836    
837            * test/test_viewport.py (ViewPortTest.setUp)
838            (SimpleViewPortTest.test_init_with_size): Move the test for the
839            initial size as a constructor parameter from ViewPortTest.setUp
840            method to a new separate test in SimpleViewPortTest.
841    
842    2003-10-06  Bernhard Herzog  <[email protected]>
843    
844            * test/test_viewport.py (MockView): New class derived from
845            ViewPort with a mock implementation of GetTextExtent to be used in
846            the test cases
847            (ViewPortTest.setUp): Use MockView instead of ViewPort
848    
849            * Thuban/UI/viewport.py (ViewPort.GetTextExtent): Turn this method
850            into what would be a "pure virtual function" in C++: always raise
851            NotImplementedError. Mock implementations for test cases don't
852            belong into the real code
853    
854    2003-10-02  Bernhard Herzog  <[email protected]>
855    
856            * test/test_layer.py (TestLayer.test_empty_layer): Explicitly
857            close the dbf file we create so that it's contents have been
858            written properly.
859    
860            * libraries/shapelib/shptree.c, libraries/shapelib/shpopen.c,
861            libraries/shapelib/shapefil.h, libraries/shapelib/dbfopen.c:
862            Update to shapelib 1.2.10
863    
864    2003-10-01  Jan-Oliver Wagner <[email protected]>
865    
866            * Thuban/UI/tree.py, Thuban/UI/main.py: Remove the #! line as
867            it annoys lintian which warns about these files not being
868            executable. The #! isn't necessary here since if you absolutely
869            must execute them you can always say "python <filename>".
870    
871    2003-09-26  Bernhard Herzog  <[email protected]>
872    
873            * Thuban/Model/classgen.py (GenQuantiles0): Removed since it's
874            only used in GREAT-ER but not used in Thuban itself. When GREAT-ER
875            is ported to a newer the import will fail, so it should be noticed
876            immediately that this function is gone.
877            Fixes RT#1919
878    
879    2003-09-26  Bernhard Herzog  <[email protected]>
880    
881            Add a DTD for the projection files and make thuban write valid
882            projection files
883    
884            * Resources/XML/projfile.dtd: New. DTD for thuban's projection
885            files
886    
887            * Thuban/Model/resource.py (ProjFileSaver.write): Use
888            'projectionlist' as the name in the document type declaration so
889            that it matches the element type of the root element.
890    
891            * test/test_proj.py (sample_projfile, sample_projfile2): Use
892            'projectionlist' as the name in the document type declaration just
893            as it is done now in the files thuban would write
894            (sample_projfile, sample_projfile_data): Fix spelling of
895            "Mercator"
896            (TestProjFile.doTestWrite): Validate the written and the expected
897            XML data
898            (TestProjFile): Derive from ValidationTest so that we can run xml
899            validation tests
900    
901    2003-09-24  Bernhard Herzog  <[email protected]>
902    
903            * Thuban/UI/renderer.py (ExportRenderer.render_legend): Do not
904            modify the list returned by map.Layers() in place since it is the
905            actual list of layers used by the map.
906    
907    2003-09-23  Jan-Oliver Wagner <[email protected]>
908    
909            * Doc/manual/thuban-manual.xml: Added subsection to chapter
910            Extensions to describe the extensions coming with the Thuban
911            standard package (gns2shp and importAPR).
912    
913    2003-09-23  Bernhard Herzog  <[email protected]>
914    
915            * libraries/thuban/wxproj.cpp (project_point): if there's an
916            inverse but no forward projection, convert to degrees after
917            applying the inverse projection. Fixes RT#2096
918    
919            * test/test_wxproj.py: New. Test cases for wxproj.so. One test
920            implicitly tests for the fix to RT#2096
921    
922            * test/support.py (FloatComparisonMixin.assertFloatSeqEqual):
923            Check that the sequences have the same lengths
924    
925            * Resources/Projections/defaults.proj (Geographic projection): Use
926            a much more precise value for the to_meter attribute.
927    
928    2003-09-22  Bernhard Herzog  <[email protected]>
929    
930            * test/support.py (initthuban): Make sure to unset the LANG env.
931            var. so that tests that compare translated strings work. Solves RT
932            #2094
933    
934    2003-09-22  Jan-Oliver Wagner <[email protected]>
935    
936            Small improvement of APR import.
937    
938            * Extensions/importAPR/test/test_apr.py (aprTest.test_LClass):
939            Added tests for text-ranges.
940    
941            * Extensions/importAPR/apr.py (APR_LClass.GetThubanRange): Now
942            returns a string object if the range is based on text.
943    
944            * Extensions/importAPR/importAPR.py (import_apr_dialog): Unified
945            range retrieval.
946    
947    2003-09-22  Jan-Oliver Wagner <[email protected]>
948    
949            Initial version of the importAPR extension which is in
950            experimental state.
951    
952            * /Extensions/importAPR/, /Extensions/importAPR/samples/,
953            /Extensions/importAPR/test/: New directories.
954    
955            * /Extensions/importAPR/samples/README: New: Howto load the samples.
956    
957            * /Extensions/importAPR/samples/iceland.apr: New: A sample APR
958            file which refers to the Thuban Iceland demo data.
959    
960            * /Extensions/importAPR/test/README: New: Howto execute the tests.
961    
962            * /Extensions/importAPR/test/test_apr.py: New: Tests for APR classes.
963    
964            * /Extensions/importAPR/apr.py: New: Classes for ArcView Objects
965            as in '.apr'-files.
966    
967            * /Extensions/importAPR/odb.py: New: Classes for generic ArcView
968            ODB Objects as in '.apr', '.avl' and other files.
969    
970            * /Extensions/importAPR/__init__.py: New: Init to make this
971            directory a package.
972    
973            * /Extensions/importAPR/importAPR.py: New: Import a ArcView
974            project file (.apr) and convert it to Thuban.
975    
976    2003-09-22  Jan-Oliver Wagner <[email protected]>
977    
978            * Extensions/gns2shp.gns2shp.py: The main module of gns2shp.
979    
980    2003-09-19  Jan-Oliver Wagner <[email protected]>
981    
982            * Doc/manual/thuban-manual.xml: Extended section 'Installation'
983            with description on RPM installation and RPM binary package
984            creation.
985    
986    2003-09-18  Bernhard Herzog  <[email protected]>
987    
988            * setup.py (data_files): Only add the mo files if the Locales
989            directory actually exists, so that setup.py works with a fresh CVS
990            checkout
991    
992    2003-09-12  Jan-Oliver Wagner <[email protected]>
993    
994            * Examples/simple_extensions/simple_tool.py: bugfix: Tool is now
995            in viewport, not anymore in view
996    
997    2003-09-04  Jan-Oliver Wagner <[email protected]>
998    
999            Introducing first Extension (gns2shp).
1000    
1001            * Extensions, Extensions/gns2shp, Extensions/gns2shp/test: New.
1002    
1003            * Extensions/__init__.py: New. init to make this dir a package.
1004    
1005            * Extensions/gns2shp/__init__.py: New. init to make this dir a package.
1006    
1007            * Extensions/gns2shp/test/README: New. some info on this test directory.
1008    
1009            * Extensions/gns2shp/test/ls.txt: New. test data set (Liechtenstein).
1010    
1011            * Extensions/gns2shp/test/test_gns2shp.py: New. Test for correct creation
1012            of Shapefile from GNS text file format
1013    
1014    2003-09-03  Jan-Oliver Wagner <[email protected]>
1015    
1016            Fix/workaround for bug #2019:
1017            https://intevation.de/rt/webrt?serial_num=2019
1018    
1019            * Thuban/UI/identifyview.py (IdentifyView.ID_STOP): New.
1020            (IdentifyView.__init__): Added another button that allows to
1021            stop the identify mode.
1022            (IdentifyView.OnStop): New. Stops the identify mode.
1023    
1024    2003-09-03  Jan-Oliver Wagner <[email protected]>
1025    
1026            Introducing a new exception dialog that allows to exit the
1027            application immediately.
1028            This fixes bug #2060: https://intevation.de/rt/webrt?serial_num=2060
1029    
1030            * Thuban/UI/exceptiondialog.py: New. A special exception dialog.
1031    
1032            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
1033            Made strings available to translations. Exchanged the simple
1034            ScrolledMessageDialog by the new ExceptionDialog.
1035    
1036    2003-09-01  Bernhard Herzog  <[email protected]>
1037    
1038            * NEWS: New. Summary of changes and release notes.
1039    
1040            * MANIFEST.in: Add NEWS
1041    
1042    2003-09-01  Bernhard Herzog  <[email protected]>
1043    
1044            * MANIFEST.in: Correct the include statement for the mo-files and
1045            include the documentation too.
1046    
1047            * setup.py (data_files): Add the .mo files
1048            (setup call): Up to version 0.9.0
1049    
1050    2003-09-01  Bernhard Herzog  <[email protected]>
1051    
1052            * Thuban/UI/dbdialog.py (ChooseDBTableDialog.__init__): Change the
1053            parameter list to just parent and session
1054            (ChooseDBTableDialog.__set_properties): Removed. Setting the
1055            selection of empty list boxes is not allowed (and produces C++
1056            assertion errors) and the rest of the setup is better done in
1057            __init__ anyway.
1058            (ChooseDBTableDialog.OnCancel, ChooseDBTableDialog.OnOK)
1059            (ChooseDBTableDialog.OnLBDClick, DBDialog.OnOK): Use the Python
1060            builtins True/False for booleans to avoid warnings from wxPython
1061    
1062            * Thuban/UI/mainwindow.py (MainWindow.AddDBLayer): Adapt to new
1063            ChooseDBTableDialog constructor parameters.
1064    
1065    2003-09-01  Bernhard Herzog  <[email protected]>
1066    
1067            * Thuban/Model/postgisdb.py
1068            (PostGISTable): Extend doc-string
1069            (PostGISTable._fetch_table_information): Set the column index
1070            correctly, pretending ignored columns don't exist.
1071    
1072            * test/test_postgis_db.py (TestPostGISIgnoredColumns): New tests
1073            for postgis tables with data types not yet supported by thuban.
1074    
1075    2003-08-29  Bernhard Herzog  <[email protected]>
1076    
1077            * HOWTO-Release: Tweak item about running the tests.
1078    
1079    2003-08-29  Jan-Oliver Wagner <[email protected]>
1080    
1081            * /Doc/manual/thuban-manual.xml: updated to version 1.0pre2.
1082    
1083    2003-08-29  Bernhard Herzog  <[email protected]>
1084    
1085            Add some missing parameters to projections. Proj complains about
1086            them on windows but for some reason not on Linux.
1087    
1088            * test/test_save.py (SaveSessionTest.testLayerProjection): Add
1089            missing required projection parameters
1090    
1091            * test/test_proj.py (TestProjFile.test): Add missing required
1092            projection parameters
1093    
1094            * test/test_load_0_8.py (TestLayerProjection.file_contents)
1095            (TestLayerProjection.test): Add missing required projection
1096            parameters and tests for them
1097    
1098            * test/test_load.py (TestLayerProjection.file_contents)
1099            (TestLayerProjection.test): Add missing required projection
1100            parameters and tests for them
1101    
1102            * test/test_layer.py (TestLayer.test_base_layer): Add missing
1103            required projection parameters
1104    
1105    2003-08-29  Bernhard Herzog  <[email protected]>
1106    
1107            * libraries/pyprojection/Projection.i: Use pj_get_errno_ref to
1108            access the pj_errno because directly accessing pj_errno doesn't
1109            work on windows if the proj library is in a DLL
1110    
1111            * libraries/pyprojection/Projection_wrap.c: Update from Projection.i
1112    
1113    2003-08-28  Bernhard Herzog  <[email protected]>
1114    
1115            * test/test_proj.py: Import things from Thuban after calling
1116            initthuban
1117    
1118            * test/test_load.py (LoadSessionTest.filenames): New class
1119            variable with the filename attributes to normalize
1120            (LoadSessionTest.check_format): Pass self.filenames to
1121            sax_eventlist to normalize the filename attributes
1122    
1123            * test/xmlsupport.py: Add cvs keywords
1124            (SaxEventLister.__init__): New parameter filenames which indicates
1125            attributes that contain filenames
1126            (SaxEventLister.startElementNS): Normalize the filename attributes
1127            with os.path.normpath
1128            (sax_eventlist): New parameter filenames to pass through to
1129            SaxEventLister
1130    
1131            * test/test_derivedshapestore.py: Make this file callable as a
1132            program to execute the tests
1133            (TestDerivedShapeStoreExceptions.test_table_with_wrong_size): Bind
1134            the session to self.session so that it gets destroyed properly
1135    
1136            * test/test_layer.py (TestLayer.tearDown): Call the session's
1137            Destroy method
1138    
1139            * test/test_map.py (TestMapBase.tearDown): Destroy self.session
1140            too if it exists
1141            (TestMapAddLayer.test_add_layer): Bind the session to self.session
1142            so that it gets destroyed properly
1143    
1144            * test/postgissupport.py (reason_for_not_running_tests): Add a
1145            test for the existence of popen2.Popen4.
1146    
1147            * test/test_save.py (SaveSessionTest.tearDown): New. Provide a
1148            reliable way to destroy the sessions created in the test cases
1149            (SaveSessionTest.test_dbf_table): Bind the session to self.session
1150            so that it gets destroyed properly
1151            (SaveSessionTest.testLayerProjection): Bind the session to
1152            self.session so that it gets destroyed properly
1153    
1154            * test/test_session.py (UnreferencedTablesTests.tearDown): Make
1155            sure that the session is destroyed properly
1156    
1157            * test/test_shapefilestore.py: Make this callable as a program to
1158            execute the tests
1159    
1160            * test/test_scalebar.py: Remove unnecessary import of _ from
1161            Thuban
1162    
1163            * test/support.py (print_garbage_information): Call initthuban
1164            here because it may be called indirectly from test cases that test
1165            test support modules which do not use anything from thuban itself
1166            (ThubanTestProgram.runTests): Remove unnecessary debug print
1167    
1168    2003-08-28  Bernhard Herzog  <[email protected]>
1169    
1170            * Thuban/version.py (longversion): Update to 0.9
1171    
1172            * Thuban/UI/mainwindow.py: Remove some unused imports
1173    
1174            * README: Add section about required additional software. Add date
1175            and revision CVS keywords
1176    
1177            * HOWTO-Release: Add item about the translations. Add date and
1178            revision CVs keywords and change formatting to match README a bit
1179            better
1180    
1181            * po/de.po: Update for 0.9
1182    
1183            * test/README: Tweak the wording a little because many tests are
1184            not really unittest.
1185    
1186    2003-08-27  Bernhard Herzog  <[email protected]>
1187    
1188            As preparation for the 0.9 release, switch thuban files to a
1189            non-dev namespace
1190    
1191            * Thuban/Model/save.py (SessionSaver.write_session): Write files
1192            with the http://thuban.intevation.org/dtds/thuban-0.9.dtd
1193            namespace
1194    
1195            * Thuban/Model/load.py (SessionLoader.__init__): Accept the
1196            http://thuban.intevation.org/dtds/thuban-0.9.dtd namespace too
1197    
1198            * test/test_save.py (SaveSessionTest.dtd)
1199            (SaveSessionTest.testEmptySession)
1200            (SaveSessionTest.testSingleLayer)
1201            (SaveSessionTest.testLayerProjection)
1202            (SaveSessionTest.testRasterLayer)
1203            (SaveSessionTest.testClassifiedLayer)
1204            (SaveSessionTest.test_dbf_table)
1205            (SaveSessionTest.test_joined_table)
1206            (SaveSessionTest.test_save_postgis): Update for new namespace
1207    
1208            * test/test_load.py (LoadSessionTest.dtd, TestSingleLayer)
1209            (TestLayerVisibility.file_contents, TestLabels.file_contents)
1210            (TestLayerProjection.file_contents)
1211            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
1212            (TestPostGISLayer.file_contents)
1213            (TestPostGISLayerPassword.file_contents)
1214            (TestLoadError.file_contents, TestLoadError.test): Update for new
1215            namespace
1216    
1217    2003-08-27  Bernhard Herzog  <[email protected]>
1218    
1219            Make the table interface distinguish between row ids (an integer
1220            that uniquely identifies a row) and row ordinals (a simple row
1221            count from 0 to NumRows() - 1)
1222    
1223            * Thuban/Model/postgisdb.py (PostGISTable.RowIdToOrdinal)
1224            (PostGISTable.RowOrdinalToId): New methods to conver between row
1225            ids and row ordinals
1226            (PostGISTable.ReadRowAsDict, PostGISTable.ReadValue): New keyword
1227            parameter row_is_ordinal to indicate whether the row parameter is
1228            the row id or the ordinal
1229    
1230            * Thuban/Model/transientdb.py (TransientTableBase.RowIdToOrdinal)
1231            (TransientTableBase.RowOrdinalToId)
1232            (AutoTransientTable.RowIdToOrdinal)
1233            (AutoTransientTable.RowOrdinalToId): Same new methods as in
1234            PostGISTable.
1235            (TransientTableBase.ReadRowAsDict, TransientTableBase.ReadValue)
1236            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ReadValue):
1237            Same new parameter as in PostGISTable.
1238    
1239            * Thuban/Model/table.py (DBFTable.RowIdToOrdinal)
1240            (DBFTable.RowOrdinalToId, MemoryTable.RowIdToOrdinal)
1241            (MemoryTable.RowOrdinalToId): Same new methods as in PostGISTable.
1242            (DBFTable.ReadValue, DBFTable.ReadRowAsDict)
1243            (MemoryTable.ReadValue, MemoryTable.ReadRowAsDict): Same new
1244            parameter as in PostGISTable.
1245    
1246            * Thuban/UI/tableview.py (DataTable.RowIdToOrdinal)
1247            (DataTable.RowOrdinalToId): New methods to convert between row ids
1248            and row ordinals.
1249            (TableGrid.SelectRowById): New method to select a row based on its
1250            ID as opposed to its ordinal
1251            (DataTable.GetValue, TableGrid.OnRangeSelect)
1252            (TableGrid.OnSelectCell, LayerTableGrid.select_shapes)
1253            (QueryTableFrame.OnQuery, QueryTableFrame.get_selected)
1254            (LayerTableFrame.__init__): Convert between row ids and row
1255            ordinals as appropriate
1256    
1257            * test/postgissupport.py (PostGISDatabase.__init__): Add
1258            doc-string.
1259            (PostGISDatabase.initdb): The optional third item in a tuple in
1260            tables is now a (key, value) list with additional arguments to
1261            pass to upload_shapefile
1262            (upload_shapefile): New parameter gid_offset to allow gids that
1263            are not the same as the shapeids in the shapefile
1264            (PostgreSQLServer.get_default_static_data_db): Use the new
1265            gid_offset to make the gids in landmarks 1000 higher than the
1266            shapeids in the shapefile
1267    
1268            * test/test_viewport.py
1269            (TestViewportWithPostGIS.test_find_shape_at_point): Adapt to the
1270            new shapeids in the landmarks table
1271    
1272            * test/test_transientdb.py
1273            (TestTransientTable.run_iceland_political_tests)
1274            (TestTransientTable.test_transient_joined_table): Add tests for
1275            the new table methods and new keywords arguments.
1276    
1277            * test/test_postgis_db.py
1278            (TestPostGISTable.test_read_row_as_dict_row_count_mode)
1279            (TestPostGISTable.test_read_value_row_count_mode)
1280            (TestPostGISTable.test_row_id_to_ordinal)
1281            (TestPostGISTable.test_row_oridnal_to_id): New test for the new
1282            table methods and the new arguments
1283            (TestPostGISShapestorePoint.test_shapes_in_region)
1284            (TestPostGISShapestorePoint.test_shape_raw_data)
1285            (TestPostGISShapestorePoint.test_shape_points)
1286            (TestPostGISShapestorePoint.test_shape_shapeid)
1287            (TestPostGISShapestorePoint.test_all_shapes)
1288            (TestPostGISTable.test_simple_query)
1289            (TestPostGISTable.test_simple_query)
1290            (TestPostGISTable.test_simple_query)
1291            (TestPostGISTable.test_read_value)
1292            (TestPostGISTable.test_read_row_as_dict): Adapt to the new
1293            shapeids in the landmarks table
1294    
1295            * test/test_memory_table.py
1296            (TestMemoryTable.test_read_row_as_dict_row_count_mode)
1297            (TestMemoryTable.test_read_value_row_count_mode)
1298            (TestMemoryTable.test_row_id_to_ordinal)
1299            (TestMemoryTable.test_row_oridnal_to_id): New test for the new
1300            table methods and the new arguments
1301    
1302            * test/test_dbf_table.py
1303            (TestDBFTable.test_read_row_as_dict_row_count_mode)
1304            (TestDBFTable.test_read_value_row_count_mode)
1305            (TestDBFTable.test_row_id_to_ordinal)
1306            (TestDBFTable.test_row_oridnal_to_id): New test for the new table
1307            methods and the new arguments
1308    
1309    2003-08-26  Bernhard Herzog  <[email protected]>
1310    
1311            * Thuban/Model/postgisdb.py (PostGISShapeStore.BoundingBox): Use a
1312            more postgis specific but much faster method to get the bounding
1313            box
1314    
1315    2003-08-26  Bernhard Herzog  <[email protected]>
1316    
1317            * Thuban/Model/postgisdb.py (PostGISTable.Title)
1318            (PostGISShapeStore.AllShapes): Add these missing methods.
1319            (PostGISShapeStore.ShapesInRegion): No need to raise
1320            StopIteration. We can simply return
1321    
1322            * test/test_postgis_db.py (TestPostGISTable.test_title)
1323            (TestPostGISShapestorePoint.test_all_shapes): New tests for the
1324            new methods
1325    
1326    2003-08-25  Bernhard Herzog  <[email protected]>
1327    
1328            * Thuban/Model/postgisdb.py (shapetype_map): Add MUTLIPOLYGON.
1329    
1330            * test/test_postgis_db.py (PolygonTests): New class containing
1331            those tests from TestPostGISShapestorePolygon that can also be
1332            used to test MUTLIPOLYGON tables
1333            (TestPostGISShapestorePolygon): Most tests are now in PolygonTests
1334            so derive from that
1335            (TestPostGISShapestoreMultiPolygon): New class with tests for
1336            MUTLIPOLYGON tables
1337    
1338            * test/postgissupport.py (PostGISDatabase.initdb): Allow the
1339            tables argument to have tuples with three items to override the
1340            WKT type used.
1341            (PostgreSQLServer.get_default_static_data_db): Use the above to
1342            create a polygon table with MUTLIPOLYGONs
1343            (point_to_wkt, coords_to_point, polygon_to_wkt, coords_to_polygon)
1344            (arc_to_wkt, coords_to_multilinestring): Rename from *_to_wkt to
1345            coords_to*
1346            (coords_to_multipolygon): New. Convert to MUTLIPOLYGON
1347            (wkt_converter): New. Map WKT types to converters
1348            (upload_shapefile): New parameter force_wkt_type to use a
1349            different WKT type than the default
1350    
1351    2003-08-25  Bernhard Herzog  <[email protected]>
1352    
1353            * Thuban/UI/application.py
1354            (ThubanApplication.run_db_param_dialog): New. Suitable as a
1355            db_connection_callback. Main difference is that the dialog run
1356            from this method doesn't have a parent so it can be used even when
1357            there is no main window
1358            (ThubanApplication.OpenSession): Use self.run_db_param_dialog if
1359            no db_connection_callback was given. This way the dialog pops up
1360            even when the .thuban file was given as a command line parameter.
1361    
1362    2003-08-25  Bernhard Herzog  <[email protected]>
1363    
1364            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Release the the mouse
1365            before calling MouseLeftUp. MouseLeftUp may pop up modal dialogs
1366            which leads to an effectively frozen X session because the user
1367            can only interact with the dialog but the mouse is still grabbed
1368            by the canvas.
1369            Also, call the tool's Hide method before MouseLeftUp because
1370            MouseLeftUp may change the tool's coordinates.
1371    
1372    2003-08-25  Bernhard Herzog  <[email protected]>
1373    
1374            * Thuban/UI/application.py (ThubanApplication.OpenSession): Catch
1375            LoadCancelled exceptions and handle them by returning immediately.
1376    
1377    2003-08-25  Bernhard Herzog  <[email protected]>
1378    
1379            GUI part of loading sessions with postgis connections which may
1380            require user interaction to get passwords or updated parameters
1381    
1382            * Thuban/UI/dbdialog.py (DBDialog): Reimplement to make it look a
1383            bit nucer and be more generic.
1384            (DBFrame.OnAdd): Adapt to new DBDialog interface
1385    
1386            * Thuban/UI/application.py (ThubanApplication.OpenSession): New
1387            optional parameter db_connection_callback which is passed to
1388            load_session.
1389    
1390            * Thuban/UI/mainwindow.py (MainWindow.run_db_param_dialog): New.
1391            Suitable as a db_connection_callback
1392            (MainWindow.OpenSession): Use self.run_db_param_dialog as the
1393            db_connection_callback of the application's OpenSession method
1394    
1395    
1396    2003-08-25  Bernhard Herzog  <[email protected]>
1397    
1398            Basic loading of sessions containing postgis connections:
1399    
1400            * Thuban/Model/load.py (LoadError): Add doc-string
1401            (LoadCancelled): New exception class to indicate a cancelled load
1402            (SessionLoader.__init__): Add the db_connection_callback parameter
1403            which will be used by the loader to get updated parameters and a
1404            password for a database connection
1405            (SessionLoader.__init__): Add the new XML elements to the
1406            dispatchers dictionary
1407            (SessionLoader.check_attrs): Two new conversions, ascii to convert
1408            to a byte-string object and idref as a generic id reference
1409            (SessionLoader.start_dbconnection)
1410            (SessionLoader.start_dbshapesource): New. Handlers for the new XML
1411            elements
1412            (load_session): Add the db_connection_callback to pass through the
1413            SessionLoader
1414    
1415            * test/test_load.py (TestPostGISLayer, TestPostGISLayerPassword):
1416            New classes to test loading of sessions with postgis database
1417            connections.
1418    
1419    2003-08-25  Bernhard Herzog  <[email protected]>
1420    
1421            * Thuban/UI/mainwindow.py (__ThubanVersion__): Remove this and
1422            replace it and the comment with __BuildDate__ by the Source: and
1423            Id: cvs keywords as used in the other files.
1424    
1425    2003-08-25  Bernhard Herzog  <[email protected]>
1426    
1427            * Thuban/Model/load.py (SessionLoader.check_attrs): Raise a
1428            LoadError when a required attribute is missing. The code used to
1429            be commented out for some reason, but probably should have been
1430            active.
1431    
1432            * test/test_load.py (TestLoadError.test): Test the message in the
1433            LoadError too to make sure it really is about the missing
1434            attribute
1435    
1436    2003-08-22  Bernhard Herzog  <[email protected]>
1437    
1438            * test/test_save.py (SaveSessionTest.test_dbf_table)
1439            (SaveSessionTest.test_joined_table): Add XML validation tests.
1440    
1441    2003-08-22  Bernhard Herzog  <[email protected]>
1442    
1443            Implement saving a session with a postgis connection
1444    
1445            * Resources/XML/thuban-0.9.dtd (dbconnection, dbshapesource) New
1446            elements for database connections and shapestores using db
1447            connections
1448            (session): Add the dbconnections to the content model
1449    
1450            * Thuban/Model/save.py (SessionSaver.write_db_connections): New.
1451            Write the db connections
1452            (SessionSaver.write_session): Call write_db_connections to write
1453            the connection before the data sources
1454            (SessionSaver.write_data_containers): Handle postgis shapestores
1455    
1456            * test/test_save.py (SaveSessionTest.thubanids)
1457            (SaveSessionTest.thubanidrefs): Update for new DTD
1458            (SaveSessionTest.test_save_postgis): New. Test saving a session
1459            with postgis connections
1460    
1461            * Thuban/Model/postgisdb.py (PostGISTable.DBConnection)
1462            (PostGISTable.TableName): New accessor methods for the connection
1463            and table name
1464    
1465            * test/test_postgis_db.py (TestPostGISTable.test_dbconn)
1466            (TestPostGISTable.test_dbname): New methods to test the new
1467            PostGISConnection methods
1468    
1469    2003-08-22  Bernhard Herzog  <[email protected]>
1470    
1471            * Thuban/Model/postgisdb.py (ConnectionError): New exception class
1472            for exceptions occurring when establishing a Database connection
1473            (PostGISConnection.connect): Catch psycopg.OperationalError during
1474            connects and raise ConnectionError.
1475    
1476            * test/test_postgis_db.py (TestPostgisDBExceptions): New class for
1477            tests for database exceptions
1478    
1479    2003-08-22  Bernhard Herzog  <[email protected]>
1480    
1481            Prepare the test suite for tests with required authentication
1482    
1483            * test/postgissupport.py (PostgreSQLServer.__init__): Add instance
1484            variables with two predefined users/passwords, one for the admin
1485            and one for a non-privileged user.
1486            (PostgreSQLServer.createdb): Pass the admin name to initdb and add
1487            the non-privileged user to the database and set the admin password
1488            (PostgreSQLServer.wait_for_postmaster): Use the admin user name.
1489            Better error reporting
1490            (PostgreSQLServer.connection_params)
1491            (PostgreSQLServer.connection_string): New methods to return
1492            information about how to connect to the server
1493            (PostgreSQLServer.execute_sql): New. Convenience method to execute
1494            SQL statements
1495            (PostgreSQLServer.require_authentication): Toggle whether the
1496            server requires authentication
1497            (PostgreSQLServer.create_user, PostgreSQLServer.alter_user): New.
1498            Add or alter users
1499            (PostGISDatabase.initdb): Pass the admin name one the
1500            subprocesses' command lines. Grant select rights on
1501            geometry_columns to everybody.
1502            (upload_shapefile): Use the admin name and password when
1503            connecting. Grant select rights on the new table to everybody.
1504    
1505            * test/test_viewport.py (TestViewportWithPostGIS.setUp): Use the
1506            server's new methods to get the connection parameters.
1507    
1508            * test/test_postgis_session.py (TestSessionWithPostGIS.setUp)
1509            (TestSessionWithPostGIS.test_remove_dbconn_exception): Use the
1510            server's new methods to get the connection parameters.
1511    
1512            * test/test_postgis_db.py
1513            (TestPostGISConnection.test_gis_tables_empty)
1514            (TestPostGISConnection.test_gis_tables_non_empty)
1515            (PostGISStaticTests.setUp): Use the server's new methods to get
1516            the connection parameters.
1517    
1518    2003-08-22  Bernhard Herzog  <[email protected]>
1519    
1520            * Thuban/UI/about.py (About.__init__): Add the psycopg version.
1521    
1522            * Thuban/version.py: Add psycopg version
1523    
1524            * Thuban/Model/postgisdb.py (psycopg_version): New. Return the
1525            version of the psycopg module
1526    
1527    2003-08-22  Bernhard Herzog  <[email protected]>
1528    
1529            * Thuban/UI/dbdialog.py (DBPwdDlg): Removed because it's not used.
1530            (DBFrame.OnEdit): Removed because it's not used and wouldn't work
1531            at the moment. The functionality should probably be implemented
1532            some time, though.
1533            (DBFrame.OnRemove): Display a message if the connection can't be
1534            removed because it's still in use.
1535    
1536    2003-08-22  Jan-Oliver Wagner <[email protected]>
1537    
1538            * Thuban/UI/about.py (About.__init__): split up the huge about
1539            text into elements/lists for easier translation. This fixes bug
1540            https://intevation.de/rt/webrt?serial_num=2058
1541            Also, made some forgotten string available for the i18n.
1542    
1543    2003-08-21  Bernhard Herzog  <[email protected]>
1544    
1545            Make postgis support really optional including insensitive menu
1546            items.
1547    
1548            * Thuban/Model/postgisdb.py (has_postgis_support): New. Return
1549            whether the postgis is supported.
1550    
1551            * Thuban/UI/dbdialog.py: Put the psycopg import into try..except
1552            to make postgis support optional
1553    
1554            * Thuban/UI/mainwindow.py (_has_postgis_support): New. Context
1555            version of Thuban.Model.postgisdb.has_postgis_support
1556            (database_management command): Make it only sensitive if postgis
1557            is supported.
1558    
1559    2003-08-21  Jan-Oliver Wagner <[email protected]>
1560    
1561            * Doc/manual/thuban-manual.xml: Added CVS revision for rev-history.
1562            (section Adding and Removing Layers): Added text and described
1563            multi-selection.
1564            (chapter Extensions): New.
1565    
1566    2003-08-21  Jan-Oliver Wagner <[email protected]>
1567    
1568            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Changed dialog
1569            settings to allow multiple files to load into the map.
1570            Also reduced selection to *.shp as a default.
1571    
1572    2003-08-20  Bernhard Herzog  <[email protected]>
1573    
1574            Add dialogs and commands to open database connections and add
1575            database layers.
1576    
1577            * Thuban/UI/mainwindow.py (MainWindow.DatabaseManagement): New
1578            method to open the database connection management dialog
1579            (MainWindow.AddDBLayer): New method to add a layer from a database
1580            (_has_dbconnections): New helper function to use for sensitivity
1581            (database_management command, layer_add_db command): New commands
1582            that call the above new methods.
1583            (main_menu): Add the new commands to the menu.
1584    
1585            * Thuban/Model/postgisdb.py (PostGISConnection.__init__)
1586            (PostGISConnection.connect): Establish the actual connection in a
1587            separate method and call it in __init__. This makes it easier to
1588            override the behavior in test cases
1589            (PostGISConnection.BriefDescription): New method to return a brief
1590            description for use in dialogs.
1591    
1592            * test/test_postgis_db.py (NonConnection): DB connection that
1593            doesn't actually connect
1594            (TestBriefDescription): New class with tests for the new
1595            BriefDescription method
1596    
1597    2003-08-19  Jan-Oliver Wagner <[email protected]>
1598    
1599            Moved anything from extensions to libraries.
1600    
1601            * libraries: New.
1602    
1603            * libraries/ pyprojection, pyshapelib, shapelib, thuban: New.
1604    
1605            * libraries/pyprojection/ LICENSE, MANIFEST.in, Projection.i,
1606            Projection.py, Projection_wrap.c, setup.py, swighelp.txt: These files have
1607            been moved here from thuban/extensions/pyprojection/
1608            See there in the Attic for the older history.
1609    
1610            * libraries/pyshapelib/ COPYING, ChangeLog, NEWS, README, dbflib.i,
1611            dbflib.py, dbflib_wrap.c, pyshapelib_api.h, pytest.py, setup.py,
1612            shapelib.i, shapelib.py, shapelib_wrap.c, shptreemodule.c: These files
1613            have been moved here from thuban/extensions/pyshapelib/
1614            See there in the Attic for the older history.
1615    
1616            * libraries/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c: These
1617            files have been moved here from thuban/extensions/shapelib/
1618            See there in the Attic for the older history.
1619    
1620            * libraries/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
1621            gdalwarp.cpp, wxproj.cpp: These files have been moved here from
1622            thuban/extensions/thuban/
1623            See there in the Attic for the older history.
1624    
1625            * MANIFEST.in, setup.cfg, setup.py: renamed extensions to libraries.
1626    
1627            * extensions/thuban/ bmpdataset.cpp, cpl_mfile.cpp, cpl_mfile.h,
1628            gdalwarp.cpp, wxproj.cpp: Moved to libraries/thuban.
1629    
1630            * extensions/shapelib/ dbfopen.c, shapefil.h, shpopen.c, shptree.c:
1631            Moved to libraries/shapelib.
1632    
1633            * extensions/pyshapelib/ COPYING, NEWS, dbflib.py, pytest.py,
1634            shapelib.py, README, dbflib_wrap.c, setup.py, shapelib_wrap.c,
1635            ChangeLog, dbflib.i, pyshapelib_api.h, shapelib.i, shptreemodule.c:
1636            Moved to libraries/pyshapelib.
1637    
1638            * extensions/pyprojection/ MANIFEST.in, Projection.py, setup.py,
1639            LICENSE, Projection.i, Projection_wrap.c, swighelp.txt:
1640            Moved to libraries/pyprojection.
1641    
1642            * extensions/ pyprojection, pyshapelib, shapelib, thuban: Removed.
1643    
1644            * extensions: Removed.
1645    
1646    2003-08-19  Bernhard Herzog  <[email protected]>
1647    
1648            * test/test_viewport.py (ViewPortTest): We don't use the
1649            facilities of FileTestMixin so don't derive from it.
1650            (TestViewportWithPostGIS): New class with tests for using a
1651            viewport on a map with postgis layers.
1652    
1653    2003-08-19  Bernhard Herzog  <[email protected]>
1654    
1655            Add the db connection management to the session.
1656    
1657            * Thuban/Model/session.py (Session.__init__): New instance
1658            variable db_connections
1659            (Session.AddDBConnection, Session.DBConnections)
1660            (Session.HasDBConnections, Session.CanRemoveDBConnection)
1661            (Session.RemoveDBConnection): New methods to manage and query the
1662            db connections managed by the session
1663            (Session.OpenDBShapeStore): New method to open a shapestore from a
1664            db connection
1665    
1666            * Thuban/Model/messages.py (DBCONN_REMOVED, DBCONN_ADDED): New
1667            messages for the db connection handling in the session
1668    
1669            * test/test_postgis_session.py: New. test cases for the session's
1670            db connection handling with postgis connections
1671    
1672    2003-08-19  Bernhard Herzog  <[email protected]>
1673    
1674            Add very basic postgis database support and the corresponding test
1675            cases. The test cases require a PostgreSQL + postgis installation
1676            but no existing database. The database will be created
1677            automatically by the test cases
1678    
1679            * test/README: Add note about skipped tests and the requirements
1680            of the postgis tests.
1681    
1682            * Thuban/Model/postgisdb.py: New. Basic postgis database support.
1683    
1684            * test/test_postgis_db.py: New. Test cases for the postgis
1685            support.
1686    
1687            * Thuban/Model/wellknowntext.py: New. Parser for well-known-text
1688            format
1689    
1690            * test/test_wellknowntext.py: New. Test cases for the
1691            wellknowntext parser
1692    
1693            * test/postgissupport.py: New. Support module for tests involving
1694            a postgis database.
1695    
1696            * test/support.py (execute_as_testsuite): Shut down the postmaster
1697            if it's still running after the tests
1698    
1699            * Thuban/Model/data.py (RAW_WKT): New constant for raw data in
1700            well known text format
1701    
1702    2003-08-19  Jan-Oliver Wagner <[email protected]>
1703    
1704            * Examples/simple_extensions/hello_world.py: New. Raises a Hello World
1705            message dialog.
1706    
1707    2003-08-18  Bernhard Herzog  <[email protected]>
1708    
1709            * test/support.py (ThubanTestResult.printErrors): Indent the
1710            reason for the skips in the output to make it a bit more readable.
1711            (execute_as_testsuite): New helper function to run a test suite
1712            and print some more information.
1713            (run_tests): Use execute_as_testsuite to run the tests
1714    
1715            * test/runtests.py (main): Use execute_as_testsuite to run the
1716            tests
1717    
1718    2003-08-18  Bernhard Herzog  <[email protected]>
1719    
1720            Fix some bugs in Thuban and the test suite that were uncovered by
1721            changes introduced in Python 2.3:
1722    
1723            * Thuban/Model/table.py (DBFTable.__init__): Make sure the
1724            filename is an absolute name
1725    
1726            * Thuban/Model/layer.py (RasterLayer.__init__): Make sure the
1727            filename is an absolute name
1728    
1729            * test/test_save.py (SaveSessionTest.testRasterLayer): Use a
1730            unique filename to save to and use the correct relative filename
1731            in the expected output.
1732            (SaveSessionTest.test_dbf_table): Use the correct relative
1733            filename in the expected output.
1734    
1735            * test/test_layer.py (TestLayer.test_raster_layer): Update the
1736            test to check whether the filename is absolute.
1737    
1738    2003-08-18  Jan-Oliver Wagner <[email protected]>
1739    
1740            * Thuban/UI/about.py (About.__init__): Added Silke Reimer.
1741    
1742    2003-08-15  Bernhard Herzog  <[email protected]>
1743    
1744            Change the way shapes are returned by a shape store. The
1745            ShapesInRegion method returns an iterator over actual shape
1746            objects instead of a list of shape ids.
1747    
1748            * Thuban/Model/data.py (ShapefileShape.ShapeID): New. Return shape
1749            id.
1750            (ShapefileStore.ShapesInRegion): Return an iterator over the
1751            shapes which yields shape objects instead of returning a list of
1752            shape ids
1753            (ShapefileStore.AllShapes): New. Return an iterator over all
1754            shapes in the shape store
1755            (DerivedShapeStore.AllShapes): New. Like in ShapefileStore
1756    
1757            * Thuban/Model/layer.py (Layer.ShapesInRegion): Update
1758            doc-string.
1759    
1760            * Thuban/UI/baserenderer.py
1761            (BaseRenderer.layer_ids, BaseRenderer.layer_shapes): Rename to
1762            layer_shapes and make it return an iterator containg shapes
1763            instead of a list of ids.
1764            (BaseRenderer.draw_shape_layer): Update doc-string; Adapt to
1765            layer_shapes() change
1766    
1767            * Thuban/UI/renderer.py (ScreenRenderer.layer_ids)
1768            (ScreenRenderer.layer_shapes): Rename as in BaseRenderer
1769    
1770            * Thuban/UI/viewport.py (ViewPort._find_shape_in_layer): Adapt to
1771            changes in the ShapesInRegion return value.
1772            (ViewPort._get_hit_tester): Remove commented out code
1773    
1774            * test/mockgeo.py (SimpleShapeStore.ShapesInRegion): Adapt to the
1775            new return value.
1776            (SimpleShapeStore.AllShapes): New. Implement this method too.
1777    
1778            * test/test_layer.py (TestLayer.test_arc_layer)
1779            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
1780            (TestLayer.test_point_layer_with_projection)
1781            (TestLayer.test_derived_store): Adapt to changes in the
1782            ShapesInRegion return value.
1783    
1784            * test/test_shapefilestore.py
1785            (TestShapefileStoreArc.test_shapes_in_region)
1786            (TestShapefileStorePolygon.test_shapes_in_region)
1787            (TestShapefileStorePoint.test_shapes_in_region): Adapt to changes
1788            in the ShapesInRegion return value.
1789            (TestShapefileStorePoint.test_all_shapes)
1790            (TestShapefileStoreArc.test_shape_shapeid): New tests for the new
1791            methods
1792    
1793            * test/test_derivedshapestore.py
1794            (TestDerivedShapeStore.test_shapes_in_region): Adapt to changes in
1795            the ShapesInRegion return value.
1796            (TestDerivedShapeStore.test_all_shapes)
1797            (TestDerivedShapeStore.test_shape_shapeid): New tests for the new
1798            methods
1799    
1800    2003-08-15  Bernhard Herzog  <[email protected]>
1801    
1802            Make the renderers deal correctly with raw vs. python level
1803            representation of shape geometries
1804    
1805            * Thuban/UI/baserenderer.py (BaseRenderer.low_level_renderer):
1806            Return a flag useraw in addition to the callable and the parameter
1807            to indicate whether the callable can deal with the raw shape data
1808            or uses the higher level python lists of coordinates. The callable
1809            now should accept either the raw data or the return value of the
1810            shape's Points() method.
1811            (BaseRenderer.draw_shape_layer): Adapt to the low_level_renderer
1812            change
1813            (BaseRenderer.projected_points): Instead of the shape id use the
1814            points list as parameter.
1815            (BaseRenderer.draw_polygon_shape, BaseRenderer.draw_arc_shape)
1816            (BaseRenderer.draw_point_shape): Adapt to projected_points()
1817            change and accept the points list as parameter instead of the
1818            shape id.
1819    
1820            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Return
1821            the useraw flag as required by the BaseRenderer
1822            (ScreenRenderer.draw_shape_layer): Adapt to low-level renderer
1823            changes.
1824    
1825            * test/test_baserenderer.py
1826            (TestBaseRenderer.test_point_with_classification): New test for
1827            rendering a map with classifications.
1828    
1829    2003-08-15  Bernhard Herzog  <[email protected]>
1830    
1831            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
1832            (ViewPort._find_shape_in_layer, ViewPort._find_shape_in_layer)
1833            (ViewPort._get_hit_tester, ViewPort.projected_points)
1834            (ViewPort._hit_point, ViewPort._hit_arc, ViewPort._hit_polygon)
1835            (ViewPort._find_label_at): Split the find_shape_at method into
1836            several new methods and use the functions in the hit-test module.
1837    
1838            * Thuban/UI/hittest.py: New module with Python-level hit-testing
1839            functions
1840    
1841            * test/test_hittest.py: New. Test for the new hittest module
1842    
1843    2003-08-15  Bernhard Herzog  <[email protected]>
1844    
1845            * Thuban/Model/layer.py (Layer.ShapesInRegion): Apply the layer
1846            projection to all corners of the bounding box to get a better
1847            approximation of the projected bounding box
1848    
1849            * test/test_layer.py (TestLayer.test_point_layer_with_projection):
1850            New. Test coordinate handling of a layer with a projection.
1851            Catches the bug fixed in Layer.ShapesInRegion
1852    
1853    2003-08-15  Bernhard Herzog  <[email protected]>
1854    
1855            Move some of the mock objects in test_baserenderer into their own
1856            module so they can easily be used from other tests
1857    
1858            * test/mockgeo.py: New test helper module with some mock objects
1859            for geometry related things like shapes, shapestores and
1860            projections.
1861    
1862            * test/test_mockgeo.py: New. Tests for the new helper module
1863    
1864            * test/test_baserenderer.py: Some of the mock-objects are in
1865            mockgeo now.
1866    
1867    2003-08-12  Jan-Oliver Wagner <[email protected]>
1868    
1869            * Thuban/UI/about.py (About.__init__): Added Bj�rn Broscheit.
1870    
1871    2003-08-12  Bernhard Herzog  <[email protected]>
1872    
1873            * po/de.po: New. German translations by Bjoern Broscheit
1874    
1875    2003-08-12  Bernhard Herzog  <[email protected]>
1876    
1877            * Thuban/UI/projdialog.py (UnknownProjPanel._DoLayout): Translated
1878            strings have to be one string literal.
1879    
1880    2003-08-11  Bernhard Herzog  <[email protected]>
1881    
1882            * test/support.py (FloatComparisonMixin.assertPointListEquals):
1883            New. This method was used in various derived classes, but it's
1884            better to have it here.
1885    
1886            * test/test_shapefilestore.py
1887            (ShapefileStoreTests.assertPointListEquals): Removed. It's now in
1888            FloatComparisonMixin
1889    
1890            * test/test_layer.py (TestLayer.assertPointListEquals): Removed.
1891            It's now in FloatComparisonMixin
1892    
1893            * test/test_derivedshapestore.py
1894            (TestDerivedShapeStore.assertPointListEquals): Removed. It's now
1895            in FloatComparisonMixin
1896    
1897    2003-08-11  Bernhard Herzog  <[email protected]>
1898    
1899            * Thuban/UI/join.py (JoinDialog.OnJoin): Add missing space to
1900            error message
1901    
1902    2003-08-08  Jan-Oliver Wagner <[email protected]>
1903    
1904            * Doc/manual/thuban-manual.xml: Now use authorgroup. Added revhistory
1905            with version number.
1906            Changed title to reflect version number of Thuban.
1907    
1908    2003-08-08  Jan-Oliver Wagner <[email protected]>
1909    
1910            * Thuban/UI/about.py (About.__init__): Reworked the hall of fame. Now
1911            the list corresponds to the "About" web page.
1912    
1913    2003-08-08  Bernhard Herzog  <[email protected]>
1914    
1915            * Thuban/UI/projdialog.py (UTMProposeZoneDialog.dialogLayout):
1916            Make sure translated strings are recognized as one string literal.
1917    
1918            * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog.dialogLayout):
1919            Make sure translated strings are recognized as one string literal.
1920    
1921            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Make sure
1922            translated strings are recognized as one string literal.
1923    
1924            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
1925            sure translated strings are recognized as one string literal.
1926    
1927    2003-08-07  Bernhard Herzog  <[email protected]>
1928    
1929            * Thuban/Model/data.py (DerivedShapeStore.RawShapeFormat): New.
1930            Simply delegates to the original shapestore.
1931    
1932            * test/test_derivedshapestore.py
1933            (TestDerivedShapeStore.test_raw_format): New. Test case for
1934            DerivedShapeStore.RawShapeFormat
1935    
1936    2003-08-07  Bernhard Herzog  <[email protected]>
1937    
1938            Add raw data interface to shape objects.
1939    
1940            * Thuban/Model/data.py (ShapefileShape, Shape): Rname the shape
1941            class to ShapefileShape which now holds shapefile specific
1942            information.
1943            (ShapefileShape.compute_bbox): Simplified to not cache any
1944            information. The way this method is used that shouldn't matter
1945            performance wise.
1946            (ShapefileShape.RawData): New. Return the shapeid which is the raw
1947            data format for shapes from shapefiles.
1948            (ShapefileStore.RawShapeFormat): New. Return the raw datatype used
1949            in the shape objects returned by a shapestore. For a
1950            ShapefileStore this is always RAW_SHAPEFILE.
1951            (RAW_PYTHON, RAW_SHAPEFILE): Constants for the RawShapeFormat
1952            method.
1953    
1954            * test/test_shapefilestore.py
1955            (TestShapefileStore.test_raw_format): New test to test the raw
1956            format feature of shapes.
1957    
1958            * Thuban/Model/layer.py: Remove the unused import of Shape from
1959            data. It was only there for interface compatibility but it's not
1960            used inside of Thuban and the generic Shape class has gone away.
1961    
1962            * Thuban/UI/renderer.py (MapRenderer.low_level_renderer): Check
1963            the raw data format and only use an optimized version of its a
1964            shapefile.
1965    
1966    2003-08-07  Bernhard Herzog  <[email protected]>
1967    
1968            * test/test_baserenderer.py (SimpleShape): Shape class for the
1969            tests.
1970            (SimpleShapeStore.Shape): Use SimpleShape instead of
1971            Thuban.Model.data.Shape to make the tests independed of the coming
1972            changes.
1973    
1974    2003-08-07  Bernhard Herzog  <[email protected]>
1975    
1976            * test/support.py (SkipTest, ThubanTestResult, ThubanTestRunner)
1977            (ThubanTestProgram): New classes that extend the respective
1978            classes from unittest. These new version support skipping tests
1979            under certain expected conditions. In the Thuban test suite we
1980            uses this for tests that require the optional gdal support.
1981            (run_tests): Use ThubanTestProgram instead of the unittest.main()
1982    
1983            * test/runtests.py (main): Use the new ThubanTestRunner instead of
1984            the normal one from unittest
1985    
1986            * test/test_layer.py (TestLayer.test_raster_layer): If this test
1987            is not run because gdal support isn't available report this to the
1988            runner.
1989    
1990            * test/test_baserenderer.py
1991            (TestBaseRenderer.test_raster_no_projection): Do not run this test
1992            if gdal support isn't available and report this to the runner.
1993    
1994    2003-08-06  Bernhard Herzog  <[email protected]>
1995    
1996            Rearrange the renderers a bit, partly in preparation for changes
1997            required for the postgis merge, partly to make it more testable.
1998            Also make the representation of coordinates in Shapes more
1999            consistent.
2000    
2001            * Thuban/UI/renderer.py (MapRenderer): Most of the code/methods in
2002            this class is now in BaseRenderer. This class is now practically
2003            only a specialization of BaseRenderer for rendering to an actual
2004            wx DC.
2005            (ScreenRenderer.draw_shape_layer): Use self.low_level_renderer()
2006            to get the shapetype specific rendering functions.
2007    
2008            * Thuban/UI/baserenderer.py: New file with the basic rendering
2009            logic. The code in this file is completely independend of wx.
2010            (BaseRenderer): Class with the basic rendering logic
2011    
2012            * test/test_baserenderer.py: New. Test cases for BaseRenderer
2013    
2014            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
2015            error_on_redraw to guard agains endless loops and stack overflows
2016            when there's a bug in the rendering code that raises exceptions.
2017            (MapCanvas.OnIdle, MapCanvas._do_redraw): Split the actual
2018            rendering into a separate method _do_redraw so that error handling
2019            is a bit easier. When an exception occurs, set error_on_redraw to
2020            true. When it's true on entry to OnIdle do nothing and return
2021            immediately.
2022    
2023            * Thuban/Model/data.py (ShapefileStore.Shape): For consistency, a
2024            Shape object will always have the coordinates as a list of list of
2025            coordinate pairs (tuples).
2026            (Shape.compute_bbox): Adapt to new representation.
2027    
2028            * Thuban/UI/viewport.py (ViewPort.find_shape_at)
2029            (ViewPort.LabelShapeAt): Adapt to new coordinate representation in
2030            Shape objects.
2031    
2032            * test/test_shapefilestore.py
2033            (ShapefileStoreTests.assertFloatTuplesEqual)
2034            (ShapefileStoreTests.assertPointListEquals): Rename to
2035            assertPointListEquals and change purpose to checking equality of
2036            the lists returned by Shape.Points().
2037            (TestShapefileStoreArc.test_shape)
2038            (TestShapefileStorePolygon.test_shape)
2039            (TestShapefileStorePoint.test_shape): Use the new
2040            assertPointListEquals instead of assertFloatTuplesEqual
2041    
2042            * test/test_layer.py (TestLayer.assertFloatTuplesEqual)
2043            (TestLayer.assertPointListEquals): Rename to assertPointListEquals
2044            and change purpose to checking equality of the lists returned by
2045            Shape.Points().
2046            (TestLayer.test_arc_layer, TestLayer.test_arc_layer)
2047            (TestLayer.test_polygon_layer, TestLayer.test_point_layer)
2048            (TestLayer.test_derived_store): Use the new assertPointListEquals
2049            instead of assertFloatTuplesEqual
2050    
2051            * test/test_derivedshapestore.py
2052            (TestDerivedShapeStore.assertFloatTuplesEqual)
2053            (TestDerivedShapeStore.assertPointListEquals): Rename to
2054            assertPointListEquals and change purpose to checking equality of
2055            the lists returned by Shape.Points().
2056            (TestDerivedShapeStore.test_shape): Use the new
2057            assertPointListEquals instead of assertFloatTuplesEqual
2058    
2059    2003-08-06  Jan-Oliver Wagner <[email protected]>
2060    
2061            * Thuban/UI/projdialog.py (UTMPanel._OnPropose): Added test for
2062            a bounding box. A dialog is raised in case, no bounding box
2063            is found. This fixes bug #2043:
2064            https://intevation.de/rt/webrt?serial_num=2043
2065    
2066    2003-08-05  Bernhard Herzog  <[email protected]>
2067    
2068            * Thuban/Model/color.py (Color.__repr__): Make the repr of a color
2069            object look like a Color instantiation. Formerly it looked like a
2070            tuple.
2071    
2072            * test/test_color.py (TestColor.test_repr)
2073            (TestColor.test_equality, TestColor.test_inequality): New. test
2074            some more apects of the Color class
2075            (TestTransparent.test_repr, TestTransparent.test_hex)
2076            (TestTransparent.test_equality): New. Test cases for the
2077            Transparent object.
2078    
2079    2003-08-04  Jan-Oliver Wagner <[email protected]>
2080    
2081            * Doc/manual/thuban-manual.xml: a number of small improvements.
2082            The resulting file is the version submitted for GREAT-ER II.
2083    
2084    2003-08-01  Bernhard Herzog  <[email protected]>
2085    
2086            * Thuban/UI/resource.py, Thuban/UI/projdialog.py,
2087            Thuban/UI/join.py, Thuban/UI/classgen.py, Thuban/UI/about.py,
2088            Thuban/Model/resource.py: Insert cvs keywords and doc-strings.
2089    
2090            * Thuban/UI/common.py: Insert cvs keywords and doc-strings.
2091            (Color2wxColour, wxColour2Color, ThubanBeginBusyCursor)
2092            (ThubanEndBusyCursor): Add doc-strings
2093    
2094    2003-08-01  Bernhard Herzog  <[email protected]>
2095    
2096            First step towards PostGIS integration. More abstraction by movin
2097            more code from the layer to the shapestore. More methods of the
2098            layer are now simply delegated to the equivalent method of the
2099            shapestore. The SHAPETYPE_* constants are now in data not in
2100            layer.
2101    
2102            * Thuban/Model/data.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2103            (SHAPETYPE_POINT, Shape): Move these constants and classes from
2104            layer.py to data.py
2105            (ShapefileStore.__init__): More Initialization for the new methods
2106            and functionality.
2107            (ShapefileStore.ShapeType, ShapefileStore.NumShapes)
2108            (ShapefileStore.BoundingBox, ShapefileStore.ShapesInRegion)
2109            (ShapefileStore.Shape): New methods that were formerly implemented
2110            in the layer.
2111            (DerivedShapeStore.Shape, DerivedShapeStore.ShapesInRegion)
2112            (DerivedShapeStore.ShapeType, DerivedShapeStore.NumShapes)
2113            (DerivedShapeStore.BoundingBox): New. DerivedShapeStore
2114            equivalents of the new shape methods. These versions are simply
2115            delegated to the original shapstore.
2116    
2117            * Thuban/Model/layer.py (SHAPETYPE_POLYGON, SHAPETYPE_ARC)
2118            (SHAPETYPE_POINT, Shape): Removed. They're now in data.py
2119            (Layer.SetShapeStore): Removed the initializatin of instance
2120            variables that were needed for the stuff that's now in
2121            ShapefileStore
2122            (Layer.BoundingBox, Layer.NumShapes, Layer.ShapeType)
2123            (Layer.Shape, Layer.ShapesInRegion): Simply delegate to the
2124            shapestore.
2125    
2126            * Thuban/UI/classifier.py, Thuban/UI/renderer.py,
2127            Thuban/UI/viewport.py: Import the SHAPETYPE_* constants from data
2128            instead of layer.
2129    
2130            * test/test_shapefilestore.py: New. Tests for ShapefileStore.
2131    
2132            * test/test_derivedshapestore.py: New. Tests for DerivedShapeStore.
2133    
2134            * test/test_layer.py: Import the SHAPETYPE_* constants from data
2135            instead of layer.
2136            (TestLayer.test_derived_store): Remove the test for the exception
2137            when instantiating the DerivedShapeStore with an incompatible
2138            table which is now in test_derivedshapestore.py. Add some more
2139            tests of the layer methods to determine whether they work for a
2140            DerivedShapeStore as well.
2141    
2142    2003-07-31  Jonathan Coles   <[email protected]>
2143    
2144            * Doc/manual/thuban-manual.xml: Fix the list of required packages
2145            by just listing the name and where they can be found.
2146    
2147    2003-07-31  Frank Koormann   <[email protected]>
2148    
2149            * Doc/manual/thuban-manual.xml:
2150            Changed the screenshot elements to figure.
2151            Changed some variablelist elements to itemizedlist.
2152            Added section on GDAL formats.
2153    
2154    2003-07-31  Jonathan Coles   <[email protected]>
2155    
2156            * Doc/manual/thuban-manual.xml: Added a few sentences about
2157            the Fix Border Color option when generating classes.
2158    
2159    2003-07-30  Jonathan Coles   <[email protected]>
2160    
2161            * Thuban/Model/classgen.py: Add docstrings. Rename specific
2162            Ramp instances to use lower_case_style.
2163    
2164            * Thuban/UI/classgen.py: Use renamed Ramp instances.
2165            
2166            * Thuban/UI/classifier.py: Add docstrings.
2167    
2168            * Thuban/UI/dock.py: Add docstrings.
2169    
2170            * test/test_classgen.py: Use renamed Ramp instances.
2171    
2172    2003-07-30  Bernhard Herzog  <[email protected]>
2173    
2174            * Thuban/Lib/connector.py (QueueingPublisher): Removed. This class
2175            was never used in Thuban.
2176    
2177    2003-07-30  Bernhard Herzog  <[email protected]>
2178    
2179            * Thuban/UI/join.py (JoinDialog.__init__): Use the table's Title()
2180            method directly instead of going through the transient_table
2181            method. This faster because transient_table may force the copy of
2182            a DBF file into the transient database and setting a table's title
2183            doesnm't affect the title of the associated transient table, so
2184            this fixes RT #2042
2185    
2186            * Thuban/UI/main.py (__version__): Don't import the already
2187            removed show_exception_dialog.
2188    
2189    2003-07-29  Jonathan Coles   <[email protected]>
2190    
2191            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2192            Put back this method and remove the equivalent function since we
2193            are setting the exception hook from within this class (OnInit).
2194    
2195    2003-07-29  Jonathan Coles   <[email protected]>
2196    
2197            * Doc/manual/images/5_2_custom_ramp.png,
2198            Doc/manual/images/5_2_quantiles.png,
2199            Doc/manual/images/5_2_uniform_dist.png,
2200            Doc/manual/images/5_2_unique_values.png,
2201            Doc/manual/images/8_int_error.png: New screen shots.
2202    
2203            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
2204            some points, and added more screen shots.
2205    
2206    2003-07-29  Bernhard Herzog  <[email protected]>
2207    
2208            * Thuban/Model/data.py: Remove the now unused import of warnings
2209    
2210    2003-07-29  Bernhard Herzog  <[email protected]>
2211    
2212            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
2213            deprecated since before the 0.8 release and isn't used in Thuban
2214            itself anymore.
2215    
2216            * Thuban/Model/transientdb.py: Remove some unnecessary imports
2217    
2218    2003-07-29  Jonathan Coles   <[email protected]>
2219    
2220            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
2221            python exception hook here so that we are sure to catch any
2222            Thuban exception that happen during initialization.
2223    
2224            * Thuban/UI/main.py (main): Don't set the exception hook here,
2225            it will get set in ThubanApplication.OnInit.
2226    
2227    2003-07-29  Jonathan Coles   <[email protected]>
2228                                                                                
2229            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2230            Removed and called it show_exception_dialog() so that the exception
2231            handler can be set before the class is created.
2232                                                                                
2233            * Thuban/UI/main.py (main): Install the exception handler before
2234            a ThubanApplication is created.
2235                                                                                    
2236    2003-07-29  Bernhard Herzog  <[email protected]>
2237    
2238            * po/it.po: New. Italian translation by Maurizio Napolitano
2239    
2240            * po/ru.po: New. Russian translation by Alex Shevlakov
2241    
2242    2003-07-29  Frank Koormann   <[email protected]>
2243    
2244            * Doc/manual/thuban-manual.xml: Extended section on supported
2245            projections.
2246            
2247    2003-07-29  Frank Koormann   <[email protected]>
2248    
2249            * Doc/manual/thuban-manual.xml: gaspell-checked.
2250    
2251    2003-07-29  Jonathan Coles   <[email protected]>
2252    
2253            * Doc/manual/images/3_5_legend.png: Added border to improve look
2254            on white background.
2255    
2256    2003-07-29  Jonathan Coles   <[email protected]>
2257    
2258            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
2259            descriptions for the legend toolbar.
2260    
2261            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
2262            cursor from dialog box.
2263    
2264    2003-07-28  Jonathan Coles   <[email protected]>
2265    
2266            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
2267    
2268            * Doc/manual/images/2_4_session_tree.png,
2269            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
2270            Doc/manual/images/4_2_layer_properties.png,
2271            Doc/manual/images/4_2_raster_layer_properties.png,
2272            Doc/manual/images/5_3_genclass.png,
2273            Doc/manual/images/5_classification.png,
2274            Doc/manual/images/6_projection.png,
2275            Doc/manual/images/7_1_table_view.png,
2276            Doc/manual/images/7_2_5_join.png: New screenshots.
2277    
2278    2003-07-24  Jonathan Coles   <[email protected]>
2279    
2280            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
2281    
2282    2003-07-24  Jonathan Coles   <[email protected]>
2283    
2284            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
2285            chapter on Layer Management.
2286    
2287            * Doc/manual/Makefile: New. Makefile to generate all formats for the
2288            manual and images.
2289    
2290    2003-07-24  Bernhard Herzog  <[email protected]>
2291    
2292            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
2293            it annoys lintian which warns about these files not being
2294            executable. The #! isn't necessary here since if you absolutely
2295            must execute them you can always say "python <filename>".
2296    
2297            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
2298            superfluous code to set brush and pen for point shapes
2299    
2300            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
2301            belong in viewport anyway
2302    
2303    2003-07-24  Frank Koormann   <[email protected]>
2304    
2305            * Doc/manual/thuban-manual.xml: Added section on table management.
2306    
2307    2003-07-24  Bernhard Herzog  <[email protected]>
2308    
2309            * test/runtests.py (main): Recognize the long "verbose" option
2310            correctly.
2311    
2312    2003-07-22  Jonathan Coles   <[email protected]>
2313    
2314            * Doc/manual/thuban-manual.xml: Continue to write first revision
2315            of the manual.
2316    
2317            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
2318            with Begin/EndDrawing() calls to ensure we aren't doing to
2319            many updates to the dc during rendering.
2320            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
2321            a pen and brush argument so they need to be passed to the function.
2322    
2323            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
2324            Calculates the minimum and maximum scale values. Factored out
2325            of set_view_transform so that it could be used to zoom all the
2326            way into a single point.
2327            (ViewPort.set_view_transform): Call calc_min_max_scales().
2328            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
2329            if only a single point is selected.
2330    
2331            * Doc/manual/images/1_2_legend_close.png,
2332            Doc/manual/images/1_2_legend_dock.png,
2333            Doc/manual/images/1_2_mainwindow.png,
2334            Doc/manual/images/1_2_mainwindow.ps,
2335            Doc/manual/images/1_2_mainwindow.sk,
2336            Doc/manual/images/3_2_fullextent.png,
2337            Doc/manual/images/3_2_fulllayerextent.png,
2338            Doc/manual/images/3_2_fullshapeextent.png,
2339            Doc/manual/images/3_2_pan.png,
2340            Doc/manual/images/3_2_zoomin.png,
2341            Doc/manual/images/3_2_zoomout.png,
2342            Doc/manual/images/3_3_identify.png,
2343            Doc/manual/images/3_3_label.png,
2344            Doc/manual/images/3_5_invisible.png,
2345            Doc/manual/images/3_5_movedown.png,
2346            Doc/manual/images/3_5_moveup.png,
2347            Doc/manual/images/3_5_props.png,
2348            Doc/manual/images/3_5_tobottom.png,
2349            Doc/manual/images/3_5_totop.png,
2350            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
2351    
2352    2003-07-18  Bernhard Herzog  <[email protected]>
2353    
2354            * Thuban/UI/messages.py (MAP_REPLACED): New message.
2355    
2356            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
2357            after the new map has been assigned
2358    
2359            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
2360            Delegate MAP_REPLACED to the canvas too
2361            (MainWindow.prepare_new_session): Removed. Thanks to the new
2362            MAP_REPLACED message it's no longer needed
2363            (MainWindow.OpenSession, MainWindow.NewSession):
2364            prepare_new_session has been removed.
2365    
2366            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
2367            MAP_REPLACED so that we can close the dialog if a new map is set.
2368            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
2369            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
2370            dialog
2371    
2372            * test/test_viewport.py (SimpleViewPortTest)
2373            (SimpleViewPortTest.test_default_size): Add doc-strings
2374            (ViewPortTest.setUp): Bind map to self.map so we can use it in
2375            tests. Subscribe to MAP_REPLACED messages too.
2376            (ViewPortTest.tearDown): No need to explicitly unsubscribe
2377            (ViewPortTest.test_set_map): New test for the SetMap method.
2378    
2379    2003-07-18  Bernhard Herzog  <[email protected]>
2380    
2381            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
2382            Move this test from ViewPortTest.setUp to this new separate test
2383            case. setUp is not the place for the actual tests.
2384            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
2385            more of the test from setUp to the new test test_inital_settings.
2386            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
2387            (ViewPortTest.test_proj_conv): Split test_proj_conv into
2388            test_win_to_proj and test_proj_to_win and make the tests easier to
2389            understand
2390            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
2391            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
2392            (ViewPortTest.test_unprojected_rect_around_point)
2393            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
2394            Reformat to increase readability.
2395    
2396    2003-07-18  Bernhard Herzog  <[email protected]>
2397    
2398            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
2399    
2400    2003-07-18  Bernhard Herzog  <[email protected]>
2401    
2402            * test/runtests.py: The test suite can now be run without an X
2403            connection. To make sure this remains true, remove the DISPLAY
2404            environment variable so that an error occurs if the wxGTK is
2405            imported accidentally
2406    
2407    2003-07-18  Bernhard Herzog  <[email protected]>
2408    
2409            * Thuban/UI/viewport.py: Remove unused imports
2410    
2411            * Thuban/UI/view.py: Remove unused imports
2412    
2413    2003-07-18  Bernhard Herzog  <[email protected]>
2414    
2415            * test/test_export.py Remove unused imports. The OutputTransform
2416            function is now in viewport.py and is called output_transform
2417            (TestScalebar.test_output_transform)
2418            (TestScalebar.test_OutputTransform): Renamed to
2419            test_output_transform and updated to use output_transform instead
2420            of OutputTransform
2421    
2422            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
2423            renamed.
2424            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
2425            renamed to output_transform
2426    
2427            * Thuban/UI/viewport.py (OutputTransform, output_transform):
2428            Rename to output_transform
2429    
2430    2003-07-18  Bernhard Herzog  <[email protected]>
2431    
2432            * Thuban/Model/layer.py (Layer.__init__): Rename
2433            classificationField to classificatin_column and init it here so
2434            that it can be used in SetClassificationColumn
2435            (Layer.GetClassificationColumn, Layer.GetClassificationField):
2436            Rename to GetClassificationColumn.
2437            (Layer.SetClassificationColumn, Layer.SetClassificationField):
2438            Rename to SetClassificationColumn and issue a LAYER_CHANGED
2439            message if the column changes.
2440            (Layer._classification_changed, Layer.ClassChanged): Rename to
2441            _classification_changed. Update the callers.
2442            (Layer.SetShapeStore): Further field->column renames.
2443    
2444            * Thuban/Model/load.py (SessionLoader.start_classification)
2445            (SessionLoader.start_clpoint): Updates because of
2446            field->column method name changes in the Layer class
2447    
2448            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
2449            because of field->column method name changes in the Layer class
2450    
2451            * Thuban/UI/classifier.py (Classifier.__init__)
2452            (Classifier._OnTry, Classifier._OnRevert): Updates because of
2453            field->column method name changes in the Layer class
2454    
2455            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
2456            because of field->column method name changes in the Layer class
2457    
2458            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
2459            of field->column method name changes in the Layer class
2460    
2461            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
2462            (SaveSessionTest.testClassifiedLayer): Update because of
2463            field->column method name changes in the Layer class
2464    
2465            * test/test_layer.py (SetShapeStoreTests.setUp)
2466            (SetShapeStoreTests.test_sanity): Update because of field->column
2467            method name changes in the Layer class
2468            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
2469            (TestLayerModification.test_sanity)
2470            (TestLayerModification.test_initial_settings): remove unsued code
2471            and rename to test_sanity.
2472            (TestLayerModification.test_set_classification): New test for
2473            SetClassification and SetClassificationField.
2474    
2475    2003-07-18  Bernhard Herzog  <[email protected]>
2476    
2477            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
2478            the non-fixed values as well. The old test would have accepted a
2479            fixed ramp that only returnes the fixed properties
2480    
2481    2003-07-17  Jonathan Coles   <[email protected]>
2482    
2483            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
2484            shots for the manual. The XCF file is the source image and
2485            has additional layers to support changes.
2486    
2487            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
2488    
2489            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
2490            Return both the new class and the field name.
2491    
2492            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
2493            fit the map to the window as this changes any zoom level that
2494            the user may have set.
2495    
2496    2003-07-16  Jonathan Coles   <[email protected]>
2497    
2498            * Thuban/Model/classgen.py (generate_singletons,
2499            generate_uniform_distribution, generate_quantiles): Remove
2500            fixes parameter, but maintain the same functionality by having
2501            the calling function pass a FixedRamp object for the ramp.
2502            (FixedRamp): New. Adapts a ramp to have fixed property values.
2503    
2504            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
2505            (Classification): Inherit from Publisher.
2506            (Classification.__init__): Remove the layer parameter.
2507            Classifications no longer need to have a parent layer.
2508            (Classification.GetField, Classification.GetFieldType,
2509            Classification.SetFieldInfo): Removed. The field name is stored
2510            in the layer, and the type can be retreived by calling
2511            Layer.GetFieldType().
2512            (Classification._set_layer, Classification.GetLayer): Removed.
2513            Classifications no longer have a parent layer.
2514    
2515            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
2516            classification.
2517            (Layer.SetShapeStore): Reset the classification first while
2518            we still have the old shape store to work with.
2519            (Layer.GetClassificationField, Layer.SetClassificationField):
2520            New. Method for getting/setting the field to classify on.
2521            (Layer.SetClassification): Simplified now that the layer
2522            simply has to hold a reference to the classification and not
2523            tell the classification who owns it.
2524            Fixes RTbug #2023.
2525    
2526            * Thuban/Model/load.py (SessionLoader.start_classification):
2527            Set the field name on the layer, not the classification.
2528    
2529            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
2530            classification is modified.
2531    
2532            * Thuban/Model/save.py (SessionSaver.write_classification):
2533            Get the field name and type from the layer.
2534    
2535            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
2536            parameter records to rows and add docstring. Fixes RTbug #1997.
2537    
2538            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
2539            ramp when we need to fix certain values of a ramp rather than
2540            using the old fixes parameter. Fixes RTbug #2024.
2541    
2542            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
2543            parameter.
2544            (ClassTable.Reset): Add fieldType parameter and use it, rather
2545            than asking the classification.
2546            (Classifier.__init__): Remember the original class's field
2547            and ask the layer for the field type, rather than the classification.
2548            (Classifier.__SetGridTable): Retrieve the field and field type
2549            for the table because they are not in the classification.
2550            (Classifier._OnTry, Classifier._OnRevert): Set the classification
2551            field on the layer in addition to the classification itself.
2552    
2553            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
2554            classification field from layer.
2555    
2556            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
2557            classification field from layer. Split up tests and remove
2558            *-imports. Fixes RTbug #1992.
2559    
2560            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
2561    
2562            * test/test_classification.py
2563            (TestClassification.test_classification): Remove tests for methods
2564            that no longer exist.
2565    
2566            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
2567            __init__ no longer has a field parameter, use SetClassificationField.
2568            (SetShapeStoreTests.test_sanity): Use layer object to get class
2569            field info.
2570    
2571            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
2572            SetClassificationField on layer to set class field info.
2573    
2574            * test/test_viewport.py: Renamed from test/test_view.py.
2575    
2576    2003-07-16  Jan-Oliver Wagner <[email protected]>
2577    
2578            * Doc/manual/thuban-manual.xml: Added authors and an initial
2579            coarse structure.
2580    
2581    2003-07-15  Bernhard Herzog  <[email protected]>
2582    
2583            * test/support.py (FloatComparisonMixin): This is a mix-in class
2584            and therefore should not be derived from any other class.
2585    
2586            * test/test_range.py (RangeTest): FloatComparisonMixin is a
2587            mix-in, so derive from TestCase as well.
2588    
2589    2003-07-15  Bernhard Herzog  <[email protected]>
2590    
2591            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
2592            draw_func handling a bit to remove one layer of indirection. This
2593            makes the renderer about 10% faster in the non-classifying case
2594            and the code a bit cleaner
2595            (MapRenderer.draw_point_shape): Add the pen and brush parameters
2596            and set them in the dc. Now the draw_point_shape method and
2597            wxproj's draw_polygon_shape function have basically the same
2598            signature so that both can be directly used as draw_func
2599    
2600    2003-07-15  Bernhard Herzog  <[email protected]>
2601    
2602            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
2603            string values (in addition to the labels) as UTF 8
2604    
2605            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
2606            values if the field type is string
2607    
2608            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
2609            saving a session with non-ascii string classification values.
2610    
2611            * test/test_load.py (TestClassification.file_contents)
2612            (TestClassification.test): Check for non-ascii values in string
2613            classifications
2614    
2615    2003-07-14  Jonathan Coles   <[email protected]>
2616    
2617            * test/test_view.py: New. Tests for ViewPort.
2618    
2619    2003-07-14  Frank Koormann   <[email protected]>
2620    
2621            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
2622            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
2623    
2624            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
2625            unicode strings from session file: session title, map title and
2626            projection name.
2627            
2628    2003-07-10  Jonathan Coles   <[email protected]>
2629    
2630            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
2631            drag_stop, not drag_move when the mouse is released.
2632    
2633    2003-07-10  Jonathan Coles   <[email protected]>
2634    
2635            The most important part of this is the seperation of view.py into
2636            two pieces. viewport.py now has a class called ViewPort which
2637            contains all the non-wx parts of view.py and can therefore be
2638            tested. view.py contains only the wx-specific parts and is fairly
2639            simple.
2640    
2641            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
2642            RTTbug #1992.
2643            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
2644            RTTbug #1992.
2645    
2646            * Thuban/Model/classgen.py (generate_singletons,
2647            generate_uniform_distribution, generate_quantiles):
2648            Added 'fixes' parameter so that property attributes can
2649            be held constant over the generated classification groups.
2650            (CustomRamp.GetProperties): Remove unused variables.
2651    
2652            * Thuban/Model/map.py (Map.SetProjection): Send the old
2653            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
2654            event.
2655    
2656            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
2657            parameter which is a list of records that restricts which
2658            records are saved. Fixes RTbug #1997.
2659    
2660            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
2661            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
2662    
2663            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
2664            to allow the user to fix line color/width on generated groups.
2665            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
2666            functions to optionally fix group properties.
2667    
2668            * Thuban/UI/main.py (main): Set exception hook to the
2669            ShowExceptionDialog. Fixes RTbug #1993.
2670    
2671            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
2672            the table window when it is selectd to be shown.
2673    
2674            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
2675            Export Selection button and move the export buttons underneath
2676            the table.
2677            (QueryTableFrame.UpdateStatusText): Added event argument so
2678            that it can respond to grid selection events. The status text
2679            is now updated even when the table is not associated with a
2680            layer as was previously assumed.
2681            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
2682            UpdateStatusText responds to these events.
2683            (QueryTableFrame.OnSaveAs): Renamed to doExport.
2684            (QueryTableFrame.doExport): Helper function that saves the
2685            entire table, or selected rows, to a file.
2686            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
2687            Respond to export button events and call doExport.
2688    
2689            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
2690            the function doesn't return NULL without first setting a Python
2691            Error.
2692    
2693            * test/runtests.py (main): Only print "Unknown option" for
2694            unsupported options.
2695    
2696            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
2697            optional epsilon argument to specify floating point accuracy.
2698            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
2699            for each item test.
2700    
2701            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
2702            tests for saving selected records.
2703    
2704            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
2705            tests for saving selected records.
2706    
2707            * test/test_map.py (TestMapWithContents.test_set_projection):
2708            MAP_PROJECTION_CHANGED events send the old projection.
2709    
2710            * test/test_session.py
2711            (TestSessionWithContent.test_forward_map_projection):
2712            MAP_PROJECTION_CHANGED events send the old projection.
2713    
2714            * test/test_table.py (TableTest): Update tests to use non-deprecated
2715            functions.
2716    
2717    2003-07-08  Bernhard Herzog  <[email protected]>
2718    
2719            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
2720            constants in the column objects are the standard ones defined in
2721            the table module.
2722    
2723            * test/test_transientdb.py
2724            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
2725            exporting transient tables as DBF works. This should catch the bug
2726            just fixed in TransientTableBase.Width.
2727    
2728    2003-07-08  Bernhard Herzog  <[email protected]>
2729    
2730            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
2731            interpolated colors correctly.
2732    
2733            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
2734            New. Test case for the fix in classgen.py
2735    
2736    2003-07-08  Bernhard Herzog  <[email protected]>
2737    
2738            * test/runtests.py (main): Make the default output less verbose
2739            and add a verbosity option (-v) to get the old output
2740    
2741    2003-07-08  Bernhard Herzog  <[email protected]>
2742    
2743            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
2744            0.9.
2745    
2746            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
2747            New. Return the join type
2748    
2749            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
2750            DTD
2751            (SessionSaver.write_data_containers): Save the join type for
2752            joined tables
2753    
2754            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
2755            namespace
2756            (SessionLoader.start_jointable): Handle the jointype attribute
2757    
2758            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
2759            as of Thuban 0.8. These are now tests to determine whether Thuban
2760            can still read files generated by Thuban 0.8
2761    
2762            * test/test_load.py (LoadSessionTest.dtd)
2763            (TestSingleLayer.file_contents)
2764            (TestLayerVisibility.file_contents, TestLabels.file_contents)
2765            (TestLayerProjection.file_contents)
2766            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
2767            (TestJoinedTable.file_contents)
2768            (TestLoadError.file_contents): Update for new DTD
2769            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
2770            for new join type attribute
2771    
2772            * test/test_save.py (SaveSessionTest.dtd)
2773            (SaveSessionTest.testEmptySession)
2774            (SaveSessionTest.testSingleLayer)
2775            (SaveSessionTest.testLayerProjection)
2776            (SaveSessionTest.testRasterLayer)
2777            (SaveSessionTest.testClassifiedLayer)
2778            (SaveSessionTest.test_dbf_table)
2779            (SaveSessionTest.test_joined_table): Update for new DTD
2780            (SaveSessionTest.test_joined_table): Add test for new join type
2781            attribute
2782    
2783    2003-07-04  Bernhard Herzog  <[email protected]>
2784    
2785            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
2786            function for table_to_dbf
2787            (table_to_dbf): Deal with names longer than the 10 character limit
2788    
2789            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
2790            doc-string
2791            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
2792            long column names
2793    
2794    2003-07-03  Bernhard Herzog  <[email protected]>
2795    
2796            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
2797    
2798    2003-07-03  Bernhard Herzog  <[email protected]>
2799    
2800            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
2801            for the Thuban manual and README with some basic information about
2802            the manual
2803    
2804    2003-07-03  Bernhard Herzog  <[email protected]>
2805    
2806            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
2807            Update doc-string
2808            (TransientJoinedTable.create): Do not modify the column objects of
2809            the input tables in place and copy all columns of the input tables
2810            into the joined table after all.
2811    
2812            * test/test_transientdb.py
2813            (TestTransientTable.test_transient_joined_table_same_column_name):
2814            Update to reflect the new behavior
2815            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
2816            Update to reflect the new behavior
2817            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
2818            New test case for a bug which modified the column objects in place
2819    
2820    2003-07-02  Jonathan Coles   <[email protected]>
2821    
2822            * Thuban/Model/classgen.py (generate_singletons,
2823            generate_uniform_distribution, generate_quantiles,
2824            GenQuantiles0): Make sure maxValue isn't less than
2825            one, otherwise we could divide by zero.
2826    
2827            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
2828            ClassGenTest.doClassSingleTest): Call doBoundsTest to
2829            check the end classification groups against the
2830            proper property values.
2831            (ClassGenTest.doBoundsTest): New. Checks the first and
2832            last classification groups to make sure their properties
2833            are the correct upper and lower bounds for a color ramp.
2834    
2835    2003-07-02  Jonathan Coles   <[email protected]>
2836    
2837            * Thuban/Model/classgen.py (generate_singletons,
2838            generate_uniform_distribution, generate_quantiles,
2839            GenQuantiles0): The denominator was one to high when
2840            calculating the index for the ramp causing the index
2841            to never to reach one.
2842    
2843    2003-07-02  Jonathan Coles   <[email protected]>
2844    
2845            Changed the singature of ClassGroupRange.__init__ and
2846            ClassGroupRange.SetRange() so that the min/max values are
2847            passed as a tuple. This makes a better calling scheme for
2848            when a Range object is passed instead.
2849    
2850            * Thuban/Model/classgen.py: Fixed parameters to
2851            ClassGroupRange constructor.
2852    
2853            * Thuban/Model/classification.py (ClassGroupRange.__init__):
2854            Consolidate the min/max parameters into a single _range which
2855            can either be a tuple or a Range object.
2856            (ClassGroupRange.SetRange): Consolidate the min/max parameters
2857            into a single _range which can either be a tuple or a Range object.
2858    
2859            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
2860            call to ClassGroupRange constructor to use a tuple.
2861    
2862            * Thuban/Model/layer.py (Layer.SetClassification): Switch
2863            the classification instance variable to the new class
2864            before calling _set_layer otherwise subscribers to a
2865            LAYER_CHANGED event will not see any difference.
2866    
2867            * test/test_classification.py: Fix tests of ClassGroupRange
2868            so that they use the new signature.
2869    
2870            * test/test_load.py: Fix use of ClassGroupRange so that it
2871            uses the new signature.
2872    
2873            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
2874            uses the new signature.
2875    
2876            * test/test_save.py: Fix use of ClassGroupRange so that it
2877            uses the new signature.
2878    
2879    
2880    2003-07-01  Jonathan Coles   <[email protected]>
2881    
2882            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
2883            Import used objects/class from color.
2884            (generate_singletons): We don't
2885            need the numGroups parameter anymore because we are using
2886            the new ramps with GetProperties().
2887            (generate_uniform_distribution): Use new ramp method
2888            GetProperties().
2889            (generate_quantiles, GenQuantiles0): Use new ramp method
2890            GetProperties().
2891            (CustomRamp.SetNumGroups): Removed. The ramps now map
2892            a value from 0 to 1 to class properties so the number
2893            of groups is not needed ahead of time.
2894            (CustomRamp.next): Removed. CustomRamp does not support
2895            interation anymore.
2896            (CustomRamp.GetProperties): Returns a ClassGroupProperties
2897            object based on the index value from 0 to 1 that is
2898            passed to it.
2899            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
2900            Made into instances of Monochromatic class instread of
2901            deriving from it.
2902            (HotToCold.SetNumGroups): Removed. See CustomRamp.
2903            (HotToCold.next): Removed. See CustomRamp.
2904    
2905            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
2906            (Classification.SetField, Classification.SetFieldType):
2907            Replaced with SetFieldInfo.
2908            (Classification.SetFieldInfo): New. Does a better job of
2909            what SetField and SetFieldType used to do by combining
2910            their function since they should really always be done
2911            at the same time.
2912            (Classification.SetLayer): Renamed to _set_layer.
2913            (Classification._set_layer): Should only be called from
2914            Layer's SetClassification. This does not cause a recursive
2915            call as SetLayer did because we know that Layer knows about
2916            the classification.
2917    
2918            * Thuban/Model/color.py: Fixes RTbug #1971.
2919            (_Transparent): Renamed from Transparent so it doesn't
2920            conflict with the module variable.
2921            (Transparent, Black): Renamed from Color.Transparent,
2922            Color.Black so they are not class variables.
2923    
2924            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
2925            (Layer.Destroy): We don't need to call SetClassification
2926            anymore to clear out the back reference in the classifcation
2927            to the layer. It's better to set it to None using _set_layer,
2928            and we won't be creating another clas object too.
2929            (Layer.SetClassification): Classification._set_layer is not
2930            recursive so remove all the locking variables. Also clean
2931            up the code so that it remains unchanged if something fails.
2932    
2933            * Thuban/Model/load.py: Fixes RTbug #1971.
2934            (SessionLoader.start_classification): Call
2935            Classification.SetFieldInfo().
2936    
2937            * Thuban/Model/save.py: Removed import of Color which wasn't
2938            being used.
2939    
2940            * Thuban/UI/classgen.py: Fixes RTbug #1972.
2941            (ClassGenDialog.__init__): Color ramps are now instances
2942            already so we don't need to create any new objects.
2943            (ClassGenDialog.OnOK): Check for numGroups is no longer
2944            necessary because we never use it.
2945    
2946            * Thuban/UI/classifier.py: Fixes RTbug #1971.
2947            (Classifier.__BuildClassification, Classifier.__SetGridTable):
2948            Call Classification.SetFieldInfo() instead of SetFieldType.
2949    
2950            * Thuban/UI/renderer.py: Fixes RTbug #1971.
2951    
2952            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
2953            (MapCanvas.__init__): Subscribe to the idle time event. Set
2954            background color to white.
2955            (MapCanvas.OnPaint): Set a flag indicating that we should
2956            render the map during idle time. If we already have a bitmap
2957            just draw it now.
2958            (MapCanvas.OnIdle): New. Render the map only during idle time.
2959            This also fixes a problem with the busy cursor under gtk.
2960    
2961            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
2962            Fix calls to generate_singletons because the signature changed.
2963    
2964            * test/test_classification.py: Fix color references and
2965            change calls to Classification.[SetField|SetFieldType] to
2966            SetFieldInfo.
2967    
2968            * test/test_load.py: Fix color references.
2969    
2970            * test/test_load_0_2.py: Fix color references.
2971    
2972            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
2973            Change calls to Classification.[SetField|SetFieldType] to
2974            SetFieldInfo.
2975    
2976    2003-07-01  Frank Koormann   <[email protected]>
2977    
2978            MERGE from the greater-ms3 branch.
2979    
2980            * test/test_transientdb.py
2981            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
2982            New. Test join of two tables with partly equal column names.
2983    
2984            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
2985            If duplicates in left and right tables column names are found,
2986            append '_' (underscores) to the name until it is unique.
2987            Create always new internal names for the resulting table and reference
2988            columns in the join statement with <table>.<column>
2989    
2990    2003-07-01  Bernhard Herzog  <[email protected]>
2991    
2992            * test/test_transientdb.py
2993            (TestTransientTable.test_transient_joined_table_same_column_name):
2994            New. Test whether joining on columns with the same names in both
2995            tables works.
2996            
2997            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
2998            sure to use the right internal names even when joining on field
2999            with the same names in both tables. Also, detect duplicate names
3000            in the joined table correctly.
3001    
3002    2003-07-01  Frank Koormann   <[email protected]>
3003    
3004            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
3005            Reverse List of layers to render in same order as in desktop legend.
3006    
3007    2003-06-30  Jonathan Coles   <[email protected]>
3008    
3009            * Thuban/version.py (make_tuple): Takes a version string
3010            and splits it into a tuple of at most three integers.
3011            Used make_tuple() to make tuple versions of the version
3012            numbers.
3013    
3014            * Thuban/UI/about.py: Add Thuban email addresses.
3015    
3016    2003-06-30  Jonathan Coles   <[email protected]>
3017    
3018            * Thuban/version.py: SQLite/PySQLite version dependencies
3019            were too high.
3020    
3021    2003-06-30  Jonathan Coles   <[email protected]>
3022    
3023            * Thuban/version.py: Update version to 0.8.1
3024            
3025            * MANIFEST.in: Added Projections so that default.proj is
3026            included.
3027    
3028    2003-06-26  Jonathan Coles   <[email protected]>
3029    
3030            New About box with lots more information including library
3031            versions and credits. More/better version checking before
3032            Thuban starts.
3033    
3034            * Thuban/UI/about.py: New. New About box that displays
3035            library version information and credits.
3036    
3037            * Thuban/version.py: Added new 'versions' dictionary which
3038            contains the verions of various libraries which are checked
3039            when the module loads.
3040            (verify_versions): Check all version numbers and returns
3041            a list of errors.
3042    
3043            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
3044            Reset the status of the buttons as the situation warrants,
3045            but in a better more reliable way by not relying on the
3046            current status to determine what needs to change.
3047    
3048            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
3049            (verify_versions): Remove most of the code since it is
3050            now in Thuban.version.verify_versions.o
3051    
3052            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
3053            About box in Thuban.UI.about.
3054    
3055            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
3056            Returns the version of gdal library being used as a string.
3057    
3058            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
3059            Removed.
3060            (get_proj_version): Return the version of PROJ that the file
3061            was compiled with.
3062            (get_gtk_version): Return th version of GTK that the file
3063            was compiled with.
3064    
3065    2003-06-25  Jonathan Coles   <[email protected]>
3066    
3067            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
3068            of the SelectPropertiesDialog should be self so the window
3069            appears on top.
3070            (ClassGroupPropertiesCtrl.DoEdit): The parent
3071            of the SelectPropertiesDialog should be self so the window
3072            appears on top.
3073    
3074            * Thuban/UI/resource.py: Cleaned up how we determine file
3075            extensions.
3076            (GetImageResource): Return an wxImage from our Resources.
3077    
3078    2003-06-24  Jonathan Coles   <[email protected]>
3079    
3080            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
3081            Check that a layer has a classification before trying
3082            to get it. Raster layers don't have classifications.
3083    
3084    2003-06-23  Jonathan Coles   <[email protected]>
3085            
3086            * setup.py: Add Resources/XML to resource list.
3087        
3088    2003-06-23  Jonathan Coles   <[email protected]>
3089    
3090            * setup.cfg: Fix copyright dates
3091        
3092    2003-06-23  Jonathan Coles   <[email protected]>
3093    
3094            * MANIFEST.in: Update with Resources/XML
3095    
3096            * setup.py: Don't include Locale resources yet as we don't
3097            have any and it causes problems building the distribution
3098            for Windows. Update version to 0.8.0.
3099    
3100            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
3101    
3102            * Thuban/UI/mainwindow.py: Add blank line at the end because
3103            file was not being read correctly building the Windows
3104            distribution.
3105    
3106    2003-06-23  Jonathan Coles   <[email protected]>
3107    
3108            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
3109    
3110            * Thuban/version.py: Temporarily update longversion for
3111            the 0.8 release so that it doesn't have the cvs revision.
3112    
3113    2003-06-23  Jonathan Coles   <[email protected]>
3114    
3115            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
3116            to make sure that we don't create reentrant possibilities with
3117            wxYield.
3118    
3119            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
3120            directly to avoid the wxSafeYield() call which generates an
3121            OnPaint event causing infinite recursion. Don't try to catch
3122            exception anymore. This was for before there were limits on map
3123            scaling.
3124    
3125    2003-06-23  Bernhard Herzog  <[email protected]>
3126    
3127            Bug fix for RT #1961:
3128    
3129            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
3130            Register DerivedShapestores with the session
3131    
3132            * Thuban/Model/session.py (Session.Tables): Make sure each table
3133            is only listed once.
3134    
3135            * test/test_load.py (TestJoinedTable.test): Add check_format call.
3136            Update file contents to match the one written out.
3137    
3138    2003-06-20  Bernhard Herzog  <[email protected]>
3139    
3140            * test/xmlsupport.py (SaxEventLister.startElementNS)
3141            (SaxEventLister.endElementNS): Do not include the qname. Python
3142            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
3143            is (presumably incorrectly) None, whereas it's a string with the
3144            element name in the later versions.
3145    
3146            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
3147            (TestEventList.test_even_list_namespace): Update tests to reflect
3148            the new behaviour
3149            (TestEventList.test_even_list_id_normalization): Fix doc-string
3150    
3151    2003-06-20  Jonathan Coles   <[email protected]>
3152    
3153            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
3154            by deriving classes to determine if that layer supports shapes.
3155            (Layer): Override HasShapes and return true.
3156    
3157            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
3158            instead of a direct call to wx[Begin|End]CusyCursor().
3159            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
3160            table data.
3161    
3162            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
3163            New. Wrappers around the wxWindows functions that allow us to
3164            make additional calls such as wxYield which gives the native
3165            system a chance to update the cursor correctly.
3166    
3167            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
3168            instead of a direct call to wx[Begin|End]CusyCursor().
3169    
3170            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
3171            instead of a direct call to wx[Begin|End]CusyCursor().
3172            (MapCanvas.find_shape_at): Check if the current search layer
3173            support shapes, otherwise go on to the next layer.
3174    
3175            * test/test_layer.py: Add tests in each type of layer for
3176            HasClassification() and HasShapes()
3177    
3178  2003-06-20  Jonathan Coles   <[email protected]>  2003-06-20  Jonathan Coles   <[email protected]>
3179    
3180          * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after          * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after

Legend:
Removed from v.1272  
changed lines
  Added in v.1929

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26