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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 259 - (show annotations)
Thu Aug 15 12:48:13 2002 UTC (22 years, 7 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 35532 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26