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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 285 - (show annotations)
Tue Aug 27 14:08:43 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 38578 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26