Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.Designer.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.Designer.cs	(revision 9833)
@@ -48,32 +48,6 @@
       this.openButton = new System.Windows.Forms.Button();
       this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
+      this.stringConvertibleValueView = new HeuristicLab.Data.Views.StringConvertibleValueView();
       this.SuspendLayout();
-      // 
-      // valueTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.valueTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.valueTextBox, 2);
-      this.valueTextBox.Location = new System.Drawing.Point(17, 2);
-      this.valueTextBox.Size = new System.Drawing.Size(87, 20);
-      // 
-      // valueLabel
-      // 
-      this.valueLabel.Location = new System.Drawing.Point(3, 5);
-      this.valueLabel.Size = new System.Drawing.Size(52, 13);
-      this.valueLabel.Text = "Directory:";
-      // 
-      // splitContainer
-      // 
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.openButton);
-      this.splitContainer.Size = new System.Drawing.Size(194, 24);
-      this.splitContainer.SplitterDistance = 56;
       // 
       // openButton
@@ -81,5 +55,5 @@
       this.openButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.openButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openButton.Location = new System.Drawing.Point(110, 0);
+      this.openButton.Location = new System.Drawing.Point(167, 0);
       this.openButton.Name = "openButton";
       this.openButton.Size = new System.Drawing.Size(24, 24);
@@ -88,17 +62,25 @@
       this.openButton.Click += new System.EventHandler(this.openButton_Click);
       // 
+      // stringConvertibleValueView
+      // 
+      this.stringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.stringConvertibleValueView.Caption = "StringConvertibleValue View";
+      this.stringConvertibleValueView.Content = null;
+      this.stringConvertibleValueView.LabelVisible = true;
+      this.stringConvertibleValueView.Location = new System.Drawing.Point(4, 2);
+      this.stringConvertibleValueView.Name = "stringConvertibleValueView";
+      this.stringConvertibleValueView.ReadOnly = false;
+      this.stringConvertibleValueView.Size = new System.Drawing.Size(157, 21);
+      this.stringConvertibleValueView.TabIndex = 4;
+      // 
       // DirectoryValueView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.stringConvertibleValueView);
+      this.Controls.Add(this.openButton);
       this.Name = "DirectoryValueView";
       this.Size = new System.Drawing.Size(194, 24);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel1.PerformLayout();
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.Panel2.PerformLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
-      this.splitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -109,4 +91,5 @@
     protected System.Windows.Forms.Button openButton;
     protected System.Windows.Forms.FolderBrowserDialog folderBrowserDialog;
+    private StringConvertibleValueView stringConvertibleValueView;
 
   }
Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/DirectoryValueView.cs	(revision 9833)
@@ -22,4 +22,5 @@
 using System;
 using System.Windows.Forms;
+using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
 
@@ -27,16 +28,8 @@
   [View("DirectoryValueView")]
   [Content(typeof(DirectoryValue), true)]
-  public partial class DirectoryValueView : StringConvertibleValueView {
+  public partial class DirectoryValueView : ItemView {
     public new DirectoryValue Content {
       get { return (DirectoryValue)base.Content; }
       set { base.Content = value; }
-    }
-
-    public override bool ReadOnly {
-      get {
-        if ((Content != null) && Content.ReadOnly) return true;
-        return base.ReadOnly;
-      }
-      set { base.ReadOnly = value; }
     }
 
@@ -47,6 +40,4 @@
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      valueTextBox.Enabled = !Locked && !ReadOnly && Content != null;
-      valueTextBox.ReadOnly = Locked || ReadOnly || Content == null;
       openButton.Enabled = !Locked && !ReadOnly && Content != null;
     }
@@ -55,10 +46,9 @@
       base.OnContentChanged();
       if (Content == null) {
-        valueTextBox.Text = string.Empty;
+        stringConvertibleValueView.Content = null;
         return;
       }
 
-      valueTextBox.Text = Content.Value;
-      openButton.Enabled = !Content.ReadOnly;
+      stringConvertibleValueView.Content = Content.StringValue;
     }
 
Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.Designer.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.Designer.cs	(revision 9833)
@@ -48,32 +48,6 @@
       this.openButton = new System.Windows.Forms.Button();
       this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit();
-      this.splitContainer.Panel1.SuspendLayout();
-      this.splitContainer.Panel2.SuspendLayout();
-      this.splitContainer.SuspendLayout();
+      this.stringConvertibleValueView = new HeuristicLab.Data.Views.StringConvertibleValueView();
       this.SuspendLayout();
