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

Legend:
Removed from v.776  
changed lines
  Added in v.1087

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26