/[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 304 by bh, Mon Sep 2 16:47:59 2002 UTC revision 408 by jonathan, Wed Feb 19 16:49:49 2003 UTC
# Line 1  Line 1 
1    2003-02-19  Jonathan Coles   <[email protected]>
2    
3            * test/test_classification.py, test/test_layer.py,
4            test/test_load.py, test/test_map.py, test/test_session.py:
5            Updated the tests to use the new functions that are in the
6            respective classes.
7    
8            * Thuban/Model/classification.py (Classification):
9            Uses the new ClassData* classes. Modification messages are
10            passed up to the parent layer (if it exists).
11            (ClassData): New class to encapsulate the common data in each
12            classification property.
13            (ClassDataDefault): Represents the Default class. data.
14            (ClassDataPoint): Represents a single class. data point
15            (ClassDataRange): Represents a class. range
16            (ClassDataMap): Represents a class. map (unused).
17    
18            * Thuban/Model/color.py: Added Color.None to represent something
19            with no color. Color.Black represents the color black.
20            (NoColor): Helper class derived from Color to represent something
21            with no color.
22    
23            * Thuban/Model/layer.py (Layer): Removed references to fill, stroke,
24            stroke_width attributes. Made the 'classification' attribute private.
25            New methods for setting/getting the classification.
26    
27            * Thuban/Model/load.py (ProcessSession): Use new methods on Layer
28            to get the classifcation and use the new ClassData* classes to
29            hold the classification data. Use Str2Num to convert numbers
30            properly.
31    
32            * Thuban/Model/save.py (Saver): Use new Color and Classification
33            methods
34    
35            * Thuban/UI/classifier.py (ClassGrid): New class to represent a
36            custom grid.
37            (ClassTable): Support for editing Values and Labels and for
38            changing what type (point or range) of data is stored in each
39            property based on how the user enters the data.
40            (Classifier): Support for saving the new classifications and
41            launching the dialog to edit a property.
42            (SelectPropertiesDialog): New class for editing the visual
43            properties of a classification (stroke color, width, and fill color)
44            (ClassPreviewer): Took the Draw method from ClassRenderer and
45            made most of it into this new class. Intend to use this class in
46            the SelectPropertiesDialog for previewing changes.
47    
48            * Thuban/UI/renderer.py: Use new Color and Classification methods.
49    
50            * Thuban/UI/tree.py: Formatting changes.
51    
52            * Doc/thuban.dtd: Add 'label' element
53    
54            * Thuban/common.py: New. Contains common routines used throughout
55            the code.
56            (Str2Num): Takes a string and converts it to the "best" type of
57            number.
58    
59    2003-02-14  Bernhard Herzog  <[email protected]>
60    
61            * Thuban/UI/view.py (MapCanvas.OnLeftUp): Make sure that the
62            dragging flag is always set to 0 even when the tool implementation
63            raises an exception
64    
65    2003-02-11  Bernhard Herzog  <[email protected]>
66    
67            * Thuban/UI/application.py (ThubanApplication.splash_screen): New
68            method to create a splash screen.
69            (ThubanApplication.ShowMainWindow): New. Show the main window.
70            Needed so the splash screen can display the mainwindow
71            (ThubanApplication.OnInit): Call the
72            new splash_screen method to determine whether the application
73            should display a splash screen. If it displays a splash screen do
74            not immediately show the main window.
75    
76    2003-02-11  Jonathan Coles  <[email protected]>
77    
78            * Thuban/Model/classification.py: Added import line to fix
79            feature conflicts between running on python2.2 and python2.1.
80    
81            * Thuban/UI/classifier.py (ClassTable): Didn't need to hang
82            onto the clinfo parameter, so removed the deepcopy().
83    
84    2003-02-10  Jonathan Coles  <[email protected]>
85    
86            * Thuban/Model/save.py (Saver.open_element, Saver.close_element):
87            Added element_open variable to track opening and closing of tags
88            so that tags that don't span more than one line are closed with
89            /> instead of </tag_name>. Use the GetDefault*() methods of
90            the Classification class.
91    
92            * Thuban/Model/classification.py (Classificaton): Added set and
93            get methods for the default data. The class also takes a layer
94            reference so that modification messages can be sent. Fixed the
95            methods to use the new ClassData class.
96            (ClassData): New class to encapsulate the classification data
97    
98            * Thuban/Model/layer.py (Layer): Remove the
99            Set[Fill|Stroke|StrokeWidth]() methods. Code should call the
100            SetDefault*() methods on the layer's classification object.
101            (Layer.__init__): Use the new SetDefault*() methods in the
102            Classification class.
103    
104            * Thuban/Model/load.py (ProcessSession): Use the new ClassData
105            object instead of a dictionary.
106    
107            * Thuban/UI/classifier.py (ClassRenderer): New class to
108            draw the classifications in the dialog box's table.
109            (Classifier): Modified to use the ClassRenderer class.
110    
111            * Thuban/UI/mainwindow.py (MainWindow): Use the SetDefault*()
112            methods of the Classification class.
113    
114            * Thuban/UI/renderer.py (MapRenderer): Use the Get*() methods
115            of the ClassData class.
116    
117            * test/test_classification.py, test/test_layer.py,
118            test/test_map.py, test/test_session.py: Fix the tests to work
119            with the above code changes.
120    
121    2003-02-03  Jonathan Coles  <[email protected]>
122    
123            * Thuban/Model/classification.py (Classification): Added getNull()
124            to return the NullData reference
125    
126            * Thuban/Model/layer.py (Layer.SetFill, Layer.SetStroke,
127            Layer.SetStrokeWidth): Modified these functions to change the
128            null data in the classification rather than keep these values
129            directly in the Layer class. Menu options to change these values
130            work again.
131    
132    2003-01-28  Jonathan Coles  <[email protected]>
133    
134            * Thuban/UI/classifier.py (Classifier): Resolved merging conflicts.
135            Fixed crashing problem on some systems. Dialog box shows
136            classification data.
137    
138            * Thuban/UI/tree.py (SessionTreeCtrl.add_items): Handle drawing
139            Colors in the tree view.
140    
141            * Thuban/Model/layer.py (Layer.TreeInfo): Added a call to build
142            the tree info for classifications. Commented out unnecessary lines.
143    
144            * Thuban/Model/classification.py (Classification.TreeInfo): New
145            function to add information about the classification into the
146            tree view.
147    
148    2003-01-27  Jan-Oliver Wagner <[email protected]>
149    
150            * Thuban/__init__.py (_): New.
151    
152            * Thuban/Model/classification.py, Thuban/Model/extension.py,
153            Thuban/Model/layer.py, Thuban/Model/load.py, Thuban/Model/map.py,
154            Thuban/Model/session.py, Thuban/UI/application.py,
155            Thuban/UI/classifier.py, Thuban/UI/context.py, Thuban/UI/controls.py,
156            Thuban/UI/identifyview.py, Thuban/UI/labeldialog.py,
157            Thuban/UI/mainwindow.py, Thuban/UI/menu.py, Thuban/UI/proj4dialog.py,
158            Thuban/UI/renderer.py, Thuban/UI/tree.py, Thuban/Lib/connector.py,
159            Thuban/Lib/fileutil.py: Replace user string by _() for i18n.
160    
161    2003-01-27  Jonathan Coles  <[email protected]>
162    
163            * Thuban/Model/layer.py: Classification initialization calls.
164    
165            * Thuban/Model/classification.py: Created class to encapsulate
166            a layer classification. Supports specific data points and
167            ranges.
168    
169            * Thuban/Model/load.py: Added support for loading classification
170            information.
171    
172            * Thuban/Model/save.py: Added support for saving classification
173            information.
174    
175            * Thuban/UI/classifier.py: Initial class for a dialog box for
176            specifying classification information.
177    
178            * Thuban/UI/mainwindows.py: Support for opening the classifier
179            dialog.
180    
181            * Thuban/UI/renderer.py: Support for drawing a layer with the
182            classification information.
183    
184            * Data/iceland_sample_class.thuban: iceland_sample with
185            classification data.
186    
187            * test/test_classification: Tests for the Classification class.
188    
189    2002-12-09  Bernhard Herzog  <[email protected]>
190    
191            * test/test_command.py: New. Tests for the command classes.
192    
193            * Thuban/UI/command.py (ToolCommand): New class for tool commands.
194            (Command.IsTool): New method to distinguish between command
195            switching tools and other commands.
196    
197            * Thuban/UI/view.py (MapCanvas.SelectTool): New method to select
198            the tool to avoid direct assignments to instance variables
199            (MapCanvas.ZoomInTool, MapCanvas.ZoomOutTool, MapCanvas.PanTool)
200            (MapCanvas.IdentifyTool, MapCanvas.LabelTool): Use SelectTool to
201            change the tool
202    
203            * Thuban/UI/mainwindow.py (MainWindow.update_command_ui): If an
204            active tool's command turns insensitive, disable the tool.
205            (_tool_command): Use the new ToolCommand class
206    
207            * Examples/simple_extensions/simple_tool.py (simple_tool): Use the
208            SelectTool method to change the tool
209            (iconfile): Use the ToolCommand class
210    
211    2002-12-03  Bernhard Herzog  <[email protected]>
212    
213            * Thuban/UI/tree.py (SessionTreeCtrl.normalize_selection): Handle
214            the case of selected items that are not children of Layers or Maps
215            properly. Previously this bug would trigger an assertion in
216            wxWindows.
217    
218    2002-11-06  Frank Koormann  <[email protected]>
219    
220            * Thuban/UI/mainwindow.py: Altered the order of tools in the
221            toolbar: First now are all navigation tools (Zoom In/Out, Pan,
222            Full Extent).
223    
224    2002-10-23  Bernhard Herzog  <[email protected]>
225    
226            * setup.py (setup call): version now 0.1.3
227    
228            * MANIFEST.in: Add the files in test/
229    
230            * test/README: Add note about tests requiring the iceland data
231    
232            * Thuban/UI/mainwindow.py (MainWindow.About): Add 2002 to
233            copyright notice.
234    
235    2002-10-18  Bernhard Herzog  <[email protected]>
236    
237            * test/test_map.py
238            (TestMapWithContents.test_projected_bounding_box): Use an explicit
239            epsilon.
240    
241            * test/support.py (FloatComparisonMixin.assertFloatEqual)
242            (FloatComparisonMixin.assertFloatSeqEqual): give a more useful
243            message if the assertion fails and don't return the return value
244            of self.assert_. In assertFloatSeqEqual the return meant that not
245            all items of the sequence were compared.
246    
247    2002-09-20  Bernhard Herzog  <[email protected]>
248    
249            * test/test_fileutil.py: New. Test cases for Thuban.Lib.fileutil
250    
251            * Thuban/Lib/fileutil.py: Fixup some whitespace and typos
252    
253            * test/test_map.py (TestMapWithContents.test_tree_info): Create
254            the string with the bounding box on the fly because of platform
255            differences in the way %g is handled.
256    
257            * test/test_layer.py (TestLayer.test_empty_layer): Create an empty
258            DBFfile too because Thuban layers can't yet cope missing DBF
259            files.
260    
261    2002-09-20  Bernhard Herzog  <[email protected]>
262    
263            * test/test_menu.py: Use initthuban instead of
264            add_thuban_dir_to_path to initialize Thuban.
265    
266            * test/support.py (FloatComparisonMixin.assertFloatEqual): New.
267            Mixin class for float comparisons
268            (SubscriberMixin): New. Mixin class to test messages sent through
269            the Connector class
270    
271            * test/README: Fix a typo and add the -v flag to the command for
272            individual tests
273    
274            * test/test_session.py: New. Test cases for Thuban.Model.session
275    
276            * test/test_proj.py: New. Test cases for Thuban.Model.proj
277    
278            * test/test_map.py: New. Test cases for Thuban.Model.map
279    
280            * test/test_layer.py: New. Test cases for Thuban.Model.layer
281    
282            * test/test_label.py: New. Test cases for Thuban.Model.label
283    
284            * test/test_connector.py: New. Test cases for Thuban.Lib.connector
285    
286            * test/test_color.py: New. Test cases for Thuban.Model.color
287    
288            * test/test_base.py: New. Test cases for Thuban.Model.base
289    
290    2002-09-13  Bernhard Herzog  <[email protected]>
291    
292            * Thuban/Model/session.py (Session.forwarded_channels): Forward
293            the CHANGED channel too.
294    
295            * Thuban/Model/map.py (Map.forwarded_channels): Forward the
296            CHANGED channel too.
297            (Map.__init__): Call the Modifiable constructor as well.
298    
299            * Thuban/Model/base.py (Modifiable.UnsetModified): Issue a CHANGED
300            event if the modified flag changes.
301            (Modifiable.changed): Tweak the doc-string.
302    
303            * Thuban/UI/mainwindow.py (MainWindow.view_position_changed)
304            (MainWindow.set_position_text): Put the code that puts the text
305            with the mouse position into the status bar into the new method
306            set_position_text so that it can overwritten in derived classes.
307    
308    2002-09-12  Bernhard Herzog  <[email protected]>
309    
310            * Thuban/UI/mainwindow.py (MainWindow.RunMessageBox): Center the
311            message box on the main window.
312    
313    2002-09-11  Bernhard Herzog  <[email protected]>
314    
315            * Thuban/UI/mainwindow.py: Underline the 'x' in "Exit" instead of
316            the 'E' because it's less likely to interfere with other menu
317            entries.
318            (MainWindow.build_menu): remove an incorrect comment.
319    
320    2002-09-10  Bernhard Herzog  <[email protected]>
321    
322            * Thuban/UI/mainwindow.py (MainWindow.Map): New.
323            (_tool_command): Add sensitive parameter
324            (_has_visible_map): Sensitivity callback to tools and other
325            commands that require a visible map. Use it in map_zoom_in_tool,
326            map_zoom_out_tool, map_pan_tool, map_identify_tool, map_label_tool
327            and map_full_extent
328    
329    2002-09-06  Bernhard Herzog  <[email protected]>
330    
331            * Thuban/UI/mainwindow.py (MainWindow.OnClose): Unsubscribe
332            VIEW_POSITION
333    
334    2002-09-04  Frank Koormann  <[email protected]>
335    
336            * Resources/Bitmaps/fullextent.xpm: Updated Icon (removed "potatoe")
337    
338  2002-09-02  Bernhard Herzog  <[email protected]>  2002-09-02  Bernhard Herzog  <[email protected]>
339    
340          * Thuban/UI/view.py: Get rid of the idle redraw. This is done by          * Thuban/UI/view.py: Get rid of the idle redraw. This is done by
# Line 81  Line 418 
418    
419          * Thuban/Model/table.py (Table.write_record): New method to write          * Thuban/Model/table.py (Table.write_record): New method to write
420          records.          records.
421          (Table.__init__): Open the DBF file for writing too.          (Table.__init__): Open the DBF file for writing too.
422    
423          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value          * Thuban/UI/controls.py (RecordTable.SetValue): Write the value
424          into the underlying table.          into the underlying table.
# Line 119  Line 456 
456          * setup.py (ThubanInstall.run): Don't repr install_lib_orig          * setup.py (ThubanInstall.run): Don't repr install_lib_orig
457          because thubaninit_contents will do it for us.          because thubaninit_contents will do it for us.
458    
459  2002-08-16      Jan-Oliver Wagner <[email protected]>  2002-08-16  Jan-Oliver Wagner <[email protected]>
460    
461          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if          * Thuban/UI/mainwindow.py: menu item 'show session tree' now disable if
462          tree window already open          tree window already open
# Line 247  Line 584 
584          * Thuban/UI/tree.py: We can now simply subscribe to the session's          * Thuban/UI/tree.py: We can now simply subscribe to the session's
585          CHANGED channel to be informed of changes.          CHANGED channel to be informed of changes.
586          (SessionTreeCtrl.session_channels): Not needed any longer.          (SessionTreeCtrl.session_channels): Not needed any longer.
587          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):          (SessionTreeCtrl.unsubscribe_all, SessionTreeCtrl.session_changed):
588          Only have to (un)subscribe CHANGED          Only have to (un)subscribe CHANGED
589    
590          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.          * Thuban/Model/map.py (Map.TreeInfo): Deal better with empty maps.
# Line 308  Line 645 
645          * Thuban/Model/layer.py (Layer.TreeInfo),          * Thuban/Model/layer.py (Layer.TreeInfo),
646          Thuban/Model/extension.py (Extension.TreeInfo),          Thuban/Model/extension.py (Extension.TreeInfo),
647          Thuban/Model/map.py (Map.TreeInfo),          Thuban/Model/map.py (Map.TreeInfo),
648          Thuban/Model/session.py (Session.TreeInfo):          Thuban/Model/session.py (Session.TreeInfo):
649          Add TreeInfo methods to implement the new tree view update scheme          Add TreeInfo methods to implement the new tree view update scheme
650    
651  2002-07-16  Bernhard Herzog  <[email protected]>  2002-07-16  Bernhard Herzog  <[email protected]>
# Line 389  Line 726 
726          * setup.py: In the setup call, make sure that the library          * setup.py: In the setup call, make sure that the library
727          directories are under $prefix/lib not directly under $prefix.          directories are under $prefix/lib not directly under $prefix.
728    
729  2002-06-20      Jan-Oliver Wagner <[email protected]>  2002-06-20  Jan-Oliver Wagner <[email protected]>
730    
731          * Thuban/Model/extension.py: new module to handle extension objects.          * Thuban/Model/extension.py: new module to handle extension objects.
732          * Thuban/Model/messages.py: new messages for extensions.          * Thuban/Model/messages.py: new messages for extensions.
# Line 618  Line 955 
955          * Thuban/UI/messages.py (VIEW_POSITION): New message for the          * Thuban/UI/messages.py (VIEW_POSITION): New message for the
956          position in the statusbar          position in the statusbar
957    
958  2002-04-26      Frank Koormann <[email protected]>  2002-04-26  Frank Koormann <[email protected]>
959    
960          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data          * Thuban/UI/mainwindow.py: AddLayer, Dialog title s/session/data
961    
962  2002-04-24      Frank Koormann <[email protected]>  2002-04-24  Frank Koormann <[email protected]>
963            
964          * Resources/Bitmaps/identify.xpm: shadow added          * Resources/Bitmaps/identify.xpm: shadow added
965    
966          * Resources/Bitmaps/fullextent.xpm: new          * Resources/Bitmaps/fullextent.xpm: new
           
 2002-04-22      Jan-Oliver Wagner <[email protected]>  
