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

Legend:
Removed from v.172  
changed lines
  Added in v.569

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26