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

Legend:
Removed from v.701  
changed lines
  Added in v.848

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26