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

Legend:
Removed from v.126  
changed lines
  Added in v.490

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26