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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 278 - (show annotations)
Mon Aug 26 12:50:23 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 38129 byte(s)
* Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
layer table specific code from TableGrid into LayerTableGrid
(TableFrame, LayerTableFrame): Split the layer table specific code
from TableFrame into LayerTableFrame

* Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
LayerTableFrame

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26