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

Legend:
Removed from v.769  
changed lines
  Added in v.993

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26