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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 554 - (hide annotations)
Tue Mar 25 16:20:51 2003 UTC (21 years, 11 months ago) by jonathan
Original Path: trunk/thuban/ChangeLog
File size: 72202 byte(s)
updated ChangeLog

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

Properties

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26