/[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 1237 by jonathan, Wed Jun 18 15:30:14 2003 UTC revision 1517 by jonathan, Tue Jul 29 15:00:37 2003 UTC
# Line 1  Line 1 
1    2003-07-29  Jonathan Coles   <[email protected]>
2    
3            * Doc/manual/images/5_2_custom_ramp.png,
4            Doc/manual/images/5_2_quantiles.png,
5            Doc/manual/images/5_2_uniform_dist.png,
6            Doc/manual/images/5_2_unique_values.png,
7            Doc/manual/images/8_int_error.png: New screen shots.
8    
9            * Doc/manual/thuban-manual.xml: Fixed typos and wording, clarified
10            some points, and added more screen shots.
11    
12    2003-07-29  Bernhard Herzog  <[email protected]>
13    
14            * Thuban/Model/data.py: Remove the now unused import of warnings
15    
16    2003-07-29  Bernhard Herzog  <[email protected]>
17    
18            * Thuban/Model/data.py (SimpleStore): Removed. This class has been
19            deprecated since before the 0.8 release and isn't used in Thuban
20            itself anymore.
21    
22            * Thuban/Model/transientdb.py: Remove some unnecessary imports
23    
24    2003-07-29  Jonathan Coles   <[email protected]>
25    
26            * Thuban/UI/application.py (ThubanApplication.OnInit): set the
27            python exception hook here so that we are sure to catch any
28            Thuban exception that happen during initialization.
29    
30            * Thuban/UI/main.py (main): Don't set the exception hook here,
31            it will get set in ThubanApplication.OnInit.
32    
33    2003-07-29  Jonathan Coles   <[email protected]>
34                                                                                
35            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
36            Removed and called it show_exception_dialog() so that the exception
37            handler can be set before the class is created.
38                                                                                
39            * Thuban/UI/main.py (main): Install the exception handler before
40            a ThubanApplication is created.
41                                                                                    
42    2003-07-29  Bernhard Herzog  <[email protected]>
43    
44            * po/it.po: New. Italian translation by Maurizio Napolitano
45    
46            * po/ru.po: New. Russian translation by Alex Shevlakov
47    
48    2003-07-29  Frank Koormann   <[email protected]>
49    
50            * Doc/manual/thuban-manual.xml: Extended section on supported
51            projections.
52            
53    2003-07-29  Frank Koormann   <[email protected]>
54    
55            * Doc/manual/thuban-manual.xml: gaspell-checked.
56    
57    2003-07-29  Jonathan Coles   <[email protected]>
58    
59            * Doc/manual/images/3_5_legend.png: Added border to improve look
60            on white background.
61    
62    2003-07-29  Jonathan Coles   <[email protected]>
63    
64            * Doc/manual/thuban-manual.xml: Fixed grammar and typos. Added
65            descriptions for the legend toolbar.
66    
67            * Doc/manual/images/4_2_raster_layer_properties.png: Removed
68            cursor from dialog box.
69    
70    2003-07-28  Jonathan Coles   <[email protected]>
71    
72            * Doc/manual/thuban-manual.xml: More screenshots and more chapters.
73    
74            * Doc/manual/images/2_4_session_tree.png,
75            Doc/manual/images/3_5_legend.png, Doc/manual/images/3_rename_map.png,
76            Doc/manual/images/4_2_layer_properties.png,
77            Doc/manual/images/4_2_raster_layer_properties.png,
78            Doc/manual/images/5_3_genclass.png,
79            Doc/manual/images/5_classification.png,
80            Doc/manual/images/6_projection.png,
81            Doc/manual/images/7_1_table_view.png,
82            Doc/manual/images/7_2_5_join.png: New screenshots.
83    
84    2003-07-24  Jonathan Coles   <[email protected]>
85    
86            * Doc/manual/thuban-manual.xml: Chapter on Projection Management.
87    
88    2003-07-24  Jonathan Coles   <[email protected]>
89    
90            * Doc/manual/thuban-manual.xml: Added EPS images and wrote
91            chapter on Layer Management.
92    
93            * Doc/manual/Makefile: New. Makefile to generate all formats for the
94            manual and images.
95    
96    2003-07-24  Bernhard Herzog  <[email protected]>
97    
98            * Thuban/Model/range.py, Thuban/version.py: Remove the #! line as
99            it annoys lintian which warns about these files not being
100            executable. The #1 isn't necessary here since if you absolutely
101            must execute them you can always say "python <filename>".
102    
103            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Remove
104            superfluous code to set brush and pen for point shapes
105    
106            * Thuban/UI/viewport.py: Remove commented out code that wouldn't
107            belong in viewport anyway
108    
109    2003-07-24  Frank Koormann   <[email protected]>
110    
111            * Doc/manual/thuban-manual.xml: Added section on table management.
112    
113    2003-07-24  Bernhard Herzog  <[email protected]>
114    
115            * test/runtests.py (main): Recognize the long "verbose" option
116            correctly.
117    
118    2003-07-22  Jonathan Coles   <[email protected]>
119    
120            * Doc/manual/thuban-manual.xml: Continue to write first revision
121            of the manual.
122    
123            * Thuban/UI/renderer.py (MapRenderer.render_map): Wrap method
124            with Begin/EndDrawing() calls to ensure we aren't doing to
125            many updates to the dc during rendering.
126            (ScreenRenderer.draw_shape_layer): self.draw_point_shape takes
127            a pen and brush argument so they need to be passed to the function.
128    
129            * Thuban/UI/viewport.py (ViewPort.calc_min_max_scales): New.
130            Calculates the minimum and maximum scale values. Factored out
131            of set_view_transform so that it could be used to zoom all the
132            way into a single point.
133            (ViewPort.set_view_transform): Call calc_min_max_scales().
134            (ViewPort.FitSelectedToWindow): Zoom to the maximum scale
135            if only a single point is selected.
136    
137            * Doc/manual/images/1_2_legend_close.png,
138            Doc/manual/images/1_2_legend_dock.png,
139            Doc/manual/images/1_2_mainwindow.png,
140            Doc/manual/images/1_2_mainwindow.ps,
141            Doc/manual/images/1_2_mainwindow.sk,
142            Doc/manual/images/3_2_fullextent.png,
143            Doc/manual/images/3_2_fulllayerextent.png,
144            Doc/manual/images/3_2_fullshapeextent.png,
145            Doc/manual/images/3_2_pan.png,
146            Doc/manual/images/3_2_zoomin.png,
147            Doc/manual/images/3_2_zoomout.png,
148            Doc/manual/images/3_3_identify.png,
149            Doc/manual/images/3_3_label.png,
150            Doc/manual/images/3_5_invisible.png,
151            Doc/manual/images/3_5_movedown.png,
152            Doc/manual/images/3_5_moveup.png,
153            Doc/manual/images/3_5_props.png,
154            Doc/manual/images/3_5_tobottom.png,
155            Doc/manual/images/3_5_totop.png,
156            Doc/manual/images/3_5_visible.png: New. Images for the documentation.
157    
158    2003-07-18  Bernhard Herzog  <[email protected]>
159    
160            * Thuban/UI/messages.py (MAP_REPLACED): New message.
161    
162            * Thuban/UI/viewport.py (ViewPort.SetMap): Issue MAP_REPLACED
163            after the new map has been assigned
164    
165            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages):
166            Delegate MAP_REPLACED to the canvas too
167            (MainWindow.prepare_new_session): Removed. Thanks to the new
168            MAP_REPLACED message it's no longer needed
169            (MainWindow.OpenSession, MainWindow.NewSession):
170            prepare_new_session has been removed.
171    
172            * Thuban/UI/classifier.py (Classifier.__init__): Subscribe to
173            MAP_REPLACED so that we can close the dialog if a new map is set.
174            (Classifier.unsubscribe_messages): Unsubscribe from MAP_REPLACED
175            (Classifier.map_replaced): Handle MAP_REPLACED by closing the
176            dialog
177    
178            * test/test_viewport.py (SimpleViewPortTest)
179            (SimpleViewPortTest.test_default_size): Add doc-strings
180            (ViewPortTest.setUp): Bind map to self.map so we can use it in
181            tests. Subscribe to MAP_REPLACED messages too.
182            (ViewPortTest.tearDown): No need to explicitly unsubscribe
183            (ViewPortTest.test_set_map): New test for the SetMap method.
184    
185    2003-07-18  Bernhard Herzog  <[email protected]>
186    
187            * test/test_viewport.py (SimpleViewPortTest.test_default_size):
188            Move this test from ViewPortTest.setUp to this new separate test
189            case. setUp is not the place for the actual tests.
190            (ViewPortTest.test_inital_settings, ViewPortTest.setUp): Move some
191            more of the test from setUp to the new test test_inital_settings.
192            (ViewPortTest.test_win_to_proj, ViewPortTest.test_proj_to_win)
193            (ViewPortTest.test_proj_conv): Split test_proj_conv into
194            test_win_to_proj and test_proj_to_win and make the tests easier to
195            understand
196            (ViewPortTest.testFitRectToWindow, ViewPortTest.testZoomFactor)
197            (ViewPortTest.testZoomOutToRect, ViewPortTest.testTranslate)
198            (ViewPortTest.test_unprojected_rect_around_point)
199            (ViewPortTest.test_find_shape_at, ViewPortTest.testTools):
200            Reformat to increase readability.
201    
202    2003-07-18  Bernhard Herzog  <[email protected]>
203    
204            * Thuban/UI/view.py (MapCanvas.OnLeftDown): Capture the mouse.
205    
206    2003-07-18  Bernhard Herzog  <[email protected]>
207    
208            * test/runtests.py: The test suite can now be run without an X
209            connection. To make sure this remains true, remove the DISPLAY
210            environment variable so that an error occurs if the wxGTK is
211            imported accidentally
212    
213    2003-07-18  Bernhard Herzog  <[email protected]>
214    
215            * Thuban/UI/viewport.py: Remove unused imports
216    
217            * Thuban/UI/view.py: Remove unused imports
218    
219    2003-07-18  Bernhard Herzog  <[email protected]>
220    
221            * test/test_export.py Remove unused imports. The OutputTransform
222            function is now in viewport.py and is called output_transform
223            (TestScalebar.test_output_transform)
224            (TestScalebar.test_OutputTransform): Renamed to
225            test_output_transform and updated to use output_transform instead
226            of OutputTransform
227    
228            * Thuban/UI/view.py (OutputTransform): Moved to viewport.py and
229            renamed.
230            (MapCanvas.Export, MapPrintout.draw_on_dc): OutputTransform was
231            renamed to output_transform
232    
233            * Thuban/UI/viewport.py (OutputTransform, output_transform):
234            Rename to output_transform
235    
236    2003-07-18  Bernhard Herzog  <[email protected]>
237    
238            * Thuban/Model/layer.py (Layer.__init__): Rename
239            classificationField to classificatin_column and init it here so
240            that it can be used in SetClassificationColumn
241            (Layer.GetClassificationColumn, Layer.GetClassificationField):
242            Rename to GetClassificationColumn.
243            (Layer.SetClassificationColumn, Layer.SetClassificationField):
244            Rename to SetClassificationColumn and issue a LAYER_CHANGED
245            message if the column changes.
246            (Layer._classification_changed, Layer.ClassChanged): Rename to
247            _classification_changed. Update the callers.
248            (Layer.SetShapeStore): Further field->column renames.
249    
250            * Thuban/Model/load.py (SessionLoader.start_classification)
251            (SessionLoader.start_clpoint): Updates because of
252            field->column method name changes in the Layer class
253    
254            * Thuban/Model/save.py (SessionSaver.write_classification): Updates
255            because of field->column method name changes in the Layer class
256    
257            * Thuban/UI/classifier.py (Classifier.__init__)
258            (Classifier._OnTry, Classifier._OnRevert): Updates because of
259            field->column method name changes in the Layer class
260    
261            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Updates
262            because of field->column method name changes in the Layer class
263    
264            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Updates because
265            of field->column method name changes in the Layer class
266    
267            * test/test_save.py (SaveSessionTest.testClassifiedLayer)
268            (SaveSessionTest.testClassifiedLayer): Update because of
269            field->column method name changes in the Layer class
270    
271            * test/test_layer.py (SetShapeStoreTests.setUp)
272            (SetShapeStoreTests.test_sanity): Update because of field->column
273            method name changes in the Layer class
274            (TestLayerModification.setUp): Subscribe to LAYER_CHANGED as well
275            (TestLayerModification.test_sanity)
276            (TestLayerModification.test_initial_settings): remove unsued code
277            and rename to test_sanity.
278            (TestLayerModification.test_set_classification): New test for
279            SetClassification and SetClassificationField.
280    
281    2003-07-18  Bernhard Herzog  <[email protected]>
282    
283            * test/test_classgen.py (TestFixedRamp.test): Extend test to check
284            the non-fixed values as well. The old test would have accepted a
285            fixed ramp that only returnes the fixed properties
286    
287    2003-07-17  Jonathan Coles   <[email protected]>
288    
289            * Doc/manual/mainwindow.png, Doc/manual/mainwindow.xcf: Screen
290            shots for the manual. The XCF file is the source image and
291            has additional layers to support changes.
292    
293            * Doc/manual/thuban-manual.xml: Wrote an initial Introduction.
294    
295            * Thuban/UI/classifier.py (Classifier.__BuildClassification):
296            Return both the new class and the field name.
297    
298            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Don't
299            fit the map to the window as this changes any zoom level that
300            the user may have set.
301    
302    2003-07-16  Jonathan Coles   <[email protected]>
303    
304            * Thuban/Model/classgen.py (generate_singletons,
305            generate_uniform_distribution, generate_quantiles): Remove
306            fixes parameter, but maintain the same functionality by having
307            the calling function pass a FixedRamp object for the ramp.
308            (FixedRamp): New. Adapts a ramp to have fixed property values.
309    
310            * Thuban/Model/classification.py: Use new CLASS_CHANGED message.
311            (Classification): Inherit from Publisher.
312            (Classification.__init__): Remove the layer parameter.
313            Classifications no longer need to have a parent layer.
314            (Classification.GetField, Classification.GetFieldType,
315            Classification.SetFieldInfo): Removed. The field name is stored
316            in the layer, and the type can be retreived by calling
317            Layer.GetFieldType().
318            (Classification._set_layer, Classification.GetLayer): Removed.
319            Classifications no longer have a parent layer.
320    
321            * Thuban/Model/layer.py (Layer.Destroy): Unsubscribe from the
322            classification.
323            (Layer.SetShapeStore): Reset the classification first while
324            we still have the old shape store to work with.
325            (Layer.GetClassificationField, Layer.SetClassificationField):
326            New. Method for getting/setting the field to classify on.
327            (Layer.SetClassification): Simplified now that the layer
328            simply has to hold a reference to the classification and not
329            tell the classification who owns it.
330            Fixes RTbug #2023.
331    
332            * Thuban/Model/load.py (SessionLoader.start_classification):
333            Set the field name on the layer, not the classification.
334    
335            * Thuban/Model/messages.py: Add CLASS_CHANGED for when a
336            classification is modified.
337    
338            * Thuban/Model/save.py (SessionSaver.write_classification):
339            Get the field name and type from the layer.
340    
341            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Renamed
342            parameter records to rows and add docstring. Fixes RTbug #1997.
343    
344            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Use a fixed
345            ramp when we need to fix certain values of a ramp rather than
346            using the old fixes parameter. Fixes RTbug #2024.
347    
348            * Thuban/UI/classifier.py (ClassGrid.CreateTable): Add fieldType
349            parameter.
350            (ClassTable.Reset): Add fieldType parameter and use it, rather
351            than asking the classification.
352            (Classifier.__init__): Remember the original class's field
353            and ask the layer for the field type, rather than the classification.
354            (Classifier.__SetGridTable): Retrieve the field and field type
355            for the table because they are not in the classification.
356            (Classifier._OnTry, Classifier._OnRevert): Set the classification
357            field on the layer in addition to the classification itself.
358    
359            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Get the
360            classification field from layer.
361    
362            * Thuban/UI/viewport.py (ViewPort.find_shape_at): Get the
363            classification field from layer. Split up tests and remove
364            *-imports. Fixes RTbug #1992.
365    
366            * test/test_classgen.py (TestFixedRamp): Test for the FixedRamp class.
367    
368            * test/test_classification.py
369            (TestClassification.test_classification): Remove tests for methods
370            that no longer exist.
371    
372            * test/test_layer.py (SetShapeStoreTests.setUp): Classification
373            __init__ no longer has a field parameter, use SetClassificationField.
374            (SetShapeStoreTests.test_sanity): Use layer object to get class
375            field info.
376    
377            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Use
378            SetClassificationField on layer to set class field info.
379    
380            * test/test_viewport.py: Renamed from test/test_view.py.
381    
382    2003-07-16  Jan-Oliver Wagner <[email protected]>
383    
384            * Doc/manual/thuban-manual.xml: Added authors and an initial
385            coarse structure.
386    
387    2003-07-15  Bernhard Herzog  <[email protected]>
388    
389            * test/support.py (FloatComparisonMixin): This is a mix-in class
390            and therefore should not be derived from any other class.
391    
392            * test/test_range.py (RangeTest): FloatComparisonMixin is a
393            mix-in, so derive from TestCase as well.
394    
395    2003-07-15  Bernhard Herzog  <[email protected]>
396    
397            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Rework the
398            draw_func handling a bit to remove one layer of indirection. This
399            makes the renderer about 10% faster in the non-classifying case
400            and the code a bit cleaner
401            (MapRenderer.draw_point_shape): Add the pen and brush parameters
402            and set them in the dc. Now the draw_point_shape method and
403            wxproj's draw_polygon_shape function have basically the same
404            signature so that both can be directly used as draw_func
405    
406    2003-07-15  Bernhard Herzog  <[email protected]>
407    
408            * Thuban/Model/save.py (SessionSaver.write_classification): Encode
409            string values (in addition to the labels) as UTF 8
410    
411            * Thuban/Model/load.py (SessionLoader.start_clpoint): Decode the
412            values if the field type is string
413    
414            * test/test_save.py (SaveSessionTest.testClassifiedLayer): Test
415            saving a session with non-ascii string classification values.
416    
417            * test/test_load.py (TestClassification.file_contents)
418            (TestClassification.test): Check for non-ascii values in string
419            classifications
420    
421    2003-07-14  Jonathan Coles   <[email protected]>
422    
423            * test/test_view.py: New. Tests for ViewPort.
424    
425    2003-07-14  Frank Koormann   <[email protected]>
426    
427            * Thuban/Model/load.py (SessionLoader.start_map): Encode map
428            title to latin1.  Fixes https://intevation.de/rt/webrt?serial_num=2013
429    
430            * test/test_load_0_8.py (TestUnicodeStrings): New, test load of
431            unicode strings from session file: session title, map title and
432            projection name.
433            
434    2003-07-10  Jonathan Coles   <[email protected]>
435    
436            * Thuban/UI/viewport.py (Tool.MouseUp): Should have called
437            drag_stop, not drag_move when the mouse is released.
438    
439    2003-07-10  Jonathan Coles   <[email protected]>
440    
441            The most important part of this is the seperation of view.py into
442            two pieces. viewport.py now has a class called ViewPort which
443            contains all the non-wx parts of view.py and can therefore be
444            tested. view.py contains only the wx-specific parts and is fairly
445            simple.
446    
447            * Thuban/UI/view.py: Stripped out all non-wx functionality. Fixes
448            RTTbug #1992.
449            * Thuban/UI/viewport.py: New. Contains non-wx view functionality.
450            RTTbug #1992.
451    
452            * Thuban/Model/classgen.py (generate_singletons,
453            generate_uniform_distribution, generate_quantiles):
454            Added 'fixes' parameter so that property attributes can
455            be held constant over the generated classification groups.
456            (CustomRamp.GetProperties): Remove unused variables.
457    
458            * Thuban/Model/map.py (Map.SetProjection): Send the old
459            projection as an argument to listeners of the MAP_PROJECTION_CHANGED
460            event.
461    
462            * Thuban/Model/table.py (table_to_dbf, table_to_csv): Added 'records'
463            parameter which is a list of records that restricts which
464            records are saved. Fixes RTbug #1997.
465    
466            * Thuban/UI/application.py (ThubanApplication.ShowExceptionDialog):
467            Port exception dialog from GREAT-ER. Fixes RTbug #1993.
468    
469            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Add controls
470            to allow the user to fix line color/width on generated groups.
471            (ClassGenDialog.OnOK): Use new 'fixes' parameter of the generate_*
472            functions to optionally fix group properties.
473    
474            * Thuban/UI/main.py (main): Set exception hook to the
475            ShowExceptionDialog. Fixes RTbug #1993.
476    
477            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): Raise
478            the table window when it is selectd to be shown.
479    
480            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Add an
481            Export Selection button and move the export buttons underneath
482            the table.
483            (QueryTableFrame.UpdateStatusText): Added event argument so
484            that it can respond to grid selection events. The status text
485            is now updated even when the table is not associated with a
486            layer as was previously assumed.
487            (QueryTableFrame.OnGridSelectRange, OnGridSelectCell): Removed.
488            UpdateStatusText responds to these events.
489            (QueryTableFrame.OnSaveAs): Renamed to doExport.
490            (QueryTableFrame.doExport): Helper function that saves the
491            entire table, or selected rows, to a file.
492            (QueryTableFrame.OnExport, QueryTableFrame.OnExportSel): New.
493            Respond to export button events and call doExport.
494    
495            * extensions/thuban/gdalwarp.cpp (ProjectRasterFile): Make sure
496            the function doesn't return NULL without first setting a Python
497            Error.
498    
499            * test/runtests.py (main): Only print "Unknown option" for
500            unsupported options.
501    
502            * test/support.py (FloatComparisonMixin.assertFloatEqual): Take
503            optional epsilon argument to specify floating point accuracy.
504            (FloatComparisonMixin.assertFloatSeqEqual): Call assertFloatEqual
505            for each item test.
506    
507            * test/test_csv_table.py (TestCSVTable.test_table_to_cvs): Add
508            tests for saving selected records.
509    
510            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
511            tests for saving selected records.
512    
513            * test/test_map.py (TestMapWithContents.test_set_projection):
514            MAP_PROJECTION_CHANGED events send the old projection.
515    
516            * test/test_session.py
517            (TestSessionWithContent.test_forward_map_projection):
518            MAP_PROJECTION_CHANGED events send the old projection.
519    
520            * test/test_table.py (TableTest): Update tests to use non-deprecated
521            functions.
522    
523    2003-07-08  Bernhard Herzog  <[email protected]>
524    
525            * Thuban/Model/transientdb.py (TransientTableBase.Width): The type
526            constants in the column objects are the standard ones defined in
527            the table module.
528    
529            * test/test_transientdb.py
530            (TestTransientTable.test_transienttable_to_dbf): New. Test whether
531            exporting transient tables as DBF works. This should catch the bug
532            just fixed in TransientTableBase.Width.
533    
534    2003-07-08  Bernhard Herzog  <[email protected]>
535    
536            * Thuban/Model/classgen.py (CustomRamp.GetProperties): Compute the
537            interpolated colors correctly.
538    
539            * test/test_classgen.py (TestCustomRamp.test_color_interpolation):
540            New. Test case for the fix in classgen.py
541    
542    2003-07-08  Bernhard Herzog  <[email protected]>
543    
544            * test/runtests.py (main): Make the default output less verbose
545            and add a verbosity option (-v) to get the old output
546    
547    2003-07-08  Bernhard Herzog  <[email protected]>
548    
549            * Resources/XML/thuban-0.9.dtd: New. This will become the DTD for
550            0.9.
551    
552            * Thuban/Model/transientdb.py (TransientJoinedTable.JoinType):
553            New. Return the join type
554    
555            * Thuban/Model/save.py (SessionSaver.write_session): Use new 0.9
556            DTD
557            (SessionSaver.write_data_containers): Save the join type for
558            joined tables
559    
560            * Thuban/Model/load.py (SessionLoader.__init__): Add the new 0.9
561            namespace
562            (SessionLoader.start_jointable): Handle the jointype attribute
563    
564            * test/test_load_0_8.py: New. Effectively a copy of test_load.py
565            as of Thuban 0.8. These are now tests to determine whether Thuban
566            can still read files generated by Thuban 0.8
567    
568            * test/test_load.py (LoadSessionTest.dtd)
569            (TestSingleLayer.file_contents)
570            (TestLayerVisibility.file_contents, TestLabels.file_contents)
571            (TestLayerProjection.file_contents)
572            (TestRasterLayer.file_contents, TestJoinedTable.file_contents)
573            (TestJoinedTable.file_contents)
574            (TestLoadError.file_contents): Update for new DTD
575            (TestJoinedTable.file_contents, TestJoinedTable.setUp): Add test
576            for new join type attribute
577    
578            * test/test_save.py (SaveSessionTest.dtd)
579            (SaveSessionTest.testEmptySession)
580            (SaveSessionTest.testSingleLayer)
581            (SaveSessionTest.testLayerProjection)
582            (SaveSessionTest.testRasterLayer)
583            (SaveSessionTest.testClassifiedLayer)
584            (SaveSessionTest.test_dbf_table)
585            (SaveSessionTest.test_joined_table): Update for new DTD
586            (SaveSessionTest.test_joined_table): Add test for new join type
587            attribute
588    
589    2003-07-04  Bernhard Herzog  <[email protected]>
590    
591            * Thuban/Model/table.py (_find_dbf_column_names): New. Helper
592            function for table_to_dbf
593            (table_to_dbf): Deal with names longer than the 10 character limit
594    
595            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): Add
596            doc-string
597            (TestTableToDBF.test_table_to_dbf_long_col_names): New test for
598            long column names
599    
600    2003-07-03  Bernhard Herzog  <[email protected]>
601    
602            * Doc/manual/thuban-manual.xml: Fix the CVS Revision Tag syntax
603    
604    2003-07-03  Bernhard Herzog  <[email protected]>
605    
606            * Doc/manual/thuban-manual.xml, Doc/manual/README: New. Skeleton
607            for the Thuban manual and README with some basic information about
608            the manual
609    
610    2003-07-03  Bernhard Herzog  <[email protected]>
611    
612            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
613            Update doc-string
614            (TransientJoinedTable.create): Do not modify the column objects of
615            the input tables in place and copy all columns of the input tables
616            into the joined table after all.
617    
618            * test/test_transientdb.py
619            (TestTransientTable.test_transient_joined_table_same_column_name):
620            Update to reflect the new behavior
621            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
622            Update to reflect the new behavior
623            (TestTransientTable.test_transient_joined_table_name_collisions_dont_modify_in_place):
624            New test case for a bug which modified the column objects in place
625    
626    2003-07-02  Jonathan Coles   <[email protected]>
627    
628            * Thuban/Model/classgen.py (generate_singletons,
629            generate_uniform_distribution, generate_quantiles,
630            GenQuantiles0): Make sure maxValue isn't less than
631            one, otherwise we could divide by zero.
632    
633            * test/test_classgen.py (ClassGenTest.doClassRangeTest,
634            ClassGenTest.doClassSingleTest): Call doBoundsTest to
635            check the end classification groups against the
636            proper property values.
637            (ClassGenTest.doBoundsTest): New. Checks the first and
638            last classification groups to make sure their properties
639            are the correct upper and lower bounds for a color ramp.
640    
641    2003-07-02  Jonathan Coles   <[email protected]>
642    
643            * Thuban/Model/classgen.py (generate_singletons,
644            generate_uniform_distribution, generate_quantiles,
645            GenQuantiles0): The denominator was one to high when
646            calculating the index for the ramp causing the index
647            to never to reach one.
648    
649    2003-07-02  Jonathan Coles   <[email protected]>
650    
651            Changed the singature of ClassGroupRange.__init__ and
652            ClassGroupRange.SetRange() so that the min/max values are
653            passed as a tuple. This makes a better calling scheme for
654            when a Range object is passed instead.
655    
656            * Thuban/Model/classgen.py: Fixed parameters to
657            ClassGroupRange constructor.
658    
659            * Thuban/Model/classification.py (ClassGroupRange.__init__):
660            Consolidate the min/max parameters into a single _range which
661            can either be a tuple or a Range object.
662            (ClassGroupRange.SetRange): Consolidate the min/max parameters
663            into a single _range which can either be a tuple or a Range object.
664    
665            * Thuban/Model/load.py (SessionLoader.start_clrange): Fix
666            call to ClassGroupRange constructor to use a tuple.
667    
668            * Thuban/Model/layer.py (Layer.SetClassification): Switch
669            the classification instance variable to the new class
670            before calling _set_layer otherwise subscribers to a
671            LAYER_CHANGED event will not see any difference.
672    
673            * test/test_classification.py: Fix tests of ClassGroupRange
674            so that they use the new signature.
675    
676            * test/test_load.py: Fix use of ClassGroupRange so that it
677            uses the new signature.
678    
679            * test/test_load_0_2.py: Fix use of ClassGroupRange so that it
680            uses the new signature.
681    
682            * test/test_save.py: Fix use of ClassGroupRange so that it
683            uses the new signature.
684    
685    
686    2003-07-01  Jonathan Coles   <[email protected]>
687    
688            * Thuban/Model/classgen.py: Fixes RTbug #1972, 1971.
689            Import used objects/class from color.
690            (generate_singletons): We don't
691            need the numGroups parameter anymore because we are using
692            the new ramps with GetProperties().
693            (generate_uniform_distribution): Use new ramp method
694            GetProperties().
695            (generate_quantiles, GenQuantiles0): Use new ramp method
696            GetProperties().
697            (CustomRamp.SetNumGroups): Removed. The ramps now map
698            a value from 0 to 1 to class properties so the number
699            of groups is not needed ahead of time.
700            (CustomRamp.next): Removed. CustomRamp does not support
701            interation anymore.
702            (CustomRamp.GetProperties): Returns a ClassGroupProperties
703            object based on the index value from 0 to 1 that is
704            passed to it.
705            (GreyRamp, RedRamp, GreenRamp, BlueRamp, GreenToRedRamp):
706            Made into instances of Monochromatic class instread of
707            deriving from it.
708            (HotToCold.SetNumGroups): Removed. See CustomRamp.
709            (HotToCold.next): Removed. See CustomRamp.
710    
711            * Thuban/Model/classification.py: Fixes RTbug #1973, 1971.
712            (Classification.SetField, Classification.SetFieldType):
713            Replaced with SetFieldInfo.
714            (Classification.SetFieldInfo): New. Does a better job of
715            what SetField and SetFieldType used to do by combining
716            their function since they should really always be done
717            at the same time.
718            (Classification.SetLayer): Renamed to _set_layer.
719            (Classification._set_layer): Should only be called from
720            Layer's SetClassification. This does not cause a recursive
721            call as SetLayer did because we know that Layer knows about
722            the classification.
723    
724            * Thuban/Model/color.py: Fixes RTbug #1971.
725            (_Transparent): Renamed from Transparent so it doesn't
726            conflict with the module variable.
727            (Transparent, Black): Renamed from Color.Transparent,
728            Color.Black so they are not class variables.
729    
730            * Thuban/Model/layer.py: Fixes RTbug #1971, 1973.
731            (Layer.Destroy): We don't need to call SetClassification
732            anymore to clear out the back reference in the classifcation
733            to the layer. It's better to set it to None using _set_layer,
734            and we won't be creating another clas object too.
735            (Layer.SetClassification): Classification._set_layer is not
736            recursive so remove all the locking variables. Also clean
737            up the code so that it remains unchanged if something fails.
738    
739            * Thuban/Model/load.py: Fixes RTbug #1971.
740            (SessionLoader.start_classification): Call
741            Classification.SetFieldInfo().
742    
743            * Thuban/Model/save.py: Removed import of Color which wasn't
744            being used.
745    
746            * Thuban/UI/classgen.py: Fixes RTbug #1972.
747            (ClassGenDialog.__init__): Color ramps are now instances
748            already so we don't need to create any new objects.
749            (ClassGenDialog.OnOK): Check for numGroups is no longer
750            necessary because we never use it.
751    
752            * Thuban/UI/classifier.py: Fixes RTbug #1971.
753            (Classifier.__BuildClassification, Classifier.__SetGridTable):
754            Call Classification.SetFieldInfo() instead of SetFieldType.
755    
756            * Thuban/UI/renderer.py: Fixes RTbug #1971.
757    
758            * Thuban/UI/view.py: Fixes RTbug #1974, 1971.
759            (MapCanvas.__init__): Subscribe to the idle time event. Set
760            background color to white.
761            (MapCanvas.OnPaint): Set a flag indicating that we should
762            render the map during idle time. If we already have a bitmap
763            just draw it now.
764            (MapCanvas.OnIdle): New. Render the map only during idle time.
765            This also fixes a problem with the busy cursor under gtk.
766    
767            * test/test_classgen.py (ClassGenTest.test_generate_singletons):
768            Fix calls to generate_singletons because the signature changed.
769    
770            * test/test_classification.py: Fix color references and
771            change calls to Classification.[SetField|SetFieldType] to
772            SetFieldInfo.
773    
774            * test/test_load.py: Fix color references.
775    
776            * test/test_load_0_2.py: Fix color references.
777    
778            * test/test_save.py (SaveSessionTest.testClassifiedLayer):
779            Change calls to Classification.[SetField|SetFieldType] to
780            SetFieldInfo.
781    
782    2003-07-01  Frank Koormann   <[email protected]>
783    
784            MERGE from the greater-ms3 branch.
785    
786            * test/test_transientdb.py
787            (TestTransientTable.test_transient_joined_table_with_equal_column_names):
788            New. Test join of two tables with partly equal column names.
789    
790            * Thuban/Model/transientdb.py (TransientJoinedTable.create):
791            If duplicates in left and right tables column names are found,
792            append '_' (underscores) to the name until it is unique.
793            Create always new internal names for the resulting table and reference
794            columns in the join statement with <table>.<column>
795    
796    2003-07-01  Bernhard Herzog  <[email protected]>
797    
798            * test/test_transientdb.py
799            (TestTransientTable.test_transient_joined_table_same_column_name):
800            New. Test whether joining on columns with the same names in both
801            tables works.
802            
803            * Thuban/Model/transientdb.py (TransientJoinedTable.create): Make
804            sure to use the right internal names even when joining on field
805            with the same names in both tables. Also, detect duplicate names
806            in the joined table correctly.
807    
808    2003-07-01  Frank Koormann   <[email protected]>
809    
810            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
811            Reverse List of layers to render in same order as in desktop legend.
812    
813    2003-06-30  Jonathan Coles   <[email protected]>
814    
815            * Thuban/version.py (make_tuple): Takes a version string
816            and splits it into a tuple of at most three integers.
817            Used make_tuple() to make tuple versions of the version
818            numbers.
819    
820            * Thuban/UI/about.py: Add Thuban email addresses.
821    
822    2003-06-30  Jonathan Coles   <[email protected]>
823    
824            * Thuban/version.py: SQLite/PySQLite version dependencies
825            were too high.
826    
827    2003-06-30  Jonathan Coles   <[email protected]>
828    
829            * Thuban/version.py: Update version to 0.8.1
830            
831            * MANIFEST.in: Added Projections so that default.proj is
832            included.
833    
834    2003-06-26  Jonathan Coles   <[email protected]>
835    
836            New About box with lots more information including library
837            versions and credits. More/better version checking before
838            Thuban starts.
839    
840            * Thuban/UI/about.py: New. New About box that displays
841            library version information and credits.
842    
843            * Thuban/version.py: Added new 'versions' dictionary which
844            contains the verions of various libraries which are checked
845            when the module loads.
846            (verify_versions): Check all version numbers and returns
847            a list of errors.
848    
849            * Thuban/UI/classifier.py (Classifier.__EnableButtons):
850            Reset the status of the buttons as the situation warrants,
851            but in a better more reliable way by not relying on the
852            current status to determine what needs to change.
853    
854            * Thuban/UI/main.py (wxCHECK_VERSION): Removed. Not needed.
855            (verify_versions): Remove most of the code since it is
856            now in Thuban.version.verify_versions.o
857    
858            * Thuban/UI/mainwindow.py (MainWindow.About): Call new
859            About box in Thuban.UI.about.
860    
861            * extensions/thuban/gdalwarp.cpp (get_gdal_version): New.
862            Returns the version of gdal library being used as a string.
863    
864            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
865            Removed.
866            (get_proj_version): Return the version of PROJ that the file
867            was compiled with.
868            (get_gtk_version): Return th version of GTK that the file
869            was compiled with.
870    
871    2003-06-25  Jonathan Coles   <[email protected]>
872    
873            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
874            of the SelectPropertiesDialog should be self so the window
875            appears on top.
876            (ClassGroupPropertiesCtrl.DoEdit): The parent
877            of the SelectPropertiesDialog should be self so the window
878            appears on top.
879    
880            * Thuban/UI/resource.py: Cleaned up how we determine file
881            extensions.
882            (GetImageResource): Return an wxImage from our Resources.
883    
884    2003-06-24  Jonathan Coles   <[email protected]>
885    
886            * Thuban/UI/renderer.py (ExportRenderer.render_legend):
887            Check that a layer has a classification before trying
888            to get it. Raster layers don't have classifications.
889    
890    2003-06-23  Jonathan Coles   <[email protected]>
891            
892            * setup.py: Add Resources/XML to resource list.
893        
894    2003-06-23  Jonathan Coles   <[email protected]>
895    
896            * setup.cfg: Fix copyright dates
897        
898    2003-06-23  Jonathan Coles   <[email protected]>
899    
900            * MANIFEST.in: Update with Resources/XML
901    
902            * setup.py: Don't include Locale resources yet as we don't
903            have any and it causes problems building the distribution
904            for Windows. Update version to 0.8.0.
905    
906            * Doc/thuban.dtd: Removed since it is now in Resources/XML.
907    
908            * Thuban/UI/mainwindow.py: Add blank line at the end because
909            file was not being read correctly building the Windows
910            distribution.
911    
912    2003-06-23  Jonathan Coles   <[email protected]>
913    
914            * Thuban/UI/mainwindow.py (MainWindow.About): Fix text.
915    
916            * Thuban/version.py: Temporarily update longversion for
917            the 0.8 release so that it doesn't have the cvs revision.
918    
919    2003-06-23  Jonathan Coles   <[email protected]>
920    
921            * Thuban/UI/common.py (ThubanBeginBusyCursor): Call wxSafeYield
922            to make sure that we don't create reentrant possibilities with
923            wxYield.
924    
925            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxBeginBusyCursor()
926            directly to avoid the wxSafeYield() call which generates an
927            OnPaint event causing infinite recursion. Don't try to catch
928            exception anymore. This was for before there were limits on map
929            scaling.
930    
931    2003-06-23  Bernhard Herzog  <[email protected]>
932    
933            Bug fix for RT #1961:
934    
935            * Thuban/Model/load.py (SessionLoader.start_derivedshapesource):
936            Register DerivedShapestores with the session
937    
938            * Thuban/Model/session.py (Session.Tables): Make sure each table
939            is only listed once.
940    
941            * test/test_load.py (TestJoinedTable.test): Add check_format call.
942            Update file contents to match the one written out.
943    
944    2003-06-20  Bernhard Herzog  <[email protected]>
945    
946            * test/xmlsupport.py (SaxEventLister.startElementNS)
947            (SaxEventLister.endElementNS): Do not include the qname. Python
948            2.2.1 and 2.2.2 and 2.2.3 differ in this regard. In 2.2.1 qname it
949            is (presumably incorrectly) None, whereas it's a string with the
950            element name in the later versions.
951    
952            * test/test_xmlsupport.py (TestEventList.test_even_list_simple)
953            (TestEventList.test_even_list_namespace): Update tests to reflect
954            the new behaviour
955            (TestEventList.test_even_list_id_normalization): Fix doc-string
956    
957    2003-06-20  Jonathan Coles   <[email protected]>
958    
959            * Thuban/Model/layer.py (BaseLayer.HasShapes): New. Overridden
960            by deriving classes to determine if that layer supports shapes.
961            (Layer): Override HasShapes and return true.
962    
963            * Thuban/UI/classgen.py: Use Thuban[Begin|End]BusyCursor()
964            instead of a direct call to wx[Begin|End]CusyCursor().
965            (GenUniquePanel._OnRetrieve): Set busy cursor while retrieving
966            table data.
967    
968            * Thuban/UI/common.py (ThubanBeginBusyCursor, ThubanEndBusyCursor):
969            New. Wrappers around the wxWindows functions that allow us to
970            make additional calls such as wxYield which gives the native
971            system a chance to update the cursor correctly.
972    
973            * Thuban/UI/tableview.py: Use Thuban[Begin|End]BusyCursor()
974            instead of a direct call to wx[Begin|End]CusyCursor().
975    
976            * Thuban/UI/view.py: Use Thuban[Begin|End]BusyCursor()
977            instead of a direct call to wx[Begin|End]CusyCursor().
978            (MapCanvas.find_shape_at): Check if the current search layer
979            support shapes, otherwise go on to the next layer.
980    
981            * test/test_layer.py: Add tests in each type of layer for
982            HasClassification() and HasShapes()
983    
984    2003-06-20  Jonathan Coles   <[email protected]>
985    
986            * Thuban/UI/view.py (MapCanvas.OnPaint): Call wxYield after
987            turning on the busy cursor to allow the system to change the
988            cursor before we begin painting. This fixes a problem that
989            was occuring only under GTK. Fixes RTbug #1840.
990    
991    2003-06-20  Bernhard Herzog  <[email protected]>
992    
993            * Resources/XML/thuban-0.8.dtd: New DTD for the new file format
994            version.
995    
996            * Thuban/Model/save.py (sort_data_stores): New. Make topological
997            sort of the data sources so they can be written with sources that
998            data sources that depend on other data sources come after the
999            sources they depend on.
1000            (SessionSaver.__init__): Add idmap instance variable to map from
1001            objects to the ids used in the file.
1002            (SessionSaver.get_id, SessionSaver.define_id)
1003            (SessionSaver.has_id): New. Methods to manage the idmap
1004            (SessionSaver.write): Use thuban-0.8.dtd
1005            (SessionSaver.write_session): Add a namespace on the session and
1006            write out the data sources before the maps.
1007            (SessionSaver.write_data_containers): New. Write the data
1008            containers.
1009            (SessionSaver.write_layer): Layer elements now refer to a
1010            shapestore and don't contain filenames anymore.
1011    
1012            * Thuban/Model/load.py (LoadError): Exception class to raise when
1013            errors in the files are discovered
1014            (SessionLoader.__init__): Define dispatchers for elements with a
1015            thuban-0.8 namespace too.
1016            (SessionLoader.check_attrs): New helper method to check and
1017            convert attributes
1018            (AttrDesc): New. Helper class for SessionLoader.check_attrs
1019            (SessionLoader.start_fileshapesource)
1020            (SessionLoader.start_derivedshapesource)
1021            (SessionLoader.start_filetable, SessionLoader.start_jointable):
1022            Handlers for the new elements in the new fileformat
1023            (SessionLoader.start_layer): Handle the shapestore attribute in
1024            addition to filename.
1025            (SessionLoader.start_table, SessionLoader.end_table): Removed.
1026            They were never used in the old formats and aren't needed for the
1027            new.
1028    
1029            * Thuban/Model/session.py (Session.DataContainers): New method to
1030            return all "data containers", i.e. shapestores and tables
1031    
1032            * test/xmlsupport.py (SaxEventLister.__init__)
1033            (SaxEventLister.startElementNS, sax_eventlist): Add support to
1034            normalize IDs.
1035    
1036            * test/test_xmlsupport.py
1037            (TestEventList.test_even_list_id_normalization): New test case for
1038            id normalization
1039    
1040            * test/test_load.py (LoadSessionTest.check_format): Use ID
1041            normalization
1042            (LoadSessionTest.thubanids, LoadSessionTest.thubanidrefs): New
1043            class atrributes used for ID normalization
1044            (TestSingleLayer, TestLayerVisibility, TestLabels.test)
1045            (TestLayerProjection.test, TestRasterLayer.test): Adapt to new
1046            file format
1047            (TestJoinedTable): New test for loading sessions with joined
1048            tables.
1049            (TestLoadError): New. Test whether missing required attributes
1050            cause a LoadError.
1051    
1052            * test/test_save.py (SaveSessionTest.thubanids)
1053            (SaveSessionTest.thubanidrefs): New class attributes for ID
1054            normalization in .thuban files.
1055            (SaveSessionTest.compare_xml): Use id-normalization.
1056            (SaveSessionTest.testEmptySession)
1057            (SaveSessionTest.testLayerProjection)
1058            (SaveSessionTest.testRasterLayer)
1059            (SaveSessionTest.testClassifiedLayer): Adapt to new file format.
1060            (SaveSessionTest.testLayerProjection): The filename used was the
1061            same as for testSingleLayer. Use a different one.
1062            (SaveSessionTest.test_dbf_table)
1063            (SaveSessionTest.test_joined_table): New test cases for saving the
1064            new data sources structures.
1065            (TestStoreSort, MockDataStore): Classes to test the sorting of the
1066            data stores for writing.
1067    
1068            * test/runtests.py: Add CVS keywords
1069    
1070    2003-06-20  Jonathan Coles   <[email protected]>
1071    
1072            * test/test_session.py
1073            (UnreferencedTablesTests.test_unreferenced_tables_with_joins):
1074            Use the cultural_landmark-point.dbf file for the store so that
1075            the table rows and shape count match.
1076    
1077    2003-06-20  Jonathan Coles   <[email protected]>
1078    
1079            * Thuban/Model/data.py (DerivedShapeStore.__init__): Raise
1080            an exception if the number of shapes is different from the
1081            number of rows in the table. Address RTbug #1933.
1082    
1083            * test/test_layer.py (TestLayer.test_derived_store): Add
1084            a test for the new exception in DerivedShapeStore.__init__.
1085    
1086            * test/support.py (FloatTestCase): Removed since there is
1087            already FloatComparisonMixin. Fixes RTbug #1954.
1088            (FloatComparisonMixin.assertFloatEqual): Include test for
1089            infinity that was part of FloatTestCase.
1090    
1091            * test/test_range.py (RangeTest): Inherit from
1092            support.FloatComparisonMixin now that we don't have
1093            support.FloatTestCase.
1094    
1095    2003-06-20  Bernhard Herzog  <[email protected]>
1096    
1097            * test/test_save.py (SaxEventLister, sax_eventlist): Removed. Use
1098            the implementation in xmlsupport instead.
1099            (SaveSessionTest.compare_xml): sax_eventlist is now in xmlsupport
1100    
1101            * test/test_proj.py: Import sax_eventlist from xmlsupport instead
1102            of test_save
1103    
1104    2003-06-20  Bernhard Herzog  <[email protected]>
1105    
1106            * test/test_load.py (LoadSessionTest.check_format): New helper
1107            method to make sure the test files we load might have been written
1108            by the current thuban version.
1109            (ClassificationTest.TestLayers, TestSingleLayer.test)
1110            (TestLayerVisibility.test, TestClassification.test)
1111            (TestLabels.test, TestLayerProjection.test, TestRasterLayer.test):
1112            Add check_format() calls and fix the thuban data to match the data
1113            that would be written by saving the session loaded from it.
1114    
1115            * test/xmlsupport.py (SaxEventLister, sax_eventlist): Copies of
1116            the same class and function in test_save.
1117    
1118            * test/test_xmlsupport.py (TestEventList): New. test cases for
1119            sax_eventlist
1120    
1121    2003-06-20  Bernhard Herzog  <[email protected]>
1122    
1123            * Resources/XML/thuban.dtd: Add comment about which versions of
1124            Thuban are covered by this DTD
1125            (map): Fix content model for layers and raster layers. There can
1126            be any number or layers and raster layers in any order.
1127    
1128    2003-06-20  Jonathan Coles   <[email protected]>
1129    
1130            This is mainly about fixing RTbug #1949.
1131    
1132            * Thuban/Model/classification.py: Remove "from __future__"
1133            import statement since python 2.2 is the earliest supported
1134            version.
1135    
1136            * Thuban/Model/proj.py (Projection.GetProjectedUnits): New.
1137            Currently returns PROJ_UNITS_METERS or PROJ_UNITS_DEGREES
1138            depending on the units this projection *forwards* into.
1139    
1140            * Thuban/Model/save.py (SessionSaver.write_classification):
1141            Remove unnecessary use of lambdas and nested functions.
1142    
1143            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Do scale
1144            adjustment here if the map projection uses degrees.
1145    
1146            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Remove
1147            scale adjust code since it is now done before calling
1148            this method. Don't do anything if the map projection
1149            is None.
1150    
1151    2003-06-19  Bernhard Herzog  <[email protected]>
1152    
1153            Move version specific load tests to their own file.
1154    
1155            * test/test_load.py: Expand the doc-string to explain a bit how to
1156            handle file format changes.
1157            (TestClassification.test): Update the docstring as this test is
1158            not about Thuban 0.2 anymore.
1159    
1160            * test/test_load_0_2.py: New file with the load tests for thuban
1161            files created with Thuban 0.2 and earlier.
1162    
1163    2003-06-19  Bernhard Herzog  <[email protected]>
1164    
1165            Add XML validation to some of the tests. Validation will only be
1166            done if pyRXP is installed (http://reportlab.com/xml/pyrxp.html).
1167            To make the DTD available to the test cases it's moved into
1168            Resources/XML
1169    
1170            * Resources/XML/thuban.dtd: New. This is now the real Thuban DTD
1171            for versions up to and including 0.2. Two slight changes: added an
1172            encoding specification and fixed the comment which refered to
1173            GRASS, not Thuban
1174    
1175            * test/xmlsupport.py: New support module for tests involving XML.
1176            Currently there's a mix-in class for XML validation.
1177    
1178            * test/test_xmlsupport.py: New. Tests for the xmlsupport module
1179    
1180            * test/test_save.py (SaveSessionTest): Derive from ValidationTest
1181            so that we can validate the
1182            (SaveSessionTest.testEmptySession)
1183            (SaveSessionTest.testSingleLayer)
1184            (SaveSessionTest.testSingleLayer)
1185            (SaveSessionTest.testLayerProjection)
1186            (SaveSessionTest.testRasterLayer)
1187            (SaveSessionTest.testClassifiedLayer): Validate the generated XML
1188    
1189            * test/runtests.py (main): Call print_additional_summary instead
1190            of print_garbage_information
1191    
1192            * test/support.py (resource_dir): New function to return the
1193            "Resource" subdirectory
1194            (print_additional_summary): New function to combine several
1195            summary functions
1196            (run_tests): Use print_additional_summary instead of calling
1197            print_garbage_information directly
1198    
1199    2003-06-19  Bernhard Herzog  <[email protected]>
1200    
1201            * Doc/thuban.dtd (classification): Correct the content model of
1202            the classification element.
1203            (projection): Add the "name" attribute
1204    
1205    2003-06-19  Frank Koormann   <[email protected]>
1206    
1207            MERGE from the greater-ms3 branch.
1208    
1209            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
1210            scale if projection is latlong to get better estimate.
1211    
1212            Fix problem of hidden properties dialog under windows after double
1213            click on layer tree:
1214            The tree control always gets an Expanded / Collapsed event after
1215            the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply
1216            raises the already displayed window.
1217    
1218            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
1219            raiseProperties initialized to prevent endless loops
1220            (LegendTree._OnItemActivated): Depending on self.raiseProperties
1221            simply raise the properties or open the dialog and issue a second
1222            event.
1223    
1224    2003-06-18  Jonathan Coles   <[email protected]>
1225    
1226            * setup.py: Fix a few problems that occured under Windows.
1227    
1228  2003-06-18  Jonathan Coles   <[email protected]>  2003-06-18  Jonathan Coles   <[email protected]>
1229    
1230          When Thuban loaded the map was redrawn twice because the          When Thuban loaded the map was redrawn twice because the

Legend:
Removed from v.1237  
changed lines
  Added in v.1517

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26