-      // 
-      // valueTextBox
-      // 
-      this.errorProvider.SetIconAlignment(this.valueTextBox, System.Windows.Forms.ErrorIconAlignment.MiddleLeft);
-      this.errorProvider.SetIconPadding(this.valueTextBox, 2);
-      this.valueTextBox.Location = new System.Drawing.Point(17, 2);
-      this.valueTextBox.Size = new System.Drawing.Size(116, 20);
-      // 
-      // valueLabel
-      // 
-      this.valueLabel.Location = new System.Drawing.Point(3, 5);
-      this.valueLabel.Size = new System.Drawing.Size(26, 13);
-      this.valueLabel.Text = "File:";
-      // 
-      // splitContainer
-      // 
-      // 
-      // splitContainer.Panel2
-      // 
-      this.splitContainer.Panel2.Controls.Add(this.openButton);
-      this.splitContainer.Size = new System.Drawing.Size(194, 24);
-      this.splitContainer.SplitterDistance = 27;
       // 
       // openButton
@@ -81,5 +55,5 @@
       this.openButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
       this.openButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Open;
-      this.openButton.Location = new System.Drawing.Point(139, 0);
+      this.openButton.Location = new System.Drawing.Point(198, 0);
       this.openButton.Name = "openButton";
       this.openButton.Size = new System.Drawing.Size(24, 24);
@@ -88,17 +62,25 @@
       this.openButton.Click += new System.EventHandler(this.openButton_Click);
       // 
+      // stringConvertibleValueView
+      // 
+      this.stringConvertibleValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+            | System.Windows.Forms.AnchorStyles.Right)));
+      this.stringConvertibleValueView.Caption = "StringConvertibleValue View";
+      this.stringConvertibleValueView.Content = null;
+      this.stringConvertibleValueView.LabelVisible = true;
+      this.stringConvertibleValueView.Location = new System.Drawing.Point(4, 2);
+      this.stringConvertibleValueView.Name = "stringConvertibleValueView";
+      this.stringConvertibleValueView.ReadOnly = false;
+      this.stringConvertibleValueView.Size = new System.Drawing.Size(157, 21);
+      this.stringConvertibleValueView.TabIndex = 0;
+      // 
       // FileValueView
       // 
       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
+      this.Controls.Add(this.stringConvertibleValueView);
+      this.Controls.Add(this.openButton);
       this.Name = "FileValueView";
       this.Size = new System.Drawing.Size(194, 24);
-      ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit();
-      this.splitContainer.Panel1.ResumeLayout(false);
-      this.splitContainer.Panel1.PerformLayout();
-      this.splitContainer.Panel2.ResumeLayout(false);
-      this.splitContainer.Panel2.PerformLayout();
-      ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit();
-      this.splitContainer.ResumeLayout(false);
       this.ResumeLayout(false);
 
@@ -109,4 +91,5 @@
     protected System.Windows.Forms.Button openButton;
     protected System.Windows.Forms.OpenFileDialog openFileDialog;
+    protected StringConvertibleValueView stringConvertibleValueView;
   }
 }
Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/FileValueView.cs	(revision 9833)
@@ -22,4 +22,5 @@
 using System;
 using System.Windows.Forms;
+using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
 
@@ -27,16 +28,8 @@
   [View("FileValueView")]
   [Content(typeof(FileValue), true)]
-  public partial class FileValueView : StringConvertibleValueView {
+  public partial class FileValueView : ItemView {
     public new FileValue Content {
       get { return (FileValue)base.Content; }
       set { base.Content = value; }
-    }
-
-    public override bool ReadOnly {
-      get {
-        if ((Content != null) && Content.ReadOnly) return true;
-        return base.ReadOnly;
-      }
-      set { base.ReadOnly = value; }
     }
 
@@ -45,16 +38,6 @@
     }
 
-    protected override void RegisterContentEvents() {
-      base.RegisterContentEvents();
-      Content.FileOpenDialogFilterChanged += new EventHandler(Content_FileOpenDialogFilterChanged);
-    }
-    protected override void DeregisterContentEvents() {
-      Content.FileOpenDialogFilterChanged -= new EventHandler(Content_FileOpenDialogFilterChanged);
-      base.DeregisterContentEvents();
-    }
     protected override void SetEnabledStateOfControls() {
       base.SetEnabledStateOfControls();
-      valueTextBox.Enabled = !Locked && !ReadOnly && Content != null;
-      valueTextBox.ReadOnly = Locked || ReadOnly || Content == null;
       openButton.Enabled = !Locked && !ReadOnly && Content != null;
     }
@@ -63,18 +46,14 @@
       base.OnContentChanged();
       if (Content == null) {
-        valueTextBox.Text = string.Empty;
+        stringConvertibleValueView.Content = null;
         return;
       }
 
-      valueTextBox.Text = Content.Value;
-      openButton.Enabled = !Content.ReadOnly;
-      openFileDialog.Filter = Content.FileDialogFilter;
-    }
-
-    protected virtual void Content_FileOpenDialogFilterChanged(object sender, EventArgs e) {
+      stringConvertibleValueView.Content = Content.StringValue;
       openFileDialog.Filter = Content.FileDialogFilter;
     }
 
     protected virtual void openButton_Click(object sender, EventArgs e) {
+      openFileDialog.Filter = Content.FileDialogFilter;
       if (openFileDialog.ShowDialog(this) != DialogResult.OK) return;
       Content.Value = openFileDialog.FileName;
Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.Designer.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.Designer.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.Designer.cs	(revision 9833)
@@ -50,8 +50,15 @@
       this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
       this.fileSystemWatcher = new System.IO.FileSystemWatcher();
-      this.fileValueView = new HeuristicLab.Data.Views.FileValueView();
       this.textBox = new System.Windows.Forms.TextBox();
       ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher)).BeginInit();
       this.SuspendLayout();
