/[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 952 by frank, Wed May 21 14:21:23 2003 UTC branches/greater-ms3/thuban/ChangeLog revision 1301 by jonathan, Wed Jun 25 09:18:45 2003 UTC
# Line 1  Line 1 
1    2003-06-25  Jonathan Coles   <[email protected]>
2    
3            * Thuban/UI/classifier.py (Classifier.EditSymbol): The parent
4            of the SelectPropertiesDialog should be self so the window
5            appears on top.
6            (ClassGroupPropertiesCtrl.DoEdit): The parent
7            of the SelectPropertiesDialog should be self so the window
8            appears on top.
9    
10    2003-06-18  Frank Koormann  <[email protected]>
11    
12            * Thuban/UI/scalebar.py (ScaleBar.DrawScaleBar): Apply conversion to
13            scale if projection is latlong to get better estimate.
14    
15    2003-06-17  Jonathan Coles   <[email protected]>
16                                                                                    
17            Backport from HEAD.
18    
19            The view should respond to layer projection
20            changed events to update the display. Changes to a projection
21            should not cause the map to be set to full extent.
22    
23            * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
24            current_map_proj to remember the current map projection so that
25            when the projection changes we know what the previous projection
26            was.
27            (MapCanvas.SetMap): Unsubscribe and subscribe to
28            LAYER_PROJECTION_CHANGED events.
29            (MapCanvas.projection_changed): Split into two methods that respond
30            to map and layer projection changes.
31            (MapCanvas.map_projection_changed): New. Takes the current view and
32            projects it using the new projection. This does not cause the
33            map to be redrawn at full extent.
34            (MapCanvas.layer_projection_changed): New. Cause a redraw which
35            will draw each layer in its new projection.
36    
37    2003-06-16  Frank Koormann  <[email protected]>
38    
39            Fix problem of hidden properties dialog under windows after double
40            click on layer tree:
41            The tree control always gets an Expanded / Collapsed event after
42            the ItemActivated  on double click, which raises the main window again.         We add a second ItemActivated event to the queue, which simply
43            raises the already displayed window.
44    
45            * Thuban/UI/legend.py (LegendTree.__init__): Instance variable
46            raiseProperties initialized to prevent endless loops
47            (LegendTree._OnItemActivated): Depending on self.raiseProperties
48            simply raise the properties or open the dialog and issue a second
49            event.
50    
51    2003-06-16  Frank Koormann  <[email protected]>
52    
53            * Thuban/UI/view.py (MapCanvas.set_view_transform): Set max_scale to
54            2147483648.0 / max_len (which is sufficient for GREAT-ER).
55            For HEAD in the future a more flexible concept has to be developed
56            determining the rendering of "large" objects.
57    
58    2003-06-16  Jonathan Coles   <[email protected]>
59    
60            Backport from HEAD.
61    
62        Fix a problem under Windows whereby if the user double-clicks on a
63        layer in the legend that tree item will expand or collapse as well
64        as open the layer properties dialog. The state of the tree item
65        should not be affected.
66    
67        * Thuban/UI/legend.py (LegendTree.__init__): Add instance variable
68        preventExpandCollapse and subscribe to expanding and collapsing
69        events.
70        (LegendTree.OnItemExpandCollapse): New. Responds to expanding and
71        collapsing events and will veto the event if it has been triggered
72        by the user double clicking on a layer.
73        (LegendTree._OnItemActivated): Set preventExpandCollapse to indicate
74        that an expanding/collapsing event should be vetoed.
75            
76    2003-06-13  Bernhard Herzog  <[email protected]>
77    
78            Backport from HEAD.
79    
80            * Thuban/UI/classifier.py (Classifier.map_layers_removed)
81            (Classifier.layer_shapestore_replaced, Classifier.OnClose):
82            Unsubscribe the messages in OnClose and not in map_layers_removed
83            or layer_shapestore_replaced to make sure it always happens when
84            the dialog is closed.
85    
86    2003-06-13  Jonathan Coles   <[email protected]>
87    
88            [NOTE: This is a back-port from the current CVS head]
89    
90            This puts back a fix for Windows where a panel is needed so that
91            the background of the table view appears correctly.
92    
93            * Thuban/UI/tableview.py (TableFrame.__init__): Add a panel
94            object that can be used by derived classes to place any
95            controls (including the grid) onto.
96            (QueryTableFrame.__init__): Use the panel as the parent window
97            for all the controls. Reparent the grid so that the panel is
98            the parent. Call UpdateStatusText() to correctly initialize
99            the status bar.
100    
101            * Thuban/UI/dialogs.py (ThubanFrame): New: a class that inherits
102            from wxFrame (as opposed to wxDialog like the other classes)
103            but otherwise behaves like the other classes. This is needed
104            for the TableView which isn't really a dialog and needs to
105            have a status bar and control buttons.
106    
107            [NOTE: This is a back-port from the current CVS head]
108    
109            * Thuban/UI/tableview.py (TableGrid.__init__): Create an
110            instance variable to keep track of how many rows are selected.
111            Subscribe once to the the events we are interested in.
112            (ThubanGrid.OnRangeSelect): Only handle event if event handling
113            hasn't been turned off.
114            (ThubanGrid.OnSelectCell): Only handle event if event handling
115            hasn't been turned off.
116            (ThubanGrid.ToggleEventListeners): Rather than subscribe None
117            as an event listener (which changes the event handler stack)
118            simply set an instance variable to False. This is checked in
119            the event handlers.
120            (ThubanGrid.GetNumberSelected): Return the number of currently
121            selected rows.
122            (TableFrame): Inherit from ThubanFrame so we can have a
123            status bar and control buttons.
124            (QueryTableFrame.__init__): Create a status bar. Fixes RTbug #1942.
125            Explicitly set which items are selected in the operator choice and
126            action choice so there is always a valid selection. Fixes RTbug #1941.
127            Subscribe to grid cell selection events so we can update the
128            status bar.
129            (QueryTableFrame.UpdateStatusText): Update the status bar with
130            how many rows are in the grid, how many columns, and how many
131            rows are selected.
132            (QueryTableFrame.OnGridSelectRange, QueryTableFrame.OnGridSelectCell):
133            Call UpdateStatusText when cells are (de)selected.
134            (QueryTableFrame.OnQuery): Use the string value in the value
135            combo if either the selected item index is 0 or if the string
136            cannot be found in the predefined list (this happens if the
137            user changes the text). Fixes RTbug #1940.
138            Only turn off the grid event listeners if there a query comes
139            back with a none empty list of ids. in the case that the list
140            is empty this causes a grid.ClearSelection() call to actually
141            clear the grid selection which causes the selected items in
142            the map to be deselected. Fixes RTbug #1939.
143    
144    2003-06-13  Bernhard Herzog  <[email protected]>
145    
146            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
147            self.selected_shape with the current selection to make sure the
148            contents of the dialog are up to date when it's shown for the
149            first time.
150            The dialog used to work without this by luck. The recent fix to
151            the connector module 'broke' a 'feature' the identify view was
152            relying on, i.e that subscribing to a message in response to
153            receiving a message of that type would mean that the new
154            subscriber would also be called for the same message.
155    
156    2003-06-12  Jonathan Coles   <[email protected]>
157    
158            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
159            the scalebar if the current map has no projection set.
160    
161            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
162            projfilepath label to just the basename of the projection file
163            rather than include the entire path.
164    
165    2003-06-11  Frank Koormann  <[email protected]>
166    
167            * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
168            update.
169    
170    2003-06-11  Frank Koormann  <[email protected]>
171    
172            * Thuban/Lib/fileutil.py (get_application_dir): New function to
173            determine the absolute .thuban/thuban directory under
174            "posix" (os.expanduser) and "nt" (read AppData registry key).
175    
176            * Thuban/Model/resource.py: Use get_application_dir
177    
178            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
179            Use get_application_dir.
180    
181    2003-06-10  Bernhard Herzog  <[email protected]>
182    
183            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
184            the messages MAP_LAYERS_REMOVED messages
185            (LayerTableFrame.OnClose): Unsubscribe from it.
186            (LayerTableFrame.map_layers_removed): New. Receiver for
187            MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
188            dialog is showing is removed.
189    
190    2003-06-10  Bernhard Herzog  <[email protected]>
191    
192            * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
193            of the receivers list so that unsubscribing in a receiver doesn't
194            modify it while iterating over it.
195    
196            * test/test_connector.py
197            (ConnectorTest.test_disconnect_in_receiver): New. Test whether
198            unsubscribing in a receiver works correctly. See docstring for
199            details
200    
201    2003-06-10  Bernhard Herzog  <[email protected]>
202    
203            * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
204            message.
205    
206            * Thuban/Model/layer.py (Layer.SetShapeStore): Send
207            LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
208            LAYER_CHANGED will still be sent if the classification changes.
209    
210            * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
211            parameter so we can subscribe to some of its messages
212            (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
213            and the layer's LAYER_SHAPESTORE_REPLACED
214            (Classifier.unsubscribe_messages): New. Unsubscribe from message
215            subscribed to in __init__
216            (Classifier.map_layers_removed)
217            (Classifier.layer_shapestore_replaced): receivers for the messages
218            subscribed to in __init__. Unsubscribe and close the dialog
219    
220            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
221            the map to the Classifier dialog
222    
223            * test/test_layer.py (SetShapeStoreTests): Derive from
224            SubscriberMixin as well so we can test messages
225            (SetShapeStoreTests.setUp): Subscribe to some of the layer's
226            messages
227            (SetShapeStoreTests.tearDown): Clear the messages again
228            (SetShapeStoreTests.test_sanity): Expand the doc-string and check
229            for the modified flag too
230            (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
231            to check whether SetShapeStore sets the modified flag
232            (SetShapeStoreTests.test_set_shape_store_different_field_name)
233            (SetShapeStoreTests.test_set_shape_store_same_field)
234            (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
235            Add tests for the messages. This checks both the new
236            LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
237    
238    2003-06-06  Jan-Oliver Wagner <[email protected]>
239    
240            * Thuban/UI/mainwindow.py: Improved and partly added help texts for
241            the menu items.
242    
243    2003-06-05  Frank Koormann  <[email protected]>
244    
245            * Thuban/UI/identifyview.py (IdentifyView.__init__):
246            Layout reimplemented without panel. Make life easier to fit the list
247            in the dialog.
248    
249    2003-06-05  Frank Koormann  <[email protected]>
250    
251            * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
252            once on initialisation (Former implementation resulted in multiple
253            entries for each projection).
254            (ProjFrame.__FillAvailList): selectProj as second optional parameter,
255            if set, select the projection found under the specified name. This
256            overwrites any other selection estimate.
257            Removed projchoice filling from this method.
258            (ProjFrame._OnSave, ProjFrame._OnAddToList):
259            Updated call of ProjFrame.__FillAvailList
260            (LCCPanel._DoLayout): Moved parameter controls in more common order.
261    
262            * Resources/Projections/defaults.proj: Extended defaults representing
263            various common European projections.
264    
265    2003-06-05  Frank Koormann  <[email protected]>
266    
267            * Thuban/UI/identifyview.py (IdentifyView.__init__):
268            Use ListCtrl instead of GridCtrl
269    
270            * Thuban/Model/resource.py:
271            Guess location of .thuban directory from tempdir parent directory.
272    
273            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
274            Guess location of .thuban directory from tempdir parent directory.
275    
276    2003-06-04  Bernhard Herzog  <[email protected]>
277    
278            Do not cache the values returned by the tree widget's
279            GetFirstChild and GetNextChild methods because it led to lots of
280            segfaults. The new way requires more brute force but is more
281            reliable.
282    
283            * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
284            variable layer2id
285            (LegendTree.find_layer): New method to do with brute force what
286            layer2id tried to accomplish
287            (LegendTree._OnMsgLayerChanged)
288            (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
289            Use find_layer instead of layer2id
290            (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
291            update layer2id anymore
292            (LegendTree._OnMsgMapLayersRemoved)
293            (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
294    
295    2003-06-03  Thomas Koester  <[email protected]>
296    
297            * Thuban/Model/classgen.py (GenQuantiles0): New function.
298    
299    2003-06-02  Bernhard Herzog  <[email protected]>
300    
301            * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
302            New commands.
303            (main_menu): Add the new commands.
304            (MainWindow.TableRename): New. Implementation of the table_rename
305            command.
306            (MainWindow.RenameLayer): New. Implementation of the layer_rename
307            command.
308    
309            * Thuban/Model/session.py (Session.AddTable): call self.changed to
310            set the modified flag
311    
312            * test/test_session.py (TestSessionSimple.test_add_table): Test
313            whether the modified flag is set properly
314    
315            * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
316            instead of issue so that the modified flags get updated.
317    
318            * test/test_base.py (SomeTitledObject): Derive from Modifiable
319            instead of Publisher to reflect reality better and to accomodate
320            the fact that SetTitle now calls changed instead of issue
321    
322    2003-06-02  Bernhard Herzog  <[email protected]>
323    
324            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
325            acquisition has to happen before the try in a try-finally.
326    
327    2003-06-02  Bernhard Herzog  <[email protected]>
328    
329            * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
330            possible that a layer is removed that is not currently selected in
331            the legend so don't check for this.
332    
333    2003-05-30  Bernhard Herzog  <[email protected]>
334    
335            * Thuban/Model/layer.py (Layer.Destroy): Set all instance
336            variables to None that have direct or indirect references to
337            shapefiles or dbf files to make sure that they do go away and the
338            files are closed.
339    
340    2003-05-30  Bernhard Herzog  <[email protected]>
341    
342            * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
343            availImgListIndices when a new image list is created
344            
345    2003-05-30  Bernhard Herzog  <[email protected]>
346    
347            * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
348            changing_selection to indicate whether the LegendTree code itself
349            is currently changing the selection
350            (LegendTree.normalize_selection): New method to normalize the
351            selection by selecting the layer item even if the user clicked on
352            the classification.
353            (LegendTree._OnSelChanged): normalize the selection. This works
354            around a bug in wx which doesn't keep track of the selection
355            properly when subtrees are deleted.
356    
357    2003-05-30  Bernhard Herzog  <[email protected]>
358    
359            * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
360            maximum and minimum scale factors.
361    
362            * test/test_classgen.py (ClassGenTest.test): Update to reflect the
363            changes in classgen.py
364    
365    2003-05-30  Jonathan Coles   <[email protected]>
366    
367            * Thuban/Model/classgen.py: Remove ClassGenerator class but make
368            all the methods functions. Fixes RTBug #1903.
369    
370            * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
371            to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
372            RTBug #1907.
373    
374            * Thuban/UI/classgen.py: Use classgen functions that were part
375            of the ClassGenerator class. Put try/finally blocks around
376            code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
377            RTBug #1904.
378    
379            * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
380    
381            * Thuban/UI/legend.py: The legend was cleared and repopulated any
382            time something changed which caused some state to be lost such
383            as which children were expanded or collapsed. Fixes RTBug #1901.
384            (LegendTree._OnMsgMapLayersAdded): Add only new layers.
385            (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
386            the legend but not in the map.
387            (LegendTree.__FillTree): Move main functionality out into smaller
388            methods that can be used by other methods.
389            (LegendTree.__FillTreeLayer): Reuse old slots in the image list
390            if they are available.
391            (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
392            that we override the wxTreeCtrl method. Iterate over children
393            and call __RemoveLayer.
394            (LegendTree.__AddLayer): New. Add a new layer to the legend.
395            (LegendTree.__RemoveLayer): Remove a layer from the legend.
396            (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
397            Should only be called with the id of a layer branch.
398            (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
399            Returns the root item or creates one if necessary.
400    
401            * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
402            ProjectRasterFile with tuple arguments instead of strings.
403    
404            * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
405            with try/finally. Fixes RTBug #1904.
406    
407            * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
408            with try/finally. Fixes RTBug #1904.
409            (MapCanvas.FitSelectedToWindow): If a single point is selected
410            simply center it on the display. Fixes RTBug #1849.
411    
412            * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
413            to be compiled as a standalone app. Now the code can only be
414            called from Python which simplifies the parameter passing.
415            (ProjectRasterFile): Handle Python arguments. Remove code that
416            checks for a destination dataset. Add more clean up code.
417    
418            * test/test_map.py (TestMapWithContents.test_raise_layer_top,
419            TestMapWithContents.test_lower_layer_bottom):
420            Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
421            Fixes RTBug #1907.
422    
423            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
424            extent to the map when the legend is toggled. Fixes RTBug #1881.
425    
426    2003-05-29  Jan-Oliver Wagner <[email protected]>
427    
428            * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
429            unsubscribes all that is subcribed in __init__.
430    
431    2003-05-28  Bernhard Herzog  <[email protected]>
432    
433            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
434            (MainWindow.CanDuplicateLayer): New methods to implement the
435            Layer/Duplicate command.
436            (layer_duplicate command): New.
437            (main_menu): Add layer_duplicate to the Layer menu.
438    
439    2003-05-28  Bernhard Herzog  <[email protected]>
440    
441            * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
442            renderer so that NULL/None values get displayed differently (by a
443            gray rectangle).
444            (TableGrid.__init__): Override the default renderers
445    
446    2003-05-28  Bernhard Herzog  <[email protected]>
447    
448            * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
449            classification to "None" if the type of the field has changed.
450    
451            * test/test_layer.py (SetShapeStoreTests): New. Class with a few
452            test for the Layer.SetShapeStore method
453    
454    2003-05-28  Jan-Oliver Wagner <[email protected]>
455    
456            * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
457            does not necessarily have a filename).
458    
459    2003-05-28  Jan-Oliver Wagner <[email protected]>
460    
461            * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
462            sort the selection list for the dialog.
463    
464    2003-05-28  Frank Koormann  <[email protected]>
465    
466            * extensions/thuban/wxproj.cpp
467            (project_point): Removed cast to int for projected point coordinates.
468            (shape_centroid): Return last point if all polygon vertices fall
469            to one point.
470    
471    2003-05-28  Bernhard Herzog  <[email protected]>
472    
473            * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
474            with layers that don't have shapestores, i.e. raster layers.
475    
476    2003-05-28  Bernhard Herzog  <[email protected]>
477    
478            * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
479            when determining the title from the filename.
480    
481            * test/test_dbf_table.py (TestDBFTable.test_title): Update to
482            reflect changes in the way the title is derived from the filename
483    
484    2003-05-28  Frank Koormann  <[email protected]>
485    
486            * Thuban/UI/mainwindow.py (MainWindow.TableShow):
487            Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
488    
489    2003-05-27  Bernhard Herzog  <[email protected]>
490    
491            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
492            delegate SelectedLayer.
493            (MainWindow.LayerUnjoinTable): Implement.
494            (_can_unjoin): New. Helper function for the sensitivity of the
495            layer/unjoin command.
496    
497            * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
498            (DerivedShapeStore.OrigShapeStore): New. Return the original
499            shapestore. Used to figure out how to unjoin.
500            (DerivedShapeStore.Shapefile): Fix a typo.
501    
502    2003-05-27  Bernhard Herzog  <[email protected]>
503    
504            * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
505            well
506            (JoinDialog.__init__): Use the layer parameter and only build the
507            left choice when a layer is given
508            (JoinDialog.OnJoin): Handle layer joins as well
509            (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
510            that the user selects the "Select..." item. The sensitivitly
511            updating is now in update_sensitivity
512            (JoinDialog.y): New method to refactor the sensitivity update of
513            the join button into its own method.
514    
515            * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
516    
517    2003-05-27  Bernhard Herzog  <[email protected]>
518    
519            * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
520            iff there are unreferenced tables in the session
521    
522    2003-05-27  Bernhard Herzog  <[email protected]>
523    
524            * Thuban/Model/messages.py (TABLE_REMOVED): New message.
525    
526            * Thuban/Model/session.py (Session.UnreferencedTables): New method
527            to return tables that are not referenced by other tables or shape
528            stores and can be removed.
529            (Session.RemoveTable): Issue a TABLE_REMOVED message after
530            removing the table
531    
532            * Thuban/UI/mainwindow.py: Remove unused imports
533            (MainWindow.TableClose): Implement.
534    
535            * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
536            messages so that the frame will be automatically closed when a new
537            session is opened or the table is removed.
538            (TableFrame.OnClose): Unsubscribe the Subscriptions made in
539            __init__
540            (TableFrame.close_on_session_replaced)
541            (TableFrame.close_on_table_removed): New. Subscribers that close
542            the window
543    
544            * test/test_session.py (TestSessionMessages.test_remove_table)
545            (TestSessionSimple.test_remove_table): Move the test to
546            TestSessionSimple and add test for the TABLE_REMOVED message
547            (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
548            (TestSessionSimple.test_unreferenced_tables) New. Test for the
549            UnreferencedTables method.
550            (UnreferencedTablesTests): New. Class with some more sophisticated
551            tests for UnreferencedTables.
552    
553    2003-05-27  Frank Koormann  <[email protected]>
554    
555            * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
556            display has some unwanted side effects. Removed again.
557    
558    2003-05-27  Frank Koormann  <[email protected]>
559    
560            * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
561    
562            * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
563    
564    2003-05-27  Jan-Oliver Wagner <[email protected]>
565    
566            * test/test_menu.py (MenuTest.test): Added test for
567            Menu.RemoveItem().
568    
569            * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
570            the menu.
571    
572    2003-05-27  Frank Koormann  <[email protected]>
573            
574            Nonmodal dialogs without parent (i.e. they can fall behind the main
575            window)
576    
577            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
578            all dialogs in the dialogs dictionary and the canvas.
579    
580            * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
581            parent, i.e. can fall behind other windows.
582            (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
583            dictionary before removing it.
584    
585            * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
586    
587            * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
588            * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
589            * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
590    
591    2003-05-27  Bernhard Herzog  <[email protected]>
592    
593            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
594            tableview dialog
595            (MainWindow.TableShow): Use ShowTableView to open the dialogs.
596            Also, don't use the table's titles as the dialog names. The titles
597            aren't guaranteed to be unique.
598            (MainWindow.TableOpen): Open a table view dialog after opening the
599            table
600    
601    2003-05-27  Bernhard Herzog  <[email protected]>
602    
603            * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
604            effect can be achieved by simply closing the window showing the
605            table.
606            (MainWindow.TableHide): Removed.
607            (main_menu): Removed "table_hide"
608    
609    2003-05-27  Frank Koormann  <[email protected]>
610    
611            Fix legend tree display problems under Win32
612    
613            * Thuban/UI/legend.py:  BMP_SIZE_W = 15
614            (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
615            (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
616    
617            * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
618    
619    2003-05-27  Jan-Oliver Wagner <[email protected]>
620    
621            * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
622            'after' now allows to insert separators almost anywhere in the menu.
623    
624    2003-05-27  Frank Koormann  <[email protected]>
625    
626            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
627            "S" of selection box label to hint on hot key (Alt-S). Works under
628            Win32 but is ignored under GTK.
629    
630    2003-05-26  Frank Koormann  <[email protected]>
631    
632            * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
633            Center Choices.
634    
635    2003-05-26  Bernhard Herzog  <[email protected]>
636    
637            Remove the Precision methods again. They're too DBF specific to be
638            part of the table interface and they're only used in table_to_dbf
639            anyway.
640            
641            * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
642            fixed precision of 12 for doubles.
643            (TransientTableBase.Precision): Removed
644            (AutoTransientTable.Width): Delegate to self.table.
645    
646            * Thuban/Model/table.py (DBFTable.Precision)
647            (MemoryTable.Precision): Removed.
648            (MemoryTable.Width): Use a fixed precision of 12 for doubles.
649            (table_to_dbf): Use a fixed precision of 12 for floats unless the
650            column object specifies something else.
651    
652            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
653            test for table_to_dbf
654    
655    2003-05-26  Bernhard Herzog  <[email protected]>
656    
657            * test/test_transientdb.py
658            (TestTransientTable.run_iceland_political_tests): Fix a comment.
659    
660    2003-05-26  Bernhard Herzog  <[email protected]>
661    
662            * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
663            implementation. Mark parts of the file format strings for
664            localization.
665    
666            * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
667            file and add the table to the tables managed by the session
668    
669            * test/test_session.py (TestSessionSimple.test_open_table_file):
670            New. test case for OpenTableFile
671    
672    2003-05-26  Jan-Oliver Wagner <[email protected]>
673    
674            * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
675            Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
676            Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
677            Replace the true/false of wxWindows by True/False of Python 2.2.1.
678    
679    2003-05-26  Jan-Oliver Wagner <[email protected]>
680    
681            * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
682            already a selection present, update the grid accordingly.
683    
684            * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
685            resizeable and increase its initial size.
686    
687    2003-05-26  Frank Koormann  <[email protected]>
688    
689            Table export functionality
690    
691            * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
692            Return width (in characters) for a column.
693            (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
694            (table_to_dbf): Write table to dbf file.
695            (table_to_csv): Write table to csv file.
696    
697            * Thuban/Model/transientdb.py (TransientTableBase.Width,
698            TransientTableBase.Precision): Return column width and precision.
699    
700            * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
701            or table_to_csv depending on file selection.
702    
703            * test/test_dbf_table.py:
704            Test table_to_dbf (extension of former part of test).
705    
706            * test/test_csv_table.py:
707            Test table_to_csv.
708    
709    2003-05-23  Jan-Oliver Wagner <[email protected]>
710    
711            * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
712            Use QueryTableFrame instead of TableFrame.
713    
714            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
715            table window with 'Layer Table:' instead of 'Table:'.
716    
717    2003-05-23  Jan-Oliver Wagner <[email protected]>
718    
719            Give all tables a title via mix-in TitledObject.LayerShowTable
720    
721            * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
722            only if it exists.
723    
724            * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
725            and call its init-method with a default title. Remove Title() method.
726    
727            * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
728            AutoTransientTable): mix-in TitledObject and call its init-method with
729            a default title. Remove Title() method.
730    
731    2003-05-23  Bernhard Herzog  <[email protected]>
732    
733            * Thuban/Model/session.py (Session.AddShapeStore): Define
734            AddShapeStore analogously to AddTable.
735    
736            * test/test_session.py (TestSessionSimple.test_add_shapestore):
737            New. Test for AddShapeStore
738    
739    2003-05-23  Jan-Oliver Wagner <[email protected]>
740    
741            Introducing QueryTableFrame and a very coarse ShowTable implementation.
742    
743            * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
744            class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
745            The latter implements the selection GUI without dependency on a layer.
746            LayerTableFrame now is derived from QueryTableFrame and connects
747            to a layer.
748    
749            * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
750            implementation that still needs work.
751    
752            * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
753    
754    2003-05-22  Frank Koormann  <[email protected]>
755    
756            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
757            Added "outer_join = False" as optional parameter.
758            (TransientJoinedTable.create): If outer join is true, perform a
759            "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
760            the left table. Records not matching are filled with 0 / None.
761    
762            * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
763            (JoinDialog.OnJoin): Consider outer join check box.
764    
765    2003-05-22  Bernhard Herzog  <[email protected]>
766    
767            * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
768            somewhat safer way. Storing the traceback in a local variable can
769            lead to memory leaks
770    
771    2003-05-22  Bernhard Herzog  <[email protected]>
772    
773            * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
774            the wxMessageDialog's Destroy() method.
775    
776    2003-05-22  Frank Koormann  <[email protected]>
777    
778            * Thuban/UI/join.py (JoinDialog.__init__): Make use of
779            TransientTable.Title()
780    
781    2003-05-22  Frank Koormann  <[email protected]>
782    
783            Join Dialog, initial version.
784    
785            * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
786    
787            * Thuban/UI/join.py (JoinDialog): Functional implementation of
788            former framework. Renamed Table1/Table2 to LeftTable/RightTable
789            in all occurences.
790    
791            * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
792            Typo fixed.
793    
794    2003-05-22  Bernhard Herzog  <[email protected]>
795    
796            Give the tables titles so that the GUI can display more meaningful
797            names. For now the titles are fixed but depend on e.g. filenames
798            or the titles of the joined tables.
799    
800            * Thuban/Model/transientdb.py (TransientTable.Title)
801            (TransientJoinedTable.Title, AutoTransientTable.Title): New.
802    
803            * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
804    
805            * test/test_transientdb.py
806            (TestTransientTable.test_auto_transient_table_title): New. Test
807            for the Title method
808            (TestTransientTable.test_transient_joined_table)
809            (TestTransientTable.test_transient_table): Add test for the Title
810            methods
811    
812            * test/test_memory_table.py (TestMemoryTable.test_title): New.
813            Test for the Title method
814    
815            * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
816            the Title method
817    
818    2003-05-22  Bernhard Herzog  <[email protected]>
819    
820            * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
821            Provide a better way to destroy the layers
822            (TestLayer.test_base_layer, TestLayer.test_arc_layer)
823            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
824            (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
825            the new way to destroy the layers.
826            (TestLayer.test_derived_store): New. Test for using a layer with a
827            DerivedShapeStore
828    
829            * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
830            filename if the shape store actually has one.
831    
832    2003-05-22  Bernhard Herzog  <[email protected]>
833    
834            * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
835            for the filename
836    
837            * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
838            for the FileName method
839            (TestDBFTableWriting.test_write): Fix spelling of filename
840    
841    2003-05-22  Thomas Koester  <[email protected]>
842    
843            * Thuban/Model/range.py, test/test_range.py: Brought over new Range
844            from SciParam that now really is immutable.
845    
846    2003-05-22  Frank Koormann  <[email protected]>
847    
848            Layer Top/Bottom placement added to legend.
849    
850            * Thuban/UI/legend.py
851            (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
852            bound to tool events.
853            (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
854            New, methods binding the event methods with the map methods.
855    
856            * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
857            layer at top/bottom of layer stack.
858    
859            * Resources/Bitmaps/top_layer.xpm: New button icon.
860    
861            * Resources/Bitmaps/bottom_layer.xpm: New button icon.
862    
863    2003-05-22  Bernhard Herzog  <[email protected]>
864    
865            * Thuban/Model/session.py (Session.RemoveTable): New method to
866            remove tables
867    
868            * test/test_session.py (TestSessionSimple.test_remove_table): New.
869            Test for RemoveTable
870    
871    2003-05-22  Thomas Koester  <[email protected]>
872    
873            * Thuban/Model/classgen.py: Added short module doc string and CVS id.
874            (ClassGenerator.GenUniformDistribution): Use new Range __init__, too.
875    
876    2003-05-22  Bernhard Herzog  <[email protected]>
877    
878            Implement a way to discover dependencies between tables and
879            shapestores.
880    
881            * Thuban/Model/transientdb.py (TransientTableBase.Dependencies)
882            (TransientJoinedTable.Dependencies)
883            (AutoTransientTable.SimpleQuery): New. Implement the dependencies
884            interface
885            (TransientJoinedTable.__init__): Keep tack of the original table
886            objects in addition to the corresponding transient tables.
887    
888            * Thuban/Model/table.py (DBFTable.Dependencies)
889            (MemoryTable.Dependencies): New. Implement the dependencies
890            interface
891    
892            * Thuban/Model/data.py (ShapeTable): New. Helper class for
893            ShapefileStore
894            (ShapefileStore.__init__): Use ShapeTable instead of
895            AutoTransientTable
896            (ShapefileStore.Table, ShapefileStore.Shapefile): Add doc-strings
897            (ShapefileStore.FileName, ShapefileStore.FileType): New. Accessor
898            methods for filename and type
899            (ShapefileStore.Dependencies): New. Implement the dependencies
900            interface
901            (DerivedShapeStore): New class to replace SimpleStore. The main
902            difference to SimpleStore is that it depends not on a shapefile
903            but another shapestore which expresses the dependencies a bit
904            better
905            (SimpleStore.__init__): Add deprecation warning.
906    
907            * test/test_dbf_table.py (TestDBFTable.test_dependencies): New.
908            Test for the Dependencies method.
909    
910            * test/test_memory_table.py (TestMemoryTable.test_dependencies):
911            New. Test for the Dependencies method.
912    
913            * test/test_transientdb.py
914            (TestTransientTable.test_auto_transient_table_dependencies): New.
915            Test for the Dependencies method.
916            (TestTransientTable.test_transient_joined_table): Add test for the
917            Dependencies method.
918    
919            * test/test_session.py (TestSessionSimple.setUp)
920            (TestSessionSimple.tearDown): New. Implement a better way to
921            destroy the sessions.
922            (TestSessionSimple.test_initial_state)
923            (TestSessionSimple.test_add_table): Bind session to self.session
924            so that it's destroyed by tearDown
925            (TestSessionSimple.test_open_shapefile): New. Test for
926            OpenShapefile and the object it returns
927    
928    2003-05-22  Bernhard Herzog  <[email protected]>
929    
930            * Thuban/Model/session.py (Session.AddTable): New method to
931            register tables with the session.
932            (Session.Tables): Return the tables registered with AddTable too.
933    
934            * test/test_session.py (TestSessionSimple.test_add_table): New.
935            Test case for the AddTable method
936    
937    2003-05-22  Frank Koormann  <[email protected]>
938    
939            UI polishing updates: Place main buttons (OK, Cancel, etc) in the
940            lower right corner, center labels for selections, initialize controls
941            in reasonable order for keyboard navigation.
942    
943            * Thuban/UI/projdialog.py (ProjFrame.__init__, ProjFrame.__doLayout)
944            (ProjFrame.__DoOnProjAvail): Determine position of current projection
945            using the wxListBox.FindString() method. Still a problem (#1886)
946    
947            * Thuban/UI/classifier.py
948            (Classifier.__init__, SelectPropertiesDialog.__init__)
949    
950            * Thuban/UI/classgen.py (ClassGenDialog.__init__,
951            (ClassGenDialog.__DoOnGenTypeSelect): Moved initialization of the
952            different classification types from here to __init__.
953            (GenUniquePanel.__init__): Set the column width of the first field
954            in the Field ListCtrl to the full width.
955    
956            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Rename 'Save As'
957            Button to 'Export'. Center Buttons in Selection Box, set Focus to
958            Grid.
959            (LayerTableFrame.OnKeyDown()): New, bound to the grid with EVT_KEY_DOWN,
960            changes focus to the Selection when pressing "Alt-S".
961    
962            * Thuban/UI/legend.py (LegendTree.__SetVisibilityStyle): Only gray out
963            the text if not visible. The italic font sometimes exceeds the
964            rendering area.
965    
966    2003-05-21  Jonathan Coles   <[email protected]>
967    
968            * Thuban/UI/dock.py (DockFrame): Rename references to _OnClose
969            to OnClose so that Thuban closes correctly.
970    
971            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Call
972            DockFrame.OnClose, not DockFrame._OnClose.
973    
974    2003-05-21  Jonathan Coles   <[email protected]>
975    
976            * Thuban/Model/classgen.py (ClassGenerator.GenQuantiles): Remove
977            references to 'inf' and use new Range __init__ to pass floats
978            directly rather than converting them to strings first.
979            Fixes RTBug #1876.
980    
981            * Thuban/Model/classification.py (ClassGroupRange.SetRange):
982            Use new Range ___init__ to pass floats.
983    
984            * Thuban/Model/layer.py (RasterLayer.__init__): Test if the
985            filename is a valid image file. Throw IOError otherwise.
986    
987            * Thuban/Model/range.py: Brought over new Range from SciParam that
988            is immutable and has an __init__ which can accept floats.
989    
990            * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Move OpenShapefile
991            into try block. AddLayer doesn't throw any exceptions anymore.
992            (MainWindow.AddRasterLayer): Move constructor of RasterLayer into
993            try block.
994    
995            * Thuban/UI/projdialog.py (GeoPanel.__init__): Put Degrees as
996            the first item in choices. Fixes RTBug #1882.
997    
998            * Thuban/UI/renderer.py (MapRenderer.render_map): Check if scale
999            has gone to 0 which is a serious problem. abort.
1000            (MapRenderer.draw_raster_layer): Catch IOError seperately and
1001            print the error from GDAL.
1002    
1003            * Thuban/UI/tableview.py (TableGrid.__init__): Call
1004            ToggleEventListeners to turn on listening.
1005            (TableGrid.ToggleEventListeners): New. Turns event listening on
1006            and off so as to prevent excessive messages.
1007            (LayerTableFrame.OnQuery): Use TableGrid.ToggleEventListeners
1008            to suppress excessive messages when selecting many rows.
1009            Fixes RTBug #1880.
1010    
1011            * Thuban/UI/view.py: Added checks against if scale == 0. This
1012            is a serious problem that can occur when an image without
1013            geo data is loading and causes the map projection bounds to
1014            go to infinity. Right now, the solution is to simply try
1015            to recover.
1016    
1017            * extensions/thuban/cpl_mfile.cpp (MFILEClose): Make sure
1018            to set the MFILEReceiver attributes even if the data is NULL.
1019    
1020            * extensions/thuban/gdalwarp.cpp: Improved the error handling
1021            and passed GDAL messages back up to the Python layer. Also
1022            tried to fix some memory leaks that were present in the original
1023            utility but didn't matter because the program aborted.
1024    
1025            * test/test_range.py: Copied over tests from SciParam. Removed
1026            tests against importing. Fixes RTBug #1867.
1027    
1028    2003-05-21  Bernhard Herzog  <[email protected]>
1029    
1030            * test/test_load.py: Remove unused imports and restructure the
1031            test code
1032            (LoadSessionTest): Split into one class for each test and turn
1033            LoadSessionTest itself into the base class for all such session
1034            tests.
1035            (ClassificationTest): New base class for load tests that test
1036            classifications
1037            (TestSingleLayer, TestLayerVisibility, TestClassification)
1038            (TestLabels, TestLayerProjection, TestRasterLayer): New classes
1039            for the individual tests
1040    
1041            * test/support.py (FileLoadTestCase.filename): New base class for
1042            file loading tests
1043    
1044    2003-05-21  Jan-Oliver Wagner <[email protected]>
1045    
1046            * Resources/Projections/defaults.proj: Renamed 'Universal Transverse
1047            Mercator' to 'UTM Zone 32' as a more convenient example.
1048            Added 'Gauss Krueger Zone 6'.
1049    
1050            * Data/iceland_sample_raster.thuban: political polygon now
1051            filled transparent to have the raster image visible at once.
1052    
1053  2003-05-21  Frank Koormann  <[email protected]>  2003-05-21  Frank Koormann  <[email protected]>
1054    
1055          * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to          * Thuban/UI/mainwindow.py (MainWindow): Renamed _OnClose() back to

Legend:
Removed from v.952  
changed lines
  Added in v.1301

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26