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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 277 - (show annotations)
Fri Aug 23 15:25:14 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 37764 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26