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

Legend:
Removed from v.202  
changed lines
  Added in v.567

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26