/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.715  
changed lines
  Added in v.924

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26