public void AttachBorder(LabelingBorders border) { if (border == null) { throw new ArgumentNullException("border", "'border' cannot be null"); } List <int> prevIndices = new List <int>(); foreach (int prevIndex in this.SelectedIndices) { prevIndices.Add(prevIndex); } _border = border; Items.Clear(); int index = 0; foreach (var text in _border.GetLabelNames(true)) { Items.Add(text); if (prevIndices.Contains(index)) { SelectedIndices.Add(index); } index++; } }
public static LabelingBorders Deserialize(XmlReader reader) { LabelingBorders ret = new LabelingBorders(); ret.ReadXml(reader); return(ret); }
/// <summary> /// 指定されたパスのファイルからSequenceDataを作成します。拡張子は自動的に付加されます。 /// </summary> /// <param name="path"></param> /// <returns></returns> public static SequenceData RetrieveState(string path) { SequenceData ret = new SequenceData(); if (!File.Exists(path + DefaultExtensionForHeader)) { string ext = Path.GetExtension(path); if (ext == DefaultExtensionForHeader || ext == DefaultExtensionForValues || ext == DefaultExtensionForBorder) { path = Path.Combine(Path.GetDirectoryName(path), Path.GetFileNameWithoutExtension(path)); if (!File.Exists(path + DefaultExtensionForHeader)) { return(null); } } else { return(null); } } string titlePath = string.Format("{0}{1}", path, DefaultExtensionForHeader); string sequencePath = string.Format("{0}{1}", path, DefaultExtensionForValues); string borderPath = string.Format("{0}{1}", path, DefaultExtensionForBorder); using (FileStream titleStream = new FileStream(titlePath, FileMode.Open)) { ret.RetrieveDataHeader(titleStream); } ret.Values = TimeSeriesValues.Deserialize(sequencePath); ret.Borders = LabelingBorders.Deserialize(borderPath); ret.IsDataChanged = false; return(ret); }
/// <summary> /// ラベル系列からデータを作成します /// </summary> /// <param name="labelSequence">ラベル系列</param> /// <param name="title">このデータに与えるタイトル</param> /// <param name="colorPalette">ラベル名からラベルの色を生成するディクショナリ</param> /// <returns></returns> public static SequenceData FromLabelSequence(ICSLabelSequence labelSequence, string title, IDictionary <string, Color> colorPalette) { if (labelSequence == null) { throw new ArgumentNullException("labelSequence", "'labelSequence' cannot be null"); } TimeSeriesValues newSeqeunce = new TimeSeriesValues(title); LabelingBorders newBorder = new LabelingBorders(); foreach (var label in labelSequence.EnumerateLabels()) { newSeqeunce[label.BeginTime] = new decimal?[] { label.BeginTime }; newBorder.SetBorder(label.BeginTime, label.LabelText); } newSeqeunce[labelSequence.Duration] = new decimal?[] { labelSequence.Duration }; newBorder.SetBorder(labelSequence.Duration, newBorder.DefaultName); if (colorPalette != null) { foreach (var pair in colorPalette) { newBorder.SetColor(pair.Key, pair.Value); } } SequenceData ret = new SequenceData(newSeqeunce, newBorder, title); ret.Type = SequenceType.Label; return(ret); }
/// <summary> /// データを指定するコンストラクタ /// </summary> /// <param name="sequence">時系列データ</param> /// <param name="border">ラベル境界情報</param> /// <param name="title">このデータの識別名</param> public SequenceData(TimeSeriesValues sequence, LabelingBorders border, string title) { _lockDisposable = new LockDisposable(_rwLock); this.Values = sequence; this.Borders = border; this.Title = title; this.Type = SequenceType.Numeric; this.IsDataChanged = false; }
private void buttonDefault_Click(object sender, EventArgs e) { var labelColors = getSelectedLabelColors(); Dictionary <string, Color> map = new Dictionary <string, Color>(); foreach (var pair in labelColors) { map[pair.Key] = LabelingBorders.GetDefaultColorFor(pair.Key); } setColorMap(map); setLabelList(); }
private void buttonLoad_Click(object sender, EventArgs e) { try { if (dialogOpenBorder.ShowDialog() == DialogResult.OK) { LabelingBorders newBorder = LabelingBorders.Deserialize(dialogOpenBorder.FileName); _sequence.Borders = newBorder; refreshList(); dialogSaveBorder.FileName = dialogOpenBorder.FileName; } } catch (Exception ex) { ErrorLogger.Tell(ex, "ファイルが読み込めませんでした"); } }
public LabelingBorders(LabelingBorders original) : this() { foreach (var pair in original.GetColorPalette()) { this.SetColor(pair.Key, pair.Value); } this.DefaultName = original.DefaultName; foreach (var pair in original.Enumerate()) { this.SetBorder(pair.Key, pair.Value); } this.TargetColumnIndex = original.TargetColumnIndex; }
private void listBorders_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files.Length > 0) { try { _sequence.Borders = LabelingBorders.Deserialize(files[0]); refreshList(); dialogSaveBorder.FileName = dialogOpenBorder.FileName = files[0]; } catch (Exception ex) { ErrorLogger.Tell(ex, "ファイルが読み込めませんでした"); } } } }
/// <summary> /// ストリームからデータを復元します /// </summary> /// <param name="reader"></param> /// <returns></returns> public static SequenceData Deserialize(XmlReader reader) { SequenceData ret = null; reader.ReadStartElement(typeof(SequenceData).Name); byte[] titleBytes = null, sequenceBytes = null; LabelingBorders border = null; string tmp; MemoryStream tmpStream; StreamWriter tmpWriter; for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement && reader.NodeType != XmlNodeType.None; reader.MoveToContent()) { if (reader.IsEmptyElement) { reader.Skip(); continue; } switch (reader.Name) { case "Title": tmp = reader.ReadElementContentAsString(); tmpStream = new MemoryStream(); tmpWriter = new StreamWriter(tmpStream); tmpWriter.Write(tmp); tmpWriter.Flush(); titleBytes = tmpStream.ToArray(); break; case "Sequence": tmp = reader.ReadElementContentAsString(); tmpStream = new MemoryStream(); tmpWriter = new StreamWriter(tmpStream); tmpWriter.Write(tmp); tmpWriter.Flush(); sequenceBytes = tmpStream.ToArray(); break; case "Border": reader.ReadStartElement(); border = LabelingBorders.Deserialize(reader.ReadSubtree()); for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement && reader.NodeType != XmlNodeType.None; reader.MoveToContent()) { reader.Skip(); } reader.ReadEndElement(); break; default: reader.Skip(); break; } } reader.ReadEndElement(); if (titleBytes != null && sequenceBytes != null && border != null) { ret = new SequenceData(); ret.Borders = border; using (MemoryStream stream2 = new MemoryStream(sequenceBytes)) { ret.Values = TimeSeriesValues.Deserialize(stream2); } using (MemoryStream stream2 = new MemoryStream(titleBytes)) { ret.RetrieveDataHeader(stream2); } } return(ret); }