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

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

Legend:
Removed from v.843  
changed lines
  Added in v.1137

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26