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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 387 - (hide annotations)
Mon Feb 3 11:44:41 2003 UTC (22 years, 1 month ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 48129 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26