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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 405 - (show annotations)
Fri Feb 14 17:40:41 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 50559 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26