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

Legend:
Removed from v.721  
changed lines
  Added in v.867

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26