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

Legend:
Removed from v.803  
changed lines
  Added in v.1081

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26