/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.766  
changed lines
  Added in v.1109

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26