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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 311 - (show annotations)
Tue Sep 10 16:45:32 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 41131 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26