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

Legend:
Removed from v.1191  
changed lines
  Added in v.1545

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26