private void RadTimelineTest_Loaded(object sender, RoutedEventArgs e) { this._viewModel = new RadTimelineTestView(_fireworkManager); this.DataContext = _viewModel; _timer.Elapsed += _timer_Elapsed; _fireworkTimeline.SelectionChanged += _fireworkTimeline_SelectionChanged; // _timer.Start(); _verticalSlider = _fireworkTimeline.FindChildByType <TimelineScrollBar>(); _fireworkManager.LineStarted += _fireworkManager_LineStarted; _fireworkManager.LineFailed += _fireworkManager_LineFailed; }
private void ResetScrollBar() { //Refresh useful value _lastCentereredVerticalSliderFireworkPositionStart = null; _currentVerticalRange = null; //Horizontal _fireworkTimeline.VisiblePeriodStart = FireworkManager.DefaultPeriodStartUI; _fireworkTimeline.VisiblePeriodEnd = FireworkManager.DefaultPeriodEndUI; //Vertical TimelineScrollBar verticalSlider = _fireworkTimeline.FindChildByType <TimelineScrollBar>(); if (verticalSlider != null) { var newStart = 0; var newEnd = verticalSlider.SelectionEnd; verticalSlider.Selection = new SelectionRange <double>(newStart, newEnd); } }
/// <summary> /// Useful to make some tests :-) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void _btnTest_Click(object sender, RoutedEventArgs e) { TimelineScrollBar verticalSlider = _fireworkTimeline.FindChildByType <TimelineScrollBar>(); double start = verticalSlider.SelectionStart; double end = verticalSlider.SelectionEnd; double newStart = (double)50 / 67 - (verticalSlider.SelectionRange / 2); // ou 0.3 / 0.6 / double newEnd = ((double)50 / 67 + verticalSlider.SelectionRange / 2); verticalSlider.Selection = new SelectionRange <double>(newStart, newEnd); //verticalSlider.Selection = verticalSlider.SelectionRange + (20 * 1 / 67 - (verticalSlider.SelectionRange / 2), ) return; List <TimelineStripLineControl> timeLineStripLineControlList = _fireworkTimeline.ChildrenOfType <TimelineStripLineControl>().ToList(); Style t = timeLineStripLineControlList[0].ElementStyle; Style s = timeLineStripLineControlList[0].NormalStyle; Style p = timeLineStripLineControlList[0].AlternateStyle; Style t1 = timeLineStripLineControlList[1].ElementStyle; Style s1 = timeLineStripLineControlList[1].NormalStyle; Style p1 = timeLineStripLineControlList[1].AlternateStyle; Type toto = t.Setters[0].GetType(); PropertyInfo pi = toto.GetProperty("Value"); object obj = pi.GetValue(t.Setters[0], null); //FluentResourceKey.AlternativeBrush /* FluentResourceKey dd = (FluentResourceKey)FluentResourceKey.AlternativeBrush; * * FluentResourceKey.PrimaryBrush * * FluentResourceExtension gd = new FluentResourceExtension(); * gd.ResourceKey = dd;*/ /*FluentResourceExtension<> ty; * * ty.ResourceKey = FluentResourceKey.AlternativeBrush; * ty. * //m.ResourceKey = FluentResourceKey.AlternativeBrush;*/ Telerik.Windows.Controls.FluentResourceExtension u = (Telerik.Windows.Controls.FluentResourceExtension)obj; //object y = toto.GetProperties()[4].GetValue(timeLineStripLineControlList[0].ElementStyle); //System.Windows.Controls.Border border = (System.Windows.Controls.Border)t; // System.Windows.Controls.Border tot = (System.Windows.Controls.Border)timeLineStripLineControlList[0].ElementStyle; /*Style s = new Style * { * TargetType = typeof(System.Windows.Controls.Border) * }; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); * * //timeLineStripLineControlList[0].NormalStyle = s; * //timeLineStripLineControlList[0].AlternateStyle = s; * timeLineStripLineControlList[0].ElementStyle = s;*/ //Style s = timeLineStripLineControlList[0].NormalStyle; //Style p = timeLineStripLineControlList[0].AlternateStyle; //s.Setters Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); //p.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Red)); //timeLineStripLineControlList[0].Background = //List<TimelinePeriodControl> tytyList = _fireworkTimeline.ChildrenOfType<TimelinePeriodControl>().ToList(); //Grid gr = tytyList[0].FindChildByType<Grid>(); //gr.Background = Brushes.Blue; //List<TimelineStripLineControl> tytyList = _fireworkTimeline.ChildrenOfType<TimelineStripLineControl>().ToList(); //TimelineStripLineControl to = test.FindChildByType<TimelineStripLineControl>(); /*Grid gr = tytyList[0].FindChildByType<Grid>(); * gr.Background = Brushes.Blue;*/ // gr.InvalidateVisual(); /* tytyList[0].Background = Brushes.Red; * * Style s = new Style * { * TargetType = typeof(System.Windows.Controls.Border) * }; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); * * tytyList[0].AlternateStyle = s; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Coral)); * * tytyList[0].NormalStyle = s; * * tytyList[0].InvalidateVisual();*/ //if (_viewModel.FireworkManager.State == FireworkManagerState.FireworkRunning) //{ // TimelineStripLineContainer test = _fireworkTimeline.FindChildByType<TimelineStripLineContainer>(); //Telerik.Windows.Controls.TimeBar.PeriodSpan y = (PeriodSpan)test.Items.CurrentItem; // List<TimelinePeriodControl> tytyList = _fireworkTimeline.ChildrenOfType<TimelinePeriodControl>().ToList(); //TimelineStripLineControl to = test.FindChildByType<TimelineStripLineControl>(); // Grid gr = tytyList[0].FindChildByType<Grid>(); // gr.Background = Brushes.Blue; // gr.InvalidateVisual(); /*Style st = new Style * { * TargetType = typeof(System.Windows.Controls.Border) * }; * * st.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); * * gr.Background = * * st.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Coral)); * * t.NormalStyle = s; * * tt.InvalidateVisual();*/ //VirtualizingTimeBarPanel titit = test.ChildrenOfType<VirtualizingTimeBarPanel>().FirstOrDefault(); /*TimelinePeriodControl u = toto.FindChild<TimelinePeriodControl>(_fireworkTimeline); * * Style s = new Style * { * TargetType = typeof(System.Windows.Controls.Border) * }; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); * * u.AlternateStyle = s; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Coral)); * * u.NormalStyle = s; * * u.InvalidateVisual(); * * /*List<TimelinePeriodControl> tytyList = _fireworkTimeline.ChildrenOfType<TimelinePeriodControl>().ToList(); * * if (tytyList != null && tytyList.Count > 0) * { * foreach (TimelinePeriodControl t in tytyList) * { * * * t.v * Style s = new Style * { * TargetType = typeof(System.Windows.Controls.Border) * }; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Blue)); * * t.AlternateStyle = s; * * s.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Coral)); * * t.NormalStyle = s; * * t.InvalidateVisual(); * } * }*/ }
/// <summary> /// Compute visible timeline automatically (based on current line started) /// </summary> /// <param name="line"></param> private void ComputeVisiblePeriod(DateTime visiblePeriodStart, DateTime visiblePeriodEnd, int radRowIndex, bool byPassAutomaticScrollSanityCheck) { if (!_automaticTimelineScroll && !byPassAutomaticScrollSanityCheck) { return; } //Sanity check _line must be initialized! //if (_line == null) return; //Put this into try/catch, just in case... //Don't want program to stop in the middle of firework try { //_computeVisiblePeriodComputing = true; //DateTime visiblePeriodStart = DateTime.Now.Date.Add(_line.Ignition).Subtract(new TimeSpan(0, 0, 20)); //DateTime visiblePeriodEnd = DateTime.Now.Date.Add(_line.Ignition).Add(new TimeSpan(0, 0, 40)); _userControlDispatcher.BeginInvoke((Action)(() => { //*************** //Horizontal part //*************** //Change visible port view only if new visible period start - 20 s > period start ui //_fireworkTimeline.VisiblePeriod.Start if (visiblePeriodStart.CompareTo(_fireworkManager.PeriodStartUI) > 0) { _fireworkTimeline.VisiblePeriod = new Telerik.Windows.Controls.SelectionRange <DateTime>(visiblePeriodStart, visiblePeriodEnd); } else { //Reset horizontal position in case user has changed it _fireworkTimeline.VisiblePeriodStart = FireworkManager.DefaultPeriodStartUI; _fireworkTimeline.VisiblePeriodEnd = FireworkManager.DefaultPeriodEndUI; } //************* //Vertical part //************* //Center firework as soon as possible TimelineScrollBar verticalSlider = _fireworkTimeline.FindChildByType <TimelineScrollBar>(); if (verticalSlider != null) { //Need to re-compute select range? if (!_currentVerticalRange.HasValue) { _currentVerticalRange = verticalSlider.SelectionRange; } //Slider value is between 0 - 1 //So (firework index * 1) / nb total firework = vertical slider position double verticalSliderFireworkPositionStart = (double)radRowIndex / _fireworkManager.AllActiveFireworks.Count; double verticalSliderFireworkPositionEnd = (double)radRowIndex / _fireworkManager.AllActiveFireworks.Count; double centereredVerticalSliderFireworkPositionStart = verticalSliderFireworkPositionStart - (_currentVerticalRange.Value / 2); double centereredVerticalSliderFireworkPositionEnd = verticalSliderFireworkPositionEnd + (_currentVerticalRange.Value / 2); if (centereredVerticalSliderFireworkPositionStart >= 0) { if (centereredVerticalSliderFireworkPositionEnd > 1) { //Do it only one time! so at the end the slider does not keep on going down if (!_lastCentereredVerticalSliderFireworkPositionStart.HasValue) { _lastCentereredVerticalSliderFireworkPositionStart = centereredVerticalSliderFireworkPositionStart; } verticalSlider.Selection = new SelectionRange <double>(_lastCentereredVerticalSliderFireworkPositionStart.Value, 1); } else { verticalSlider.Selection = new SelectionRange <double>(centereredVerticalSliderFireworkPositionStart, centereredVerticalSliderFireworkPositionEnd); } } else { //Ensure to scroll up in case user has scroll down for instance verticalSlider.Selection = new SelectionRange <double>(0, _currentVerticalRange.Value); } } /* * Below = old implementation (before 07/2021) * /* * * /*TimelineScrollBar verticalSlider = _fireworkTimeline.FindChildByType<TimelineScrollBar>(); * if (verticalSlider != null) * { * int nbOfElementVisiblePerRange = Convert.ToInt32(Math.Truncate((_fireworkManager.AllActiveFireworks.Count * verticalSlider.SelectionRange))); * double range = (line.Fireworks[0].RadRowIndex * verticalSlider.SelectionRange / nbOfElementVisiblePerRange); * * //End? * if (range + verticalSlider.SelectionRange - (verticalSlider.SelectionRange / 4) > 1) * { * verticalSlider.Selection = new SelectionRange<double>(1 - verticalSlider.SelectionRange, 1); * return; * } * * //Mid screen reached? * if (range > (verticalSlider.SelectionRange / 4)) * { * var newStart = range - (verticalSlider.SelectionRange / 4); * var newEnd = range + verticalSlider.SelectionRange - (verticalSlider.SelectionRange / 4); * verticalSlider.Selection = new SelectionRange<double>(newStart, newEnd); * } * }*/ })); } catch { //NLog here } }