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

Legend:
Removed from v.1582  
changed lines
  Added in v.1913

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26