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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 287 - (show annotations)
Thu Aug 29 11:22:07 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 38829 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26