967    
968          * Thuban/UI/tree.py (update_tree): added test for None on map bounding box  2002-04-22  Jan-Oliver Wagner <[email protected]>
969    
970            * Thuban/UI/tree.py (update_tree): added test for None on map bounding
971            box
972    
973  2002-04-21      Jan-Oliver Wagner <[email protected]>  2002-04-21  Jan-Oliver Wagner <[email protected]>
974    
975          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new          * Thuban/UI/proj4dialog.py (UTMProposeZoneDialog): new
976    
977          * Thuban/UI/tree.py (update_tree): added added map extent          * Thuban/UI/tree.py (update_tree): added added map extent
978    
979          * Thuban/UI/mainwindow.py (_method_command): extended by parameter          * Thuban/UI/mainwindow.py (_method_command): extended by parameter
980          icon; added map_full_extend as tool          icon; added map_full_extend as tool
981    
982  2002-04-19      Jan-Oliver Wagner <[email protected]>  2002-04-19  Jan-Oliver Wagner <[email protected]>
983    
984          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for          * Thuban/UI/mainwindow.py (SaveSession): launch save as dialog for
985          saving _new_ sessions          saving _new_ sessions
# Line 743  Line 1081 
1081    
1082          * setup.py: increase version number to 0.1          * setup.py: increase version number to 0.1
1083          (data_dist): New command class for data distribution          (data_dist): New command class for data distribution
           
