/[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 190 by bh, Tue May 28 12:39:49 2002 UTC revision 538 by bh, Fri Mar 14 20:45:39 2003 UTC
# Line 1  Line 1 
1    2003-03-14  Bernhard Herzog  <[email protected]>
2    
3            * test/test_command.py: Run the tests when the module is run as a
4            script
5    
6    2003-03-14  Bernhard Herzog  <[email protected]>
7    
8            Implement selection of multiple selected shapes in the same layer:
9    
10            - Introduce a new class to hold the selection. This basically
11              replaces the interactor which was nothing more than the
12              selection anyway. A major difference is of course that the new
13              selection class supports multiple selected shapes in one layer
14            
15            - Move the object that represents the selection from the
16              application to the canvas. The canvas is a better place than the
17              application because the selection represents which shapes and
18              layer of the map displayed by the canvas are selected and
19              affects how the map is drawn.
20    
21            - Make the selection and its messages publicly available through
22              the mainwindow.
23    
24            - The non-modal dialogs do not get a reference to the interactor
25              anymore as they can simply refer to their parent, the
26              mainwindow, for the what the interactor had to offer.
27    
28            * Thuban/UI/selection.py: New module with a class to represent the
29            selection.
30    
31            * Thuban/UI/messages.py (SELECTED_TABLE, SELECTED_MAP): Remove
32            these unused messages
33    
34            * Thuban/UI/application.py (ThubanApplication.OnInit)
35            (ThubanApplication.OnExit, ThubanApplication.SetSession): The
36            interactor is gone now.
37            (ThubanApplication.CreateMainWindow): There is no interactor
38            anymore so we pass None as the interactor argument for now for
39            compatibility.
40    
41            * Thuban/UI/view.py (MapCanvas.delegated_messages)
42            (MapCanvas.Subscribe, MapCanvas.Unsubscribe): In Subscribe and
43            Unsubscribe, delegate messages according to the delegated_messages
44            class variable.
45            (MapCanvas.__getattr__, MapCanvas.delegated_methods): Get some
46            attributes from instance variables as described with the
47            delegated_methods class variable.
48            (MapCanvas.__init__): New instance variable selection holding the
49            current selection
50            (MapCanvas.do_redraw): Deal with multiple selected shapes. Simply
51            pass them on to the renderer
52            (MapCanvas.SetMap): Clear the selection when a different map is
53            selected.
54            (MapCanvas.shape_selected): Simple force a complete redraw. The
55            selection class now takes care of only issueing SHAPES_SELECTED
56            messages when the set of selected shapes actually does change.
57            (MapCanvas.SelectShapeAt): The selection is now managed in
58            self.selection
59    
60            * Thuban/UI/mainwindow.py (MainWindow.delegated_messages)
61            (MainWindow.Subscribe, MainWindow.Unsubscribe): In Subscribe and
62            Unsubscribe, delegate messages according to the delegated_messages
63            class variable.
64            (MainWindow.delegated_methods, MainWindow.__getattr__): Get some
65            attributes from instance variables as described with the
66            delegated_methods class variable.
67            (MainWindow.__init__): The interactor as ivar is gone. The
68            parameter is still there for compatibility. The selection messages
69            now come from the canvas.
70            (MainWindow.current_layer, MainWindow.has_selected_layer):
71            Delegate to the the canvas.
72            (MainWindow.LayerShowTable, MainWindow.Classify)
73            (MainWindow.identify_view_on_demand): The dialogs don't need the
74            interactor parameter anymore.
75    
76            * Thuban/UI/tableview.py (TableFrame.__init__)
77            (LayerTableFrame.__init__, LayerTableFrame.OnClose)
78            (LayerTableFrame.row_selected): The interactor is gone. It's job
79            from the dialog's point of view is now done by the mainwindow,
80            i.e. the parent. Subscribe to SHAPES_SELECTED instead
81            of SELECTED_SHAPE
82            
83            * Thuban/UI/dialogs.py (NonModalDialog.__init__): The interactor
84            is gone. It's job from the dialog's point of view is now done by
85            the mainwindow, i.e. the parent.
86            
87            * Thuban/UI/classifier.py (Classifier.__init__): The interactor is
88            gone. It's job from the dialog's point of view is now done by the
89            mainwindow, i.e. the parent.
90    
91            * Thuban/UI/tree.py (SessionTreeView.__init__): The interactor is
92            gone. It's job from the dialog's point of view is now done by the
93            mainwindow, i.e. the parent.
94            (SessionTreeCtrl.__init__): New parameter mainwindow which is
95            stored as self.mainwindow. The mainwindow is need so that the tree
96            can still subscribe to the selection messages.
97            (SessionTreeCtrl.__init__, SessionTreeCtrl.unsubscribe_all)
98            (SessionTreeCtrl.update_tree, SessionTreeCtrl.OnSelChanged): The
99            selection is now accessible through the mainwindow. Subscribe to
100            SHAPES_SELECTED instead of SELECTED_SHAPE
101    
102            * Thuban/UI/identifyview.py (IdentifyView.__init__): Use the
103            SHAPES_SELECTED message now.
104            (IdentifyView.selected_shape): Now subscribed to SHAPES_SELECTED,
105            so deal with multiple shapes
106            (IdentifyView.__init__, IdentifyView.OnClose): The interactor is
107            gone. It's job from the dialog's point of view is now done by the
108            mainwindow, i.e. the parent.
109    
110            * Thuban/UI/controls.py (RecordListCtrl.fill_list): The second
111            parameter is now a list of shape ids.
112            (RecordTable.SetTable): The second parameter is now a list of
113            indices.
114    
115            * Thuban/UI/renderer.py (ScreenRenderer.RenderMap): Rename the
116            selected_shape parameter and ivar to selected_shapes. It's now a
117            list of shape ids.
118            (MapRenderer.draw_label_layer): Deal with multiple selected
119            shapes. Rearrange the code a bit so that the setup and shape type
120            distinctions are only executed once.
121    
122            * test/test_selection.py: Test cases for the selection class
123    
124    2003-03-11  Jonathan Coles   <[email protected]>
125    
126            * Thuban/Model/load.py: Temporary fix so that the xml reader
127            doesn't cause Thuban to crash.
128    
129            * Thuban/Model/layer.py: Handle the cyclic references between
130            a layer and its classification better, and be sure to disconnect
131            the classification from the layer when the layer is destroyed
132            so that we don't maintain a cyclic reference that may not be
133            garbage collected.
134    
135            * Thuban/Model/classification.py: See comment for layer.py.
136    
137    2003-03-12  Jan-Oliver Wagner <[email protected]>
138    
139            * HOWTO-Release: New. Information on the steps for releasing
140            a new version of Thuban.
141    
142    2003-03-11  Jonathan Coles   <[email protected]>
143    
144            * Thuban/UI/classifier.py: Add normal border to SelectPropertiesDialog.
145            Use True instead of true.
146            (Classifier): Should have a single panel in which all the controls lie.
147    
148            * Thuban/UI/proj4dialog.py: Add normal border.
149    
150            * Thuban/UI/tree.py: Fixed problem with bad item images under Windows.
151    
152            * Thuban/UI/mainwindow.py: Use True instead of true.
153    
154            * setup.py: Update some definitions to use wxWindows2.4 files
155    
156            * Data/iceland_sample_class.thuban: Fixed file so that the
157            field_type information is present.
158    
159    2003-03-10  Jonathan Coles   <[email protected]>
160    
161            * Thuban/UI/classifier.py (Classifier.__init__): Make the
162            field type label grow so that when the text changes the
163            size is updated correctly. This may be a wxWindows bug.
164    
165    2003-03-10  Jonathan Coles   <[email protected]>
166    
167            * Thuban/UI/application.py: Changed SESSION_CHANGED to
168            SESSION_REPLACED.
169    
170            * Thuban/UI/classifier.py: Wrap text with _().
171            (ClassGrid.CreateTable): Set dimensions and size hints here,
172            instead of in Reset, so we only set the size once.
173    
174            * Thuban/UI/dialogs.py: Don't need Shutdown(); just use Close()!
175    
176            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
177            Call Close() instead of Shutdown().
178    
179            * Thuban/UI/messages.py: Changed SESSION_CHANGED to SESSION_REPLACED.
180    
181            * Thuban/UI/tree.py: Changed SESSION_CHANGED to SESSION_REPLACED.
182            Go back to using OnClose() instead of Shutdown().
183    
184    2003-03-10  Jonathan Coles   <[email protected]>
185    
186            * Thuban/UI/classifier.py (Classifier): SelectField() needed
187            to know the old field index as well as the new one.
188    
189    2003-03-10  Jonathan Coles   <[email protected]>
190    
191            * Thuban/UI/classifier.py (Classifier): Use __SelectField()
192            to correctly set the table information and call this from
193            __init__ and from _OnFieldSelect so that all the information
194            is up to date when the dialog opens and when a field is changed.
195    
196    2003-03-10  Jonathan Coles   <[email protected]>
197    
198            * Thuban/Model/classification.py (Classification): Don't use
199            layer's message function directly, use the ClassChanged() method
200            when then classification changes. SetField/SetFieldType/SetLayer
201            must keep the information about field name and field type in
202            sync when an owning layer is set or removed.
203    
204            * Thuban/Model/layer.py: Added ClassChanged() so that the
205            classification can tell the layer when its data has changed.
206            (Layer.SetClassification): Accepts None as an arguement to
207            remove the current classification and correctly handles
208            adding a new classification.
209    
210            * Thuban/Model/load.py: Comment out print statement
211    
212            * test/test_classification.py, test/test_save.py: New and
213            improved tests.
214    
215    2003-03-07  Jonathan Coles   <[email protected]>
216    
217            * Thuban/Model/classification.py: Implemented __copy__ and
218            __deepcopy__ for ClassGroup* and ClassGroupProperites so
219            they can easily be copied by the classifier dialog.
220            (ClassGroupProperites.__init__): The default line color should
221            have been Color.Black.
222    
223            * Thuban/UI/classifier.py: Setting and Getting table values now
224            uses a consistent set of functions.
225            (Classifier): Now non-modal. Has field type label which changes
226            as the field changes. Keep track of buttons in a list so that
227            we can enable/disable the buttons when the None field is selected.
228            (SelectPropertiesDialog): Add buttons to make the colors transparent.
229    
230            * Thuban/UI/dialogs.py (NonModalDialog.Shutdown): New method which
231            does what OnClose did, but can be called by the application to
232            close a window. Needed when a session changes, and we have to
233            close the classifier windows.
234    
235            * Thuban/UI/mainwindow.py (MainWindow.prepare_new_session):
236            Shuts down open dialogs. Used when a new session is created
237            or a session is opened.
238            (MainWindow.SaveSession): Should only call application.SaveSession()
239            if we don't call SaveSessionAs first.
240            (MainWindow.Classify): Allow different classifier dialogs for
241            different layers.
242    
243            * Thuban/UI/tree.py (SessionTreeView): Remove OnClose and let
244            the parent class handle it. Add Shutdown() to unsubscibe from
245            event notification and call the parent Shutdown(). This was
246            necessary so the application can close the tree window.
247    
248    2003-03-06  Jonathan Coles   <[email protected]>
249    
250            * Thuban/Model/classification.py: Minor documentation changes,
251            Addition of __eq__ and __ne__ methods.
252            (Classification.SetLayer): prevent recursion between this method
253            and Layer.SetClassification().
254    
255            * Thuban/Model/color.py: Addition of __eq__ and __ne__ methods.
256    
257            * Thuban/Model/layer.py (SetClassification): prevent recursion
258            between this method and Classification.SetLayer().
259    
260            * test/test_classification.py, test/test_load.py,
261            test/test_session.py: Fixed and added tests for the classification
262            classes.
263    
264    2003-03-06  Bernhard Herzog  <[email protected]>
265    
266            * Thuban/UI/classifier.py (ClassGrid.__init__)
267            (ClassGrid.CreateTable): Move the SetSelectionMode call to
268            CreateTable because otherwise it triggers an assertion in
269            wxPython/wxGTK 2.4.
270    
271    2003-03-05  Jonathan Coles   <[email protected]>
272    
273            * Thuban/common.py: Move FIELDTYPE constants back to table.py.
274    
275            * Thuban/Model/load.py: import FIELDTYPE constants from table.
276    
277            * Thuban/UI/classifier.py: import FIELDTYPE constants from table.
278    
279            * Thuban/Model/table.py: Put FIELDTYPE constants back.
280    
281    2003-03-05  Jonathan Coles   <[email protected]>
282    
283            * Thuban/UI/classifier.py: Added class documentation.
284            Fixed RTbug #1713, #1714. Added Move[Up|Down] buttons.
285            Store just the groups in the table and generate the other
286            column information when it is requested. Add "None" field
287            to pull-down to select no classification.
288    
289            * Thuban/common.py: Moved FIELDTYPE constants from table.py
290            (Str2Num): Only catch ValueError exceptions.
291    
292            * Thuban/Model/classification.py: Class documentation. Renaming
293            of methods with Stroke to Line. Groups are stored in a single
294            list with the default as the first element. Groups are searched
295            in the order they appear in the list.
296    
297            * Thuban/Model/color.py: Documentation.
298    
299            * Thuban/Model/layer.py (Layer): Add GetFieldType to retreive
300            the kind of data represented by a field.
301    
302            * Thuban/Model/load.py (ProcessSession): Use proper string
303            conversion function; fixes RTbug #1713.
304    
305            * Thuban/Model/save.py (Saver): Store field type information.
306    
307            * Thuban/Model/table.py: Put FIELDTYPE constants in common.py.
308            (Table): Add field_info_by_name() to retrieve field information
309            by specifying the field name, not the number.
310    
311            * Thuban/UI/mainwindow.py: Function name changes.
312    
313            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Only
314            get the layer classification once. Don't try to classify
315            values when the field is None: just use the default properties.
316    
317            * Thuban/UI/view.py: Function name changes.
318    
319            * Doc/thuban.dtd: Add field_type attribute to a classification.
320    
321    2003-03-04  Bernhard Herzog  <[email protected]>
322    
323            * Doc/thuban.dtd: Use correct syntax for optional attributes. Make
324            the fill and stroke layer attributes optional with suitable
325            default values. Add the stroke_width layer attribute. Use correct
326            syntax for empty elements. Make the attribute list for labels
327            refer to the label element.
328    
329    2003-03-04  Bernhard Herzog  <[email protected]>
330    
331            * setup.py (thuban_build_py.build): Add a comment about distutils in
332            Python 2.3 containing some of the functionality we implement in
333            setup.py ourselves.
334    
335            * Thuban/UI/classifier.py (ClassGrid.__init__): Set the table
336            before the selection mode. Doing it the other way round triggers
337            an assertion in wxWindows.
338    
339            * Thuban/Model/save.py (escape): Fix typo in doc-string
340    
341            * Thuban/Model/classification.py: Remove unnecessary wxPython
342            import
343    
344    2003-03-04  Jonathan Coles   <[email protected]>
345    
346            * Thuban/Model/classification.py (ClassGroupRange.GetProperties):
347            Parameter 'value' should default to None.
348    
349            * Thuban/UI/mainwindow.py: Use Layer.GetClassification() since
350            the class attribute __classification is now private.
351    
352            * Thuban/UI/classifier.py (ClassGrid): Moved OnCellDClick() from
353            Classifier to ClassGrid. Added support for removing selected rows,
354            which including code for keeping track of when cells are selected,
355            and deselected.
356            (ClassTable): Support for added/removing rows. Fixed a problem
357            with __ParseInput whereby it would not allow strings (only numbers)
358            to be entered.
359            (Classifier): Added button and supporting code for removing
360            selected rows.
361    
362    2003-02-27  Jonathan Coles   <[email protected]>
363    
364            * Thuban/common.py: Moved color conversion functions into
365            Thuban/UI/common.py.
366            (Str2Num): Now converts the float (not the string) to a long/int
367            so that an exception isn't thrown.
368    
369            * Thuban/UI/common.py: Common functions used in several UI modules
370    
371            * Thuban/Model/classification.py: Changed the class hierarchy
372            so that a Classification consists of Groups which return
373            Properties when a value matches a Group.
374    
375            * Thuban/Model/layer.py: Fixed name resolution problem.
376    
377            * Thuban/Model/load.py: Use new Classification and Group functions.
378    
379            * Thuban/Model/save.py (Saver.write_attribs): Fixes a test case
380            failure.
381            (Saver.write_classification): Use new Classification and Group
382            functions.
383    
384            * Thuban/UI/classifier.py: Changes to use new Classification and Group
385            functions. Fix to create a tuple with a single value instead of
386            simply returning the value.
387    
388            * Thuban/UI/renderer.py: Use new Classification and Group functions.
389            Use common.py functions.
390    
391            * Thuban/UI/tree.py: Use common.py functions.
392            
393            * test/test_classification.py: Use new Classification and Group
394            classes.
395    
396    2003-02-24  Jonathan Coles   <[email protected]>
397    
398            * Thuban/common.py (Color2wxColour, wxColour2Color): Conversion
399            functions from Thuban color objects to wxWindow colour objects.
400    
401            * Thuban/Model/classification.py (Classification): Renamed
402            GetProperties() to GetClassData(). Used the new iterator
403            in TreeInfo().
404            (ClassIterator): Iterator implementation to iterate over the
405            ClassData objects in a classification object.
406    
407            * Thuban/Model/save.py (Saver.write_classificaton): Uses
408            the new iterator to save the classification information.
409    
410            * Thuban/UI/classifier.py (SelectPropertiesDialog): Support
411            for changing the stroke and fill colors and previewing the
412            changes.
413    
414            * Thuban/UI/mainwindow.py (MainWindow.OpenSession,
415            MainWindow.SaveSessionAs): Text string changes so the dialogs
416            have more meaningful titles.
417    
418            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Change
419            Classification method name from GetProperties to GetClassData.
420    
421            * Thuban/UI/view.py (MapCanvas.find_shape_at): Use method calls
422            instead of accessing now non-existent class variables.
423    
424    2003-02-24  Bernhard Herzog  <[email protected]>
425    
426            * Thuban/UI/renderer.py (MapRenderer.draw_shape_layer): Remove
427            unneeded Shape() call. Rendering is substantially faster without
428            it and it avoids some problems with broken shape files.
429    
430    2003-02-20  Frank Koormann   <[email protected]>
431    
432            Force minimal size of identify and label dialogs. The autosizing
433            looked too ugly.
434    
435            * Thuban/UI/controls.py (RecordListCtrl): Set minimal width for columns.
436            * Thuban/UI/labeldialog.py (LabelDialog.dialog_layout):
437            Set size of listctrl.
438            * Thuban/UI/identifyview.py (IdentifyView.__init__):
439            Set size of dialog.
440    
441    2003-02-19  Jonathan Coles   <[email protected]>
442    
443            * test/test_classification.py, test/test_layer.py,
444            test/test_load.py, test/test_map.py, test/test_session.py:
445            Updated the tests to use the new functions that are in the
446            respective classes.
447    
448            * Thuban/Model/classification.py (Classification):
449            Uses the new ClassData* classes. Modification messages are
450            passed up to the parent layer (if it exists).
451            (ClassData): New class to encapsulate the common data in each
452            classification property.
453            (ClassDataDefault): Represents the Default class. data.
454            (ClassDataPoint): Represents a single class. data point
455            (ClassDataRange): Represents a class. range
456            (ClassDataMap): Represents a class. map (unused).
457    
458            * Thuban/Model/color.py: Added Color.None to represent something
459            with no color. Color.Black represents the color black.
460            (NoColor): Helper class derived from Color to represent something
461            with no color.
462    
463            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
464            stroke_width attributes. Made the 'classification' attribute private.
465            New methods for setting/getting the classification.
466    
467            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
468            to get the classifcation and use the new ClassData* classes to
469            hold the classification data. Use Str2Num to convert numbers
470            properly.
471    
472            * Thuban/Model/save.py (Saver): Use new Color and Classification
473            methods
474    
475            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
476            custom grid.
477            (ClassTable): Support for editing Values and Labels and for
478            changing what type (point or range) of data is stored in each
479            property based on how the user enters the data.
480            (Classifier): Support for saving the new classifications and
481            launching the dialog to edit a property.
482            (SelectPropertiesDialog): New class for editing the visual
483            properties of a classification (stroke color, width, and fill color)
484            (ClassPreviewer): Took the Draw method from ClassRenderer and
485            made most of it into this new class. Intend to use this class in
486            the SelectPropertiesDialog for previewing changes.
487    
488            * Thuban/UI/renderer.py: Use new Color and Classification methods.
489    
490            * Thuban/UI/tree.py: Formatting changes.
491    
492            * Doc/thuban.dtd: Add 'label' element
493    
494            * Thuban/common.py: New. Contains common routines used throughout
495            the code.
496            (Str2Num): Takes a string and converts it to the "best" type of
497            number.
498    
499    2003-02-14  Bernhard Herzog  <[email protected]>
500    
501            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
502            dragging flag is always set to 0 even when the tool implementation
503            raises an exception
504    
505    2003-02-11  Bernhard Herzog  <[email protected]>
506    
507            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
508            method to create a splash screen.
509            (ThubanApplication.ShowMainWindow): New. Show the main window.
510            Needed so the splash screen can display the mainwindow
511            (ThubanApplication.OnInit): Call the
512            new splash_screen method to determine whether the application
513            should display a splash screen. If it displays a splash screen do
514            not immediately show the main window.
515    
516    2003-02-11  Jonathan Coles  <[email protected]>
517    
518            * Thuban/Model/classification.py: Added import line to fix
519            feature conflicts between running on python2.2 and python2.1.
520    
521            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
522            onto the clinfo parameter, so removed the deepcopy().
523    
524    2003-02-10  Jonathan Coles  <[email protected]>
525    
526            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
527            Added element_open variable to track opening and closing of tags
528            so that tags that don't span more than one line are closed with
529            /> instead of </tag_name>. Use the GetDefault*() methods of
530            the Classification class.
531    
532            * Thuban/Model/classification.py (Classificaton): Added set and
533            get methods for the default data. The class also takes a layer
534            reference so that modification messages can be sent. Fixed the
535            methods to use the new ClassData class.
536            (ClassData): New class to encapsulate the classification data
537    
538            * Thuban/Model/layer.py (Layer): Remove the
539            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
540            SetDefault*() methods on the layer's classification object.
541            (Layer.__init__): Use the new SetDefault*() methods in the
542            Classification class.
543    
544            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
545            object instead of a dictionary.
546    
547            * Thuban/UI/classifier.py (ClassRenderer): New class to
548            draw the classifications in the dialog box's table.
549            (Classifier): Modified to use the ClassRenderer class.
550    
551            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
552            methods of the Classification class.
553    
554            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
555            of the ClassData class.
556    
557            * test/test_classification.py, test/test_layer.py,
558            test/test_map.py, test/test_session.py: Fix the tests to work
559            with the above code changes.
560    
561    2003-02-03  Jonathan Coles  <[email protected]>
562    
563            * Thuban/Model/classification.py (Classification): Added getNull()
564            to return the NullData reference
565    
566            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
567            Layer.SetStrokeWidth): Modified these functions to change the
568            null data in the classification rather than keep these values
569            directly in the Layer class. Menu options to change these values
570            work again.
571    
572    2003-01-28  Jonathan Coles  <[email protected]>
573    
574            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
575            Fixed crashing problem on some systems. Dialog box shows
576            classification data.
577    
578            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
579            Colors in the tree view.
580    
581            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
582            the tree info for classifications. Commented out unnecessary lines.
583    
584            * Thuban/Model/classification.py (Classification.TreeInfo): New
585            function to add information about the classification into the
586            tree view.
587    
588    2003-01-27  Jan-Oliver Wagner <[email protected]>
589    
590            * Thuban/__init__.py (_): New.
591    
592            * Thuban/Model/classification.py, Thuban/Model/extension.py,
593            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
594            Thuban/Model/session.py, Thuban/UI/application.py,
595            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
596            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
597            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
598            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
599            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
600    
601    2003-01-27  Jonathan Coles  <[email protected]>
602    
603            * Thuban/Model/layer.py: Classification initialization calls.
604    
605            * Thuban/Model/classification.py: Created class to encapsulate
606            a layer classification. Supports specific data points and
607            ranges.
608    
609            * Thuban/Model/load.py: Added support for loading classification
610            information.
611    
612            * Thuban/Model/save.py: Added support for saving classification
613            information.
614    
615            * Thuban/UI/classifier.py: Initial class for a dialog box for
616            specifying classification information.
617    
618            * Thuban/UI/mainwindows.py: Support for opening the classifier
619            dialog.
620    
621            * Thuban/UI/renderer.py: Support for drawing a layer with the
622            classification information.
623    
624            * Data/iceland_sample_class.thuban: iceland_sample with
625            classification data.
626    
627            * test/test_classification: Tests for the Classification class.
628    
629    2002-12-09  Bernhard Herzog  <[email protected]>
630    
631            * test/test_command.py: New. Tests for the command classes.
632    
633            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
634            (Command.IsTool): New method to distinguish between command
635            switching tools and other commands.
636    
637            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
638            the tool to avoid direct assignments to instance variables
639            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
640            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
641            change the tool
642    
643            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
644            active tool's command turns insensitive, disable the tool.
645            (_tool_command): Use the new ToolCommand class
646    
647            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
648            SelectTool method to change the tool
649            (iconfile): Use the ToolCommand class
650    
651    2002-12-03  Bernhard Herzog  <[email protected]>
652    
653            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
654            the case of selected items that are not children of Layers or Maps
655            properly. Previously this bug would trigger an assertion in
656            wxWindows.
657    
658    2002-11-06  Frank Koormann  <[email protected]>
659    
660            * Thuban/UI/mainwindow.py: Altered the order of tools in the
661            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
662            Full Extent).
663    
664    2002-10-23  Bernhard Herzog  <[email protected]>
665    
666            * setup.py (setup call): version now 0.1.3
667    
668            * MANIFEST.in: Add the files in test/
669    
670            * test/README: Add note about tests requiring the iceland data
671    
672            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
673            copyright notice.
674    
675    2002-10-18  Bernhard Herzog  <[email protected]>
676    
677            * test/test_map.py
678            (TestMapWithContents.test_projected_bounding_box): Use an explicit
679            epsilon.
680    
681            * test/support.py (FloatComparisonMixin.assertFloatEqual)
682            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
683            message if the assertion fails and don't return the return value
684            of self.assert_. In assertFloatSeqEqual the return meant that not
685            all items of the sequence were compared.
686    
687    2002-09-20  Bernhard Herzog  <[email protected]>
688    
689            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
690    
691            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
692    
693            * test/test_map.py (TestMapWithContents.test_tree_info): Create
694            the string with the bounding box on the fly because of platform
695            differences in the way %g is handled.
696    
697            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
698            DBFfile too because Thuban layers can't yet cope missing DBF
699            files.
700    
701    2002-09-20  Bernhard Herzog  <[email protected]>
702    
703            * test/test_menu.py: Use initthuban instead of
704            add_thuban_dir_to_path to initialize Thuban.
705    
706            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
707            Mixin class for float comparisons
708            (SubscriberMixin): New. Mixin class to test messages sent through
709            the Connector class
710    
711            * test/README: Fix a typo and add the -v flag to the command for
712            individual tests
713    
714            * test/test_session.py: New. Test cases for Thuban.Model.session
715    
716            * test/test_proj.py: New. Test cases for Thuban.Model.proj
717    
718            * test/test_map.py: New. Test cases for Thuban.Model.map
719    
720            * test/test_layer.py: New. Test cases for Thuban.Model.layer
721    
722            * test/test_label.py: New. Test cases for Thuban.Model.label
723    
724            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
725    
726            * test/test_color.py: New. Test cases for Thuban.Model.color
727    
728            * test/test_base.py: New. Test cases for Thuban.Model.base
729    
730    2002-09-13  Bernhard Herzog  <[email protected]>
731    
732            * Thuban/Model/session.py (Session.forwarded_channels): Forward
733            the CHANGED channel too.
734    
735            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
736            CHANGED channel too.
737            (Map.__init__): Call the Modifiable constructor as well.
738    
739            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
740            event if the modified flag changes.
741            (Modifiable.changed): Tweak the doc-string.
742    
743            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
744            (MainWindow.set_position_text): Put the code that puts the text
745            with the mouse position into the status bar into the new method
746            set_position_text so that it can overwritten in derived classes.
747    
748    2002-09-12  Bernhard Herzog  <[email protected]>
749    
750            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
751            message box on the main window.
752    
753    2002-09-11  Bernhard Herzog  <[email protected]>
754    
755            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
756            the 'E' because it's less likely to interfere with other menu
757            entries.
758            (MainWindow.build_menu): remove an incorrect comment.
759    
760    2002-09-10  Bernhard Herzog  <[email protected]>
761    
762            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
763            (_tool_command): Add sensitive parameter
764            (_has_visible_map): Sensitivity callback to tools and other
765            commands that require a visible map. Use it in map_zoom_in_tool,
766            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
767            and map_full_extent
768    
769    2002-09-06  Bernhard Herzog  <[email protected]>
770    
771            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
772            VIEW_POSITION
773    
774    2002-09-04  Frank Koormann  <[email protected]>
775    
776            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
777    
778    2002-09-02  Bernhard Herzog  <[email protected]>
779    
780            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
781            wxWindows already and our implementation doesn't work correctly
782            with wxGTK 2.3:
783            (MapCanvas.__init__): Remove the instance variable
784            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
785            be drawin
786            (MapCanvas.OnIdle): Removed.
787    
788            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
789            a parameter to determine the size of the rectangle.
790            (MapCanvas.find_shape_at): Create the box around the point on a
791            layer by layer basis and make the size depend on the shape type.
792            This solves a problem with the selection of point shapes at the
793            border of the layer's bounding box
794    
795    2002-08-30  Bernhard Herzog  <[email protected]>
796    
797            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
798            for the sensitivity  of remove layer.
799            (_can_remove_layer): New. Sensitivity callback for remove layer
800            (Command layer_remove): Use _can_remove_layer
801    
802            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
803            determine whether a given layer can be deleted.
804    
805            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
806            (MapCanvas.do_redraw): Get rid of the unused update_region
807            instance variable
808    
809            * Thuban/UI/view.py: Add/update some doc-strings.
810    
811            * test/: new subdirectory with a bunch of unit tests.
812    
813            * test/README, test/test_table.py, test/test_save.py,
814            test/test_menu.py, test/test_load.py: Initial set of tests and
815            brief instructions on how to run them
816    
817    2002-08-29  Bernhard Herzog  <[email protected]>
818    
819            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
820            arcs with multiple parts.
821    
822            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
823            Handle degenrate rectangles.
824    
825            * Thuban/Model/table.py: Make writing records work correctly:
826            (Table.__init__): Keep track of whether the DBF is open for
827            writing
828            (Table.write_record): Open the DBF file for writing when necessary
829    
830    2002-08-27  Bernhard Herzog  <[email protected]>
831    
832            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
833            dbf files only for reading by default. Use a new writable dbf
834            object for writing.
835    
836    2002-08-26  Bernhard Herzog  <[email protected]>
837    
838            * Thuban/UI/mainwindow.py: Refactor the context creation:
839            (MainWindow.Context): New method to return a context
840            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
841            new method
842    
843            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
844            layer table specific code from TableGrid into LayerTableGrid
845            (TableFrame, LayerTableFrame): Split the layer table specific code
846            from TableFrame into LayerTableFrame
847            (LayerTableGrid.select_shape): Remove a debug print
848    
849            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
850            LayerTableFrame
851    
852    2002-08-23  Bernhard Herzog  <[email protected]>
853    
854            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
855            absolute filename.
856    
857    2002-08-22  Bernhard Herzog  <[email protected]>
858    
859            * Thuban/Model/table.py (Table.write_record): New method to write
860            records.
861            (Table.__init__): Open the DBF file for writing too.
862    
863            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
864            into the underlying table.
865    
866            * extensions/shapelib/shapefil.h (DBFCommit),
867            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
868            commit any changes made to the DBF file.
869    
870            * Thuban/UI/mainwindow.py (make_check_current_tool)
871            (_tool_command): Put the code that generates the "checked"
872            callback into a separate function so that we can reuse it
873            elsewhere
874    
875            * Thuban/Model/save.py (Saver): New class to handle serializing a
876            session into an XML file. The main reason to introduce a class is
877            that applications built on Thuban can derive from it so that they
878            can save additional information in a session file.
879            (save_session): Delegate almost all the work to the Saver class.
880            Rename the filename argument to file because it may be a file like
881            object now.
882    
883            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
884            code. Remove the little test code which would be executed when the
885            module is run as a script which didn't work anymore since it can't
886            import the other Thuban modules.
887            (ProcessSession, load_session): Refactor the ProcessSession to
888            have one method for each element start and end tag so that derived
889            classes can easily override the processing of individual tags.
890            Also, always parse with namespaces enabled because applications
891            built on top of Thuban will likely use namespaces if they extend
892            the session file format.
893    
894    2002-08-21  Bernhard Herzog  <[email protected]>
895    
896            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
897            because thubaninit_contents will do it for us.
898    
899    2002-08-16  Jan-Oliver Wagner <[email protected]>
900    
901            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
902            tree window already open
903    
904    2002-08-15  Bernhard Herzog  <[email protected]>
905    
906            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
907            with self.
908    
909            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
910            when we have actually captured it.
911    
912            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
913            shapefile and destroy the table.
914    
915            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
916    
917    2002-08-14  Bernhard Herzog  <[email protected]>
918    
919            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
920            instance variable columns
921            (RecordTable.GetTypeName): row and col may be negative in some
922            cases.
923    
924            * setup.py (InstallLocal.initialize_options)
925            (InstallLocal.finalize_options, InstallLocal.user_options): New
926            option create-init-file to build a thubaninit.py when running
927            install_local
928            (InstallLocal.run): Create the thubaninit.py module when requested
929            (thubaninit_contents): Split the template into several parts and
930            create a new function thubaninit_contents that creates the
931            contents of a thubaninit module.
932            (ThubanInstall.run): Use the new function to create the thubaninit
933            module.
934    
935    2002-07-30  Bernhard Herzog  <[email protected]>
936    
937            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
938            cleanup.
939            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
940    
941            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
942            direct base class' Destroy method.
943    
944            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
945            layers.
946            (Map.Destroy): Destroy the label_layer as well and call the
947            inherited Desatroymethod first so that no more messages are
948            issued.
949            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
950            message if the stacking order actually has changed. Add
951            doc-strings.
952            (Map.BoundingBox): Correct the doc-string.
953            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
954            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
955    
956            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
957            all labels.
958    
959    2002-07-29  Bernhard Herzog  <[email protected]>
960    
961            * Thuban/Model/map.py (Map.subscribe_layer_channels)
962            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
963            to a layer's channels into separate methods.
964            (Map.RemoveLayer, Map.AddLayer): Call the new methods
965            (Map.Destroy): Unsubscribe from a layer's channels before
966            destroying it.
967    
968            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
969            selected_layer parameter to searched_layer which is the layer to
970            search in.
971            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
972            search to that layer. Return the selected layer and shape.
973    
974            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
975            typo
976    
977    2002-07-24  Bernhard Herzog  <[email protected]>
978    
979            * Thuban/UI/application.py (ThubanApplication.create_session):
980            Extend the doc string.
981            (ThubanApplication.subscribe_session)
982            (ThubanApplication.unsubscribe_session): New methods to
983            subscribe/unsubscribe to/from session channels.
984            (ThubanApplication.SetSession): Call the new methods here.
985            (ThubanApplication.maps_changed, ThubanApplication.set_map):
986            Renamed set_map to maps_changed. Its now a subscriber for
987            MAPS_CHANGED.
988    
989            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
990            x-coordinate in case of simple clicks
991    
992            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
993            don't pass it as a parameter
994    
995            * Thuban/Model/session.py (Session.RemoveMap): New
996    
997            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
998            window size into a parameter.
999    
1000    2002-07-23  Bernhard Herzog  <[email protected]>
1001    
1002            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
1003            just commands.
1004    
1005            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
1006            parameter list a bit to allow setting the window title and the
1007            initial message in the status bar. Update the callers.
1008    
1009            * Thuban/UI/application.py (ThubanApplication.OnInit)
1010            (ThubanApplication.CreateMainWindow): Put the mainwindow
1011            instantiation into a separate method so that it can be overridden
1012            by a subclass.
1013    
1014    2002-07-19  Bernhard Herzog  <[email protected]>
1015    
1016            * Thuban/Model/session.py: Issue a CHANGED message every time
1017            another changed message is issued to make it easier to get
1018            notified of changes.
1019            (Session): Update the doc string
1020            (Session.forward): Issue changed-events as CHANGED as well.
1021            (Session.changed): Overwrite the inherited version to issue
1022            CHANGED events as well.
1023    
1024            * Thuban/UI/tree.py: We can now simply subscribe to the session's
1025            CHANGED channel to be informed of changes.
1026            (SessionTreeCtrl.session_channels): Not needed any longer.
1027            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
1028            Only have to (un)subscribe CHANGED
1029    
1030            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
1031    
1032            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
1033            for the wxPython locale bug to __init__.py so that it's
1034            automatically executed by anybody using UI code from Thuban.
1035    
1036    2002-07-18  Bernhard Herzog  <[email protected]>
1037    
1038            * Thuban/UI/main.py (main): app no longer needs to be global
1039    
1040            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
1041            as parameter and store it in an instance variable
1042            (MainWindow.invoke_command, MainWindow.update_command_ui)
1043            (MainWindow.save_modified_session, MainWindow.NewSession)
1044            (MainWindow.OpenSession, MainWindow.SaveSession)
1045            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
1046            application object.
1047    
1048            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
1049            the main window with self.
1050    
1051            * Thuban/UI/context.py: New module with the context class
1052    
1053            * Thuban/UI/command.py (Command): Update doc string.
1054    
1055            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
1056            MainWindow.update_command_ui): Pass an instance of the context
1057            class to the command's methods
1058            (check_current_tool, call_method): Handle the new context
1059            implementation
1060    
1061            * Examples/simple_extensions/simple_tool.py (simple_tool,
1062            check_simple_tool): Handle the new context implementation
1063    
1064            * Examples/simple_extensions/simple_command.py (simple_command):
1065            Handle the new context implementation. Update the comments about
1066            the context.
1067    
1068            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
1069            doc-string
1070            (ThubanApplication.Session): New method to return the session
1071            object
1072    
1073            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
1074            interactor's selected_layer may not be a layer of the current
1075            session when the tree is updated while a new session is being set.
1076    
1077    2002-07-17  Bernhard Herzog  <[email protected]>
1078    
1079            * Thuban/UI/tree.py (color_string): Removed. No longer used.
1080            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
1081            update_tree into update_tree and add_items. The tree now uses a
1082            more generic way to display the contents of the tree.
1083            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
1084    
1085            * Thuban/Model/layer.py (Layer.TreeInfo),
1086            Thuban/Model/extension.py (Extension.TreeInfo),
1087            Thuban/Model/map.py (Map.TreeInfo),
1088            Thuban/Model/session.py (Session.TreeInfo):
1089            Add TreeInfo methods to implement the new tree view update scheme
1090    
1091    2002-07-16  Bernhard Herzog  <[email protected]>
1092    
1093            * Thuban/UI/application.py: Don't use "import from" for the
1094            MainWindow. It can't always be resolved.
1095            (ThubanApplication.OnInit): change reference to MainWindow
1096            accordingly.
1097    
1098            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
1099            completely
1100    
1101    2002-07-10  Bernhard Herzog  <[email protected]>
1102    
1103            * setup.py (create_init_module): New configurable variable whose
1104            default depends on the platform we're running on.
1105            (ThubanInstall.initialize_options): Initialize
1106            self.create_init_module from the global create_init_module
1107            (ThubanInstall.user_options): indictate that the options
1108            create-init-module and init-module-dir have arguments.
1109    
1110            * setup.py: In the setup call change the version number to include
1111            cvs.
1112    
1113            * MANIFEST.in: Add the files in Examples
1114    
1115    2002-07-09  Bernhard Herzog  <[email protected]>
1116    
1117            * setup.py: In the setup call, use the thuban homepage as the
1118            value of the url parameter.
1119    
1120            * Examples: New subdirectory for examples.
1121    
1122            * Examples/simple_extensions/simple_tool.xpm,
1123            Examples/simple_extensions/simple_tool.py,
1124            Examples/simple_extensions/simple_command.py,
1125            Examples/simple_extensions/README: Simple examples showing how to
1126            add new commands and tools.
1127    
1128            * setup.cfg (bdist_rpm): Add the default value for prefix and tell
1129            bdist_rpm that we also have an install script.
1130            (bdist_inno): Add 2002 to the copyright notice.
1131    
1132            * setup.py: Create a file in python's site-packages directory to
1133            make installation of Thuban as a library easier.
1134            (ThubanInstall.user_options): Add two new options,
1135            create-init-module and init-module-dir
1136            (ThubanInstall.expand_with_pure_python_dirs): New method to expand
1137            filenames for installation in the default directories.
1138            (ThubanInstall.select_scheme, ThubanInstall.convert_paths): Extend
1139            the inherited methods to capture some filenames before they're
1140            transformed too much by distutils.
1141            (ThubanInstall.run): Create the init module if requested.
1142            (ThubanInstall.thuban_init_filename): New method to return the
1143            full name of the init module.
1144            (ThubanInstall.get_outputs): Append the filename of the init
1145            module.
1146    
1147    2002-07-08  Bernhard Herzog  <[email protected]>
1148    
1149            * setup.py (thuban_bdist_rpm): Extend this version of bdist_rpm to
1150            handle the prefix properly which means that the default for the
1151            installation prefix should be /usr for RPMs and /usr/local when
1152            doing a normal source install.
1153            (bdist_rpm_install_script): Script to override the default install
1154            commands in the specfile generated by the bdist_rpm command.
1155            (thuban_bdist_rpm.user_options): Add a prefix option
1156            (thuban_bdist_rpm.initialize_options): Init the prefix option.
1157            Create the script files for the spec files as empty files here
1158            (thuban_bdist_rpm._make_spec_file): Override the inherited method
1159            to fill the script files with content.
1160    
1161            * Thuban/Model/save.py (relative_filename): Wrapper around
1162            Thuban.Lib.fileutil.relative_filename that accepts an empty dir
1163            argument. save_session now automatically uses this version,
1164            solving a problem when saving to a relative filename.
1165    
1166            * setup.py: In the setup call, make sure that the library
1167            directories are under $prefix/lib not directly under $prefix.
1168    
1169    2002-06-20  Jan-Oliver Wagner <[email protected]>
1170    
1171            * Thuban/Model/extension.py: new module to handle extension objects.
1172            * Thuban/Model/messages.py: new messages for extensions.
1173            * Thuban/Model/session.py (Session.Extensions, Session.HasExtensions,
1174            Session.AddExtension): new for handling extensions.
1175            Also some other minor changes to round up extension handling.
1176            * Thuban/UI/tree.py (SessionTreeCrtl:update_tree): Added visualization
1177            of Extension titles and title and names of its objects.
1178    
1179    2002-05-29  Bernhard Herzog  <[email protected]>
1180    
1181            * Thuban/UI/mainwindow.py (MainWindow.bind_command_events): Bind
1182            the events for a command.
1183            (MainWindow.add_toolbar_command, MainWindow.add_menu_command):
1184            Call bind_command_events to bind the events. add_toolbar_command
1185            can now bind events too so that it's possible to have commands
1186            that are only available through the toolbar.
1187            (MainWindow.init_ids): New instance variable events_bound to keep
1188            track of for which commands events have been bound.
1189    
1190  2002-05-28  Bernhard Herzog  <[email protected]>  2002-05-28  Bernhard Herzog  <[email protected]>
1191    
1192          * Thuban/UI/menu.py: New module to build and manage menus.          * Thuban/UI/menu.py: New module to build and manage menus.
# Line 13  Line 1202 
1202          (ThubanApplication.read_startup_files): New method to run          (ThubanApplication.read_startup_files): New method to run
1203          ~/.thuban/thubanstart.py          ~/.thuban/thubanstart.py
1204    
1205            * Thuban/UI/mainwindow.py (MainWindow.__init__, main_toolbar):
1206            Move the toolbar definition to the Menu instance main_toolbar.
1207            (MainWindow.build_toolbar): New method to build the toolbar
1208            similar to the build_menu methods
1209    
1210  2002-05-23  Bernhard Herzog  <[email protected]>  2002-05-23  Bernhard Herzog  <[email protected]>
1211    
1212          * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of          * Thuban/UI/mainwindow.py (MainWindow.__init__): Fix spelling of
# Line 201  Line 1395 
1395          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
1396          position in the statusbar          position in the statusbar
1397    
1398  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
1399    
1400          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
1401    
1402  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
1403            
1404          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
1405    
1406          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
1407    
1408          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
1409    
1410  2002-04-21      Jan-Oliver Wagner <[email protected]>          * Thuban/UI/tree.py (update_tree): added test for None on map bounding
1411            box
1412    
1413    2002-04-21  Jan-Oliver Wagner <[email protected]>
1414    
1415          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
1416    
1417          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
1418    
1419          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
1420          icon; added map_full_extend as tool          icon; added map_full_extend as tool
1421    
1422  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
1423    
1424          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
1425          saving _new_ sessions          saving _new_ sessions
# Line 326  Line 1521 
1521    
1522          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1523          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1524    
1525  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1526    
1527          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1528          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1529    
1530          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1531          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1532          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1533          too.          too.
# Line 443  Line 1637 
1637          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
1638          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
1639    
1640          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1641          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
1642          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
1643          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
1644          the application's OnInit method          the application's OnInit method
# Line 460  Line 1654 
1654          layer to the tableview dialog.          layer to the tableview dialog.
1655    
1656          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
1657          (TableGrid):          (TableGrid):
1658          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
1659          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
1660          (TableFrame.__init__):          (TableFrame.__init__):
# Line 527  Line 1721 
1721  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1722    
1723          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1724            
1725          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1726          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1727            
1728          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1729          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1730          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 577  Line 1771 
1771          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1772          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1773          link_file method          link_file method
1774            
1775          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1776          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1777    
# Line 614  Line 1808 
1808          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1809          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1810          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1811            
1812          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1813          installer          installer
1814    

Legend:
Removed from v.190  
changed lines
  Added in v.538

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26