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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 402 - (hide annotations)
Tue Feb 11 15:19:47 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 50402 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26