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

Legend:
Removed from v.64  
changed lines
  Added in v.456

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26