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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 396 - (hide annotations)
Mon Feb 10 15:28:17 2003 UTC (22 years ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 49628 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26