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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 664 - (show annotations)
Mon Apr 14 16:22:08 2003 UTC (21 years, 11 months ago) by frank
Original Path: trunk/thuban/ChangeLog
File size: 90096 byte(s)
Icon updates.

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26