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

Legend:
Removed from v.817  
changed lines
  Added in v.1046

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26