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

Legend:
Removed from v.927  
changed lines
  Added in v.1218

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26