/[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

trunk/thuban/ChangeLog revision 997 by bh, Thu May 22 18:21:23 2003 UTC branches/greater-ms3/thuban/ChangeLog revision 1206 by jonathan, Fri Jun 13 16:35:25 2003 UTC
# Line 1  Line 1 
1    2003-06-13  Jonathan Coles   <[email protected]>
2    
3            [NOTE: This is a back-port from the current CVS head]
4                                                                                    
5            This puts back a fix for Windows where a panel is needed so that
6            the background of the table view appears correctly.
7                                                                                    
8            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
9            object that can be used by derived classes to place any
10            controls (including the grid) onto.
11            (QueryTableFrame.__init__): Use the panel as the parent window
12            for all the controls. Reparent the grid so that the panel is
13            the parent. Call UpdateStatusText() to correctly initialize
14            the status bar.
15                                                                                    
16            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
17            from wxFrame (as opposed to wxDialog like the other classes)
18            but otherwise behaves like the other classes. This is needed
19            for the TableView which isn't really a dialog and needs to
20            have a status bar and control buttons.
21                                                                                    
22            [NOTE: This is a back-port from the current CVS head]
23    
24            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
25            instance variable to keep track of how many rows are selected.
26            Subscribe once to the the events we are interested in.
27            (ThubanGrid.OnRangeSelect): Only handle event if event handling
28            hasn't been turned off.
29            (ThubanGrid.OnSelectCell): Only handle event if event handling
30            hasn't been turned off.
31            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
32            as an event listener (which changes the event handler stack)
33            simply set an instance variable to False. This is checked in
34            the event handlers.
35            (ThubanGrid.GetNumberSelected): Return the number of currently
36            selected rows.
37            (TableFrame): Inherit from ThubanFrame so we can have a
38            status bar and control buttons.
39            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
40            Explicitly set which items are selected in the operator choice and
41            action choice so there is always a valid selection. Fixes RTbug #1941.
42            Subscribe to grid cell selection events so we can update the
43            status bar.
44            (QueryTableFrame.UpdateStatusText): Update the status bar with
45            how many rows are in the grid, how many columns, and how many
46            rows are selected.
47            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
48            Call UpdateStatusText when cells are (de)selected.
49            (QueryTableFrame.OnQuery): Use the string value in the value
50            combo if either the selected item index is 0 or if the string
51            cannot be found in the predefined list (this happens if the
52            user changes the text). Fixes RTbug #1940.
53            Only turn off the grid event listeners if there a query comes
54            back with a none empty list of ids. in the case that the list
55            is empty this causes a grid.ClearSelection() call to actually
56            clear the grid selection which causes the selected items in
57            the map to be deselected. Fixes RTbug #1939.
58    
59    2003-06-13  Bernhard Herzog  <[email protected]>
60    
61            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
62            self.selected_shape with the current selection to make sure the
63            contents of the dialog are up to date when it's shown for the
64            first time.
65            The dialog used to work without this by luck. The recent fix to
66            the connector module 'broke' a 'feature' the identify view was
67            relying on, i.e that subscribing to a message in response to
68            receiving a message of that type would mean that the new
69            subscriber would also be called for the same message.
70    
71    2003-06-12  Jonathan Coles   <[email protected]>
72    
73            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
74            the scalebar if the current map has no projection set.
75    
76            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
77            projfilepath label to just the basename of the projection file
78            rather than include the entire path.
79    
80    2003-06-11  Frank Koormann  <[email protected]>
81    
82            * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
83            update.
84    
85    2003-06-11  Frank Koormann  <[email protected]>
86    
87            * Thuban/Lib/fileutil.py (get_application_dir): New function to
88            determine the absolute .thuban/thuban directory under
89            "posix" (os.expanduser) and "nt" (read AppData registry key).
90    
91            * Thuban/Model/resource.py: Use get_application_dir
92    
93            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
94            Use get_application_dir.
95    
96    2003-06-10  Bernhard Herzog  <[email protected]>
97    
98            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
99            the messages MAP_LAYERS_REMOVED messages
100            (LayerTableFrame.OnClose): Unsubscribe from it.
101            (LayerTableFrame.map_layers_removed): New. Receiver for
102            MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
103            dialog is showing is removed.
104    
105    2003-06-10  Bernhard Herzog  <[email protected]>
106    
107            * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
108            of the receivers list so that unsubscribing in a receiver doesn't
109            modify it while iterating over it.
110    
111            * test/test_connector.py
112            (ConnectorTest.test_disconnect_in_receiver): New. Test whether
113            unsubscribing in a receiver works correctly. See docstring for
114            details
115    
116    2003-06-10  Bernhard Herzog  <[email protected]>
117    
118            * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
119            message.
120    
121            * Thuban/Model/layer.py (Layer.SetShapeStore): Send
122            LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
123            LAYER_CHANGED will still be sent if the classification changes.
124    
125            * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
126            parameter so we can subscribe to some of its messages
127            (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
128            and the layer's LAYER_SHAPESTORE_REPLACED
129            (Classifier.unsubscribe_messages): New. Unsubscribe from message
130            subscribed to in __init__
131            (Classifier.map_layers_removed)
132            (Classifier.layer_shapestore_replaced): receivers for the messages
133            subscribed to in __init__. Unsubscribe and close the dialog
134    
135            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
136            the map to the Classifier dialog
137    
138            * test/test_layer.py (SetShapeStoreTests): Derive from
139            SubscriberMixin as well so we can test messages
140            (SetShapeStoreTests.setUp): Subscribe to some of the layer's
141            messages
142            (SetShapeStoreTests.tearDown): Clear the messages again
143            (SetShapeStoreTests.test_sanity): Expand the doc-string and check
144            for the modified flag too
145            (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
146            to check whether SetShapeStore sets the modified flag
147            (SetShapeStoreTests.test_set_shape_store_different_field_name)
148            (SetShapeStoreTests.test_set_shape_store_same_field)
149            (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
150            Add tests for the messages. This checks both the new
151            LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
152    
153    2003-06-06  Jan-Oliver Wagner <[email protected]>
154    
155            * Thuban/UI/mainwindow.py: Improved and partly added help texts for
156            the menu items.
157    
158    2003-06-05  Frank Koormann  <[email protected]>
159    
160            * Thuban/UI/identifyview.py (IdentifyView.__init__):
161            Layout reimplemented without panel. Make life easier to fit the list
162            in the dialog.
163    
164    2003-06-05  Frank Koormann  <[email protected]>
165    
166            * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
167            once on initialisation (Former implementation resulted in multiple
168            entries for each projection).
169            (ProjFrame.__FillAvailList): selectProj as second optional parameter,
170            if set, select the projection found under the specified name. This
171            overwrites any other selection estimate.
172            Removed projchoice filling from this method.
173            (ProjFrame._OnSave, ProjFrame._OnAddToList):
174            Updated call of ProjFrame.__FillAvailList
175            (LCCPanel._DoLayout): Moved parameter controls in more common order.
176    
177            * Resources/Projections/defaults.proj: Extended defaults representing
178            various common European projections.
179    
180    2003-06-05  Frank Koormann  <[email protected]>
181    
182            * Thuban/UI/identifyview.py (IdentifyView.__init__):
183            Use ListCtrl instead of GridCtrl
184    
185            * Thuban/Model/resource.py:
186            Guess location of .thuban directory from tempdir parent directory.
187    
188            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
189            Guess location of .thuban directory from tempdir parent directory.
190    
191    2003-06-04  Bernhard Herzog  <[email protected]>
192    
193            Do not cache the values returned by the tree widget's
194            GetFirstChild and GetNextChild methods because it led to lots of
195            segfaults. The new way requires more brute force but is more
196            reliable.
197    
198            * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
199            variable layer2id
200            (LegendTree.find_layer): New method to do with brute force what
201            layer2id tried to accomplish
202            (LegendTree._OnMsgLayerChanged)
203            (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
204            Use find_layer instead of layer2id
205            (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
206            update layer2id anymore
207            (LegendTree._OnMsgMapLayersRemoved)
208            (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
209    
210    2003-06-03  Thomas Koester  <[email protected]>
211    
212            * Thuban/Model/classgen.py (GenQuantiles0): New function.
213    
214    2003-06-02  Bernhard Herzog  <[email protected]>
215    
216            * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
217            New commands.
218            (main_menu): Add the new commands.
219            (MainWindow.TableRename): New. Implementation of the table_rename
220            command.
221            (MainWindow.RenameLayer): New. Implementation of the layer_rename
222            command.
223    
224            * Thuban/Model/session.py (Session.AddTable): call self.changed to
225            set the modified flag
226    
227            * test/test_session.py (TestSessionSimple.test_add_table): Test
228            whether the modified flag is set properly
229    
230            * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
231            instead of issue so that the modified flags get updated.
232    
233            * test/test_base.py (SomeTitledObject): Derive from Modifiable
234            instead of Publisher to reflect reality better and to accomodate
235            the fact that SetTitle now calls changed instead of issue
236    
237    2003-06-02  Bernhard Herzog  <[email protected]>
238    
239            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
240            acquisition has to happen before the try in a try-finally.
241    
242    2003-06-02  Bernhard Herzog  <[email protected]>
243    
244            * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
245            possible that a layer is removed that is not currently selected in
246            the legend so don't check for this.
247    
248    2003-05-30  Bernhard Herzog  <[email protected]>
249    
250            * Thuban/Model/layer.py (Layer.Destroy): Set all instance
251            variables to None that have direct or indirect references to
252            shapefiles or dbf files to make sure that they do go away and the
253            files are closed.
254    
255    2003-05-30  Bernhard Herzog  <[email protected]>
256    
257            * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
258            availImgListIndices when a new image list is created
259            
260    2003-05-30  Bernhard Herzog  <[email protected]>
261    
262            * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
263            changing_selection to indicate whether the LegendTree code itself
264            is currently changing the selection
265            (LegendTree.normalize_selection): New method to normalize the
266            selection by selecting the layer item even if the user clicked on
267            the classification.
268            (LegendTree._OnSelChanged): normalize the selection. This works
269            around a bug in wx which doesn't keep track of the selection
270            properly when subtrees are deleted.
271    
272    2003-05-30  Bernhard Herzog  <[email protected]>
273    
274            * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
275            maximum and minimum scale factors.
276    
277            * test/test_classgen.py (ClassGenTest.test): Update to reflect the
278            changes in classgen.py
279    
280    2003-05-30  Jonathan Coles   <[email protected]>
281    
282            * Thuban/Model/classgen.py: Remove ClassGenerator class but make
283            all the methods functions. Fixes RTBug #1903.
284    
285            * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
286            to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
287            RTBug #1907.
288    
289            * Thuban/UI/classgen.py: Use classgen functions that were part
290            of the ClassGenerator class. Put try/finally blocks around
291            code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
292            RTBug #1904.
293    
294            * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
295    
296            * Thuban/UI/legend.py: The legend was cleared and repopulated any
297            time something changed which caused some state to be lost such
298            as which children were expanded or collapsed. Fixes RTBug #1901.
299            (LegendTree._OnMsgMapLayersAdded): Add only new layers.
300            (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
301            the legend but not in the map.
302            (LegendTree.__FillTree): Move main functionality out into smaller
303            methods that can be used by other methods.
304            (LegendTree.__FillTreeLayer): Reuse old slots in the image list
305            if they are available.
306            (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
307            that we override the wxTreeCtrl method. Iterate over children
308            and call __RemoveLayer.
309            (LegendTree.__AddLayer): New. Add a new layer to the legend.
310            (LegendTree.__RemoveLayer): Remove a layer from the legend.
311            (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
312            Should only be called with the id of a layer branch.
313            (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
314            Returns the root item or creates one if necessary.
315    
316            * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
317            ProjectRasterFile with tuple arguments instead of strings.
318    
319            * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
320            with try/finally. Fixes RTBug #1904.
321    
322            * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
323            with try/finally. Fixes RTBug #1904.
324            (MapCanvas.FitSelectedToWindow): If a single point is selected
325            simply center it on the display. Fixes RTBug #1849.
326    
327            * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
328            to be compiled as a standalone app. Now the code can only be
329            called from Python which simplifies the parameter passing.
330            (ProjectRasterFile): Handle Python arguments. Remove code that
331            checks for a destination dataset. Add more clean up code.
332    
333            * test/test_map.py (TestMapWithContents.test_raise_layer_top,
334            TestMapWithContents.test_lower_layer_bottom):
335            Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
336            Fixes RTBug #1907.
337    
338            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
339            extent to the map when the legend is toggled. Fixes RTBug #1881.
340    
341    2003-05-29  Jan-Oliver Wagner <[email protected]>
342    
343            * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
344            unsubscribes all that is subcribed in __init__.
345    
346    2003-05-28  Bernhard Herzog  <[email protected]>
347    
348            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
349            (MainWindow.CanDuplicateLayer): New methods to implement the
350            Layer/Duplicate command.
351            (layer_duplicate command): New.
352            (main_menu): Add layer_duplicate to the Layer menu.
353    
354    2003-05-28  Bernhard Herzog  <[email protected]>
355    
356            * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
357            renderer so that NULL/None values get displayed differently (by a
358            gray rectangle).
359            (TableGrid.__init__): Override the default renderers
360    
361    2003-05-28  Bernhard Herzog  <[email protected]>
362    
363            * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
364            classification to "None" if the type of the field has changed.
365    
366            * test/test_layer.py (SetShapeStoreTests): New. Class with a few
367            test for the Layer.SetShapeStore method
368    
369    2003-05-28  Jan-Oliver Wagner <[email protected]>
370    
371            * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
372            does not necessarily have a filename).
373    
374    2003-05-28  Jan-Oliver Wagner <[email protected]>
375    
376            * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
377            sort the selection list for the dialog.
378    
379    2003-05-28  Frank Koormann  <[email protected]>
380    
381            * extensions/thuban/wxproj.cpp
382            (project_point): Removed cast to int for projected point coordinates.
383            (shape_centroid): Return last point if all polygon vertices fall
384            to one point.
385    
386    2003-05-28  Bernhard Herzog  <[email protected]>
387    
388            * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
389            with layers that don't have shapestores, i.e. raster layers.
390    
391    2003-05-28  Bernhard Herzog  <[email protected]>
392    
393            * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
394            when determining the title from the filename.
395    
396            * test/test_dbf_table.py (TestDBFTable.test_title): Update to
397            reflect changes in the way the title is derived from the filename
398    
399    2003-05-28  Frank Koormann  <[email protected]>
400    
401            * Thuban/UI/mainwindow.py (MainWindow.TableShow):
402            Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
403    
404    2003-05-27  Bernhard Herzog  <[email protected]>
405    
406            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
407            delegate SelectedLayer.
408            (MainWindow.LayerUnjoinTable): Implement.
409            (_can_unjoin): New. Helper function for the sensitivity of the
410            layer/unjoin command.
411    
412            * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
413            (DerivedShapeStore.OrigShapeStore): New. Return the original
414            shapestore. Used to figure out how to unjoin.
415            (DerivedShapeStore.Shapefile): Fix a typo.
416    
417    2003-05-27  Bernhard Herzog  <[email protected]>
418    
419            * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
420            well
421            (JoinDialog.__init__): Use the layer parameter and only build the
422            left choice when a layer is given
423            (JoinDialog.OnJoin): Handle layer joins as well
424            (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
425            that the user selects the "Select..." item. The sensitivitly
426            updating is now in update_sensitivity
427            (JoinDialog.y): New method to refactor the sensitivity update of
428            the join button into its own method.
429    
430            * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
431    
432    2003-05-27  Bernhard Herzog  <[email protected]>
433    
434            * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
435            iff there are unreferenced tables in the session
436    
437    2003-05-27  Bernhard Herzog  <[email protected]>
438    
439            * Thuban/Model/messages.py (TABLE_REMOVED): New message.
440    
441            * Thuban/Model/session.py (Session.UnreferencedTables): New method
442            to return tables that are not referenced by other tables or shape
443            stores and can be removed.
444            (Session.RemoveTable): Issue a TABLE_REMOVED message after
445            removing the table
446    
447            * Thuban/UI/mainwindow.py: Remove unused imports
448            (MainWindow.TableClose): Implement.
449    
450            * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
451            messages so that the frame will be automatically closed when a new
452            session is opened or the table is removed.
453            (TableFrame.OnClose): Unsubscribe the Subscriptions made in
454            __init__
455            (TableFrame.close_on_session_replaced)
456            (TableFrame.close_on_table_removed): New. Subscribers that close
457            the window
458    
459            * test/test_session.py (TestSessionMessages.test_remove_table)
460            (TestSessionSimple.test_remove_table): Move the test to
461            TestSessionSimple and add test for the TABLE_REMOVED message
462            (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
463            (TestSessionSimple.test_unreferenced_tables) New. Test for the
464            UnreferencedTables method.
465            (UnreferencedTablesTests): New. Class with some more sophisticated
466            tests for UnreferencedTables.
467    
468    2003-05-27  Frank Koormann  <[email protected]>
469    
470            * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
471            display has some unwanted side effects. Removed again.
472    
473    2003-05-27  Frank Koormann  <[email protected]>
474    
475            * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
476    
477            * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
478    
479    2003-05-27  Jan-Oliver Wagner <[email protected]>
480    
481            * test/test_menu.py (MenuTest.test): Added test for
482            Menu.RemoveItem().
483    
484            * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
485            the menu.
486    
487    2003-05-27  Frank Koormann  <[email protected]>
488            
489            Nonmodal dialogs without parent (i.e. they can fall behind the main
490            window)
491    
492            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
493            all dialogs in the dialogs dictionary and the canvas.
494    
495            * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
496            parent, i.e. can fall behind other windows.
497            (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
498            dictionary before removing it.
499    
500            * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
501    
502            * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
503            * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
504            * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
505    
506    2003-05-27  Bernhard Herzog  <[email protected]>
507    
508            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
509            tableview dialog
510            (MainWindow.TableShow): Use ShowTableView to open the dialogs.
511            Also, don't use the table's titles as the dialog names. The titles
512            aren't guaranteed to be unique.
513            (MainWindow.TableOpen): Open a table view dialog after opening the
514            table
515    
516    2003-05-27  Bernhard Herzog  <[email protected]>
517    
518            * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
519            effect can be achieved by simply closing the window showing the
520            table.
521            (MainWindow.TableHide): Removed.
522            (main_menu): Removed "table_hide"
523    
524    2003-05-27  Frank Koormann  <[email protected]>
525    
526            Fix legend tree display problems under Win32
527    
528            * Thuban/UI/legend.py:  BMP_SIZE_W = 15
529            (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
530            (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
531    
532            * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
533    
534    2003-05-27  Jan-Oliver Wagner <[email protected]>
535    
536            * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
537            'after' now allows to insert separators almost anywhere in the menu.
538    
539    2003-05-27  Frank Koormann  <[email protected]>
540    
541            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
542            "S" of selection box label to hint on hot key (Alt-S). Works under
543            Win32 but is ignored under GTK.
544    
545    2003-05-26  Frank Koormann  <[email protected]>
546    
547            * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
548            Center Choices.
549    
550    2003-05-26  Bernhard Herzog  <[email protected]>
551    
552            Remove the Precision methods again. They're too DBF specific to be
553            part of the table interface and they're only used in table_to_dbf
554            anyway.
555            
556            * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
557            fixed precision of 12 for doubles.
558            (TransientTableBase.Precision): Removed
559            (AutoTransientTable.Width): Delegate to self.table.
560    
561            * Thuban/Model/table.py (DBFTable.Precision)
562            (MemoryTable.Precision): Removed.
563            (MemoryTable.Width): Use a fixed precision of 12 for doubles.
564            (table_to_dbf): Use a fixed precision of 12 for floats unless the
565            column object specifies something else.
566    
567            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
568            test for table_to_dbf
569    
570    2003-05-26  Bernhard Herzog  <[email protected]>
571    
572            * test/test_transientdb.py
573            (TestTransientTable.run_iceland_political_tests): Fix a comment.
574    
575    2003-05-26  Bernhard Herzog  <[email protected]>
576    
577            * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
578            implementation. Mark parts of the file format strings for
579            localization.
580    
581            * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
582            file and add the table to the tables managed by the session
583    
584            * test/test_session.py (TestSessionSimple.test_open_table_file):
585            New. test case for OpenTableFile
586    
587    2003-05-26  Jan-Oliver Wagner <[email protected]>
588    
589            * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
590            Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
591            Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
592            Replace the true/false of wxWindows by True/False of Python 2.2.1.
593    
594    2003-05-26  Jan-Oliver Wagner <[email protected]>
595    
596            * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
597            already a selection present, update the grid accordingly.
598    
599            * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
600            resizeable and increase its initial size.
601    
602    2003-05-26  Frank Koormann  <[email protected]>
603    
604            Table export functionality
605    
606            * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
607            Return width (in characters) for a column.
608            (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
609            (table_to_dbf): Write table to dbf file.
610            (table_to_csv): Write table to csv file.
611    
612            * Thuban/Model/transientdb.py (TransientTableBase.Width,
613            TransientTableBase.Precision): Return column width and precision.
614    
615            * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
616            or table_to_csv depending on file selection.
617    
618            * test/test_dbf_table.py:
619            Test table_to_dbf (extension of former part of test).
620    
621            * test/test_csv_table.py:
622            Test table_to_csv.
623    
624    2003-05-23  Jan-Oliver Wagner <[email protected]>
625    
626            * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
627            Use QueryTableFrame instead of TableFrame.
628    
629            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
630            table window with 'Layer Table:' instead of 'Table:'.
631    
632    2003-05-23  Jan-Oliver Wagner <[email protected]>
633    
634            Give all tables a title via mix-in TitledObject.LayerShowTable
635    
636            * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
637            only if it exists.
638    
639            * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
640            and call its init-method with a default title. Remove Title() method.
641    
642            * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
643            AutoTransientTable): mix-in TitledObject and call its init-method with
644            a default title. Remove Title() method.
645    
646    2003-05-23  Bernhard Herzog  <[email protected]>
647    
648            * Thuban/Model/session.py (Session.AddShapeStore): Define
649            AddShapeStore analogously to AddTable.
650    
651            * test/test_session.py (TestSessionSimple.test_add_shapestore):
652            New. Test for AddShapeStore
653    
654    2003-05-23  Jan-Oliver Wagner <[email protected]>
655    
656            Introducing QueryTableFrame and a very coarse ShowTable implementation.
657    
658            * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
659            class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
660            The latter implements the selection GUI without dependency on a layer.
661            LayerTableFrame now is derived from QueryTableFrame and connects
662            to a layer.
663    
664            * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
665            implementation that still needs work.
666    
667            * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
668    
669    2003-05-22  Frank Koormann  <[email protected]>
670    
671            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
672            Added "outer_join = False" as optional parameter.
673            (TransientJoinedTable.create): If outer join is true, perform a
674            "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
675            the left table. Records not matching are filled with 0 / None.
676    
677            * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
678            (JoinDialog.OnJoin): Consider outer join check box.
679    
680    2003-05-22  Bernhard Herzog  <[email protected]>
681    
682            * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
683            somewhat safer way. Storing the traceback in a local variable can
684            lead to memory leaks
685    
686    2003-05-22  Bernhard Herzog  <[email protected]>
687    
688            * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
689            the wxMessageDialog's Destroy() method.
690    
691    2003-05-22  Frank Koormann  <[email protected]>
692    
693            * Thuban/UI/join.py (JoinDialog.__init__): Make use of
694            TransientTable.Title()
695    
696    2003-05-22  Frank Koormann  <[email protected]>
697    
698            Join Dialog, initial version.
699    
700            * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
701    
702            * Thuban/UI/join.py (JoinDialog): Functional implementation of
703            former framework. Renamed Table1/Table2 to LeftTable/RightTable
704            in all occurences.
705    
706            * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
707            Typo fixed.
708    
709    2003-05-22  Bernhard Herzog  <[email protected]>
710    
711            Give the tables titles so that the GUI can display more meaningful
712            names. For now the titles are fixed but depend on e.g. filenames
713            or the titles of the joined tables.
714    
715            * Thuban/Model/transientdb.py (TransientTable.Title)
716            (TransientJoinedTable.Title, AutoTransientTable.Title): New.
717    
718            * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
719    
720            * test/test_transientdb.py
721            (TestTransientTable.test_auto_transient_table_title): New. Test
722            for the Title method
723            (TestTransientTable.test_transient_joined_table)
724            (TestTransientTable.test_transient_table): Add test for the Title
725            methods
726    
727            * test/test_memory_table.py (TestMemoryTable.test_title): New.
728            Test for the Title method
729    
730            * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
731            the Title method
732    
733  2003-05-22  Bernhard Herzog  <[email protected]>  2003-05-22  Bernhard Herzog  <[email protected]>
734    
735          * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):          * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):

Legend:
Removed from v.997  
changed lines
  Added in v.1206

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26