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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 425 - (show annotations)
Mon Feb 24 14:17:19 2003 UTC (22 years ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 53536 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26