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

Legend:
Removed from v.897  
changed lines
  Added in v.1384

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26