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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26