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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 538 - (hide annotations)
Fri Mar 14 20:45:39 2003 UTC (21 years, 11 months ago) by bh
Original Path: trunk/thuban/ChangeLog
File size: 70044 byte(s)
update ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26