/[thuban]/branches/greater-ms3/thuban/ChangeLog
ViewVC logotype

Diff of /branches/greater-ms3/thuban/ChangeLog

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26