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

Legend:
Removed from v.1349  
changed lines
  Added in v.1922

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26