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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26