コード例 #1
0
ファイル: EpgGrid.cs プロジェクト: BigGranu/MediaPortal-2
 /// <summary>
 /// Sets Grid positioning attached properties.
 /// </summary>
 /// <param name="gridControl">Control in Grid.</param>
 /// <param name="colIndex">"Grid.Column"</param>
 /// <param name="rowIndex">"Grid.Row"</param>
 /// <param name="colSpan">"Grid.ColumnSpan"</param>
 private static void SetGrid(Control gridControl, int colIndex, int rowIndex, int colSpan)
 {
   SetRow(gridControl, rowIndex);
   SetColumn(gridControl, colIndex);
   SetColumnSpan(gridControl, colSpan);
 }
コード例 #2
0
ファイル: EpgGrid.cs プロジェクト: BigGranu/MediaPortal-2
 private void SetTimeIndicator()
 {
   if (_timeIndicatorControl == null)
   {
     _timeIndicatorControl = new Control { LogicalParent = this };
     // Deep copy the styles to each program button.
     _timeIndicatorControl.Template = MpfCopyManager.DeepCopyCutLVPs(TimeIndicatorTemplate);
     SetRow(_timeIndicatorControl, 0);
     SetRowSpan(_timeIndicatorControl, _numberOfRows);
     Children.Add(_timeIndicatorControl);
   }
   DateTime viewportStart = SlimTvMultiChannelGuideModel.GuideStartTime;
   int currentTimeColumn = (int)Math.Round((DateTime.Now - viewportStart).TotalMinutes / _perCellTime) + 1; // Header offset
   if (currentTimeColumn <= 1 || currentTimeColumn > _numberOfColumns + 1) // Outside viewport
   {
     _timeIndicatorControl.IsVisible = false;
   }
   else
   {
     _timeIndicatorControl.IsVisible = true;
     SetZIndex(_timeIndicatorControl, 100);
     SetColumn(_timeIndicatorControl, currentTimeColumn);
   }
 }
コード例 #3
0
ファイル: EpgGrid.cs プロジェクト: BigGranu/MediaPortal-2
    private void CreateVisibleChildren(bool updateOnly)
    {
      lock (Children.SyncRoot)
      {
        if (!updateOnly && _childrenCreated)
          return;

        _childrenCreated = true;

        if (!updateOnly)
        {
          _timeIndicatorControl = null;
          Children.Clear();
        }

        SetTimeIndicator();

        if (ChannelsPrograms == null)
          return;

        int rowIndex = 0;
        int channelIndex = _channelViewOffset;
        while (channelIndex < ChannelsPrograms.Count && rowIndex < _numberOfRows)
        {
          if (!CreateOrUpdateRow(updateOnly, ref channelIndex, rowIndex++))
            break;
        }
      }
    }
コード例 #4
0
ファイル: EpgGrid.cs プロジェクト: BigGranu/MediaPortal-2
 /// <summary>
 /// Creates a control in the given <paramref name="context"/>.
 /// </summary>
 /// <param name="context">ListItem, can be either "Channel" or "Program"</param>
 /// <returns>Control.</returns>
 private Control CreateControl(ListItem context)
 {
   Control btnEpg = new Control
   {
     LogicalParent = this,
     Context = context,
   };
   return btnEpg;
 }
コード例 #5
0
    private void InitializeBars()
    {
      ISpectrumPlayer player = ActiveSpectrumPlayer;

      if (player == null)
      {
        _barWidth = 1;
        _maximumFrequencyIndex = -1;
        _minimumFrequencyIndex = 0;
        return;
      }

      if (!_refreshShapes || _spectrumCanvas == null)
        return;

      int maxIndex;
      int minIndex;
      bool res = player.GetFFTFrequencyIndex(MaximumFrequency, out maxIndex);
      res |= player.GetFFTFrequencyIndex(MinimumFrequency, out minIndex);
      if (!res)
        return;
      _maximumFrequencyIndex = Math.Min(maxIndex + 1, FREQUENCY_BUFFER_SIZE - 1);
      _minimumFrequencyIndex = Math.Min(minIndex, FREQUENCY_BUFFER_SIZE - 1);

      _barWidth = Math.Max(((_spectrumCanvas.ActualWidth - (BarSpacing * (BarCount + 1))) / BarCount), 1);
      int actualBarCount = _barWidth >= 1.0d ? BarCount : Math.Max((int) ((_spectrumCanvas.ActualWidth - BarSpacing) / (_barWidth + BarSpacing)), 1);
      _channelPeakData = new float[actualBarCount];

      int indexCount = _maximumFrequencyIndex - _minimumFrequencyIndex;
      int linearIndexBucketSize = (int) Math.Round(indexCount / (double) actualBarCount, 0);
      List<int> maxIndexList = new List<int>();
      List<int> maxLogScaleIndexList = new List<int>();
      double maxLog = Math.Log(actualBarCount, actualBarCount);
      for (int i = 1; i < actualBarCount; i++)
      {
        maxIndexList.Add(_minimumFrequencyIndex + (i * linearIndexBucketSize));
        int logIndex = (int) ((maxLog - Math.Log((actualBarCount + 1) - i, (actualBarCount + 1))) * indexCount) + _minimumFrequencyIndex;
        maxLogScaleIndexList.Add(logIndex);
      }
      maxIndexList.Add(_maximumFrequencyIndex);
      maxLogScaleIndexList.Add(_maximumFrequencyIndex);
      _barIndexMax = maxIndexList.ToArray();
      _barLogScaleIndexMax = maxLogScaleIndexList.ToArray();

      FrameworkElementCollection canvasChildren = _spectrumCanvas.Children;
      canvasChildren.StartUpdate();
      try
      {
        canvasChildren.Clear();

        double height = _spectrumCanvas.ActualHeight;
        double peakDotHeight = Math.Max(_barWidth / 2.0f, 1);
        for (int i = 0; i < actualBarCount; i++)
        {
          // Deep copy the styles to each bar
          Style barStyleCopy = MpfCopyManager.DeepCopyCutLVPs(BarStyle);
          Style peakStyleCopy = MpfCopyManager.DeepCopyCutLVPs(PeakStyle);

          double xCoord = BarSpacing + (_barWidth * i) + (BarSpacing * i) + 1;
          Control barControl = new Control
              {
                Width = _barWidth,
                Height = height,
                Style = barStyleCopy
              };
          Canvas.SetLeft(barControl, xCoord);
          Canvas.SetBottom(barControl, height);
          _barShapes.Add(barControl);
          canvasChildren.Add(barControl);

          Control peakControl = new Control
              {
                Width = _barWidth,
                Height = peakDotHeight,
                Style = peakStyleCopy
              };
          Canvas.SetLeft(peakControl, xCoord);
          Canvas.SetBottom(peakControl, height);
          _peakShapes.Add(peakControl);
          canvasChildren.Add(peakControl);
        }
      }
      finally
      {
        canvasChildren.EndUpdate();
      }
      ActualBarWidth = _barWidth;
      _refreshShapes = false;
    }