/[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 988 by bh, Thu May 22 16:46:23 2003 UTC revision 1195 by bh, Fri Jun 13 13:02:39 2003 UTC
# Line 1  Line 1 
1    2003-06-13  Bernhard Herzog  <[email protected]>
2    
3            * Thuban/UI/identifyview.py (IdentifyView.__init__): Call
4            self.selected_shape with the current selection to make sure the
5            contents of the dialog are up to date when it's shown for the
6            first time.
7            The dialog used to work without this by luck. The recent fix to
8            the connector module 'broke' a 'feature' the identify view was
9            relying on, i.e that subscribing to a message in response to
10            receiving a message of that type would mean that the new
11            subscriber would also be called for the same message.
12            
13    2003-06-12  Jonathan Coles   <[email protected]>
14    
15            * extensions/thuban/gdalwarp.cpp: Removed debug printing as
16            the image is rendered. Fixes RTbug #1937.
17    
18    2003-06-12  Jonathan Coles   <[email protected]>
19    
20            * Thuban/Lib/fileutil.py: As is done under Windows, create the
21            user directory if it doesn't exist on a posix system.
22            Fixes RTbug #1815.
23    
24            * Thuban/Model/resource.py (get_user_proj_files): Moved the
25            called to get_application_dir here, so that the directory
26            will only be called if this method is invoked.
27    
28            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Clear
29            the projfilepath if no projection is selected.
30    
31    2003-06-12  Jonathan Coles   <[email protected]>
32    
33            * Thuban/UI/legend.py (ScaleBarBitmap.__SetScale): Don't draw
34            the scalebar if the current map has no projection set.
35    
36            * Thuban/UI/projdialog.py (ProjFrame.__DoOnProjAvail): Set the
37            projfilepath label to just the basename of the projection file
38            rather than include the entire path.
39    
40            * Thuban/Model/resource.py: Fix missed proj functions that
41            needed to be renamed.
42    
43    2003-06-12  Jonathan Coles   <[email protected]>
44    
45            * Thuban/Model/classification.py: Removed assert statements that
46            tested if the variable was an instance of Color.
47    
48            * Thuban/Model/color.py (Color): Remove commented code that isn't
49            used.
50            (Transparent): Renamed from NoColor. Doesn't inherit from Color.
51            Fixes RTbug #1835.
52            (Transparent.__eq__, Transparent.__ne, Transparent.__repr): New.
53            Needed now that the class doesn't inherit from Color.
54    
55    2003-06-12  Jonathan Coles   <[email protected]>
56    
57            * test/test_save.py (XMLWriterTest.testEncode): Explicitly
58            check unicode strings.
59    
60            * test/test_layer.py: Check for existence of gdal.
61    
62    2003-06-12  Jonathan Coles   <[email protected]>
63        
64            * Thuban/Model/xmlreader.py: New. Contains the XMLReader class
65            that was in load.py
66    
67            * Thuban/Model/xmlwriter.py: New. Contains the XMLWriter class
68            that was in save.py
69    
70    2003-06-12  Jonathan Coles   <[email protected]>
71    
72            This is largely a collection of bug fixes. We also handle the
73            case where gdal is not on the system. The XMLReader and XMLWriter
74            classes were moved into there own files to resolve some circular
75            import references and because they shouldn't really be in the
76            file that is dediciated to reading/writing session files since
77            they are also used elsewhere.
78    
79            * Thuban/Model/classgen.py: Renamed functions to follow the
80            function_names_with_underscores style. Fixes RTbug #1903.
81            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
82    
83            * Thuban/Model/layer.py: Import gdal only if it available.
84            (RasterLayer): Handle the case where the gdal library is unavailable.
85            Addresses RTbug #1877.
86    
87            * Thuban/Model/load.py (XMLReader): Moved into seperate file
88            xmlreader.py.
89    
90    2003-06-12  Jonathan Coles   <[email protected]>
91    
92            This is largely a collection of bug fixes. We also handle the
93            case where gdal is not on the system. The XMLReader and XMLWriter
94            classes were moved into there own files to resolve some circular
95            import references and because they shouldn't really be in the
96            file that is dediciated to reading/writing session files since
97            they are also used elsewhere.
98    
99            * Thuban/Model/classgen.py: Renamed functions to follow the
100            function_names_with_underscores style. Fixes RTbug #1903.
101            (calculate_quantiles): Raise ValueError if 'percents' is invalid.
102    
103            * Thuban/Model/layer.py: Import gdal only if it available.
104            (RasterLayer): Handle the case where the gdal library is unavailable.
105            Addresses RTbug #1877.
106    
107            * Thuban/Model/load.py (XMLReader): Moved into seperate file
108            xmlreader.py.
109    
110            * Thuban/Model/save.py (escape, XMLWriter): Moved into seperate
111            file xmlwriter.py.
112    
113            * Thuban/Model/resource.py: Renamed functions to following the
114            function_names_with_underscores style.
115            (has_gdal_support): New function that returns true if the gdal
116            library is available. Addresses RTbug #1877.
117    
118            * Thuban/UI/application.py (ThubanApplication.OpenSession):
119            Display a message box if the gdal library is not available, but
120            only if there are any layers that would use it. Addresses RTbug #1877.
121    
122            * Thuban/UI/classgen.py: Use renamed projection resource functions.
123            (GenUniformPanel.__CalcStepping): Fix a slight discrepency
124            when using integers versus floats.
125    
126            * Thuban/UI/mainwindow.py (_has_gdal_support): New. Used to
127            determine if the "Add Image Layer" menu option should be
128            greyed out or not. Addresses RTbug #1877.
129    
130            * Thuban/UI/projdialog.py: Use renamed projection resource functions.
131    
132            * Thuban/UI/renderer.py (MapRenderer.render_map): Only try to
133            optimize if a raster layer is visible. Fixes RTbug #1931.
134            Only draw the raster layer if the gdal library is available.
135            Addresses RTbug #1877.
136    
137            * test/test_classgen.py: Add tests for generate_singletons,
138            generate_uniform_distribution, generate_quantiles. Fixes RTbug #1903.
139            (test_calculate_quantiles): Fix some tests to catch the new
140            ValueError that is raised.
141    
142            * test/test_proj.py: Use renamed projection resource functions.
143    
144            * test/test_save.py (SaveSessionTest.testClassifiedLayer): New
145            test for saving classified layers. Fixes RTbug #1902.
146            (XMLWriterTest): New. Tests the XMLWriter class. Fixes RTbug #1851.
147    
148    2003-06-12  Jan-Oliver Wagner <[email protected]>
149    
150            Fix for http://intevation.de/rt/webrt?serial_num=1900.
151    
152            * Thuban/UI/multiplechoicedialog.py: New. A multiple choice dialog.
153    
154            * Thuban/UI/mainwindow.py: import wxMultipleChoiceDialog from
155            multiplechoicedialog.py rather than from the wxPython library.
156    
157    2003-06-11  Frank Koormann  <[email protected]>
158    
159            * Thuban/Lib/fileutil.py (get_application_dir): Minor stability
160            update.
161    
162    2003-06-11  Frank Koormann  <[email protected]>
163    
164            * Thuban/Lib/fileutil.py (get_application_dir): New function to
165            determine the absolute .thuban/thuban directory under
166            "posix" (os.expanduser) and "nt" (read AppData registry key).
167    
168            * Thuban/Model/resource.py: Use get_application_dir
169    
170            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
171            Use get_application_dir.
172    
173    2003-06-10  Bernhard Herzog  <[email protected]>
174    
175            * Thuban/UI/tableview.py (LayerTableFrame.__init__): Subscribe to
176            the messages MAP_LAYERS_REMOVED messages
177            (LayerTableFrame.OnClose): Unsubscribe from it.
178            (LayerTableFrame.map_layers_removed): New. Receiver for
179            MAP_LAYERS_REMOVED. Close the dialog when the layer whose the
180            dialog is showing is removed.
181    
182    2003-06-10  Bernhard Herzog  <[email protected]>
183    
184            * Thuban/Lib/connector.py (Connector.Issue): Iterate over a copy
185            of the receivers list so that unsubscribing in a receiver doesn't
186            modify it while iterating over it.
187    
188            * test/test_connector.py
189            (ConnectorTest.test_disconnect_in_receiver): New. Test whether
190            unsubscribing in a receiver works correctly. See docstring for
191            details
192    
193    2003-06-10  Bernhard Herzog  <[email protected]>
194    
195            * Thuban/Model/messages.py (LAYER_SHAPESTORE_REPLACED): New
196            message.
197    
198            * Thuban/Model/layer.py (Layer.SetShapeStore): Send
199            LAYER_SHAPESTORE_REPLACED when the shapestore changes. A
200            LAYER_CHANGED will still be sent if the classification changes.
201    
202            * Thuban/UI/classifier.py (Classifier.__init__): Add the map as
203            parameter so we can subscribe to some of its messages
204            (Classifier.__init__): Subscribe to the map's MAP_LAYERS_REMOVED
205            and the layer's LAYER_SHAPESTORE_REPLACED
206            (Classifier.unsubscribe_messages): New. Unsubscribe from message
207            subscribed to in __init__
208            (Classifier.map_layers_removed)
209            (Classifier.layer_shapestore_replaced): receivers for the messages
210            subscribed to in __init__. Unsubscribe and close the dialog
211    
212            * Thuban/UI/mainwindow.py (MainWindow.OpenLayerProperties): Pass
213            the map to the Classifier dialog
214    
215            * test/test_layer.py (SetShapeStoreTests): Derive from
216            SubscriberMixin as well so we can test messages
217            (SetShapeStoreTests.setUp): Subscribe to some of the layer's
218            messages
219            (SetShapeStoreTests.tearDown): Clear the messages again
220            (SetShapeStoreTests.test_sanity): Expand the doc-string and check
221            for the modified flag too
222            (SetShapeStoreTests.test_set_shape_store_modified_flag): New test
223            to check whether SetShapeStore sets the modified flag
224            (SetShapeStoreTests.test_set_shape_store_different_field_name)
225            (SetShapeStoreTests.test_set_shape_store_same_field)
226            (SetShapeStoreTests.test_set_shape_store_same_field_different_type):
227            Add tests for the messages. This checks both the new
228            LAYER_SHAPESTORE_REPLACED and the older LAYER_CHANGED
229    
230    2003-06-06  Jan-Oliver Wagner <[email protected]>
231    
232            * Thuban/UI/mainwindow.py: Improved and partly added help texts for
233            the menu items.
234    
235    2003-06-05  Frank Koormann  <[email protected]>
236    
237            * Thuban/UI/identifyview.py (IdentifyView.__init__):
238            Layout reimplemented without panel. Make life easier to fit the list
239            in the dialog.
240    
241    2003-06-05  Frank Koormann  <[email protected]>
242    
243            * Thuban/UI/projdialog.py (ProjFrame.__init__): Fill the projchoice
244            once on initialisation (Former implementation resulted in multiple
245            entries for each projection).
246            (ProjFrame.__FillAvailList): selectProj as second optional parameter,
247            if set, select the projection found under the specified name. This
248            overwrites any other selection estimate.
249            Removed projchoice filling from this method.
250            (ProjFrame._OnSave, ProjFrame._OnAddToList):
251            Updated call of ProjFrame.__FillAvailList
252            (LCCPanel._DoLayout): Moved parameter controls in more common order.
253    
254            * Resources/Projections/defaults.proj: Extended defaults representing
255            various common European projections.
256    
257    2003-06-05  Frank Koormann  <[email protected]>
258    
259            * Thuban/UI/identifyview.py (IdentifyView.__init__):
260            Use ListCtrl instead of GridCtrl
261    
262            * Thuban/Model/resource.py:
263            Guess location of .thuban directory from tempdir parent directory.
264    
265            * Thuban/UI/application.py (ThubanApplication.read_startup_files):
266            Guess location of .thuban directory from tempdir parent directory.
267    
268    2003-06-04  Bernhard Herzog  <[email protected]>
269    
270            Do not cache the values returned by the tree widget's
271            GetFirstChild and GetNextChild methods because it led to lots of
272            segfaults. The new way requires more brute force but is more
273            reliable.
274    
275            * Thuban/UI/legend.py (LegendTree.__init__): Remove instance
276            variable layer2id
277            (LegendTree.find_layer): New method to do with brute force what
278            layer2id tried to accomplish
279            (LegendTree._OnMsgLayerChanged)
280            (LegendTree._OnMsgLayerTitleChanged, LegendTree.__ShowHideLayer):
281            Use find_layer instead of layer2id
282            (LegendTree.__RemoveLayer, LegendTree.__AddLayer): No need to
283            update layer2id anymore
284            (LegendTree._OnMsgMapLayersRemoved)
285            (LegendTree._OnMsgMapLayersAdded): Get by without layer2id.
286    
287    2003-06-03  Thomas Koester  <[email protected]>
288    
289            * Thuban/Model/classgen.py (GenQuantiles0): New function.
290    
291    2003-06-02  Bernhard Herzog  <[email protected]>
292    
293            * Thuban/UI/mainwindow.py (layer_rename command, table_rename command):
294            New commands.
295            (main_menu): Add the new commands.
296            (MainWindow.TableRename): New. Implementation of the table_rename
297            command.
298            (MainWindow.RenameLayer): New. Implementation of the layer_rename
299            command.
300    
301            * Thuban/Model/session.py (Session.AddTable): call self.changed to
302            set the modified flag
303    
304            * test/test_session.py (TestSessionSimple.test_add_table): Test
305            whether the modified flag is set properly
306    
307            * Thuban/Model/base.py (TitledObject.SetTitle): Call changed
308            instead of issue so that the modified flags get updated.
309    
310            * test/test_base.py (SomeTitledObject): Derive from Modifiable
311            instead of Publisher to reflect reality better and to accomodate
312            the fact that SetTitle now calls changed instead of issue
313    
314    2003-06-02  Bernhard Herzog  <[email protected]>
315    
316            * Thuban/UI/classgen.py (GenQuantilesPanel.GetList): Resource
317            acquisition has to happen before the try in a try-finally.
318    
319    2003-06-02  Bernhard Herzog  <[email protected]>
320    
321            * Thuban/UI/legend.py (LegendTree._OnMsgMapLayersRemoved): It's
322            possible that a layer is removed that is not currently selected in
323            the legend so don't check for this.
324    
325    2003-05-30  Bernhard Herzog  <[email protected]>
326    
327            * Thuban/Model/layer.py (Layer.Destroy): Set all instance
328            variables to None that have direct or indirect references to
329            shapefiles or dbf files to make sure that they do go away and the
330            files are closed.
331    
332    2003-05-30  Bernhard Herzog  <[email protected]>
333    
334            * Thuban/UI/legend.py (LegendTree.GetRootItem): Reset
335            availImgListIndices when a new image list is created
336            
337    2003-05-30  Bernhard Herzog  <[email protected]>
338    
339            * Thuban/UI/legend.py (LegendTree.__init__): New instance variable
340            changing_selection to indicate whether the LegendTree code itself
341            is currently changing the selection
342            (LegendTree.normalize_selection): New method to normalize the
343            selection by selecting the layer item even if the user clicked on
344            the classification.
345            (LegendTree._OnSelChanged): normalize the selection. This works
346            around a bug in wx which doesn't keep track of the selection
347            properly when subtrees are deleted.
348    
349    2003-05-30  Bernhard Herzog  <[email protected]>
350    
351            * Thuban/UI/view.py (MapCanvas.set_view_transform): Limit the
352            maximum and minimum scale factors.
353    
354            * test/test_classgen.py (ClassGenTest.test): Update to reflect the
355            changes in classgen.py
356    
357    2003-05-30  Jonathan Coles   <[email protected]>
358    
359            * Thuban/Model/classgen.py: Remove ClassGenerator class but make
360            all the methods functions. Fixes RTBug #1903.
361    
362            * Thuban/Model/map.py (Map.TopLayer, Map.BottomLayer): Renamed
363            to MoveLayerToTop and MoveLayerToBottom respectively. Fixes
364            RTBug #1907.
365    
366            * Thuban/UI/classgen.py: Use classgen functions that were part
367            of the ClassGenerator class. Put try/finally blocks around
368            code that uses wxBeginBusyCursor()/wxEndBusyCursor(). Fixes
369            RTBug #1904.
370    
371            * Thuban/UI/classifier.py: Remove unused import of ClassGenerator.
372    
373            * Thuban/UI/legend.py: The legend was cleared and repopulated any
374            time something changed which caused some state to be lost such
375            as which children were expanded or collapsed. Fixes RTBug #1901.
376            (LegendTree._OnMsgMapLayersAdded): Add only new layers.
377            (LegendTree.__OnMsgMapLayersRemoved): Remove layers that exist in
378            the legend but not in the map.
379            (LegendTree.__FillTree): Move main functionality out into smaller
380            methods that can be used by other methods.
381            (LegendTree.__FillTreeLayer): Reuse old slots in the image list
382            if they are available.
383            (LegendTree.DeleteAllItems): Renamed from __DeleteAllItems so
384            that we override the wxTreeCtrl method. Iterate over children
385            and call __RemoveLayer.
386            (LegendTree.__AddLayer): New. Add a new layer to the legend.
387            (LegendTree.__RemoveLayer): Remove a layer from the legend.
388            (LegendTree.DeleteChildren): New, overrides wxTreeCtrl method.
389            Should only be called with the id of a layer branch.
390            (LegendTree.GetRootItem): New, overrides wxTreeCtrl method.
391            Returns the root item or creates one if necessary.
392    
393            * Thuban/UI/renderer.py (MapRenderer.draw_raster_layer): Call
394            ProjectRasterFile with tuple arguments instead of strings.
395    
396            * Thuban/UI/tableview.py (QueryTableFrame.OnQuery): Wrap code
397            with try/finally. Fixes RTBug #1904.
398    
399            * Thuban/UI/view.py (MapCanvas.OnPaint): Wrap code
400            with try/finally. Fixes RTBug #1904.
401            (MapCanvas.FitSelectedToWindow): If a single point is selected
402            simply center it on the display. Fixes RTBug #1849.
403    
404            * extensions/thuban/gdalwarp.cpp: Removed code that allowed gdalwarp
405            to be compiled as a standalone app. Now the code can only be
406            called from Python which simplifies the parameter passing.
407            (ProjectRasterFile): Handle Python arguments. Remove code that
408            checks for a destination dataset. Add more clean up code.
409    
410            * test/test_map.py (TestMapWithContents.test_raise_layer_top,
411            TestMapWithContents.test_lower_layer_bottom):
412            Test Map.MoveLayerToTop() and Map.MoveLayerToBottom() respectively.
413            Fixes RTBug #1907.
414    
415            * Thuban/UI/mainwindow.py (MainWindow.ToggleLegend): Apply a full
416            extent to the map when the legend is toggled. Fixes RTBug #1881.
417    
418    2003-05-29  Jan-Oliver Wagner <[email protected]>
419    
420            * Thuban/UI/tableview.py (LayerTableFrame.OnClose): Bug-fix: Now
421            unsubscribes all that is subcribed in __init__.
422    
423    2003-05-28  Bernhard Herzog  <[email protected]>
424    
425            * Thuban/UI/mainwindow.py (MainWindow.DuplicateLayer)
426            (MainWindow.CanDuplicateLayer): New methods to implement the
427            Layer/Duplicate command.
428            (layer_duplicate command): New.
429            (main_menu): Add layer_duplicate to the Layer menu.
430    
431    2003-05-28  Bernhard Herzog  <[email protected]>
432    
433            * Thuban/UI/tableview.py (NullRenderer.Draw): New. Our own
434            renderer so that NULL/None values get displayed differently (by a
435            gray rectangle).
436            (TableGrid.__init__): Override the default renderers
437    
438    2003-05-28  Bernhard Herzog  <[email protected]>
439    
440            * Thuban/Model/layer.py (Layer.SetShapeStore): Set the
441            classification to "None" if the type of the field has changed.
442    
443            * test/test_layer.py (SetShapeStoreTests): New. Class with a few
444            test for the Layer.SetShapeStore method
445    
446    2003-05-28  Jan-Oliver Wagner <[email protected]>
447    
448            * Thuban/Model/layer.py (Layer.TreeInfo): Fixed a bug (a layer
449            does not necessarily have a filename).
450    
451    2003-05-28  Jan-Oliver Wagner <[email protected]>
452    
453            * Thuban/UI/mainwindow.py (MainWindow.TableClose, MainWindow.TableShow):
454            sort the selection list for the dialog.
455    
456    2003-05-28  Frank Koormann  <[email protected]>
457    
458            * extensions/thuban/wxproj.cpp
459            (project_point): Removed cast to int for projected point coordinates.
460            (shape_centroid): Return last point if all polygon vertices fall
461            to one point.
462    
463    2003-05-28  Bernhard Herzog  <[email protected]>
464    
465            * Thuban/UI/mainwindow.py (_can_unjoin): Add doc-string and cope
466            with layers that don't have shapestores, i.e. raster layers.
467    
468    2003-05-28  Bernhard Herzog  <[email protected]>
469    
470            * Thuban/Model/table.py (DBFTable.__init__): Omit the extension
471            when determining the title from the filename.
472    
473            * test/test_dbf_table.py (TestDBFTable.test_title): Update to
474            reflect changes in the way the title is derived from the filename
475    
476    2003-05-28  Frank Koormann  <[email protected]>
477    
478            * Thuban/UI/mainwindow.py (MainWindow.TableShow):
479            Added wxDEFAULT_DIALOG_STYLE to show table dialog styles.
480    
481    2003-05-27  Bernhard Herzog  <[email protected]>
482    
483            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages): Also
484            delegate SelectedLayer.
485            (MainWindow.LayerUnjoinTable): Implement.
486            (_can_unjoin): New. Helper function for the sensitivity of the
487            layer/unjoin command.
488    
489            * Thuban/Model/data.py (ShapefileStore.OrigShapeStore)
490            (DerivedShapeStore.OrigShapeStore): New. Return the original
491            shapestore. Used to figure out how to unjoin.
492            (DerivedShapeStore.Shapefile): Fix a typo.
493    
494    2003-05-27  Bernhard Herzog  <[email protected]>
495    
496            * Thuban/UI/join.py (JoinDialog): Extend to handle layer joins as
497            well
498            (JoinDialog.__init__): Use the layer parameter and only build the
499            left choice when a layer is given
500            (JoinDialog.OnJoin): Handle layer joins as well
501            (JoinDialog.OnLeftTable, JoinDialog.OnRightTable): Handle the case
502            that the user selects the "Select..." item. The sensitivitly
503            updating is now in update_sensitivity
504            (JoinDialog.y): New method to refactor the sensitivity update of
505            the join button into its own method.
506    
507            * Thuban/UI/mainwindow.py (MainWindow.LayerJoinTable): Implement.
508    
509    2003-05-27  Bernhard Herzog  <[email protected]>
510    
511            * Thuban/UI/mainwindow.py (table_close command): Make it sensitive
512            iff there are unreferenced tables in the session
513    
514    2003-05-27  Bernhard Herzog  <[email protected]>
515    
516            * Thuban/Model/messages.py (TABLE_REMOVED): New message.
517    
518            * Thuban/Model/session.py (Session.UnreferencedTables): New method
519            to return tables that are not referenced by other tables or shape
520            stores and can be removed.
521            (Session.RemoveTable): Issue a TABLE_REMOVED message after
522            removing the table
523    
524            * Thuban/UI/mainwindow.py: Remove unused imports
525            (MainWindow.TableClose): Implement.
526    
527            * Thuban/UI/tableview.py (TableFrame.__init__): Subscribe to some
528            messages so that the frame will be automatically closed when a new
529            session is opened or the table is removed.
530            (TableFrame.OnClose): Unsubscribe the Subscriptions made in
531            __init__
532            (TableFrame.close_on_session_replaced)
533            (TableFrame.close_on_table_removed): New. Subscribers that close
534            the window
535    
536            * test/test_session.py (TestSessionMessages.test_remove_table)
537            (TestSessionSimple.test_remove_table): Move the test to
538            TestSessionSimple and add test for the TABLE_REMOVED message
539            (TestSessionBase.setUp): Also subscribe to TABLE_REMOVED
540            (TestSessionSimple.test_unreferenced_tables) New. Test for the
541            UnreferencedTables method.
542            (UnreferencedTablesTests): New. Class with some more sophisticated
543            tests for UnreferencedTables.
544    
545    2003-05-27  Frank Koormann  <[email protected]>
546    
547            * Thuban/UI/tableview.py (QueryTableFrame.__init__): The "_S_election"
548            display has some unwanted side effects. Removed again.
549    
550    2003-05-27  Frank Koormann  <[email protected]>
551    
552            * Resources/Bitmaps/legend_icon_layer.xpm: New, icon for legend.
553    
554            * Thuban/UI/legend.py (LegendTree.__FillTree): Use "legend_icon_layer"
555    
556    2003-05-27  Jan-Oliver Wagner <[email protected]>
557    
558            * test/test_menu.py (MenuTest.test): Added test for
559            Menu.RemoveItem().
560    
561            * Thuban/UI/menu.py (Menu.RemoveItem): New. Remove an item from
562            the menu.
563    
564    2003-05-27  Frank Koormann  <[email protected]>
565            
566            Nonmodal dialogs without parent (i.e. they can fall behind the main
567            window)
568    
569            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Explicitly destroy
570            all dialogs in the dialogs dictionary and the canvas.
571    
572            * Thuban/UI/dialogs.py (NonModalNonParentDialog): New class, without
573            parent, i.e. can fall behind other windows.
574            (NonModalDialog.OnClose): Check is dialog is in mainwindow.dialog
575            dictionary before removing it.
576    
577            * Thuban/UI/classifier.py: Dialog derived from NonModalNonParentDialog
578    
579            * Thuban/UI/projdialog.py: Dialog derived from NonModalNonParentDialog
580            * Thuban/UI/tableview.py: Dialog derived from NonModalNonParentDialog
581            * Thuban/UI/tree.py: Dialog derived from NonModalNonParentDialog
582    
583    2003-05-27  Bernhard Herzog  <[email protected]>
584    
585            * Thuban/UI/mainwindow.py (MainWindow.ShowTableView): New. Open a
586            tableview dialog
587            (MainWindow.TableShow): Use ShowTableView to open the dialogs.
588            Also, don't use the table's titles as the dialog names. The titles
589            aren't guaranteed to be unique.
590            (MainWindow.TableOpen): Open a table view dialog after opening the
591            table
592    
593    2003-05-27  Bernhard Herzog  <[email protected]>
594    
595            * Thuban/UI/mainwindow.py: Remove the Table/Hide menu item. Its
596            effect can be achieved by simply closing the window showing the
597            table.
598            (MainWindow.TableHide): Removed.
599            (main_menu): Removed "table_hide"
600    
601    2003-05-27  Frank Koormann  <[email protected]>
602    
603            Fix legend tree display problems under Win32
604    
605            * Thuban/UI/legend.py:  BMP_SIZE_W = 15
606            (LegendTree.__FillTree): Display "legend_icon_map.xpm" with layer title.
607            (LegendTree.__FillTreeLayer): Explicitely set SelectedImage.
608    
609            * Resources/Bitmaps/legend_icon_map.xpm: New icon for legend.
610    
611    2003-05-27  Jan-Oliver Wagner <[email protected]>
612    
613            * Thuban/UI/menu.py (Menu.InsertSeparator): Additional optional parameter
614            'after' now allows to insert separators almost anywhere in the menu.
615    
616    2003-05-27  Frank Koormann  <[email protected]>
617    
618            * Thuban/UI/tableview.py (QueryTableFrame.__init__): Underline the
619            "S" of selection box label to hint on hot key (Alt-S). Works under
620            Win32 but is ignored under GTK.
621    
622    2003-05-26  Frank Koormann  <[email protected]>
623    
624            * Thuban/UI/projdialog.py (ProjFrame.__do_layout, ProjPanel._DoLayout):
625            Center Choices.
626    
627    2003-05-26  Bernhard Herzog  <[email protected]>
628    
629            Remove the Precision methods again. They're too DBF specific to be
630            part of the table interface and they're only used in table_to_dbf
631            anyway.
632            
633            * Thuban/Model/transientdb.py (TransientTableBase.Width):Use a
634            fixed precision of 12 for doubles.
635            (TransientTableBase.Precision): Removed
636            (AutoTransientTable.Width): Delegate to self.table.
637    
638            * Thuban/Model/table.py (DBFTable.Precision)
639            (MemoryTable.Precision): Removed.
640            (MemoryTable.Width): Use a fixed precision of 12 for doubles.
641            (table_to_dbf): Use a fixed precision of 12 for floats unless the
642            column object specifies something else.
643    
644            * test/test_dbf_table.py (TestTableToDBF.test_table_to_dbf): New.
645            test for table_to_dbf
646    
647    2003-05-26  Bernhard Herzog  <[email protected]>
648    
649            * test/test_transientdb.py
650            (TestTransientTable.run_iceland_political_tests): Fix a comment.
651    
652    2003-05-26  Bernhard Herzog  <[email protected]>
653    
654            * Thuban/UI/mainwindow.py (MainWindow.TableOpen): Real
655            implementation. Mark parts of the file format strings for
656            localization.
657    
658            * Thuban/Model/session.py (Session.OpenTableFile): New. Open a dbf
659            file and add the table to the tables managed by the session
660    
661            * test/test_session.py (TestSessionSimple.test_open_table_file):
662            New. test case for OpenTableFile
663    
664    2003-05-26  Jan-Oliver Wagner <[email protected]>
665    
666            * Thuban/UI/controls.py, Thuban/UI/identifyview.py, Thuban/UI/join.py,
667            Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py,
668            Thuban/UI/proj4dialog.py, Thuban/UI/tableview.py, Thuban/UI/view.py:
669            Replace the true/false of wxWindows by True/False of Python 2.2.1.
670    
671    2003-05-26  Jan-Oliver Wagner <[email protected]>
672    
673            * Thuban/UI/tableview.py (LayerTableFrame.__init__): If there is
674            already a selection present, update the grid accordingly.
675    
676            * Thuban/UI/mainwindow.py (MainWindow.TableShow): Make the dialog
677            resizeable and increase its initial size.
678    
679    2003-05-26  Frank Koormann  <[email protected]>
680    
681            Table export functionality
682    
683            * Thuban/Model/table.py (DBFTable.Width, MemoryTable.Width):
684            Return width (in characters) for a column.
685            (DBFTable.Precision, MemoryTable.Precision): Return decimal precision.
686            (table_to_dbf): Write table to dbf file.
687            (table_to_csv): Write table to csv file.
688    
689            * Thuban/Model/transientdb.py (TransientTableBase.Width,
690            TransientTableBase.Precision): Return column width and precision.
691    
692            * Thuban/UI/tableview.py (QueryTableFrame.OnSaveAs): Call table_to_dbf
693            or table_to_csv depending on file selection.
694    
695            * test/test_dbf_table.py:
696            Test table_to_dbf (extension of former part of test).
697    
698            * test/test_csv_table.py:
699            Test table_to_csv.
700    
701    2003-05-23  Jan-Oliver Wagner <[email protected]>
702    
703            * Thuban/UI/join.py (JoinDialog.OnJoin): Use _() for strings.
704            Use QueryTableFrame instead of TableFrame.
705    
706            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Prefix the
707            table window with 'Layer Table:' instead of 'Table:'.
708    
709    2003-05-23  Jan-Oliver Wagner <[email protected]>
710    
711            Give all tables a title via mix-in TitledObject.LayerShowTable
712    
713            * Thuban/Model/base.py (TitledObject.SetTitle): Call method 'issue'
714            only if it exists.
715    
716            * Thuban/Model/table.py (DBFTable, MemoryTable): mix-in TitledObject
717            and call its init-method with a default title. Remove Title() method.
718    
719            * Thuban/Model/transientdb.py (TransientTable, TransientJoinedTable,
720            AutoTransientTable): mix-in TitledObject and call its init-method with
721            a default title. Remove Title() method.
722    
723    2003-05-23  Bernhard Herzog  <[email protected]>
724    
725            * Thuban/Model/session.py (Session.AddShapeStore): Define
726            AddShapeStore analogously to AddTable.
727    
728            * test/test_session.py (TestSessionSimple.test_add_shapestore):
729            New. Test for AddShapeStore
730    
731    2003-05-23  Jan-Oliver Wagner <[email protected]>
732    
733            Introducing QueryTableFrame and a very coarse ShowTable implementation.
734    
735            * Thuban/UI/tableview.py (LayerTableFrame, QueryTableFrame): Split the
736            class LayerTableFrame into two classes, LayerTableFrame and QueryTableFrame.
737            The latter implements the selection GUI without dependency on a layer.
738            LayerTableFrame now is derived from QueryTableFrame and connects
739            to a layer.
740    
741            * Thuban/UI/mainwindow.py (MainWindow.TableShow): A very coarse
742            implementation that still needs work.
743    
744            * Thuban/Model/layer.py (Layer.TreeInfo): Added filename.
745    
746    2003-05-22  Frank Koormann  <[email protected]>
747    
748            * Thuban/Model/transientdb.py (TransientJoinedTable.__init__):
749            Added "outer_join = False" as optional parameter.
750            (TransientJoinedTable.create): If outer join is true, perform a
751            "LEFT OUTER JOIN" instead of "JOIN", which preserves all records of
752            the left table. Records not matching are filled with 0 / None.
753    
754            * Thuban/UI/join.py (JoinDialog.__init__): Checkbox for outer join.
755            (JoinDialog.OnJoin): Consider outer join check box.
756    
757    2003-05-22  Bernhard Herzog  <[email protected]>
758    
759            * Thuban/UI/join.py (JoinDialog.OnJoin): Use exc_info in a
760            somewhat safer way. Storing the traceback in a local variable can
761            lead to memory leaks
762    
763    2003-05-22  Bernhard Herzog  <[email protected]>
764    
765            * Thuban/UI/join.py (JoinDialog.OnJoin): Make sure to really call
766            the wxMessageDialog's Destroy() method.
767    
768    2003-05-22  Frank Koormann  <[email protected]>
769    
770            * Thuban/UI/join.py (JoinDialog.__init__): Make use of
771            TransientTable.Title()
772    
773    2003-05-22  Frank Koormann  <[email protected]>
774    
775            Join Dialog, initial version.
776    
777            * Thuban/UI/mainwindow.py (MainWindow.TableJoin): Removed print.
778    
779            * Thuban/UI/join.py (JoinDialog): Functional implementation of
780            former framework. Renamed Table1/Table2 to LeftTable/RightTable
781            in all occurences.
782    
783            * Thuban/Model/transientdb.py (TransientJoinedTable.__doc__):
784            Typo fixed.
785    
786    2003-05-22  Bernhard Herzog  <[email protected]>
787    
788            Give the tables titles so that the GUI can display more meaningful
789            names. For now the titles are fixed but depend on e.g. filenames
790            or the titles of the joined tables.
791    
792            * Thuban/Model/transientdb.py (TransientTable.Title)
793            (TransientJoinedTable.Title, AutoTransientTable.Title): New.
794    
795            * Thuban/Model/table.py (DBFTable.Title, MemoryTable.Title): New.
796    
797            * test/test_transientdb.py
798            (TestTransientTable.test_auto_transient_table_title): New. Test
799            for the Title method
800            (TestTransientTable.test_transient_joined_table)
801            (TestTransientTable.test_transient_table): Add test for the Title
802            methods
803    
804            * test/test_memory_table.py (TestMemoryTable.test_title): New.
805            Test for the Title method
806    
807            * test/test_dbf_table.py (TestDBFTable.test_title): New. Test for
808            the Title method
809    
810    2003-05-22  Bernhard Herzog  <[email protected]>
811    
812            * test/test_layer.py (TestLayer.setUp, TestLayer.tearDown):
813            Provide a better way to destroy the layers
814            (TestLayer.test_base_layer, TestLayer.test_arc_layer)
815            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
816            (TestLayer.test_polygon_layer, TestLayer.test_get_field_type): Use
817            the new way to destroy the layers.
818            (TestLayer.test_derived_store): New. Test for using a layer with a
819            DerivedShapeStore
820    
821            * Thuban/Model/layer.py (Layer.SetShapeStore): Only set the
822            filename if the shape store actually has one.
823    
824    2003-05-22  Bernhard Herzog  <[email protected]>
825    
826            * Thuban/Model/table.py (DBFTable.FileName): New. Accessor method
827            for the filename
828    
829            * test/test_dbf_table.py (TestDBFTable.test_filename): New. Test
830            for the FileName method
831            (TestDBFTableWriting.test_write): Fix spelling of filename
832    
833    2003-05-22  Thomas Koester  <[email protected]>
834    
835            * Thuban/Model/range.py, test/test_range.py: Brought over new Range
836            from SciParam that now really is immutable.
837    
838    2003-05-22  Frank Koormann  <[email protected]>
839    
840            Layer Top/Bottom placement added to legend.
841    
842            * Thuban/UI/legend.py
843            (LegendPanel._OnMoveTop(), LayerPanel._OnMoveBottom): New, methods
844            bound to tool events.
845            (LegendTree.MoveCurrentItemTop(), LegendTree.MoveCurrentItemBottom):
846            New, methods binding the event methods with the map methods.
847    
848            * Thuban/Model/map.py (Map.TopLayer(), Map.BottomLayer()): New, place
849            layer at top/bottom of layer stack.
850    
851            * Resources/Bitmaps/top_layer.xpm: New button icon.
852    
853            * Resources/Bitmaps/bottom_layer.xpm: New button icon.
854    
855  2003-05-22  Bernhard Herzog  <[email protected]>  2003-05-22  Bernhard Herzog  <[email protected]>
856    
857          * Thuban/Model/session.py (Session.RemoveTable): New method to          * Thuban/Model/session.py (Session.RemoveTable): New method to

Legend:
Removed from v.988  
changed lines
  Added in v.1195

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26