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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 554 - (show annotations)
Tue Mar 25 16:20:51 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 72202 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26