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

Legend:
Removed from v.767  
changed lines
  Added in v.988

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26