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

Legend:
Removed from v.44  
changed lines
  Added in v.300

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26