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

Legend:
Removed from v.46  
changed lines
  Added in v.396

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26