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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 423 - (show annotations)
Thu Feb 20 16:23:59 2003 UTC (22 years ago) by frank
Original Path: trunk/thuban/ChangeLog
File size: 53299 byte(s)
Force minimal size of identify and label dialogs.

1 2003-02-20 Frank Koormann <[email protected]>
2
3 Force minimal size of identify and label dialogs. The autosizing
4 looked too ugly.
5
6 * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
7 * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
8 Set size of listctrl.
9 * Thuban/UI/identifyview.py (IdentifyView.__init__):
10 Set size of dialog.
11
12 2003-02-19 Jonathan Coles <[email protected]>
13
14 * test/test_classification.py, test/test_layer.py,
15 test/test_load.py, test/test_map.py, test/test_session.py:
16 Updated the tests to use the new functions that are in the
17 respective classes.
18
19 * Thuban/Model/classification.py (Classification):
20 Uses the new ClassData* classes. Modification messages are
21 passed up to the parent layer (if it exists).
22 (ClassData): New class to encapsulate the common data in each
23 classification property.
24 (ClassDataDefault): Represents the Default class. data.
25 (ClassDataPoint): Represents a single class. data point
26 (ClassDataRange): Represents a class. range
27 (ClassDataMap): Represents a class. map (unused).
28
29 * Thuban/Model/color.py: Added Color.None to represent something
30 with no color. Color.Black represents the color black.
31 (NoColor): Helper class derived from Color to represent something
32 with no color.
33
34 * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
35 stroke_width attributes. Made the 'classification' attribute private.
36 New methods for setting/getting the classification.
37
38 * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
39 to get the classifcation and use the new ClassData* classes to
40 hold the classification data. Use Str2Num to convert numbers
41 properly.
42
43 * Thuban/Model/save.py (Saver): Use new Color and Classification
44 methods
45
46 * Thuban/UI/classifier.py (ClassGrid): New class to represent a
47 custom grid.
48 (ClassTable): Support for editing Values and Labels and for
49 changing what type (point or range) of data is stored in each
50 property based on how the user enters the data.
51 (Classifier): Support for saving the new classifications and
52 launching the dialog to edit a property.
53 (SelectPropertiesDialog): New class for editing the visual
54 properties of a classification (stroke color, width, and fill color)
55 (ClassPreviewer): Took the Draw method from ClassRenderer and
56 made most of it into this new class. Intend to use this class in
57 the SelectPropertiesDialog for previewing changes.
58
59 * Thuban/UI/renderer.py: Use new Color and Classification methods.
60
61 * Thuban/UI/tree.py: Formatting changes.
62
63 * Doc/thuban.dtd: Add 'label' element
64
65 * Thuban/common.py: New. Contains common routines used throughout
66 the code.
67 (Str2Num): Takes a string and converts it to the "best" type of
68 number.
69
70 2003-02-14 Bernhard Herzog <[email protected]>
71
72 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
73 dragging flag is always set to 0 even when the tool implementation
74 raises an exception
75
76 2003-02-11 Bernhard Herzog <[email protected]>
77
78 * Thuban/UI/application.py (ThubanApplication.splash_screen): New
79 method to create a splash screen.
80 (ThubanApplication.ShowMainWindow): New. Show the main window.
81 Needed so the splash screen can display the mainwindow
82 (ThubanApplication.OnInit): Call the
83 new splash_screen method to determine whether the application
84 should display a splash screen. If it displays a splash screen do
85 not immediately show the main window.
86
87 2003-02-11 Jonathan Coles <[email protected]>
88
89 * Thuban/Model/classification.py: Added import line to fix
90 feature conflicts between running on python2.2 and python2.1.
91
92 * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
93 onto the clinfo parameter, so removed the deepcopy().
94
95 2003-02-10 Jonathan Coles <[email protected]>
96
97 * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
98 Added element_open variable to track opening and closing of tags
99 so that tags that don't span more than one line are closed with
100 /> instead of </tag_name>. Use the GetDefault*() methods of
101 the Classification class.
102
103 * Thuban/Model/classification.py (Classificaton): Added set and
104 get methods for the default data. The class also takes a layer
105 reference so that modification messages can be sent. Fixed the
106 methods to use the new ClassData class.
107 (ClassData): New class to encapsulate the classification data
108
109 * Thuban/Model/layer.py (Layer): Remove the
110 Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
111 SetDefault*() methods on the layer's classification object.
112 (Layer.__init__): Use the new SetDefault*() methods in the
113 Classification class.
114
115 * Thuban/Model/load.py (ProcessSession): Use the new ClassData
116 object instead of a dictionary.
117
118 * Thuban/UI/classifier.py (ClassRenderer): New class to
119 draw the classifications in the dialog box's table.
120 (Classifier): Modified to use the ClassRenderer class.
121
122 * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
123 methods of the Classification class.
124
125 * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
126 of the ClassData class.
127
128 * test/test_classification.py, test/test_layer.py,
129 test/test_map.py, test/test_session.py: Fix the tests to work
130 with the above code changes.
131
132 2003-02-03 Jonathan Coles <[email protected]>
133
134 * Thuban/Model/classification.py (Classification): Added getNull()
135 to return the NullData reference
136
137 * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
138 Layer.SetStrokeWidth): Modified these functions to change the
139 null data in the classification rather than keep these values
140 directly in the Layer class. Menu options to change these values
141 work again.
142
143 2003-01-28 Jonathan Coles <[email protected]>
144
145 * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
146 Fixed crashing problem on some systems. Dialog box shows
147 classification data.
148
149 * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
150 Colors in the tree view.
151
152 * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
153 the tree info for classifications. Commented out unnecessary lines.
154
155 * Thuban/Model/classification.py (Classification.TreeInfo): New
156 function to add information about the classification into the
157 tree view.
158
159 2003-01-27 Jan-Oliver Wagner <[email protected]>
160
161 * Thuban/__init__.py (_): New.
162
163 * Thuban/Model/classification.py, Thuban/Model/extension.py,
164 Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
165 Thuban/Model/session.py, Thuban/UI/application.py,
166 Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
167 Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
168 Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
169 Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
170 Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
171
172 2003-01-27 Jonathan Coles <[email protected]>
173
174 * Thuban/Model/layer.py: Classification initialization calls.
175
176 * Thuban/Model/classification.py: Created class to encapsulate
177 a layer classification. Supports specific data points and
178 ranges.
179
180 * Thuban/Model/load.py: Added support for loading classification
181 information.
182
183 * Thuban/Model/save.py: Added support for saving classification
184 information.
185
186 * Thuban/UI/classifier.py: Initial class for a dialog box for
187 specifying classification information.
188
189 * Thuban/UI/mainwindows.py: Support for opening the classifier
190 dialog.
191
192 * Thuban/UI/renderer.py: Support for drawing a layer with the
193 classification information.
194
195 * Data/iceland_sample_class.thuban: iceland_sample with
196 classification data.
197
198 * test/test_classification: Tests for the Classification class.
199
200 2002-12-09 Bernhard Herzog <[email protected]>
201
202 * test/test_command.py: New. Tests for the command classes.
203
204 * Thuban/UI/command.py (ToolCommand): New class for tool commands.
205 (Command.IsTool): New method to distinguish between command
206 switching tools and other commands.
207
208 * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
209 the tool to avoid direct assignments to instance variables
210 (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
211 (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
212 change the tool
213
214 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
215 active tool's command turns insensitive, disable the tool.
216 (_tool_command): Use the new ToolCommand class
217
218 * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
219 SelectTool method to change the tool
220 (iconfile): Use the ToolCommand class
221
222 2002-12-03 Bernhard Herzog <[email protected]>
223
224 * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
225 the case of selected items that are not children of Layers or Maps
226 properly. Previously this bug would trigger an assertion in
227 wxWindows.
228
229 2002-11-06 Frank Koormann <[email protected]>
230
231 * Thuban/UI/mainwindow.py: Altered the order of tools in the
232 toolbar: First now are all navigation tools (Zoom In/Out, Pan,
233 Full Extent).
234
235 2002-10-23 Bernhard Herzog <[email protected]>
236
237 * setup.py (setup call): version now 0.1.3
238
239 * MANIFEST.in: Add the files in test/
240
241 * test/README: Add note about tests requiring the iceland data
242
243 * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
244 copyright notice.
245
246 2002-10-18 Bernhard Herzog <[email protected]>
247
248 * test/test_map.py
249 (TestMapWithContents.test_projected_bounding_box): Use an explicit
250 epsilon.
251
252 * test/support.py (FloatComparisonMixin.assertFloatEqual)
253 (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
254 message if the assertion fails and don't return the return value
255 of self.assert_. In assertFloatSeqEqual the return meant that not
256 all items of the sequence were compared.
257
258 2002-09-20 Bernhard Herzog <[email protected]>
259
260 * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
261
262 * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
263
264 * test/test_map.py (TestMapWithContents.test_tree_info): Create
265 the string with the bounding box on the fly because of platform
266 differences in the way %g is handled.
267
268 * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
269 DBFfile too because Thuban layers can't yet cope missing DBF
270 files.
271
272 2002-09-20 Bernhard Herzog <[email protected]>
273
274 * test/test_menu.py: Use initthuban instead of
275 add_thuban_dir_to_path to initialize Thuban.
276
277 * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
278 Mixin class for float comparisons
279 (SubscriberMixin): New. Mixin class to test messages sent through
280 the Connector class
281
282 * test/README: Fix a typo and add the -v flag to the command for
283 individual tests
284
285 * test/test_session.py: New. Test cases for Thuban.Model.session
286
287 * test/test_proj.py: New. Test cases for Thuban.Model.proj
288
289 * test/test_map.py: New. Test cases for Thuban.Model.map
290
291 * test/test_layer.py: New. Test cases for Thuban.Model.layer
292
293 * test/test_label.py: New. Test cases for Thuban.Model.label
294
295 * test/test_connector.py: New. Test cases for Thuban.Lib.connector
296
297 * test/test_color.py: New. Test cases for Thuban.Model.color
298
299 * test/test_base.py: New. Test cases for Thuban.Model.base
300
301 2002-09-13 Bernhard Herzog <[email protected]>
302
303 * Thuban/Model/session.py (Session.forwarded_channels): Forward
304 the CHANGED channel too.
305
306 * Thuban/Model/map.py (Map.forwarded_channels): Forward the
307 CHANGED channel too.
308 (Map.__init__): Call the Modifiable constructor as well.
309
310 * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
311 event if the modified flag changes.
312 (Modifiable.changed): Tweak the doc-string.
313
314 * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
315 (MainWindow.set_position_text): Put the code that puts the text
316 with the mouse position into the status bar into the new method
317 set_position_text so that it can overwritten in derived classes.
318
319 2002-09-12 Bernhard Herzog <[email protected]>
320
321 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
322 message box on the main window.
323
324 2002-09-11 Bernhard Herzog <[email protected]>
325
326 * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
327 the 'E' because it's less likely to interfere with other menu
328 entries.
329 (MainWindow.build_menu): remove an incorrect comment.
330
331 2002-09-10 Bernhard Herzog <[email protected]>
332
333 * Thuban/UI/mainwindow.py (MainWindow.Map): New.
334 (_tool_command): Add sensitive parameter
335 (_has_visible_map): Sensitivity callback to tools and other
336 commands that require a visible map. Use it in map_zoom_in_tool,
337 map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
338 and map_full_extent
339
340 2002-09-06 Bernhard Herzog <[email protected]>
341
342 * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
343 VIEW_POSITION
344
345 2002-09-04 Frank Koormann <[email protected]>
346
347 * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
348
349 2002-09-02 Bernhard Herzog <[email protected]>
350
351 * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
352 wxWindows already and our implementation doesn't work correctly
353 with wxGTK 2.3:
354 (MapCanvas.__init__): Remove the instance variable
355 (MapCanvas.OnPaint): Always call do_redraw when there's a map to
356 be drawin
357 (MapCanvas.OnIdle): Removed.
358
359 * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
360 a parameter to determine the size of the rectangle.
361 (MapCanvas.find_shape_at): Create the box around the point on a
362 layer by layer basis and make the size depend on the shape type.
363 This solves a problem with the selection of point shapes at the
364 border of the layer's bounding box
365
366 2002-08-30 Bernhard Herzog <[email protected]>
367
368 * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
369 for the sensitivity of remove layer.
370 (_can_remove_layer): New. Sensitivity callback for remove layer
371 (Command layer_remove): Use _can_remove_layer
372
373 * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
374 determine whether a given layer can be deleted.
375
376 * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
377 (MapCanvas.do_redraw): Get rid of the unused update_region
378 instance variable
379
380 * Thuban/UI/view.py: Add/update some doc-strings.
381
382 * test/: new subdirectory with a bunch of unit tests.
383
384 * test/README, test/test_table.py, test/test_save.py,
385 test/test_menu.py, test/test_load.py: Initial set of tests and
386 brief instructions on how to run them
387
388 2002-08-29 Bernhard Herzog <[email protected]>
389
390 * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
391 arcs with multiple parts.
392
393 * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
394 Handle degenrate rectangles.
395
396 * Thuban/Model/table.py: Make writing records work correctly:
397 (Table.__init__): Keep track of whether the DBF is open for
398 writing
399 (Table.write_record): Open the DBF file for writing when necessary
400
401 2002-08-27 Bernhard Herzog <[email protected]>
402
403 * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
404 dbf files only for reading by default. Use a new writable dbf
405 object for writing.
406
407 2002-08-26 Bernhard Herzog <[email protected]>
408
409 * Thuban/UI/mainwindow.py: Refactor the context creation:
410 (MainWindow.Context): New method to return a context
411 (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
412 new method
413
414 * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
415 layer table specific code from TableGrid into LayerTableGrid
416 (TableFrame, LayerTableFrame): Split the layer table specific code
417 from TableFrame into LayerTableFrame
418 (LayerTableGrid.select_shape): Remove a debug print
419
420 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
421 LayerTableFrame
422
423 2002-08-23 Bernhard Herzog <[email protected]>
424
425 * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
426 absolute filename.
427
428 2002-08-22 Bernhard Herzog <[email protected]>
429
430 * Thuban/Model/table.py (Table.write_record): New method to write
431 records.
432 (Table.__init__): Open the DBF file for writing too.
433
434 * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
435 into the underlying table.
436
437 * extensions/shapelib/shapefil.h (DBFCommit),
438 extensions/shapelib/dbfopen.c (DBFCommit): New API function to
439 commit any changes made to the DBF file.
440
441 * Thuban/UI/mainwindow.py (make_check_current_tool)
442 (_tool_command): Put the code that generates the "checked"
443 callback into a separate function so that we can reuse it
444 elsewhere
445
446 * Thuban/Model/save.py (Saver): New class to handle serializing a
447 session into an XML file. The main reason to introduce a class is
448 that applications built on Thuban can derive from it so that they
449 can save additional information in a session file.
450 (save_session): Delegate almost all the work to the Saver class.
451 Rename the filename argument to file because it may be a file like
452 object now.
453
454 * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
455 code. Remove the little test code which would be executed when the
456 module is run as a script which didn't work anymore since it can't
457 import the other Thuban modules.
458 (ProcessSession, load_session): Refactor the ProcessSession to
459 have one method for each element start and end tag so that derived
460 classes can easily override the processing of individual tags.
461 Also, always parse with namespaces enabled because applications
462 built on top of Thuban will likely use namespaces if they extend
463 the session file format.
464
465 2002-08-21 Bernhard Herzog <[email protected]>
466
467 * setup.py (ThubanInstall.run): Don't repr install_lib_orig
468 because thubaninit_contents will do it for us.
469
470 2002-08-16 Jan-Oliver Wagner <[email protected]>
471
472 * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
473 tree window already open
474
475 2002-08-15 Bernhard Herzog <[email protected]>
476
477 * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
478 with self.
479
480 * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
481 when we have actually captured it.
482
483 * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
484 shapefile and destroy the table.
485
486 * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
487
488 2002-08-14 Bernhard Herzog <[email protected]>
489
490 * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
491 instance variable columns
492 (RecordTable.GetTypeName): row and col may be negative in some
493 cases.
494
495 * setup.py (InstallLocal.initialize_options)
496 (InstallLocal.finalize_options, InstallLocal.user_options): New
497 option create-init-file to build a thubaninit.py when running
498 install_local
499 (InstallLocal.run): Create the thubaninit.py module when requested
500 (thubaninit_contents): Split the template into several parts and
501 create a new function thubaninit_contents that creates the
502 contents of a thubaninit module.
503 (ThubanInstall.run): Use the new function to create the thubaninit
504 module.
505
506 2002-07-30 Bernhard Herzog <[email protected]>
507
508 * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
509 cleanup.
510 (ThubanApplication.MainLoop): Extend to automatically call OnExit.
511
512 * Thuban/Model/session.py (Session.Destroy): Don't bypass the
513 direct base class' Destroy method.
514
515 * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
516 layers.
517 (Map.Destroy): Destroy the label_layer as well and call the
518 inherited Desatroymethod first so that no more messages are
519 issued.
520 (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
521 message if the stacking order actually has changed. Add
522 doc-strings.
523 (Map.BoundingBox): Correct the doc-string.
524 (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
525 (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
526
527 * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
528 all labels.
529
530 2002-07-29 Bernhard Herzog <[email protected]>
531
532 * Thuban/Model/map.py (Map.subscribe_layer_channels)
533 (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
534 to a layer's channels into separate methods.
535 (Map.RemoveLayer, Map.AddLayer): Call the new methods
536 (Map.Destroy): Unsubscribe from a layer's channels before
537 destroying it.
538
539 * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
540 selected_layer parameter to searched_layer which is the layer to
541 search in.
542 (MapCanvas.SelectShapeAt): New parameter layer to restrict the
543 search to that layer. Return the selected layer and shape.
544
545 * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
546 typo
547
548 2002-07-24 Bernhard Herzog <[email protected]>
549
550 * Thuban/UI/application.py (ThubanApplication.create_session):
551 Extend the doc string.
552 (ThubanApplication.subscribe_session)
553 (ThubanApplication.unsubscribe_session): New methods to
554 subscribe/unsubscribe to/from session channels.
555 (ThubanApplication.SetSession): Call the new methods here.
556 (ThubanApplication.maps_changed, ThubanApplication.set_map):
557 Renamed set_map to maps_changed. Its now a subscriber for
558 MAPS_CHANGED.
559
560 * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
561 x-coordinate in case of simple clicks
562
563 * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
564 don't pass it as a parameter
565
566 * Thuban/Model/session.py (Session.RemoveMap): New
567
568 * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
569 window size into a parameter.
570
571 2002-07-23 Bernhard Herzog <[email protected]>
572
573 * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
574 just commands.
575
576 * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
577 parameter list a bit to allow setting the window title and the
578 initial message in the status bar. Update the callers.
579
580 * Thuban/UI/application.py (ThubanApplication.OnInit)
581 (ThubanApplication.CreateMainWindow): Put the mainwindow
582 instantiation into a separate method so that it can be overridden
583 by a subclass.
584
585 2002-07-19 Bernhard Herzog <[email protected]>
586
587 * Thuban/Model/session.py: Issue a CHANGED message every time
588 another changed message is issued to make it easier to get
589 notified of changes.
590 (Session): Update the doc string
591 (Session.forward): Issue changed-events as CHANGED as well.
592 (Session.changed): Overwrite the inherited version to issue
593 CHANGED events as well.
594
595 * Thuban/UI/tree.py: We can now simply subscribe to the session's
596 CHANGED channel to be informed of changes.
597 (SessionTreeCtrl.session_channels): Not needed any longer.
598 (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
599 Only have to (un)subscribe CHANGED
600
601 * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
602
603 * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
604 for the wxPython locale bug to __init__.py so that it's
605 automatically executed by anybody using UI code from Thuban.
606
607 2002-07-18 Bernhard Herzog <[email protected]>
608
609 * Thuban/UI/main.py (main): app no longer needs to be global
610
611 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
612 as parameter and store it in an instance variable
613 (MainWindow.invoke_command, MainWindow.update_command_ui)
614 (MainWindow.save_modified_session, MainWindow.NewSession)
615 (MainWindow.OpenSession, MainWindow.SaveSession)
616 (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
617 application object.
618
619 * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
620 the main window with self.
621
622 * Thuban/UI/context.py: New module with the context class
623
624 * Thuban/UI/command.py (Command): Update doc string.
625
626 * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
627 MainWindow.update_command_ui): Pass an instance of the context
628 class to the command's methods
629 (check_current_tool, call_method): Handle the new context
630 implementation
631
632 * Examples/simple_extensions/simple_tool.py (simple_tool,
633 check_simple_tool): Handle the new context implementation
634
635 * Examples/simple_extensions/simple_command.py (simple_command):
636 Handle the new context implementation. Update the comments about
637 the context.
638
639 * Thuban/UI/application.py (ThubanApplication.SetSession): Add
640 doc-string
641 (ThubanApplication.Session): New method to return the session
642 object
643
644 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
645 interactor's selected_layer may not be a layer of the current
646 session when the tree is updated while a new session is being set.
647
648 2002-07-17 Bernhard Herzog <[email protected]>
649
650 * Thuban/UI/tree.py (color_string): Removed. No longer used.
651 (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
652 update_tree into update_tree and add_items. The tree now uses a
653 more generic way to display the contents of the tree.
654 (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
655
656 * Thuban/Model/layer.py (Layer.TreeInfo),
657 Thuban/Model/extension.py (Extension.TreeInfo),
658 Thuban/Model/map.py (Map.TreeInfo),
659 Thuban/Model/session.py (Session.TreeInfo):
660 Add TreeInfo methods to implement the new tree view update scheme
661
662 2002-07-16 Bernhard Herzog <[email protected]>
663
664 * Thuban/UI/application.py: Don't use "import from" for the
665 MainWindow. It can't always be resolved.
666 (ThubanApplication.OnInit): change reference to MainWindow
667 accordingly.
668
669 * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
670 completely
671
672 2002-07-10 Bernhard Herzog <[email protected]>
673
674 * setup.py (create_init_module): New configurable variable whose
675 default depends on the platform we're running on.
676 (ThubanInstall.initialize_options): Initialize
677 self.create_init_module from the global create_init_module
678 (ThubanInstall.user_options): indictate that the options
679 create-init-module and init-module-dir have arguments.
680
681 * setup.py: In the setup call change the version number to include
682 cvs.
683
684 * MANIFEST.in: Add the files in Examples
685
686 2002-07-09 Bernhard Herzog <[email protected]>
687
688 * setup.py: In the setup call, use the thuban homepage as the
689 value of the url parameter.
690
691 * Examples: New subdirectory for examples.
692
693 * Examples/simple_extensions/simple_tool.xpm,
694 Examples/simple_extensions/simple_tool.py,
695 Examples/simple_extensions/simple_command.py,
696 Examples/simple_extensions/README: Simple examples showing how to
697 add new commands and tools.
698
699 * setup.cfg (bdist_rpm): Add the default value for prefix and tell
700 bdist_rpm that we also have an install script.
701 (bdist_inno): Add 2002 to the copyright notice.
702
703 * setup.py: Create a file in python's site-packages directory to
704 make installation of Thuban as a library easier.
705 (ThubanInstall.user_options): Add two new options,
706 create-init-module and init-module-dir
707 (ThubanInstall.expand_with_pure_python_dirs): New method to expand
708 filenames for installation in the default directories.
709 (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
710 the inherited methods to capture some filenames before they're
711 transformed too much by distutils.
712 (ThubanInstall.run): Create the init module if requested.
713 (ThubanInstall.thuban_init_filename): New method to return the
714 full name of the init module.
715 (ThubanInstall.get_outputs): Append the filename of the init
716 module.
717
718 2002-07-08 Bernhard Herzog <[email protected]>
719
720 * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
721 handle the prefix properly which means that the default for the
722 installation prefix should be /usr for RPMs and /usr/local when
723 doing a normal source install.
724 (bdist_rpm_install_script): Script to override the default install
725 commands in the specfile generated by the bdist_rpm command.
726 (thuban_bdist_rpm.user_options): Add a prefix option
727 (thuban_bdist_rpm.initialize_options): Init the prefix option.
728 Create the script files for the spec files as empty files here
729 (thuban_bdist_rpm._make_spec_file): Override the inherited method
730 to fill the script files with content.
731
732 * Thuban/Model/save.py (relative_filename): Wrapper around
733 Thuban.Lib.fileutil.relative_filename that accepts an empty dir
734 argument. save_session now automatically uses this version,
735 solving a problem when saving to a relative filename.
736
737 * setup.py: In the setup call, make sure that the library
738 directories are under $prefix/lib not directly under $prefix.
739
740 2002-06-20 Jan-Oliver Wagner <[email protected]>
741
742 * Thuban/Model/extension.py: new module to handle extension objects.
743 * Thuban/Model/messages.py: new messages for extensions.
744 * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
745 Session.AddExtension): new for handling extensions.
746 Also some other minor changes to round up extension handling.
747 * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
748 of Extension titles and title and names of its objects.
749
750 2002-05-29 Bernhard Herzog <[email protected]>
751
752 * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
753 the events for a command.
754 (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
755 Call bind_command_events to bind the events. add_toolbar_command
756 can now bind events too so that it's possible to have commands
757 that are only available through the toolbar.
758 (MainWindow.init_ids): New instance variable events_bound to keep
759 track of for which commands events have been bound.
760
761 2002-05-28 Bernhard Herzog <[email protected]>
762
763 * Thuban/UI/menu.py: New module to build and manage menus.
764
765 * Thuban/UI/mainwindow.py: Remove some unused imports.
766 (MainWindow.__init__, main_menu): move the definition of the main
767 menu from __init__ to the Menu instance main_menu.
768 (MainWindow.build_menu_bar, MainWindow.build_menu): New methods to
769 build the menu bar and sub-menus from a menu description.
770
771 * Thuban/UI/application.py (ThubanApplication.OnInit): Read the
772 startup file
773 (ThubanApplication.read_startup_files): New method to run
774 ~/.thuban/thubanstart.py
775
776 * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
777 Move the toolbar definition to the Menu instance main_toolbar.
778 (MainWindow.build_toolbar): New method to build the toolbar
779 similar to the build_menu methods
780
781 2002-05-23 Bernhard Herzog <[email protected]>
782
783 * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
784 layer_outline_color. Fix it in the definition of the command too.
785
786 * Thuban/UI/command.py (Command): Fix typo in doc string
787
788 2002-05-22 Bernhard Herzog <[email protected]>
789
790 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
791 in the docstring
792
793 2002-05-15 Bernhard Herzog <[email protected]>
794
795 * Thuban/Model/layer.py (Layer.open_shapefile): Set bbox to None
796 when the shapefile is empty.
797 (Layer.BoundingBox, Layer.LatLongBoundingBox): Both methods may
798 now return None for empty shapefiles. Update doc-strings.
799
800 * Thuban/Model/map.py (Map.BoundingBox): Add doc-string. Deal with
801 the layer's bbox being None.
802
803 * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): Deal with the
804 layer's bbox being None.
805
806 * Thuban/UI/view.py (MapCanvas.shape_selected): Only redraw when
807 necessary.
808 (MapCanvas.__init__): New instance variables, last_selected_layer
809 and last_selected_shape to determine how the selection has
810 changed.
811
812 * Thuban/UI/tableview.py (TableGrid.__init__): Do not call
813 AutoSizeColumns because it will cause a traversal of the entire
814 table which for large .dbf files will take a very long time.
815
816 2002-05-14 Bernhard Herzog <[email protected]>
817
818 * Thuban/Model/layer.py (Layer.open_shapefile): Choose a better
819 maximum depth for the tree than shapelib does by default.
820
821 2002-05-10 Bernhard Herzog <[email protected]>
822
823 * setup.py (py_modules): The shptree modules doesn't have a
824 wrapper, so don't include it in the py_modules
825
826 2002-05-08 Bernhard Herzog <[email protected]>
827
828 * extensions/shapelib/shptree.c (compare_ints): Make arguments
829 const void * as in the qsort prototype
830 (SHPTreeFindLikelyShapes): Remove some unused variables.
831
832 * Thuban/UI/view.py (PanTool.MouseMove): Use the bitmap the view
833 maintains to redraw the window during a drag.
834 (MapCanvas.unprojected_rect_around_point): New method to determine
835 a small region around a point for hit-testing.
836 (MapCanvas.find_shape_at): Only test the shapes in a small region
837 around the point.
838
839 * setup.py: Increment the version to 0.1.2
840
841 * Thuban/UI/tree.py (SessionTreeCtrl.unsubscribe_all): Remove a
842 debug print and set session to None after unsubscribing
843
844 2002-05-07 Bernhard Herzog <[email protected]>
845
846 * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
847 the file to have a .thuban extension.
848
849 * Thuban/UI/tree.py (session_channels): New class constant with
850 all the session channels to subscribe to to update the tree
851 (SessionTreeCtrl.session_changed): Remember the session so that we
852 can unsubscribe properly. Use the new class constant to
853 unsubscribe from the old session and subscribe to the new one.
854 (SessionTreeCtrl.unsubscribe_all): New method to unsubscribe all
855 subscriptions of the SessionTreeCtrl.
856 (SessionTreeView.OnClose): Call the tree's unsubscribe_all method.
857
858 * Thuban/UI/mainwindow.py (MainWindow.__init__): Add the "Show
859 Session Tree" command to the file menu.
860
861 * Thuban/UI/view.py (MapCanvas.do_redraw): Pass the entire bitmap
862 as update_region to the renderer.
863
864 * Thuban/UI/renderer.py
865 (ScreenRenderer.layer_ids, ScreenRenderer.draw_shape_layer): The
866 update box is now directly a tuple, not a wxRect anymore.
867
868 * Thuban/Model/layer.py (Layer.ShapesInRegion): Remove some debug
869 prints.
870
871 2002-05-07 Bernhard Herzog <[email protected]>
872
873 * setup.py: Add the shptree extension module. See
874 extensions/pyshapelib/ChangeLog for more details.
875
876 * extensions/shapelib/shpopen.c, extensions/shapelib/shapefil.h,
877 extensions/shapelib/dbfopen.c: Really update to the versions of
878 shapelib 1.2.9. For some reason it wasn't really done on
879 2002-04-11.
880
881 * extensions/shapelib/shptree.c: Modified version of shptree.c of
882 shapelib 1.2.9. The only real difference is the use of qsort
883 instead of a bubble sort implementation
884
885 * Thuban/Model/layer.py (Layer.__init__): New instance variable
886 shapetree to hold the shapelib quadtree for the shapefile
887 (Layer.open_shapefile): Create the quad tree.
888 (Layer.ShapesInRegion): New method to return the ids of shapes in
889 a given region using the quad tree.
890
891 * extensions/thuban/wxproj.cpp (project_points): Fix some typos in
892 comment
893 (draw_polygon_shape): Accept both arcs and polygons.
894 (initwxproj): Use the new PYSHAPELIB_IMPORT_API macro to import
895 the api.
896
897 * Thuban/UI/renderer.py (MapRenderer.layer_ids): New method to
898 return the shape ids to be rendered in a given layer.
899 (MapRenderer.draw_shape_layer): Call layer_ids to get the list of
900 ids. Use draw_polygon_shape to draw arc shapes as well.
901 (ScreenRenderer.RenderMap): New parameter for the rectangle that
902 has to be updated
903 (ScreenRenderer.layer_ids): Make use of the layer's quadtree by
904 calling it's ShapesInRegion method.
905
906 * Thuban/UI/view.py (MapCanvas.__init__): New instance variable
907 update_region for the update region.
908 (MapCanvas.OnPaint): Maintain the update region
909 (MapCanvas.do_redraw): Pass the bounding box of the update_region
910 to the renderer when drawing the bitmap. Reset the update_region.
911
912 2002-05-03 Bernhard Herzog <[email protected]>
913
914 * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
915 MainWindow.OpenSession): Change the file extension of the session
916 files to .thuban
917
918 * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
919 Move the map channels to be forwarded by the session into the
920 class constant with forwarded_channels. Also add
921 LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
922 forwarded_channels
923
924 * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
925 typo and some rewording).
926
927 2002-05-02 Bernhard Herzog <[email protected]>
928
929 * Thuban/UI/view.py: Keep the temporary bitmap used during drawing
930 around to speed up most redraws:
931 (MapCanvas.__init__): New instance variable bitmap which holds the
932 bitmap
933 (MapCanvas.do_redraw): Redraw self.bitmap if necessary. Use
934 self.bitmap to draw.
935 (MapCanvas.full_redraw): New method to force a full redraw
936 including the bitmap
937 (MapCanvas.SetMap): Subscribe full_redraw instead of redraw to
938 make sure the bitmap is redrawn.
939 (MapCanvas.projection_changed, MapCanvas.set_view_transform,
940 MapCanvas.shape_selected): Call full_redraw instead of readraw to
941 make sure the bitmap is redrawn.
942 (MapCanvas.OnSize): New method to handle size events so that the
943 bitmap can be redrawn.
944
945 2002-04-29 Bernhard Herzog <[email protected]>
946
947 * Thuban/UI/mainwindow.py (MainWindow.__init__): Subscribe to the
948 canvas' VIEW_POSITION event
949 (MainWindow.view_position_changed): Handler for VIEW_POSITION.
950 Update the text in the status-bar accordingly.
951
952 * Thuban/UI/view.py (MapCanvas): Derive from Publisher as well
953 (MapCanvas.__del__): Implement because Publisher.__del__ has to be
954 called.
955 (MapCanvas.__init__): Bind EVT_LEAVE_WINDOW too. Initialize
956 current_position
957 (MapCanvas.set_current_position): New method to set
958 current_position. Issue a VIEW_POSITION event
959 (MapCanvas.CurrentPosition): New public method to return the value
960 of current_position. Should be called when the VIEW_POSITION event
961 is processed.
962 (MapCanvas.OnLeftDown, MapCanvas.OnLeftUp, MapCanvas.OnMotion):
963 Update the position.
964 (MapCanvas.OnLeaveWindow): Set the position to None.
965
966 * Thuban/UI/messages.py (VIEW_POSITION): New message for the
967 position in the statusbar
968
969 2002-04-26 Frank Koormann <[email protected]>
970
971 * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
972
973 2002-04-24 Frank Koormann <[email protected]>
974
975 * Resources/Bitmaps/identify.xpm: shadow added
976
977 * Resources/Bitmaps/fullextent.xpm: new
978
979 2002-04-22 Jan-Oliver Wagner <[email protected]>
980
981 * Thuban/UI/tree.py (update_tree): added test for None on map bounding
982 box
983
984 2002-04-21 Jan-Oliver Wagner <[email protected]>
985
986 * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
987
988 * Thuban/UI/tree.py (update_tree): added added map extent
989
990 * Thuban/UI/mainwindow.py (_method_command): extended by parameter
991 icon; added map_full_extend as tool
992
993 2002-04-19 Jan-Oliver Wagner <[email protected]>
994
995 * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
996 saving _new_ sessions
997
998 * Thuban/Model/session.py (create_empty_session): new session
999 don't have a filename (set to None)
1000
1001 * Thuban/UI/tree.py (update_tree): added filename and modified flag
1002
1003 * Thuban/Model/load.py (ProcessSession): convert projection
1004 parameters from unicode to regular string
1005
1006 * Data/iceland_sample.session: Added UTM Zone 26 projection.
1007
1008 2002-04-11 Bernhard Herzog <[email protected]>
1009
1010 * extensions/shapelib/shapefil.h, extensions/shapelib/shpopen.c,
1011 extensions/shapelib/dbfopen.c: Update to the versions of shapelib
1012 1.2.9
1013
1014 * setup.py (Lib.wxproj extension): Don't link shpopen.c and put
1015 the pyshapelib directoy into the list of include dirs, so that
1016 pyshapelib_api.h can be found.
1017
1018 * extensions/thuban/wxproj.cpp (pyshapelib_api): New variable that
1019 holds the pyshapelib C-API
1020 (draw_polygon_shape, point_in_polygon_shape, shape_centroid): Use
1021 pyshapelib_api to access the shapelib functions.
1022 (initwxproj): Import the c_api from the shapelib module and
1023 initialize pyshapelib_api.
1024
1025 2002-04-04 Bernhard Herzog <[email protected]>
1026
1027 * setup.py (thuban_bdist_rpm.initialize_options): Use
1028 initialize_options to create the scripts for the rpm.
1029
1030 * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1031
1032 2002-04-03 Bernhard Herzog <[email protected]>
1033
1034 * setup.py: Increment version to 0.1.1
1035
1036 * Thuban/UI/mainwindow.py (MainWindow.__init__): Move the "Add
1037 Layer" and "Remove Layer" commands from the layer menu to the map
1038 menu
1039
1040 2002-02-15 Bernhard Herzog <[email protected]>
1041
1042 * Thuban/Model/layer.py (Layer.Shape): list append only takes one
1043 argument (python <= 1.5.2 erroneously accepted multiuple
1044 arguments)
1045
1046 2002-02-04 Bernhard Herzog <[email protected]>
1047
1048 * Thuban/UI/identifyview.py (IdentifyGridCtrl): New class to use a
1049 RecordGrid in the identifyview.
1050 (IdentifyView.__init__): Use IdentifyGridCtrl instead of
1051 IdentifyListCtrl. The grid allows editing of the values.
1052
1053 * Thuban/UI/controls.py (RecordTable, RecordGridCtrl): New classes
1054 implementing a grid for a single row of a thuban table.
1055
1056 * Thuban/UI/view.py (MapCanvas.SelectShapeAt): Search through all
1057 layers by default. Easier to use than the previous default of only
1058 searching through the select layer which meant that if no layer
1059 was selected, you couldn't select a shape.
1060
1061 * Thuban/UI/tableview.py (TableGrid.__init__): Fix typo
1062
1063 * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Honour the
1064 stroke_width attribute
1065
1066 * Thuban/Model/save.py (save_session): Write the new stroke_width
1067 attribute
1068
1069 * Thuban/Model/load.py (ProcessSession.startElement): Read the
1070 stroke_width attribute
1071
1072 * Thuban/Model/layer.py (Layer.__init__): New parameter and
1073 instance variable stroke_width
1074 (Layer.SetStrokeWidth): Set the stroke_width.
1075
1076 2002-02-01 Bernhard Herzog <[email protected]>
1077
1078 * extensions/thuban/wxproj.cpp (project_points): Fix two
1079 off-by-one errors in the last loop that joins the various parts
1080 together.
1081
1082 2002-01-14 Bernhard Herzog <[email protected]>
1083
1084 * setup.py (data_dist.make_distribution): Fix some typos
1085
1086 2001-09-18 Bernhard Herzog <[email protected]>
1087
1088 * README: Slight tweaking in preparation for the 0.1 release
1089
1090 * setup.cfg: Add section for sdist to create both tgz and zip
1091 archives
1092
1093 * setup.py: increase version number to 0.1
1094 (data_dist): New command class for data distribution
1095
1096 2001-09-14 Bernhard Herzog <[email protected]>
1097
1098 * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1099 Handle the case of no layer (i.e. layer is None) properly.
1100
1101 * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1102 Set the initial selection of the combo boxes to reflect the
1103 projection we're starting with in a way that works on windows,
1104 too.
1105
1106 * Thuban/Lib/connector.py (Connector.print_connections): Print the
1107 puiblisher's ids in hex to make it easier to compare them to the
1108 standard repr of python methods
1109
1110 * Thuban/Model/map.py (Map.Destroy): Unsubscribe the label_layer
1111 messages
1112
1113 2001-09-13 Bernhard Herzog <[email protected]>
1114
1115 * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1116 deselect the layer if no layer is selected
1117
1118 * Thuban/UI/view.py (MapCanvas.OnPaint): Only delay drawing to
1119 idle time when there actually is something to draw. If there's
1120 nothing to draw simply clear the window
1121 (MapCanvas.do_redraw): Call dc.EndDrawing and add some comments.
1122 (MapCanvas.SetMap): force a redraw in all cases because
1123 FitMapToWindow doesn't always do it.
1124 (MapCanvas.ZoomFactor): Add an optional parameter, center, to
1125 specify the point to move into the center of the window
1126 (ZoomOutTool.MouseUp, ZoomInTool.MouseUp): If the mouse wasn't
1127 dragged, zoon in/out by a factor of 2
1128 (MapCanvas.find_shape_at): Iterate backwards (i.e. with decreasing
1129 index, i.e. reversed drawing order) so that objects appearing to
1130 be in from of others are selected first. This is probably mostly
1131 relevant for point shapes where the symbols used may overlap
1132
1133 * Thuban/Model/session.py (create_empty_session): Unset the
1134 modified bit before returning it
1135
1136 * Thuban/UI/mainwindow.py (MainWindow.NewSession): Use
1137 create_empty_session session to create the new, empty session.
1138
1139 * Thuban/UI/mainwindow.py (MainWindow.__init__): Set the size of
1140 the tool bitmaps.
1141 (MainWindow.OnClose, MainWindow.save_modified_session): Separate
1142 the code that asks whether the session should be saved into the
1143 new method save_modified_session.
1144 (MainWindow.OpenSession, MainWindow.NewSession): Use the new
1145 method to save modified session here too.
1146
1147 2001-09-11 Bernhard Herzog <[email protected]>
1148
1149 * setup.py (InnoIconItem): fix typo
1150
1151 (thuban_bdist_inno.run):
1152 (bdist_inno.run): Move the decision not to create symlinks on
1153 non-nt platforms to thuban_bdist_inno and do it unconditinally
1154 since we never want to create the symlinks here
1155
1156 2001-09-10 Bernhard Herzog <[email protected]>
1157
1158 * Thuban/UI/mainwindow.py (MainWindow.IdentifyTool): Popup the
1159 identify view immediately
1160
1161 * Thuban/UI/controls.py: New file with two classes RecordListCtrl
1162 and SelectableRecordListCtrl that implement the code shared by the
1163 identify view and the label dialog
1164
1165 * Thuban/UI/identifyview.py (IdentifyListCtrl): Derive from the
1166 new class RecordListCtrl
1167
1168 * Thuban/UI/labeldialog.py (LabelDialog.OnOK): Check whether the
1169 return value of GetValue is None instead of using it as a boolean
1170 directly so that Zero numbers are handled properly.
1171 (LabelListCtrl): Derive from the new class
1172 SelectableRecordListCtrl
1173
1174 * Thuban/UI/proj4dialog.py (Proj4Dialog.__init__):
1175 (Proj4Dialog.dialogLayout): Make the window resizable and set the
1176 size of the text control explicitly to make the sizers work on
1177 both Windows and X.
1178
1179 2001-09-07 Bernhard Herzog <[email protected]>
1180
1181 * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1182 that can limit the search to the currently selected layer.
1183 (MapCanvas.SelectShapeAt): Make sure that the currently selected
1184 layer stays selected even when no shape is found
1185 (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1186 height do nothing (avoids zero division errors)
1187
1188 2001-09-06 Bernhard Herzog <[email protected]>
1189
1190 * Thuban/UI/tree.py (SessionTreeCtrl, SessionTreeView.__init__):
1191 Correct the spelling of SessionTreeCtrl. dabbrev is too damn
1192 convenient :-)
1193 (SessionTreeCtrl.__init__, SessionTreeCtrl.update_tree): Introduce
1194 a new instvar layer_to_item to map layers to tree items
1195 (SessionTreeCtrl.layer_selected): Select the appropriate tree item
1196 to match the current selection in the interactor
1197
1198 * Thuban/UI/interactor.py (Interactor.SelectedLayer):
1199 (Interactor.HasSelectedLayer): New methods to query the current
1200 selection
1201
1202 * Thuban/UI/mainwindow.py (MainWindow.current_layer):
1203 (MainWindow.has_selected_layer): Simply call the appropriate
1204 interactor method
1205
1206 * Thuban/UI/mainwindow.py (MainWindow.__init__):
1207 (MainWindow.LayerShowTable):
1208 (MainWindow.identify_view_on_demand): Store the interactor in an
1209 instvar and use that reference instead of going through main.app
1210
1211 * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1212 * Thuban/UI/application.py (ThubanApplication.OnInit):
1213 * Thuban/UI/main.py (main): Create the session tree view in main
1214 with the new mainwindow method ShowSessionTree and not directly
1215 the application's OnInit method
1216
1217 * Thuban/UI/tree.py (myTreeCtrlPanel):
1218 (SessioinTreeCtrl): Rename to SessioinTreeCtrl and turn it into a
1219 TreeCtrl isntead of a panel. This affects most method since we now
1220 refer to self instead of self.tree
1221 (SessionTreeView): New class implementing a non-modal dialog
1222 showing the session tree.
1223
1224 * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Pass the
1225 layer to the tableview dialog.
1226
1227 * Thuban/UI/tableview.py: Add some doc-strings
1228 (TableGrid):
1229 (TableGrid.OnRangeSelect):
1230 (TableGrid.OnSelectCell):
1231 (TableFrame.__init__):
1232 (TableFrame.row_selected):
1233 Selecting rows in the grid view now updates the selected shapes
1234 through the TableFrame. To achieve this we derive TableGrid from
1235 Publisher and introduce the message type ROW_SELECTED which the
1236 TableFrame subscribes to and which is issued by OnRangeSelect and
1237 OnSelectCell
1238
1239 (DataTable.SelectRow): Removed because it's no longer needed in
1240 the row/shape selection scheme
1241
1242 * Thuban/UI/dialogs.py: New file implementing common classes for
1243 dialogs
1244
1245 * Thuban/UI/tableview.py (TableGrid.__init__): Don't subscribe to
1246 the SELECTED_SHAPE message anymore. This is now handled by the
1247 parent.
1248 (TableGrid.select_shape): Only update the selection if the shape
1249 is not None.
1250 (TableFrame): Inherit from the new NonModalDialog class.
1251 (TableFrame.__init__, TableFrame.select_shape): Handle the
1252 SELECT_SHAPE message.
1253 (TableFrame.OnClose): Extend the inherited method to unsubscribe
1254 SELECT_SHAPE
1255
1256 * Thuban/UI/mainwindow.py (MainWindow.init_dialogs):
1257 (MainWindow.add_dialog):
1258 (MainWindow.dialog_open):
1259 (MainWindow.remove_dialog):
1260 (MainWindow.get_open_dialog): New methods to maintain a dictionary
1261 of opened non-modal dialogs.
1262
1263 (MainWindow.__init__): Initialize the new non-modal dictionary
1264 management code
1265 (MainWindow.LayerShowTable): maintain separate dialogs for each
1266 table using the non-modal dialog management code to only open a
1267 view once for each table.
1268
1269 (MainWindow.IdentifyTool):
1270 (MainWindow.__init__):
1271 (MainWindow.identify_view_on_demand): Don't open the identify view
1272 in IdentifyTool anymore. This will be done automatically by the
1273 new method identify_view_on_demand which handles the
1274 SELECTED_SHAPE message so that the identify view will be opened on
1275 demand
1276
1277 * Thuban/UI/identifyview.py (IdentifyListCtrl.__init__): Remove
1278 the interactor argument. The SELECTED_SHAPE message is now handled
1279 by the parent.
1280 (IdentifyView.__init__): Add the interactor argument so that we
1281 can handle the SELECTED_SHAPE message here
1282 (IdentifyView.selected_shape): New method to handle the
1283 SELECTED_SHAPE messages
1284
1285 * Thuban/UI/identifyview.py (IdentifyView): Derive from the new
1286 NonModalDialog class
1287 (IdentifyView.OnClose): Extend the inherited version to
1288 unsubscribe SELECT_SHAPE
1289
1290 * Thuban/Model/session.py (Session.UnsetModified): Remove debug prints
1291
1292 2001-09-05 Bernhard Herzog <[email protected]>
1293
1294 * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1295
1296 * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1297 interactor to pass through to the MapCanvas
1298
1299 * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1300 argument to the MainWindow constructor to get rid of the ugly hack
1301 that made main.app available early just so that the mapcanvas
1302 could access the interactor object.
1303
1304 2001-09-04 Bernhard Herzog <[email protected]>
1305
1306 * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): New method
1307 that runs a modal message box
1308 (MainWindow.OnClose): Use the new method
1309 (MainWindow.RemoveLayer): Just do nothing in case no layer is
1310 selected. The command should be grayed out anyway, so there's no
1311 need to pop up a message box.
1312 (MainWindow.AddLayer): Pop up a message box with an error message
1313 if the shape file can't be opened
1314
1315 * Thuban/Model/layer.py (Layer.__init__): Open the shapefile
1316 immediately. This will cause an exception in case the file can't
1317 be opened and we can display an appropriate message.
1318
1319 * MANIFEST.in: Add extensions/pyprojection/LICENSE
1320
1321 * setup.py (thuban_bdist_rpm): New class implementing a Thuban
1322 specific bdist_rpm command.
1323
1324 * Thuban/UI/main.py: Catch ImportError exceptions when importing
1325 the locale module because it may not be available on some
1326 installations.
1327
1328 * extensions/pyprojection/LICENSE: Copy of the license text in
1329 Projection.i. Having it in a separate file makes it easier to
1330 refer to license text in e.g. RPMs
1331
1332 2001-09-03 Bernhard Herzog <[email protected]>
1333
1334 * setup.py: use wx-config instead of wxgtk-config because it's
1335 more generic
1336
1337 * setup.py (ThubanInstall.get_outputs): Add the symlink in
1338 <prefix>/bin to the outputs
1339 (ThubanInstall.link_file): New method to link files. We need this
1340 because the standard copy_files refuses to link non-existing
1341 files.
1342 (ThubanInstall.run): Remove the leading install root from the
1343 script filename if an install root was specified and use the new
1344 link_file method
1345
1346 * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1347 the window when the first layer is added to the map.
1348
1349 * setup.py (ThubanInstall.run): Honor the build root (self.root)
1350 when linking thuban.py to <prefix>/bin
1351
1352 2001-08-31 Bernhard Herzog <[email protected]>
1353
1354 * setup.py: In the setup call, the install parameters shouldn't
1355 have trailing slashes because distutils on non-posix platforms
1356 doesn't like that. The same applies to other directories like
1357 "Resources/Bitmaps"
1358
1359 In the configuration section for nt, move the wxWindows directory
1360 optins into the part clearly marked as editable.
1361
1362 (InstallLocal.initialize_options):
1363 (InstallLocal.user_options): remove the currently unused debug
1364 flag
1365 (thuban_build_py.find_all_modules): Add this method so that it
1366 works for our case of having packages and modules in one
1367 distribution as well.
1368 (ThubanInstall.initialize_options):
1369 (ThubanInstall.finalize_options):
1370 (ThubanInstall.user_options):
1371 (ThubanInstall.boolean_options): Add new options, do-symlink and
1372 extra files. Since these are the first ThubanInstall specific
1373 options, override user_options and boolean_options
1374 (ThubanInstall.run): Honor the new do-symlink and extra-files
1375 options.
1376 (ThubanInstall.get_outputs): Add to override the base-class's
1377 version and add the extra-files to the outputs
1378 (bdist_inno): New class for windows distributions with Inno Setup
1379 (InnoIconItem): Helper class for bdist_inno
1380 (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1381 this together with the appropriate parameters, to the setup call.
1382
1383 * setup.cfg (bdist_inno): added new section for the inno setup
1384 installer
1385
1386 * Thuban/UI/tree.py (myTreeCtrlPanel.__init__): New inst var
1387 changing_selection to avoid recursive selection events when
1388 modifying the selection in response to a selection event.
1389 (myTreeCtrlPanel.normalize_selection): Set the new inst var when
1390 changing the tree's selection.
1391 (myTreeCtrlPanel.OnSelChanged): Only normalize the selection when
1392 we're not being called indirectly from normalize_selection.
1393
1394 * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): Call
1395 event.Check only if the command is actuall checkable.
1396 (MainWindow.__init__): Call the toolbar's Realize method to make
1397 sure that the items are actually shown
1398
1399 2001-08-28 Bernhard Herzog <[email protected]>
1400
1401 * setup.py: Fix some doc strings
1402
1403 * ChangeLog: started
1404

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26