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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26