+      // 
+      // openButton
+      // 
+      this.openButton.Location = new System.Drawing.Point(365, 0);
+      // 
+      // stringConvertibleValueView
+      // 
+      this.stringConvertibleValueView.Size = new System.Drawing.Size(355, 21);
       // 
       // saveButton
@@ -60,5 +67,5 @@
       this.saveButton.CausesValidation = false;
       this.saveButton.Image = HeuristicLab.Common.Resources.VSImageLibrary.Save;
-      this.saveButton.Location = new System.Drawing.Point(394, 3);
+      this.saveButton.Location = new System.Drawing.Point(395, 0);
       this.saveButton.Name = "saveButton";
       this.saveButton.Size = new System.Drawing.Size(24, 24);
@@ -69,6 +76,6 @@
       // fileSystemWatcher
       // 
-      this.fileSystemWatcher.EnableRaisingEvents = false;
-      this.fileSystemWatcher.NotifyFilter = System.IO.NotifyFilters.LastWrite | System.IO.NotifyFilters.FileName;
+      this.fileSystemWatcher.EnableRaisingEvents = true;
+      this.fileSystemWatcher.NotifyFilter = ((System.IO.NotifyFilters)((System.IO.NotifyFilters.FileName | System.IO.NotifyFilters.LastWrite)));
       this.fileSystemWatcher.SynchronizingObject = this;
       this.fileSystemWatcher.Changed += new System.IO.FileSystemEventHandler(this.fileSystemWatcher_Changed);
@@ -76,17 +83,4 @@
       this.fileSystemWatcher.Deleted += new System.IO.FileSystemEventHandler(this.fileSystemWatcher_Changed);
       this.fileSystemWatcher.Renamed += new System.IO.RenamedEventHandler(this.fileSystemWatcher_Renamed);
-      // 
-      // fileValueView
-      // 
-      this.fileValueView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
-            | System.Windows.Forms.AnchorStyles.Right)));
-      this.fileValueView.Caption = "FileValueView";
-      this.fileValueView.Content = null;
-      this.fileValueView.LabelVisible = true;
-      this.fileValueView.Location = new System.Drawing.Point(4, 3);
-      this.fileValueView.Name = "fileValueView";
-      this.fileValueView.ReadOnly = false;
-      this.fileValueView.Size = new System.Drawing.Size(389, 24);
-      this.fileValueView.TabIndex = 3;
       // 
       // textBox
@@ -98,9 +92,9 @@
             | System.Windows.Forms.AnchorStyles.Right)));
       this.textBox.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-      this.textBox.Location = new System.Drawing.Point(3, 35);
+      this.textBox.Location = new System.Drawing.Point(3, 30);
       this.textBox.Multiline = true;
       this.textBox.Name = "textBox";
       this.textBox.ScrollBars = System.Windows.Forms.ScrollBars.Both;
-      this.textBox.Size = new System.Drawing.Size(415, 363);
+      this.textBox.Size = new System.Drawing.Size(415, 368);
       this.textBox.TabIndex = 4;
       this.textBox.TextChanged += new System.EventHandler(this.textBox_TextChanged);
@@ -110,8 +104,11 @@
       // 
       this.Controls.Add(this.textBox);
-      this.Controls.Add(this.fileValueView);
       this.Controls.Add(this.saveButton);
       this.Name = "TextFileView";
       this.Size = new System.Drawing.Size(421, 401);
+      this.Controls.SetChildIndex(this.saveButton, 0);
+      this.Controls.SetChildIndex(this.textBox, 0);
+      this.Controls.SetChildIndex(this.openButton, 0);
+      this.Controls.SetChildIndex(this.stringConvertibleValueView, 0);
       ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher)).EndInit();
       this.ResumeLayout(false);
