/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Diff of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 743 by jonathan, Fri Apr 25 10:26:03 2003 UTC revision 908 by bh, Fri May 16 15:01:18 2003 UTC
# Line 1  Line 1 
1    2003-05-16  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/Model/table.py (Table): Remove this compatibility alias
4            for DBFTable.
5    
6            * test/test_table.py: Import DBFTable as Table because that alias
7            doesn't exist anymore.
8    
9            * Thuban/UI/classgen.py: Remove some unused imports
10    
11    2003-05-14  Jonathan Coles   <[email protected]>
12    
13            * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
14            Fix docstring.
15            (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
16            (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
17            values of the supplied range to determine the beginning and end
18            bounds of the generated classes.
19    
20            * Thuban/Model/range.py (Range.number_re): Now accepts floats that
21            do not have a leading 0 (.5 is now accepted as well as 0.5).
22    
23            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
24            call to ClassGenerator.GenUniformDistribution.
25    
26            * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
27            layout bug with the 'Projection' label.
28    
29            * test/support.py (FloatTestCase): New. Needed for the Range tests.
30    
31            * test/test_range.py: New. Imported from SciParam.
32    
33    2003-05-12  Jonathan Coles   <[email protected]>
34    
35            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
36            to table.UniqueValues() with calls that retrieve all the values
37            from the table. This will need to be replaced by a method on table
38            which can simply return the list (perhaps more efficiently).
39    
40    2003-05-12  Jonathan Coles   <[email protected]>
41    
42            The return value of ClassGenerator.CalculateQuantiles has changed.
43            Refer to the documentation for details.
44    
45            * test/test_classgen.py: Modified Quantile tests to use the
46            new return values.
47    
48            * Thuban/Model/classgen.py
49            (ClassGenerator.GenQuantiles): Add comments describing the parameters,
50            use new return values from CalculateQuantiles to produce the correct
51            range bounds in the Classification.
52            (ClassGenerator.CalculateQuantiles): Add more comments describing
53            the return values and parameters. Make minor adjustments to improve
54            the legibility of the code. Fix problem with adjusted not being set
55            in most cases.
56    
57    2003-05-12  Frank Koormann <[email protected]>
58            
59            * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
60            and latin1. Fixes #1851 finally.
61    
62    2003-05-09  Jonathan Coles   <[email protected]>
63    
64            * test/test_classgen.py: New. Tests the Quantile algorithm.
65    
66            * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
67            Clean up debugging statement, add comments, fix a small bug in the
68            returned adjusted percentiles.
69            
70    2003-05-09  Jonathan Coles   <[email protected]>
71    
72            Introduces Range class from SciParam into the ClassGroupRange class,
73            and such ranges can now be saved and loaded from disk.
74    
75            Quantiles are now available in the Classification Generator.
76    
77            Initial support for building Queries on a table. Doesn't do anything
78            but run some tests.
79    
80            * Thuban/Model/classification.py: Explicit imports.
81            (ClassGroupRange): Use the Range class to store the underlying
82            range information. The interface remains the same, except for
83            GetRange(), and you can also supply a Range object as the min
84            parameter to SetRange or __init__.
85    
86            * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
87            string appropriately for use in Thuban. Fixes RTbug #1851.
88            (SessionLoader.end_projection): Handle the context of the
89            projection tag a bit better by looking at what objects are not
90            None. There was an assumption that a projection tag for a map
91            could occur before any layers.
92            (SessionLoader.start_clrange): Provide backward compatibility for
93            reading min/max values as well as the new range parameter.
94    
95            * Thuban/Model/map.py: Explicit imports.
96    
97            * Thuban/Model/resource.py: Import _.
98            (ProjFileSaver.write): write header using projfile.dtd.
99    
100            * Thuban/Model/save.py: Explicit imports.
101            (XMLWriter.encode): New. Encode the given string from a format
102            used by Thuban into UTF-8. Fixes RTbug #1851.
103    
104            * Thuban/UI/classgen.py: Explicit imports.
105            (ClassGenDialog.__init__): Clean up the code and add support
106            for Quantiles.
107            (ClassGenDialog.OnOK): Add support for Quantiles.
108            (GenQuantilesPanel): New. Input panel for Quantiles.
109            (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
110            GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
111    
112            * Thuban/Model/classgen.py: New. Contains all the classes named above.
113    
114            * Thuban/UI/classifier.py: Explicit imports.
115            (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
116            ClassTable.SetValueAsCustom): Reworked to use new Range class.
117    
118            * Thuban/UI/legend.py: Explicit imports.
119    
120            * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
121            a Table menu and associated method calls.
122            (MainWindow.choose_color): Removed. No longer needed.
123    
124            * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
125            should be disabled if no projection is selected in the available
126            list.
127    
128            * Thuban/UI/renderer.py: Explicit imports.
129    
130            * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
131            with correctly selecting the rows and issuing the right events.
132            Be sure to call Skip() to allow the grid to do some of its own
133            handling which allows the rows to actually be selected.
134            (LayerTableGrid.select_shapes): Rename from select_shape. Supports
135            selecting multiple shapes.
136            (LayerTableFrame): Support for building Queries.
137            (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
138    
139            * Thuban/UI/tree.py: Explicit imports.
140    
141            * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
142            table view can call it.
143    
144            * test/test_classification.py: Explicit imports.
145            (TestClassification.test_ClassGroupRange): Fix test for new
146            Range class.
147    
148            * Doc/thuban.dtd: Add range parameter for clrange.
149    
150            * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
151            object in ClassGroupRange, and also uesd for inputting ranges in
152            the classifer table and elsewhere.
153    
154            * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
155            yet.
156    
157    2003-05-09  Frank Koormann <[email protected]>
158    
159            * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
160    
161    2003-05-08  Frank Koormann <[email protected]>
162    
163            Coding style updates
164    
165            * test/test_scalebar.py: Replaced tab indentation by spaces.
166    
167            * Thuban/UI/scalebar.py: Explicit imports.
168    
169    2003-05-08  Frank Koormann <[email protected]>
170    
171            * Thuban/UI/scalebar.py
172            (ScaleBar.DrawScalebar): Format string bug fixed.
173    
174    2003-05-08  Frank Koormann <[email protected]>
175    
176            Reorganization of scalebar component (no wx in Thuban/Model)
177    
178            * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
179            (deriveInterval):
180            Calculate scalebar interval and unit which fits in width for scale.
181            (roundInterval): Round float.
182    
183            * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
184    
185            * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
186    
187            * Thuban/UI/legend.py: Import Thuban.UI.scalebar
188    
189    2003-05-08  Frank Koormann <[email protected]>
190    
191            * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
192            Initialize ScaleBar with canvas.map
193    
194            * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
195            round intervals to display smarter lengths
196            (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
197            layer. If the maps has no projection applied grey the scalebar.
198    
199    2003-05-07  Frank Koormann <[email protected]>
200            
201            Basic Scalebar features added.
202    
203            * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
204    
205            * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
206            (ScaleBarBitmap): New, links the scalebar bitmap with view messages
207            and the renderer.
208    
209            * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
210    
211            * Thuban/UI/messages.py: SCALE_CHANGED added.
212    
213    2003-05-07  Bernhard Herzog  <[email protected]>
214    
215            * Thuban/Model/session.py (Session.__init__): New instance
216            variable shapestores to hold a list of all open shapestore objects
217            (Session.ShapeStores): New. Accessor method for the shapestores
218            list.
219            (Session._add_shapestore, Session._clean_weak_store_refs): New.
220            Internal methods to maintain the shapestores list.
221            (Session.Tables): New. Return all tables open in the session.
222            (Session.OpenShapefile): Insert the new ShapeStore into the
223            shapestores list.
224    
225            * test/test_session.py (TestSessionSimple.test_initial_state): Add
226            tests for ShapeStores and Tables
227            (TestSessionWithContent.test_shape_stores)
228            (TestSessionWithContent.test_tables): New. Test cases for
229            ShapeStores and Tables
230    
231    2003-05-07  Bernhard Herzog  <[email protected]>
232    
233            * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
234            Add comments about the optimizations used.
235            (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
236            Implement the ReadValue table interface method.
237    
238            * test/test_transientdb.py
239            (TestTransientTable.run_iceland_political_tests)
240            (TestTransientTable.test_transient_joined_table): Add tests for
241            ReadValue
242    
243    2003-05-07  Frank Koormann <[email protected]>
244    
245            * Resources/Bitmaps/fulllayerextent.xpm,
246            Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
247            new icons.
248    
249    2003-05-06  Bernhard Herzog  <[email protected]>
250    
251            * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
252            New. Simply delegate to the transient table's version.
253    
254            * test/test_transientdb.py
255            (TestTransientTable.test_auto_transient_table_query): New. Test
256            case for AutoTransientTable's SimpleQuery
257    
258    2003-05-06  Bernhard Herzog  <[email protected]>
259    
260            * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
261            Implement a simple query method for the query dialog
262            (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
263            the row index or shapeid.
264            (TransientTable.create): Insert the right value of the row index
265            (TransientJoinedTable.create): Copy the row index of the left
266            table to the joined result table
267    
268            * test/test_transientdb.py
269            (TestTransientTable.test_transient_table_read_twice): Fix
270            doc-string
271            (TestTransientTable.test_transient_table_query): New. Test for the
272            SimpleQuery method
273    
274    2003-05-06  Bernhard Herzog  <[email protected]>
275    
276            Convert all table users to use the new table interface. This only
277            covers Thuban itself, not GREAT-ER or other applications built on
278            Thuban yet, so the compatibility interface stays in place for the
279            time being but it now issues DeprecationWarnings.
280    
281            Finally, the new Table interface has a new method, HasColumn.
282    
283            * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
284            issue deprecation warnings when they're. The warnings refer to the
285            caller of the method.
286            (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
287            for the deprecation warnings
288    
289            * test/test_table.py: Ignore the deprecation warnings for the old
290            table in the tests in this module. The purpose of the tests is to
291            test the old interface, after all.
292    
293            * test/test_transientdb.py
294            (TestTransientTable.run_iceland_political_tests): Use the
295            constants for the types. Add a test for HasColumn
296            (TestTransientTable.test_transient_joined_table): Adapt to new
297            table interface. Add a test for HasColumn
298            (TestTransientTable.test_transient_table_read_twice): Adapt to new
299            table interface
300    
301            * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
302            Adapt to new table interface
303    
304            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
305            new table interface
306    
307            * Thuban/UI/controls.py (RecordListCtrl.fill_list)
308            (RecordTable.SetTable): Adapt to new table interface
309    
310            * Thuban/UI/classifier.py (Classifier.__init__)
311            (Classifier.__init__): Adapt to new table interface
312    
313            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
314            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
315            to new table interface
316    
317            * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
318            (AutoTransientTable.HasColumn): Implement the new table interface
319            method
320            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
321            (AutoTransientTable.UniqueValues): Adapt to new table interface
322    
323            * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
324            Adapt to new table interface
325    
326            * test/test_layer.py (TestLayer.open_shapefile): Helper method to
327            simplify opening shapefiles a bit easier.
328            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
329            (TestLayer.test_point_layer): Use the new helper method
330            (TestLayer.test_get_field_type): New. Test for the GetFieldType
331            method
332    
333            * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
334            the new table method
335    
336            * test/test_memory_table.py (TestMemoryTable.test_has_column):
337            Test for the new table method HasColumn
338    
339    2003-05-06  Jonathan Coles   <[email protected]>
340    
341            Addresses the "Selection Extent" wish of RTbug #1787.
342    
343            * Resources/Bitmaps/fulllayerextent.xpm,
344            Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
345            extent. These are just place holders for the real bitmaps.
346    
347            * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
348            calculate the bounding box once (the first time compute_bbox() is
349            called).
350            (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
351            the bounding box for the shapes in lat/long coordinates.
352    
353            * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
354            option.
355            (MainWindow.has_selected_shapes): New. Returns true if there are
356            any selected shapes.
357            (MainWindow.FullSelectionExtent): New. Calls
358            MapCanvas.FitSelectedToWindow() when the user selects the menu option.
359            (_has_selected_shapes): New. Returns true if there are any
360            selected shapes.
361    
362            * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
363            true if there are any selected shapes.
364    
365            * Thuban/UI/view.py (MapCanvas): Added delegated method
366            HasSelectedShapes.
367            (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
368            shapes on the canvas using the map projection (if any).
369    
370            * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
371            for Layer.ShapesBoundingBox().
372    
373    2003-05-06  Bernhard Herzog  <[email protected]>
374    
375            * Resources/Projections/defaults.proj: Fix spelling of Mercator
376    
377    2003-05-05  Jonathan Coles   <[email protected]>
378    
379            Addresses the "Full Layer Extent" wish of RTbug #1787.
380    
381            * Resources/Projections/defaults.proj: Added UK National Grid.
382    
383            * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
384            (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
385            when the user selects the menu option.
386    
387            * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
388            scales the given layer on the canvas using the map projection.
389    
390    2003-05-05  Bernhard Herzog  <[email protected]>
391    
392            Convert the table implementations to a new table interface. All
393            tables use a common mixin class to provide backwards compatibility
394            until all table users have been updated.
395    
396            * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
397            provide backwards compatibility for table classes implementing the
398            new interface
399            (DBFTable, MemoryTable): Implement the new table interface. Use
400            OldTableInterfaceMixin as base for compatibility
401            (DBFColumn, MemoryColumn): New. Column description for DBFTable
402            and MemoryTable resp.
403    
404            * test/test_dbf_table.py: New. Test cases for the DBFTable with
405            the new table interface.
406    
407            * test/test_memory_table.py: New. Test cases for the MemoryTable
408            with the new table interface.
409    
410            * test/test_table.py: Document the all tests in this file as only
411            for backwards compatibility. The equivalent tests for the new
412            interface are in test_memory_table.py and test_dbf_table.py
413            (MemoryTableTest.test_read): field_info should be returning tuples
414            with four items
415            (MemoryTableTest.test_write): Make doc-string a more precise.
416    
417            * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
418            table interface. Derive from from OldTableInterfaceMixin for
419            compatibility.
420            (TransientTableBase.create): New intance variable column_map to
421            map from names and indices to column objects
422            (TransientTable.create): Use the new table interface of the input
423            table
424            (AutoTransientTable): Convert to new table interface. Derive from
425            from OldTableInterfaceMixin for compatibility.
426            (AutoTransientTable.write_record): Removed. It's not implemented
427            yet and we still have to decide how to handle writing with the new
428            table and data framework.
429    
430            * test/test_transientdb.py
431            (TestTransientTable.run_iceland_political_tests)
432            (TestTransientTable.test_transient_joined_table): Use the new
433            table interface
434    
435    2003-05-05  Jonathan Coles   <[email protected]>
436    
437            This is namely a collection of UI updates to improve user interactivity.
438            Tabbing between controls now exists and you can use ESC to close dialog
439            boxes; ENTER will active the default button.
440    
441            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
442            order that the controls are created so that tabbing works correctly.
443            (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
444            wxDialog can handle the default button correctly.
445            (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
446            same reasons as for OnOK.
447            (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
448            when we ask the table for the maximum/minimum values of a field
449            which could take a very long time.
450    
451            * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
452            order that the controls are created so that tabbing works correctly.
453            (SelectPropertiesDialog.__init__): Rearrange the order that the
454            controls are created so that tabbing works correctly.
455    
456            * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
457            to derive from a wxDialog but behave like the original implementation
458            which was derived from a wxFrame. wxDialog provides useful key
459            handling functionality like ESC calling OnCancel and ENTER calling
460            OnOK which is lost with wxFrame.
461    
462            * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
463            new dialogs.
464    
465            * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
466            order that the controls are created so that tabbing works correctly.
467            (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
468            (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
469            (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
470            (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
471            can provide the "UK National Grid" as a default projection.
472            (UTMPanel.__init__): Rearrange the order that the controls are
473            created so that tabbing works correctly.
474    
475    2003-05-05  Bernhard Herzog  <[email protected]>
476    
477            * extensions/thuban/wxproj.cpp: Fix some of the comments.
478            (project_point): If a map projection but no layer projection is
479            given, convert degrees to radians before applying the map
480            projection.
481    
482            * Thuban/UI/tableview.py (TableGrid.disallow_messages)
483            (TableGrid.allow_messages): New methods to make it possible to
484            inhibit message sending.
485            (TableGrid.issue): Only send the message if not inhibited.
486            (LayerTableGrid.select_shape): Use the new methods to make sure
487            that no ROW_SELECTED message is sent while we're updating the
488            selected rows to match the selected shapes.
489    
490    2003-05-02  Jan-Oliver Wagner <[email protected]>
491    
492            Implementation of MemoryTable.
493    
494            * Thuban/Model/table.py (MemoryTable): New. Quite simple table
495            implementation that operates on a list of tuples. All of the data
496            are kept in the memory.
497    
498            * test/test_table.py (MemoryTableTest): New.
499    
500            * test/test_transientdb.py (SimpleTable): Removed.
501            (TestTransientTable.test_transient_joined_table,
502            (TestTransientTable.test_transient_table_read_twice): Replaced
503            SimpleTable by MemoryTable.
504    
505    2003-04-30  Jonathan Coles   <[email protected]>
506    
507            * Data/iceland_sample.thuban: Now contains correct projections
508            for each of the layers.
509    
510            * Resources/Projections/defaults.proj: Geographic projection
511            contains unit conversion parameter.
512    
513    2003-04-30  Jonathan Coles   <[email protected]>
514    
515            The most important part of this putback is the projection changes.
516            It should now be possible to specify the projection that a layer
517            is in and then specify a different projection for the map. The
518            projection dialog has an extra parameter for a geographic projection
519            which lets the user select if the input is in degrees or radians.
520    
521            * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
522            to say that the parameter is a tuple of unprojected
523            points (which is what the callers to this method were assuming).
524            Also, since the points are unprojected we need to projected them.
525    
526            * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
527            LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
528            groups are selected, move the layer up/down. Fixes RTbug #1833.
529    
530            * Thuban/UI/mainwindow.py: Move menu item map_rename up.
531    
532            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
533            parameter in call to SetClientData.
534            (GeoPanel): Add support for selecting the units that the
535            source data is in (Radians or Degrees).
536    
537            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
538            the rendering loop by reducing the number of if's, removing the
539            unnecessary try/except block, and checking if the old group
540            is the same as the new one (which happens a lot if there is
541            no classification, or lots of shapes are in the same group).
542    
543            * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
544            around the redraw routine to try to catch problems that the user
545            may create by selecting invalid projections for the data set and
546            map. Clears the display if there are any problems and prints the
547            error.
548            (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
549            rectangle.
550    
551            * extensions/thuban/wxproj.cpp (project_point): First invert the
552            supplied point (which should be in projected coordinates) using
553            the layer's projection and then project the point using the
554            map's projection.
555            (project_points): Use project_point() to project each point.
556    
557    2003-04-30  Jan-Oliver Wagner <[email protected]>
558    
559            * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
560            don't set the Classification to None if the classfication field
561            is None (ie only a DEFAULT).
562    
563    2003-04-30  Bernhard Herzog  <[email protected]>
564    
565            * Thuban/UI/view.py: Fix some typos.
566    
567            * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
568            not pop up the dialog if the selection becomes empty (this could
569            happen if e.g. a new selection is opened while the identify tool
570            is active and dialog had been closed)
571    
572    2003-04-30  Bernhard Herzog  <[email protected]>
573    
574            * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
575            instance variable read_record_last_result
576            (TransientTableBase.read_record): Make sure reading the same
577            record twice works. The implementation uses the new instance
578            variable read_record_last_result
579    
580            * test/test_transientdb.py
581            (TestTransientTable.test_transient_table_read_twice): New test
582            case for the above bug-fix.
583    
584    2003-04-29  Jonathan Coles   <[email protected]>
585    
586            * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
587    
588            * Thuban/UI/classgen.py: Remove all uses of Str2Num.
589    
590            * Thuban/UI/classifier.py: Remove all uses of Str2Num.
591            (ClassTable.SetValueAsCustom): Rename keyword argument in
592            ClassGroup* constructors to match argument name.
593    
594    2003-04-29  Bernhard Herzog  <[email protected]>
595    
596            * Thuban/Model/session.py (Session.Destroy): Explicitly close the
597            transient DB if it exists to make sure it doesn't leave a journal
598            file in the temp directory.
599    
600            * Thuban/Model/transientdb.py (TransientDatabase.close): Set
601            self.conn to None after closing the connection to make sure it's
602            not closed twice
603    
604    2003-04-29  Jonathan Coles   <[email protected]>
605    
606            Add a visible parameter in the layer XML tag. The default value is
607            "true". If anything other than "false" is specified we also assume
608            "true". Addresses RTbug #1025.
609    
610            * Doc/thuban.dtd: Add visible parameter to a layer.
611    
612            * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
613            of visible from 1 to True.
614            (Layer.__init__): Change default value of visible from 1 to True.
615    
616            * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
617            parameter.
618    
619            * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
620            parameter.
621    
622            * test/test_load.py: Add new test data contents_test_visible.
623            (LoadSessionTest.setUp): save test data.
624            (LoadSessionTest.testLayerVisibility): Test if the visible flag
625            is loaded correctly.
626    
627            * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
628            for saving an invisible layer.
629    
630    2003-04-29  Jonathan Coles   <[email protected]>
631    
632            * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
633            legend dialog box and tell it to change its map to the one
634            supplied to SetMap(). Fixes RTbug #1770.
635    
636    2003-04-29  Bernhard Herzog  <[email protected]>
637    
638            Next step of table implementation. Introduce a transient database
639            using SQLite that some of the data is copied to on demand. This
640            allows us to do joins and other operations that require an index
641            for good performance with reasonable efficiency. Thuban now needs
642            SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
643            haven't tested that.
644            
645            * Thuban/Model/transientdb.py: New. Transient database
646            implementation.
647    
648            * test/test_transientdb.py: New. Tests for the transient DB
649            classes.
650    
651            * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
652            classes to help automatically remove temporary files and
653            directories.
654            (Session.__init__): New instance variables temp_dir for the
655            temporary directory and transient_db for the SQLite database
656            (Session.temp_directory): New. Create a temporary directory if not
657            yet done and return its name. Use AutoRemoveDir to have it
658            automatically deleted
659            (Session.TransientDB): Instantiate the transient database if not
660            done yet and return it.
661    
662            * Thuban/Model/data.py (ShapefileStore.__init__): Use an
663            AutoTransientTable so that data is copied to the transient DB on
664            demand.
665            (SimpleStore): New class that simply combines a table and a
666            shapefile
667    
668            * Thuban/Model/table.py (Table, DBFTable): Rename Table into
669            DBFTable and update its doc-string to reflect the fact that this
670            is only the table interface to a DBF file. Table is now an alias
671            for DBFTable for temporary backwards compatibility.
672    
673            * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
674            the last reference to the session goes away so that the temporary
675            files are removed properly.
676    
677            * test/test_load.py (LoadSessionTest.tearDown): Remove the
678            reference to the session to make sure the temporary files are
679            removed.
680    
681    2003-04-29  Bernhard Herzog  <[email protected]>
682    
683            * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
684            the __parser instance variable into a normal local variable in
685            read. It's only used there and read will never be called more than
686            once. Plus it introduces a reference cycle that keeps can keep the
687            session object alive for a long time.
688    
689    2003-04-29  Jonathan Coles   <[email protected]>
690    
691            * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
692            Projection an immutable item. Fixes RTbug #1825.
693            (Projection.__init__): Initialize instance variables here.
694            (ProjFile.Replace): New. Replace the given projection object with
695            the new projection object. This solves the problem of needing the
696            mutator Projection.SetProjection() in the ProjFrame class and
697            allows a projection to change parameters without changing its
698            location in the file.
699    
700            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
701            be of type wxSAVE and should verify overwriting a file.
702    
703            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
704            ProjFile.Replace() method instead of the mutator
705            Projection.SetProjection(). Also requires that we reassign the
706            client data to the new projection.
707    
708            * test/test_proj.py (TestProjection.test): Test GetName() and
709            GetAllParameters()
710            (TestProjFile.test): Remove tests for Set*() methods. Add tests
711            for Replace().
712    
713    2003-04-25  Jonathan Coles   <[email protected]>
714    
715            * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
716            to save the name of the projection.
717    
718            * test/test_save.py (SaveSessionTest.testLayerProjection): New
719            test to verify layer projections are saved correctly.
720    
721    2003-04-25  Jonathan Coles   <[email protected]>
722    
723            * Thuban/Model/proj.py (Projection.SetName): Set the name
724            to "Unknown" if name is None.
725            (Projection.SetAllParameters): New. Set the projection's
726            parameter list to the one supplied.
727            (Projection.SetProjection): New. Set the projection's
728            properties to those of the supplied Projection.
729    
730            * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
731            the dialog title to include the map's title.
732            (MainWindow.LayerProjection): Set the dialog title to include
733            the layer's title.
734    
735            * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
736            error dialogs into a single method call.
737            (ProjFrame.__VerifyButtons): Add more states to check.
738            (ProjFrame.__GetProjection): Return the current state of an
739            edited projection or None.
740            (ProjFrame.__FillAvailList): Remove checks for states that
741            shouldn't exist.
742            (ProjFrame._OnNew): Clear all selected items and supply
743            a projection panel if necessary.
744    
745            * test/test_proj.py (TestProjFile.test): Add tests for
746            ProjFile.SetAllParameters, ProjFile.SetProjection,
747            ProjFile.SetName.
748    
749    2003-04-25  Jonathan Coles   <[email protected]>
750    
751            * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
752            takes an optional argument to select the current projection.
753            This does not guarantee that the item is visible due to
754            limited wxWindows functionality. Fixes RTBug #1821.
755    
756  2003-04-25  Jonathan Coles   <[email protected]>  2003-04-25  Jonathan Coles   <[email protected]>
757    
758          * Thuban/Model/load.py (SessionLoader.start_projection): Remember          * Thuban/Model/load.py (SessionLoader.start_projection): Remember

Legend:
Removed from v.743  
changed lines
  Added in v.908

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26