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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 626 - (hide annotations)
Wed Apr 9 10:08:27 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 85588 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26