Changeset 7683
- Timestamp:
- 04/02/12 13:53:51 (13 years ago)
- Location:
- branches/ProblemInstancesRegressionAndClassification
- Files:
-
- 2 added
- 3 deleted
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Classification/ClassificationProblem.cs
r7682 r7683 33 33 [Creatable("Problems")] 34 34 public class ClassificationProblem : DataAnalysisProblem<IClassificationProblemData>, IClassificationProblem, IStorableContent, 35 IProblemInstanceConsumer<ClassificationData>, IProblemInstanceExporter<ClassificationData>, IProblemInstanceConsumer {35 IProblemInstanceConsumer<ClassificationData>, IProblemInstanceExporter<ClassificationData>, IProblemInstanceConsumer, IProblemInstanceExporter { 36 36 public string Filename { get; set; } 37 37 -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.DataAnalysis/3.4/Implementation/Regression/RegressionProblem.cs
r7682 r7683 33 33 [Creatable("Problems")] 34 34 public class RegressionProblem : DataAnalysisProblem<IRegressionProblemData>, IRegressionProblem, IStorableContent, 35 IProblemInstanceConsumer<RegressionData>, IProblemInstanceExporter<RegressionData> , IProblemInstanceConsumer{35 IProblemInstanceConsumer<RegressionData>, IProblemInstanceExporter<RegressionData> { 36 36 public string Filename { get; set; } 37 37 -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4
-
Property
svn:ignore
set to
*
-
Property
svn:ignore
set to
-
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/HeuristicLab.Problems.Instances.Classification-3.4.csproj
r7682 r7683 54 54 <Compile Include="ArtificialClassificationDataDescriptor.cs" /> 55 55 <Compile Include="ArtificialClassificationInstanceProvider.cs" /> 56 <Compile Include="Plugin.cs" /> 56 57 <Compile Include="Properties\AssemblyInfo.cs" /> 57 58 <Compile Include="ClassificationInstanceProvider.cs" /> … … 61 62 </ItemGroup> 62 63 <ItemGroup> 63 < None Include="Data\RealWorld.zip" />64 <EmbeddedResource Include="Data\RealWorld.zip" /> 64 65 <None Include="Properties\AssemblyInfo.cs.frame" /> 65 66 <None Include="HeuristicLab.snk" /> -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Classification/3.4/Properties
-
Property
svn:ignore
set to
AssemblyInfo.cs
-
Property
svn:ignore
set to
-
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Regression/3.4/Properties/AssemblyInfo.cs
r7682 r7683 55 55 // [assembly: AssemblyVersion("1.0.*")] 56 56 [assembly: AssemblyVersion("3.4.0.0")] 57 [assembly: AssemblyFileVersion("3.4.0.76 67")]57 [assembly: AssemblyFileVersion("3.4.0.7682")] -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4
- Property svn:ignore
-
old new 2 2 HeuristicLab.Problems.Instances.Views-3.4.csproj.user 3 3 obj 4 Plugin.cs
-
- Property svn:ignore
-
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/HeuristicLab.Problems.Instances.Views-3.4.csproj
r7665 r7683 54 54 </ItemGroup> 55 55 <ItemGroup> 56 <Compile Include="ProblemInstanceProviderView.cs"> 57 <SubType>UserControl</SubType> 58 </Compile> 59 <Compile Include="ProblemInstanceProviderView.Designer.cs"> 60 <DependentUpon>ProblemInstanceProviderView.cs</DependentUpon> 61 </Compile> 56 62 <Compile Include="Plugin.cs" /> 57 63 <Compile Include="ProblemInstanceConsumerView.cs"> … … 61 67 <DependentUpon>ProblemInstanceConsumerView.cs</DependentUpon> 62 68 </Compile> 63 <Compile Include="ProblemInstanceProviderView .cs">69 <Compile Include="ProblemInstanceProviderViewGeneric.cs"> 64 70 <SubType>UserControl</SubType> 65 71 </Compile> 66 <Compile Include="ProblemInstanceProviderView .Designer.cs">67 <DependentUpon>ProblemInstanceProviderView .cs</DependentUpon>72 <Compile Include="ProblemInstanceProviderViewGeneric.Designer.cs"> 73 <DependentUpon>ProblemInstanceProviderViewGeneric.cs</DependentUpon> 68 74 </Compile> 69 75 <Compile Include="Properties\AssemblyInfo.cs" /> … … 78 84 <Name>HeuristicLab.Problems.Instances-3.3</Name> 79 85 </ProjectReference> 86 </ItemGroup> 87 <ItemGroup> 88 <EmbeddedResource Include="ProblemInstanceConsumerView.resx"> 89 <DependentUpon>ProblemInstanceConsumerView.cs</DependentUpon> 90 </EmbeddedResource> 80 91 </ItemGroup> 81 92 <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.Designer.cs
r7665 r7683 45 45 /// </summary> 46 46 private void InitializeComponent() { 47 this.components = new System.ComponentModel.Container(); 47 48 this.problemInstanceProviderComboBox = new System.Windows.Forms.ComboBox(); 48 49 this.libraryInfoButton = new System.Windows.Forms.Button(); 49 50 this.libraryLabel = new System.Windows.Forms.Label(); 50 51 this.problemInstanceProviderViewHost = new HeuristicLab.MainForm.WindowsForms.ViewHost(); 52 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 51 53 this.SuspendLayout(); 52 54 // … … 117 119 private System.Windows.Forms.Label libraryLabel; 118 120 private MainForm.WindowsForms.ViewHost problemInstanceProviderViewHost; 121 private System.Windows.Forms.ToolTip toolTip; 119 122 } 120 123 } -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceConsumerView.cs
r7665 r7683 74 74 if (problemInstanceProviderComboBox.SelectedIndex >= 0) { 75 75 problemInstanceProviderViewHost.Content = SelectedProvider; 76 dynamic view =problemInstanceProviderViewHost.ActiveView;77 dynamic content= Content;78 view.Consumer = content;79 if (CheckForIProblemInstanceExporter(Content))80 view.Exporter = content;81 //SetTooltip();76 ProblemInstanceProviderView view = (ProblemInstanceProviderView)problemInstanceProviderViewHost.ActiveView; 77 view.Consumer = Content; 78 if (CheckForIProblemInstanceExporter(Content)) { 79 view.Exporter = (IProblemInstanceExporter)Content; 80 } 81 SetTooltip(); 82 82 } 83 83 SetEnabledStateOfControls(); … … 85 85 86 86 private bool CheckForIProblemInstanceExporter(IProblemInstanceConsumer content) { 87 // no check if IProblemInstanceConsumer<T> and IProblemInstanceExporter<T> have the same generic type T88 87 return Content.GetType().GetInterfaces() 89 .Any(x => x. IsGenericType && x.GetGenericTypeDefinition().Equals(typeof(IProblemInstanceExporter<>)));88 .Any(x => x.Equals(typeof(IProblemInstanceExporter))); 90 89 } 91 90 … … 120 119 } 121 120 122 //protectedvoid SetTooltip() {123 //toolTip.SetToolTip(problemInstanceProviderComboBox, GetProviderToolTip());124 //if (SelectedProvider.WebLink != null)125 //toolTip.SetToolTip(libraryInfoButton, "Browse to " + SelectedProvider.WebLink.ToString());126 //else toolTip.SetToolTip(libraryInfoButton, "Library does not have a web reference.");127 //}121 private void SetTooltip() { 122 toolTip.SetToolTip(problemInstanceProviderComboBox, GetProviderToolTip()); 123 if (SelectedProvider.WebLink != null) 124 toolTip.SetToolTip(libraryInfoButton, "Browse to " + SelectedProvider.WebLink.ToString()); 125 else toolTip.SetToolTip(libraryInfoButton, "Library does not have a web reference."); 126 } 128 127 129 //protectedstring GetProviderToolTip() {130 //var provider = SelectedProvider;131 //string toolTip = provider.Name;128 private string GetProviderToolTip() { 129 var provider = SelectedProvider; 130 string toolTip = provider.Name; 132 131 133 //if (!String.IsNullOrEmpty(provider.ReferencePublication)) {134 //toolTip = toolTip135 //+ Environment.NewLine + Environment.NewLine136 //+ provider.ReferencePublication;137 //}138 //if (provider.WebLink != null) {139 //toolTip = toolTip140 //+ Environment.NewLine141 //+ provider.WebLink.ToString();142 //}132 if (!String.IsNullOrEmpty(provider.ReferencePublication)) { 133 toolTip = toolTip 134 + Environment.NewLine + Environment.NewLine 135 + provider.ReferencePublication; 136 } 137 if (provider.WebLink != null) { 138 toolTip = toolTip 139 + Environment.NewLine 140 + provider.WebLink.ToString(); 141 } 143 142 144 //return toolTip;145 //}143 return toolTip; 144 } 146 145 } 147 146 } -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceProviderView.Designer.cs
r7665 r7683 21 21 22 22 namespace HeuristicLab.Problems.Instances.Views { 23 partial class ProblemInstanceProviderView <T>{23 partial class ProblemInstanceProviderView { 24 24 /// <summary> 25 25 /// Required designer variable. … … 45 45 /// </summary> 46 46 private void InitializeComponent() { 47 this.components = new System.ComponentModel.Container();48 this.loadButton = new System.Windows.Forms.Button();49 this.instanceLabel = new System.Windows.Forms.Label();50 this.instancesComboBox = new System.Windows.Forms.ComboBox();51 this.importButton = new System.Windows.Forms.Button();52 this.openFileDialog = new System.Windows.Forms.OpenFileDialog();53 this.toolTip = new System.Windows.Forms.ToolTip(this.components);54 this.exportButton = new System.Windows.Forms.Button();55 this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();56 this.problemInstanceProviderSplitContainer = new System.Windows.Forms.SplitContainer();57 ((System.ComponentModel.ISupportInitialize)(this.problemInstanceProviderSplitContainer)).BeginInit();58 this.problemInstanceProviderSplitContainer.Panel1.SuspendLayout();59 this.problemInstanceProviderSplitContainer.Panel2.SuspendLayout();60 this.problemInstanceProviderSplitContainer.SuspendLayout();61 47 this.SuspendLayout(); 62 //63 // loadButton64 //65 this.loadButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));66 this.loadButton.Location = new System.Drawing.Point(604, 0);67 this.loadButton.Name = "loadButton";68 this.loadButton.Size = new System.Drawing.Size(26, 23);69 this.loadButton.TabIndex = 6;70 this.loadButton.Text = "Load";71 this.loadButton.UseVisualStyleBackColor = true;72 this.loadButton.Click += new System.EventHandler(this.loadButton_Click);73 //74 // instanceLabel75 //76 this.instanceLabel.AutoSize = true;77 this.instanceLabel.Location = new System.Drawing.Point(3, 4);78 this.instanceLabel.Name = "instanceLabel";79 this.instanceLabel.Size = new System.Drawing.Size(51, 13);80 this.instanceLabel.TabIndex = 4;81 this.instanceLabel.Text = "Instance:";82 //83 // instancesComboBox84 //85 this.instancesComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)86 | System.Windows.Forms.AnchorStyles.Right)));87 this.instancesComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;88 this.instancesComboBox.FormattingEnabled = true;89 this.instancesComboBox.Location = new System.Drawing.Point(60, 1);90 this.instancesComboBox.Name = "instancesComboBox";91 this.instancesComboBox.Size = new System.Drawing.Size(538, 21);92 this.instancesComboBox.TabIndex = 7;93 this.instancesComboBox.DataSourceChanged += new System.EventHandler(this.comboBox_DataSourceChanged);94 //95 // importButton96 //97 this.importButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));98 this.importButton.Location = new System.Drawing.Point(636, 0);99 this.importButton.Name = "importButton";100 this.importButton.Size = new System.Drawing.Size(26, 23);101 this.importButton.TabIndex = 6;102 this.importButton.Text = "Import";103 this.importButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;104 this.importButton.UseVisualStyleBackColor = true;105 this.importButton.Click += new System.EventHandler(this.importButton_Click);106 //107 // openFileDialog108 //109 this.openFileDialog.Filter = "All files|*.*";110 //111 // exportButton112 //113 this.exportButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));114 this.exportButton.Location = new System.Drawing.Point(-1, 0);115 this.exportButton.Name = "exportButton";116 this.exportButton.Size = new System.Drawing.Size(26, 23);117 this.exportButton.TabIndex = 8;118 this.exportButton.Text = "Export";119 this.exportButton.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;120 this.exportButton.UseVisualStyleBackColor = true;121 this.exportButton.Click += new System.EventHandler(this.exportButton_Click);122 //123 // saveFileDialog124 //125 this.saveFileDialog.Filter = "CSV files|*.csv|All files|*.*";126 this.saveFileDialog.Title = "Save RegressionInstance...";127 //128 // problemInstanceProviderSplitContainer129 //130 this.problemInstanceProviderSplitContainer.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)131 | System.Windows.Forms.AnchorStyles.Left)132 | System.Windows.Forms.AnchorStyles.Right)));133 this.problemInstanceProviderSplitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2;134 this.problemInstanceProviderSplitContainer.IsSplitterFixed = true;135 this.problemInstanceProviderSplitContainer.Location = new System.Drawing.Point(0, -1);136 this.problemInstanceProviderSplitContainer.Name = "problemInstanceProviderSplitContainer";137 //138 // problemInstanceProviderSplitContainer.Panel1139 //140 this.problemInstanceProviderSplitContainer.Panel1.Controls.Add(this.instanceLabel);141 this.problemInstanceProviderSplitContainer.Panel1.Controls.Add(this.instancesComboBox);142 this.problemInstanceProviderSplitContainer.Panel1.Controls.Add(this.importButton);143 this.problemInstanceProviderSplitContainer.Panel1.Controls.Add(this.loadButton);144 //145 // problemInstanceProviderSplitContainer.Panel2146 //147 this.problemInstanceProviderSplitContainer.Panel2.Controls.Add(this.exportButton);148 this.problemInstanceProviderSplitContainer.Size = new System.Drawing.Size(694, 22);149 this.problemInstanceProviderSplitContainer.SplitterDistance = 665;150 this.problemInstanceProviderSplitContainer.TabIndex = 9;151 48 // 152 49 // ProblemInstanceProviderView … … 154 51 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 155 52 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 156 this.Controls.Add(this.problemInstanceProviderSplitContainer);157 53 this.Name = "ProblemInstanceProviderView"; 158 54 this.Size = new System.Drawing.Size(694, 21); 159 this.problemInstanceProviderSplitContainer.Panel1.ResumeLayout(false);160 this.problemInstanceProviderSplitContainer.Panel1.PerformLayout();161 this.problemInstanceProviderSplitContainer.Panel2.ResumeLayout(false);162 ((System.ComponentModel.ISupportInitialize)(this.problemInstanceProviderSplitContainer)).EndInit();163 this.problemInstanceProviderSplitContainer.ResumeLayout(false);164 55 this.ResumeLayout(false); 165 56 … … 168 59 #endregion 169 60 170 private System.Windows.Forms.OpenFileDialog openFileDialog;171 private System.Windows.Forms.ToolTip toolTip;172 protected System.Windows.Forms.Button loadButton;173 protected System.Windows.Forms.Label instanceLabel;174 protected System.Windows.Forms.ComboBox instancesComboBox;175 protected System.Windows.Forms.Button importButton;176 protected System.Windows.Forms.Button exportButton;177 private System.Windows.Forms.SaveFileDialog saveFileDialog;178 private System.Windows.Forms.SplitContainer problemInstanceProviderSplitContainer;179 61 180 62 } -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/ProblemInstanceProviderView.cs
r7665 r7683 20 20 #endregion 21 21 22 using System;23 using System.IO;24 using System.Linq;25 22 using System.Windows.Forms; 26 using HeuristicLab.Common.Resources;27 23 using HeuristicLab.MainForm; 28 24 using HeuristicLab.MainForm.WindowsForms; 29 using HeuristicLab.PluginInfrastructure;30 25 31 26 namespace HeuristicLab.Problems.Instances.Views { 32 27 [View("ProblemInstanceProviderView")] 33 [Content(typeof(IProblemInstanceProvider <>), IsDefaultView = true)]34 public partial class ProblemInstanceProviderView<T>: AsynchronousContentView {28 [Content(typeof(IProblemInstanceProvider), IsDefaultView = true)] 29 public abstract partial class ProblemInstanceProviderView : AsynchronousContentView { 35 30 36 public new IProblemInstanceProvider <T>Content {37 get { return (IProblemInstanceProvider <T>)base.Content; }31 public new IProblemInstanceProvider Content { 32 get { return (IProblemInstanceProvider)base.Content; } 38 33 set { base.Content = value; } 39 34 } 40 35 41 public IProblemInstanceConsumer<T> Consumer { get;set; }36 public abstract IProblemInstanceConsumer Consumer { set; } 42 37 43 public IProblemInstanceExporter<T> Exporter { get;set; }38 public abstract IProblemInstanceExporter Exporter { set; } 44 39 45 40 public ProblemInstanceProviderView() { 46 41 InitializeComponent(); 47 importButton.Text = String.Empty;48 importButton.Image = VSImageLibrary.Open;49 toolTip.SetToolTip(importButton, "Import a " + GetProblemType() + " instance from file.");50 exportButton.Text = String.Empty;51 exportButton.Image = VSImageLibrary.Save;52 toolTip.SetToolTip(exportButton, "Export a " + GetProblemType() + " instance to a file.");53 loadButton.Text = String.Empty;54 loadButton.Image = VSImageLibrary.RefreshDocument;55 toolTip.SetToolTip(loadButton, "Load the selected instance.");56 }57 58 protected override void OnContentChanged() {59 base.OnContentChanged();60 if (Content == null) {61 instancesComboBox.DataSource = null;62 } else {63 instancesComboBox.DisplayMember = "Name";64 instancesComboBox.DataSource = Content.GetDataDescriptors().ToList();65 }66 }67 68 protected override void SetEnabledStateOfControls() {69 base.SetEnabledStateOfControls();70 instancesComboBox.Enabled = !ReadOnly && !Locked && Content != null && Consumer != null;71 loadButton.Enabled = !ReadOnly && !Locked && Content != null && Consumer != null;72 exportButton.Enabled = !ReadOnly && !Locked && Content != null && Exporter != null;73 problemInstanceProviderSplitContainer.Panel2Collapsed = !exportButton.Enabled;74 }75 76 protected virtual void loadButton_Click(object sender, EventArgs e) {77 var descriptor = (IDataDescriptor)instancesComboBox.SelectedItem;78 var instance = Content.LoadData(descriptor);79 try {80 Consumer.Load(instance);81 }82 catch (Exception ex) {83 MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", descriptor.Name, Environment.NewLine + ex.Message), "Cannot load instance");84 }85 }86 87 protected virtual void importButton_Click(object sender, EventArgs e) {88 openFileDialog.FileName = GetProblemType() + " instance";89 if (openFileDialog.ShowDialog() == DialogResult.OK) {90 T instance = default(T);91 try {92 instance = Content.LoadData(openFileDialog.FileName);93 }94 catch (Exception ex) {95 MessageBox.Show(String.Format("There was an error parsing the file: {0}", Environment.NewLine + ex.Message), "Error while parsing", MessageBoxButtons.OK, MessageBoxIcon.Error);96 return;97 }98 try {99 Consumer.Load(instance);100 }101 catch (Exception ex) {102 MessageBox.Show(String.Format("This problem does not support loading the instance {0}: {1}", Path.GetFileName(openFileDialog.FileName), Environment.NewLine + ex.Message), "Cannot load instance");103 }104 }105 }106 107 protected virtual void exportButton_Click(object sender, EventArgs e) {108 if (saveFileDialog.ShowDialog(this) == DialogResult.OK) {109 try {110 Content.SaveData(Exporter.Export(), saveFileDialog.FileName);111 }112 catch (Exception ex) {113 ErrorHandling.ShowErrorDialog(this, ex);114 }115 }116 }117 118 private void comboBox_DataSourceChanged(object sender, EventArgs e) {119 var comboBox = (ComboBox)sender;120 if (comboBox.DataSource == null)121 comboBox.Items.Clear();122 }123 124 protected virtual string GetProblemType() {125 string dataTypeName = typeof(T).Name.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last();126 if (dataTypeName.EndsWith("Data"))127 return dataTypeName.Substring(0, dataTypeName.Length - "Data".Length);128 else return dataTypeName;129 42 } 130 43 } -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances.Views/3.4/Properties/AssemblyInfo.cs
r7682 r7683 53 53 // by using the '*' as shown below: 54 54 [assembly: AssemblyVersion("3.4.0.0")] 55 [assembly: AssemblyFileVersion("3.4.2.76 67")]55 [assembly: AssemblyFileVersion("3.4.2.7682")] -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3
- Property svn:ignore
-
old new 2 2 bin 3 3 Plugin.cs 4 *.user
-
- Property svn:ignore
-
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3/IProblemInstanceConsumer.cs
r7664 r7683 25 25 public interface IProblemInstanceConsumer : IContent { } 26 26 27 public interface IProblemInstanceConsumer<TData> {27 public interface IProblemInstanceConsumer<TData> : IProblemInstanceConsumer { 28 28 /// <summary> 29 29 /// Loads the given instance data. -
branches/ProblemInstancesRegressionAndClassification/HeuristicLab.Problems.Instances/3.3/IProblemInstanceExporter.cs
r7664 r7683 21 21 22 22 namespace HeuristicLab.Problems.Instances { 23 public interface IProblemInstanceExporter<TData> { 23 public interface IProblemInstanceExporter { } 24 25 public interface IProblemInstanceExporter<TData> : IProblemInstanceExporter { 24 26 TData Export(); 25 27 }
Note: See TracChangeset
for help on using the changeset viewer.