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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 317 - (show annotations)
Thu Sep 12 18:46:09 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 41525 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26