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

Legend:
Removed from v.1584  
changed lines
  Added in v.1911

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26