Ignore:
Timestamp:
03/20/09 16:08:48 (13 years ago)
Author:
epitzer
Message:

Almost complete GUI for persistence configuration. (#506)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/New Persistence Exploration/Persistence/HeuristicLab.Persistence.GUI/PersistenceConfigurationForm.cs

    r1373 r1382  
    11using System;
    22using System.Collections.Generic;
    3 using System.ComponentModel;
    4 using System.Data;
    53using System.Drawing;
    64using System.Linq;
    7 using System.Text;
    85using System.Windows.Forms;
    96using HeuristicLab.Persistence.Default.Xml;
    107using HeuristicLab.Persistence.Interfaces;
     8using System.Text;
    119
    1210namespace HeuristicLab.Persistence.GUI {
     11
    1312  public partial class PersistenceConfigurationForm : Form {   
    1413    public PersistenceConfigurationForm() {
     
    1918        item.Checked = true;
    2019        item.Tag = decomposer;
    21       }     
     20      }
     21     
     22      foreach ( var formats in ConfigurationService.Instance.AllFormatters ) {
     23        TabPage page = new TabPage(formats.Key.Name);
     24        formatterTabs.TabPages.Add(page);
     25        DataGridView gridView = new DataGridView {
     26          Dock = DockStyle.Fill,
     27          EditMode = DataGridViewEditMode.EditOnEnter,
     28          AllowUserToAddRows = false,
     29          AllowUserToDeleteRows = false,
     30          AllowUserToResizeRows = false,                                       
     31        };
     32        //gridView.CellValueChanged += gridView_CellValueChanged;
     33        //gridView.DataError += gridView_DataError;
     34        //gridView.CellFormatting += gridView_CellFormatting;
     35        page.Controls.Add(gridView);
     36        gridView.Columns.Add(new DataGridViewTextBoxColumn {
     37          Name = "Type", ReadOnly = true,
     38          AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
     39        });
     40        gridView.Columns.Add(new DataGridViewCheckBoxColumn
     41          { AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells });
     42        gridView.Columns.Add(new DataGridViewComboBoxColumn
     43          { AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill });               
     44        var formatterMap = new Dictionary<Type, List<IFormatter>>();
     45        foreach (var formatter in formats.Value) {
     46          if (!formatterMap.ContainsKey(formatter.Type))
     47            formatterMap.Add(formatter.Type, new List<IFormatter>());
     48          formatterMap[formatter.Type].Add(formatter);
     49        }
     50        foreach ( var formatterMapping in formatterMap ) {
     51          var row = gridView.Rows[gridView.Rows.Add()];
     52          row.Cells[0].Value = formatterMapping.Key.SimpleFullName();
     53          row.Cells[0].ToolTipText = formatterMapping.Key.AssemblyQualifiedName;
     54          row.Cells[1].Value = true;
     55          var comboBoxCell = (DataGridViewComboBoxCell) row.Cells[2];
     56          //comboBoxCell.ValueType = typeof(IFormatter);         
     57          foreach ( var formatter in formatterMapping.Value ) {           
     58            comboBoxCell.Items.Add(formatter.GetType().Name);
     59          }         
     60          comboBoxCell.Value = comboBoxCell.Items[0];         
     61          comboBoxCell.ToolTipText = comboBoxCell.Items[0].ToString();
     62          if (comboBoxCell.Items.Count == 1) {
     63            comboBoxCell.ReadOnly = true;
     64            comboBoxCell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
     65          }     
     66        }     
     67      }
    2268    }
     69
     70    void gridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) {
     71      e.Value = e.Value.ToString();
     72      e.FormattingApplied = true;
     73    }   
    2374
    2475    private void decomposerList_ItemDrag(object sender, ItemDragEventArgs e) {
     
    3687        return;
    3788      }
    38       //Returns the location of the mouse pointer in the ListView control.
    39       Point cp = decomposerList.PointToClient(new Point(e.X, e.Y));
    40       //Obtain the item that is located at the specified location of the mouse pointer.
    41       ListViewItem dragToItem = decomposerList.GetItemAt(cp.X, cp.Y);
    42       if (dragToItem == null) {
    43         return;
    44       }
    45       //Obtain the index of the item at the mouse pointer.
    46       int dragIndex = dragToItem.Index;
    47       ListViewItem[] sel = new ListViewItem[decomposerList.SelectedItems.Count];
    48       for (int i = 0; i <= decomposerList.SelectedItems.Count - 1; i++) {
    49         sel[i] = decomposerList.SelectedItems[i];
    50       }
    51       for (int i = 0; i < sel.GetLength(0); i++) {
    52         //Obtain the ListViewItem to be dragged to the target location.
    53         ListViewItem dragItem = sel[i];
    54         int itemIndex = dragIndex;
    55         if (itemIndex == dragItem.Index) {
     89      Point cp = decomposerList.PointToClient(new Point(e.X, e.Y));     
     90      ListViewItem targetItem = decomposerList.GetItemAt(cp.X, cp.Y);     
     91      if (targetItem == null)
     92        return;           
     93      int targetIndex = targetItem.Index;     
     94      var selectedItems = new List<ListViewItem>(decomposerList.SelectedItems.Cast<ListViewItem>());
     95      int i = 0;
     96      foreach ( ListViewItem dragItem in selectedItems ) {               
     97        if (targetIndex == dragItem.Index)
    5698          return;
    57         }
    58         if (dragItem.Index < itemIndex)
    59           itemIndex++;
    60         else
    61           itemIndex = dragIndex + i;
    62         //Insert the item at the mouse pointer.
    63         ListViewItem insertItem = (ListViewItem) dragItem.Clone();
    64         decomposerList.Items.Insert(itemIndex, insertItem);
    65         //Removes the item from the initial location while
    66         //the item is moved to the new location.
     99        if (dragItem.Index < targetIndex) {
     100          decomposerList.Items.Insert(targetIndex + 1, (ListViewItem) dragItem.Clone());
     101        } else {
     102          decomposerList.Items.Insert(targetIndex + i, (ListViewItem)dragItem.Clone());         
     103        }       
    67104        decomposerList.Items.Remove(dragItem);
     105        i++;
    68106      }
    69107      Update();
     
    92130      Update();
    93131    }
     132   
     133  }
     134
     135  public class FakeBoolean2XmlFormatter : IFormatter {   
     136
     137    public Type Type { get { return typeof (Boolean); } }
     138
     139    public IFormat Format { get { return XmlFormat.Instance; } }
     140
     141    public object DoFormat(object o) {
     142      return null;
     143    }
     144
     145    public object Parse(object o) {
     146      return null;
     147    }
     148   
     149  }
     150
     151  public class FormatterWrapper {
     152    public IFormatter Formatter;
     153    public FormatterWrapper(IFormatter f) {
     154      Formatter = f;
     155    }
     156    public override string ToString() {
     157      return Formatter.GetType().Name;
     158    }
     159  }
     160
     161  public static class TypeFormatter {
     162
     163    public static string SimpleFullName(this Type type) {
     164      StringBuilder sb = new StringBuilder();
     165      SimpleFullName(type, sb);
     166      return sb.ToString();
     167    }
     168
     169    private static void SimpleFullName(Type type, StringBuilder sb) {     
     170      if (type.IsGenericType) {
     171        sb.Append(type.Name, 0, type.Name.LastIndexOf('`'));     
     172        sb.Append("<");
     173        foreach (Type t in type.GetGenericArguments()) {
     174          SimpleFullName(t, sb);         
     175          sb.Append(", ");
     176        }
     177        sb.Remove(sb.Length - 2, 2);
     178        sb.Append(">");
     179      } else {
     180        sb.Append(type.Name);
     181      }
     182    }
    94183
    95184  }
     185
    96186}
Note: See TracChangeset for help on using the changeset viewer.