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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26