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

Legend:
Removed from v.1655  
changed lines
  Added in v.1925

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26