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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 44 by bh, Fri Sep 7 11:56:05 2001 UTC revision 554 by jonathan, Tue Mar 25 16:20:51 2003 UTC
# Line 1  Line 1 
1    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    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    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    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    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    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    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    2003-03-10  Jonathan Coles   <[email protected]>
216    
217            * 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            * 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            * 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            * 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            * 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    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    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    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    2003-03-05  Jonathan Coles   <[email protected]>
328    
329            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
330    
331            * Thuban/Model/load.py: import FIELDTYPE constants from table.
332    
333            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
334    
335            * Thuban/Model/table.py: Put FIELDTYPE constants back.
336    
337    2003-03-05  Jonathan Coles   <[email protected]>
338    
339            * 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    2003-03-04  Bernhard Herzog  <[email protected]>
378    
379            * 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            * 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    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    2003-02-27  Jonathan Coles   <[email protected]>
419    
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            functions. Fix to create a tuple with a single value instead of
442            simply returning the value.
443    
444            * Thuban/UI/renderer.py: Use new Classification and Group functions.
445            Use common.py functions.
446    
447            * Thuban/UI/tree.py: Use common.py functions.
448            
449            * test/test_classification.py: Use new Classification and Group
450            classes.
451    
452    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    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    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    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    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    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    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    2003-02-10  Jonathan Coles  <[email protected]>
581    
582            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
583            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            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
596            SetDefault*() methods on the layer's classification object.
597            (Layer.__init__): Use the new SetDefault*() methods in the
598            Classification class.
599    
600            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
601            object instead of a dictionary.
602    
603            * Thuban/UI/classifier.py (ClassRenderer): New class to
604            draw the classifications in the dialog box's table.
605            (Classifier): Modified to use the ClassRenderer class.
606    
607            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
608            methods of the Classification class.
609    
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    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    2003-01-28  Jonathan Coles  <[email protected]>
629    
630            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
631            Fixed crashing problem on some systems. Dialog box shows
632            classification data.
633    
634            * 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    2003-01-27  Jan-Oliver Wagner <[email protected]>
645    
646            * Thuban/__init__.py (_): New.
647    
648            * Thuban/Model/classification.py, Thuban/Model/extension.py,
649            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
650            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    
657    2003-01-27  Jonathan Coles  <[email protected]>
658    
659            * Thuban/Model/layer.py: Classification initialization calls.
660    
661            * Thuban/Model/classification.py: Created class to encapsulate
662            a layer classification. Supports specific data points and
663            ranges.
664    
665            * Thuban/Model/load.py: Added support for loading classification
666            information.
667    
668            * Thuban/Model/save.py: Added support for saving classification
669            information.
670    
671            * Thuban/UI/classifier.py: Initial class for a dialog box for
672            specifying classification information.
673    
674            * Thuban/UI/mainwindows.py: Support for opening the classifier
675            dialog.
676    
677            * Thuban/UI/renderer.py: Support for drawing a layer with the
678            classification information.
679    
680            * Data/iceland_sample_class.thuban: iceland_sample with
681            classification data.
682    
683            * test/test_classification: Tests for the Classification class.
684    
685    2002-12-09  Bernhard Herzog  <[email protected]>
686    
687            * test/test_command.py: New. Tests for the command classes.
688    
689            * 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    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    2002-11-06  Frank Koormann  <[email protected]>
715    
716            * 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    
720    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    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    2002-09-20  Bernhard Herzog  <[email protected]>
744    
745            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
746    
747            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
748    
749            * 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            * 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            * 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    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    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    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            (MainWindow.build_menu): remove an incorrect comment.
815    
816    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    2002-09-06  Bernhard Herzog  <[email protected]>
826    
827            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
828            VIEW_POSITION
829    
830    2002-09-04  Frank Koormann  <[email protected]>
831    
832            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
833    
834    2002-09-02  Bernhard Herzog  <[email protected]>
835    
836            * 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            * 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    2002-08-30  Bernhard Herzog  <[email protected]>
852    
853            * 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            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
862            (MapCanvas.do_redraw): Get rid of the unused update_region
863            instance variable
864    
865            * Thuban/UI/view.py: Add/update some doc-strings.
866    
867            * 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    2002-08-29  Bernhard Herzog  <[email protected]>
874    
875            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
876            arcs with multiple parts.
877    
878            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
879            Handle degenrate rectangles.
880    
881            * 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    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    2002-08-26  Bernhard Herzog  <[email protected]>
893    
894            * 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            * 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            (LayerTableGrid.select_shape): Remove a debug print
904    
905            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
906            LayerTableFrame
907    
908    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    2002-08-22  Bernhard Herzog  <[email protected]>
914    
915            * Thuban/Model/table.py (Table.write_record): New method to write
916            records.
917            (Table.__init__): Open the DBF file for writing too.
918    
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            * 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            * 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    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    2002-08-16  Jan-Oliver Wagner <[email protected]>
956    
957            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
958            tree window already open
959    
960    2002-08-15  Bernhard Herzog  <[email protected]>
961    
962            * 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            * 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    2002-08-14  Bernhard Herzog  <[email protected]>
974    
975            * 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            * 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    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    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    2002-07-24  Bernhard Herzog  <[email protected]>
1034    
1035            * 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            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
1054            window size into a parameter.
1055    
1056    2002-07-23  Bernhard Herzog  <[email protected]>
1057    
1058            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1059            just commands.
1060    
1061            * 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    2002-07-19  Bernhard Herzog  <[email protected]>
1071    
1072            * 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            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1084            Only have to (un)subscribe CHANGED
1085    
1086            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1087    
1088            * 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    2002-07-18  Bernhard Herzog  <[email protected]>
1093    
1094            * 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            * 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    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            Thuban/Model/session.py (Session.TreeInfo):
1145            Add TreeInfo methods to implement the new tree view update scheme
1146    
1147    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    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    2002-07-09  Bernhard Herzog  <[email protected]>
1172    
1173            * setup.py: In the setup call, use the thuban homepage as the
1174            value of the url parameter.
1175    
1176            * 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            * 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            * 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    2002-07-08  Bernhard Herzog  <[email protected]>
1204    
1205            * 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            * 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    2002-06-20  Jan-Oliver Wagner <[email protected]>
1226    
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    2002-05-29  Bernhard Herzog  <[email protected]>
1236    
1237            * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1238            the events for a command.
1239            (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    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            * 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    2002-05-23  Bernhard Herzog  <[email protected]>
1267    
1268            * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
1269            layer_outline_color. Fix it in the definition of the command too.
1270    
1271            * Thuban/UI/command.py (Command): Fix typo in doc string
1272    
1273    2002-05-22  Bernhard Herzog  <[email protected]>
1274    
1275            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Fix a typo
1276            in the docstring
1277    
1278    2002-05-15  Bernhard Herzog  <[email protected]>
1279    
1280            * 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            * 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    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    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    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    2002-05-07  Bernhard Herzog  <[email protected]>
1330    
1331            * Data/iceland_sample.session, Data/iceland_sample.thuban: Rename
1332            the file to have a .thuban extension.
1333    
1334            * 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            * 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    2002-05-03  Bernhard Herzog  <[email protected]>
1398    
1399            * Thuban/UI/mainwindow.py (MainWindow.SaveSessionAs,
1400            MainWindow.OpenSession): Change the file extension of the session
1401            files to .thuban
1402    
1403            * Thuban/Model/session.py (Session.AddMap, forwarded_channels):
1404            Move the map channels to be forwarded by the session into the
1405            class constant with forwarded_channels. Also add
1406            LAYER_PROJECTION_CHANGED and LAYER_VISIBILITY_CHANGED to
1407            forwarded_channels
1408    
1409            * Thuban/Model/base.py (Modifiable.changed): Fix doc-string (a
1410            typo and some rewording).
1411    
1412    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    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    2002-04-26  Frank Koormann <[email protected]>
1455    
1456            * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1457    
1458    2002-04-24  Frank Koormann <[email protected]>
1459    
1460            * Resources/Bitmaps/identify.xpm: shadow added
1461    
1462            * Resources/Bitmaps/fullextent.xpm: new
1463    
1464    2002-04-22  Jan-Oliver Wagner <[email protected]>
1465    
1466            * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1467            box
1468    
1469    2002-04-21  Jan-Oliver Wagner <[email protected]>
1470    
1471            * 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            icon; added map_full_extend as tool
1477    
1478    2002-04-19  Jan-Oliver Wagner <[email protected]>
1479    
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    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    2002-04-04  Bernhard Herzog  <[email protected]>
1511    
1512            * setup.py (thuban_bdist_rpm.initialize_options): Use
1513            initialize_options to create the scripts for the rpm.
1514    
1515            * extensions/pyprojection/setup.py (PROJ4_PREFIX): Just use /
1516    
1517    2002-04-03  Bernhard Herzog  <[email protected]>
1518    
1519            * setup.py: Increment version to 0.1.1
1520    
1521            * 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    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    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    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    2002-01-14  Bernhard Herzog  <[email protected]>
1568    
1569            * setup.py (data_dist.make_distribution): Fix some typos
1570    
1571    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    2001-09-14  Bernhard Herzog  <[email protected]>
1582    
1583            * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1584            Handle the case of no layer (i.e. layer is None) properly.
1585    
1586            * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1587            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            * 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    2001-09-13  Bernhard Herzog  <[email protected]>
1599    
1600            * Thuban/UI/tree.py (SessionTreeCtrl.OnSelChanged): Make sure to
1601            deselect the layer if no layer is selected
1602    
1603            * 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            (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    
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    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    2001-09-10  Bernhard Herzog  <[email protected]>
1642    
1643            * 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            * 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  2001-09-07  Bernhard Herzog  <[email protected]>  2001-09-07  Bernhard Herzog  <[email protected]>
1665    
1666          * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter          * Thuban/UI/view.py (MapCanvas.find_shape_at):Add a new parameter
1667          that can limit the search to the currently selected layer.          that can limit the search to the currently selected layer.
1668          (MapCanvas.SelectShapeAt): Make sure that the currently selected          (MapCanvas.SelectShapeAt): Make sure that the currently selected
1669          layer stays selected even when no shape is found          layer stays selected even when no shape is found
1670            (MapCanvas.FitRectToWindow): If the rect has zero with or zero
1671            height do nothing (avoids zero division errors)
1672    
1673  2001-09-06  Bernhard Herzog  <[email protected]>  2001-09-06  Bernhard Herzog  <[email protected]>
1674    
# Line 28  Line 1693 
1693          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
1694          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
1695    
1696          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1697          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
1698          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
1699          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
1700          the application's OnInit method          the application's OnInit method
# Line 45  Line 1710 
1710          layer to the tableview dialog.          layer to the tableview dialog.
1711    
1712          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
1713          (TableGrid):          (TableGrid):
1714          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
1715          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
1716          (TableFrame.__init__):          (TableFrame.__init__):
# Line 112  Line 1777 
1777  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1778    
1779          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1780            
1781          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1782          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1783            
1784          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1785          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1786          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 162  Line 1827 
1827          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1828          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1829          link_file method          link_file method
1830            
1831          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1832          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1833    
# Line 199  Line 1864 
1864          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1865          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1866          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1867            
1868          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1869          installer          installer
1870    

Legend:
Removed from v.44  
changed lines
  Added in v.554

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26