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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 567 - (show annotations)
Wed Mar 26 11:51:01 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 73969 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26