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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 647 - (show annotations)
Fri Apr 11 14:26:41 2003 UTC (21 years, 10 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 88974 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26