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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 269 - (show annotations)
Thu Aug 22 10:25:55 2002 UTC (22 years, 6 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 37065 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26