/// <summary>
 /// Set data.
 /// </summary>
 /// <param name="data">Graph data.</param>
 /// <param name="parent">Parent graph.</param>
 public void SetData(VisualDimensionGraph data, IMultiFrameControler parent)
 {
     Debug.Assert(data != null && parent != null);
     _graphData = data;
     _parent = parent;
     Debug.Assert(data.StaticTrajectory is VisualMultiTrajectory);
     _trajectoryData = data.StaticTrajectory as VisualMultiTrajectory;
 }
        /// <summary>
        /// Set data context.
        /// </summary>
        /// <param name="dataContext">Data context.</param>
        public void SetDataContext(VisualDimensionGraph dataContext)
        {
            Debug.Assert(dataContext != null, "Can't set a null data context to SingleDimensionGraph.");
            DataContext = dataContext;

            _controlPanel.SetDataContext(dataContext);

            dataContext.DisplayController.PropertyChanged +=
                new PropertyChangedEventHandler(OnGraphVisibilityChanged);

            ObservableCollection<int> hoverFrames = new ObservableCollection<int>();
            Debug.Assert(dataContext.StaticTrajectory is VisualSingleTrajectory,
                "SingleDimensionGraph must be bind to VisualSingleTrajectory");
            VisualSingleTrajectory visualSingleTrajectory = dataContext.StaticTrajectory as VisualSingleTrajectory;
            visualSingleTrajectory.SelectedFrameIndexes = dataContext.SelectedFrameIndexes;
            visualSingleTrajectory.HoverFrameIndexes = hoverFrames;
            _staticGraph.SetDataContext(visualSingleTrajectory);
            _staticGraph.DisplayController = dataContext.DisplayController.TrajectoryDisplayController;

            Debug.Assert(dataContext.DeltaTrajectory is VisualSingleTrajectory,
                "SingleDimensionGraph must be bind to VisualSingleTrajectory");
            visualSingleTrajectory = dataContext.DeltaTrajectory as VisualSingleTrajectory;
            visualSingleTrajectory.SelectedFrameIndexes = dataContext.SelectedFrameIndexes;
            visualSingleTrajectory.HoverFrameIndexes = hoverFrames;
            _deltaGraph.SetDataContext(visualSingleTrajectory);
            _deltaGraph.DisplayController = dataContext.DisplayController.TrajectoryDisplayController;

            Debug.Assert(dataContext.AccelerationTrajectory is VisualSingleTrajectory,
                "SingleDimensionGraph must be bind to VisualSingleTrajectory");
            visualSingleTrajectory = dataContext.AccelerationTrajectory as VisualSingleTrajectory;
            visualSingleTrajectory.SelectedFrameIndexes = dataContext.SelectedFrameIndexes;
            visualSingleTrajectory.HoverFrameIndexes = hoverFrames;
            _accelerationGraph.SetDataContext(visualSingleTrajectory);
            _accelerationGraph.DisplayController = dataContext.DisplayController.TrajectoryDisplayController;

            _waveformGraph.SetDataContext(dataContext.WaveSamples);

            _durationGraph.SetDataContext(dataContext.PhoneDurations);

            _wordSegmentGraph.Segments = dataContext.WordSegments;
            _wordSegmentGraph.TimeAxis = dataContext.TimeAxis;

            _phoneSegmentGraph.Segments = dataContext.PhoneSegments;
            _phoneSegmentGraph.TimeAxis = dataContext.TimeAxis;

            _trajectoryInfoTable.DataContext = _trajectoryInfo;

            _viewData = dataContext;

            Debug.Assert(dataContext.StaticTrajectory.YAxis != null, "YAxis of statistic trajectory should not be null!");
            _staticYAxis.SetDataContext(dataContext.StaticTrajectory.YAxis);
            Debug.Assert(dataContext.DeltaTrajectory.YAxis != null, "YAxis of delta trajectory should not be null!");
            _deltaYAxis.SetDataContext(dataContext.DeltaTrajectory.YAxis);
            Debug.Assert(dataContext.AccelerationTrajectory.YAxis != null, "YAxis of acceleration trajectory should not be null!");
            _accelerationYAxis.SetDataContext(dataContext.AccelerationTrajectory.YAxis);
            Debug.Assert(dataContext.WaveSamples.YAxis != null, "YAxis of wave form should not be null!");
            _waveformYAxis.SetDataContext(dataContext.WaveSamples.YAxis);
        }
        /// <summary>
        /// Set data context.
        /// </summary>
        /// <param name="dataContext">Data context.</param>
        public void SetDataContext(VisualDimensionGraph dataContext)
        {
            Debug.Assert(dataContext != null,
                "Can't assign null data context to TrajectoryControlPanel.");

            DataContext = dataContext.DisplayController;
            _displayViewData = dataContext.DisplayController;
            _timeScrollBar.SetDataContext(dataContext.TimeAxis);
            _zoomControl.SetDataContext(dataContext.TimeAxis);
            _timeAxisViewData = dataContext.TimeAxis;
            dataContext.TimeAxis.PropertyChanged += new PropertyChangedEventHandler(TimeAxis_PropertyChanged);
        }
        /// <summary>
        /// Set data context.
        /// </summary>
        /// <param name="graphData">Graph data.</param>
        /// <param name="trajectoryData">Trajectory data.</param>
        /// <param name="hoverFrameIndexes">Hover frame indexes.</param>
        public void SetDataContext(VisualDimensionGraph graphData,
            VisualMultiTrajectory trajectoryData,
            ObservableCollection<int> hoverFrameIndexes)
        {
            Debug.Assert(graphData != null && trajectoryData != null,
                "Can't set null data context to MultiTrajectoryGraph.");

            _dimensionGraphData = graphData;
            DataContext = _dimensionGraphData;

            _dimensionGraphData.DisplayController.PropertyChanged +=
                new PropertyChangedEventHandler(OnGraphVisibilityChanged);

            _frameline.TimeAxis = graphData.TimeAxis;
            _selectedFrames.TimeAxis = graphData.TimeAxis;
            _selectedFrames.HighlightFrames = graphData.SelectedFrameIndexes;
            _selectedMultiFrames.TimeAxis = graphData.TimeAxis;
            _hightlighFrames.TimeAxis = graphData.TimeAxis;
            _hightlighFrames.HighlightFrames = hoverFrameIndexes;
            _hoverFrameIndexes = hoverFrameIndexes;
            _trajectoryData = trajectoryData;
        }