/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Annotation of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26