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

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

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

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

Legend:
Removed from v.766  
changed lines
  Added in v.1008

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26