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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 399 - (show annotations)
Tue Feb 11 14:24:14 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 49923 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26