/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Contents of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log


Revision 275 - (show annotations)
Thu Aug 22 16:26:05 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 37630 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26