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

Legend:
Removed from v.35  
changed lines
  Added in v.408

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26