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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 591 - (show annotations)
Wed Apr 2 15:03:30 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 76658 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26