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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 375 - (show annotations)
Mon Jan 27 14:20:40 2003 UTC (22 years, 1 month ago) by jan
Original Path: trunk/thuban/ChangeLog
File size: 47135 byte(s)
preparation for i18n

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26