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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 297 - (show annotations)
Fri Aug 30 16:10:57 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 39476 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26