/[thuban]/branches/WIP-pyshapelib-bramz/ChangeLog
ViewVC logotype

Contents of /branches/WIP-pyshapelib-bramz/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 302 - (show annotations)
Mon Sep 2 15:59:27 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 40207 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26