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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 557 - (show annotations)
Wed Mar 26 11:04:57 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 73584 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26