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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 291 - (show annotations)
Thu Aug 29 14:11:38 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 39019 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26