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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 280 - (show annotations)
Mon Aug 26 15:06:24 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 38182 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26