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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26