/[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 210 by bh, Tue Jul 9 16:17:38 2002 UTC revision 387 by jonathan, Mon Feb 3 11:44:41 2003 UTC
# Line 1  Line 1 
1    2003-02-03  Jonathan Coles  <[email protected]>
2    
3            * Thuban/Model/classification.py (Classification): Added getNull()
4            to return the NullData reference
5    
6            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
7            Layer.SetStrokeWidth): Modified these functions to change the
8            null data in the classification rather than keep these values
9            directly in the Layer class. Menu options to change these values
10            work again.
11    
12    2003-01-28  Jonathan Coles  <[email protected]>
13    
14            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
15            Fixed crashing problem on some systems. Dialog box shows
16            classification data.
17    
18            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
19            Colors in the tree view.
20    
21            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
22            the tree info for classifications. Commented out unnecessary lines.
23    
24            * Thuban/Model/classification.py (Classification.TreeInfo): New
25            function to add information about the classification into the
26            tree view.
27    
28    2003-01-27      Jan-Oliver Wagner <[email protected]>
29    
30            * Thuban/__init__.py (_): New.
31    
32            * Thuban/Model/classification.py, Thuban/Model/extension.py,
33            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
34            Thuban/Model/session.py, Thuban/UI/application.py, Thuban/UI/classifier.py,
35            Thuban/UI/context.py, Thuban/UI/controls.py, Thuban/UI/identifyview.py,
36            Thuban/UI/labeldialog.py, Thuban/UI/mainwindow.py, Thuban/UI/menu.py,
37            Thuban/UI/proj4dialog.py, Thuban/UI/renderer.py, Thuban/UI/tree.py,
38            Thuban/Lib/connector.py, Thuban/Lib/fileutil.py:
39            Replace user string by _() for i18n.
40    
41    2003-01-27  Jonathan Coles  <[email protected]>
42    
43      * Thuban/Model/layer.py: Classification initialization calls.
44    
45      * Thuban/Model/classification.py: Created class to encapsulate
46      a layer classification. Supports specific data points and
47      ranges.
48    
49      * Thuban/Model/load.py: Added support for loading classification
50      information.
51    
52      * Thuban/Model/save.py: Added support for saving classification
53      information.
54    
55      * Thuban/UI/classifier.py: Initial class for a dialog box for
56      specifying classification information.
57    
58      * Thuban/UI/mainwindows.py: Support for opening the classifier
59      dialog.
60    
61      * Thuban/UI/renderer.py: Support for drawing a layer with the
62      classification information.
63    
64      * Data/iceland_sample_class.thuban: iceland_sample with
65      classification data.
66    
67      * test/test_classification: Tests for the Classification class.
68    
69    2002-12-09  Bernhard Herzog  <[email protected]>
70    
71            * test/test_command.py: New. Tests for the command classes.
72    
73            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
74            (Command.IsTool): New method to distinguish between command
75            switching tools and other commands.
76    
77            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
78            the tool to avoid direct assignments to instance variables
79            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
80            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
81            change the tool
82    
83            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
84            active tool's command turns insensitive, disable the tool.
85            (_tool_command): Use the new ToolCommand class
86    
87            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
88            SelectTool method to change the tool
89            (iconfile): Use the ToolCommand class
90    
91    2002-12-03  Bernhard Herzog  <[email protected]>
92    
93            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
94            the case of selected items that are not children of Layers or Maps
95            properly. Previously this bug would trigger an assertion in
96            wxWindows.
97    
98    2002-11-06  Frank Koormann  <[email protected]>
99    
100            * Thuban/UI/mainwindow.py: Altered the order of tools in the
101            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
102            Full Extent).
103        
104    2002-10-23  Bernhard Herzog  <[email protected]>
105    
106            * setup.py (setup call): version now 0.1.3
107    
108            * MANIFEST.in: Add the files in test/
109    
110            * test/README: Add note about tests requiring the iceland data
111    
112            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
113            copyright notice.
114    
115    2002-10-18  Bernhard Herzog  <[email protected]>
116    
117            * test/test_map.py
118            (TestMapWithContents.test_projected_bounding_box): Use an explicit
119            epsilon.
120    
121            * test/support.py (FloatComparisonMixin.assertFloatEqual)
122            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
123            message if the assertion fails and don't return the return value
124            of self.assert_. In assertFloatSeqEqual the return meant that not
125            all items of the sequence were compared.
126    
127    2002-09-20  Bernhard Herzog  <[email protected]>
128    
129            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
130    
131            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
132    
133            * test/test_map.py (TestMapWithContents.test_tree_info): Create
134            the string with the bounding box on the fly because of platform
135            differences in the way %g is handled.
136    
137            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
138            DBFfile too because Thuban layers can't yet cope missing DBF
139            files.
140    
141    2002-09-20  Bernhard Herzog  <[email protected]>
142    
143            * test/test_menu.py: Use initthuban instead of
144            add_thuban_dir_to_path to initialize Thuban.
145    
146            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
147            Mixin class for float comparisons
148            (SubscriberMixin): New. Mixin class to test messages sent through
149            the Connector class
150    
151            * test/README: Fix a typo and add the -v flag to the command for
152            individual tests
153    
154            * test/test_session.py: New. Test cases for Thuban.Model.session
155    
156            * test/test_proj.py: New. Test cases for Thuban.Model.proj
157    
158            * test/test_map.py: New. Test cases for Thuban.Model.map
159    
160            * test/test_layer.py: New. Test cases for Thuban.Model.layer
161    
162            * test/test_label.py: New. Test cases for Thuban.Model.label
163    
164            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
165    
166            * test/test_color.py: New. Test cases for Thuban.Model.color
167    
168            * test/test_base.py: New. Test cases for Thuban.Model.base
169    
170    2002-09-13  Bernhard Herzog  <[email protected]>
171    
172            * Thuban/Model/session.py (Session.forwarded_channels): Forward
173            the CHANGED channel too.
174    
175            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
176            CHANGED channel too.
177            (Map.__init__): Call the Modifiable constructor as well.
178    
179            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
180            event if the modified flag changes.
181            (Modifiable.changed): Tweak the doc-string.
182    
183            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
184            (MainWindow.set_position_text): Put the code that puts the text
185            with the mouse position into the status bar into the new method
186            set_position_text so that it can overwritten in derived classes.
187    
188    2002-09-12  Bernhard Herzog  <[email protected]>
189    
190            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
191            message box on the main window.
192    
193    2002-09-11  Bernhard Herzog  <[email protected]>
194    
195            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
196            the 'E' because it's less likely to interfere with other menu
197            entries.
198            (MainWindow.build_menu): remove an incorrect comment.
199    
200    2002-09-10  Bernhard Herzog  <[email protected]>
201    
202            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
203            (_tool_command): Add sensitive parameter
204            (_has_visible_map): Sensitivity callback to tools and other
205            commands that require a visible map. Use it in map_zoom_in_tool,
206            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
207            and map_full_extent
208    
209    2002-09-06  Bernhard Herzog  <[email protected]>
210    
211            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
212            VIEW_POSITION
213    
214    2002-09-04  Frank Koormann   <[email protected]>
215    
216            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
217    
218    2002-09-02  Bernhard Herzog  <[email protected]>
219    
220            * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
221            wxWindows already and our implementation doesn't work correctly
222            with wxGTK 2.3:
223            (MapCanvas.__init__): Remove the instance variable
224            (MapCanvas.OnPaint): Always call do_redraw when there's a map to
225            be drawin
226            (MapCanvas.OnIdle): Removed.
227    
228            * Thuban/UI/view.py (MapCanvas.unprojected_rect_around_point): Add
229            a parameter to determine the size of the rectangle.
230            (MapCanvas.find_shape_at): Create the box around the point on a
231            layer by layer basis and make the size depend on the shape type.
232            This solves a problem with the selection of point shapes at the
233            border of the layer's bounding box
234    
235    2002-08-30  Bernhard Herzog  <[email protected]>
236    
237            * Thuban/UI/mainwindow.py (MainWindow.CanRemoveLayer): New method
238            for the sensitivity  of remove layer.
239            (_can_remove_layer): New. Sensitivity callback for remove layer
240            (Command layer_remove): Use _can_remove_layer
241    
242            * Thuban/Model/map.py (Map.CanRemoveLayer): New method to
243            determine whether a given layer can be deleted.
244    
245            * Thuban/UI/view.py (MapCanvas.__init__, MapCanvas.OnPaint)
246            (MapCanvas.do_redraw): Get rid of the unused update_region
247            instance variable
248    
249            * Thuban/UI/view.py: Add/update some doc-strings.
250    
251            * test/: new subdirectory with a bunch of unit tests.
252    
253            * test/README, test/test_table.py, test/test_save.py,
254            test/test_menu.py, test/test_load.py: Initial set of tests and
255            brief instructions on how to run them
256    
257    2002-08-29  Bernhard Herzog  <[email protected]>
258    
259            * Thuban/UI/renderer.py (ScreenRenderer.draw_shape_layer): Handle
260            arcs with multiple parts.
261    
262            * Thuban/UI/view.py (ZoomInTool.MouseUp, ZoomOutTool.MouseUp):
263            Handle degenrate rectangles.
264    
265            * Thuban/Model/table.py: Make writing records work correctly:
266            (Table.__init__): Keep track of whether the DBF is open for
267            writing
268            (Table.write_record): Open the DBF file for writing when necessary
269    
270    2002-08-27  Bernhard Herzog  <[email protected]>
271    
272            * Thuban/Model/table.py (Table.write_record, Table.__init__): Open
273            dbf files only for reading by default. Use a new writable dbf
274            object for writing.
275    
276    2002-08-26  Bernhard Herzog  <[email protected]>
277    
278            * Thuban/UI/mainwindow.py: Refactor the context creation:
279            (MainWindow.Context): New method to return a context
280            (MainWindow.invoke_command, MainWindow.update_command_ui): Use the
281            new method
282    
283            * Thuban/UI/tableview.py (TableGrid, LayerTableGrid): Split the
284            layer table specific code from TableGrid into LayerTableGrid
285            (TableFrame, LayerTableFrame): Split the layer table specific code
286            from TableFrame into LayerTableFrame
287            (LayerTableGrid.select_shape): Remove a debug print
288    
289            * Thuban/UI/mainwindow.py (MainWindow.LayerShowTable): Use the
290            LayerTableFrame
291    
292    2002-08-23  Bernhard Herzog  <[email protected]>
293    
294            * Thuban/Model/layer.py (Layer.__init__): Make sure we have an
295            absolute filename.
296    
297    2002-08-22  Bernhard Herzog  <[email protected]>
298    
299            * Thuban/Model/table.py (Table.write_record): New method to write
300            records.
301            (Table.__init__): Open the DBF file for writing too.
302    
303            * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
304            into the underlying table.
305    
306            * extensions/shapelib/shapefil.h (DBFCommit),
307            extensions/shapelib/dbfopen.c (DBFCommit): New API function to
308            commit any changes made to the DBF file.
309    
310            * Thuban/UI/mainwindow.py (make_check_current_tool)
311            (_tool_command): Put the code that generates the "checked"
312            callback into a separate function so that we can reuse it
313            elsewhere
314    
315            * Thuban/Model/save.py (Saver): New class to handle serializing a
316            session into an XML file. The main reason to introduce a class is
317            that applications built on Thuban can derive from it so that they
318            can save additional information in a session file.
319            (save_session): Delegate almost all the work to the Saver class.
320            Rename the filename argument to file because it may be a file like
321            object now.
322    
323            * Thuban/Model/load.py: Get rid of the Python 1.5.2 compatibility
324            code. Remove the little test code which would be executed when the
325            module is run as a script which didn't work anymore since it can't
326            import the other Thuban modules.
327            (ProcessSession, load_session): Refactor the ProcessSession to
328            have one method for each element start and end tag so that derived
329            classes can easily override the processing of individual tags.
330            Also, always parse with namespaces enabled because applications
331            built on top of Thuban will likely use namespaces if they extend
332            the session file format.
333    
334    2002-08-21  Bernhard Herzog  <[email protected]>
335    
336            * setup.py (ThubanInstall.run): Don't repr install_lib_orig
337            because thubaninit_contents will do it for us.
338    
339    2002-08-16      Jan-Oliver Wagner <[email protected]>
340    
341            * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
342            tree window already open
343    
344    2002-08-15  Bernhard Herzog  <[email protected]>
345    
346            * Thuban/Model/layer.py (Layer.Destroy): Call the unboundd method
347            with self.
348    
349            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Only release the mouse
350            when we have actually captured it.
351    
352            * Thuban/Model/layer.py (Layer.Destroy): New. Explicitly close the
353            shapefile and destroy the table.
354    
355            * Thuban/Model/table.py (Table.Destroy): New. Close the DBF file.
356    
357    2002-08-14  Bernhard Herzog  <[email protected]>
358    
359            * Thuban/UI/controls.py (RecordTable.__init__): Remove the unused
360            instance variable columns
361            (RecordTable.GetTypeName): row and col may be negative in some
362            cases.
363    
364            * setup.py (InstallLocal.initialize_options)
365            (InstallLocal.finalize_options, InstallLocal.user_options): New
366            option create-init-file to build a thubaninit.py when running
367            install_local
368            (InstallLocal.run): Create the thubaninit.py module when requested
369            (thubaninit_contents): Split the template into several parts and
370            create a new function thubaninit_contents that creates the
371            contents of a thubaninit module.
372            (ThubanInstall.run): Use the new function to create the thubaninit
373            module.
374    
375    2002-07-30  Bernhard Herzog  <[email protected]>
376    
377            * Thuban/UI/application.py (ThubanApplication.OnExit): Do some
378            cleanup.
379            (ThubanApplication.MainLoop): Extend to automatically call OnExit.
380    
381            * Thuban/Model/session.py (Session.Destroy): Don't bypass the
382            direct base class' Destroy method.
383    
384            * Thuban/Model/map.py (Map.ClearLayers): New method to delete all
385            layers.
386            (Map.Destroy): Destroy the label_layer as well and call the
387            inherited Desatroymethod first so that no more messages are
388            issued.
389            (Map.RaiseLayer, Map.LowerLayer): Only issue LAYERS_CHANGED
390            message if the stacking order actually has changed. Add
391            doc-strings.
392            (Map.BoundingBox): Correct the doc-string.
393            (Map.AddLayer, Map.RemoveLayer, Map.Layers, Map.HasLayers)
394            (Map.ProjectedBoundingBox, Map.SetProjection): Add doc-strings.
395    
396            * Thuban/Model/label.py (LabelLayer.ClearLabels): New to delete
397            all labels.
398    
399    2002-07-29  Bernhard Herzog  <[email protected]>
400    
401            * Thuban/Model/map.py (Map.subscribe_layer_channels)
402            (Map.unsubscribe_layer_channels): Put the code that (un)subscribes
403            to a layer's channels into separate methods.
404            (Map.RemoveLayer, Map.AddLayer): Call the new methods
405            (Map.Destroy): Unsubscribe from a layer's channels before
406            destroying it.
407    
408            * Thuban/UI/view.py (MapCanvas.find_shape_at): Change the
409            selected_layer parameter to searched_layer which is the layer to
410            search in.
411            (MapCanvas.SelectShapeAt): New parameter layer to restrict the
412            search to that layer. Return the selected layer and shape.
413    
414            * Examples/simple_extensions/simple_tool.py (simple_tool): Fix a
415            typo
416    
417    2002-07-24  Bernhard Herzog  <[email protected]>
418    
419            * Thuban/UI/application.py (ThubanApplication.create_session):
420            Extend the doc string.
421            (ThubanApplication.subscribe_session)
422            (ThubanApplication.unsubscribe_session): New methods to
423            subscribe/unsubscribe to/from session channels.
424            (ThubanApplication.SetSession): Call the new methods here.
425            (ThubanApplication.maps_changed, ThubanApplication.set_map):
426            Renamed set_map to maps_changed. Its now a subscriber for
427            MAPS_CHANGED.
428    
429            * Thuban/UI/view.py (ZoomOutTool.MouseUp): Use the correct
430            x-coordinate in case of simple clicks
431    
432            * Thuban/Model/base.py (Modifiable.changed): Apply the args tuple,
433            don't pass it as a parameter
434    
435            * Thuban/Model/session.py (Session.RemoveMap): New
436    
437            * Thuban/UI/mainwindow.py (MainWindow.__init__): Turn the initial
438            window size into a parameter.
439    
440    2002-07-23  Bernhard Herzog  <[email protected]>
441    
442            * Thuban/UI/menu.py (Menu.item_index): Also search for menus not
443            just commands.
444    
445            * Thuban/UI/mainwindow.py (MainWindow.__init__): Change the
446            parameter list a bit to allow setting the window title and the
447            initial message in the status bar. Update the callers.
448    
449            * Thuban/UI/application.py (ThubanApplication.OnInit)
450            (ThubanApplication.CreateMainWindow): Put the mainwindow
451            instantiation into a separate method so that it can be overridden
452            by a subclass.
453    
454    2002-07-19  Bernhard Herzog  <[email protected]>
455    
456            * Thuban/Model/session.py: Issue a CHANGED message every time
457            another changed message is issued to make it easier to get
458            notified of changes.
459            (Session): Update the doc string
460            (Session.forward): Issue changed-events as CHANGED as well.
461            (Session.changed): Overwrite the inherited version to issue
462            CHANGED events as well.
463    
464            * Thuban/UI/tree.py: We can now simply subscribe to the session's
465            CHANGED channel to be informed of changes.
466            (SessionTreeCtrl.session_channels): Not needed any longer.
467            (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
468            Only have to (un)subscribe CHANGED
469    
470            * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
471    
472            * Thuban/UI/main.py, Thuban/UI/__init__.py: Move the work-around
473            for the wxPython locale bug to __init__.py so that it's
474            automatically executed by anybody using UI code from Thuban.
475    
476    2002-07-18  Bernhard Herzog  <[email protected]>
477    
478            * Thuban/UI/main.py (main): app no longer needs to be global
479    
480            * Thuban/UI/mainwindow.py (MainWindow.__init__): Add application
481            as parameter and store it in an instance variable
482            (MainWindow.invoke_command, MainWindow.update_command_ui)
483            (MainWindow.save_modified_session, MainWindow.NewSession)
484            (MainWindow.OpenSession, MainWindow.SaveSession)
485            (MainWindow.SaveSessionAs, MainWindow.ShowSessionTree): Use self's
486            application object.
487    
488            * Thuban/UI/application.py (ThubanApplication.OnInit): Instantiate
489            the main window with self.
490    
491            * Thuban/UI/context.py: New module with the context class
492    
493            * Thuban/UI/command.py (Command): Update doc string.
494    
495            * Thuban/UI/mainwindow.py (MainWindow.invoke_command,
496            MainWindow.update_command_ui): Pass an instance of the context
497            class to the command's methods
498            (check_current_tool, call_method): Handle the new context
499            implementation
500    
501            * Examples/simple_extensions/simple_tool.py (simple_tool,
502            check_simple_tool): Handle the new context implementation
503    
504            * Examples/simple_extensions/simple_command.py (simple_command):
505            Handle the new context implementation. Update the comments about
506            the context.
507    
508            * Thuban/UI/application.py (ThubanApplication.SetSession): Add
509            doc-string
510            (ThubanApplication.Session): New method to return the session
511            object
512    
513            * Thuban/UI/tree.py (SessionTreeCtrl.update_tree): The
514            interactor's selected_layer may not be a layer of the current
515            session when the tree is updated while a new session is being set.
516    
517    2002-07-17  Bernhard Herzog  <[email protected]>
518    
519            * Thuban/UI/tree.py (color_string): Removed. No longer used.
520            (SessionTreeCtrl.update_tree, SessionTreeCtrl.add_items): Split
521            update_tree into update_tree and add_items. The tree now uses a
522            more generic way to display the contents of the tree.
523            (SessionTreeCtrl): Add a doc string explaining the TreeInfo method
524    
525            * Thuban/Model/layer.py (Layer.TreeInfo),
526            Thuban/Model/extension.py (Extension.TreeInfo),
527            Thuban/Model/map.py (Map.TreeInfo),
528            Thuban/Model/session.py (Session.TreeInfo):
529            Add TreeInfo methods to implement the new tree view update scheme
530    
531    2002-07-16  Bernhard Herzog  <[email protected]>
532    
533            * Thuban/UI/application.py: Don't use "import from" for the
534            MainWindow. It can't always be resolved.
535            (ThubanApplication.OnInit): change reference to MainWindow
536            accordingly.
537    
538            * Thuban/UI/menu.py (Menu.SetItems): New method to replace a menu
539            completely
540    
541    2002-07-10  Bernhard Herzog  <[email protected]>
542    
543            * setup.py (create_init_module): New configurable variable whose
544            default depends on the platform we're running on.
545            (ThubanInstall.initialize_options): Initialize
546            self.create_init_module from the global create_init_module
547            (ThubanInstall.user_options): indictate that the options
548            create-init-module and init-module-dir have arguments.
549    
550            * setup.py: In the setup call change the version number to include
551            cvs.
552    
553            * MANIFEST.in: Add the files in Examples
554    
555  2002-07-09  Bernhard Herzog  <[email protected]>  2002-07-09  Bernhard Herzog  <[email protected]>
556    
557          * setup.py: In the setup call, use the thuban homepage as the          * setup.py: In the setup call, use the thuban homepage as the

Legend:
Removed from v.210  
changed lines
  Added in v.387

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26