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

Legend:
Removed from v.1556  
changed lines
  Added in v.1899

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26