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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 636 - (hide annotations)
Thu Apr 10 14:34:33 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 87205 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26