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

Legend:
Removed from v.687  
changed lines
  Added in v.870

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26