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

Legend:
Removed from v.625  
changed lines
  Added in v.833

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26