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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 306 - (show annotations)
Wed Sep 4 12:39:04 2002 UTC (22 years, 6 months ago) by frank
Original Path: trunk/thuban/ChangeLog
File size: 40647 byte(s)
Updated Resources/Bitmaps/fullextent.xpm

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26