1084    
1085  2001-09-14  Bernhard Herzog  <[email protected]>  2001-09-14  Bernhard Herzog  <[email protected]>
1086    
1087          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):          * Thuban/UI/identifyview.py (IdentifyListCtrl.selected_shape):
1088          Handle the case of no layer (i.e. layer is None) properly.          Handle the case of no layer (i.e. layer is None) properly.
1089    
1090          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):          * Thuban/UI/proj4dialog.py (UTMDialog.__init__, Proj4Dialog.__init__):
1091          Set the initial selection of the combo boxes to reflect the          Set the initial selection of the combo boxes to reflect the
1092          projection we're starting with in a way that works on windows,          projection we're starting with in a way that works on windows,
1093          too.          too.
# Line 860  Line 1197 
1197          (MainWindow.identify_view_on_demand): Store the interactor in an          (MainWindow.identify_view_on_demand): Store the interactor in an
1198          instvar and use that reference instead of going through main.app          instvar and use that reference instead of going through main.app
1199    
1200          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):          * Thuban/UI/mainwindow.py (MainWindow.ShowSessionTree):
1201          * Thuban/UI/application.py (ThubanApplication.OnInit):          * Thuban/UI/application.py (ThubanApplication.OnInit):
1202          * Thuban/UI/main.py (main): Create the session tree view in main          * Thuban/UI/main.py (main): Create the session tree view in main
1203          with the new mainwindow method ShowSessionTree and not directly          with the new mainwindow method ShowSessionTree and not directly
1204          the application's OnInit method          the application's OnInit method
# Line 877  Line 1214 
1214          layer to the tableview dialog.          layer to the tableview dialog.
1215    
1216          * Thuban/UI/tableview.py: Add some doc-strings          * Thuban/UI/tableview.py: Add some doc-strings
1217          (TableGrid):          (TableGrid):
1218          (TableGrid.OnRangeSelect):          (TableGrid.OnRangeSelect):
1219          (TableGrid.OnSelectCell):          (TableGrid.OnSelectCell):
1220          (TableFrame.__init__):          (TableFrame.__init__):
# Line 944  Line 1281 
1281  2001-09-05  Bernhard Herzog  <[email protected]>  2001-09-05  Bernhard Herzog  <[email protected]>
1282    
1283          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.          * Thuban/UI/view.py (MapCanvas.__init__): New argument, interactor.
1284            
1285          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument          * Thuban/UI/mainwindow.py (MainWindow.__init__): New argument
1286          interactor to pass through to the MapCanvas          interactor to pass through to the MapCanvas
1287            
1288          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new          * Thuban/UI/application.py (ThubanApplication.OnInit): Use the new
1289          argument to the MainWindow constructor to get rid of the ugly hack          argument to the MainWindow constructor to get rid of the ugly hack
1290          that made main.app available early just so that the mapcanvas          that made main.app available early just so that the mapcanvas
# Line 994  Line 1331 
1331          (ThubanInstall.run): Remove the leading install root from the          (ThubanInstall.run): Remove the leading install root from the
1332          script filename if an install root was specified and use the new          script filename if an install root was specified and use the new
1333          link_file method          link_file method
1334            
1335          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to          * Thuban/UI/mainwindow.py (MainWindow.AddLayer): Fit the map to
1336          the window when the first layer is added to the map.          the window when the first layer is added to the map.
1337    
# Line 1031  Line 1368 
1368          (InnoIconItem): Helper class for bdist_inno          (InnoIconItem): Helper class for bdist_inno
1369          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added          (thuban_bdist_inno): Thuban specific version of bdist_inno. Added
1370          this together with the appropriate parameters, to the setup call.          this together with the appropriate parameters, to the setup call.
1371            
1372          * setup.cfg (bdist_inno): added new section for the inno setup          * setup.cfg (bdist_inno): added new section for the inno setup
1373          installer          installer
1374    

Legend:
Removed from v.304  
changed lines
  Added in v.408

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26