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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 313 - (hide annotations)
Wed Sep 11 13:59:46 2002 UTC (22 years, 5 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 41321 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26