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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 300 - (show annotations)
Fri Aug 30 17:41:11 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 39804 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26