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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 322 - (show annotations)
Fri Sep 13 14:21:58 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 42218 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26