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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 289 - (show annotations)
Thu Aug 29 13:31:54 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 38924 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26