/[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 833 by jonathan, Tue May 6 12:07:44 2003 UTC
# Line 1  Line 1 
1    2003-05-06  Jonathan Coles   <[email protected]>
2    
3            Addresses the "Selection Extent" wish of RTbug #1787.
4    
5            * Resources/Bitmaps/fulllayerextent.xpm,
6            Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
7            extent. These are just place holders for the real bitmaps.
8    
9            * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
10            calculate the bounding box once (the first time compute_bbox() is
11            called).
12            (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
13            the bounding box for the shapes in lat/long coordinates.
14    
15            * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
16            option.
17            (MainWindow.has_selected_shapes): New. Returns true if there are
18            any selected shapes.
19            (MainWindow.FullSelectionExtent): New. Calls
20            MapCanvas.FitSelectedToWindow() when the user selects the menu option.
21            (_has_selected_shapes): New. Returns true if there are any
22            selected shapes.
23    
24            * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
25            true if there are any selected shapes.
26    
27            * Thuban/UI/view.py (MapCanvas): Added delegated method
28            HasSelectedShapes.
29            (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
30            shapes on the canvas using the map projection (if any).
31    
32            * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
33            for Layer.ShapesBoundingBox().
34    
35    2003-05-06  Bernhard Herzog  <[email protected]>
36    
37            * Resources/Projections/defaults.proj: Fix spelling of Mercator
38    
39    2003-05-05  Jonathan Coles   <[email protected]>
40    
41            Addresses the "Full Layer Extent" wish of RTbug #1787.
42    
43            * Resources/Projections/defaults.proj: Added UK National Grid.
44    
45            * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
46            (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
47            when the user selects the menu option.
48    
49            * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
50            scales the given layer on the canvas using the map projection.
51    
52    2003-05-05  Bernhard Herzog  <[email protected]>
53    
54            Convert the table implementations to a new table interface. All
55            tables use a common mixin class to provide backwards compatibility
56            until all table users have been updated.
57    
58            * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
59            provide backwards compatibility for table classes implementing the
60            new interface
61            (DBFTable, MemoryTable): Implement the new table interface. Use
62            OldTableInterfaceMixin as base for compatibility
63            (DBFColumn, MemoryColumn): New. Column description for DBFTable
64            and MemoryTable resp.
65    
66            * test/test_dbf_table.py: New. Test cases for the DBFTable with
67            the new table interface.
68    
69            * test/test_memory_table.py: New. Test cases for the MemoryTable
70            with the new table interface.
71    
72            * test/test_table.py: Document the all tests in this file as only
73            for backwards compatibility. The equivalent tests for the new
74            interface are in test_memory_table.py and test_dbf_table.py
75            (MemoryTableTest.test_read): field_info should be returning tuples
76            with four items
77            (MemoryTableTest.test_write): Make doc-string a more precise.
78    
79            * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
80            table interface. Derive from from OldTableInterfaceMixin for
81            compatibility.
82            (TransientTableBase.create): New intance variable column_map to
83            map from names and indices to column objects
84            (TransientTable.create): Use the new table interface of the input
85            table
86            (AutoTransientTable): Convert to new table interface. Derive from
87            from OldTableInterfaceMixin for compatibility.
88            (AutoTransientTable.write_record): Removed. It's not implemented
89            yet and we still have to decide how to handle writing with the new
90            table and data framework.
91    
92            * test/test_transientdb.py
93            (TestTransientTable.run_iceland_political_tests)
94            (TestTransientTable.test_transient_joined_table): Use the new
95            table interface
96    
97    2003-05-05  Jonathan Coles   <[email protected]>
98    
99            This is namely a collection of UI updates to improve user interactivity.
100            Tabbing between controls now exists and you can use ESC to close dialog
101            boxes; ENTER will active the default button.
102    
103            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
104            order that the controls are created so that tabbing works correctly.
105            (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
106            wxDialog can handle the default button correctly.
107            (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
108            same reasons as for OnOK.
109            (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
110            when we ask the table for the maximum/minimum values of a field
111            which could take a very long time.
112    
113            * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
114            order that the controls are created so that tabbing works correctly.
115            (SelectPropertiesDialog.__init__): Rearrange the order that the
116            controls are created so that tabbing works correctly.
117    
118            * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
119            to derive from a wxDialog but behave like the original implementation
120            which was derived from a wxFrame. wxDialog provides useful key
121            handling functionality like ESC calling OnCancel and ENTER calling
122            OnOK which is lost with wxFrame.
123    
124            * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
125            new dialogs.
126    
127            * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
128            order that the controls are created so that tabbing works correctly.
129            (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
130            (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
131            (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
132            (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
133            can provide the "UK National Grid" as a default projection.
134            (UTMPanel.__init__): Rearrange the order that the controls are
135            created so that tabbing works correctly.
136    
137    2003-05-05  Bernhard Herzog  <[email protected]>
138    
139            * extensions/thuban/wxproj.cpp: Fix some of the comments.
140            (project_point): If a map projection but no layer projection is
141            given, convert degrees to radians before applying the map
142            projection.
143    
144            * Thuban/UI/tableview.py (TableGrid.disallow_messages)
145            (TableGrid.allow_messages): New methods to make it possible to
146            inhibit message sending.
147            (TableGrid.issue): Only send the message if not inhibited.
148            (LayerTableGrid.select_shape): Use the new methods to make sure
149            that no ROW_SELECTED message is sent while we're updating the
150            selected rows to match the selected shapes.
151    
152    2003-05-02  Jan-Oliver Wagner <[email protected]>
153    
154            Implementation of MemoryTable.
155    
156            * Thuban/Model/table.py (MemoryTable): New. Quite simple table
157            implementation that operates on a list of tuples. All of the data
158            are kept in the memory.
159    
160            * test/test_table.py (MemoryTableTest): New.
161    
162            * test/test_transientdb.py (SimpleTable): Removed.
163            (TestTransientTable.test_transient_joined_table,
164            (TestTransientTable.test_transient_table_read_twice): Replaced
165            SimpleTable by MemoryTable.
166    
167    2003-04-30  Jonathan Coles   <[email protected]>
168    
169            * Data/iceland_sample.thuban: Now contains correct projections
170            for each of the layers.
171    
172            * Resources/Projections/defaults.proj: Geographic projection
173            contains unit conversion parameter.
174    
175    2003-04-30  Jonathan Coles   <[email protected]>
176    
177            The most important part of this putback is the projection changes.
178            It should now be possible to specify the projection that a layer
179            is in and then specify a different projection for the map. The
180            projection dialog has an extra parameter for a geographic projection
181            which lets the user select if the input is in degrees or radians.
182    
183            * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
184            to say that the parameter is a tuple of unprojected
185            points (which is what the callers to this method were assuming).
186            Also, since the points are unprojected we need to projected them.
187    
188            * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
189            LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
190            groups are selected, move the layer up/down. Fixes RTbug #1833.
191    
192            * Thuban/UI/mainwindow.py: Move menu item map_rename up.
193    
194            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
195            parameter in call to SetClientData.
196            (GeoPanel): Add support for selecting the units that the
197            source data is in (Radians or Degrees).
198    
199            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
200            the rendering loop by reducing the number of if's, removing the
201            unnecessary try/except block, and checking if the old group
202            is the same as the new one (which happens a lot if there is
203            no classification, or lots of shapes are in the same group).
204    
205            * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
206            around the redraw routine to try to catch problems that the user
207            may create by selecting invalid projections for the data set and
208            map. Clears the display if there are any problems and prints the
209            error.
210            (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
211            rectangle.
212    
213            * extensions/thuban/wxproj.cpp (project_point): First invert the
214            supplied point (which should be in projected coordinates) using
215            the layer's projection and then project the point using the
216            map's projection.
217            (project_points): Use project_point() to project each point.
218    
219    2003-04-30  Jan-Oliver Wagner <[email protected]>
220    
221            * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
222            don't set the Classification to None if the classfication field
223            is None (ie only a DEFAULT).
224    
225    2003-04-30  Bernhard Herzog  <[email protected]>
226    
227            * Thuban/UI/view.py: Fix some typos.
228    
229            * Thuban/UI/mainwindow.py (MainWindow.identify_view_on_demand): Do
230            not pop up the dialog if the selection becomes empty (this could
231            happen if e.g. a new selection is opened while the identify tool
232            is active and dialog had been closed)
233    
234    2003-04-30  Bernhard Herzog  <[email protected]>
235    
236            * Thuban/Model/transientdb.py (TransientTableBase.__init__): New
237            instance variable read_record_last_result
238            (TransientTableBase.read_record): Make sure reading the same
239            record twice works. The implementation uses the new instance
240            variable read_record_last_result
241    
242            * test/test_transientdb.py
243            (TestTransientTable.test_transient_table_read_twice): New test
244            case for the above bug-fix.
245    
246    2003-04-29  Jonathan Coles   <[email protected]>
247    
248            * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
249    
250            * Thuban/UI/classgen.py: Remove all uses of Str2Num.
251    
252            * Thuban/UI/classifier.py: Remove all uses of Str2Num.
253            (ClassTable.SetValueAsCustom): Rename keyword argument in
254            ClassGroup* constructors to match argument name.
255    
256    2003-04-29  Bernhard Herzog  <[email protected]>
257    
258            * Thuban/Model/session.py (Session.Destroy): Explicitly close the
259            transient DB if it exists to make sure it doesn't leave a journal
260            file in the temp directory.
261    
262            * Thuban/Model/transientdb.py (TransientDatabase.close): Set
263            self.conn to None after closing the connection to make sure it's
264            not closed twice
265    
266    2003-04-29  Jonathan Coles   <[email protected]>
267    
268            Add a visible parameter in the layer XML tag. The default value is
269            "true". If anything other than "false" is specified we also assume
270            "true". Addresses RTbug #1025.
271    
272            * Doc/thuban.dtd: Add visible parameter to a layer.
273    
274            * Thuban/Model/layer.py (BaseLayer.__init__): Change default value
275            of visible from 1 to True.
276            (Layer.__init__): Change default value of visible from 1 to True.
277    
278            * Thuban/Model/load.py (SessionLoader.start_layer): Read visible
279            parameter.
280    
281            * Thuban/Model/save.py (SessionSaver.write_layer): Save visible
282            parameter.
283    
284            * test/test_load.py: Add new test data contents_test_visible.
285            (LoadSessionTest.setUp): save test data.
286            (LoadSessionTest.testLayerVisibility): Test if the visible flag
287            is loaded correctly.
288    
289            * test/test_save.py (SaveSessionTest.testSingleLayer): Add test
290            for saving an invisible layer.
291    
292    2003-04-29  Jonathan Coles   <[email protected]>
293    
294            * Thuban/UI/mainwindow.py (MainWindow.SetMap): Look up the
295            legend dialog box and tell it to change its map to the one
296            supplied to SetMap(). Fixes RTbug #1770.
297    
298    2003-04-29  Bernhard Herzog  <[email protected]>
299    
300            Next step of table implementation. Introduce a transient database
301            using SQLite that some of the data is copied to on demand. This
302            allows us to do joins and other operations that require an index
303            for good performance with reasonable efficiency. Thuban now needs
304            SQLite 2.8.0 and pysqlite 0.4.1. Older versions may work but I
305            haven't tested that.
306            
307            * Thuban/Model/transientdb.py: New. Transient database
308            implementation.
309    
310            * test/test_transientdb.py: New. Tests for the transient DB
311            classes.
312    
313            * Thuban/Model/session.py (AutoRemoveFile, AutoRemoveDir): New
314            classes to help automatically remove temporary files and
315            directories.
316            (Session.__init__): New instance variables temp_dir for the
317            temporary directory and transient_db for the SQLite database
318            (Session.temp_directory): New. Create a temporary directory if not
319            yet done and return its name. Use AutoRemoveDir to have it
320            automatically deleted
321            (Session.TransientDB): Instantiate the transient database if not
322            done yet and return it.
323    
324            * Thuban/Model/data.py (ShapefileStore.__init__): Use an
325            AutoTransientTable so that data is copied to the transient DB on
326            demand.
327            (SimpleStore): New class that simply combines a table and a
328            shapefile
329    
330            * Thuban/Model/table.py (Table, DBFTable): Rename Table into
331            DBFTable and update its doc-string to reflect the fact that this
332            is only the table interface to a DBF file. Table is now an alias
333            for DBFTable for temporary backwards compatibility.
334    
335            * Thuban/UI/application.py (ThubanApplication.OnExit): Make sure
336            the last reference to the session goes away so that the temporary
337            files are removed properly.
338    
339            * test/test_load.py (LoadSessionTest.tearDown): Remove the
340            reference to the session to make sure the temporary files are
341            removed.
342    
343    2003-04-29  Bernhard Herzog  <[email protected]>
344    
345            * Thuban/Model/load.py (XMLReader.__init__, XMLReader.read): Turn
346            the __parser instance variable into a normal local variable in
347            read. It's only used there and read will never be called more than
348            once. Plus it introduces a reference cycle that keeps can keep the
349            session object alive for a long time.
350    
351    2003-04-29  Jonathan Coles   <[email protected]>
352    
353            * Thuban/Model/proj.py (Projection): Removed Set*() methods to make
354            Projection an immutable item. Fixes RTbug #1825.
355            (Projection.__init__): Initialize instance variables here.
356            (ProjFile.Replace): New. Replace the given projection object with
357            the new projection object. This solves the problem of needing the
358            mutator Projection.SetProjection() in the ProjFrame class and
359            allows a projection to change parameters without changing its
360            location in the file.
361    
362            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs): Dialog should
363            be of type wxSAVE and should verify overwriting a file.
364    
365            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Use the new
366            ProjFile.Replace() method instead of the mutator
367            Projection.SetProjection(). Also requires that we reassign the
368            client data to the new projection.
369    
370            * test/test_proj.py (TestProjection.test): Test GetName() and
371            GetAllParameters()
372            (TestProjFile.test): Remove tests for Set*() methods. Add tests
373            for Replace().
374    
375    2003-04-25  Jonathan Coles   <[email protected]>
376    
377            * Thuban/Model/save.py (SessionSaver.write_projection): Make sure
378            to save the name of the projection.
379    
380            * test/test_save.py (SaveSessionTest.testLayerProjection): New
381            test to verify layer projections are saved correctly.
382    
383    2003-04-25  Jonathan Coles   <[email protected]>
384    
385            * Thuban/Model/proj.py (Projection.SetName): Set the name
386            to "Unknown" if name is None.
387            (Projection.SetAllParameters): New. Set the projection's
388            parameter list to the one supplied.
389            (Projection.SetProjection): New. Set the projection's
390            properties to those of the supplied Projection.
391    
392            * Thuban/UI/mainwindow.py (MainWindow.MapProjection): Set
393            the dialog title to include the map's title.
394            (MainWindow.LayerProjection): Set the dialog title to include
395            the layer's title.
396    
397            * Thuban/UI/projdialog.py (ProjFrame.__ShowError): Consolidate
398            error dialogs into a single method call.
399            (ProjFrame.__VerifyButtons): Add more states to check.
400            (ProjFrame.__GetProjection): Return the current state of an
401            edited projection or None.
402            (ProjFrame.__FillAvailList): Remove checks for states that
403            shouldn't exist.
404            (ProjFrame._OnNew): Clear all selected items and supply
405            a projection panel if necessary.
406    
407            * test/test_proj.py (TestProjFile.test): Add tests for
408            ProjFile.SetAllParameters, ProjFile.SetProjection,
409            ProjFile.SetName.
410    
411    2003-04-25  Jonathan Coles   <[email protected]>
412    
413            * Thuban/UI/projdialog.py (ProjFrame.__FillAvailList): Now
414            takes an optional argument to select the current projection.
415            This does not guarantee that the item is visible due to
416            limited wxWindows functionality. Fixes RTBug #1821.
417    
418  2003-04-25  Jonathan Coles   <[email protected]>  2003-04-25  Jonathan Coles   <[email protected]>
419    
420          * 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.833

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26