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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 623 - (hide annotations)
Mon Apr 7 10:54:54 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 83721 byte(s)
update ChangeLog

1 bh 623 2003-04-07 Bernhard Herzog <[email protected]>
2    
3     * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree): Removed in
4     favor of ToggleSessionTree
5     (MainWindow.ToggleSessionTree): New method to toggle visibility of
6     the session tree.
7     (MainWindow.SessionTreeShown): New method to return whether the
8     session tree is currently shown.
9     (MainWindow.ToggleLegend): New method to toggle visibility of the
10     legend
11     (MainWindow.ShowLegend): Implement in terms of ToggleLegend and
12     LegendShown
13     (MainWindow.LegendShown): New method to return whether the legend
14     is currently shown.
15     (_method_command): Add checked parameter so we can define check
16     menu items
17     (_has_tree_window_shown, _has_legend_shown): Use the appropriate
18     mainwindow methods.
19     (show_session_tree, show_legend commands): Removed.
20     (toggle_session_tree, toggle_legend commands): New commands to
21     toggle the visibility of the dialogs
22    
23 jonathan 612 2003-04-07 Jonathan Coles <[email protected]>
24    
25 jonathan 619 * Thuban/UI/classgen.py: Fix Windows problem.
26    
27     * Thuban/UI/dock.py: Fix Windows problem.
28    
29     * Thuban/UI/mainwindow.py: Use False instead of false.
30     (MainWindow.ShowLegend): Remove unnecessary switch parameter.
31    
32     2003-04-07 Jonathan Coles <[email protected]>
33    
34 jonathan 612 Since we now say that the order of the groups in a classification
35     matters, it makes sense to be able to manipulate that order. Most
36     of the changes to Thuban/Model/classification.py are to that end.
37    
38     * Thuban/Model/classification.py (Classification.AppendGroup,
39     Classification.InsertGroup, Classification.ReplaceGroup,
40     Classification.RemoveGroup, Classification.GetGroup): Do as the
41     names imply.
42     (Classification.FindGroup): This was called GetGroup, but GetGroup
43     takes an index, while FindGroup takes a value.
44     (Classification.__deepcopy__): Copy all the groups, BUT NOT THE LAYER
45     REFERENCE. Currently there is a cyclic reference between the layer
46     and its classification. If the classification doesn't need to know
47     its owning layer we can change this, since it may make sense to be
48     able to use the same classification with different layers.
49    
50     * Thuban/Model/load.py: Use Classification.AppendGroup(), not AddGroup()
51    
52     * Thuban/UI/classgen.py: Use Classification.AppendGroup(),
53     not AddGroup()
54    
55     * Thuban/UI/classifier.py: Now that we can depend on the order in
56     a Classification and have methods to manipulate that order we don't
57     need to use our own data structures in the grid. We can simply make
58     the grid/table access the information they need from a copy of
59     the classification object.
60     (Classifier._OnCloseBtn): Event handler for when the user clicks
61     'Close'. This is needed so if the user applies changes and then
62     continues to change the table the user has the option of discarding
63     the most recent changes and keeping what they applied.
64    
65     * Thuban/UI/mainwindow.py: Put "Show Legend" and "Show Session Tree"
66     into the same group.
67    
68     * extensions/thuban/wxproj.cpp (check_version): If Thuban is compiled
69     with a really old version of proj, PJ_VERSION won't even be defined.
70     If it isn't defined then just compile so that the function always
71     returns Py_False.
72    
73     * test/test_classification.py: Fix tests to use the renamed methods.
74     Still need to write tests for the new methods.
75    
76 jonathan 601 2003-04-04 Jonathan Coles <[email protected]>
77 jonathan 608
78 jonathan 612 * Thuban/UI/classifier.py (Classifier.__SelectField): Move the
79     call to SetSelection out of the method and before the call
80     to __SelectField in __init__. This prevents a recursion of events
81     when _OnFieldSelect is triggered by the user.
82    
83     2003-04-04 Jonathan Coles <[email protected]>
84    
85 jonathan 608 * Thuban/Model/classification.py: Rename Color.None to
86     Color.Transparent.
87     (ClassGroupProperties.SetLineColori, ClassGroupProperties.SetFill):
88     Don't bother copying the color, since Colors are immutable.
89    
90     * Thuban/Model/color.py, Thuban/Model/layer.py, Thuban/Model/load.py,
91     Thuban/UI/classifier.py, Thuban/UI/mainwindow.py,
92     Thuban/UI/renderer.py, Thuban/UI/view.py:
93     Rename Color.None to Color.Transparent.
94    
95     * test/test_classification.py, test/test_load.py: Rename Color.None
96     to Color.Transparent.
97    
98     2003-04-04 Jonathan Coles <[email protected]>
99 jonathan 603
100     * Thuban/Model/classification.py: Fix assert calls.
101     (ClassGroupProperties.SetLineColor, ClassGroupProperties.SetFill):
102     Copy the color parameter rather than hold onto a reference.
103 jonathan 601
104 jonathan 603 * Thuban/Model/color.py (Color.__copy__, Color.__deepcopy): Copy
105     the color object.
106     (NoColor.__copy__, NoColor.__deepcopy): Return 'self' so that we
107     are sure there exists only one refernce to Color.None in the system.
108     This allows us to use 'is' rather than the comparision functions.
109    
110     * Thuban/Model/save.py: Fix assert calls.
111    
112     * Thuban/UI/classifier.py: Fix assert calls.
113     (ClassGrid._OnCellDClick): Call up to the classifier to open the
114     dialog to edit the groups properties.
115     (ClassGrid._OnCellResize): Make sure that the scollbars are drawn
116     correctly if a cell is resized.
117     (ClassTable.SetClassification): New. Changes the classification
118     that is in the table.
119     (ClassTable.__SetRow): Allow groups to be prepended.
120     (Classifier): New code for opening the EditProperties and
121     GenerateRanges dialogs.
122     (SelectPropertiesDialog.__GetColor): Only set the color in the
123     color dialog if the current color is not None.
124    
125     * Thuban/UI/dock.py: Fix assert calls.
126    
127     * Thuban/UI/legend.py: Fix assert calls.
128    
129     * Thuban/UI/renderer.py: Fix assert calls.
130    
131     * Thuban/UI/classgen.py (ClassGenDialog): Dialog for generating
132     classifications.
133     (GenRangePanel): Panel specific to range generation.
134     (GenSingletonPanel): Panel specific to singleton generation.
135     (ClassGenerator): Class responsible for actually generating
136     the classification from the data gathered in the dialog box.
137     (PropertyRamp): Generates properties whose values range from
138     a starting property to an ending property.
139 jonathan 601
140 bh 600 2003-04-03 Bernhard Herzog <[email protected]>
141    
142     * test/support.py (print_garbage_information): New function that
143     prints information about still connected messages and memory
144     leaks.
145     (run_suite): Removed.
146     (run_tests): New function for use as a replacement of
147     unittest.main in the test_* files. This one calls
148     print_garbage_information at the end.
149    
150     * test/runtests.py (main): Use support.print_garbage_information
151    
152     * test/test_layer.py: Use support.run_tests instead of
153     unittest.main so we get memory leak information
154     (TestLayer.test_arc_layer, TestLayer.test_polygon_layer)
155     (TestLayer.test_point_layer, TestLayer.test_empty_layer)
156     (TestLayerLegend.test_visibility): Call the layer's Destroy method
157     to fix a memory leak.
158    
159     * test/test_classification.py: Use support.run_tests instead of
160     unittest.main so we get memory leak information
161     (TestClassification.test_classification): Call the layer's Destroy
162     method to fix a memory leak.
163    
164 bh 591 2003-04-02 Bernhard Herzog <[email protected]>
165    
166 bh 595 * extensions/thuban/wxproj.cpp (check_version, check_version_gtk):
167     Handle the reference counts of the return value and errors in
168     PyArg_ParseTuple correctly.
169    
170 bh 593 * Thuban/UI/application.py (ThubanApplication.OpenSession): Make
171     sure the filename is absolute to avoid problems when saving the
172     session again
173    
174 bh 591 * Thuban/Model/table.py: Remove unnecessary import. Fix a typo.
175    
176 jonathan 587 2003-04-01 Jonathan Coles <[email protected]>
177    
178 jonathan 589 * Thuban/UI/renderer.py (MapRenderer.draw_point_shape): Check
179 jonathan 587 that there actually are points in the returned list of points
180     before trying to index into the list. The list may be empty if
181     the shape is a Null Shape.
182    
183 bh 586 2003-04-01 Bernhard Herzog <[email protected]>
184    
185     * test/test_map.py: Don't use from <module> import *
186    
187 jonathan 581 2003-04-01 Jonathan Coles <[email protected]>
188    
189     * Thuban/Model/session.py: Use LAYER_CHANGED instead of
190     LAYER_LEGEND_CHANGED
191    
192     * Thuban/UI/dock.py (DockableWindow._OnButtonClose): Call
193     self.Destroy() to close the window after yesterday's changes.
194    
195     * test/test_map.py, test/test_session.py: Fix messages that
196     are sent from maps and layers.
197    
198 jonathan 575 2003-03-31 Jonathan Coles <[email protected]>
199    
200     * Thuban/UI/classifier.py: Commented out some debugging statements.
201     (ClassDataPreviewer.Draw): Draw rectangles for polygon layers per
202     RTbug #1769.
203    
204     * Thuban/UI/dock.py (DockableWindow.UnDock): Restore size and
205     position (although position doesn't work yet under GTK).
206     (DockableWindow.Destroy): New. Called when the window must be
207     closed. Namely needed when the DockFrame closes and must close
208     its children.
209     (DockFrame): Listen for EVT_CLOSE and destroy all children.
210    
211     * Thuban/UI/legend.py (LegendPanel.Destroy): New. Cleans up
212     when then window is told to close.
213     (LegendTree._OnMsgLayerChanged): Fixes a seg fault bug. See
214     comment in source for more info.
215    
216     * Thuban/UI/main.py: Show the legend by default when Thuban starts.
217    
218     * Thuban/UI/mainwindow.py: Renamed OnClose to _OnClose for
219     symmetry with other such methods.
220     (MainWindow.ShowLegend): Show the legend docked by default.
221    
222 jonathan 569 2003-03-28 Jonathan Coles <[email protected]>
223    
224     * Thuban/UI/classifier.py: Support for highlighting a specific
225     group within the grid when the classification dialog is opened.
226     Also contains a lot of debugging printouts which will later
227     be removed.
228    
229     * Thuban/UI/dock.py: Complete rework on the dock code so that
230     that it is fairly removed from the rest of the Thuban application.
231     It is easy to add new docks which the rest of the program having
232     to be aware of them.
233    
234     * Thuban/UI/legend.py: Modifications to support selecting a
235     specific group in the classification dialog. Changed how layers
236     are drawn when the layer is visible/invisible.
237    
238     * Thuban/UI/mainwindow.py: Removed legend specific code and
239     replaced it with calls to the new dock code.
240    
241     * Thuban/UI/renderer.py (MapRenderer.__init__): Added assert
242     to check if scale > 0. Trying to track down a divide by zero.
243    
244 jonathan 557 2003-03-26 Jonathan Coles <[email protected]>
245    
246 jonathan 567 * Thuban/UI/legend.py: Removed unnecessary LegendDialog class.
247     (LegendPanel): Removed _OnDock()/_OnUnDock() methods which are
248     now part of DockableWindow.
249     (LegendPanel.DoOnSelChanged): Select the current layer in the
250     map.
251     (LegendTree._OnSelChanged): Call LegendPanel.DoOnSelChanged()
252     with the selected layer and/or group.
253    
254     2003-03-26 Jonathan Coles <[email protected]>
255    
256 jonathan 557 This putback contains the code for dockable windows. There is
257     no support in wxWindows as of this date for windows that can
258     attach themselves to other windows.
259    
260     The current model contains a DockableWindow which has a parent
261     window for when it is detached and a dock window that it puts
262     its contents in when it is docked. The contents of a DockableWindow
263     must be a DockPanel. DockPanel itself derives from wxPanel.
264    
265     * Thuban/Model/layer.py (Layer.ClassChanged): Send a LAYER_CHANGED
266     message, not a LAYER_LEGEND_CHANGED message.
267    
268     * Thuban/Model/map.py (Map): Forward LAYER_CHANGED messages.
269    
270     * Thuban/UI/classifier.py (Classifier.__init__): Use wxADJUST_MINSIZE
271     as one of the style properties for the fieldTypeText item to
272     be sure that its size is correct when the text changes.
273    
274     * Thuban/UI/dock.py: New. Classes for the DockPanel and
275     DockableWindow.
276    
277     * Thuban/UI/legend.py: Added some more buttons and made the
278     LegendPanel a DockPanel.
279    
280     * Thuban/UI/mainwindow.py: Added sash windows to the main window
281     and supporting functions for manipulating the sashes.
282     (MainWindow.ShowLegend): Create a DockableWindow with the
283     LegendPanel as the contents.
284    
285     * Thuban/UI/messages.py: Added DOCKABLE_* messages
286    
287     * Thuban/UI/view.py (MapCanves.SetMap): Listen for LAYER_CHANGED,
288     not LAYER_LEGEND_CHANGED, messages.
289    
290 jonathan 554 2003-03-25 Jonathan Coles <[email protected]>
291    
292     * setup.py: Added custom script bdist_rpm_build_script so that
293     when the rpm is built the path to wx-config is correct.
294    
295     * setup.cfg: Added line saying to use the custom build script
296    
297 jonathan 552 2003-03-20 Jonathan Coles <[email protected]>
298    
299     Initial implementation of the Legend.
300    
301     * Thuban/UI/legend.py: New. Creates a window that shows the map's
302     Legend information and allows the user to add/modify classifications
303     and how the layers are drawn on the map.
304    
305     * setup.py: New command 'build_docs' which currently uses
306     happydoc to generate html documentation for Thuban.
307    
308     * Thuban/Model/classification.py (ClassGroup.GetDisplayText): New.
309     Returns a string which is appropriately describes the group.
310    
311     * Thuban/Model/layer.py (Layer.SetClassification): Generate a
312     LAYER_CHANGED event instead of a LAYER_LEGEND_CHANGED event.
313    
314     * Thuban/Model/map.py (Map): Rename messages and use new, more
315     specific, messages.
316    
317     * Thuban/Model/messages.py: New message to indicate that a layer's
318     data has changed (LAYER_CHANGED). New map messages to indicate
319     when layers have been added/removed/changed or if the stacking order
320     of the layers has changed.
321    
322     * Thuban/Model/session.py: Rename and use new messages.
323    
324     * Thuban/UI/classifier.py: Remember if any changes have actually
325     been applied so that if the dialog is cancelled without an application
326     of changes we don't have to set a new classification.
327     (ClassDataPreviewer): Pulled out the window specific code and put it
328     ClassDataPreviewWindow. ClassDataPreviewer can then be used to draw
329     symbols on any DC.
330    
331     * Thuban/UI/mainwindow.py: New code to open the legend.
332    
333     * Thuban/UI/view.py: Use new message names.
334    
335 jonathan 541 2003-03-19 Jonathan Coles <[email protected]>
336    
337     * Thuban/UI/main.py (verify_versions): New. Checks the versions
338     of Python, wxPython, and some other libraries.
339    
340     * extensions/thuban/wxproj.cpp (check_version): Checks the given
341     version against what wxproj was compiled with.
342     (check_version_gtk): If wxproj was compiled with gtk then check
343     the given version against the version of the gtk library
344     currently being used.
345    
346 bh 538 2003-03-14 Bernhard Herzog <[email protected]>
347    
348     * test/test_command.py: Run the tests when the module is run as a
349     script
350    
351     2003-03-14 Bernhard Herzog <[email protected]>
352    
353     Implement selection of multiple selected shapes in the same layer:
354    
355     - Introduce a new class to hold the selection. This basically
356     replaces the interactor which was nothing more than the
357     selection anyway. A major difference is of course that the new
358     selection class supports multiple selected shapes in one layer
359    
360     - Move the object that represents the selection from the
361     application to the canvas. The canvas is a better place than the
362     application because the selection represents which shapes and
363     layer of the map displayed by the canvas are selected and
364     affects how the map is drawn.
365    
366     - Make the selection and its messages publicly available through
367     the mainwindow.
368    
369     - The non-modal dialogs do not get a reference to the interactor
370     anymore as they can simply refer to their parent, the
371     mainwindow, for the what the interactor had to offer.
372    
373     * Thuban/UI/selection.py: New module with a class to represent the
374     selection.
375    
376     * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
377     these unused messages
378    
379     * Thuban/UI/application.py (ThubanApplication.OnInit)
380     (ThubanApplication.OnExit, ThubanApplication.SetSession): The
381     interactor is gone now.
382     (ThubanApplication.CreateMainWindow): There is no interactor
383     anymore so we pass None as the interactor argument for now for
384     compatibility.
385    
386     * Thuban/UI/view.py (MapCanvas.delegated_messages)
387     (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
388     Unsubscribe, delegate messages according to the delegated_messages
389     class variable.
390     (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
391     attributes from instance variables as described with the
392     delegated_methods class variable.
393     (MapCanvas.__init__): New instance variable selection holding the
394     current selection
395     (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
396     pass them on to the renderer
397     (MapCanvas.SetMap): Clear the selection when a different map is
398     selected.
399     (MapCanvas.shape_selected): Simple force a complete redraw. The
400     selection class now takes care of only issueing SHAPES_SELECTED
401     messages when the set of selected shapes actually does change.
402     (MapCanvas.SelectShapeAt): The selection is now managed in
403     self.selection
404    
405     * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
406     (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
407     Unsubscribe, delegate messages according to the delegated_messages
408     class variable.
409     (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
410     attributes from instance variables as described with the
411     delegated_methods class variable.
412     (MainWindow.__init__): The interactor as ivar is gone. The
413     parameter is still there for compatibility. The selection messages
414     now come from the canvas.
415     (MainWindow.current_layer, MainWindow.has_selected_layer):
416     Delegate to the the canvas.
417     (MainWindow.LayerShowTable, MainWindow.Classify)
418     (MainWindow.identify_view_on_demand): The dialogs don't need the
419     interactor parameter anymore.
420    
421     * Thuban/UI/tableview.py (TableFrame.__init__)
422     (LayerTableFrame.__init__, LayerTableFrame.OnClose)
423     (LayerTableFrame.row_selected): The interactor is gone. It's job
424     from the dialog's point of view is now done by the mainwindow,
425     i.e. the parent. Subscribe to SHAPES_SELECTED instead
426     of SELECTED_SHAPE
427    
428     * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
429     is gone. It's job from the dialog's point of view is now done by
430     the mainwindow, i.e. the parent.
431    
432     * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
433     gone. It's job from the dialog's point of view is now done by the
434     mainwindow, i.e. the parent.
435    
436     * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
437     gone. It's job from the dialog's point of view is now done by the
438     mainwindow, i.e. the parent.
439     (SessionTreeCtrl.__init__): New parameter mainwindow which is
440     stored as self.mainwindow. The mainwindow is need so that the tree
441     can still subscribe to the selection messages.
442     (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
443     (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
444     selection is now accessible through the mainwindow. Subscribe to
445     SHAPES_SELECTED instead of SELECTED_SHAPE
446    
447     * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
448     SHAPES_SELECTED message now.
449     (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
450     so deal with multiple shapes
451     (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
452     gone. It's job from the dialog's point of view is now done by the
453     mainwindow, i.e. the parent.
454    
455     * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
456     parameter is now a list of shape ids.
457     (RecordTable.SetTable): The second parameter is now a list of
458     indices.
459    
460     * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
461     selected_shape parameter and ivar to selected_shapes. It's now a
462     list of shape ids.
463     (MapRenderer.draw_label_layer): Deal with multiple selected
464     shapes. Rearrange the code a bit so that the setup and shape type
465     distinctions are only executed once.
466    
467     * test/test_selection.py: Test cases for the selection class
468    
469 jonathan 527 2003-03-11 Jonathan Coles <[email protected]>
470    
471     * Thuban/Model/load.py: Temporary fix so that the xml reader
472     doesn't cause Thuban to crash.
473    
474     * Thuban/Model/layer.py: Handle the cyclic references between
475     a layer and its classification better, and be sure to disconnect
476     the classification from the layer when the layer is destroyed
477     so that we don't maintain a cyclic reference that may not be
478     garbage collected.
479    
480     * Thuban/Model/classification.py: See comment for layer.py.
481    
482 jan 523 2003-03-12 Jan-Oliver Wagner <[email protected]>
483    
484     * HOWTO-Release: New. Information on the steps for releasing
485     a new version of Thuban.
486    
487 jonathan 514 2003-03-11 Jonathan Coles <[email protected]>
488    
489     * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
490     Use True instead of true.
491     (Classifier): Should have a single panel in which all the controls lie.
492    
493     * Thuban/UI/proj4dialog.py: Add normal border.
494    
495     * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
496    
497     * Thuban/UI/mainwindow.py: Use True instead of true.
498    
499     * setup.py: Update some definitions to use wxWindows2.4 files
500    
501     * Data/iceland_sample_class.thuban: Fixed file so that the
502     field_type information is present.
503    
504 jonathan 490 2003-03-10 Jonathan Coles <[email protected]>
505    
506 jonathan 505 * Thuban/UI/classifier.py (Classifier.__init__): Make the
507     field type label grow so that when the text changes the
508     size is updated correctly. This may be a wxWindows bug.
509    
510     2003-03-10 Jonathan Coles <[email protected]>
511    
512 jonathan 499 * Thuban/UI/application.py: Changed SESSION_CHANGED to
513     SESSION_REPLACED.
514    
515     * Thuban/UI/classifier.py: Wrap text with _().
516     (ClassGrid.CreateTable): Set dimensions and size hints here,
517     instead of in Reset, so we only set the size once.
518    
519     * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
520    
521     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
522     Call Close() instead of Shutdown().
523    
524     * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
525    
526     * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
527     Go back to using OnClose() instead of Shutdown().
528    
529     2003-03-10 Jonathan Coles <[email protected]>
530    
531 jonathan 497 * Thuban/UI/classifier.py (Classifier): SelectField() needed
532     to know the old field index as well as the new one.
533    
534     2003-03-10 Jonathan Coles <[email protected]>
535    
536 jonathan 495 * Thuban/UI/classifier.py (Classifier): Use __SelectField()
537     to correctly set the table information and call this from
538     __init__ and from _OnFieldSelect so that all the information
539     is up to date when the dialog opens and when a field is changed.
540    
541     2003-03-10 Jonathan Coles <[email protected]>
542    
543 jonathan 490 * Thuban/Model/classification.py (Classification): Don't use
544     layer's message function directly, use the ClassChanged() method
545     when then classification changes. SetField/SetFieldType/SetLayer
546     must keep the information about field name and field type in
547     sync when an owning layer is set or removed.
548    
549     * Thuban/Model/layer.py: Added ClassChanged() so that the
550     classification can tell the layer when its data has changed.
551     (Layer.SetClassification): Accepts None as an arguement to
552     remove the current classification and correctly handles
553     adding a new classification.
554    
555     * Thuban/Model/load.py: Comment out print statement
556    
557     * test/test_classification.py, test/test_save.py: New and
558     improved tests.
559    
560 jonathan 483 2003-03-07 Jonathan Coles <[email protected]>
561    
562     * Thuban/Model/classification.py: Implemented __copy__ and
563     __deepcopy__ for ClassGroup* and ClassGroupProperites so
564     they can easily be copied by the classifier dialog.
565     (ClassGroupProperites.__init__): The default line color should
566     have been Color.Black.
567    
568     * Thuban/UI/classifier.py: Setting and Getting table values now
569     uses a consistent set of functions.
570     (Classifier): Now non-modal. Has field type label which changes
571     as the field changes. Keep track of buttons in a list so that
572     we can enable/disable the buttons when the None field is selected.
573     (SelectPropertiesDialog): Add buttons to make the colors transparent.
574    
575     * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
576     does what OnClose did, but can be called by the application to
577     close a window. Needed when a session changes, and we have to
578     close the classifier windows.
579    
580     * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
581     Shuts down open dialogs. Used when a new session is created
582     or a session is opened.
583     (MainWindow.SaveSession): Should only call application.SaveSession()
584     if we don't call SaveSessionAs first.
585     (MainWindow.Classify): Allow different classifier dialogs for
586     different layers.
587    
588     * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
589     the parent class handle it. Add Shutdown() to unsubscibe from
590     event notification and call the parent Shutdown(). This was
591     necessary so the application can close the tree window.
592    
593 jonathan 478 2003-03-06 Jonathan Coles <[email protected]>
594    
595     * Thuban/Model/classification.py: Minor documentation changes,
596     Addition of __eq__ and __ne__ methods.
597     (Classification.SetLayer): prevent recursion between this method
598     and Layer.SetClassification().
599    
600     * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
601    
602     * Thuban/Model/layer.py (SetClassification): prevent recursion
603     between this method and Classification.SetLayer().
604    
605     * test/test_classification.py, test/test_load.py,
606     test/test_session.py: Fixed and added tests for the classification
607     classes.
608    
609 bh 477 2003-03-06 Bernhard Herzog <[email protected]>
610    
611     * Thuban/UI/classifier.py (ClassGrid.__init__)
612     (ClassGrid.CreateTable): Move the SetSelectionMode call to
613     CreateTable because otherwise it triggers an assertion in
614     wxPython/wxGTK 2.4.
615    
616 jonathan 459 2003-03-05 Jonathan Coles <[email protected]>
617    
618 jonathan 475 * Thuban/common.py: Move FIELDTYPE constants back to table.py.
619 jonathan 471
620 jonathan 475 * Thuban/Model/load.py: import FIELDTYPE constants from table.
621 jonathan 471
622 jonathan 475 * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
623 jonathan 471
624 jonathan 475 * Thuban/Model/table.py: Put FIELDTYPE constants back.
625 jonathan 471
626     2003-03-05 Jonathan Coles <[email protected]>
627    
628 jonathan 459 * Thuban/UI/classifier.py: Added class documentation.
629     Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
630     Store just the groups in the table and generate the other
631     column information when it is requested. Add "None" field
632     to pull-down to select no classification.
633    
634     * Thuban/common.py: Moved FIELDTYPE constants from table.py
635     (Str2Num): Only catch ValueError exceptions.
636    
637     * Thuban/Model/classification.py: Class documentation. Renaming
638     of methods with Stroke to Line. Groups are stored in a single
639     list with the default as the first element. Groups are searched
640     in the order they appear in the list.
641    
642     * Thuban/Model/color.py: Documentation.
643    
644     * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
645     the kind of data represented by a field.
646    
647     * Thuban/Model/load.py (ProcessSession): Use proper string
648     conversion function; fixes RTbug #1713.
649    
650     * Thuban/Model/save.py (Saver): Store field type information.
651    
652     * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
653     (Table): Add field_info_by_name() to retrieve field information
654     by specifying the field name, not the number.
655    
656     * Thuban/UI/mainwindow.py: Function name changes.
657    
658     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
659     get the layer classification once. Don't try to classify
660     values when the field is None: just use the default properties.
661    
662     * Thuban/UI/view.py: Function name changes.
663    
664     * Doc/thuban.dtd: Add field_type attribute to a classification.
665    
666 bh 456 2003-03-04 Bernhard Herzog <[email protected]>
667    
668 bh 458 * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
669     the fill and stroke layer attributes optional with suitable
670     default values. Add the stroke_width layer attribute. Use correct
671     syntax for empty elements. Make the attribute list for labels
672     refer to the label element.
673    
674     2003-03-04 Bernhard Herzog <[email protected]>
675    
676 bh 456 * setup.py (thuban_build_py.build): Add a comment about distutils in
677     Python 2.3 containing some of the functionality we implement in
678     setup.py ourselves.
679    
680     * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
681     before the selection mode. Doing it the other way round triggers
682     an assertion in wxWindows.
683    
684     * Thuban/Model/save.py (escape): Fix typo in doc-string
685    
686     * Thuban/Model/classification.py: Remove unnecessary wxPython
687     import
688    
689 jonathan 448 2003-03-04 Jonathan Coles <[email protected]>
690    
691     * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
692     Parameter 'value' should default to None.
693    
694     * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
695     the class attribute __classification is now private.
696    
697     * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
698     Classifier to ClassGrid. Added support for removing selected rows,
699     which including code for keeping track of when cells are selected,
700     and deselected.
701     (ClassTable): Support for added/removing rows. Fixed a problem
702     with __ParseInput whereby it would not allow strings (only numbers)
703     to be entered.
704     (Classifier): Added button and supporting code for removing
705     selected rows.
706    
707 jonathan 445 2003-02-27 Jonathan Coles <[email protected]>
708 jonathan 434
709     * Thuban/common.py: Moved color conversion functions into
710     Thuban/UI/common.py.
711     (Str2Num): Now converts the float (not the string) to a long/int
712     so that an exception isn't thrown.
713    
714     * Thuban/UI/common.py: Common functions used in several UI modules
715    
716     * Thuban/Model/classification.py: Changed the class hierarchy
717     so that a Classification consists of Groups which return
718     Properties when a value matches a Group.
719    
720     * Thuban/Model/layer.py: Fixed name resolution problem.
721    
722     * Thuban/Model/load.py: Use new Classification and Group functions.
723    
724     * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
725     failure.
726     (Saver.write_classification): Use new Classification and Group
727     functions.
728    
729     * Thuban/UI/classifier.py: Changes to use new Classification and Group
730 jonathan 445 functions. Fix to create a tuple with a single value instead of
731     simply returning the value.
732 jonathan 434
733     * Thuban/UI/renderer.py: Use new Classification and Group functions.
734     Use common.py functions.
735    
736 jonathan 445 * Thuban/UI/tree.py: Use common.py functions.
737 jonathan 447
738     * test/test_classification.py: Use new Classification and Group
739     classes.
740 jonathan 434
741 jonathan 426 2003-02-24 Jonathan Coles <[email protected]>
742    
743     * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
744     functions from Thuban color objects to wxWindow colour objects.
745    
746     * Thuban/Model/classification.py (Classification): Renamed
747     GetProperties() to GetClassData(). Used the new iterator
748     in TreeInfo().
749     (ClassIterator): Iterator implementation to iterate over the
750     ClassData objects in a classification object.
751    
752     * Thuban/Model/save.py (Saver.write_classificaton): Uses
753     the new iterator to save the classification information.
754    
755     * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
756     for changing the stroke and fill colors and previewing the
757     changes.
758    
759     * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
760     MainWindow.SaveSessionAs): Text string changes so the dialogs
761     have more meaningful titles.
762    
763     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
764     Classification method name from GetProperties to GetClassData.
765    
766     * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
767     instead of accessing now non-existent class variables.
768    
769 bh 425 2003-02-24 Bernhard Herzog <[email protected]>
770    
771     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
772     unneeded Shape() call. Rendering is substantially faster without
773     it and it avoids some problems with broken shape files.
774    
775 frank 423 2003-02-20 Frank Koormann <[email protected]>
776    
777     Force minimal size of identify and label dialogs. The autosizing
778     looked too ugly.
779    
780     * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
781     * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
782     Set size of listctrl.
783     * Thuban/UI/identifyview.py (IdentifyView.__init__):
784     Set size of dialog.
785    
786 jonathan 408 2003-02-19 Jonathan Coles <[email protected]>
787    
788     * test/test_classification.py, test/test_layer.py,
789     test/test_load.py, test/test_map.py, test/test_session.py:
790     Updated the tests to use the new functions that are in the
791     respective classes.
792    
793     * Thuban/Model/classification.py (Classification):
794     Uses the new ClassData* classes. Modification messages are
795     passed up to the parent layer (if it exists).
796     (ClassData): New class to encapsulate the common data in each
797     classification property.
798     (ClassDataDefault): Represents the Default class. data.
799     (ClassDataPoint): Represents a single class. data point
800     (ClassDataRange): Represents a class. range
801     (ClassDataMap): Represents a class. map (unused).
802    
803     * Thuban/Model/color.py: Added Color.None to represent something
804     with no color. Color.Black represents the color black.
805     (NoColor): Helper class derived from Color to represent something
806     with no color.
807    
808     * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
809     stroke_width attributes. Made the 'classification' attribute private.
810     New methods for setting/getting the classification.
811    
812     * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
813     to get the classifcation and use the new ClassData* classes to
814     hold the classification data. Use Str2Num to convert numbers
815     properly.
816    
817     * Thuban/Model/save.py (Saver): Use new Color and Classification
818     methods
819    
820     * Thuban/UI/classifier.py (ClassGrid): New class to represent a
821     custom grid.
822     (ClassTable): Support for editing Values and Labels and for
823     changing what type (point or range) of data is stored in each
824     property based on how the user enters the data.
825     (Classifier): Support for saving the new classifications and
826     launching the dialog to edit a property.
827     (SelectPropertiesDialog): New class for editing the visual
828     properties of a classification (stroke color, width, and fill color)
829     (ClassPreviewer): Took the Draw method from ClassRenderer and
830     made most of it into this new class. Intend to use this class in
831     the SelectPropertiesDialog for previewing changes.
832    
833     * Thuban/UI/renderer.py: Use new Color and Classification methods.
834    
835     * Thuban/UI/tree.py: Formatting changes.
836    
837     * Doc/thuban.dtd: Add 'label' element
838    
839     * Thuban/common.py: New. Contains common routines used throughout
840     the code.
841     (Str2Num): Takes a string and converts it to the "best" type of
842     number.
843    
844 bh 405 2003-02-14 Bernhard Herzog <[email protected]>
845    
846     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
847     dragging flag is always set to 0 even when the tool implementation
848     raises an exception
849    
850 bh 402 2003-02-11 Bernhard Herzog <[email protected]>
851    
852     * Thuban/UI/application.py (ThubanApplication.splash_screen): New
853     method to create a splash screen.
854     (ThubanApplication.ShowMainWindow): New. Show the main window.
855     Needed so the splash screen can display the mainwindow
856     (ThubanApplication.OnInit): Call the
857     new splash_screen method to determine whether the application
858     should display a splash screen. If it displays a splash screen do
859     not immediately show the main window.
860    
861 jonathan 399 2003-02-11 Jonathan Coles <[email protected]>
862    
863     * Thuban/Model/classification.py: Added import line to fix
864     feature conflicts between running on python2.2 and python2.1.
865    
866     * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
867     onto the clinfo parameter, so removed the deepcopy().
868    
869 jonathan 396 2003-02-10 Jonathan Coles <[email protected]>
870    
871 tkoester 403 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
872 jonathan 396 Added element_open variable to track opening and closing of tags
873     so that tags that don't span more than one line are closed with
874     /> instead of </tag_name>. Use the GetDefault*() methods of
875     the Classification class.
876    
877     * Thuban/Model/classification.py (Classificaton): Added set and
878     get methods for the default data. The class also takes a layer
879     reference so that modification messages can be sent. Fixed the
880     methods to use the new ClassData class.
881     (ClassData): New class to encapsulate the classification data
882    
883     * Thuban/Model/layer.py (Layer): Remove the
884 tkoester 403 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
885 jonathan 396 SetDefault*() methods on the layer's classification object.
886 tkoester 403 (Layer.__init__): Use the new SetDefault*() methods in the
887 jonathan 396 Classification class.
888    
889     * Thuban/Model/load.py (ProcessSession): Use the new ClassData
890     object instead of a dictionary.
891    
892 tkoester 403 * Thuban/UI/classifier.py (ClassRenderer): New class to
893 jonathan 396 draw the classifications in the dialog box's table.
894     (Classifier): Modified to use the ClassRenderer class.
895    
896 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
897     methods of the Classification class.
898 jonathan 396
899     * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
900     of the ClassData class.
901    
902     * test/test_classification.py, test/test_layer.py,
903     test/test_map.py, test/test_session.py: Fix the tests to work
904     with the above code changes.
905    
906 jonathan 387 2003-02-03 Jonathan Coles <[email protected]>
907    
908     * Thuban/Model/classification.py (Classification): Added getNull()
909     to return the NullData reference
910    
911     * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
912     Layer.SetStrokeWidth): Modified these functions to change the
913     null data in the classification rather than keep these values
914     directly in the Layer class. Menu options to change these values
915     work again.
916    
917 jonathan 380 2003-01-28 Jonathan Coles <[email protected]>
918    
919 jonathan 384 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
920 tkoester 403 Fixed crashing problem on some systems. Dialog box shows
921 jonathan 380 classification data.
922    
923 jonathan 384 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
924     Colors in the tree view.
925    
926     * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
927     the tree info for classifications. Commented out unnecessary lines.
928    
929     * Thuban/Model/classification.py (Classification.TreeInfo): New
930     function to add information about the classification into the
931     tree view.
932    
933 tkoester 403 2003-01-27 Jan-Oliver Wagner <[email protected]>
934 jan 375
935 tkoester 403 * Thuban/__init__.py (_): New.
936 jan 375
937     * Thuban/Model/classification.py, Thuban/Model/extension.py,
938     Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
939 tkoester 403 Thuban/Model/session.py, Thuban/UI/application.py,
940     Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
941     Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
942     Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
943     Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
944     Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
945 jan 375
946 jonathan 370 2003-01-27 Jonathan Coles <[email protected]>
947    
948 tkoester 403 * Thuban/Model/layer.py: Classification initialization calls.
949 jonathan 370
950 tkoester 403 * Thuban/Model/classification.py: Created class to encapsulate
951     a layer classification. Supports specific data points and
952     ranges.
953 jonathan 370
954 tkoester 403 * Thuban/Model/load.py: Added support for loading classification
955     information.
956 jonathan 370
957 tkoester 403 * Thuban/Model/save.py: Added support for saving classification
958     information.
959 jonathan 370
960 tkoester 403 * Thuban/UI/classifier.py: Initial class for a dialog box for
961     specifying classification information.
962 jonathan 370
963 tkoester 403 * Thuban/UI/mainwindows.py: Support for opening the classifier
964     dialog.
965 jonathan 370
966 tkoester 403 * Thuban/UI/renderer.py: Support for drawing a layer with the
967     classification information.
968 jonathan 370
969 tkoester 403 * Data/iceland_sample_class.thuban: iceland_sample with
970     classification data.
971 jonathan 370
972 tkoester 403 * test/test_classification: Tests for the Classification class.
973 jonathan 370
974 bh 359 2002-12-09 Bernhard Herzog <[email protected]>
975    
976 bh 361 * test/test_command.py: New. Tests for the command classes.
977    
978 bh 359 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
979     (Command.IsTool): New method to distinguish between command
980     switching tools and other commands.
981    
982     * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
983     the tool to avoid direct assignments to instance variables
984     (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
985     (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
986     change the tool
987    
988     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
989     active tool's command turns insensitive, disable the tool.
990     (_tool_command): Use the new ToolCommand class
991    
992     * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
993     SelectTool method to change the tool
994     (iconfile): Use the ToolCommand class
995    
996 bh 354 2002-12-03 Bernhard Herzog <[email protected]>
997    
998     * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
999     the case of selected items that are not children of Layers or Maps
1000     properly. Previously this bug would trigger an assertion in
1001     wxWindows.
1002    
1003 frank 352 2002-11-06 Frank Koormann <[email protected]>
1004    
1005 bh 354 * Thuban/UI/mainwindow.py: Altered the order of tools in the
1006     toolbar: First now are all navigation tools (Zoom In/Out, Pan,
1007     Full Extent).
1008 tkoester 403
1009 bh 349 2002-10-23 Bernhard Herzog <[email protected]>
1010    
1011     * setup.py (setup call): version now 0.1.3
1012    
1013     * MANIFEST.in: Add the files in test/
1014    
1015     * test/README: Add note about tests requiring the iceland data
1016    
1017     * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
1018     copyright notice.
1019    
1020 bh 344 2002-10-18 Bernhard Herzog <[email protected]>
1021    
1022     * test/test_map.py
1023     (TestMapWithContents.test_projected_bounding_box): Use an explicit
1024     epsilon.
1025    
1026     * test/support.py (FloatComparisonMixin.assertFloatEqual)
1027     (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
1028     message if the assertion fails and don't return the return value
1029     of self.assert_. In assertFloatSeqEqual the return meant that not
1030     all items of the sequence were compared.
1031    
1032 bh 326 2002-09-20 Bernhard Herzog <[email protected]>
1033    
1034 bh 341 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
1035    
1036     * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
1037    
1038 bh 338 * test/test_map.py (TestMapWithContents.test_tree_info): Create
1039     the string with the bounding box on the fly because of platform
1040     differences in the way %g is handled.
1041    
1042     * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
1043     DBFfile too because Thuban layers can't yet cope missing DBF
1044     files.
1045    
1046     2002-09-20 Bernhard Herzog <[email protected]>
1047    
1048 bh 326 * test/test_menu.py: Use initthuban instead of
1049     add_thuban_dir_to_path to initialize Thuban.
1050    
1051     * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
1052     Mixin class for float comparisons
1053     (SubscriberMixin): New. Mixin class to test messages sent through
1054     the Connector class
1055    
1056     * test/README: Fix a typo and add the -v flag to the command for
1057     individual tests
1058    
1059 bh 335 * test/test_session.py: New. Test cases for Thuban.Model.session
1060    
1061     * test/test_proj.py: New. Test cases for Thuban.Model.proj
1062    
1063     * test/test_map.py: New. Test cases for Thuban.Model.map
1064    
1065     * test/test_layer.py: New. Test cases for Thuban.Model.layer
1066    
1067     * test/test_label.py: New. Test cases for Thuban.Model.label
1068    
1069     * test/test_connector.py: New. Test cases for Thuban.Lib.connector
1070    
1071     * test/test_color.py: New. Test cases for Thuban.Model.color
1072    
1073     * test/test_base.py: New. Test cases for Thuban.Model.base
1074    
1075 bh 322 2002-09-13 Bernhard Herzog <[email protected]>
1076    
1077     * Thuban/Model/session.py (Session.forwarded_channels): Forward
1078     the CHANGED channel too.
1079    
1080     * Thuban/Model/map.py (Map.forwarded_channels): Forward the
1081     CHANGED channel too.
1082     (Map.__init__): Call the Modifiable constructor as well.
1083    
1084     * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
1085     event if the modified flag changes.
1086     (Modifiable.changed): Tweak the doc-string.
1087    
1088     * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
1089     (MainWindow.set_position_text): Put the code that puts the text
1090     with the mouse position into the status bar into the new method
1091     set_position_text so that it can overwritten in derived classes.
1092    
1093 bh 317 2002-09-12 Bernhard Herzog <[email protected]>
1094    
1095     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
1096     message box on the main window.
1097    
1098 bh 313 2002-09-11 Bernhard Herzog <[email protected]>
1099    
1100     * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
1101     the 'E' because it's less likely to interfere with other menu
1102     entries.
1103 bh 315 (MainWindow.build_menu): remove an incorrect comment.
1104 bh 313
1105 bh 311 2002-09-10 Bernhard Herzog <[email protected]>
1106    
1107     * Thuban/UI/mainwindow.py (MainWindow.Map): New.
1108     (_tool_command): Add sensitive parameter
1109     (_has_visible_map): Sensitivity callback to tools and other
1110     commands that require a visible map. Use it in map_zoom_in_tool,
1111     map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
1112     and map_full_extent
1113    
1114 bh 308 2002-09-06 Bernhard Herzog <[email protected]>
1115    
1116     * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
1117     VIEW_POSITION
1118    
1119 tkoester 403 2002-09-04 Frank Koormann <[email protected]>
1120 frank 306
1121     * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
1122    
1123 bh 302 2002-09-02 Bernhard Herzog <[email protected]>
1124    
1125 bh 304 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
1126     wxWindows already and our implementation doesn't work correctly
1127     with wxGTK 2.3:
1128     (MapCanvas.__init__): Remove the instance variable
1129     (MapCanvas.OnPaint): Always call do_redraw when there's a map to
1130     be drawin
1131     (MapCanvas.OnIdle): Removed.
1132    
1133 bh 302 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
1134     a parameter to determine the size of the rectangle.
1135     (MapCanvas.find_shape_at): Create the box around the point on a
1136     layer by layer basis and make the size depend on the shape type.
1137     This solves a problem with the selection of point shapes at the
1138     border of the layer's bounding box
1139    
1140 bh 292 2002-08-30 Bernhard Herzog <[email protected]>
1141    
1142 bh 300 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
1143     for the sensitivity of remove layer.
1144     (_can_remove_layer): New. Sensitivity callback for remove layer
1145     (Command layer_remove): Use _can_remove_layer
1146    
1147     * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
1148     determine whether a given layer can be deleted.
1149    
1150 bh 297 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
1151     (MapCanvas.do_redraw): Get rid of the unused update_region
1152     instance variable
1153    
1154 bh 294 * Thuban/UI/view.py: Add/update some doc-strings.
1155    
1156 bh 292 * test/: new subdirectory with a bunch of unit tests.
1157    
1158     * test/README, test/test_table.py, test/test_save.py,
1159     test/test_menu.py, test/test_load.py: Initial set of tests and
1160     brief instructions on how to run them
1161    
1162 bh 287 2002-08-29 Bernhard Herzog <[email protected]>
1163    
1164 bh 291 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
1165     arcs with multiple parts.
1166    
1167 bh 289 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
1168     Handle degenrate rectangles.
1169    
1170 bh 287 * Thuban/Model/table.py: Make writing records work correctly:
1171     (Table.__init__): Keep track of whether the DBF is open for
1172     writing
1173     (Table.write_record): Open the DBF file for writing when necessary
1174    
1175 bh 285 2002-08-27 Bernhard Herzog <[email protected]>
1176    
1177     * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
1178     dbf files only for reading by default. Use a new writable dbf
1179     object for writing.
1180    
1181 bh 278 2002-08-26 Bernhard Herzog <[email protected]>
1182    
1183 bh 282 * Thuban/UI/mainwindow.py: Refactor the context creation:
1184     (MainWindow.Context): New method to return a context
1185     (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
1186     new method
1187    
1188 bh 278 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
1189     layer table specific code from TableGrid into LayerTableGrid
1190     (TableFrame, LayerTableFrame): Split the layer table specific code
1191     from TableFrame into LayerTableFrame
1192 bh 280 (LayerTableGrid.select_shape): Remove a debug print
1193 bh 278
1194     * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
1195     LayerTableFrame
1196    
1197 bh 277 2002-08-23 Bernhard Herzog <[email protected]>
1198    
1199     * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
1200     absolute filename.
1201    
1202 bh 269 2002-08-22 Bernhard Herzog <[email protected]>
1203    
1204 bh 275 * Thuban/Model/table.py (Table.write_record): New method to write
1205     records.
1206 tkoester 403 (Table.__init__): Open the DBF file for writing too.
1207 bh 275
1208     * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
1209     into the underlying table.
1210    
1211     * extensions/shapelib/shapefil.h (DBFCommit),
1212     extensions/shapelib/dbfopen.c (DBFCommit): New API function to
1213     commit any changes made to the DBF file.
1214    
1215 bh 271 * Thuban/UI/mainwindow.py (make_check_current_tool)
1216     (_tool_command): Put the code that generates the "checked"
1217     callback into a separate function so that we can reuse it
1218     elsewhere
1219    
1220 bh 269 * Thuban/Model/save.py (Saver): New class to handle serializing a
1221     session into an XML file. The main reason to introduce a class is
1222     that applications built on Thuban can derive from it so that they
1223     can save additional information in a session file.
1224     (save_session): Delegate almost all the work to the Saver class.
1225     Rename the filename argument to file because it may be a file like
1226     object now.
1227    
1228     * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
1229     code. Remove the little test code which would be executed when the
1230     module is run as a script which didn't work anymore since it can't
1231     import the other Thuban modules.
1232     (ProcessSession, load_session): Refactor the ProcessSession to
1233     have one method for each element start and end tag so that derived
1234     classes can easily override the processing of individual tags.
1235     Also, always parse with namespaces enabled because applications
1236     built on top of Thuban will likely use namespaces if they extend
1237     the session file format.
1238    
1239 bh 266 2002-08-21 Bernhard Herzog <[email protected]>
1240    
1241     * setup.py (ThubanInstall.run): Don't repr install_lib_orig
1242     because thubaninit_contents will do it for us.
1243    
1244 tkoester 403 2002-08-16 Jan-Oliver Wagner <[email protected]>
1245 jan 265
1246     * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
1247     tree window already open
1248    
1249 bh 259 2002-08-15 Bernhard Herzog <[email protected]>
1250    
1251 bh 263 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
1252     with self.
1253    
1254     * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
1255     when we have actually captured it.
1256    
1257 bh 259 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
1258     shapefile and destroy the table.
1259    
1260     * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
1261    
1262 bh 254 2002-08-14 Bernhard Herzog <[email protected]>
1263    
1264 bh 256 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
1265     instance variable columns
1266     (RecordTable.GetTypeName): row and col may be negative in some
1267     cases.
1268    
1269 bh 254 * setup.py (InstallLocal.initialize_options)
1270     (InstallLocal.finalize_options, InstallLocal.user_options): New
1271     option create-init-file to build a thubaninit.py when running
1272     install_local
1273     (InstallLocal.run): Create the thubaninit.py module when requested
1274     (thubaninit_contents): Split the template into several parts and
1275     create a new function thubaninit_contents that creates the
1276     contents of a thubaninit module.
1277     (ThubanInstall.run): Use the new function to create the thubaninit
1278     module.
1279    
1280 bh 252 2002-07-30 Bernhard Herzog <[email protected]>
1281    
1282     * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
1283     cleanup.
1284     (ThubanApplication.MainLoop): Extend to automatically call OnExit.
1285    
1286     * Thuban/Model/session.py (Session.Destroy): Don't bypass the
1287     direct base class' Destroy method.
1288    
1289     * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
1290     layers.
1291     (Map.Destroy): Destroy the label_layer as well and call the
1292     inherited Desatroymethod first so that no more messages are
1293     issued.
1294     (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
1295     message if the stacking order actually has changed. Add
1296     doc-strings.
1297     (Map.BoundingBox): Correct the doc-string.
1298     (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
1299     (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
1300    
1301     * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
1302     all labels.
1303    
1304 bh 247 2002-07-29 Bernhard Herzog <[email protected]>
1305    
1306     * Thuban/Model/map.py (Map.subscribe_layer_channels)
1307     (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
1308     to a layer's channels into separate methods.
1309     (Map.RemoveLayer, Map.AddLayer): Call the new methods
1310     (Map.Destroy): Unsubscribe from a layer's channels before
1311     destroying it.
1312    
1313     * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
1314     selected_layer parameter to searched_layer which is the layer to
1315     search in.
1316     (MapCanvas.SelectShapeAt): New parameter layer to restrict the
1317     search to that layer. Return the selected layer and shape.
1318    
1319     * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
1320     typo
1321    
1322 bh 238 2002-07-24 Bernhard Herzog <[email protected]>
1323    
1324 bh 243 * Thuban/UI/application.py (ThubanApplication.create_session):
1325     Extend the doc string.
1326     (ThubanApplication.subscribe_session)
1327     (ThubanApplication.unsubscribe_session): New methods to
1328     subscribe/unsubscribe to/from session channels.
1329     (ThubanApplication.SetSession): Call the new methods here.
1330     (ThubanApplication.maps_changed, ThubanApplication.set_map):
1331     Renamed set_map to maps_changed. Its now a subscriber for
1332     MAPS_CHANGED.
1333    
1334     * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
1335     x-coordinate in case of simple clicks
1336    
1337     * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
1338     don't pass it as a parameter
1339    
1340     * Thuban/Model/session.py (Session.RemoveMap): New
1341    
1342 bh 238 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1343     window size into a parameter.
1344    
1345 bh 235 2002-07-23 Bernhard Herzog <[email protected]>
1346    
1347 bh 237 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1348     just commands.
1349    
1350 bh 235 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1351     parameter list a bit to allow setting the window title and the
1352     initial message in the status bar. Update the callers.
1353    
1354     * Thuban/UI/application.py (ThubanApplication.OnInit)
1355     (ThubanApplication.CreateMainWindow): Put the mainwindow
1356     instantiation into a separate method so that it can be overridden
1357     by a subclass.
1358    
1359 bh 230 2002-07-19 Bernhard Herzog <[email protected]>
1360    
1361 bh 234 * Thuban/Model/session.py: Issue a CHANGED message every time
1362     another changed message is issued to make it easier to get
1363     notified of changes.
1364     (Session): Update the doc string
1365     (Session.forward): Issue changed-events as CHANGED as well.
1366     (Session.changed): Overwrite the inherited version to issue
1367     CHANGED events as well.
1368    
1369     * Thuban/UI/tree.py: We can now simply subscribe to the session's
1370     CHANGED channel to be informed of changes.
1371     (SessionTreeCtrl.session_channels): Not needed any longer.
1372 tkoester 403 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1373 bh 234 Only have to (un)subscribe CHANGED
1374    
1375     * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1376    
1377 bh 230 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1378     for the wxPython locale bug to __init__.py so that it's
1379     automatically executed by anybody using UI code from Thuban.
1380    
1381 bh 225 2002-07-18 Bernhard Herzog <[email protected]>
1382    
1383 bh 228 * Thuban/UI/main.py (main): app no longer needs to be global
1384    
1385     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1386     as parameter and store it in an instance variable
1387     (MainWindow.invoke_command, MainWindow.update_command_ui)
1388     (MainWindow.save_modified_session, MainWindow.NewSession)
1389     (MainWindow.OpenSession, MainWindow.SaveSession)
1390     (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1391     application object.
1392    
1393     * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1394     the main window with self.
1395    
1396 bh 225 * Thuban/UI/context.py: New module with the context class
1397    
1398     * Thuban/UI/command.py (Command): Update doc string.
1399    
1400     * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1401     MainWindow.update_command_ui): Pass an instance of the context
1402     class to the command's methods
1403     (check_current_tool, call_method): Handle the new context
1404     implementation
1405    
1406     * Examples/simple_extensions/simple_tool.py (simple_tool,
1407     check_simple_tool): Handle the new context implementation
1408    
1409     * Examples/simple_extensions/simple_command.py (simple_command):
1410     Handle the new context implementation. Update the comments about
1411     the context.
1412    
1413     * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1414     doc-string
1415     (ThubanApplication.Session): New method to return the session
1416     object
1417    
1418     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1419     interactor's selected_layer may not be a layer of the current
1420     session when the tree is updated while a new session is being set.
1421    
1422 bh 217 2002-07-17 Bernhard Herzog <[email protected]>
1423    
1424     * Thuban/UI/tree.py (color_string): Removed. No longer used.
1425     (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1426     update_tree into update_tree and add_items. The tree now uses a
1427     more generic way to display the contents of the tree.
1428     (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1429    
1430     * Thuban/Model/layer.py (Layer.TreeInfo),
1431     Thuban/Model/extension.py (Extension.TreeInfo),
1432     Thuban/Model/map.py (Map.TreeInfo),
1433 tkoester 403 Thuban/Model/session.py (Session.TreeInfo):
1434 bh 217 Add TreeInfo methods to implement the new tree view update scheme
1435    
1436 bh 216 2002-07-16 Bernhard Herzog <[email protected]>
1437    
1438     * Thuban/UI/application.py: Don't use "import from" for the
1439     MainWindow. It can't always be resolved.
1440     (ThubanApplication.OnInit): change reference to MainWindow
1441     accordingly.
1442    
1443     * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1444     completely
1445    
1446 bh 213 2002-07-10 Bernhard Herzog <[email protected]>
1447    
1448     * setup.py (create_init_module): New configurable variable whose
1449     default depends on the platform we're running on.
1450     (ThubanInstall.initialize_options): Initialize
1451     self.create_init_module from the global create_init_module
1452     (ThubanInstall.user_options): indictate that the options
1453     create-init-module and init-module-dir have arguments.
1454    
1455     * setup.py: In the setup call change the version number to include
1456     cvs.
1457    
1458     * MANIFEST.in: Add the files in Examples
1459    
1460 bh 205 2002-07-09 Bernhard Herzog <[email protected]>
1461    
1462 bh 210 * setup.py: In the setup call, use the thuban homepage as the
1463     value of the url parameter.
1464    
1465 bh 208 * Examples: New subdirectory for examples.
1466    
1467     * Examples/simple_extensions/simple_tool.xpm,
1468     Examples/simple_extensions/simple_tool.py,
1469     Examples/simple_extensions/simple_command.py,
1470     Examples/simple_extensions/README: Simple examples showing how to
1471     add new commands and tools.
1472    
1473 bh 207 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1474     bdist_rpm that we also have an install script.
1475     (bdist_inno): Add 2002 to the copyright notice.
1476    
1477 bh 205 * setup.py: Create a file in python's site-packages directory to
1478     make installation of Thuban as a library easier.
1479     (ThubanInstall.user_options): Add two new options,
1480     create-init-module and init-module-dir
1481     (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1482     filenames for installation in the default directories.
1483     (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1484     the inherited methods to capture some filenames before they're
1485     transformed too much by distutils.
1486     (ThubanInstall.run): Create the init module if requested.
1487     (ThubanInstall.thuban_init_filename): New method to return the
1488     full name of the init module.
1489     (ThubanInstall.get_outputs): Append the filename of the init
1490     module.
1491    
1492 bh 202 2002-07-08 Bernhard Herzog <[email protected]>
1493    
1494 bh 205 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1495     handle the prefix properly which means that the default for the
1496     installation prefix should be /usr for RPMs and /usr/local when
1497     doing a normal source install.
1498     (bdist_rpm_install_script): Script to override the default install
1499     commands in the specfile generated by the bdist_rpm command.
1500     (thuban_bdist_rpm.user_options): Add a prefix option
1501     (thuban_bdist_rpm.initialize_options): Init the prefix option.
1502     Create the script files for the spec files as empty files here
1503     (thuban_bdist_rpm._make_spec_file): Override the inherited method
1504     to fill the script files with content.
1505    
1506 bh 202 * Thuban/Model/save.py (relative_filename): Wrapper around
1507     Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1508     argument. save_session now automatically uses this version,
1509     solving a problem when saving to a relative filename.
1510    
1511     * setup.py: In the setup call, make sure that the library
1512     directories are under $prefix/lib not directly under $prefix.
1513    
1514 tkoester 403 2002-06-20 Jan-Oliver Wagner <[email protected]>
1515 jan 199
1516     * Thuban/Model/extension.py: new module to handle extension objects.
1517     * Thuban/Model/messages.py: new messages for extensions.
1518     * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
1519     Session.AddExtension): new for handling extensions.
1520     Also some other minor changes to round up extension handling.
1521     * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
1522     of Extension titles and title and names of its objects.
1523    
1524 bh 194 2002-05-29 Bernhard Herzog <[email protected]>
1525    
1526     * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1527 bh 202 the events for a command.
1528 bh 194 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
1529     Call bind_command_events to bind the events. add_toolbar_command
1530     can now bind events too so that it's possible to have commands
1531     that are only available through the toolbar.
1532     (MainWindow.init_ids): New instance variable events_bound to keep
1533     track of for which commands events have been bound.
1534    
1535 bh 190 2002-05-28 Bernhard Herzog <[email protected]>
1536    
1537     * Thuban/UI/menu.py: New module to build and manage menus.
1538    
1539     * Thuban/UI/mainwindow.py: Remove some unused imports.
1540     (MainWindow.__init__, main_menu): move the definition of the main
1541     menu from __init__ to the Menu instance main_menu.
1542     (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
1543     build the menu bar and sub-menus from a menu description.
1544    
1545     * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
1546     startup file
1547     (ThubanApplication.read_startup_files): New method to run
1548     ~/.thuban/thubanstart.py
1549    
1550 bh 192 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
1551     Move the toolbar definition to the Menu instance main_toolbar.
1552     (MainWindow.build_toolbar): New method to build the toolbar
1553     similar to the build_menu methods
1554    
1555 bh 184 2002-05-23 Bernhard Herzog <[email protected]>
1556    
1557 bh 186 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
1558     layer_outline_color. Fix it in the definition of the command too.
1559    
1560 bh 184 * Thuban/UI/command.py (Command): Fix typo in doc string
1561    
1562 bh 182 2002-05-22 Bernhard Herzog <[email protected]>
1563    
1564     * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
1565     in the docstring
1566    
1567 bh 175 2002-05-15 Bernhard Herzog <[email protected]>
1568    
1569 bh 180 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
1570     when the shapefile is empty.
1571     (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
1572     now return None for empty shapefiles. Update doc-strings.
1573    
1574     * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
1575     the layer's bbox being None.
1576    
1577     * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
1578     layer's bbox being None.
1579    
1580 bh 175 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
1581     necessary.
1582     (MapCanvas.__init__): New instance variables, last_selected_layer
1583     and last_selected_shape to determine how the selection has
1584     changed.
1585    
1586     * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
1587     AutoSizeColumns because it will cause a traversal of the entire
1588     table which for large .dbf files will take a very long time.
1589    
1590 bh 172 2002-05-14 Bernhard Herzog <[email protected]>
1591    
1592     * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
1593     maximum depth for the tree than shapelib does by default.
1594    
1595 bh 165 2002-05-10 Bernhard Herzog <[email protected]>
1596    
1597     * setup.py (py_modules): The shptree modules doesn't have a
1598     wrapper, so don't include it in the py_modules
1599    
1600 bh 163 2002-05-08 Bernhard Herzog <[email protected]>
1601    
1602     * extensions/shapelib/shptree.c (compare_ints): Make arguments
1603     const void * as in the qsort prototype
1604     (SHPTreeFindLikelyShapes): Remove some unused variables.
1605    
1606     * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
1607     maintains to redraw the window during a drag.
1608     (MapCanvas.unprojected_rect_around_point): New method to determine
1609     a small region around a point for hit-testing.
1610     (MapCanvas.find_shape_at): Only test the shapes in a small region
1611     around the point.
1612    
1613     * setup.py: Increment the version to 0.1.2
1614    
1615     * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
1616     debug print and set session to None after unsubscribing
1617    
1618 bh 146 2002-05-07 Bernhard Herzog <[email protected]>
1619    
1620 bh 154 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
1621     the file to have a .thuban extension.
1622    
1623 bh 152 * Thuban/UI/tree.py (session_channels): New class constant with
1624     all the session channels to subscribe to to update the tree
1625     (SessionTreeCtrl.session_changed): Remember the session so that we
1626     can unsubscribe properly. Use the new class constant to
1627     unsubscribe from the old session and subscribe to the new one.
1628     (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
1629     subscriptions of the SessionTreeCtrl.
1630     (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
1631    
1632     * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
1633     Session Tree" command to the file menu.
1634    
1635     * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
1636     as update_region to the renderer.
1637    
1638     * Thuban/UI/renderer.py
1639     (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
1640     update box is now directly a tuple, not a wxRect anymore.
1641    
1642     * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
1643     prints.
1644    
1645     2002-05-07 Bernhard Herzog <[email protected]>
1646    
1647 bh 146 * setup.py: Add the shptree extension module. See
1648     extensions/pyshapelib/ChangeLog for more details.
1649    
1650     * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
1651     extensions/shapelib/dbfopen.c: Really update to the versions of
1652     shapelib 1.2.9. For some reason it wasn't really done on
1653     2002-04-11.
1654    
1655     * extensions/shapelib/shptree.c: Modified version of shptree.c of
1656     shapelib 1.2.9. The only real difference is the use of qsort
1657     instead of a bubble sort implementation
1658    
1659     * Thuban/Model/layer.py (Layer.__init__): New instance variable
1660     shapetree to hold the shapelib quadtree for the shapefile
1661     (Layer.open_shapefile): Create the quad tree.
1662     (Layer.ShapesInRegion): New method to return the ids of shapes in
1663     a given region using the quad tree.
1664    
1665     * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
1666     comment
1667     (draw_polygon_shape): Accept both arcs and polygons.
1668     (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
1669     the api.
1670    
1671     * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
1672     return the shape ids to be rendered in a given layer.
1673     (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
1674     ids. Use draw_polygon_shape to draw arc shapes as well.
1675     (ScreenRenderer.RenderMap): New parameter for the rectangle that
1676     has to be updated
1677     (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
1678     calling it's ShapesInRegion method.
1679    
1680     * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
1681     update_region for the update region.
1682     (MapCanvas.OnPaint): Maintain the update region
1683     (MapCanvas.do_redraw): Pass the bounding box of the update_region
1684     to the renderer when drawing the bitmap. Reset the update_region.
1685    
1686 bh 129 2002-05-03 Bernhard Herzog <[email protected]>
1687    
1688 bh 131 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
1689     MainWindow.OpenSession): Change the file extension of the session
1690     files to .thuban
1691    
1692 bh 129 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
1693     Move the map channels to be forwarded by the session into the
1694 bh 146 class constant with forwarded_channels. Also add
1695     LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
1696     forwarded_channels
1697 bh 129
1698     * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
1699     typo and some rewording).
1700    
1701 bh 126 2002-05-02 Bernhard Herzog <[email protected]>
1702    
1703     * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
1704     around to speed up most redraws:
1705     (MapCanvas.__init__): New instance variable bitmap which holds the
1706     bitmap
1707     (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
1708     self.bitmap to draw.
1709     (MapCanvas.full_redraw): New method to force a full redraw
1710     including the bitmap
1711     (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
1712     make sure the bitmap is redrawn.
1713     (MapCanvas.projection_changed, MapCanvas.set_view_transform,
1714     MapCanvas.shape_selected): Call full_redraw instead of readraw to
1715     make sure the bitmap is redrawn.
1716     (MapCanvas.OnSize): New method to handle size events so that the
1717     bitmap can be redrawn.
1718    
1719 bh 124 2002-04-29 Bernhard Herzog <[email protected]>
1720    
1721     * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
1722     canvas' VIEW_POSITION event
1723     (MainWindow.view_position_changed): Handler for VIEW_POSITION.
1724     Update the text in the status-bar accordingly.
1725    
1726     * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
1727     (MapCanvas.__del__): Implement because Publisher.__del__ has to be
1728     called.
1729     (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
1730     current_position
1731     (MapCanvas.set_current_position): New method to set
1732     current_position. Issue a VIEW_POSITION event
1733     (MapCanvas.CurrentPosition): New public method to return the value
1734     of current_position. Should be called when the VIEW_POSITION event
1735     is processed.
1736     (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
1737     Update the position.
1738     (MapCanvas.OnLeaveWindow): Set the position to None.
1739    
1740     * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1741     position in the statusbar
1742    
1743 tkoester 403 2002-04-26 Frank Koormann <[email protected]>
1744 frank 120
1745     * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1746    
1747 tkoester 403 2002-04-24 Frank Koormann <[email protected]>
1748    
1749 frank 118 * Resources/Bitmaps/identify.xpm: shadow added
1750    
1751     * Resources/Bitmaps/fullextent.xpm: new
1752 jan 116
1753 tkoester 403 2002-04-22 Jan-Oliver Wagner <[email protected]>
1754 jan 116
1755 tkoester 403 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1756     box
1757 jan 114
1758 tkoester 403 2002-04-21 Jan-Oliver Wagner <[email protected]>
1759    
1760 jan 114 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1761    
1762     * Thuban/UI/tree.py (update_tree): added added map extent
1763    
1764     * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1765 tkoester 403 icon; added map_full_extend as tool
1766 jan 114
1767 tkoester 403 2002-04-19 Jan-Oliver Wagner <[email protected]>
1768 jan 107
1769     * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1770     saving _new_ sessions
1771    
1772     * Thuban/Model/session.py (create_empty_session): new session
1773     don't have a filename (set to None)
1774    
1775     * Thuban/UI/tree.py (update_tree): added filename and modified flag
1776    
1777     * Thuban/Model/load.py (ProcessSession): convert projection
1778     parameters from unicode to regular string
1779    
1780     * Data/iceland_sample.session: Added UTM Zone 26 projection.
1781    
1782 bh 100 2002-04-11 Bernhard Herzog <[email protected]>
1783    
1784     * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1785     extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1786     1.2.9
1787    
1788     * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1789     the pyshapelib directoy into the list of include dirs, so that
1790     pyshapelib_api.h can be found.
1791    
1792     * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1793     holds the pyshapelib C-API
1794     (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1795     pyshapelib_api to access the shapelib functions.
1796     (initwxproj): Import the c_api from the shapelib module and
1797     initialize pyshapelib_api.
1798    
1799 bh 89 2002-04-04 Bernhard Herzog <[email protected]>
1800    
1801 bh 91 * setup.py (thuban_bdist_rpm.initialize_options): Use
1802     initialize_options to create the scripts for the rpm.
1803    
1804 bh 89 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1805    
1806 bh 85 2002-04-03 Bernhard Herzog <[email protected]>
1807    
1808 bh 87 * setup.py: Increment version to 0.1.1
1809    
1810 bh 85 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1811     Layer" and "Remove Layer" commands from the layer menu to the map
1812     menu
1813    
1814 bh 83 2002-02-15 Bernhard Herzog <[email protected]>
1815    
1816     * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1817     argument (python <= 1.5.2 erroneously accepted multiuple
1818     arguments)
1819    
1820 bh 81 2002-02-04 Bernhard Herzog <[email protected]>
1821    
1822     * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1823     RecordGrid in the identifyview.
1824     (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1825     IdentifyListCtrl. The grid allows editing of the values.
1826    
1827     * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1828     implementing a grid for a single row of a thuban table.
1829    
1830     * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1831     layers by default. Easier to use than the previous default of only
1832     searching through the select layer which meant that if no layer
1833     was selected, you couldn't select a shape.
1834    
1835     * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1836    
1837     * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1838     stroke_width attribute
1839    
1840     * Thuban/Model/save.py (save_session): Write the new stroke_width
1841     attribute
1842    
1843     * Thuban/Model/load.py (ProcessSession.startElement): Read the
1844     stroke_width attribute
1845    
1846     * Thuban/Model/layer.py (Layer.__init__): New parameter and
1847     instance variable stroke_width
1848     (Layer.SetStrokeWidth): Set the stroke_width.
1849    
1850 bh 72 2002-02-01 Bernhard Herzog <[email protected]>
1851    
1852     * extensions/thuban/wxproj.cpp (project_points): Fix two
1853     off-by-one errors in the last loop that joins the various parts
1854     together.
1855    
1856 bh 71 2002-01-14 Bernhard Herzog <[email protected]>
1857    
1858     * setup.py (data_dist.make_distribution): Fix some typos
1859    
1860 bh 70 2001-09-18 Bernhard Herzog <[email protected]>
1861    
1862     * README: Slight tweaking in preparation for the 0.1 release
1863    
1864     * setup.cfg: Add section for sdist to create both tgz and zip
1865     archives
1866    
1867     * setup.py: increase version number to 0.1
1868     (data_dist): New command class for data distribution
1869    
1870 bh 64 2001-09-14 Bernhard Herzog <[email protected]>
1871    
1872 bh 70 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1873     Handle the case of no layer (i.e. layer is None) properly.
1874    
1875 tkoester 403 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1876 bh 70 Set the initial selection of the combo boxes to reflect the
1877     projection we're starting with in a way that works on windows,
1878     too.
1879    
1880 bh 64 * Thuban/Lib/connector.py (Connector.print_connections): Print the
1881     puiblisher's ids in hex to make it easier to compare them to the
1882     standard repr of python methods
1883    
1884     * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1885     messages
1886    
1887 bh 59 2001-09-13 Bernhard Herzog <[email protected]>
1888    
1889 bh 64 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1890     deselect the layer if no layer is selected
1891    
1892 bh 59 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1893     idle time when there actually is something to draw. If there's
1894     nothing to draw simply clear the window
1895     (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1896     (MapCanvas.SetMap): force a redraw in all cases because
1897     FitMapToWindow doesn't always do it.
1898     (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1899     specify the point to move into the center of the window
1900     (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1901     dragged, zoon in/out by a factor of 2
1902 bh 64 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1903     index, i.e. reversed drawing order) so that objects appearing to
1904     be in from of others are selected first. This is probably mostly
1905     relevant for point shapes where the symbols used may overlap
1906 bh 59
1907     * Thuban/Model/session.py (create_empty_session): Unset the
1908     modified bit before returning it
1909    
1910     * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1911     create_empty_session session to create the new, empty session.
1912    
1913     * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1914     the tool bitmaps.
1915     (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1916     the code that asks whether the session should be saved into the
1917     new method save_modified_session.
1918     (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1919     method to save modified session here too.
1920    
1921 bh 55 2001-09-11 Bernhard Herzog <[email protected]>
1922    
1923     * setup.py (InnoIconItem): fix typo
1924    
1925     (thuban_bdist_inno.run):
1926     (bdist_inno.run): Move the decision not to create symlinks on
1927     non-nt platforms to thuban_bdist_inno and do it unconditinally
1928     since we never want to create the symlinks here
1929    
1930 bh 48 2001-09-10 Bernhard Herzog <[email protected]>
1931    
1932 bh 53 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1933     identify view immediately
1934    
1935     * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1936     and SelectableRecordListCtrl that implement the code shared by the
1937     identify view and the label dialog
1938    
1939     * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1940     new class RecordListCtrl
1941    
1942     * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1943     return value of GetValue is None instead of using it as a boolean
1944     directly so that Zero numbers are handled properly.
1945     (LabelListCtrl): Derive from the new class
1946     SelectableRecordListCtrl
1947    
1948 bh 48 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1949     (Proj4Dialog.dialogLayout): Make the window resizable and set the
1950     size of the text control explicitly to make the sizers work on
1951     both Windows and X.
1952    
1953 bh 44 2001-09-07 Bernhard Herzog <[email protected]>
1954    
1955     * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1956     that can limit the search to the currently selected layer.
1957     (MapCanvas.SelectShapeAt): Make sure that the currently selected
1958     layer stays selected even when no shape is found
1959 bh 46 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1960     height do nothing (avoids zero division errors)
1961 bh 44
1962 bh 32 2001-09-06 Bernhard Herzog <[email protected]>
1963    
1964 bh 42 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
1965     Correct the spelling of SessionTreeCtrl. dabbrev is too damn
1966     convenient :-)
1967     (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
1968     a new instvar layer_to_item to map layers to tree items
1969     (SessionTreeCtrl.layer_selected): Select the appropriate tree item
1970     to match the current selection in the interactor
1971    
1972 bh 40 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
1973     (Interactor.HasSelectedLayer): New methods to query the current
1974     selection
1975    
1976     * Thuban/UI/mainwindow.py (MainWindow.current_layer):
1977     (MainWindow.has_selected_layer): Simply call the appropriate
1978     interactor method
1979    
1980     * Thuban/UI/mainwindow.py (MainWindow.__init__):
1981     (MainWindow.LayerShowTable):
1982     (MainWindow.identify_view_on_demand): Store the interactor in an
1983     instvar and use that reference instead of going through main.app
1984    
1985 tkoester 403 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1986     * Thuban/UI/application.py (ThubanApplication.OnInit):
1987 bh 40 * Thuban/UI/main.py (main): Create the session tree view in main
1988     with the new mainwindow method ShowSessionTree and not directly
1989     the application's OnInit method
1990    
1991     * Thuban/UI/tree.py (myTreeCtrlPanel):
1992     (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
1993     TreeCtrl isntead of a panel. This affects most method since we now
1994     refer to self instead of self.tree
1995     (SessionTreeView): New class implementing a non-modal dialog
1996     showing the session tree.
1997    
1998 bh 35 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
1999     layer to the tableview dialog.
2000    
2001     * Thuban/UI/tableview.py: Add some doc-strings
2002 tkoester 403 (TableGrid):
2003 bh 35 (TableGrid.OnRangeSelect):
2004     (TableGrid.OnSelectCell):
2005     (TableFrame.__init__):
2006     (TableFrame.row_selected):
2007     Selecting rows in the grid view now updates the selected shapes
2008     through the TableFrame. To achieve this we derive TableGrid from
2009     Publisher and introduce the message type ROW_SELECTED which the
2010     TableFrame subscribes to and which is issued by OnRangeSelect and
2011     OnSelectCell
2012    
2013     (DataTable.SelectRow): Removed because it's no longer needed in
2014     the row/shape selection scheme
2015    
2016 bh 32 * Thuban/UI/dialogs.py: New file implementing common classes for
2017     dialogs
2018    
2019     * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
2020     the SELECTED_SHAPE message anymore. This is now handled by the
2021     parent.
2022     (TableGrid.select_shape): Only update the selection if the shape
2023     is not None.
2024     (TableFrame): Inherit from the new NonModalDialog class.
2025     (TableFrame.__init__, TableFrame.select_shape): Handle the
2026     SELECT_SHAPE message.
2027     (TableFrame.OnClose): Extend the inherited method to unsubscribe
2028     SELECT_SHAPE
2029    
2030     * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
2031     (MainWindow.add_dialog):
2032     (MainWindow.dialog_open):
2033     (MainWindow.remove_dialog):
2034     (MainWindow.get_open_dialog): New methods to maintain a dictionary
2035     of opened non-modal dialogs.
2036    
2037     (MainWindow.__init__): Initialize the new non-modal dictionary
2038     management code
2039     (MainWindow.LayerShowTable): maintain separate dialogs for each
2040     table using the non-modal dialog management code to only open a
2041     view once for each table.
2042    
2043     (MainWindow.IdentifyTool):
2044     (MainWindow.__init__):
2045     (MainWindow.identify_view_on_demand): Don't open the identify view
2046     in IdentifyTool anymore. This will be done automatically by the
2047     new method identify_view_on_demand which handles the
2048     SELECTED_SHAPE message so that the identify view will be opened on
2049     demand
2050    
2051     * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
2052     the interactor argument. The SELECTED_SHAPE message is now handled
2053     by the parent.
2054     (IdentifyView.__init__): Add the interactor argument so that we
2055     can handle the SELECTED_SHAPE message here
2056     (IdentifyView.selected_shape): New method to handle the
2057     SELECTED_SHAPE messages
2058    
2059     * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
2060     NonModalDialog class
2061     (IdentifyView.OnClose): Extend the inherited version to
2062     unsubscribe SELECT_SHAPE
2063    
2064     * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
2065    
2066 bh 26 2001-09-05 Bernhard Herzog <[email protected]>
2067    
2068     * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
2069 tkoester 403
2070 bh 26 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
2071     interactor to pass through to the MapCanvas
2072 tkoester 403
2073 bh 26 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
2074     argument to the MainWindow constructor to get rid of the ugly hack
2075     that made main.app available early just so that the mapcanvas
2076     could access the interactor object.
2077    
2078 bh 19 2001-09-04 Bernhard Herzog <[email protected]>
2079    
2080 bh 22 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
2081     that runs a modal message box
2082     (MainWindow.OnClose): Use the new method
2083     (MainWindow.RemoveLayer): Just do nothing in case no layer is
2084     selected. The command should be grayed out anyway, so there's no
2085     need to pop up a message box.
2086     (MainWindow.AddLayer): Pop up a message box with an error message
2087     if the shape file can't be opened
2088    
2089     * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
2090     immediately. This will cause an exception in case the file can't
2091     be opened and we can display an appropriate message.
2092    
2093 bh 19 * MANIFEST.in: Add extensions/pyprojection/LICENSE
2094    
2095     * setup.py (thuban_bdist_rpm): New class implementing a Thuban
2096     specific bdist_rpm command.
2097    
2098     * Thuban/UI/main.py: Catch ImportError exceptions when importing
2099     the locale module because it may not be available on some
2100     installations.
2101    
2102     * extensions/pyprojection/LICENSE: Copy of the license text in
2103     Projection.i. Having it in a separate file makes it easier to
2104     refer to license text in e.g. RPMs
2105    
2106 bh 18 2001-09-03 Bernhard Herzog <[email protected]>
2107    
2108 bh 19 * setup.py: use wx-config instead of wxgtk-config because it's
2109     more generic
2110    
2111     * setup.py (ThubanInstall.get_outputs): Add the symlink in
2112     <prefix>/bin to the outputs
2113     (ThubanInstall.link_file): New method to link files. We need this
2114     because the standard copy_files refuses to link non-existing
2115     files.
2116     (ThubanInstall.run): Remove the leading install root from the
2117     script filename if an install root was specified and use the new
2118     link_file method
2119 tkoester 403
2120 bh 18 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
2121     the window when the first layer is added to the map.
2122    
2123     * setup.py (ThubanInstall.run): Honor the build root (self.root)
2124     when linking thuban.py to <prefix>/bin
2125    
2126 bh 16 2001-08-31 Bernhard Herzog <[email protected]>
2127    
2128     * setup.py: In the setup call, the install parameters shouldn't
2129     have trailing slashes because distutils on non-posix platforms
2130     doesn't like that. The same applies to other directories like
2131     "Resources/Bitmaps"
2132    
2133     In the configuration section for nt, move the wxWindows directory
2134     optins into the part clearly marked as editable.
2135    
2136     (InstallLocal.initialize_options):
2137     (InstallLocal.user_options): remove the currently unused debug
2138     flag
2139     (thuban_build_py.find_all_modules): Add this method so that it
2140     works for our case of having packages and modules in one
2141     distribution as well.
2142     (ThubanInstall.initialize_options):
2143     (ThubanInstall.finalize_options):
2144     (ThubanInstall.user_options):
2145     (ThubanInstall.boolean_options): Add new options, do-symlink and
2146     extra files. Since these are the first ThubanInstall specific
2147     options, override user_options and boolean_options
2148     (ThubanInstall.run): Honor the new do-symlink and extra-files
2149     options.
2150     (ThubanInstall.get_outputs): Add to override the base-class's
2151     version and add the extra-files to the outputs
2152     (bdist_inno): New class for windows distributions with Inno Setup
2153     (InnoIconItem): Helper class for bdist_inno
2154     (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
2155     this together with the appropriate parameters, to the setup call.
2156 tkoester 403
2157 bh 16 * setup.cfg (bdist_inno): added new section for the inno setup
2158     installer
2159    
2160     * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
2161     changing_selection to avoid recursive selection events when
2162     modifying the selection in response to a selection event.
2163     (myTreeCtrlPanel.normalize_selection): Set the new inst var when
2164     changing the tree's selection.
2165     (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
2166     we're not being called indirectly from normalize_selection.
2167    
2168     * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
2169     event.Check only if the command is actuall checkable.
2170     (MainWindow.__init__): Call the toolbar's Realize method to make
2171     sure that the items are actually shown
2172    
2173 bh 7 2001-08-28 Bernhard Herzog <[email protected]>
2174    
2175 bh 9 * setup.py: Fix some doc strings
2176    
2177 bh 7 * ChangeLog: started
2178    

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26