/[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 154 by bh, Tue May 7 17:18:45 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]>
1159    
1160            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1161            VIEW_POSITION
1162    
1163    2002-09-04  Frank Koormann  <[email protected]>
1164    
1165            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1166    
1167    2002-09-02  Bernhard Herzog  <[email protected]>
1168    
1169            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1170            wxWindows already and our implementation doesn't work correctly
1171            with wxGTK 2.3:
1172            (MapCanvas.__init__): Remove the instance variable
1173            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1174            be drawin
1175            (MapCanvas.OnIdle): Removed.
1176    
1177            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1178            a parameter to determine the size of the rectangle.
1179            (MapCanvas.find_shape_at): Create the box around the point on a
1180            layer by layer basis and make the size depend on the shape type.
1181            This solves a problem with the selection of point shapes at the
1182            border of the layer's bounding box
1183    
1184    2002-08-30  Bernhard Herzog  <[email protected]>
1185    
1186            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1187            for the sensitivity  of remove layer.
1188            (_can_remove_layer): New. Sensitivity callback for remove layer
1189            (Command layer_remove): Use _can_remove_layer
1190    
1191            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1192            determine whether a given layer can be deleted.
1193    
1194            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1195            (MapCanvas.do_redraw): Get rid of the unused update_region
1196            instance variable
1197    
1198            * Thuban/UI/view.py: Add/update some doc-strings.
1199    
1200            * test/: new subdirectory with a bunch of unit tests.
1201    
1202            * test/README, test/test_table.py, test/test_save.py,
1203            test/test_menu.py, test/test_load.py: Initial set of tests and
1204            brief instructions on how to run them
1205    
1206    2002-08-29  Bernhard Herzog  <[email protected]>
1207    
1208            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1209            arcs with multiple parts.
1210    
1211            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1212            Handle degenrate rectangles.
1213    
1214            * Thuban/Model/table.py: Make writing records work correctly:
1215            (Table.__init__): Keep track of whether the DBF is open for
1216            writing
1217            (Table.write_record): Open the DBF file for writing when necessary
1218    
1219    2002-08-27  Bernhard Herzog  <[email protected]>
1220    
1221            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1222            dbf files only for reading by default. Use a new writable dbf
1223            object for writing.
1224    
1225    2002-08-26  Bernhard Herzog  <[email protected]>
1226    
1227            * Thuban/UI/mainwindow.py: Refactor the context creation:
1228            (MainWindow.Context): New method to return a context
1229            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1230            new method
1231    
1232            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1233            layer table specific code from TableGrid into LayerTableGrid
1234            (TableFrame, LayerTableFrame): Split the layer table specific code
1235            from TableFrame into LayerTableFrame
1236            (LayerTableGrid.select_shape): Remove a debug print
1237    
1238            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1239            LayerTableFrame
1240    
1241    2002-08-23  Bernhard Herzog  <[email protected]>
1242    
1243            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1244            absolute filename.
1245    
1246    2002-08-22  Bernhard Herzog  <[email protected]>
1247    
1248            * Thuban/Model/table.py (Table.write_record): New method to write
1249            records.
1250            (Table.__init__): Open the DBF file for writing too.
1251    
1252            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1253            into the underlying table.
1254    
1255            * extensions/shapelib/shapefil.h (DBFCommit),
1256            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1257            commit any changes made to the DBF file.
1258    
1259            * Thuban/UI/mainwindow.py (make_check_current_tool)
1260            (_tool_command): Put the code that generates the "checked"
1261            callback into a separate function so that we can reuse it
1262            elsewhere
1263    
1264            * Thuban/Model/save.py (Saver): New class to handle serializing a
1265            session into an XML file. The main reason to introduce a class is
1266            that applications built on Thuban can derive from it so that they
1267            can save additional information in a session file.
1268            (save_session): Delegate almost all the work to the Saver class.
1269            Rename the filename argument to file because it may be a file like
1270            object now.
1271    
1272            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1273            code. Remove the little test code which would be executed when the
1274            module is run as a script which didn't work anymore since it can't
1275            import the other Thuban modules.
1276            (ProcessSession, load_session): Refactor the ProcessSession to
1277            have one method for each element start and end tag so that derived
1278            classes can easily override the processing of individual tags.
1279            Also, always parse with namespaces enabled because applications
1280            built on top of Thuban will likely use namespaces if they extend
1281            the session file format.
1282    
1283    2002-08-21  Bernhard Herzog  <[email protected]>
1284    
1285            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1286            because thubaninit_contents will do it for us.
1287    
1288    2002-08-16  Jan-Oliver Wagner <[email protected]>
1289    
1290            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1291            tree window already open
1292    
1293    2002-08-15  Bernhard Herzog  <[email protected]>
1294    
1295            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1296            with self.
1297    
1298            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1299            when we have actually captured it.
1300    
1301            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1302            shapefile and destroy the table.
1303    
1304            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1305    
1306    2002-08-14  Bernhard Herzog  <[email protected]>
1307    
1308            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1309            instance variable columns
1310            (RecordTable.GetTypeName): row and col may be negative in some
1311            cases.
1312    
1313            * setup.py (InstallLocal.initialize_options)
1314            (InstallLocal.finalize_options, InstallLocal.user_options): New
1315            option create-init-file to build a thubaninit.py when running
1316            install_local
1317            (InstallLocal.run): Create the thubaninit.py module when requested
1318            (thubaninit_contents): Split the template into several parts and
1319            create a new function thubaninit_contents that creates the
1320            contents of a thubaninit module.
1321            (ThubanInstall.run): Use the new function to create the thubaninit
1322            module.
1323    
1324    2002-07-30  Bernhard Herzog  <[email protected]>
1325    
1326            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1327            cleanup.
1328            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1329    
1330            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1331            direct base class' Destroy method.
1332    
1333            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1334            layers.
1335            (Map.Destroy): Destroy the label_layer as well and call the
1336            inherited Desatroymethod first so that no more messages are
1337            issued.
1338            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1339            message if the stacking order actually has changed. Add
1340            doc-strings.
1341            (Map.BoundingBox): Correct the doc-string.
1342            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1343            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1344    
1345            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1346            all labels.
1347    
1348    2002-07-29  Bernhard Herzog  <[email protected]>
1349    
1350            * Thuban/Model/map.py (Map.subscribe_layer_channels)
1351            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1352            to a layer's channels into separate methods.
1353            (Map.RemoveLayer, Map.AddLayer): Call the new methods
1354            (Map.Destroy): Unsubscribe from a layer's channels before
1355            destroying it.
1356    
1357            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1358            selected_layer parameter to searched_layer which is the layer to
1359            search in.
1360            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1361            search to that layer. Return the selected layer and shape.
1362    
1363            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1364            typo
1365    
1366    2002-07-24  Bernhard Herzog  <[email protected]>
1367    
1368            * Thuban/UI/application.py (ThubanApplication.create_session):
1369            Extend the doc string.
1370            (ThubanApplication.subscribe_session)
1371            (ThubanApplication.unsubscribe_session): New methods to
1372            subscribe/unsubscribe to/from session channels.
1373            (ThubanApplication.SetSession): Call the new methods here.
1374            (ThubanApplication.maps_changed, ThubanApplication.set_map):
1375            Renamed set_map to maps_changed. Its now a subscriber for
1376            MAPS_CHANGED.
1377    
1378            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1379            x-coordinate in case of simple clicks
1380    
1381            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1382            don't pass it as a parameter
1383    
1384            * Thuban/Model/session.py (Session.RemoveMap): New
1385    
1386            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1387            window size into a parameter.
1388    
1389    2002-07-23  Bernhard Herzog  <[email protected]>
1390    
1391            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1392            just commands.
1393    
1394            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1395            parameter list a bit to allow setting the window title and the
1396            initial message in the status bar. Update the callers.
1397    
1398            * Thuban/UI/application.py (ThubanApplication.OnInit)
1399            (ThubanApplication.CreateMainWindow): Put the mainwindow
1400            instantiation into a separate method so that it can be overridden
1401            by a subclass.
1402    
1403    2002-07-19  Bernhard Herzog  <[email protected]>
1404    
1405            * Thuban/Model/session.py: Issue a CHANGED message every time
1406            another changed message is issued to make it easier to get
1407            notified of changes.
1408            (Session): Update the doc string
1409            (Session.forward): Issue changed-events as CHANGED as well.
1410            (Session.changed): Overwrite the inherited version to issue
1411            CHANGED events as well.
1412    
1413            * Thuban/UI/tree.py: We can now simply subscribe to the session's
1414            CHANGED channel to be informed of changes.
1415            (SessionTreeCtrl.session_channels): Not needed any longer.
1416            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1417            Only have to (un)subscribe CHANGED
1418    
1419            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1420    
1421            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1422            for the wxPython locale bug to __init__.py so that it's
1423            automatically executed by anybody using UI code from Thuban.
1424    
1425    2002-07-18  Bernhard Herzog  <[email protected]>
1426    
1427            * Thuban/UI/main.py (main): app no longer needs to be global
1428    
1429            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1430            as parameter and store it in an instance variable
1431            (MainWindow.invoke_command, MainWindow.update_command_ui)
1432            (MainWindow.save_modified_session, MainWindow.NewSession)
1433            (MainWindow.OpenSession, MainWindow.SaveSession)
1434            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1435            application object.
1436    
1437            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1438            the main window with self.
1439    
1440            * Thuban/UI/context.py: New module with the context class
1441    
1442            * Thuban/UI/command.py (Command): Update doc string.
1443    
1444            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1445            MainWindow.update_command_ui): Pass an instance of the context
1446            class to the command's methods
1447            (check_current_tool, call_method): Handle the new context
1448            implementation
1449    
1450            * Examples/simple_extensions/simple_tool.py (simple_tool,
1451            check_simple_tool): Handle the new context implementation
1452    
1453            * Examples/simple_extensions/simple_command.py (simple_command):
1454            Handle the new context implementation. Update the comments about
1455            the context.
1456    
1457            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1458            doc-string
1459            (ThubanApplication.Session): New method to return the session
1460            object
1461    
1462            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1463            interactor's selected_layer may not be a layer of the current
1464            session when the tree is updated while a new session is being set.
1465    
1466    2002-07-17  Bernhard Herzog  <[email protected]>
1467    
1468            * Thuban/UI/tree.py (color_string): Removed. No longer used.
1469            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1470            update_tree into update_tree and add_items. The tree now uses a
1471            more generic way to display the contents of the tree.
1472            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1473    
1474            * Thuban/Model/layer.py (Layer.TreeInfo),
1475            Thuban/Model/extension.py (Extension.TreeInfo),
1476            Thuban/Model/map.py (Map.TreeInfo),
1477            Thuban/Model/session.py (Session.TreeInfo):
1478            Add TreeInfo methods to implement the new tree view update scheme
1479    
1480    2002-07-16  Bernhard Herzog  <[email protected]>
1481    
1482            * Thuban/UI/application.py: Don't use "import from" for the
1483            MainWindow. It can't always be resolved.
1484            (ThubanApplication.OnInit): change reference to MainWindow
1485            accordingly.
1486    
1487            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1488            completely
1489    
1490    2002-07-10  Bernhard Herzog  <[email protected]>
1491    
1492            * setup.py (create_init_module): New configurable variable whose
1493            default depends on the platform we're running on.
1494            (ThubanInstall.initialize_options): Initialize
1495            self.create_init_module from the global create_init_module
1496            (ThubanInstall.user_options): indictate that the options
1497            create-init-module and init-module-dir have arguments.
1498    
1499            * setup.py: In the setup call change the version number to include
1500            cvs.
1501    
1502            * MANIFEST.in: Add the files in Examples
1503    
1504    2002-07-09  Bernhard Herzog  <[email protected]>
1505    
1506            * setup.py: In the setup call, use the thuban homepage as the
1507            value of the url parameter.
1508    
1509            * Examples: New subdirectory for examples.
1510    
1511            * Examples/simple_extensions/simple_tool.xpm,
1512            Examples/simple_extensions/simple_tool.py,
1513            Examples/simple_extensions/simple_command.py,
1514            Examples/simple_extensions/README: Simple examples showing how to
1515            add new commands and tools.
1516    
1517            * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1518            bdist_rpm that we also have an install script.
1519            (bdist_inno): Add 2002 to the copyright notice.
1520    
1521            * setup.py: Create a file in python's site-packages directory to
1522            make installation of Thuban as a library easier.
1523            (ThubanInstall.user_options): Add two new options,
1524            create-init-module and init-module-dir
1525            (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1526            filenames for installation in the default directories.
1527            (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1528            the inherited methods to capture some filenames before they're
1529            transformed too much by distutils.
1530            (ThubanInstall.run): Create the init module if requested.
1531            (ThubanInstall.thuban_init_filename): New method to return the
1532            full name of the init module.
1533            (ThubanInstall.get_outputs): Append the filename of the init
1534            module.
1535    
1536    2002-07-08  Bernhard Herzog  <[email protected]>
1537    
1538            * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1539            handle the prefix properly which means that the default for the
1540            installation prefix should be /usr for RPMs and /usr/local when
1541            doing a normal source install.
1542            (bdist_rpm_install_script): Script to override the default install
1543            commands in the specfile generated by the bdist_rpm command.
1544            (thuban_bdist_rpm.user_options): Add a prefix option
1545            (thuban_bdist_rpm.initialize_options): Init the prefix option.
1546            Create the script files for the spec files as empty files here
1547            (thuban_bdist_rpm._make_spec_file): Override the inherited method
1548            to fill the script files with content.
1549    
1550            * Thuban/Model/save.py (relative_filename): Wrapper around
1551            Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1552            argument. save_session now automatically uses this version,
1553            solving a problem when saving to a relative filename.
1554    
1555            * setup.py: In the setup call, make sure that the library
1556            directories are under $prefix/lib not directly under $prefix.
1557    
1558    2002-06-20  Jan-Oliver Wagner <[email protected]>
1559    
1560            * Thuban/Model/extension.py: new module to handle extension objects.
1561            * Thuban/Model/messages.py: new messages for extensions.
1562            * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
1563            Session.AddExtension): new for handling extensions.
1564            Also some other minor changes to round up extension handling.
1565            * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
1566            of Extension titles and title and names of its objects.
1567    
1568    2002-05-29  Bernhard Herzog  <[email protected]>
1569    
1570            * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1571            the events for a command.
1572            (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
1573            Call bind_command_events to bind the events. add_toolbar_command
1574            can now bind events too so that it's possible to have commands
1575            that are only available through the toolbar.
1576            (MainWindow.init_ids): New instance variable events_bound to keep
1577            track of for which commands events have been bound.
1578    
1579    2002-05-28  Bernhard Herzog  <[email protected]>
1580    
1581            * Thuban/UI/menu.py: New module to build and manage menus.
1582    
1583            * Thuban/UI/mainwindow.py: Remove some unused imports.
1584            (MainWindow.__init__, main_menu): move the definition of the main
1585            menu from __init__ to the Menu instance main_menu.
1586            (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
1587            build the menu bar and sub-menus from a menu description.
1588    
1589            * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
1590            startup file
1591            (ThubanApplication.read_startup_files): New method to run
1592            ~/.thuban/thubanstart.py
1593    
1594            * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
1595            Move the toolbar definition to the Menu instance main_toolbar.
1596            (MainWindow.build_toolbar): New method to build the toolbar
1597            similar to the build_menu methods
1598    
1599    2002-05-23  Bernhard Herzog  <[email protected]>
1600    
1601            * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
1602            layer_outline_color. Fix it in the definition of the command too.
1603    
1604            * Thuban/UI/command.py (Command): Fix typo in doc string
1605    
1606    2002-05-22  Bernhard Herzog  <[email protected]>
1607    
1608            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
1609            in the docstring
1610    
1611    2002-05-15  Bernhard Herzog  <[email protected]>
1612    
1613            * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
1614            when the shapefile is empty.
1615            (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
1616            now return None for empty shapefiles. Update doc-strings.
1617    
1618            * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
1619            the layer's bbox being None.
1620    
1621            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
1622            layer's bbox being None.
1623    
1624            * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
1625            necessary.
1626            (MapCanvas.__init__): New instance variables, last_selected_layer
1627            and last_selected_shape to determine how the selection has
1628            changed.
1629    
1630            * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
1631            AutoSizeColumns because it will cause a traversal of the entire
1632            table which for large .dbf files will take a very long time.
1633    
1634    2002-05-14  Bernhard Herzog  <[email protected]>
1635    
1636            * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
1637            maximum depth for the tree than shapelib does by default.
1638    
1639    2002-05-10  Bernhard Herzog  <[email protected]>
1640    
1641            * setup.py (py_modules): The shptree modules doesn't have a
1642            wrapper, so don't include it in the py_modules
1643    
1644    2002-05-08  Bernhard Herzog  <[email protected]>
1645    
1646            * extensions/shapelib/shptree.c (compare_ints): Make arguments
1647            const void * as in the qsort prototype
1648            (SHPTreeFindLikelyShapes): Remove some unused variables.
1649    
1650            * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
1651            maintains to redraw the window during a drag.
1652            (MapCanvas.unprojected_rect_around_point): New method to determine
1653            a small region around a point for hit-testing.
1654            (MapCanvas.find_shape_at): Only test the shapes in a small region
1655            around the point.
1656    
1657            * setup.py: Increment the version to 0.1.2
1658    
1659            * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
1660            debug print and set session to None after unsubscribing
1661    
1662  2002-05-07  Bernhard Herzog  <[email protected]>  2002-05-07  Bernhard Herzog  <[email protected]>
1663    
1664          * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename          * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
# Line 123  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 248  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 365  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 382  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 449  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 499  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 536  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.154  
changed lines
  Added in v.626

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26