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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26