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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 541 - (show annotations)
Wed Mar 19 16:03:12 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 70475 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26