/[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 792 by jan, Wed Apr 30 12:26:57 2003 UTC revision 981 by frank, Thu May 22 11:41:31 2003 UTC
# Line 1  Line 1 
1    2003-05-22  Frank Koormann  <[email protected]>
2    
3            UI polishing updates: Place main buttons (OK, Cancel, etc) in the
4            lower right corner, center labels for selections, initialize controls
5            in reasonable order for keyboard navigation.
6    
7            * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
8            (ProjFrame.__DoOnProjAvail): Determine position of current projection
9            using the wxListBox.FindString() method. Still a problem (#1886)
10    
11            * Thuban/UI/classifier.py
12            (Classifier.__init__, SelectPropertiesDialog.__init__)
13    
14            * Thuban/UI/classgen.py (ClassGenDialog.__init__,
15            (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
16            different classification types from here to __init__.
17            (GenUniquePanel.__init__): Set the column width of the first field
18            in the Field ListCtrl to the full width.
19    
20            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
21            Button to 'Export'. Center Buttons in Selection Box, set Focus to
22            Grid.
23            (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
24            changes focus to the Selection when pressing "Alt-S".
25    
26            * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
27            the text if not visible. The italic font sometimes exceeds the
28            rendering area.
29    
30    
31    2003-05-21  Jonathan Coles   <[email protected]>
32    
33            * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
34            to OnClose so that Thuban closes correctly.
35    
36            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
37            DockFrame.OnClose, not DockFrame._OnClose.
38    
39    2003-05-21  Jonathan Coles   <[email protected]>
40    
41            * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
42            references to 'inf' and use new Range __init__ to pass floats
43            directly rather than converting them to strings first.
44            Fixes RTBug #1876.
45    
46            * Thuban/Model/classification.py (ClassGroupRange.SetRange):
47            Use new Range ___init__ to pass floats.
48    
49            * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
50            filename is a valid image file. Throw IOError otherwise.
51    
52            * Thuban/Model/range.py: Brought over new Range from SciParam that
53            is immutable and has an __init__ which can accept floats.
54    
55            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
56            into try block. AddLayer doesn't throw any exceptions anymore.
57            (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
58            try block.
59    
60            * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
61            the first item in choices. Fixes RTBug #1882.
62    
63            * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
64            has gone to 0 which is a serious problem. abort.
65            (MapRenderer.draw_raster_layer): Catch IOError seperately and
66            print the error from GDAL.
67    
68            * Thuban/UI/tableview.py (TableGrid.__init__): Call
69            ToggleEventListeners to turn on listening.
70            (TableGrid.ToggleEventListeners): New. Turns event listening on
71            and off so as to prevent excessive messages.
72            (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
73            to suppress excessive messages when selecting many rows.
74            Fixes RTBug #1880.
75    
76            * Thuban/UI/view.py: Added checks against if scale == 0. This
77            is a serious problem that can occur when an image without
78            geo data is loading and causes the map projection bounds to
79            go to infinity. Right now, the solution is to simply try
80            to recover.
81    
82            * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
83            to set the MFILEReceiver attributes even if the data is NULL.
84    
85            * extensions/thuban/gdalwarp.cpp: Improved the error handling
86            and passed GDAL messages back up to the Python layer. Also
87            tried to fix some memory leaks that were present in the original
88            utility but didn't matter because the program aborted.
89    
90            * test/test_range.py: Copied over tests from SciParam. Removed
91            tests against importing. Fixes RTBug #1867.
92    
93    2003-05-21  Bernhard Herzog  <[email protected]>
94    
95            * test/test_load.py: Remove unused imports and restructure the
96            test code
97            (LoadSessionTest): Split into one class for each test and turn
98            LoadSessionTest itself into the base class for all such session
99            tests.
100            (ClassificationTest): New base class for load tests that test
101            classifications
102            (TestSingleLayer, TestLayerVisibility, TestClassification)
103            (TestLabels, TestLayerProjection, TestRasterLayer): New classes
104            for the individual tests
105    
106            * test/support.py (FileLoadTestCase.filename): New base class for
107            file loading tests
108    
109    2003-05-21  Jan-Oliver Wagner <[email protected]>
110    
111            * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
112            Mercator' to 'UTM Zone 32' as a more convenient example.
113            Added 'Gauss Krueger Zone 6'.
114    
115            * Data/iceland_sample_raster.thuban: political polygon now
116            filled transparent to have the raster image visible at once.
117    
118    2003-05-21  Frank Koormann  <[email protected]>
119    
120            * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to
121            OnClose() to keep in sync with extensions. Internally Thuban
122            still uses "underscored" names.
123    
124    2003-05-20  Jonathan Coles   <[email protected]>
125    
126            This puts back Raster layer support. These layers support projections
127            through the GDAL library. Currently, the CVS version is being used.
128            There are no Debian packages available although this may change soon.
129            A GDAL driver was extended to support writing to memory rather to
130            files.
131    
132            There is still some work that needs to be done, such as some error
133            handling when loading invalid images or when there is a problem
134            projecting the image. This putback simply checks in the majority
135            of the work.
136    
137            * setup.py: Add gdalwarp library extension.
138    
139            * Thuban/Model/layer.py (BaseLayer.HasClassification): New.
140            Defaults to False, but can be overridden by subclasses if they
141            support classification.
142            (RasterLayer): New. Defines a new layer that represents an
143            image.
144    
145            * Thuban/Model/load.py (SessionLoader.__init__): Add rasterlayer
146            tag handler.
147            (SessionLoader.start_layer): Encode the filename.
148            (SessionLoader.start_rasterlayer, SessionLoader.end_rasterlayer):
149            New. Supports reading a rasterlayer tag.
150    
151            * Thuban/Model/map.py (Map.BoundingBox): Fix typo in comment.
152    
153            * Thuban/Model/save.py (XMLWriter.encode): Don't assume that we
154            get a string in Latin1. If we get such as string convert it to
155            unicode first, otherwise leave if alone before encoding.
156            (SessionSaver.write_layer): Add support for writing both Layers
157            and RasterLayers.
158    
159            * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
160            The right argument may not be a string, it could also be a Column.
161    
162            * Thuban/UI/application.py (ThubanApplication.CreateMainWindow):
163            Make initial window size 600x400. Fixes RTBug #1872.
164    
165            * Thuban/UI/classifier.py (Classifier.__init__): Rearrange how
166            the dialog is constructed so that we can support layers that
167            do not have classifications.
168            (Classifier._OnTry): Only build a classification if the layer
169            supports one.
170    
171            * Thuban/UI/legend.py: Change all checks that a layer is an
172            instance of Layer into checks against BaseLayer.
173            (LegendTree.__FillTreeLayer): Only add children to a branch if
174            the layer supports classification.
175    
176            * Thuban/UI/mainwindow.py (MainWindow.NewSession,
177            MainWindow.OpenSession): Don't proceed with an action if the
178            user chooses Cancel when they are asked to save changes.
179            (MainWindow.AddRasterLayer): New. Open a dialog to allow the
180            user to select an image file. Create a new RasterLayer and add
181            it to the map.
182    
183            * Thuban/UI/renderer.py (MapRenderer.render_map): Add support
184            for rendering RasterLayer layers.
185            (MapRenderer.draw_raster_layer): Actually method that calls
186            the GDALWarp python wrapper and constructs an image from the
187            data returned.
188    
189            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Change the
190            Choices symbols to match those used in the table query method.
191            Replace deprecated method calls on table with new method names.
192    
193            * Thuban/UI/view.py (MapCanvas.set_view_transform): Try to limit
194            how small the scale can get. This still needs more testing.
195    
196            * extensions/thuban/bmpdataset.cpp: New, but copied from GDAL.
197            Provides a driver to output in .bmp format.
198    
199            * extensions/thuban/cpl_mfile.cpp, extensions/thuban/cpl_mfile.h:
200            New. Provides IO routines which write to memory, rather than a file.
201    
202            * extensions/thuban/gdalwarp.cpp: New, but basically a direct copy
203            of the gdalwarp utility provided in GDAL. Added function calls
204            that can be accessed from python.
205    
206            * Data/iceland_sample_raster.thuban: New. Sample file that uses
207            a raster layer.
208    
209            * Data/iceland/island.tfw, Data/iceland/island.tif: New. Raster
210            layer image data.
211    
212            * Doc/thuban.dtd: Added rasterlayer attribute definition.
213    
214            * test/test_layer.py, test/test_load.py, test/test_save.py: Added
215            tests associated with the raster layer code.
216    
217            * test/test_transientdb.py
218            (TestTransientTable.test_auto_transient_table_query): Added a test
219            for using a Column object as the "right" parameter to a query.
220    
221    2003-05-19  Frank Koormann  <[email protected]>
222    
223            * Thuban/version.py (get_changelog_date):
224            Catch exceptions if ChangeLog does not exist.
225    
226            * Thuban/UI/view.py (MapCanvas.Export): Bugfix
227    
228    2003-05-19  Frank Koormann  <[email protected]>
229    
230            Extended version information for Thuban
231    
232            * Thuban/version.py: New, version information for Thuban: Last
233            modification date and last ChangeLog entry date.
234    
235            * Thuban/UI/mainwindow.py (MainWindow.About()): Extended version
236            information: Display Thuban, wxPython and Python version.
237    
238    2003-05-16  Bernhard Herzog  <[email protected]>
239    
240            * Thuban/Model/save.py: Remove some unused imports including the
241            __future__ import for nested_scopes as Thuban relies on Python 2.2
242            now.
243            (XMLWriter.encode): Remove the special case for a None argument.
244            In the saver encode is always called with a string argument.
245    
246    2003-05-16  Bernhard Herzog  <[email protected]>
247    
248            * Thuban/UI/__init__.py: Remove the work-around for the locale bug
249            in wxPython (at least when usinvg wxGTK) prior to 2.4. The symptom
250            of the bug was that e.g. float("1.2") would fail. Thuban now
251            requires 2.4.x.
252            
253    2003-05-16  Frank Koormann   <[email protected]>
254    
255            Printing enhancement and WMF export (under Win32)
256    
257            * Thuban/UI/renderer.py (ExportRenderer): New, derived from
258            ScreenRenderer. Renders Map, Legend and Scalebar for export.
259            (PrinterRenderer): New, derived from ExportRenderer. Replaces the old
260            PrintRender.
261    
262            * Thuban/UI/view.py (MapPrintout.__init__): Enhanced parameter set
263            to fullfil information needed for PrinterRenderer.
264            (MapCanvas.Export): New. Export Map (currently only to WMF on Win32).
265            (MapCanvas.Print): Adapted to new MapPrintout.
266            (OutputTransform): General calculations to transform from canvas
267            coordinates to export/printing devices.
268    
269            * Thuban/UI/mainwindow.py (MainWindow.ExportMap()): New. Added also
270            new method_command to call ExportMap, with platform dependency (only
271            __WXMSW__)
272      
273            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Position and Size
274            of scalebar drawing area as new parameters.
275            
276            * Thuban/Model/scalebar.py (roundInterval): round long instead of int
277    
278            * Thuban/UI/legend.py (ScalebarBitmap.__SetScale):
279            Update to extended scalebar.DrawScalebar header.
280    
281            * test/test_export.py: New, test Thuban.UI.view.OutputTransform()
282    
283            * test/test_scalebar.py: Made test executable as standalone.
284    
285    2003-05-16  Bernhard Herzog  <[email protected]>
286    
287            * Thuban/Model/table.py (Table): Remove this compatibility alias
288            for DBFTable.
289    
290            * test/test_table.py: Import DBFTable as Table because that alias
291            doesn't exist anymore.
292    
293            * Thuban/UI/classgen.py: Remove some unused imports
294    
295    2003-05-14  Jonathan Coles   <[email protected]>
296    
297            * Thuban/Model/classgen.py (ClassGenerator.GenSingletonsFromList):
298            Fix docstring.
299            (ClassGenerator.GenUniformDistribution): Fix spelling of method name.
300            (ClassGenerator.GenQuantiles): Use the left/right brackets and min/max
301            values of the supplied range to determine the beginning and end
302            bounds of the generated classes.
303    
304            * Thuban/Model/range.py (Range.number_re): Now accepts floats that
305            do not have a leading 0 (.5 is now accepted as well as 0.5).
306    
307            * Thuban/UI/classgen.py (ClassGenDialog.OnOK): Fix name of method
308            call to ClassGenerator.GenUniformDistribution.
309    
310            * Thuban/UI/projdialog.py (ProjFrame.__do_layout): Fix Windows
311            layout bug with the 'Projection' label.
312    
313            * test/support.py (FloatTestCase): New. Needed for the Range tests.
314    
315            * test/test_range.py: New. Imported from SciParam.
316    
317    2003-05-12  Jonathan Coles   <[email protected]>
318    
319            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Replace call
320            to table.UniqueValues() with calls that retrieve all the values
321            from the table. This will need to be replaced by a method on table
322            which can simply return the list (perhaps more efficiently).
323    
324    2003-05-12  Jonathan Coles   <[email protected]>
325    
326            The return value of ClassGenerator.CalculateQuantiles has changed.
327            Refer to the documentation for details.
328    
329            * test/test_classgen.py: Modified Quantile tests to use the
330            new return values.
331    
332            * Thuban/Model/classgen.py
333            (ClassGenerator.GenQuantiles): Add comments describing the parameters,
334            use new return values from CalculateQuantiles to produce the correct
335            range bounds in the Classification.
336            (ClassGenerator.CalculateQuantiles): Add more comments describing
337            the return values and parameters. Make minor adjustments to improve
338            the legibility of the code. Fix problem with adjusted not being set
339            in most cases.
340    
341    2003-05-12  Frank Koormann <[email protected]>
342            
343            * Thuban/Model/save.py (XMLWriter.encode()): Explicite call to unicode
344            and latin1. Fixes #1851 finally.
345    
346    2003-05-09  Jonathan Coles   <[email protected]>
347    
348            * test/test_classgen.py: New. Tests the Quantile algorithm.
349    
350            * Thuban/Model/classgen.py (ClassGenerator.CalculateQuantiles):
351            Clean up debugging statement, add comments, fix a small bug in the
352            returned adjusted percentiles.
353            
354    2003-05-09  Jonathan Coles   <[email protected]>
355    
356            Introduces Range class from SciParam into the ClassGroupRange class,
357            and such ranges can now be saved and loaded from disk.
358    
359            Quantiles are now available in the Classification Generator.
360    
361            Initial support for building Queries on a table. Doesn't do anything
362            but run some tests.
363    
364            * Thuban/Model/classification.py: Explicit imports.
365            (ClassGroupRange): Use the Range class to store the underlying
366            range information. The interface remains the same, except for
367            GetRange(), and you can also supply a Range object as the min
368            parameter to SetRange or __init__.
369    
370            * Thuban/Model/load.py (XMLReader.encode): New. Encodes the given
371            string appropriately for use in Thuban. Fixes RTbug #1851.
372            (SessionLoader.end_projection): Handle the context of the
373            projection tag a bit better by looking at what objects are not
374            None. There was an assumption that a projection tag for a map
375            could occur before any layers.
376            (SessionLoader.start_clrange): Provide backward compatibility for
377            reading min/max values as well as the new range parameter.
378    
379            * Thuban/Model/map.py: Explicit imports.
380    
381            * Thuban/Model/resource.py: Import _.
382            (ProjFileSaver.write): write header using projfile.dtd.
383    
384            * Thuban/Model/save.py: Explicit imports.
385            (XMLWriter.encode): New. Encode the given string from a format
386            used by Thuban into UTF-8. Fixes RTbug #1851.
387    
388            * Thuban/UI/classgen.py: Explicit imports.
389            (ClassGenDialog.__init__): Clean up the code and add support
390            for Quantiles.
391            (ClassGenDialog.OnOK): Add support for Quantiles.
392            (GenQuantilesPanel): New. Input panel for Quantiles.
393            (ClassGenerator, CustomRamp, MonochromaticRamp, GreyRamp, RedRamp,
394            GreenRamp, BlueRamp, HotToColdRamp): Move to Thuban/Model/classgen.py
395    
396            * Thuban/Model/classgen.py: New. Contains all the classes named above.
397    
398            * Thuban/UI/classifier.py: Explicit imports.
399            (ClassTable.GetValueAsCust, ClassTable.__ParseInput,
400            ClassTable.SetValueAsCustom): Reworked to use new Range class.
401    
402            * Thuban/UI/legend.py: Explicit imports.
403    
404            * Thuban/UI/mainwindow.py: Add support for the Join Dialog. Added
405            a Table menu and associated method calls.
406            (MainWindow.choose_color): Removed. No longer needed.
407    
408            * Thuban/UI/projdialog.py (ProjFrame.__VerifyButtons): Save button
409            should be disabled if no projection is selected in the available
410            list.
411    
412            * Thuban/UI/renderer.py: Explicit imports.
413    
414            * Thuban/UI/tableview.py (TableGrid.OnRangeSelect): Fix some issues
415            with correctly selecting the rows and issuing the right events.
416            Be sure to call Skip() to allow the grid to do some of its own
417            handling which allows the rows to actually be selected.
418            (LayerTableGrid.select_shapes): Rename from select_shape. Supports
419            selecting multiple shapes.
420            (LayerTableFrame): Support for building Queries.
421            (LayerTableFrame.select_shapes): Allow multiple shapes to be selected.
422    
423            * Thuban/UI/tree.py: Explicit imports.
424    
425            * Thuban/UI/view.py (MapCanvas): Delegate "SelectedShapes" so the
426            table view can call it.
427    
428            * test/test_classification.py: Explicit imports.
429            (TestClassification.test_ClassGroupRange): Fix test for new
430            Range class.
431    
432            * Doc/thuban.dtd: Add range parameter for clrange.
433    
434            * Thuban/Model/range.py: Taken from SciParam. Used as the underlying
435            object in ClassGroupRange, and also uesd for inputting ranges in
436            the classifer table and elsewhere.
437    
438            * Thuban/UI/join.py: New. Initial Join dialog. No real functionality
439            yet.
440    
441    2003-05-09  Frank Koormann <[email protected]>
442    
443            * Thuban/UI/scalebar.py (DrawScaleBar): Draw only if interval > 0.0.
444    
445    2003-05-08  Frank Koormann <[email protected]>
446    
447            Coding style updates
448    
449            * test/test_scalebar.py: Replaced tab indentation by spaces.
450    
451            * Thuban/UI/scalebar.py: Explicit imports.
452    
453    2003-05-08  Frank Koormann <[email protected]>
454    
455            * Thuban/UI/scalebar.py
456            (ScaleBar.DrawScalebar): Format string bug fixed.
457    
458    2003-05-08  Frank Koormann <[email protected]>
459    
460            Reorganization of scalebar component (no wx in Thuban/Model)
461    
462            * Thuban/Model/scalebar.py: Rendering moved to Thuban/UI/scalebar.py
463            (deriveInterval):
464            Calculate scalebar interval and unit which fits in width for scale.
465            (roundInterval): Round float.
466    
467            * Thuban/UI/scalebar.py (ScaleBar): Scalebar rendering
468    
469            * test/test_scalebar.py: Test for Thuban/Model/scalebar.py methods.
470    
471            * Thuban/UI/legend.py: Import Thuban.UI.scalebar
472    
473    2003-05-08  Frank Koormann <[email protected]>
474    
475            * Thuban/UI/legend.py (ScalebarBitmap.SetCanvas):
476            Initialize ScaleBar with canvas.map
477    
478            * Thuban/Model/scalebar.py (ScaleBar.roundInterval()): New,
479            round intervals to display smarter lengths
480            (ScaleBar.DrawScalebar): Draw Scalebar only if the map contains a
481            layer. If the maps has no projection applied grey the scalebar.
482    
483    2003-05-07  Frank Koormann <[email protected]>
484            
485            Basic Scalebar features added.
486    
487            * Thuban/Model/scalebar.py (ScaleBar): New, scalebar rendering.
488    
489            * Thuban/UI/legend.py (LegendPanel): Added scalebar bitmap
490            (ScaleBarBitmap): New, links the scalebar bitmap with view messages
491            and the renderer.
492    
493            * Thuban/UI/view.py (MapCanvas.set_view_transform): Issue SCALE_CHANGED.
494    
495            * Thuban/UI/messages.py: SCALE_CHANGED added.
496    
497    2003-05-07  Bernhard Herzog  <[email protected]>
498    
499            * Thuban/Model/session.py (Session.__init__): New instance
500            variable shapestores to hold a list of all open shapestore objects
501            (Session.ShapeStores): New. Accessor method for the shapestores
502            list.
503            (Session._add_shapestore, Session._clean_weak_store_refs): New.
504            Internal methods to maintain the shapestores list.
505            (Session.Tables): New. Return all tables open in the session.
506            (Session.OpenShapefile): Insert the new ShapeStore into the
507            shapestores list.
508    
509            * test/test_session.py (TestSessionSimple.test_initial_state): Add
510            tests for ShapeStores and Tables
511            (TestSessionWithContent.test_shape_stores)
512            (TestSessionWithContent.test_tables): New. Test cases for
513            ShapeStores and Tables
514    
515    2003-05-07  Bernhard Herzog  <[email protected]>
516    
517            * Thuban/Model/transientdb.py (TransientTableBase.ReadRowAsDict):
518            Add comments about the optimizations used.
519            (AutoTransientTable.ReadValue, TransientTableBase.ReadValue): New.
520            Implement the ReadValue table interface method.
521    
522            * test/test_transientdb.py
523            (TestTransientTable.run_iceland_political_tests)
524            (TestTransientTable.test_transient_joined_table): Add tests for
525            ReadValue
526    
527    2003-05-07  Frank Koormann <[email protected]>
528    
529            * Resources/Bitmaps/fulllayerextent.xpm,
530            Resources/Bitmaps/fullselextent.xpm: Replaced the place holders with
531            new icons.
532    
533    2003-05-06  Bernhard Herzog  <[email protected]>
534    
535            * Thuban/Model/transientdb.py (AutoTransientTable.SimpleQuery):
536            New. Simply delegate to the transient table's version.
537    
538            * test/test_transientdb.py
539            (TestTransientTable.test_auto_transient_table_query): New. Test
540            case for AutoTransientTable's SimpleQuery
541    
542    2003-05-06  Bernhard Herzog  <[email protected]>
543    
544            * Thuban/Model/transientdb.py (TransientTableBase.SimpleQuery):
545            Implement a simple query method for the query dialog
546            (TransientTableBase.create): Add an INTEGER PRIMARY KEY that holds
547            the row index or shapeid.
548            (TransientTable.create): Insert the right value of the row index
549            (TransientJoinedTable.create): Copy the row index of the left
550            table to the joined result table
551    
552            * test/test_transientdb.py
553            (TestTransientTable.test_transient_table_read_twice): Fix
554            doc-string
555            (TestTransientTable.test_transient_table_query): New. Test for the
556            SimpleQuery method
557    
558    2003-05-06  Bernhard Herzog  <[email protected]>
559    
560            Convert all table users to use the new table interface. This only
561            covers Thuban itself, not GREAT-ER or other applications built on
562            Thuban yet, so the compatibility interface stays in place for the
563            time being but it now issues DeprecationWarnings.
564    
565            Finally, the new Table interface has a new method, HasColumn.
566    
567            * Thuban/Model/table.py (OldTableInterfaceMixin): All methods
568            issue deprecation warnings when they're. The warnings refer to the
569            caller of the method.
570            (OldTableInterfaceMixin.__deprecation_warning): New. Helper method
571            for the deprecation warnings
572    
573            * test/test_table.py: Ignore the deprecation warnings for the old
574            table in the tests in this module. The purpose of the tests is to
575            test the old interface, after all.
576    
577            * test/test_transientdb.py
578            (TestTransientTable.run_iceland_political_tests): Use the
579            constants for the types. Add a test for HasColumn
580            (TestTransientTable.test_transient_joined_table): Adapt to new
581            table interface. Add a test for HasColumn
582            (TestTransientTable.test_transient_table_read_twice): Adapt to new
583            table interface
584    
585            * Thuban/UI/tableview.py (DataTable.SetTable, DataTable.GetValue):
586            Adapt to new table interface
587    
588            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Adapt to
589            new table interface
590    
591            * Thuban/UI/controls.py (RecordListCtrl.fill_list)
592            (RecordTable.SetTable): Adapt to new table interface
593    
594            * Thuban/UI/classifier.py (Classifier.__init__)
595            (Classifier.__init__): Adapt to new table interface
596    
597            * Thuban/UI/classgen.py (ClassGenDialog.__init__)
598            (GenUniformPanel._OnRetrieve, GenUniquePanel._OnRetrieve): Adapt
599            to new table interface
600    
601            * Thuban/Model/transientdb.py (TransientTableBase.HasColumn)
602            (AutoTransientTable.HasColumn): Implement the new table interface
603            method
604            (AutoTransientTable.ReadRowAsDict, AutoTransientTable.ValueRange)
605            (AutoTransientTable.UniqueValues): Adapt to new table interface
606    
607            * Thuban/Model/layer.py (Layer.SetShapeStore, Layer.GetFieldType):
608            Adapt to new table interface
609    
610            * test/test_layer.py (TestLayer.open_shapefile): Helper method to
611            simplify opening shapefiles a bit easier.
612            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
613            (TestLayer.test_point_layer): Use the new helper method
614            (TestLayer.test_get_field_type): New. Test for the GetFieldType
615            method
616    
617            * test/test_dbf_table.py (TestDBFTable.test_has_column): Test for
618            the new table method
619    
620            * test/test_memory_table.py (TestMemoryTable.test_has_column):
621            Test for the new table method HasColumn
622    
623    2003-05-06  Jonathan Coles   <[email protected]>
624    
625            Addresses the "Selection Extent" wish of RTbug #1787.
626    
627            * Resources/Bitmaps/fulllayerextent.xpm,
628            Resources/Bitmaps/fullselextent.xpm: Bitmaps for layer and selection
629            extent. These are just place holders for the real bitmaps.
630    
631            * Thuban/Model/layer.py (Shape): Since a Shape is immutable only
632            calculate the bounding box once (the first time compute_bbox() is
633            called).
634            (Layer.ShapesBoundingBox): New. Given a list of shape ids, return
635            the bounding box for the shapes in lat/long coordinates.
636    
637            * Thuban/UI/mainwindow.py: Added new "Full selection extent" menu
638            option.
639            (MainWindow.has_selected_shapes): New. Returns true if there are
640            any selected shapes.
641            (MainWindow.FullSelectionExtent): New. Calls
642            MapCanvas.FitSelectedToWindow() when the user selects the menu option.
643            (_has_selected_shapes): New. Returns true if there are any
644            selected shapes.
645    
646            * Thuban/UI/selection.py (Selection.HasSelectedShapes): New. Returns
647            true if there are any selected shapes.
648    
649            * Thuban/UI/view.py (MapCanvas): Added delegated method
650            HasSelectedShapes.
651            (MapCanvas.FitSelectedToWindow): New. Centers and scales any selected
652            shapes on the canvas using the map projection (if any).
653    
654            * test/test_layer.py (TestLayer.test_arc_layer): Add some tests
655            for Layer.ShapesBoundingBox().
656    
657    2003-05-06  Bernhard Herzog  <[email protected]>
658    
659            * Resources/Projections/defaults.proj: Fix spelling of Mercator
660    
661    2003-05-05  Jonathan Coles   <[email protected]>
662    
663            Addresses the "Full Layer Extent" wish of RTbug #1787.
664    
665            * Resources/Projections/defaults.proj: Added UK National Grid.
666    
667            * Thuban/UI/mainwindow.py: Added new "Full layer extent" menu option.
668            (MainWindow.FullLayerExtent): New. Calls MapCanvas.FitLayerToWindow()
669            when the user selects the menu option.
670    
671            * Thuban/UI/view.py (MapCanvas.FitLayerToWindow): New. Centers and
672            scales the given layer on the canvas using the map projection.
673    
674    2003-05-05  Bernhard Herzog  <[email protected]>
675    
676            Convert the table implementations to a new table interface. All
677            tables use a common mixin class to provide backwards compatibility
678            until all table users have been updated.
679    
680            * Thuban/Model/table.py (OldTableInterfaceMixin): Mixin class to
681            provide backwards compatibility for table classes implementing the
682            new interface
683            (DBFTable, MemoryTable): Implement the new table interface. Use
684            OldTableInterfaceMixin as base for compatibility
685            (DBFColumn, MemoryColumn): New. Column description for DBFTable
686            and MemoryTable resp.
687    
688            * test/test_dbf_table.py: New. Test cases for the DBFTable with
689            the new table interface.
690    
691            * test/test_memory_table.py: New. Test cases for the MemoryTable
692            with the new table interface.
693    
694            * test/test_table.py: Document the all tests in this file as only
695            for backwards compatibility. The equivalent tests for the new
696            interface are in test_memory_table.py and test_dbf_table.py
697            (MemoryTableTest.test_read): field_info should be returning tuples
698            with four items
699            (MemoryTableTest.test_write): Make doc-string a more precise.
700    
701            * Thuban/Model/transientdb.py (TransientTableBase): Convert to new
702            table interface. Derive from from OldTableInterfaceMixin for
703            compatibility.
704            (TransientTableBase.create): New intance variable column_map to
705            map from names and indices to column objects
706            (TransientTable.create): Use the new table interface of the input
707            table
708            (AutoTransientTable): Convert to new table interface. Derive from
709            from OldTableInterfaceMixin for compatibility.
710            (AutoTransientTable.write_record): Removed. It's not implemented
711            yet and we still have to decide how to handle writing with the new
712            table and data framework.
713    
714            * test/test_transientdb.py
715            (TestTransientTable.run_iceland_political_tests)
716            (TestTransientTable.test_transient_joined_table): Use the new
717            table interface
718    
719    2003-05-05  Jonathan Coles   <[email protected]>
720    
721            This is namely a collection of UI updates to improve user interactivity.
722            Tabbing between controls now exists and you can use ESC to close dialog
723            boxes; ENTER will active the default button.
724    
725            * Thuban/UI/classgen.py (ClassGenDialog.__init__): Rearrange the
726            order that the controls are created so that tabbing works correctly.
727            (ClassGenDialog.OnOK): Renamed from _OnGenerate() so that the
728            wxDialog can handle the default button correctly.
729            (ClassGenDialog.OnCancel): Renamed from _OnCloseBtn() for the
730            same reasons as for OnOK.
731            (GenUniformPanel._OnRetrieve): Call wxBeginBusyCursor/wxEndBusyCursor
732            when we ask the table for the maximum/minimum values of a field
733            which could take a very long time.
734    
735            * Thuban/UI/classifier.py (Classifier.__init__): Rearrange the
736            order that the controls are created so that tabbing works correctly.
737            (SelectPropertiesDialog.__init__): Rearrange the order that the
738            controls are created so that tabbing works correctly.
739    
740            * Thuban/UI/dialogs.py: Copied NonModalDialog box and changed it
741            to derive from a wxDialog but behave like the original implementation
742            which was derived from a wxFrame. wxDialog provides useful key
743            handling functionality like ESC calling OnCancel and ENTER calling
744            OnOK which is lost with wxFrame.
745    
746            * Thuban/UI/mainwindow.py: Add "..." to menu items that will open
747            new dialogs.
748    
749            * Thuban/UI/projdialog.py (ProjFrame.__init__): Rearrange the
750            order that the controls are created so that tabbing works correctly.
751            (ProjFrame.OnApply): Renamed from _OnTry() to use wxDialog behaviour.
752            (ProjFrame.OnOK): Renamed from _OnOK() to use wxDialog behaviour.
753            (ProjFrame.OnCancel): Renamed from _OnClose() to use wxDialog behaviour.
754            (ProjPanel.__init__): Add "Airy" to the list of ellipsoids so we
755            can provide the "UK National Grid" as a default projection.
756            (UTMPanel.__init__): Rearrange the order that the controls are
757            created so that tabbing works correctly.
758    
759    2003-05-05  Bernhard Herzog  <[email protected]>
760    
761            * extensions/thuban/wxproj.cpp: Fix some of the comments.
762            (project_point): If a map projection but no layer projection is
763            given, convert degrees to radians before applying the map
764            projection.
765    
766            * Thuban/UI/tableview.py (TableGrid.disallow_messages)
767            (TableGrid.allow_messages): New methods to make it possible to
768            inhibit message sending.
769            (TableGrid.issue): Only send the message if not inhibited.
770            (LayerTableGrid.select_shape): Use the new methods to make sure
771            that no ROW_SELECTED message is sent while we're updating the
772            selected rows to match the selected shapes.
773    
774    2003-05-02  Jan-Oliver Wagner <[email protected]>
775    
776            Implementation of MemoryTable.
777    
778            * Thuban/Model/table.py (MemoryTable): New. Quite simple table
779            implementation that operates on a list of tuples. All of the data
780            are kept in the memory.
781    
782            * test/test_table.py (MemoryTableTest): New.
783    
784            * test/test_transientdb.py (SimpleTable): Removed.
785            (TestTransientTable.test_transient_joined_table,
786            (TestTransientTable.test_transient_table_read_twice): Replaced
787            SimpleTable by MemoryTable.
788    
789    2003-04-30  Jonathan Coles   <[email protected]>
790    
791            * Data/iceland_sample.thuban: Now contains correct projections
792            for each of the layers.
793    
794            * Resources/Projections/defaults.proj: Geographic projection
795            contains unit conversion parameter.
796    
797    2003-04-30  Jonathan Coles   <[email protected]>
798    
799            The most important part of this putback is the projection changes.
800            It should now be possible to specify the projection that a layer
801            is in and then specify a different projection for the map. The
802            projection dialog has an extra parameter for a geographic projection
803            which lets the user select if the input is in degrees or radians.
804    
805            * Thuban/Model/layer.py (Layer.ShapesInRegion): Fix docstring
806            to say that the parameter is a tuple of unprojected
807            points (which is what the callers to this method were assuming).
808            Also, since the points are unprojected we need to projected them.
809    
810            * Thuban/UI/legend.py (LegendTree.MoveCurrentItemUp,
811            LegendTree.MoveCurrentItemDown): If the layer or any of the layer's
812            groups are selected, move the layer up/down. Fixes RTbug #1833.
813    
814            * Thuban/UI/mainwindow.py: Move menu item map_rename up.
815    
816            * Thuban/UI/projdialog.py (ProjFrame._OnSave): Add missing
817            parameter in call to SetClientData.
818            (GeoPanel): Add support for selecting the units that the
819            source data is in (Radians or Degrees).
820    
821            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Optimize
822            the rendering loop by reducing the number of if's, removing the
823            unnecessary try/except block, and checking if the old group
824            is the same as the new one (which happens a lot if there is
825            no classification, or lots of shapes are in the same group).
826    
827            * Thuban/UI/view.py (MapCanvas.OnPaint): Add a try/except block
828            around the redraw routine to try to catch problems that the user
829            may create by selecting invalid projections for the data set and
830            map. Clears the display if there are any problems and prints the
831            error.
832            (MapCanvas.do_redraw): Use DC.Clear() instead of drawing a filled
833            rectangle.
834    
835            * extensions/thuban/wxproj.cpp (project_point): First invert the
836            supplied point (which should be in projected coordinates) using
837            the layer's projection and then project the point using the
838            map's projection.
839            (project_points): Use project_point() to project each point.
840    
841  2003-04-30  Jan-Oliver Wagner <[email protected]>  2003-04-30  Jan-Oliver Wagner <[email protected]>
842    
843          * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:          * Thuban/Model/layer.py (Layer.SetShapeStore): Fixed a bug:
# Line 25  Line 865 
865          (TestTransientTable.test_transient_table_read_twice): New test          (TestTransientTable.test_transient_table_read_twice): New test
866          case for the above bug-fix.          case for the above bug-fix.
867    
868    2003-04-29  Jonathan Coles   <[email protected]>
869    
870            * Thuban/common.py: Removed. No longer needed Str2Num. RTbug #1832.
871    
872            * Thuban/UI/classgen.py: Remove all uses of Str2Num.
873    
874            * Thuban/UI/classifier.py: Remove all uses of Str2Num.
875            (ClassTable.SetValueAsCustom): Rename keyword argument in
876            ClassGroup* constructors to match argument name.
877    
878  2003-04-29  Bernhard Herzog  <[email protected]>  2003-04-29  Bernhard Herzog  <[email protected]>
879    
880          * Thuban/Model/session.py (Session.Destroy): Explicitly close the          * Thuban/Model/session.py (Session.Destroy): Explicitly close the

Legend:
Removed from v.792  
changed lines
  Added in v.981

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26