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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26