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

Legend:
Removed from v.1619  
changed lines
  Added in v.1916

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26