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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 586 - (show annotations)
Tue Apr 1 10:41:16 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 76268 byte(s)
update ChangeLOg

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26