/[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 958 by bh, Wed May 21 17:12:30 2003 UTC revision 1077 by frank, Wed May 28 08:25:34 2003 UTC
# Line 1  Line 1 
1    2003-05-28  Frank Koormann  <[email protected]>
2    
3            * Thuban/UI/mainwindow.py (MainWindow.TableShow):
4            Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
5    
6    2003-05-27  Bernhard Herzog  <[email protected]>
7    
8            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
9            delegate SelectedLayer.
10            (MainWindow.LayerUnjoinTable): Implement.
11            (_can_unjoin): New. Helper function for the sensitivity of the
12            layer/unjoin command.
13    
14            * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
15            (DerivedShapeStore.OrigShapeStore): New. Return the original
16            shapestore. Used to figure out how to unjoin.
17            (DerivedShapeStore.Shapefile): Fix a typo.
18    
19    2003-05-27  Bernhard Herzog  <[email protected]>
20    
21            * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
22            well
23            (JoinDialog.__init__): Use the layer parameter and only build the
24            left choice when a layer is given
25            (JoinDialog.OnJoin): Handle layer joins as well
26            (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
27            that the user selects the "Select..." item. The sensitivitly
28            updating is now in update_sensitivity
29            (JoinDialog.y): New method to refactor the sensitivity update of
30            the join button into its own method.
31    
32            * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
33    
34    2003-05-27  Bernhard Herzog  <[email protected]>
35    
36            * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
37            iff there are unreferenced tables in the session
38    
39    2003-05-27  Bernhard Herzog  <[email protected]>
40    
41            * Thuban/Model/messages.py (TABLE_REMOVED): New message.
42    
43            * Thuban/Model/session.py (Session.UnreferencedTables): New method
44            to return tables that are not referenced by other tables or shape
45            stores and can be removed.
46            (Session.RemoveTable): Issue a TABLE_REMOVED message after
47            removing the table
48    
49            * Thuban/UI/mainwindow.py: Remove unused imports
50            (MainWindow.TableClose): Implement.
51    
52            * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
53            messages so that the frame will be automatically closed when a new
54            session is opened or the table is removed.
55            (TableFrame.OnClose): Unsubscribe the Subscriptions made in
56            __init__
57            (TableFrame.close_on_session_replaced)
58            (TableFrame.close_on_table_removed): New. Subscribers that close
59            the window
60    
61            * test/test_session.py (TestSessionMessages.test_remove_table)
62            (TestSessionSimple.test_remove_table): Move the test to
63            TestSessionSimple and add test for the TABLE_REMOVED message
64            (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
65            (TestSessionSimple.test_unreferenced_tables) New. Test for the
66            UnreferencedTables method.
67            (UnreferencedTablesTests): New. Class with some more sophisticated
68            tests for UnreferencedTables.
69    
70    2003-05-27  Frank Koormann  <[email protected]>
71    
72            * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
73            display has some unwanted side effects. Removed again.
74    
75    2003-05-27  Frank Koormann  <[email protected]>
76    
77            * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
78    
79            * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
80    
81    2003-05-27  Jan-Oliver Wagner <[email protected]>
82    
83            * test/test_menu.py (MenuTest.test): Added test for
84            Menu.RemoveItem().
85    
86            * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
87            the menu.
88    
89    2003-05-27  Frank Koormann  <[email protected]>
90            
91            Nonmodal dialogs without parent (i.e. they can fall behind the main
92            window)
93    
94            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
95            all dialogs in the dialogs dictionary and the canvas.
96    
97            * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
98            parent, i.e. can fall behind other windows.
99            (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
100            dictionary before removing it.
101    
102            * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
103    
104            * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
105            * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
106            * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
107    
108    2003-05-27  Bernhard Herzog  <[email protected]>
109    
110            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
111            tableview dialog
112            (MainWindow.TableShow): Use ShowTableView to open the dialogs.
113            Also, don't use the table's titles as the dialog names. The titles
114            aren't guaranteed to be unique.
115            (MainWindow.TableOpen): Open a table view dialog after opening the
116            table
117    
118    2003-05-27  Bernhard Herzog  <[email protected]>
119    
120            * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
121            effect can be achieved by simply closing the window showing the
122            table.
123            (MainWindow.TableHide): Removed.
124            (main_menu): Removed "table_hide"
125    
126    2003-05-27  Frank Koormann  <[email protected]>
127    
128            Fix legend tree display problems under Win32
129    
130            * Thuban/UI/legend.py:  BMP_SIZE_W = 15
131            (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
132            (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
133    
134            * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
135    
136    2003-05-27  Jan-Oliver Wagner <[email protected]>
137    
138            * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
139            'after' now allows to insert separators almost anywhere in the menu.
140    
141    2003-05-27  Frank Koormann  <[email protected]>
142    
143            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
144            "S" of selection box label to hint on hot key (Alt-S). Works under
145            Win32 but is ignored under GTK.
146    
147    2003-05-26  Frank Koormann  <[email protected]>
148    
149            * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
150            Center Choices.
151    
152    2003-05-26  Bernhard Herzog  <[email protected]>
153    
154            Remove the Precision methods again. They're too DBF specific to be
155            part of the table interface and they're only used in table_to_dbf
156            anyway.
157            
158            * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
159            fixed precision of 12 for doubles.
160            (TransientTableBase.Precision): Removed
161            (AutoTransientTable.Width): Delegate to self.table.
162    
163            * Thuban/Model/table.py (DBFTable.Precision)
164            (MemoryTable.Precision): Removed.
165            (MemoryTable.Width): Use a fixed precision of 12 for doubles.
166            (table_to_dbf): Use a fixed precision of 12 for floats unless the
167            column object specifies something else.
168    
169            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
170            test for table_to_dbf
171    
172    2003-05-26  Bernhard Herzog  <[email protected]>
173    
174            * test/test_transientdb.py
175            (TestTransientTable.run_iceland_political_tests): Fix a comment.
176    
177    2003-05-26  Bernhard Herzog  <[email protected]>
178    
179            * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
180            implementation. Mark parts of the file format strings for
181            localization.
182    
183            * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
184            file and add the table to the tables managed by the session
185    
186            * test/test_session.py (TestSessionSimple.test_open_table_file):
187            New. test case for OpenTableFile
188    
189    2003-05-26  Jan-Oliver Wagner <[email protected]>
190    
191            * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
192            Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
193            Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
194            Replace the true/false of wxWindows by True/False of Python 2.2.1.
195    
196    2003-05-26  Jan-Oliver Wagner <[email protected]>
197    
198            * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
199            already a selection present, update the grid accordingly.
200    
201            * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
202            resizeable and increase its initial size.
203    
204    2003-05-26  Frank Koormann  <[email protected]>
205    
206            Table export functionality
207    
208            * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
209            Return width (in characters) for a column.
210            (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
211            (table_to_dbf): Write table to dbf file.
212            (table_to_csv): Write table to csv file.
213    
214            * Thuban/Model/transientdb.py (TransientTableBase.Width,
215            TransientTableBase.Precision): Return column width and precision.
216    
217            * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
218            or table_to_csv depending on file selection.
219    
220            * test/test_dbf_table.py:
221            Test table_to_dbf (extension of former part of test).
222    
223            * test/test_csv_table.py:
224            Test table_to_csv.
225    
226    2003-05-23  Jan-Oliver Wagner <[email protected]>
227    
228            * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
229            Use QueryTableFrame instead of TableFrame.
230    
231            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
232            table window with 'Layer Table:' instead of 'Table:'.
233    
234    2003-05-23  Jan-Oliver Wagner <[email protected]>
235    
236            Give all tables a title via mix-in TitledObject.LayerShowTable
237    
238            * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
239            only if it exists.
240    
241            * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
242            and call its init-method with a default title. Remove Title() method.
243    
244            * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
245            AutoTransientTable): mix-in TitledObject and call its init-method with
246            a default title. Remove Title() method.
247    
248    2003-05-23  Bernhard Herzog  <[email protected]>
249    
250            * Thuban/Model/session.py (Session.AddShapeStore): Define
251            AddShapeStore analogously to AddTable.
252    
253            * test/test_session.py (TestSessionSimple.test_add_shapestore):
254            New. Test for AddShapeStore
255    
256    2003-05-23  Jan-Oliver Wagner <[email protected]>
257    
258            Introducing QueryTableFrame and a very coarse ShowTable implementation.
259    
260            * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
261            class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
262            The latter implements the selection GUI without dependency on a layer.
263            LayerTableFrame now is derived from QueryTableFrame and connects
264            to a layer.
265    
266            * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
267            implementation that still needs work.
268    
269            * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
270    
271    2003-05-22  Frank Koormann  <[email protected]>
272    
273            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
274            Added "outer_join = False" as optional parameter.
275            (TransientJoinedTable.create): If outer join is true, perform a
276            "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
277            the left table. Records not matching are filled with 0 / None.
278    
279            * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
280            (JoinDialog.OnJoin): Consider outer join check box.
281    
282    2003-05-22  Bernhard Herzog  <[email protected]>
283    
284            * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
285            somewhat safer way. Storing the traceback in a local variable can
286            lead to memory leaks
287    
288    2003-05-22  Bernhard Herzog  <[email protected]>
289    
290            * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
291            the wxMessageDialog's Destroy() method.
292    
293    2003-05-22  Frank Koormann  <[email protected]>
294    
295            * Thuban/UI/join.py (JoinDialog.__init__): Make use of
296            TransientTable.Title()
297    
298    2003-05-22  Frank Koormann  <[email protected]>
299    
300            Join Dialog, initial version.
301    
302            * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
303    
304            * Thuban/UI/join.py (JoinDialog): Functional implementation of
305            former framework. Renamed Table1/Table2 to LeftTable/RightTable
306            in all occurences.
307    
308            * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
309            Typo fixed.
310    
311    2003-05-22  Bernhard Herzog  <[email protected]>
312    
313            Give the tables titles so that the GUI can display more meaningful
314            names. For now the titles are fixed but depend on e.g. filenames
315            or the titles of the joined tables.
316    
317            * Thuban/Model/transientdb.py (TransientTable.Title)
318            (TransientJoinedTable.Title, AutoTransientTable.Title): New.
319    
320            * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
321    
322            * test/test_transientdb.py
323            (TestTransientTable.test_auto_transient_table_title): New. Test
324            for the Title method
325            (TestTransientTable.test_transient_joined_table)
326            (TestTransientTable.test_transient_table): Add test for the Title
327            methods
328    
329            * test/test_memory_table.py (TestMemoryTable.test_title): New.
330            Test for the Title method
331    
332            * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
333            the Title method
334    
335    2003-05-22  Bernhard Herzog  <[email protected]>
336    
337            * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
338            Provide a better way to destroy the layers
339            (TestLayer.test_base_layer, TestLayer.test_arc_layer)
340            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
341            (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
342            the new way to destroy the layers.
343            (TestLayer.test_derived_store): New. Test for using a layer with a
344            DerivedShapeStore
345    
346            * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
347            filename if the shape store actually has one.
348    
349    2003-05-22  Bernhard Herzog  <[email protected]>
350    
351            * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
352            for the filename
353    
354            * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
355            for the FileName method
356            (TestDBFTableWriting.test_write): Fix spelling of filename
357    
358    2003-05-22  Thomas Koester  <[email protected]>
359    
360            * Thuban/Model/range.py, test/test_range.py: Brought over new Range
361            from SciParam that now really is immutable.
362    
363    2003-05-22  Frank Koormann  <[email protected]>
364    
365            Layer Top/Bottom placement added to legend.
366    
367            * Thuban/UI/legend.py
368            (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
369            bound to tool events.
370            (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
371            New, methods binding the event methods with the map methods.
372    
373            * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
374            layer at top/bottom of layer stack.
375    
376            * Resources/Bitmaps/top_layer.xpm: New button icon.
377    
378            * Resources/Bitmaps/bottom_layer.xpm: New button icon.
379    
380    2003-05-22  Bernhard Herzog  <[email protected]>
381    
382            * Thuban/Model/session.py (Session.RemoveTable): New method to
383            remove tables
384    
385            * test/test_session.py (TestSessionSimple.test_remove_table): New.
386            Test for RemoveTable
387    
388    2003-05-22  Thomas Koester  <[email protected]>
389    
390            * Thuban/Model/classgen.py: Added short module doc string and CVS id.
391            (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
392    
393    2003-05-22  Bernhard Herzog  <[email protected]>
394    
395            Implement a way to discover dependencies between tables and
396            shapestores.
397    
398            * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
399            (TransientJoinedTable.Dependencies)
400            (AutoTransientTable.SimpleQuery): New. Implement the dependencies
401            interface
402            (TransientJoinedTable.__init__): Keep tack of the original table
403            objects in addition to the corresponding transient tables.
404    
405            * Thuban/Model/table.py (DBFTable.Dependencies)
406            (MemoryTable.Dependencies): New. Implement the dependencies
407            interface
408    
409            * Thuban/Model/data.py (ShapeTable): New. Helper class for
410            ShapefileStore
411            (ShapefileStore.__init__): Use ShapeTable instead of
412            AutoTransientTable
413            (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
414            (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
415            methods for filename and type
416            (ShapefileStore.Dependencies): New. Implement the dependencies
417            interface
418            (DerivedShapeStore): New class to replace SimpleStore. The main
419            difference to SimpleStore is that it depends not on a shapefile
420            but another shapestore which expresses the dependencies a bit
421            better
422            (SimpleStore.__init__): Add deprecation warning.
423    
424            * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
425            Test for the Dependencies method.
426    
427            * test/test_memory_table.py (TestMemoryTable.test_dependencies):
428            New. Test for the Dependencies method.
429    
430            * test/test_transientdb.py
431            (TestTransientTable.test_auto_transient_table_dependencies): New.
432            Test for the Dependencies method.
433            (TestTransientTable.test_transient_joined_table): Add test for the
434            Dependencies method.
435    
436            * test/test_session.py (TestSessionSimple.setUp)
437            (TestSessionSimple.tearDown): New. Implement a better way to
438            destroy the sessions.
439            (TestSessionSimple.test_initial_state)
440            (TestSessionSimple.test_add_table): Bind session to self.session
441            so that it's destroyed by tearDown
442            (TestSessionSimple.test_open_shapefile): New. Test for
443            OpenShapefile and the object it returns
444    
445    2003-05-22  Bernhard Herzog  <[email protected]>
446    
447            * Thuban/Model/session.py (Session.AddTable): New method to
448            register tables with the session.
449            (Session.Tables): Return the tables registered with AddTable too.
450    
451            * test/test_session.py (TestSessionSimple.test_add_table): New.
452            Test case for the AddTable method
453    
454    2003-05-22  Frank Koormann  <[email protected]>
455    
456            UI polishing updates: Place main buttons (OK, Cancel, etc) in the
457            lower right corner, center labels for selections, initialize controls
458            in reasonable order for keyboard navigation.
459    
460            * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
461            (ProjFrame.__DoOnProjAvail): Determine position of current projection
462            using the wxListBox.FindString() method. Still a problem (#1886)
463    
464            * Thuban/UI/classifier.py
465            (Classifier.__init__, SelectPropertiesDialog.__init__)
466    
467            * Thuban/UI/classgen.py (ClassGenDialog.__init__,
468            (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
469            different classification types from here to __init__.
470            (GenUniquePanel.__init__): Set the column width of the first field
471            in the Field ListCtrl to the full width.
472    
473            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
474            Button to 'Export'. Center Buttons in Selection Box, set Focus to
475            Grid.
476            (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
477            changes focus to the Selection when pressing "Alt-S".
478    
479            * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
480            the text if not visible. The italic font sometimes exceeds the
481            rendering area.
482    
483    2003-05-21  Jonathan Coles   <[email protected]>
484    
485            * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
486            to OnClose so that Thuban closes correctly.
487    
488            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
489            DockFrame.OnClose, not DockFrame._OnClose.
490    
491    2003-05-21  Jonathan Coles   <[email protected]>
492    
493            * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
494            references to 'inf' and use new Range __init__ to pass floats
495            directly rather than converting them to strings first.
496            Fixes RTBug #1876.
497    
498            * Thuban/Model/classification.py (ClassGroupRange.SetRange):
499            Use new Range ___init__ to pass floats.
500    
501            * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
502            filename is a valid image file. Throw IOError otherwise.
503    
504            * Thuban/Model/range.py: Brought over new Range from SciParam that
505            is immutable and has an __init__ which can accept floats.
506    
507            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
508            into try block. AddLayer doesn't throw any exceptions anymore.
509            (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
510            try block.
511    
512            * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
513            the first item in choices. Fixes RTBug #1882.
514    
515            * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
516            has gone to 0 which is a serious problem. abort.
517            (MapRenderer.draw_raster_layer): Catch IOError seperately and
518            print the error from GDAL.
519    
520            * Thuban/UI/tableview.py (TableGrid.__init__): Call
521            ToggleEventListeners to turn on listening.
522            (TableGrid.ToggleEventListeners): New. Turns event listening on
523            and off so as to prevent excessive messages.
524            (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
525            to suppress excessive messages when selecting many rows.
526            Fixes RTBug #1880.
527    
528            * Thuban/UI/view.py: Added checks against if scale == 0. This
529            is a serious problem that can occur when an image without
530            geo data is loading and causes the map projection bounds to
531            go to infinity. Right now, the solution is to simply try
532            to recover.
533    
534            * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
535            to set the MFILEReceiver attributes even if the data is NULL.
536    
537            * extensions/thuban/gdalwarp.cpp: Improved the error handling
538            and passed GDAL messages back up to the Python layer. Also
539            tried to fix some memory leaks that were present in the original
540            utility but didn't matter because the program aborted.
541    
542            * test/test_range.py: Copied over tests from SciParam. Removed
543            tests against importing. Fixes RTBug #1867.
544    
545  2003-05-21  Bernhard Herzog  <[email protected]>  2003-05-21  Bernhard Herzog  <[email protected]>
546    
547          * test/test_load.py: Remove unused imports and restructure the          * test/test_load.py: Remove unused imports and restructure the

Legend:
Removed from v.958  
changed lines
  Added in v.1077

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26