/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Diff of /branches/greater-ms3/thuban/ChangeLog

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

revision 308 by bh, Fri Sep 6 10:01:27 2002 UTC revision 626 by jonathan, Wed Apr 9 10:08:27 2003 UTC
# Line 1  Line 1 
1    2003-04-09  Jonathan Coles   <[email protected]>
2    
3            * Thuban/Model/classification.py (Classification.__deepcopy__):
4            Need to copy over field and fieldType attributes.
5    
6            * Thuban/Model/table.py (Table.field_range): New. Retrive the
7            maximum and minimum values over the entire table for a given
8            field.
9            (Table.GetUniqueValues): New. Retrieve all the unique values
10            in the table for a given field.
11    
12            * Thuban/UI/classgen.py: Renamed GenRangePanel to GenUniformPanel.
13            (GenUniquePanel): New. Controls to allow the user to select
14            which unique field values they would like in the classification.
15            (CustomRampPanel): Code that was in ClassGenDialog that allows
16            the user to select the properties for a custom ramp.
17            (ClassGenerator.GenUniformDistribution): Was called GenerateRanges.
18    
19            * Thuban/UI/classifier.py: Removed a lot of debugging code.
20            (Classifier._SetClassification): Callback method so that the
21            class generator can set the classification in the grid.
22            (ClassGroupPropertiesCtrl): New. Encapsulates the drawing and
23            editing of a group properties class into a wxWindows control.
24    
25            * Thuban/UI/dock.py: It was decided that if the user closes
26            a dockable window the window should simply hide itself. That
27            way if the user wants to show the dock again it appears in the
28            same place as it was when it was closed.
29            (DockableWindow.Destroy): Call renamed method OnDockDestroy().
30            (DockableWindow._OnButtonClose): Hide the window instead of
31            destroying it.
32            (DockableWindow._OnClose): Hide the window instead of
33            destroying it.
34    
35            * Thuban/UI/legend.py (LegendTree): Use a private method to
36            consistently set the font and style of the text. Fixes RTbug #1786.
37    
38            * Thuban/UI/mainwindow.py: Import just the Classifier class.
39    
40    2003-04-07  Bernhard Herzog  <[email protected]>
41    
42            * Thuban/UI/mainwindow.py (main_menu): Move the toggle_legend item
43            to the map module
44    
45    2003-04-07  Bernhard Herzog  <[email protected]>
46    
47            * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
48            favor of ToggleSessionTree
49            (MainWindow.ToggleSessionTree): New method to toggle visibility of
50            the session tree.
51            (MainWindow.SessionTreeShown): New method to return whether the
52            session tree is currently shown.
53            (MainWindow.ToggleLegend): New method to toggle visibility of the
54            legend
55            (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
56            LegendShown
57            (MainWindow.LegendShown): New method to return whether the legend
58            is currently shown.
59            (_method_command): Add checked parameter so we can define check
60            menu items
61            (_has_tree_window_shown, _has_legend_shown): Use the appropriate
62            mainwindow methods.
63            (show_session_tree, show_legend commands): Removed.
64            (toggle_session_tree, toggle_legend commands): New commands to
65            toggle the visibility of the dialogs
66    
67    2003-04-07  Jonathan Coles   <[email protected]>
68    
69            * Thuban/UI/classgen.py: Fix Windows problem.
70    
71            * Thuban/UI/dock.py: Fix Windows problem.
72    
73            * Thuban/UI/mainwindow.py: Use False instead of false.
74            (MainWindow.ShowLegend): Remove unnecessary switch parameter.
75    
76    2003-04-07  Jonathan Coles   <[email protected]>
77    
78            Since we now say that the order of the groups in a classification
79            matters, it makes sense to be able to manipulate that order. Most
80            of the changes to Thuban/Model/classification.py are to that end.
81    
82            * Thuban/Model/classification.py (Classification.AppendGroup,
83            Classification.InsertGroup, Classification.ReplaceGroup,
84            Classification.RemoveGroup, Classification.GetGroup): Do as the
85            names imply.
86            (Classification.FindGroup): This was called GetGroup, but GetGroup
87            takes an index, while FindGroup takes a value.
88            (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
89            REFERENCE. Currently there is a cyclic reference between the layer
90            and its classification. If the classification doesn't need to know
91            its owning layer we can change this, since it may make sense to be
92            able to use the same classification with different layers.
93    
94            * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
95    
96            * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
97            not AddGroup()
98    
99            * Thuban/UI/classifier.py: Now that we can depend on the order in
100            a Classification and have methods to manipulate that order we don't
101            need to use our own data structures in the grid. We can simply make
102            the grid/table access the information they need from a copy of
103            the classification object.
104            (Classifier._OnCloseBtn): Event handler for when the user clicks
105            'Close'. This is needed so if the user applies changes and then
106            continues to change the table the user has the option of discarding
107            the most recent changes and keeping what they applied.
108    
109            * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
110            into the same group.
111    
112            * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
113            with a really old version of proj, PJ_VERSION won't even be defined.
114            If it isn't defined then just compile so that the function always
115            returns Py_False.
116    
117            * test/test_classification.py: Fix tests to use the renamed methods.
118            Still need to write tests for the new methods.
119    
120    2003-04-04  Jonathan Coles   <[email protected]>
121    
122            * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
123            call to SetSelection out of the method and before the call
124            to __SelectField in __init__. This prevents a recursion of events
125            when _OnFieldSelect is triggered by the user.
126    
127    2003-04-04  Jonathan Coles   <[email protected]>
128    
129            * Thuban/Model/classification.py: Rename Color.None to
130            Color.Transparent.
131            (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
132            Don't bother copying the color, since Colors are immutable.
133    
134            * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
135            Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
136            Thuban/UI/renderer.py, Thuban/UI/view.py:
137            Rename Color.None to Color.Transparent.
138        
139            * test/test_classification.py, test/test_load.py: Rename Color.None
140            to Color.Transparent.
141    
142    2003-04-04  Jonathan Coles   <[email protected]>
143    
144            * Thuban/Model/classification.py: Fix assert calls.
145            (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
146            Copy the color parameter rather than hold onto a reference.
147    
148            * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
149            the color object.
150            (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
151            are sure there exists only one refernce to Color.None in the system.
152            This allows us to use 'is' rather than the comparision functions.
153            
154            * Thuban/Model/save.py: Fix assert calls.
155            
156            * Thuban/UI/classifier.py: Fix assert calls.
157            (ClassGrid._OnCellDClick): Call up to the classifier to open the
158            dialog to edit the groups properties.
159            (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
160            correctly if a cell is resized.
161            (ClassTable.SetClassification): New. Changes the classification
162            that is in the table.
163            (ClassTable.__SetRow): Allow groups to be prepended.
164            (Classifier): New code for opening the EditProperties and
165            GenerateRanges dialogs.
166            (SelectPropertiesDialog.__GetColor): Only set the color in the
167            color dialog if the current color is not None.
168            
169            * Thuban/UI/dock.py: Fix assert calls.
170            
171            * Thuban/UI/legend.py: Fix assert calls.
172            
173            * Thuban/UI/renderer.py: Fix assert calls.
174            
175            * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
176            classifications.
177            (GenRangePanel): Panel specific to range generation.
178            (GenSingletonPanel): Panel specific to singleton generation.
179            (ClassGenerator): Class responsible for actually generating
180            the classification from the data gathered in the dialog box.
181            (PropertyRamp): Generates properties whose values range from
182            a starting property to an ending property.
183    
184    2003-04-03  Bernhard Herzog  <[email protected]>
185    
186            * test/support.py (print_garbage_information): New function that
187            prints information about still connected messages and memory
188            leaks.
189            (run_suite): Removed.
190            (run_tests): New function for use as a replacement of
191            unittest.main in the test_* files. This one calls
192            print_garbage_information at the end.
193    
194            * test/runtests.py (main): Use support.print_garbage_information
195    
196            * test/test_layer.py: Use support.run_tests instead of
197            unittest.main so we get memory leak information
198            (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
199            (TestLayer.test_point_layer, TestLayer.test_empty_layer)
200            (TestLayerLegend.test_visibility): Call the layer's Destroy method
201            to fix a memory leak.
202    
203            * test/test_classification.py: Use support.run_tests instead of
204            unittest.main so we get memory leak information
205            (TestClassification.test_classification): Call the layer's Destroy
206            method to fix a memory leak.
207    
208    2003-04-02  Bernhard Herzog  <[email protected]>
209    
210            * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
211            Handle the reference counts of the return value and errors in
212            PyArg_ParseTuple correctly.
213    
214            * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
215            sure the filename is absolute to avoid problems when saving the
216            session again
217    
218            * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
219    
220    2003-04-01  Jonathan Coles   <[email protected]>
221    
222            *  Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
223            that there actually are points in the returned list of points
224            before trying to index into the list. The list may be empty if
225            the shape is a Null Shape.
226    
227    2003-04-01  Bernhard Herzog  <[email protected]>
228    
229            * test/test_map.py: Don't use from <module> import *
230    
231    2003-04-01  Jonathan Coles   <[email protected]>
232    
233            * Thuban/Model/session.py: Use LAYER_CHANGED instead of
234            LAYER_LEGEND_CHANGED
235    
236            * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
237            self.Destroy() to close the window after yesterday's changes.
238    
239            * test/test_map.py, test/test_session.py: Fix messages that
240            are sent from maps and layers.
241    
242    2003-03-31  Jonathan Coles   <[email protected]>
243    
244            * Thuban/UI/classifier.py: Commented out some debugging statements.
245            (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
246            RTbug #1769.
247    
248            * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
249            position (although position doesn't work yet under GTK).
250            (DockableWindow.Destroy): New. Called when the window must be
251            closed. Namely needed when the DockFrame closes and must close
252            its children.
253            (DockFrame): Listen for EVT_CLOSE and destroy all children.
254    
255            * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
256            when then window is told to close.
257            (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
258            comment in source for more info.
259    
260            * Thuban/UI/main.py: Show the legend by default when Thuban starts.
261    
262            * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
263            symmetry with other such methods.
264            (MainWindow.ShowLegend): Show the legend docked by default.
265    
266    2003-03-28  Jonathan Coles   <[email protected]>
267    
268            * Thuban/UI/classifier.py: Support for highlighting a specific
269            group within the grid when the classification dialog is opened.
270            Also contains a lot of debugging printouts which will later
271            be removed.
272    
273            * Thuban/UI/dock.py: Complete rework on the dock code so that
274            that it is fairly removed from the rest of the Thuban application.
275            It is easy to add new docks which the rest of the program having
276            to be aware of them.
277    
278            * Thuban/UI/legend.py: Modifications to support selecting a
279            specific group in the classification dialog. Changed how layers
280            are drawn when the layer is visible/invisible.
281    
282            * Thuban/UI/mainwindow.py: Removed legend specific code and
283            replaced it with calls to the new dock code.
284    
285            * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
286            to check if scale > 0. Trying to track down a divide by zero.
287    
288    2003-03-26  Jonathan Coles   <[email protected]>
289    
290            * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
291            (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
292            now part of DockableWindow.
293            (LegendPanel.DoOnSelChanged): Select the current layer in the
294            map.
295            (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
296            with the selected layer and/or group.
297    
298    2003-03-26  Jonathan Coles   <[email protected]>
299    
300            This putback contains the code for dockable windows. There is
301            no support in wxWindows as of this date for windows that can
302            attach themselves to other windows.
303    
304            The current model contains a DockableWindow which has a parent
305            window for when it is detached and a dock window that it puts
306            its contents in when it is docked. The contents of a DockableWindow
307            must be a DockPanel. DockPanel itself derives from wxPanel.
308    
309            * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
310            message, not a LAYER_LEGEND_CHANGED message.
311    
312            * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
313    
314            * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
315            as one of the style properties for the fieldTypeText item to
316            be sure that its size is correct when the text changes.
317    
318            * Thuban/UI/dock.py: New. Classes for the DockPanel and
319            DockableWindow.
320    
321            * Thuban/UI/legend.py: Added some more buttons and made the
322            LegendPanel a DockPanel.
323    
324            * Thuban/UI/mainwindow.py: Added sash windows to the main window
325            and supporting functions for manipulating the sashes.
326            (MainWindow.ShowLegend): Create a DockableWindow with the
327            LegendPanel as the contents.
328    
329            * Thuban/UI/messages.py: Added DOCKABLE_* messages
330    
331            * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
332            not LAYER_LEGEND_CHANGED, messages.
333    
334    2003-03-25  Jonathan Coles   <[email protected]>
335    
336            * setup.py: Added custom script bdist_rpm_build_script so that
337            when the rpm is built the path to wx-config is correct.
338    
339            * setup.cfg: Added line saying to use the custom build script
340    
341    2003-03-20  Jonathan Coles   <[email protected]>
342    
343            Initial implementation of the Legend.
344    
345            * Thuban/UI/legend.py: New. Creates a window that shows the map's
346            Legend information and allows the user to add/modify classifications
347            and how the layers are drawn on the map.
348    
349            * setup.py: New command 'build_docs' which currently uses
350            happydoc to generate html documentation for Thuban.
351    
352            * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
353            Returns a string which is appropriately describes the group.
354    
355            * Thuban/Model/layer.py (Layer.SetClassification): Generate a
356            LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
357    
358            * Thuban/Model/map.py (Map): Rename messages and use new, more
359            specific, messages.
360    
361            * Thuban/Model/messages.py: New message to indicate that a layer's
362            data has changed (LAYER_CHANGED). New map messages to indicate
363            when layers have been added/removed/changed or if the stacking order
364            of the layers has changed.
365    
366            * Thuban/Model/session.py: Rename and use new messages.
367    
368            * Thuban/UI/classifier.py: Remember if any changes have actually
369            been applied so that if the dialog is cancelled without an application
370            of changes we don't have to set a new classification.
371            (ClassDataPreviewer): Pulled out the window specific code and put it
372            ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
373            symbols on any DC.
374            
375            * Thuban/UI/mainwindow.py: New code to open the legend.
376    
377            * Thuban/UI/view.py: Use new message names.
378    
379    2003-03-19  Jonathan Coles   <[email protected]>
380    
381            * Thuban/UI/main.py (verify_versions): New. Checks the versions
382            of Python, wxPython, and some other libraries.
383    
384            * extensions/thuban/wxproj.cpp (check_version): Checks the given
385            version against what wxproj was compiled with.
386            (check_version_gtk): If wxproj was compiled with gtk then check
387            the given version against the version of the gtk library
388            currently being used.
389    
390    2003-03-14  Bernhard Herzog  <[email protected]>
391    
392            * test/test_command.py: Run the tests when the module is run as a
393            script
394    
395    2003-03-14  Bernhard Herzog  <[email protected]>
396    
397            Implement selection of multiple selected shapes in the same layer:
398    
399            - Introduce a new class to hold the selection. This basically
400              replaces the interactor which was nothing more than the
401              selection anyway. A major difference is of course that the new
402              selection class supports multiple selected shapes in one layer
403            
404            - Move the object that represents the selection from the
405              application to the canvas. The canvas is a better place than the
406              application because the selection represents which shapes and
407              layer of the map displayed by the canvas are selected and
408              affects how the map is drawn.
409    
410            - Make the selection and its messages publicly available through
411              the mainwindow.
412    
413            - The non-modal dialogs do not get a reference to the interactor
414              anymore as they can simply refer to their parent, the
415              mainwindow, for the what the interactor had to offer.
416    
417            * Thuban/UI/selection.py: New module with a class to represent the
418            selection.
419    
420            * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
421            these unused messages
422    
423            * Thuban/UI/application.py (ThubanApplication.OnInit)
424            (ThubanApplication.OnExit, ThubanApplication.SetSession): The
425            interactor is gone now.
426            (ThubanApplication.CreateMainWindow): There is no interactor
427            anymore so we pass None as the interactor argument for now for
428            compatibility.
429    
430            * Thuban/UI/view.py (MapCanvas.delegated_messages)
431            (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
432            Unsubscribe, delegate messages according to the delegated_messages
433            class variable.
434            (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
435            attributes from instance variables as described with the
436            delegated_methods class variable.
437            (MapCanvas.__init__): New instance variable selection holding the
438            current selection
439            (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
440            pass them on to the renderer
441            (MapCanvas.SetMap): Clear the selection when a different map is
442            selected.
443            (MapCanvas.shape_selected): Simple force a complete redraw. The
444            selection class now takes care of only issueing SHAPES_SELECTED
445            messages when the set of selected shapes actually does change.
446            (MapCanvas.SelectShapeAt): The selection is now managed in
447            self.selection
448    
449            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
450            (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
451            Unsubscribe, delegate messages according to the delegated_messages
452            class variable.
453            (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
454            attributes from instance variables as described with the
455            delegated_methods class variable.
456            (MainWindow.__init__): The interactor as ivar is gone. The
457            parameter is still there for compatibility. The selection messages
458            now come from the canvas.
459            (MainWindow.current_layer, MainWindow.has_selected_layer):
460            Delegate to the the canvas.
461            (MainWindow.LayerShowTable, MainWindow.Classify)
462            (MainWindow.identify_view_on_demand): The dialogs don't need the
463            interactor parameter anymore.
464    
465            * Thuban/UI/tableview.py (TableFrame.__init__)
466            (LayerTableFrame.__init__, LayerTableFrame.OnClose)
467            (LayerTableFrame.row_selected): The interactor is gone. It's job
468            from the dialog's point of view is now done by the mainwindow,
469            i.e. the parent. Subscribe to SHAPES_SELECTED instead
470            of SELECTED_SHAPE
471            
472            * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
473            is gone. It's job from the dialog's point of view is now done by
474            the mainwindow, i.e. the parent.
475            
476            * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
477            gone. It's job from the dialog's point of view is now done by the
478            mainwindow, i.e. the parent.
479    
480            * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
481            gone. It's job from the dialog's point of view is now done by the
482            mainwindow, i.e. the parent.
483            (SessionTreeCtrl.__init__): New parameter mainwindow which is
484            stored as self.mainwindow. The mainwindow is need so that the tree
485            can still subscribe to the selection messages.
486            (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
487            (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
488            selection is now accessible through the mainwindow. Subscribe to
489            SHAPES_SELECTED instead of SELECTED_SHAPE
490    
491            * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
492            SHAPES_SELECTED message now.
493            (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
494            so deal with multiple shapes
495            (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
496            gone. It's job from the dialog's point of view is now done by the
497            mainwindow, i.e. the parent.
498    
499            * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
500            parameter is now a list of shape ids.
501            (RecordTable.SetTable): The second parameter is now a list of
502            indices.
503    
504            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
505            selected_shape parameter and ivar to selected_shapes. It's now a
506            list of shape ids.
507            (MapRenderer.draw_label_layer): Deal with multiple selected
508            shapes. Rearrange the code a bit so that the setup and shape type
509            distinctions are only executed once.
510    
511            * test/test_selection.py: Test cases for the selection class
512    
513    2003-03-11  Jonathan Coles   <[email protected]>
514    
515            * Thuban/Model/load.py: Temporary fix so that the xml reader
516            doesn't cause Thuban to crash.
517    
518            * Thuban/Model/layer.py: Handle the cyclic references between
519            a layer and its classification better, and be sure to disconnect
520            the classification from the layer when the layer is destroyed
521            so that we don't maintain a cyclic reference that may not be
522            garbage collected.
523    
524            * Thuban/Model/classification.py: See comment for layer.py.
525    
526    2003-03-12  Jan-Oliver Wagner <[email protected]>
527    
528            * HOWTO-Release: New. Information on the steps for releasing
529            a new version of Thuban.
530    
531    2003-03-11  Jonathan Coles   <[email protected]>
532    
533            * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
534            Use True instead of true.
535            (Classifier): Should have a single panel in which all the controls lie.
536    
537            * Thuban/UI/proj4dialog.py: Add normal border.
538    
539            * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
540    
541            * Thuban/UI/mainwindow.py: Use True instead of true.
542    
543            * setup.py: Update some definitions to use wxWindows2.4 files
544    
545            * Data/iceland_sample_class.thuban: Fixed file so that the
546            field_type information is present.
547    
548    2003-03-10  Jonathan Coles   <[email protected]>
549    
550            * Thuban/UI/classifier.py (Classifier.__init__): Make the
551            field type label grow so that when the text changes the
552            size is updated correctly. This may be a wxWindows bug.
553    
554    2003-03-10  Jonathan Coles   <[email protected]>
555    
556            * Thuban/UI/application.py: Changed SESSION_CHANGED to
557            SESSION_REPLACED.
558    
559            * Thuban/UI/classifier.py: Wrap text with _().
560            (ClassGrid.CreateTable): Set dimensions and size hints here,
561            instead of in Reset, so we only set the size once.
562    
563            * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
564    
565            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
566            Call Close() instead of Shutdown().
567    
568            * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
569    
570            * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
571            Go back to using OnClose() instead of Shutdown().
572    
573    2003-03-10  Jonathan Coles   <[email protected]>
574    
575            * Thuban/UI/classifier.py (Classifier): SelectField() needed
576            to know the old field index as well as the new one.
577    
578    2003-03-10  Jonathan Coles   <[email protected]>
579    
580            * Thuban/UI/classifier.py (Classifier): Use __SelectField()
581            to correctly set the table information and call this from
582            __init__ and from _OnFieldSelect so that all the information
583            is up to date when the dialog opens and when a field is changed.
584    
585    2003-03-10  Jonathan Coles   <[email protected]>
586    
587            * Thuban/Model/classification.py (Classification): Don't use
588            layer's message function directly, use the ClassChanged() method
589            when then classification changes. SetField/SetFieldType/SetLayer
590            must keep the information about field name and field type in
591            sync when an owning layer is set or removed.
592    
593            * Thuban/Model/layer.py: Added ClassChanged() so that the
594            classification can tell the layer when its data has changed.
595            (Layer.SetClassification): Accepts None as an arguement to
596            remove the current classification and correctly handles
597            adding a new classification.
598    
599            * Thuban/Model/load.py: Comment out print statement
600    
601            * test/test_classification.py, test/test_save.py: New and
602            improved tests.
603    
604    2003-03-07  Jonathan Coles   <[email protected]>
605    
606            * Thuban/Model/classification.py: Implemented __copy__ and
607            __deepcopy__ for ClassGroup* and ClassGroupProperites so
608            they can easily be copied by the classifier dialog.
609            (ClassGroupProperites.__init__): The default line color should
610            have been Color.Black.
611    
612            * Thuban/UI/classifier.py: Setting and Getting table values now
613            uses a consistent set of functions.
614            (Classifier): Now non-modal. Has field type label which changes
615            as the field changes. Keep track of buttons in a list so that
616            we can enable/disable the buttons when the None field is selected.
617            (SelectPropertiesDialog): Add buttons to make the colors transparent.
618    
619            * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
620            does what OnClose did, but can be called by the application to
621            close a window. Needed when a session changes, and we have to
622            close the classifier windows.
623    
624            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
625            Shuts down open dialogs. Used when a new session is created
626            or a session is opened.
627            (MainWindow.SaveSession): Should only call application.SaveSession()
628            if we don't call SaveSessionAs first.
629            (MainWindow.Classify): Allow different classifier dialogs for
630            different layers.
631    
632            * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
633            the parent class handle it. Add Shutdown() to unsubscibe from
634            event notification and call the parent Shutdown(). This was
635            necessary so the application can close the tree window.
636    
637    2003-03-06  Jonathan Coles   <[email protected]>
638    
639            * Thuban/Model/classification.py: Minor documentation changes,
640            Addition of __eq__ and __ne__ methods.
641            (Classification.SetLayer): prevent recursion between this method
642            and Layer.SetClassification().
643    
644            * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
645    
646            * Thuban/Model/layer.py (SetClassification): prevent recursion
647            between this method and Classification.SetLayer().
648    
649            * test/test_classification.py, test/test_load.py,
650            test/test_session.py: Fixed and added tests for the classification
651            classes.
652    
653    2003-03-06  Bernhard Herzog  <[email protected]>
654    
655            * Thuban/UI/classifier.py (ClassGrid.__init__)
656            (ClassGrid.CreateTable): Move the SetSelectionMode call to
657            CreateTable because otherwise it triggers an assertion in
658            wxPython/wxGTK 2.4.
659    
660    2003-03-05  Jonathan Coles   <[email protected]>
661    
662            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
663    
664            * Thuban/Model/load.py: import FIELDTYPE constants from table.
665    
666            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
667    
668            * Thuban/Model/table.py: Put FIELDTYPE constants back.
669    
670    2003-03-05  Jonathan Coles   <[email protected]>
671    
672            * Thuban/UI/classifier.py: Added class documentation.
673            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
674            Store just the groups in the table and generate the other
675            column information when it is requested. Add "None" field
676            to pull-down to select no classification.
677    
678            * Thuban/common.py: Moved FIELDTYPE constants from table.py
679            (Str2Num): Only catch ValueError exceptions.
680    
681            * Thuban/Model/classification.py: Class documentation. Renaming
682            of methods with Stroke to Line. Groups are stored in a single
683            list with the default as the first element. Groups are searched
684            in the order they appear in the list.
685    
686            * Thuban/Model/color.py: Documentation.
687    
688            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
689            the kind of data represented by a field.
690    
691            * Thuban/Model/load.py (ProcessSession): Use proper string
692            conversion function; fixes RTbug #1713.
693    
694            * Thuban/Model/save.py (Saver): Store field type information.
695    
696            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
697            (Table): Add field_info_by_name() to retrieve field information
698            by specifying the field name, not the number.
699    
700            * Thuban/UI/mainwindow.py: Function name changes.
701    
702            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
703            get the layer classification once. Don't try to classify
704            values when the field is None: just use the default properties.
705    
706            * Thuban/UI/view.py: Function name changes.
707    
708            * Doc/thuban.dtd: Add field_type attribute to a classification.
709    
710    2003-03-04  Bernhard Herzog  <[email protected]>
711    
712            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
713            the fill and stroke layer attributes optional with suitable
714            default values. Add the stroke_width layer attribute. Use correct
715            syntax for empty elements. Make the attribute list for labels
716            refer to the label element.
717    
718    2003-03-04  Bernhard Herzog  <[email protected]>
719    
720            * setup.py (thuban_build_py.build): Add a comment about distutils in
721            Python 2.3 containing some of the functionality we implement in
722            setup.py ourselves.
723    
724            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
725            before the selection mode. Doing it the other way round triggers
726            an assertion in wxWindows.
727    
728            * Thuban/Model/save.py (escape): Fix typo in doc-string
729    
730            * Thuban/Model/classification.py: Remove unnecessary wxPython
731            import
732    
733    2003-03-04  Jonathan Coles   <[email protected]>
734    
735            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
736            Parameter 'value' should default to None.
737    
738            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
739            the class attribute __classification is now private.
740    
741            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
742            Classifier to ClassGrid. Added support for removing selected rows,
743            which including code for keeping track of when cells are selected,
744            and deselected.
745            (ClassTable): Support for added/removing rows. Fixed a problem
746            with __ParseInput whereby it would not allow strings (only numbers)
747            to be entered.
748            (Classifier): Added button and supporting code for removing
749            selected rows.
750    
751    2003-02-27  Jonathan Coles   <[email protected]>
752    
753            * Thuban/common.py: Moved color conversion functions into
754            Thuban/UI/common.py.
755            (Str2Num): Now converts the float (not the string) to a long/int
756            so that an exception isn't thrown.
757    
758            * Thuban/UI/common.py: Common functions used in several UI modules
759    
760            * Thuban/Model/classification.py: Changed the class hierarchy
761            so that a Classification consists of Groups which return
762            Properties when a value matches a Group.
763    
764            * Thuban/Model/layer.py: Fixed name resolution problem.
765    
766            * Thuban/Model/load.py: Use new Classification and Group functions.
767    
768            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
769            failure.
770            (Saver.write_classification): Use new Classification and Group
771            functions.
772    
773            * Thuban/UI/classifier.py: Changes to use new Classification and Group
774            functions. Fix to create a tuple with a single value instead of
775            simply returning the value.
776    
777            * Thuban/UI/renderer.py: Use new Classification and Group functions.
778            Use common.py functions.
779    
780            * Thuban/UI/tree.py: Use common.py functions.
781            
782            * test/test_classification.py: Use new Classification and Group
783            classes.
784    
785    2003-02-24  Jonathan Coles   <[email protected]>
786    
787            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
788            functions from Thuban color objects to wxWindow colour objects.
789    
790            * Thuban/Model/classification.py (Classification): Renamed
791            GetProperties() to GetClassData(). Used the new iterator
792            in TreeInfo().
793            (ClassIterator): Iterator implementation to iterate over the
794            ClassData objects in a classification object.
795    
796            * Thuban/Model/save.py (Saver.write_classificaton): Uses
797            the new iterator to save the classification information.
798    
799            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
800            for changing the stroke and fill colors and previewing the
801            changes.
802    
803            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
804            MainWindow.SaveSessionAs): Text string changes so the dialogs
805            have more meaningful titles.
806    
807            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
808            Classification method name from GetProperties to GetClassData.
809    
810            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
811            instead of accessing now non-existent class variables.
812    
813    2003-02-24  Bernhard Herzog  <[email protected]>
814    
815            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
816            unneeded Shape() call. Rendering is substantially faster without
817            it and it avoids some problems with broken shape files.
818    
819    2003-02-20  Frank Koormann   <[email protected]>
820    
821            Force minimal size of identify and label dialogs. The autosizing
822            looked too ugly.
823    
824            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
825            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
826            Set size of listctrl.
827            * Thuban/UI/identifyview.py (IdentifyView.__init__):
828            Set size of dialog.
829    
830    2003-02-19  Jonathan Coles   <[email protected]>
831    
832            * test/test_classification.py, test/test_layer.py,
833            test/test_load.py, test/test_map.py, test/test_session.py:
834            Updated the tests to use the new functions that are in the
835            respective classes.
836    
837            * Thuban/Model/classification.py (Classification):
838            Uses the new ClassData* classes. Modification messages are
839            passed up to the parent layer (if it exists).
840            (ClassData): New class to encapsulate the common data in each
841            classification property.
842            (ClassDataDefault): Represents the Default class. data.
843            (ClassDataPoint): Represents a single class. data point
844            (ClassDataRange): Represents a class. range
845            (ClassDataMap): Represents a class. map (unused).
846    
847            * Thuban/Model/color.py: Added Color.None to represent something
848            with no color. Color.Black represents the color black.
849            (NoColor): Helper class derived from Color to represent something
850            with no color.
851    
852            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
853            stroke_width attributes. Made the 'classification' attribute private.
854            New methods for setting/getting the classification.
855    
856            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
857            to get the classifcation and use the new ClassData* classes to
858            hold the classification data. Use Str2Num to convert numbers
859            properly.
860    
861            * Thuban/Model/save.py (Saver): Use new Color and Classification
862            methods
863    
864            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
865            custom grid.
866            (ClassTable): Support for editing Values and Labels and for
867            changing what type (point or range) of data is stored in each
868            property based on how the user enters the data.
869            (Classifier): Support for saving the new classifications and
870            launching the dialog to edit a property.
871            (SelectPropertiesDialog): New class for editing the visual
872            properties of a classification (stroke color, width, and fill color)
873            (ClassPreviewer): Took the Draw method from ClassRenderer and
874            made most of it into this new class. Intend to use this class in
875            the SelectPropertiesDialog for previewing changes.
876    
877            * Thuban/UI/renderer.py: Use new Color and Classification methods.
878    
879            * Thuban/UI/tree.py: Formatting changes.
880    
881            * Doc/thuban.dtd: Add 'label' element
882    
883            * Thuban/common.py: New. Contains common routines used throughout
884            the code.
885            (Str2Num): Takes a string and converts it to the "best" type of
886            number.
887    
888    2003-02-14  Bernhard Herzog  <[email protected]>
889    
890            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
891            dragging flag is always set to 0 even when the tool implementation
892            raises an exception
893    
894    2003-02-11  Bernhard Herzog  <[email protected]>
895    
896            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
897            method to create a splash screen.
898            (ThubanApplication.ShowMainWindow): New. Show the main window.
899            Needed so the splash screen can display the mainwindow
900            (ThubanApplication.OnInit): Call the
901            new splash_screen method to determine whether the application
902            should display a splash screen. If it displays a splash screen do
903            not immediately show the main window.
904    
905    2003-02-11  Jonathan Coles  <[email protected]>
906    
907            * Thuban/Model/classification.py: Added import line to fix
908            feature conflicts between running on python2.2 and python2.1.
909    
910            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
911            onto the clinfo parameter, so removed the deepcopy().
912    
913    2003-02-10  Jonathan Coles  <[email protected]>
914    
915            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
916            Added element_open variable to track opening and closing of tags
917            so that tags that don't span more than one line are closed with
918            /> instead of </tag_name>. Use the GetDefault*() methods of
919            the Classification class.
920    
921            * Thuban/Model/classification.py (Classificaton): Added set and
922            get methods for the default data. The class also takes a layer
923            reference so that modification messages can be sent. Fixed the
924            methods to use the new ClassData class.
925            (ClassData): New class to encapsulate the classification data
926    
927            * Thuban/Model/layer.py (Layer): Remove the
928            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
929            SetDefault*() methods on the layer's classification object.
930            (Layer.__init__): Use the new SetDefault*() methods in the
931            Classification class.
932    
933            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
934            object instead of a dictionary.
935    
936            * Thuban/UI/classifier.py (ClassRenderer): New class to
937            draw the classifications in the dialog box's table.
938            (Classifier): Modified to use the ClassRenderer class.
939    
940            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
941            methods of the Classification class.
942    
943            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
944            of the ClassData class.
945    
946            * test/test_classification.py, test/test_layer.py,
947            test/test_map.py, test/test_session.py: Fix the tests to work
948            with the above code changes.
949    
950    2003-02-03  Jonathan Coles  <[email protected]>
951    
952            * Thuban/Model/classification.py (Classification): Added getNull()
953            to return the NullData reference
954    
955            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
956            Layer.SetStrokeWidth): Modified these functions to change the
957            null data in the classification rather than keep these values
958            directly in the Layer class. Menu options to change these values
959            work again.
960    
961    2003-01-28  Jonathan Coles  <[email protected]>
962    
963            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
964            Fixed crashing problem on some systems. Dialog box shows
965            classification data.
966    
967            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
968            Colors in the tree view.
969    
970            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
971            the tree info for classifications. Commented out unnecessary lines.
972    
973            * Thuban/Model/classification.py (Classification.TreeInfo): New
974            function to add information about the classification into the
975            tree view.
976    
977    2003-01-27  Jan-Oliver Wagner <[email protected]>
978    
979            * Thuban/__init__.py (_): New.
980    
981            * Thuban/Model/classification.py, Thuban/Model/extension.py,
982            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
983            Thuban/Model/session.py, Thuban/UI/application.py,
984            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
985            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
986            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
987            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
988            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
989    
990    2003-01-27  Jonathan Coles  <[email protected]>
991    
992            * Thuban/Model/layer.py: Classification initialization calls.
993    
994            * Thuban/Model/classification.py: Created class to encapsulate
995            a layer classification. Supports specific data points and
996            ranges.
997    
998            * Thuban/Model/load.py: Added support for loading classification
999            information.
1000    
1001            * Thuban/Model/save.py: Added support for saving classification
1002            information.
1003    
1004            * Thuban/UI/classifier.py: Initial class for a dialog box for
1005            specifying classification information.
1006    
1007            * Thuban/UI/mainwindows.py: Support for opening the classifier
1008            dialog.
1009    
1010            * Thuban/UI/renderer.py: Support for drawing a layer with the
1011            classification information.
1012    
1013            * Data/iceland_sample_class.thuban: iceland_sample with
1014            classification data.
1015    
1016            * test/test_classification: Tests for the Classification class.
1017    
1018    2002-12-09  Bernhard Herzog  <[email protected]>
1019    
1020            * test/test_command.py: New. Tests for the command classes.
1021    
1022            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
1023            (Command.IsTool): New method to distinguish between command
1024            switching tools and other commands.
1025    
1026            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
1027            the tool to avoid direct assignments to instance variables
1028            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
1029            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
1030            change the tool
1031    
1032            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
1033            active tool's command turns insensitive, disable the tool.
1034            (_tool_command): Use the new ToolCommand class
1035    
1036            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
1037            SelectTool method to change the tool
1038            (iconfile): Use the ToolCommand class
1039    
1040    2002-12-03  Bernhard Herzog  <[email protected]>
1041    
1042            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
1043            the case of selected items that are not children of Layers or Maps
1044            properly. Previously this bug would trigger an assertion in
1045            wxWindows.
1046    
1047    2002-11-06  Frank Koormann  <[email protected]>
1048    
1049            * Thuban/UI/mainwindow.py: Altered the order of tools in the
1050            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1051            Full Extent).
1052    
1053    2002-10-23  Bernhard Herzog  <[email protected]>
1054    
1055            * setup.py (setup call): version now 0.1.3
1056    
1057            * MANIFEST.in: Add the files in test/
1058    
1059            * test/README: Add note about tests requiring the iceland data
1060    
1061            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1062            copyright notice.
1063    
1064    2002-10-18  Bernhard Herzog  <[email protected]>
1065    
1066            * test/test_map.py
1067            (TestMapWithContents.test_projected_bounding_box): Use an explicit
1068            epsilon.
1069    
1070            * test/support.py (FloatComparisonMixin.assertFloatEqual)
1071            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1072            message if the assertion fails and don't return the return value
1073            of self.assert_. In assertFloatSeqEqual the return meant that not
1074            all items of the sequence were compared.
1075    
1076    2002-09-20  Bernhard Herzog  <[email protected]>
1077    
1078            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1079    
1080            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1081    
1082            * test/test_map.py (TestMapWithContents.test_tree_info): Create
1083            the string with the bounding box on the fly because of platform
1084            differences in the way %g is handled.
1085    
1086            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1087            DBFfile too because Thuban layers can't yet cope missing DBF
1088            files.
1089    
1090    2002-09-20  Bernhard Herzog  <[email protected]>
1091    
1092            * test/test_menu.py: Use initthuban instead of
1093            add_thuban_dir_to_path to initialize Thuban.
1094    
1095            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1096            Mixin class for float comparisons
1097            (SubscriberMixin): New. Mixin class to test messages sent through
1098            the Connector class
1099    
1100            * test/README: Fix a typo and add the -v flag to the command for
1101            individual tests
1102    
1103            * test/test_session.py: New. Test cases for Thuban.Model.session
1104    
1105            * test/test_proj.py: New. Test cases for Thuban.Model.proj
1106    
1107            * test/test_map.py: New. Test cases for Thuban.Model.map
1108    
1109            * test/test_layer.py: New. Test cases for Thuban.Model.layer
1110    
1111            * test/test_label.py: New. Test cases for Thuban.Model.label
1112    
1113            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1114    
1115            * test/test_color.py: New. Test cases for Thuban.Model.color
1116    
1117            * test/test_base.py: New. Test cases for Thuban.Model.base
1118    
1119    2002-09-13  Bernhard Herzog  <[email protected]>
1120    
1121            * Thuban/Model/session.py (Session.forwarded_channels): Forward
1122            the CHANGED channel too.
1123    
1124            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1125            CHANGED channel too.
1126            (Map.__init__): Call the Modifiable constructor as well.
1127    
1128            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1129            event if the modified flag changes.
1130            (Modifiable.changed): Tweak the doc-string.
1131    
1132            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1133            (MainWindow.set_position_text): Put the code that puts the text
1134            with the mouse position into the status bar into the new method
1135            set_position_text so that it can overwritten in derived classes.
1136    
1137    2002-09-12  Bernhard Herzog  <[email protected]>
1138    
1139            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1140            message box on the main window.
1141    
1142    2002-09-11  Bernhard Herzog  <[email protected]>
1143    
1144            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1145            the 'E' because it's less likely to interfere with other menu
1146            entries.
1147            (MainWindow.build_menu): remove an incorrect comment.
1148    
1149    2002-09-10  Bernhard Herzog  <[email protected]>
1150    
1151            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1152            (_tool_command): Add sensitive parameter
1153            (_has_visible_map): Sensitivity callback to tools and other
1154            commands that require a visible map. Use it in map_zoom_in_tool,
1155            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1156            and map_full_extent
1157    
1158  2002-09-06  Bernhard Herzog  <[email protected]>  2002-09-06  Bernhard Herzog  <[email protected]>
1159    
1160          * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe          * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1161          VIEW_POSITION          VIEW_POSITION
1162    
1163  2002-09-04  Frank Koormann   <[email protected]>  2002-09-04  Frank Koormann  <[email protected]>
1164    
1165          * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")          * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1166    
# Line 90  Line 1247 
1247    
1248          * Thuban/Model/table.py (Table.write_record): New method to write          * Thuban/Model/table.py (Table.write_record): New method to write
1249          records.          records.
1250          (Table.__init__): Open the DBF file for writing too.          (Table.__init__): Open the DBF file for writing too.
1251    
1252          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1253          into the underlying table.          into the underlying table.
# Line 128  Line 1285 
1285          * setup.py (ThubanInstall.run): Don't repr install_lib_orig          * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1286          because thubaninit_contents will do it for us.          because thubaninit_contents will do it for us.
1287    
1288  2002-08-16      Jan-Oliver Wagner <[email protected]>  2002-08-16  Jan-Oliver Wagner <[email protected]>
1289    
1290          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1291          tree window already open          tree window already open
# Line 256  Line 1413 
1413          * Thuban/UI/tree.py: We can now simply subscribe to the session's          * Thuban/UI/tree.py: We can now simply subscribe to the session's
1414          CHANGED channel to be informed of changes.          CHANGED channel to be informed of changes.
1415          (SessionTreeCtrl.session_channels): Not needed any longer.          (SessionTreeCtrl.session_channels): Not needed any longer.
1416          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1417          Only have to (un)subscribe CHANGED          Only have to (un)subscribe CHANGED
1418    
1419          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
# Line 317  Line 1474 
1474          * Thuban/Model/layer.py (Layer.TreeInfo),          * Thuban/Model/layer.py (Layer.TreeInfo),
1475          Thuban/Model/extension.py (Extension.TreeInfo),          Thuban/Model/extension.py (Extension.TreeInfo),
1476          Thuban/Model/map.py (Map.TreeInfo),          Thuban/Model/map.py (Map.TreeInfo),
1477          Thuban/Model/session.py (Session.TreeInfo):          Thuban/Model/session.py (Session.TreeInfo):
1478          Add TreeInfo methods to implement the new tree view update scheme          Add TreeInfo methods to implement the new tree view update scheme
1479    
1480  2002-07-16  Bernhard Herzog  <[email protected]>  2002-07-16  Bernhard Herzog  <[email protected]>
# Line 398  Line 1555 
1555          * setup.py: In the setup call, make sure that the library          * setup.py: In the setup call, make sure that the library
1556          directories are under $prefix/lib not directly under $prefix.          directories are under $prefix/lib not directly under $prefix.
1557    
1558  2002-06-20      Jan-Oliver Wagner <[email protected]>  2002-06-20  Jan-Oliver Wagner <[email protected]>
1559    
1560          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
1561          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 627  Line 1784 
1784          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1785          position in the statusbar          position in the statusbar
1786    
1787  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1788    
1789          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1790    
1791  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1792            
1793          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1794    
1795          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1796    
1797          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
1798    
1799            * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1800            box
1801    
1802  2002-04-21      Jan-Oliver Wagner <[email protected]>  2002-04-21  Jan-Oliver Wagner <[email protected]>
1803    
1804          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1805    
1806          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1807    
1808          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1809          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1810    
1811  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1812    
1813          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1814          saving _new_ sessions          saving _new_ sessions
# Line 752  Line 1910 
1910    
1911          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1912          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1913    
1914  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1915    
1916          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1917          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1918    
1919          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1920          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1921          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1922          too.          too.
# Line 869  Line 2026 
2026          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
2027          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
2028    
2029          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
2030          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
2031          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
2032          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
2033          the application's OnInit method          the application's OnInit method
# Line 886  Line 2043 
2043          layer to the tableview dialog.          layer to the tableview dialog.
2044    
2045          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
2046          (TableGrid):          (TableGrid):
2047          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
2048          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
2049          (TableFrame.__init__):          (TableFrame.__init__):
# Line 953  Line 2110 
2110  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
2111    
2112          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2113            
2114          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2115          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
2116            
2117          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2118          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
2119          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 1003  Line 2160 
2160          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
2161          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
2162          link_file method          link_file method
2163            
2164          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2165          the window when the first layer is added to the map.          the window when the first layer is added to the map.
2166    
# Line 1040  Line 2197 
2197          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
2198          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2199          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
2200            
2201          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
2202          installer          installer
2203    

Legend:
Removed from v.308  
changed lines
  Added in v.626

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26