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

Legend:
Removed from v.55  
changed lines
  Added in v.402

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26