/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Annotation of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 308 - (hide annotations)
Fri Sep 6 10:01:27 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 40773 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26