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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 497 - (show annotations)
Mon Mar 10 11:02:26 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 62682 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26