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

Legend:
Removed from v.87  
changed lines
  Added in v.475

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26