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

Legend:
Removed from v.9  
changed lines
  Added in v.280

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26