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

Legend:
Removed from v.124  
changed lines
  Added in v.425

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26