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

Legend:
Removed from v.840  
changed lines
  Added in v.1083

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26