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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 300 - (hide annotations)
Fri Aug 30 17:41:11 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 39804 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26