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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 315 - (show annotations)
Wed Sep 11 15:18:19 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 41376 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26