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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 538 - (show annotations)
Fri Mar 14 20:45:39 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 70044 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26