/[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 803 by jonathan, Wed Apr 30 17:07:01 2003 UTC revision 919 by bh, Fri May 16 17:29:48 2003 UTC
# Line 1  Line 1 
1    2003-05-16  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/__init__.py: Remove the work-around for the locale bug
4            in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
5            of the bug was that e.g. float("1.2") would fail. Thuban now
6            requires 2.4.x.
7            
8    2003-05-16  Frank Koormann   <[email protected]>
9    
10            Printing enhancement and WMF export (under Win32)
11    
12            * Thuban/UI/renderer.py (ExportRenderer): New, derived from
13            ScreenRenderer. Renders Map, Legend and Scalebar for export.
14            (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
15            PrintRender.
16    
17            * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
18            to fullfil information needed for PrinterRenderer.
19            (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
20            (MapCanvas.Print): Adapted to new MapPrintout.
21            (OutputTransform): General calculations to transform from canvas
22            coordinates to export/printing devices.
23    
24            * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
25            new method_command to call ExportMap, with platform dependency (only
26            __WXMSW__)
27      
28            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
29            of scalebar drawing area as new parameters.
30            
31            * Thuban/Model/scalebar.py (roundInterval): round long instead of int
32    
33            * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
34            Update to extended scalebar.DrawScalebar header.
35    
36            * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
37    
38            * test/test_scalebar.py: Made test executable as standalone.
39    
40    2003-05-16  Bernhard Herzog  <[email protected]>
41    
42            * Thuban/Model/table.py (Table): Remove this compatibility alias
43            for DBFTable.
44    
45            * test/test_table.py: Import DBFTable as Table because that alias
46            doesn't exist anymore.
47    
48            * Thuban/UI/classgen.py: Remove some unused imports
49    
50    2003-05-14  Jonathan Coles   <[email protected]>
51    
52            * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
53            Fix docstring.
54            (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
55            (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
56            values of the supplied range to determine the beginning and end
57            bounds of the generated classes.
58    
59            * Thuban/Model/range.py (Range.number_re): Now accepts floats that
60            do not have a leading 0 (.5 is now accepted as well as 0.5).
61    
62            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
63            call to ClassGenerator.GenUniformDistribution.
64    
65            * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
66            layout bug with the 'Projection' label.
67    
68            * test/support.py (FloatTestCase): New. Needed for the Range tests.
69    
70            * test/test_range.py: New. Imported from SciParam.
71    
72    2003-05-12  Jonathan Coles   <[email protected]>
73    
74            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
75            to table.UniqueValues() with calls that retrieve all the values
76            from the table. This will need to be replaced by a method on table
77            which can simply return the list (perhaps more efficiently).
78    
79    2003-05-12  Jonathan Coles   <[email protected]>
80    
81            The return value of ClassGenerator.CalculateQuantiles has changed.
82            Refer to the documentation for details.
83    
84            * test/test_classgen.py: Modified Quantile tests to use the
85            new return values.
86    
87            * Thuban/Model/classgen.py
88            (ClassGenerator.GenQuantiles): Add comments describing the parameters,
89            use new return values from CalculateQuantiles to produce the correct
90            range bounds in the Classification.
91            (ClassGenerator.CalculateQuantiles): Add more comments describing
92            the return values and parameters. Make minor adjustments to improve
93            the legibility of the code. Fix problem with adjusted not being set
94            in most cases.
95    
96    2003-05-12  Frank Koormann <[email protected]>
97            
98            * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
99            and latin1. Fixes #1851 finally.
100    
101    2003-05-09  Jonathan Coles   <[email protected]>
102    
103            * test/test_classgen.py: New. Tests the Quantile algorithm.
104    
105            * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
106            Clean up debugging statement, add comments, fix a small bug in the
107            returned adjusted percentiles.
108            
109    2003-05-09  Jonathan Coles   <[email protected]>
110    
111            Introduces Range class from SciParam into the ClassGroupRange class,
112            and such ranges can now be saved and loaded from disk.
113    
114            Quantiles are now available in the Classification Generator.
115    
116            Initial support for building Queries on a table. Doesn't do anything
117            but run some tests.
118    
119            * Thuban/Model/classification.py: Explicit imports.
120            (ClassGroupRange): Use the Range class to store the underlying
121            range information. The interface remains the same, except for
122            GetRange(), and you can also supply a Range object as the min
123            parameter to SetRange or __init__.
124    
125            * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
126            string appropriately for use in Thuban. Fixes RTbug #1851.
127            (SessionLoader.end_projection): Handle the context of the
128            projection tag a bit better by looking at what objects are not
129            None. There was an assumption that a projection tag for a map
130            could occur before any layers.
131            (SessionLoader.start_clrange): Provide backward compatibility for
132            reading min/max values as well as the new range parameter.
133    
134            * Thuban/Model/map.py: Explicit imports.
135    
136            * Thuban/Model/resource.py: Import _.
137            (ProjFileSaver.write): write header using projfile.dtd.
138    
139            * Thuban/Model/save.py: Explicit imports.
140            (XMLWriter.encode): New. Encode the given string from a format
141            used by Thuban into UTF-8. Fixes RTbug #1851.
142    
143            * Thuban/UI/classgen.py: Explicit imports.
144            (ClassGenDialog.__init__): Clean up the code and add support
145            for Quantiles.
146            (ClassGenDialog.OnOK): Add support for Quantiles.
147            (GenQuantilesPanel): New. Input panel for Quantiles.
148            (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
149            GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
150    
151            * Thuban/Model/classgen.py: New. Contains all the classes named above.
152    
153            * Thuban/UI/classifier.py: Explicit imports.
154            (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
155            ClassTable.SetValueAsCustom): Reworked to use new Range class.
156    
157            * Thuban/UI/legend.py: Explicit imports.
158    
159            * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
160            a Table menu and associated method calls.
161            (MainWindow.choose_color): Removed. No longer needed.
162    
163            * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
164            should be disabled if no projection is selected in the available
165            list.
166    
167            * Thuban/UI/renderer.py: Explicit imports.
168    
169            * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
170            with correctly selecting the rows and issuing the right events.
171            Be sure to call Skip() to allow the grid to do some of its own
172            handling which allows the rows to actually be selected.
173            (LayerTableGrid.select_shapes): Rename from select_shape. Supports
174            selecting multiple shapes.
175            (LayerTableFrame): Support for building Queries.
176            (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
177    
178            * Thuban/UI/tree.py: Explicit imports.
179    
180            * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
181            table view can call it.
182    
183            * test/test_classification.py: Explicit imports.
184            (TestClassification.test_ClassGroupRange): Fix test for new
185            Range class.
186    
187            * Doc/thuban.dtd: Add range parameter for clrange.
188    
189            * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
190            object in ClassGroupRange, and also uesd for inputting ranges in
191            the classifer table and elsewhere.
192    
193            * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
194            yet.
195    
196    2003-05-09  Frank Koormann <[email protected]>
197    
198            * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
199    
200    2003-05-08  Frank Koormann <[email protected]>
201    
202            Coding style updates
203    
204            * test/test_scalebar.py: Replaced tab indentation by spaces.
205    
206            * Thuban/UI/scalebar.py: Explicit imports.
207    
208    2003-05-08  Frank Koormann <[email protected]>
209    
210            * Thuban/UI/scalebar.py
211            (ScaleBar.DrawScalebar): Format string bug fixed.
212    
213    2003-05-08  Frank Koormann <[email protected]>
214    
215            Reorganization of scalebar component (no wx in Thuban/Model)
216    
217            * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
218            (deriveInterval):
219            Calculate scalebar interval and unit which fits in width for scale.
220            (roundInterval): Round float.
221    
222            * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
223    
224            * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
225    
226            * Thuban/UI/legend.py: Import Thuban.UI.scalebar
227    
228    2003-05-08  Frank Koormann <[email protected]>
229    
230            * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
231            Initialize ScaleBar with canvas.map
232    
233            * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
234            round intervals to display smarter lengths
235            (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
236            layer. If the maps has no projection applied grey the scalebar.
237    
238    2003-05-07  Frank Koormann <[email protected]>
239            
240            Basic Scalebar features added.
241    
242            * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
243    
244            * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
245            (ScaleBarBitmap): New, links the scalebar bitmap with view messages
246            and the renderer.
247    
248            * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
249    
250            * Thuban/UI/messages.py: SCALE_CHANGED added.
251    
252    2003-05-07  Bernhard Herzog  <[email protected]>
253    
254            * Thuban/Model/session.py (Session.__init__): New instance
255            variable shapestores to hold a list of all open shapestore objects
256            (Session.ShapeStores): New. Accessor method for the shapestores
257            list.
258            (Session._add_shapestore, Session._clean_weak_store_refs): New.
259            Internal methods to maintain the shapestores list.
260            (Session.Tables): New. Return all tables open in the session.
261            (Session.OpenShapefile): Insert the new ShapeStore into the
262            shapestores list.
263    
264            * test/test_session.py (TestSessionSimple.test_initial_state): Add
265            tests for ShapeStores and Tables
266            (TestSessionWithContent.test_shape_stores)
267            (TestSessionWithContent.test_tables): New. Test cases for
268            ShapeStores and Tables
269    
270    2003-05-07  Bernhard Herzog  <[email protected]>
271    
272            * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
273            Add comments about the optimizations used.
274            (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
275            Implement the ReadValue table interface method.
276    
277            * test/test_transientdb.py
278            (TestTransientTable.run_iceland_political_tests)
279            (TestTransientTable.test_transient_joined_table): Add tests for
280            ReadValue
281    
282    2003-05-07  Frank Koormann <[email protected]>
283    
284            * Resources/Bitmaps/fulllayerextent.xpm,
285            Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
286            new icons.
287    
288    2003-05-06  Bernhard Herzog  <[email protected]>
289    
290            * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
291            New. Simply delegate to the transient table's version.
292    
293            * test/test_transientdb.py
294            (TestTransientTable.test_auto_transient_table_query): New. Test
295            case for AutoTransientTable's SimpleQuery
296    
297    2003-05-06  Bernhard Herzog  <[email protected]>
298    
299            * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
300            Implement a simple query method for the query dialog
301            (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
302            the row index or shapeid.
303            (TransientTable.create): Insert the right value of the row index
304            (TransientJoinedTable.create): Copy the row index of the left
305            table to the joined result table
306    
307            * test/test_transientdb.py
308            (TestTransientTable.test_transient_table_read_twice): Fix
309            doc-string
310            (TestTransientTable.test_transient_table_query): New. Test for the
311            SimpleQuery method
312    
313    2003-05-06  Bernhard Herzog  <[email protected]>
314    
315            Convert all table users to use the new table interface. This only
316            covers Thuban itself, not GREAT-ER or other applications built on
317            Thuban yet, so the compatibility interface stays in place for the
318            time being but it now issues DeprecationWarnings.
319    
320            Finally, the new Table interface has a new method, HasColumn.
321    
322            * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
323            issue deprecation warnings when they're. The warnings refer to the
324            caller of the method.
325            (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
326            for the deprecation warnings
327    
328            * test/test_table.py: Ignore the deprecation warnings for the old
329            table in the tests in this module. The purpose of the tests is to
330            test the old interface, after all.
331    
332            * test/test_transientdb.py
333            (TestTransientTable.run_iceland_political_tests): Use the
334            constants for the types. Add a test for HasColumn
335            (TestTransientTable.test_transient_joined_table): Adapt to new
336            table interface. Add a test for HasColumn
337            (TestTransientTable.test_transient_table_read_twice): Adapt to new
338            table interface
339    
340            * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
341            Adapt to new table interface
342    
343            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
344            new table interface
345    
346            * Thuban/UI/controls.py (RecordListCtrl.fill_list)
347            (RecordTable.SetTable): Adapt to new table interface
348    
349            * Thuban/UI/classifier.py (Classifier.__init__)
350            (Classifier.__init__): Adapt to new table interface
351    
352            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
353            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
354            to new table interface
355    
356            * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
357            (AutoTransientTable.HasColumn): Implement the new table interface
358            method
359            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
360            (AutoTransientTable.UniqueValues): Adapt to new table interface
361    
362            * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
363            Adapt to new table interface
364    
365            * test/test_layer.py (TestLayer.open_shapefile): Helper method to
366            simplify opening shapefiles a bit easier.
367            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
368            (TestLayer.test_point_layer): Use the new helper method
369            (TestLayer.test_get_field_type): New. Test for the GetFieldType
370            method
371    
372            * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
373            the new table method
374    
375            * test/test_memory_table.py (TestMemoryTable.test_has_column):
376            Test for the new table method HasColumn
377    
378    2003-05-06  Jonathan Coles   <[email protected]>
379    
380            Addresses the "Selection Extent" wish of RTbug #1787.
381    
382            * Resources/Bitmaps/fulllayerextent.xpm,
383            Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
384            extent. These are just place holders for the real bitmaps.
385    
386            * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
387            calculate the bounding box once (the first time compute_bbox() is
388            called).
389            (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
390            the bounding box for the shapes in lat/long coordinates.
391    
392            * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
393            option.
394            (MainWindow.has_selected_shapes): New. Returns true if there are
395            any selected shapes.
396            (MainWindow.FullSelectionExtent): New. Calls
397            MapCanvas.FitSelectedToWindow() when the user selects the menu option.
398            (_has_selected_shapes): New. Returns true if there are any
399            selected shapes.
400    
401            * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
402            true if there are any selected shapes.
403    
404            * Thuban/UI/view.py (MapCanvas): Added delegated method
405            HasSelectedShapes.
406            (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
407            shapes on the canvas using the map projection (if any).
408    
409            * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
410            for Layer.ShapesBoundingBox().
411    
412    2003-05-06  Bernhard Herzog  <[email protected]>
413    
414            * Resources/Projections/defaults.proj: Fix spelling of Mercator
415    
416    2003-05-05  Jonathan Coles   <[email protected]>
417    
418            Addresses the "Full Layer Extent" wish of RTbug #1787.
419    
420            * Resources/Projections/defaults.proj: Added UK National Grid.
421    
422            * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
423            (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
424            when the user selects the menu option.
425    
426            * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
427            scales the given layer on the canvas using the map projection.
428    
429    2003-05-05  Bernhard Herzog  <[email protected]>
430    
431            Convert the table implementations to a new table interface. All
432            tables use a common mixin class to provide backwards compatibility
433            until all table users have been updated.
434    
435            * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
436            provide backwards compatibility for table classes implementing the
437            new interface
438            (DBFTable, MemoryTable): Implement the new table interface. Use
439            OldTableInterfaceMixin as base for compatibility
440            (DBFColumn, MemoryColumn): New. Column description for DBFTable
441            and MemoryTable resp.
442    
443            * test/test_dbf_table.py: New. Test cases for the DBFTable with
444            the new table interface.
445    
446            * test/test_memory_table.py: New. Test cases for the MemoryTable
447            with the new table interface.
448    
449            * test/test_table.py: Document the all tests in this file as only
450            for backwards compatibility. The equivalent tests for the new
451            interface are in test_memory_table.py and test_dbf_table.py
452            (MemoryTableTest.test_read): field_info should be returning tuples
453            with four items
454            (MemoryTableTest.test_write): Make doc-string a more precise.
455    
456            * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
457            table interface. Derive from from OldTableInterfaceMixin for
458            compatibility.
459            (TransientTableBase.create): New intance variable column_map to
460            map from names and indices to column objects
461            (TransientTable.create): Use the new table interface of the input
462            table
463            (AutoTransientTable): Convert to new table interface. Derive from
464            from OldTableInterfaceMixin for compatibility.
465            (AutoTransientTable.write_record): Removed. It's not implemented
466            yet and we still have to decide how to handle writing with the new
467            table and data framework.
468    
469            * test/test_transientdb.py
470            (TestTransientTable.run_iceland_political_tests)
471            (TestTransientTable.test_transient_joined_table): Use the new
472            table interface
473    
474    2003-05-05  Jonathan Coles   <[email protected]>
475    
476            This is namely a collection of UI updates to improve user interactivity.
477            Tabbing between controls now exists and you can use ESC to close dialog
478            boxes; ENTER will active the default button.
479    
480            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
481            order that the controls are created so that tabbing works correctly.
482            (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
483            wxDialog can handle the default button correctly.
484            (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
485            same reasons as for OnOK.
486            (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
487            when we ask the table for the maximum/minimum values of a field
488            which could take a very long time.
489    
490            * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
491            order that the controls are created so that tabbing works correctly.
492            (SelectPropertiesDialog.__init__): Rearrange the order that the
493            controls are created so that tabbing works correctly.
494    
495            * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
496            to derive from a wxDialog but behave like the original implementation
497            which was derived from a wxFrame. wxDialog provides useful key
498            handling functionality like ESC calling OnCancel and ENTER calling
499            OnOK which is lost with wxFrame.
500    
501            * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
502            new dialogs.
503    
504            * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
505            order that the controls are created so that tabbing works correctly.
506            (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
507            (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
508            (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
509            (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
510            can provide the "UK National Grid" as a default projection.
511            (UTMPanel.__init__): Rearrange the order that the controls are
512            created so that tabbing works correctly.
513    
514    2003-05-05  Bernhard Herzog  <[email protected]>
515    
516            * extensions/thuban/wxproj.cpp: Fix some of the comments.
517            (project_point): If a map projection but no layer projection is
518            given, convert degrees to radians before applying the map
519            projection.
520    
521            * Thuban/UI/tableview.py (TableGrid.disallow_messages)
522            (TableGrid.allow_messages): New methods to make it possible to
523            inhibit message sending.
524            (TableGrid.issue): Only send the message if not inhibited.
525            (LayerTableGrid.select_shape): Use the new methods to make sure
526            that no ROW_SELECTED message is sent while we're updating the
527            selected rows to match the selected shapes.
528    
529    2003-05-02  Jan-Oliver Wagner <[email protected]>
530    
531            Implementation of MemoryTable.
532    
533            * Thuban/Model/table.py (MemoryTable): New. Quite simple table
534            implementation that operates on a list of tuples. All of the data
535            are kept in the memory.
536    
537            * test/test_table.py (MemoryTableTest): New.
538    
539            * test/test_transientdb.py (SimpleTable): Removed.
540            (TestTransientTable.test_transient_joined_table,
541            (TestTransientTable.test_transient_table_read_twice): Replaced
542            SimpleTable by MemoryTable.
543    
544  2003-04-30  Jonathan Coles   <[email protected]>  2003-04-30  Jonathan Coles   <[email protected]>
545    
546          * Data/iceland_sample.thuban: Now contains correct projections          * Data/iceland_sample.thuban: Now contains correct projections

Legend:
Removed from v.803  
changed lines
  Added in v.919

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26