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

Legend:
Removed from v.26  
changed lines
  Added in v.557

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26