@@ -125,5 +122,4 @@
     private System.Windows.Forms.SaveFileDialog saveFileDialog;
     private System.IO.FileSystemWatcher fileSystemWatcher;
-    private FileValueView fileValueView;
     private System.Windows.Forms.TextBox textBox;
   }
Index: trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.cs
===================================================================
--- trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.cs	(revision 9714)
+++ trunk/sources/HeuristicLab.Data.Views/3.3/Path Views/TextFileView.cs	(revision 9833)
@@ -24,5 +24,4 @@
 using System.IO;
 using System.Windows.Forms;
-using HeuristicLab.Core.Views;
 using HeuristicLab.MainForm;
 
@@ -30,12 +29,12 @@
   [View("TextFileView")]
   [Content(typeof(TextFileValue), true)]
-  public sealed partial class TextFileView : ItemView {
-    private bool changedFileContent;
-    private bool ChangedFileContent {
-      get { return changedFileContent; }
+  public sealed partial class TextFileView : FileValueView {
+    private bool fileContentChanged;
+    private bool FileContentChanged {
+      get { return fileContentChanged; }
       set {
-        if (changedFileContent != value) {
-          changedFileContent = value;
-          OnChangedFileContent();
+        if (fileContentChanged != value) {
+          fileContentChanged = value;
+          OnFileContentChanged();
         }
       }
@@ -49,15 +48,13 @@
     public TextFileView() {
       InitializeComponent();
-      changedFileContent = false;
+      fileContentChanged = false;
     }
 
     protected override void RegisterContentEvents() {
       base.RegisterContentEvents();
-      Content.ValueChanged += Content_FilePathChanged;
-      Content.FileOpenDialogFilterChanged += Content_FileDialogFilterChanged;
+      Content.StringValue.ValueChanged += Content_FilePathChanged;
     }
     protected override void DeregisterContentEvents() {
-      Content.ValueChanged -= Content_FilePathChanged;
-      Content.FileOpenDialogFilterChanged -= Content_FileDialogFilterChanged;
+      Content.StringValue.ValueChanged -= Content_FilePathChanged;
       fileSystemWatcher.EnableRaisingEvents = false;
       base.DeregisterContentEvents();
@@ -66,5 +63,5 @@
       base.SetEnabledStateOfControls();
       textBox.ReadOnly = Locked || ReadOnly || Content == null;
-      saveButton.Enabled = !Locked && !ReadOnly && Content != null && ChangedFileContent;
+      saveButton.Enabled = !Locked && !ReadOnly && Content != null && FileContentChanged;
 
       if (Content != null && Content.Exists()) {
@@ -83,7 +80,6 @@
     protected override void OnContentChanged() {
       base.OnContentChanged();
-      ChangedFileContent = false;
+      FileContentChanged = false;
       if (Content == null) {
-        fileValueView.Content = null;
         textBox.Text = string.Empty;
         //mkommend: other properties of the file system watcher cannot be cleared (e.g., path) as this leads to an ArgumentException
@@ -91,6 +87,4 @@
         return;
       }
-
-      fileValueView.Content = Content;
       saveFileDialog.Filter = Content.FileDialogFilter;
       UpdateTextBox();
@@ -101,19 +95,12 @@
       SetEnabledStateOfControls();
     }
-    private void Content_FileDialogFilterChanged(object sender, EventArgs e) {
-      saveFileDialog.Filter = Content.FileDialogFilter;
-    }
 
     private void textBox_TextChanged(object sender, EventArgs e) {
-      ChangedFileContent = fileText != textBox.Text;
-    }
-
-    private void OnChangedFileContent() {
+      FileContentChanged = fileText != textBox.Text;
+    }
+
+    private void OnFileContentChanged() {
       SetEnabledStateOfControls();
-      if (ChangedFileContent) {
-        textBox.ForeColor = Color.Red;
-      } else {
-        textBox.ForeColor = Color.Black;
-      }
+      textBox.ForeColor = FileContentChanged ? Color.Red : Color.Black;
     }
 
@@ -146,5 +133,5 @@
         } else {
           fileText = newContent;
-          ChangedFileContent = true;
+          FileContentChanged = true;
         }
       }
@@ -185,5 +172,5 @@
       WriteFile(path, textBox.Text);
       Content.Value = path;
-      ChangedFileContent = false;
+      FileContentChanged = false;
       fileSystemWatcher.EnableRaisingEvents = true;
     }
@@ -212,5 +199,5 @@
     }
     private void textBox_Validated(object sender, EventArgs e) {
-      if (!ChangedFileContent) return;
+      if (!FileContentChanged) return;
       string msg = string.Format("You have not saved the changes in the file \"{0}\" yet. Do you want to save the changes?", Content.Value);
       var result = MessageBox.Show(this, msg, "Save changes?", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
