The class implementing a button which consists of 3 parts a left part, a middle part and a right part These are presented as [ Left Middle Right ] Each part has 2 images, 1 for the normal state and 1 for the focused state Further the button can have an image (icon) which can be positioned
상속: GUIControl
예제 #1
0
    private void SetFocusBorder(ref GUIButton3PartControl button)
    {
      // Setup the highlight border for the specified button control.
      // The focus overlay needs to have an outline border to highlight the selected button.
      // To get the border to render on top of everything else we need to move the selected
      // control to the end of the windows list of children controls.
      GUIControl ctrl = (GUIControl)button;
      SendToFront(ref ctrl);

      if (button.RenderLeft && button.RenderRight)
      {
        button.SetBorderTFM("0,0,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFL("6,0,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFR("0,6,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
      }
      else if (button.RenderLeft && !button.RenderRight)
      {
        button.SetBorderTFM("0,6,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFL("6,0,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFR("0", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
      }
      else if (!button.RenderLeft && button.RenderRight)
      {
        button.SetBorderTFM("6,0,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFL("0", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFR("0,6,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
      }
      else
      {
        button.SetBorderTFM("6,6,6,6", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFL("0", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
        button.SetBorderTFR("0", GUIImage.BorderPosition.BORDER_IMAGE_OUTSIDE, false, false, "tvguide_highlight_border.png", _guideColorBorderHighlight, true, true);
      }
    }
예제 #2
0
    protected override void RenderChannel(ref Dictionary<int, List<Program>> mapPrograms, int iChannel, GuideChannel tvGuideChannel,
                               long iStart, long iEnd, bool selectCurrentShow)
    {
      int channelNum = 0;
      Channel channel = tvGuideChannel.channel;

      if (!_byIndex)
      {
        channelNum = channel.ChannelNumber;
      }
      else
      {
        channelNum = _channelList.IndexOf(tvGuideChannel) + 1;
      }

      GUIButton3PartControl img = GetControl(iChannel + (int)Controls.IMG_CHAN1) as GUIButton3PartControl;
      if (img != null)
      {
        if (_showChannelLogos)
        {
          img.TexutureIcon = tvGuideChannel.strLogo;
        }
        if (channelNum > 0 && _showChannelNumber)
        {
          img.Label1 = channelNum + " " + channel.DisplayName;
        }
        else
        {
          img.Label1 = channel.DisplayName;
        }
        img.Data = channel;
        img.IsVisible = true;
      }


      List<Program> programs = null;
      if (mapPrograms.ContainsKey(channel.IdChannel))
        programs = mapPrograms[channel.IdChannel];
      
      bool noEPG = (programs == null || programs.Count == 0);
      if (noEPG)
      {
        DateTime dt = Utils.longtodate(iEnd);
        long iProgEnd = Utils.datetolong(dt);
        Program prog = new Program(channel.IdChannel, Utils.longtodate(iStart), Utils.longtodate(iProgEnd),
                                   GUILocalizeStrings.Get(736), "", "", Program.ProgramState.None, DateTime.MinValue,
                                   string.Empty,
                                   string.Empty, string.Empty, string.Empty, -1, string.Empty, -1);
        if (programs == null)
        {
          programs = new List<Program>();
        }
        programs.Add(prog);
      }

      int iProgram = 0;
      int iPreviousEndXPos = 0;

      int width = GetControl((int)Controls.LABEL_TIME1 + 1).XPosition;
      width -= GetControl((int)Controls.LABEL_TIME1).XPosition;

      int height = 0;
      GUIControl guiControl = GetControl((int)Controls.IMG_CHAN1 + 1);
      if (guiControl != null)
      {
        height = guiControl.YPosition;
        height -= GetControl((int)Controls.IMG_CHAN1).YPosition;
      }
      else
      {
        height = GetControl((int)Controls.IMG_CHAN1).Height;
      }

      foreach (Program program in programs)
      {
        if (Utils.datetolong(program.EndTime) <= iStart)
          continue;

        string strTitle = TVUtil.GetDisplayTitle(program);
        bool bStartsBefore = false;
        bool bEndsAfter = false;
        
        if (Utils.datetolong(program.StartTime) < iStart)
          bStartsBefore = true;

        if (Utils.datetolong(program.EndTime) > iEnd)
          bEndsAfter = true;

        DateTime dtBlokStart = new DateTime();
        dtBlokStart = _viewingTime;
        dtBlokStart = dtBlokStart.AddMilliseconds(-dtBlokStart.Millisecond);
        dtBlokStart = dtBlokStart.AddSeconds(-dtBlokStart.Second);

        bool bSeries = false;
        bool bRecording = false;
        bool bConflict = false;
        bool bPartialRecording = false;

        bConflict = program.HasConflict;
        bSeries = (program.IsRecordingSeries || program.IsRecordingSeriesPending);
        bRecording = bSeries || (program.IsRecording || program.IsRecordingOncePending || program.IsPartialRecordingSeriesPending);
        bPartialRecording = program.IsPartialRecordingSeriesPending;
        bool bManual = program.IsRecordingManual;

        if (noEPG && !bRecording)
        {
          bRecording = IsRecordingNoEPG(channel);
        }

        bool bProgramIsHD = program.Description.Contains(_hdtvProgramText);

        int iStartXPos = 0;
        int iEndXPos = 0;
        for (int iBlok = 0; iBlok < _numberOfBlocks; iBlok++)
        {
          float fWidthEnd = (float)width;
          DateTime dtBlokEnd = dtBlokStart.AddMinutes(_timePerBlock - 1);
          if (program.RunningAt(dtBlokStart, dtBlokEnd))
          {
            //dtBlokEnd = dtBlokStart.AddSeconds(_timePerBlock * 60);
            if (program.EndTime <= dtBlokEnd)
            {
              TimeSpan dtSpan = dtBlokEnd - program.EndTime;
              int iEndMin = _timePerBlock - (dtSpan.Minutes);

              fWidthEnd = (((float)iEndMin) / ((float)_timePerBlock)) * ((float)(width));
              if (bEndsAfter)
              {
                fWidthEnd = (float)width;
              }
            }

            if (iStartXPos == 0)
            {
              TimeSpan ts = program.StartTime - dtBlokStart;
              int iStartMin = ts.Hours * 60;
              iStartMin += ts.Minutes;
              if (ts.Seconds == 59)
              {
                iStartMin += 1;
              }
              float fWidth = (((float)iStartMin) / ((float)_timePerBlock)) * ((float)(width));

              if (bStartsBefore)
              {
                fWidth = 0;
              }

              iStartXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition;
              iStartXPos += (int)fWidth;
              iEndXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition + (int)fWidthEnd;
            }
            else
            {
              iEndXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition + (int)fWidthEnd;
            }
          }
          dtBlokStart = dtBlokStart.AddMinutes(_timePerBlock);
        }

        if (iStartXPos >= 0)
        {
          if (iPreviousEndXPos > iStartXPos)
          {
            iStartXPos = iPreviousEndXPos;
          }
          if (iEndXPos <= iStartXPos + 5)
          {
            iEndXPos = iStartXPos + 6; // at least 1 pixel width
          }

          int ypos = GetControl(iChannel + (int)Controls.IMG_CHAN1).YPosition;
          int iControlId = GUIDE_COMPONENTID_START + iChannel * RowID + iProgram * ColID;
          int iWidth = iEndXPos - iStartXPos;
          if (iWidth > 3)
          {
            iWidth -= 3;
          }
          else
          {
            iWidth = 1;
          }

          string TexutureFocusLeftName = "tvguide_button_selected_left.png";
          string TexutureFocusMidName = "tvguide_button_selected_middle.png";
          string TexutureFocusRightName = "tvguide_button_selected_right.png";
          string TexutureNoFocusLeftName = "tvguide_button_light_left.png";
          string TexutureNoFocusMidName = "tvguide_button_light_middle.png";
          string TexutureNoFocusRightName = "tvguide_button_light_right.png";

          bool TileFillTFL = false;
          bool TileFillTNFL = false;
          bool TileFillTFM = false;
          bool TileFillTNFM = false;
          bool TileFillTFR = false;
          bool TileFillTNFR = false;

          if (_programNotRunningTemplate != null)
          {
            _programNotRunningTemplate.IsVisible = false;

            TexutureFocusLeftName = _programNotRunningTemplate.TexutureFocusLeftName;
            TexutureFocusMidName = _programNotRunningTemplate.TexutureFocusMidName;
            TexutureFocusRightName = _programNotRunningTemplate.TexutureFocusRightName;
            TexutureNoFocusLeftName = _programNotRunningTemplate.TexutureNoFocusLeftName;
            TexutureNoFocusMidName = _programNotRunningTemplate.TexutureNoFocusMidName;
            TexutureNoFocusRightName = _programNotRunningTemplate.TexutureNoFocusRightName;

            TileFillTFL = _programNotRunningTemplate.TileFillTFL;
            TileFillTNFL = _programNotRunningTemplate.TileFillTNFL;
            TileFillTFM = _programNotRunningTemplate.TileFillTFM;
            TileFillTNFM = _programNotRunningTemplate.TileFillTNFM;
            TileFillTFR = _programNotRunningTemplate.TileFillTFR;
            TileFillTNFR = _programNotRunningTemplate.TileFillTNFR;
          }

          bool isNew = false;

          if (!_controls.TryGetValue((int)iControlId, out img))
          {
            img = new GUIButton3PartControl(GetID, iControlId, iStartXPos, ypos, iWidth, height - 2,
                                            TexutureFocusLeftName,
                                            TexutureFocusMidName,
                                            TexutureFocusRightName,
                                            TexutureNoFocusLeftName,
                                            TexutureNoFocusMidName,
                                            TexutureNoFocusRightName,
                                            String.Empty);

            isNew = true;
          }
          else
          {
            img.Focus = false;
            img.SetPosition(iStartXPos, ypos);
            img.Width = iWidth;
            img.IsVisible = true;
            img.DoUpdate();
          }

          img.RenderLeft = false;
          img.RenderRight = false;
          img.StretchIfNotRendered = true;

          img.TexutureIcon = String.Empty;
          if (program.Notify)
          {
            if (_programNotifyTemplate != null)
            {
              _programNotifyTemplate.IsVisible = false;

              TexutureFocusLeftName = _programNotifyTemplate.TexutureFocusLeftName;
              TexutureFocusMidName = _programNotifyTemplate.TexutureFocusMidName;
              TexutureFocusRightName = _programNotifyTemplate.TexutureFocusRightName;
              TexutureNoFocusLeftName = _programNotifyTemplate.TexutureNoFocusLeftName;
              TexutureNoFocusMidName = _programNotifyTemplate.TexutureNoFocusMidName;
              TexutureNoFocusRightName = _programNotifyTemplate.TexutureNoFocusRightName;
              
              TileFillTFL = _programNotifyTemplate.TileFillTFL;
              TileFillTNFL = _programNotifyTemplate.TileFillTNFL;
              TileFillTFM = _programNotifyTemplate.TileFillTFM;
              TileFillTNFM = _programNotifyTemplate.TileFillTNFM;
              TileFillTFR = _programNotifyTemplate.TileFillTFR;
              TileFillTNFR = _programNotifyTemplate.TileFillTNFR;

              // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
              img.TexutureIcon = Thumbs.TvNotifyIcon;
              img.IconOffsetX = _programNotifyTemplate.IconOffsetX;
              img.IconOffsetY = _programNotifyTemplate.IconOffsetY;
              img.IconAlign = _programNotifyTemplate.IconAlign;
              img.IconVAlign = _programNotifyTemplate.IconVAlign;
              img.IconInlineLabel1 = _programNotifyTemplate.IconInlineLabel1;
            }
            else
            {
              if (_useNewNotifyButtonColor)
              {
                TexutureFocusLeftName = "tvguide_notifyButton_Focus_left.png";
                TexutureFocusMidName = "tvguide_notifyButton_Focus_middle.png";
                TexutureFocusRightName = "tvguide_notifyButton_Focus_right.png";
                TexutureNoFocusLeftName = "tvguide_notifyButton_noFocus_left.png";
                TexutureNoFocusMidName = "tvguide_notifyButton_noFocus_middle.png";
                TexutureNoFocusRightName = "tvguide_notifyButton_noFocus_right.png";
              }
              else
              {
                img.TexutureIcon = Thumbs.TvNotifyIcon;
              }
            }
          }
          if (bRecording)
          {
            GUIButton3PartControl buttonRecordTemplate = _programRecordTemplate;

            // Select the partial recording template if needed.
            if (bPartialRecording)
            {
              buttonRecordTemplate = _programPartialRecordTemplate;
            }

            if (buttonRecordTemplate != null)
            {
              buttonRecordTemplate.IsVisible = false;

              TexutureFocusLeftName = buttonRecordTemplate.TexutureFocusLeftName;
              TexutureFocusMidName = buttonRecordTemplate.TexutureFocusMidName;
              TexutureFocusRightName = buttonRecordTemplate.TexutureFocusRightName;
              TexutureNoFocusLeftName = buttonRecordTemplate.TexutureNoFocusLeftName;
              TexutureNoFocusMidName = buttonRecordTemplate.TexutureNoFocusMidName;
              TexutureNoFocusRightName = buttonRecordTemplate.TexutureNoFocusRightName;
              
              TileFillTFL = buttonRecordTemplate.TileFillTFL;
              TileFillTNFL = buttonRecordTemplate.TileFillTNFL;
              TileFillTFM = buttonRecordTemplate.TileFillTFM;
              TileFillTNFM = buttonRecordTemplate.TileFillTNFM;
              TileFillTFR = buttonRecordTemplate.TileFillTFR;
              TileFillTNFR = buttonRecordTemplate.TileFillTNFR;

              // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
              if (bConflict)
              {
                img.TexutureIcon = Thumbs.TvConflictRecordingIcon;
              }
              else if (bSeries)
              {
                img.TexutureIcon = Thumbs.TvRecordingSeriesIcon;
              }
              else
              {
                img.TexutureIcon = Thumbs.TvRecordingIcon;
              }
              img.IconOffsetX = buttonRecordTemplate.IconOffsetX;
              img.IconOffsetY = buttonRecordTemplate.IconOffsetY;
              img.IconAlign = buttonRecordTemplate.IconAlign;
              img.IconVAlign = buttonRecordTemplate.IconVAlign;
              img.IconInlineLabel1 = buttonRecordTemplate.IconInlineLabel1;
            }
            else
            {
              if (bPartialRecording && _useNewPartialRecordingButtonColor)
              {
                TexutureFocusLeftName = "tvguide_partRecButton_Focus_left.png";
                TexutureFocusMidName = "tvguide_partRecButton_Focus_middle.png";
                TexutureFocusRightName = "tvguide_partRecButton_Focus_right.png";
                TexutureNoFocusLeftName = "tvguide_partRecButton_noFocus_left.png";
                TexutureNoFocusMidName = "tvguide_partRecButton_noFocus_middle.png";
                TexutureNoFocusRightName = "tvguide_partRecButton_noFocus_right.png";
              }
              else
              {
                if (_useNewRecordingButtonColor)
                {
                  TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
                  TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
                  TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
                  TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
                  TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
                  TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
                }
                else
                {
                  if (bConflict)
                  {
                    img.TexutureIcon = Thumbs.TvConflictRecordingIcon;
                  }
                  else if (bSeries)
                  {
                    img.TexutureIcon = Thumbs.TvRecordingSeriesIcon;
                  }
                  else
                  {
                    img.TexutureIcon = Thumbs.TvRecordingIcon;
                  }
                }
              }
            }
          }

          DateTime dt = DateTime.Now;

          img.TexutureIcon2 = String.Empty;
          if (bProgramIsHD)
          {
            if (program.IsRunningAt(dt) && _programRunningTemplate != null)
            {
              img.TexutureIcon2 = _programRunningTemplate.TexutureIcon2;
              img.Icon2Align = _programRunningTemplate.Icon2Align;
              img.Icon2VAlign = _programRunningTemplate.Icon2VAlign;
              img.Icon2OffsetX = _programRunningTemplate.Icon2OffsetX;
              img.Icon2OffsetY = _programRunningTemplate.Icon2OffsetY;
              img.Icon2InlineLabel1 = _programRunningTemplate.Icon2InlineLabel1;
            }
            else if (!program.IsRunningAt(dt) && _programNotRunningTemplate != null)
            {
              img.TexutureIcon2 = _programNotRunningTemplate.TexutureIcon2;
              img.Icon2Align = _programNotRunningTemplate.Icon2Align;
              img.Icon2VAlign = _programNotRunningTemplate.Icon2VAlign;
              img.Icon2OffsetX = _programNotRunningTemplate.Icon2OffsetX;
              img.Icon2OffsetY = _programNotRunningTemplate.Icon2OffsetY;
              img.Icon2InlineLabel1 = _programNotRunningTemplate.Icon2InlineLabel1;
            }
            else
            {
              if (_useHdProgramIcon)
              {
                img.TexutureIcon2 = "tvguide_hd_program.png";
                img.Icon2Align = GUIControl.Alignment.ALIGN_LEFT;
                img.Icon2VAlign = GUIControl.VAlignment.ALIGN_MIDDLE;
                img.Icon2OffsetX = 5;
                img.Icon2OffsetY = 0;
                img.Icon2InlineLabel1 = true;
              }
            }
          }
          img.Data = program.Clone();
          img.ColourDiffuse = GetColorForGenre(program.Genre);

          iWidth = iEndXPos - iStartXPos;
          if (iWidth > 10)
          {
            iWidth -= 10;
          }
          else
          {
            iWidth = 1;
          }

          img.TextOffsetX1 = 5;
          img.TextOffsetY1 = 5;
          img.FontName1 = "font13";
          img.TextColor1 = 0xffffffff;
          img.Label1 = strTitle;
          GUILabelControl labelTemplate;
          if (program.IsRunningAt(dt))
          {
            labelTemplate = _titleDarkTemplate;
          }
          else
          {
            labelTemplate = _titleTemplate;
          }

          if (labelTemplate != null)
          {
            img.FontName1 = labelTemplate.FontName;
            img.TextColor1 = labelTemplate.TextColor;
            img.TextColor2 = labelTemplate.TextColor;
            img.TextOffsetX1 = labelTemplate.XPosition;
            img.TextOffsetY1 = labelTemplate.YPosition;
            img.SetShadow1(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);

            // This is a legacy behavior check.  Adding labelTemplate.XPosition and labelTemplate.YPosition requires
            // skinners to add these values to the skin xml unless this check exists.  Perform a sanity check on the
            // x,y position to ensure it falls into the bounds of the button.  If it does not then fall back to use the
            // legacy values.  This check is necessary because the x,y position (without skin file changes) will be taken
            // from either the references.xml control template or the controls coded defaults.
            if (img.TextOffsetY1 > img.Height)
            {
              // Set legacy values.
              img.TextOffsetX1 = 5;
              img.TextOffsetY1 = 5;
            }
          }
          img.TextOffsetX2 = 5;
          img.TextOffsetY2 = img.Height / 2;
          img.FontName2 = "font13";
          img.TextColor2 = 0xffffffff;

          if (program.IsRunningAt(dt))
          {
            labelTemplate = _genreDarkTemplate;
          }
          else
          {
            labelTemplate = _genreTemplate;
          }
          if (labelTemplate != null)
          {
            img.FontName2 = labelTemplate.FontName;
            img.TextColor2 = labelTemplate.TextColor;
            img.Label2 = program.Genre;
            img.TextOffsetX2 = labelTemplate.XPosition;
            img.TextOffsetY2 = labelTemplate.YPosition;
            img.SetShadow2(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);

            // This is a legacy behavior check.  Adding labelTemplate.XPosition and labelTemplate.YPosition requires
            // skinners to add these values to the skin xml unless this check exists.  Perform a sanity check on the
            // x,y position to ensure it falls into the bounds of the button.  If it does not then fall back to use the
            // legacy values.  This check is necessary because the x,y position (without skin file changes) will be taken
            // from either the references.xml control template or the controls coded defaults.
            if (img.TextOffsetY2 > img.Height)
            {
              // Set legacy values.
              img.TextOffsetX2 = 5;
              img.TextOffsetY2 = 5;
            }
          }

          if (program.IsRunningAt(dt))
          {
            GUIButton3PartControl buttonRunningTemplate = _programRunningTemplate;
            if (!bRecording && !bPartialRecording && buttonRunningTemplate != null)
            {
              buttonRunningTemplate.IsVisible = false;
              TexutureFocusLeftName = buttonRunningTemplate.TexutureFocusLeftName;
              TexutureFocusMidName = buttonRunningTemplate.TexutureFocusMidName;
              TexutureFocusRightName = buttonRunningTemplate.TexutureFocusRightName;
              TexutureNoFocusLeftName = buttonRunningTemplate.TexutureNoFocusLeftName;
              TexutureNoFocusMidName = buttonRunningTemplate.TexutureNoFocusMidName;
              TexutureNoFocusRightName = buttonRunningTemplate.TexutureNoFocusRightName;
              TileFillTFL = buttonRunningTemplate.TileFillTFL;
              TileFillTNFL = buttonRunningTemplate.TileFillTNFL;
              TileFillTFM = buttonRunningTemplate.TileFillTFM;
              TileFillTNFM = buttonRunningTemplate.TileFillTNFM;
              TileFillTFR = buttonRunningTemplate.TileFillTFR;
              TileFillTNFR = buttonRunningTemplate.TileFillTNFR;
            }
            else if (bRecording && _useNewRecordingButtonColor)
            {
              TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
              TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
              TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
              TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
              TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
              TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
            }
            else if (!(bRecording && bPartialRecording && _useNewRecordingButtonColor))
            {
              TexutureFocusLeftName = "tvguide_button_selected_left.png";
              TexutureFocusMidName = "tvguide_button_selected_middle.png";
              TexutureFocusRightName = "tvguide_button_selected_right.png";
              TexutureNoFocusLeftName = "tvguide_button_left.png";
              TexutureNoFocusMidName = "tvguide_button_middle.png";
              TexutureNoFocusRightName = "tvguide_button_right.png";
            }
            if (selectCurrentShow && iChannel == _cursorX)
            {
              _cursorY = iProgram + 1;
              _currentProgram = program;
              m_dtStartTime = program.StartTime;
              SetProperties();
            }
          }

          if (bEndsAfter)
          {
            img.RenderRight = true;

            // If no template found then use default texture names.
            // Texture names already set if using template.
            if (_programNotRunningTemplate == null)
            {
              TexutureFocusRightName = "tvguide_arrow_selected_right.png";
              TexutureNoFocusRightName = "tvguide_arrow_light_right.png";
            }

            if (program.IsRunningAt(dt) && _programRunningTemplate == null)
            {
              TexutureNoFocusRightName = "tvguide_arrow_right.png";
            }
          }
          if (bStartsBefore)
          {
            img.RenderLeft = true;

            if (_programNotRunningTemplate == null)
            {
              TexutureFocusLeftName = "tvguide_arrow_selected_left.png";
              TexutureNoFocusLeftName = "tvguide_arrow_light_left.png";
            }

            if (program.IsRunningAt(dt) && _programRunningTemplate == null)
            {
              TexutureNoFocusLeftName = "tvguide_arrow_left.png";
            }
          }

          img.TexutureFocusLeftName = TexutureFocusLeftName;
          img.TexutureFocusMidName = TexutureFocusMidName;
          img.TexutureFocusRightName = TexutureFocusRightName;
          img.TexutureNoFocusLeftName = TexutureNoFocusLeftName;
          img.TexutureNoFocusMidName = TexutureNoFocusMidName;
          img.TexutureNoFocusRightName = TexutureNoFocusRightName;

          img.TileFillTFL = TileFillTFL;
          img.TileFillTNFL = TileFillTNFL;
          img.TileFillTFM = TileFillTFM;
          img.TileFillTNFM = TileFillTNFM;
          img.TileFillTFR = TileFillTFR;
          img.TileFillTNFR = TileFillTNFR;

          if (isNew)
          {
            img.AllocResources();
            GUIControl cntl = (GUIControl)img;
            _controls.Add((int)iControlId, img);
            Add(ref cntl);
          }
          else
            img.DoUpdate();
          iProgram++;
        }
        iPreviousEndXPos = iEndXPos;
      }
    }
예제 #3
0
        private void RenderChannel(int iChannel, GuideBaseChannel tvGuideChannel, long iStart, long iEnd, bool selectCurrentShow)
        {
            Channel channel = tvGuideChannel.channel;
            int channelNum = 0;

            if (!_byIndex)
            {
                if (channel.LogicalChannelNumber.HasValue)
                {
                    channelNum = channel.LogicalChannelNumber.Value;
                }
            }
            else
            {
                channelNum = _channelList.IndexOf(tvGuideChannel) + 1;
            }

            GUIButton3PartControl img = GetControl(iChannel + (int)Controls.IMG_CHAN1) as GUIButton3PartControl;
            if (img != null)
            {
                if (_showChannelLogos)
                {
                    img.TexutureIcon = tvGuideChannel.strLogo;
                }
                if (channelNum > 0 && _showChannelNumber)
                {
                    img.Label1 = channelNum + " " + channel.DisplayName;
                }
                else
                {
                    img.Label1 = channel.DisplayName;
                }
                img.Data = channel;
                img.IsVisible = true;
            }

            IList<GuideProgramSummary> programs = new List<GuideProgramSummary>();
            if (_model.ProgramsByChannel.ContainsKey(channel.ChannelId))
            {
                programs = _model.ProgramsByChannel[channel.ChannelId].Programs;
            }

            bool noEPG = (programs == null || programs.Count == 0);
            if (noEPG)
            {
                DateTime dt = Utils.longtodate(iEnd);
                long iProgEnd = Utils.datetolong(dt);
                GuideProgramSummary prog = new GuideProgramSummary()
                {
                    GuideChannelId = channel.GuideChannelId.HasValue ? channel.GuideChannelId.Value : Guid.Empty,
                    StartTime = Utils.longtodate(iStart),
                    StopTime = Utils.longtodate(iProgEnd),
                    Title = Utility.GetLocalizedText(TextId.NoDataAvailable),
                    SubTitle = String.Empty,
                    Category = String.Empty
                };
                programs = new List<GuideProgramSummary>();
                programs.Add(prog);
            }

            int iProgram = 0;
            int iPreviousEndXPos = 0;

            int width = GetControl((int)Controls.LABEL_TIME1 + 1).XPosition;
            width -= GetControl((int)Controls.LABEL_TIME1).XPosition;

            int height = GetControl((int)Controls.IMG_CHAN1 + 1).YPosition;
            height -= GetControl((int)Controls.IMG_CHAN1).YPosition;

            foreach (GuideProgramSummary program in programs)
            {
                if (Utils.datetolong(program.StopTime) <= iStart
                    || Utils.datetolong(program.StartTime) >= iEnd)
                    continue;

                string strTitle = program.Title;
                bool bStartsBefore = false;
                bool bEndsAfter = false;

                if (Utils.datetolong(program.StartTime) < iStart)
                    bStartsBefore = true;

                if (Utils.datetolong(program.StopTime) > iEnd)
                    bEndsAfter = true;

                DateTime dtBlokStart = new DateTime();
                dtBlokStart = _viewingTime;
                dtBlokStart = dtBlokStart.AddMilliseconds(-dtBlokStart.Millisecond);
                dtBlokStart = dtBlokStart.AddSeconds(-dtBlokStart.Second);

                bool isAlert;
                bool isRecording;
                string recordIconImage = GetChannelProgramIcon(channel, program.GuideProgramId, out isRecording,out isAlert);

                if (noEPG && !isRecording)
                {
                    ActiveRecording rec;
                    isRecording = PluginMain.IsChannelRecording(channel.ChannelId, out rec);
                }

                bool bProgramIsHD = (program.Flags & GuideProgramFlags.HighDefinition) != 0;

                int iStartXPos = 0;
                int iEndXPos = 0;
                for (int iBlok = 0; iBlok < _numberOfBlocks; iBlok++)
                {
                    float fWidthEnd = (float)width;
                    DateTime dtBlokEnd = dtBlokStart.AddMinutes(_timePerBlock - 1);
                    if (IsRunningAt(program, dtBlokStart, dtBlokEnd))
                    {
                        //dtBlokEnd = dtBlokStart.AddSeconds(_timePerBlock * 60);
                        if (program.StopTime <= dtBlokEnd)
                        {
                            TimeSpan dtSpan = dtBlokEnd - program.StopTime;
                            int iEndMin = _timePerBlock - (dtSpan.Minutes);

                            fWidthEnd = (((float)iEndMin) / ((float)_timePerBlock)) * ((float)(width));
                            if (bEndsAfter)
                            {
                                fWidthEnd = (float)width;
                            }
                        }

                        if (iStartXPos == 0)
                        {
                            TimeSpan ts = program.StartTime - dtBlokStart;
                            int iStartMin = ts.Hours * 60;
                            iStartMin += ts.Minutes;
                            if (ts.Seconds == 59)
                            {
                                iStartMin += 1;
                            }
                            float fWidth = (((float)iStartMin) / ((float)_timePerBlock)) * ((float)(width));

                            if (bStartsBefore)
                            {
                                fWidth = 0;
                            }

                            iStartXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition;
                            iStartXPos += (int)fWidth;
                            iEndXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition + (int)fWidthEnd;
                        }
                        else
                        {
                            iEndXPos = GetControl(iBlok + (int)Controls.LABEL_TIME1).XPosition + (int)fWidthEnd;
                        }
                    }
                    dtBlokStart = dtBlokStart.AddMinutes(_timePerBlock);
                }

                if (iStartXPos >= 0)
                {
                    if (iPreviousEndXPos > iStartXPos)
                    {
                        iStartXPos = iPreviousEndXPos;
                    }
                    if (iEndXPos <= iStartXPos + 5)
                    {
                        iEndXPos = iStartXPos + 6; // at least 1 pixel width
                    }

                    int ypos = GetControl(iChannel + (int)Controls.IMG_CHAN1).YPosition;
                    int iControlId = GUIDE_COMPONENTID_START + iChannel * RowID + iProgram * ColID;
                    int iWidth = iEndXPos - iStartXPos;
                    if (iWidth > 3)
                    {
                        iWidth -= 3;
                    }
                    else
                    {
                        iWidth = 1;
                    }

                    string TexutureFocusLeftName = "tvguide_button_selected_left.png";
                    string TexutureFocusMidName = "tvguide_button_selected_middle.png";
                    string TexutureFocusRightName = "tvguide_button_selected_right.png";
                    string TexutureNoFocusLeftName = "tvguide_button_light_left.png";
                    string TexutureNoFocusMidName = "tvguide_button_light_middle.png";
                    string TexutureNoFocusRightName = "tvguide_button_light_right.png";

                    bool TileFillTFL = false;
                    bool TileFillTNFL = false;
                    bool TileFillTFM = false;
                    bool TileFillTNFM = false;
                    bool TileFillTFR = false;
                    bool TileFillTNFR = false;

                    if (_programNotRunningTemplate != null)
                    {
                        _programNotRunningTemplate.IsVisible = false;
                        TexutureFocusLeftName = _programNotRunningTemplate.TexutureFocusLeftName;
                        TexutureFocusMidName = _programNotRunningTemplate.TexutureFocusMidName;
                        TexutureFocusRightName = _programNotRunningTemplate.TexutureFocusRightName;
                        TexutureNoFocusLeftName = _programNotRunningTemplate.TexutureNoFocusLeftName;
                        TexutureNoFocusMidName = _programNotRunningTemplate.TexutureNoFocusMidName;
                        TexutureNoFocusRightName = _programNotRunningTemplate.TexutureNoFocusRightName;
                        TileFillTFL = _programNotRunningTemplate.TileFillTFL;
                        TileFillTNFL = _programNotRunningTemplate.TileFillTNFL;
                        TileFillTFM = _programNotRunningTemplate.TileFillTFM;
                        TileFillTNFM = _programNotRunningTemplate.TileFillTNFM;
                        TileFillTFR = _programNotRunningTemplate.TileFillTFR;
                        TileFillTNFR = _programNotRunningTemplate.TileFillTNFR;
                    }

                    img = GetControl(iControlId) as GUIButton3PartControl;
                    if (img == null)
                    {
                        img = new GUIButton3PartControl(GetID, iControlId, iStartXPos, ypos, iWidth, height - 2,
                                                        TexutureFocusLeftName,
                                                        TexutureFocusMidName,
                                                        TexutureFocusRightName,
                                                        TexutureNoFocusLeftName,
                                                        TexutureNoFocusMidName,
                                                        TexutureNoFocusRightName,
                                                        String.Empty);
                        img.AllocResources();
                        GUIControl cntl = (GUIControl)img;
                        Add(ref cntl);
                    }
                    else
                    {
                        img.Focus = false;
                        img.SetPosition(iStartXPos, ypos);
                        img.Width = iWidth;
                        img.IsVisible = true;
                        img.DoUpdate();
                    }

                    img.RenderLeft = false;
                    img.RenderRight = false;

                    img.TexutureIcon = String.Empty;
                    if (recordIconImage != null && isAlert)
                    {
                        if (_programNotifyTemplate != null)
                        {
                            _programNotifyTemplate.IsVisible = false;
                            TexutureFocusLeftName = _programNotifyTemplate.TexutureFocusLeftName;
                            TexutureFocusMidName = _programNotifyTemplate.TexutureFocusMidName;
                            TexutureFocusRightName = _programNotifyTemplate.TexutureFocusRightName;
                            TexutureNoFocusLeftName = _programNotifyTemplate.TexutureNoFocusLeftName;
                            TexutureNoFocusMidName = _programNotifyTemplate.TexutureNoFocusMidName;
                            TexutureNoFocusRightName = _programNotifyTemplate.TexutureNoFocusRightName;
                            TileFillTFL = _programNotifyTemplate.TileFillTFL;
                            TileFillTNFL = _programNotifyTemplate.TileFillTNFL;
                            TileFillTFM = _programNotifyTemplate.TileFillTFM;
                            TileFillTNFM = _programNotifyTemplate.TileFillTNFM;
                            TileFillTFR = _programNotifyTemplate.TileFillTFR;
                            TileFillTNFR = _programNotifyTemplate.TileFillTNFR;

                            // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
                            img.TexutureIcon = Thumbs.TvNotifyIcon;
                            img.IconOffsetX = _programNotifyTemplate.IconOffsetX;
                            img.IconOffsetY = _programNotifyTemplate.IconOffsetY;
                            img.IconAlign = _programNotifyTemplate.IconAlign;
                            img.IconVAlign = _programNotifyTemplate.IconVAlign;
                            img.IconInlineLabel1 = _programNotifyTemplate.IconInlineLabel1;
                        }
                        else
                        {
                            if (_useNewNotifyButtonColor)
                            {
                                TexutureFocusLeftName = "tvguide_notifyButton_Focus_left.png";
                                TexutureFocusMidName = "tvguide_notifyButton_Focus_middle.png";
                                TexutureFocusRightName = "tvguide_notifyButton_Focus_right.png";
                                TexutureNoFocusLeftName = "tvguide_notifyButton_noFocus_left.png";
                                TexutureNoFocusMidName = "tvguide_notifyButton_noFocus_middle.png";
                                TexutureNoFocusRightName = "tvguide_notifyButton_noFocus_right.png";
                            }
                            else
                            {
                                img.TexutureIcon = Thumbs.TvNotifyIcon;
                            }
                        }
                    }
                    if (recordIconImage != null)
                    {
                        // Select the partial recording template if needed.
                        //if (bPartialRecording)
                        //{
                        //    buttonRecordTemplate = _programPartialRecordTemplate;
                        //}

                        if (isRecording)
                        {
                            GUIButton3PartControl buttonRecordTemplate = _programRecordTemplate;
                            if (buttonRecordTemplate != null)
                            {
                                buttonRecordTemplate.IsVisible = false;
                                TexutureFocusLeftName = buttonRecordTemplate.TexutureFocusLeftName;
                                TexutureFocusMidName = buttonRecordTemplate.TexutureFocusMidName;
                                TexutureFocusRightName = buttonRecordTemplate.TexutureFocusRightName;
                                TexutureNoFocusLeftName = buttonRecordTemplate.TexutureNoFocusLeftName;
                                TexutureNoFocusMidName = buttonRecordTemplate.TexutureNoFocusMidName;
                                TexutureNoFocusRightName = buttonRecordTemplate.TexutureNoFocusRightName;
                                TileFillTFL = buttonRecordTemplate.TileFillTFL;
                                TileFillTNFL = buttonRecordTemplate.TileFillTNFL;
                                TileFillTFM = buttonRecordTemplate.TileFillTFM;
                                TileFillTNFM = buttonRecordTemplate.TileFillTNFM;
                                TileFillTFR = buttonRecordTemplate.TileFillTFR;
                                TileFillTNFR = buttonRecordTemplate.TileFillTNFR;

                                // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
                                //if (bConflict)
                                //{
                                //    TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
                                //    TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
                                //    TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
                                //    TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
                                //    TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
                                //    TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
                                //}
                                img.IconOffsetX = buttonRecordTemplate.IconOffsetX;
                                img.IconOffsetY = buttonRecordTemplate.IconOffsetY;
                                img.IconAlign = buttonRecordTemplate.IconAlign;
                                img.IconVAlign = buttonRecordTemplate.IconVAlign;
                                img.IconInlineLabel1 = buttonRecordTemplate.IconInlineLabel1;
                            }
                            else
                            {
                                //if (bPartialRecording && _useNewPartialRecordingButtonColor)
                                //{
                                //    TexutureFocusLeftName = "tvguide_partRecButton_Focus_left.png";
                                //    TexutureFocusMidName = "tvguide_partRecButton_Focus_middle.png";
                                //    TexutureFocusRightName = "tvguide_partRecButton_Focus_right.png";
                                //    TexutureNoFocusLeftName = "tvguide_partRecButton_noFocus_left.png";
                                //    TexutureNoFocusMidName = "tvguide_partRecButton_noFocus_middle.png";
                                //    TexutureNoFocusRightName = "tvguide_partRecButton_noFocus_right.png";
                                //}
                                //else
                                {
                                    if (_useNewRecordingButtonColor)
                                    {
                                        TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
                                        TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
                                        TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
                                        TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
                                        TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
                                        TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
                                    }
                                }
                            }
                        }
                        img.TexutureIcon = recordIconImage;
                    }

                    img.TexutureIcon2 = String.Empty;
                    if (bProgramIsHD)
                    {
                        if (_programNotRunningTemplate != null)
                        {
                            img.TexutureIcon2 = _programNotRunningTemplate.TexutureIcon2;
                        }
                        else
                        {
                            if (_useHdProgramIcon)
                            {
                                img.TexutureIcon2 = "tvguide_hd_program.png";
                            }
                        }
                        img.Icon2InlineLabel1 = true;
                        img.Icon2VAlign = GUIControl.VAlignment.ALIGN_MIDDLE;
                        img.Icon2OffsetX = 5;
                    }
                    img.Data = program;
                    img.ColourDiffuse = GetColorForGenre(program.Category);

                    iWidth = iEndXPos - iStartXPos;
                    if (iWidth > 10)
                    {
                        iWidth -= 10;
                    }
                    else
                    {
                        iWidth = 1;
                    }

                    DateTime dt = DateTime.Now;

                    img.TextOffsetX1 = 5;
                    img.TextOffsetY1 = 5;
                    img.FontName1 = "font13";
                    img.TextColor1 = 0xffffffff;
                    img.Label1 = strTitle;
                    GUILabelControl labelTemplate;
                    if (IsRunningAt(program, dt))
                    {
                        labelTemplate = _titleDarkTemplate;
                    }
                    else
                    {
                        labelTemplate = _titleTemplate;
                    }

                    if (labelTemplate != null)
                    {
                        img.FontName1 = labelTemplate.FontName;
                        img.TextColor1 = labelTemplate.TextColor;
                        img.TextColor2 = labelTemplate.TextColor;
                        img.TextOffsetX1 = labelTemplate.XPosition;
                        img.TextOffsetY1 = labelTemplate.YPosition;
                        img.SetShadow1(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);

                        // This is a legacy behavior check.  Adding labelTemplate.XPosition and labelTemplate.YPosition requires
                        // skinners to add these values to the skin xml unless this check exists.  Perform a sanity check on the
                        // x,y position to ensure it falls into the bounds of the button.  If it does not then fall back to use the
                        // legacy values.  This check is necessary because the x,y position (without skin file changes) will be taken
                        // from either the references.xml control template or the controls coded defaults.
                        if (img.TextOffsetY1 > img.Height)
                        {
                            // Set legacy values.
                            img.TextOffsetX1 = 5;
                            img.TextOffsetY1 = 5;
                        }
                    }
                    img.TextOffsetX2 = 5;
                    img.TextOffsetY2 = img.Height / 2;
                    img.FontName2 = "font13";
                    img.TextColor2 = 0xffffffff;

                    if (IsRunningAt(program, dt))
                    {
                        labelTemplate = _genreDarkTemplate;
                    }
                    else
                    {
                        labelTemplate = _genreTemplate;
                    }
                    if (labelTemplate != null)
                    {
                        img.FontName2 = labelTemplate.FontName;
                        img.TextColor2 = labelTemplate.TextColor;
                        img.Label2 = program.Category;
                        img.TextOffsetX2 = labelTemplate.XPosition;
                        img.TextOffsetY2 = labelTemplate.YPosition;
                        img.SetShadow2(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);

                        // This is a legacy behavior check.  Adding labelTemplate.XPosition and labelTemplate.YPosition requires
                        // skinners to add these values to the skin xml unless this check exists.  Perform a sanity check on the
                        // x,y position to ensure it falls into the bounds of the button.  If it does not then fall back to use the
                        // legacy values.  This check is necessary because the x,y position (without skin file changes) will be taken
                        // from either the references.xml control template or the controls coded defaults.
                        if (img.TextOffsetY2 > img.Height)
                        {
                            // Set legacy values.
                            img.TextOffsetX2 = 5;
                            img.TextOffsetY2 = 5;
                        }
                    }

                    if (IsRunningAt(program, dt))
                    {
                        GUIButton3PartControl buttonRunningTemplate = _programRunningTemplate;
                        if (!isRecording && !isAlert && buttonRunningTemplate != null)
                        {
                            buttonRunningTemplate.IsVisible = false;
                            TexutureFocusLeftName = buttonRunningTemplate.TexutureFocusLeftName;
                            TexutureFocusMidName = buttonRunningTemplate.TexutureFocusMidName;
                            TexutureFocusRightName = buttonRunningTemplate.TexutureFocusRightName;
                            TexutureNoFocusLeftName = buttonRunningTemplate.TexutureNoFocusLeftName;
                            TexutureNoFocusMidName = buttonRunningTemplate.TexutureNoFocusMidName;
                            TexutureNoFocusRightName = buttonRunningTemplate.TexutureNoFocusRightName;
                            TileFillTFL = buttonRunningTemplate.TileFillTFL;
                            TileFillTNFL = buttonRunningTemplate.TileFillTNFL;
                            TileFillTFM = buttonRunningTemplate.TileFillTFM;
                            TileFillTNFM = buttonRunningTemplate.TileFillTNFM;
                            TileFillTFR = buttonRunningTemplate.TileFillTFR;
                            TileFillTNFR = buttonRunningTemplate.TileFillTNFR;
                        }
                        else if (isRecording && _useNewRecordingButtonColor)
                        {
                            TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
                            TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
                            TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
                            TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
                            TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
                            TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
                        }
                        else if (isAlert && _useNewRecordingButtonColor)
                        {
                            TexutureFocusLeftName = "tvguide_notifyButton_Focus_left.png";
                            TexutureFocusMidName = "tvguide_notifyButton_Focus_middle.png";
                            TexutureFocusRightName = "tvguide_notifyButton_Focus_right.png";
                            TexutureNoFocusLeftName = "tvguide_notifyButton_noFocus_left.png";
                            TexutureNoFocusMidName = "tvguide_notifyButton_noFocus_middle.png";
                            TexutureNoFocusRightName = "tvguide_notifyButton_noFocus_right.png";
                        }
                        else
                        {
                            TexutureFocusLeftName = "tvguide_button_selected_left.png";
                            TexutureFocusMidName = "tvguide_button_selected_middle.png";
                            TexutureFocusRightName = "tvguide_button_selected_right.png";
                            TexutureNoFocusLeftName = "tvguide_button_left.png";
                            TexutureNoFocusMidName = "tvguide_button_middle.png";
                            TexutureNoFocusRightName = "tvguide_button_right.png";
                        }

                        if (selectCurrentShow && iChannel == _cursorX)
                        {
                            _cursorY = iProgram + 1;
                            _currentProgram = Proxies.GuideService.GetProgramById(program.GuideProgramId).Result;
                            m_dtStartTime = program.StartTime;
                            SetProperties();
                        }
                    }

                    if (bEndsAfter)
                    {
                        img.RenderRight = true;

                        TexutureFocusRightName = "tvguide_arrow_selected_right.png";
                        TexutureNoFocusRightName = "tvguide_arrow_light_right.png";
                        if (IsRunningAt(program, dt))
                        {
                            TexutureNoFocusRightName = "tvguide_arrow_right.png";
                        }
                    }
                    if (bStartsBefore)
                    {
                        img.RenderLeft = true;
                        TexutureFocusLeftName = "tvguide_arrow_selected_left.png";
                        TexutureNoFocusLeftName = "tvguide_arrow_light_left.png";
                        if (IsRunningAt(program, dt))
                        {
                            TexutureNoFocusLeftName = "tvguide_arrow_left.png";
                        }
                    }

                    img.TexutureFocusLeftName = TexutureFocusLeftName;
                    img.TexutureFocusMidName = TexutureFocusMidName;
                    img.TexutureFocusRightName = TexutureFocusRightName;
                    img.TexutureNoFocusLeftName = TexutureNoFocusLeftName;
                    img.TexutureNoFocusMidName = TexutureNoFocusMidName;
                    img.TexutureNoFocusRightName = TexutureNoFocusRightName;

                    img.TileFillTFL = TileFillTFL;
                    img.TileFillTNFL = TileFillTNFL;
                    img.TileFillTFM = TileFillTFM;
                    img.TileFillTNFM = TileFillTNFM;
                    img.TileFillTFR = TileFillTFR;
                    img.TileFillTNFR = TileFillTNFR;

                    iProgram++;
                }
                iPreviousEndXPos = iEndXPos;
            }
        }
예제 #4
0
    //void SetProperties()

    protected override void RenderSingleChannel(Channel channel)
    {
      string strLogo;
      int chan = ChannelOffset;
      for (int iChannel = 0; iChannel < _channelCount; iChannel++)
      {
        if (chan < _channelList.Count)
        {
          Channel tvChan = _channelList[chan].channel;

          strLogo = GetChannelLogo(tvChan.DisplayName);
          GUIButton3PartControl img = GetControl(iChannel + (int)Controls.IMG_CHAN1) as GUIButton3PartControl;
          if (img != null)
          {
            if (_showChannelLogos)
            {
              img.TexutureIcon = strLogo;
            }
            img.Label1 = tvChan.DisplayName;
            img.Data = tvChan;
            img.IsVisible = true;
          }
        }
        chan++;
      }

      GUILabelControl channelLabel = GetControl((int)Controls.SINGLE_CHANNEL_LABEL) as GUILabelControl;
      GUIImage channelImage = GetControl((int)Controls.SINGLE_CHANNEL_IMAGE) as GUIImage;

      strLogo = GetChannelLogo(channel.DisplayName);
      if (channelImage == null)
      {
        if (strLogo.Length > 0)
        {
          channelImage = new GUIImage(GetID, (int)Controls.SINGLE_CHANNEL_IMAGE,
                                      GetControl((int)Controls.LABEL_TIME1).XPosition,
                                      GetControl((int)Controls.LABEL_TIME1).YPosition - 15,
                                      40, 40, strLogo, Color.White);
          channelImage.AllocResources();
          GUIControl temp = (GUIControl)channelImage;
          Add(ref temp);
        }
      }
      else
      {
        channelImage.SetFileName(strLogo);
      }

      if (channelLabel == null)
      {
        channelLabel = new GUILabelControl(GetID, (int)Controls.SINGLE_CHANNEL_LABEL,
                                           channelImage.XPosition + 44,
                                           channelImage.YPosition + 10,
                                           300, 40, "font16", channel.DisplayName, 4294967295, GUIControl.Alignment.Left,
                                           GUIControl.VAlignment.Top,
                                           true, 0, 0, 0xFF000000);
        channelLabel.AllocResources();
        GUIControl temp = channelLabel;
        Add(ref temp);
      }

      setSingleChannelLabelVisibility(true);

      channelLabel.Label = channel.DisplayName;
      if (strLogo.Length > 0)
      {
        channelImage.SetFileName(strLogo);
      }

      if (channelLabel != null)
      {
        channelLabel.Label = channel.DisplayName;
      }
      if (_recalculateProgramOffset)
      {
        _programs = new List<Program>();

        DateTime dtStart = DateTime.Now;
        dtStart = dtStart.AddDays(-1);

        DateTime dtEnd = dtStart.AddDays(30);

        TvBusinessLayer layer = new TvBusinessLayer();
        _programs = layer.GetPrograms(channel, dtStart, dtEnd);

        _totalProgramCount = _programs.Count;
        if (_totalProgramCount == 0)
        {
          _totalProgramCount = _channelCount;
        }

        _recalculateProgramOffset = false;
        bool found = false;
        for (int i = 0; i < _programs.Count; i++)
        {
          Program program = (Program)_programs[i];
          if (program.StartTime <= _viewingTime && program.EndTime >= _viewingTime)
          {
            _programOffset = i;
            found = true;
            break;
          }
        }
        if (!found)
        {
          _programOffset = 0;
        }
      }
      else if (_programOffset < _programs.Count)
      {
        int day = ((Program)_programs[_programOffset]).StartTime.DayOfYear;
        bool changed = false;
        while (day > _viewingTime.DayOfYear)
        {
          _viewingTime = _viewingTime.AddDays(1.0);
          changed = true;
        }
        while (day < _viewingTime.DayOfYear)
        {
          _viewingTime = _viewingTime.AddDays(-1.0);
          changed = true;
        }
        if (changed)
        {
          GUISpinControl cntlDay = GetControl((int)Controls.SPINCONTROL_DAY) as GUISpinControl;

          // Find first day in TVGuide and set spincontrol position
          int iDay = CalcDays();
          for (; iDay < 0; ++iDay)
          {
            _viewingTime = _viewingTime.AddDays(1.0);
          }
          for (; iDay >= MaxDaysInGuide; --iDay)
          {
            _viewingTime = _viewingTime.AddDays(-1.0);
          }
          cntlDay.Value = iDay;
        }
      }
      // ichan = number of rows
      for (int ichan = 0; ichan < _channelCount; ++ichan)
      {
        GUIButton3PartControl imgCh = GetControl(ichan + (int)Controls.IMG_CHAN1) as GUIButton3PartControl;
        imgCh.TexutureIcon = "";

        int iStartXPos = GetControl(0 + (int)Controls.LABEL_TIME1).XPosition;
        int height = GetControl((int)Controls.IMG_CHAN1 + 1).YPosition;
        height -= GetControl((int)Controls.IMG_CHAN1).YPosition;
        int width = GetControl((int)Controls.LABEL_TIME1 + 1).XPosition;
        width -= GetControl((int)Controls.LABEL_TIME1).XPosition;

        int iTotalWidth = width * _numberOfBlocks;

        Program program;
        int offset = _programOffset;
        if (offset + ichan < _programs.Count)
        {
          program = (Program)_programs[offset + ichan];
        }
        else
        {
          // bugfix for 0 items
          if (_programs.Count == 0)
          {
            program = new Program(channel.IdChannel, _viewingTime, _viewingTime, "-", string.Empty, string.Empty,
                                  Program.ProgramState.None,
                                  DateTime.MinValue, string.Empty, string.Empty, string.Empty, string.Empty, -1,
                                  string.Empty, -1);
          }
          else
          {
            program = (Program)_programs[_programs.Count - 1];
            if (program.EndTime.DayOfYear == _viewingTime.DayOfYear)
            {
              program = new Program(channel.IdChannel, program.EndTime, program.EndTime, "-", "-", "-",
                                    Program.ProgramState.None,
                                    DateTime.MinValue, string.Empty, string.Empty, string.Empty, string.Empty, -1,
                                    string.Empty, -1);
            }
            else
            {
              program = new Program(channel.IdChannel, _viewingTime, _viewingTime, "-", "-", "-",
                                    Program.ProgramState.None,
                                    DateTime.MinValue, string.Empty, string.Empty, string.Empty, string.Empty, -1,
                                    string.Empty, -1);
            }
          }
        }

        int ypos = GetControl(ichan + (int)Controls.IMG_CHAN1).YPosition;
        int iControlId = GUIDE_COMPONENTID_START + ichan * RowID + 0 * ColID;
        GUIButton3PartControl img = GetControl(iControlId) as GUIButton3PartControl;
        GUIButton3PartControl buttonTemplate = GetControl((int)Controls.BUTTON_PROGRAM_NOT_RUNNING) as GUIButton3PartControl;

        if (img == null)
        {
          if (buttonTemplate != null)
          {
            buttonTemplate.IsVisible = false;
            img = new GUIButton3PartControl(GetID, iControlId, iStartXPos, ypos, iTotalWidth, height - 2,
                                            buttonTemplate.TexutureFocusLeftName,
                                            buttonTemplate.TexutureFocusMidName,
                                            buttonTemplate.TexutureFocusRightName,
                                            buttonTemplate.TexutureNoFocusLeftName,
                                            buttonTemplate.TexutureNoFocusMidName,
                                            buttonTemplate.TexutureNoFocusRightName,
                                            String.Empty);

            img.TileFillTFL = buttonTemplate.TileFillTFL;
            img.TileFillTNFL = buttonTemplate.TileFillTNFL;
            img.TileFillTFM = buttonTemplate.TileFillTFM;
            img.TileFillTNFM = buttonTemplate.TileFillTNFM;
            img.TileFillTFR = buttonTemplate.TileFillTFR;
            img.TileFillTNFR = buttonTemplate.TileFillTNFR;
          }
          else
          {
            img = new GUIButton3PartControl(GetID, iControlId, iStartXPos, ypos, iTotalWidth, height - 2,
                                            "tvguide_button_selected_left.png",
                                            "tvguide_button_selected_middle.png",
                                            "tvguide_button_selected_right.png",
                                            "tvguide_button_light_left.png",
                                            "tvguide_button_light_middle.png",
                                            "tvguide_button_light_right.png",
                                            String.Empty);
          }
          img.AllocResources();
          img.ColourDiffuse = GetColorForGenre(program.Genre);
          GUIControl cntl = (GUIControl)img;
          Add(ref cntl);
        }
        else
        {
          if (buttonTemplate != null)
          {
            buttonTemplate.IsVisible = false;

            img.TexutureFocusLeftName = buttonTemplate.TexutureFocusLeftName;
            img.TexutureFocusMidName = buttonTemplate.TexutureFocusMidName;
            img.TexutureFocusRightName = buttonTemplate.TexutureFocusRightName;
            img.TexutureNoFocusLeftName = buttonTemplate.TexutureNoFocusLeftName;
            img.TexutureNoFocusMidName = buttonTemplate.TexutureNoFocusMidName;
            img.TexutureNoFocusRightName = buttonTemplate.TexutureNoFocusRightName;
            
            img.TileFillTFL = buttonTemplate.TileFillTFL;
            img.TileFillTNFL = buttonTemplate.TileFillTNFL;
            img.TileFillTFM = buttonTemplate.TileFillTFM;
            img.TileFillTNFM = buttonTemplate.TileFillTNFM;
            img.TileFillTFR = buttonTemplate.TileFillTFR;
            img.TileFillTNFR = buttonTemplate.TileFillTNFR;
          }
          else
          {
            img.TexutureFocusLeftName = "tvguide_button_selected_left.png";
            img.TexutureFocusMidName = "tvguide_button_selected_middle.png";
            img.TexutureFocusRightName = "tvguide_button_selected_right.png";
            img.TexutureNoFocusLeftName = "tvguide_button_light_left.png";
            img.TexutureNoFocusMidName = "tvguide_button_light_middle.png";
            img.TexutureNoFocusRightName = "tvguide_button_light_right.png";
          }
          img.Focus = false;
          img.SetPosition(iStartXPos, ypos);
          img.Width = iTotalWidth;
          img.ColourDiffuse = GetColorForGenre(program.Genre);
          img.IsVisible = true;
          img.DoUpdate();
        }
        img.RenderLeft = false;
        img.RenderRight = false;
        img.StretchIfNotRendered = true;

        bool bSeries = (program.IsRecordingSeries || program.IsRecordingSeriesPending || program.IsPartialRecordingSeriesPending);
        bool bConflict = program.HasConflict;
        bool bRecording = bSeries || (program.IsRecording || program.IsRecordingOncePending);

        img.Data = program;
        img.ColourDiffuse = GetColorForGenre(program.Genre);
        height = height - 10;
        height /= 2;
        int iWidth = iTotalWidth;
        if (iWidth > 10)
        {
          iWidth -= 10;
        }
        else
        {
          iWidth = 1;
        }

        DateTime dt = DateTime.Now;

        img.TextOffsetX1 = 5;
        img.TextOffsetY1 = 5;
        img.FontName1 = "font13";
        img.TextColor1 = 0xffffffff;

        img.Label1 = TVUtil.GetDisplayTitle(program);

        string strTimeSingle = String.Format("{0}",
                                             program.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat));

        if (program.StartTime.DayOfYear != _viewingTime.DayOfYear)
        {
          img.Label1 = String.Format("{0} {1}", Utils.GetShortDayString(program.StartTime),
                                     TVUtil.GetDisplayTitle(program));
        }

        GUILabelControl labelTemplate;
        if (program.IsRunningAt(dt))
        {
          labelTemplate = _titleDarkTemplate;
        }
        else
        {
          labelTemplate = _titleTemplate;
        }

        if (labelTemplate != null)
        {
          img.FontName1 = labelTemplate.FontName;
          img.TextColor1 = labelTemplate.TextColor;
          img.TextOffsetX1 = labelTemplate.XPosition;
          img.TextOffsetY1 = labelTemplate.YPosition;
          img.SetShadow1(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);
        }
        img.TextOffsetX2 = 5;
        img.TextOffsetY2 = img.Height / 2;
        img.FontName2 = "font13";
        img.TextColor2 = 0xffffffff;
        img.Label2 = "";
        if (program.IsRunningAt(dt))
        {
          img.TextColor2 = 0xff101010;
          labelTemplate = _genreDarkTemplate;
        }
        else
        {
          labelTemplate = _genreTemplate;
        }

        if (labelTemplate != null)
        {
          img.FontName2 = labelTemplate.FontName;
          img.TextColor2 = labelTemplate.TextColor;
          img.Label2 = program.Genre;
          img.TextOffsetX2 = labelTemplate.XPosition;
          img.TextOffsetY2 = labelTemplate.YPosition;
          img.SetShadow2(labelTemplate.ShadowAngle, labelTemplate.ShadowDistance, labelTemplate.ShadowColor);
        }
        imgCh.Label1 = strTimeSingle;
        imgCh.TexutureIcon = "";

        if (program.IsRunningAt(dt))
        {
          GUIButton3PartControl buttonRunningTemplate = _programRunningTemplate;
          if (buttonRunningTemplate != null)
          {
            buttonRunningTemplate.IsVisible = false;
            img.TexutureFocusLeftName = buttonRunningTemplate.TexutureFocusLeftName;
            img.TexutureFocusMidName = buttonRunningTemplate.TexutureFocusMidName;
            img.TexutureFocusRightName = buttonRunningTemplate.TexutureFocusRightName;
            img.TexutureNoFocusLeftName = buttonRunningTemplate.TexutureNoFocusLeftName;
            img.TexutureNoFocusMidName = buttonRunningTemplate.TexutureNoFocusMidName;
            img.TexutureNoFocusRightName = buttonRunningTemplate.TexutureNoFocusRightName;
            img.TileFillTFL = buttonRunningTemplate.TileFillTFL;
            img.TileFillTNFL = buttonRunningTemplate.TileFillTNFL;
            img.TileFillTFM = buttonRunningTemplate.TileFillTFM;
            img.TileFillTNFM = buttonRunningTemplate.TileFillTNFM;
            img.TileFillTFR = buttonRunningTemplate.TileFillTFR;
            img.TileFillTNFR = buttonRunningTemplate.TileFillTNFR;
          }
          else
          {
            img.TexutureFocusLeftName = "tvguide_button_selected_left.png";
            img.TexutureFocusMidName = "tvguide_button_selected_middle.png";
            img.TexutureFocusRightName = "tvguide_button_selected_right.png";
            img.TexutureNoFocusLeftName = "tvguide_button_left.png";
            img.TexutureNoFocusMidName = "tvguide_button_middle.png";
            img.TexutureNoFocusRightName = "tvguide_button_right.png";
          }
        }

        img.SetPosition(img.XPosition, img.YPosition);

        img.TexutureIcon = String.Empty;
        if (program.Notify)
        {
          GUIButton3PartControl buttonNotifyTemplate = GetControl((int)Controls.BUTTON_PROGRAM_NOTIFY) as GUIButton3PartControl;
          if (buttonNotifyTemplate != null)
          {
            buttonNotifyTemplate.IsVisible = false;

            img.TexutureFocusLeftName = buttonNotifyTemplate.TexutureFocusLeftName;
            img.TexutureFocusMidName = buttonNotifyTemplate.TexutureFocusMidName;
            img.TexutureFocusRightName = buttonNotifyTemplate.TexutureFocusRightName;
            img.TexutureNoFocusLeftName = buttonNotifyTemplate.TexutureNoFocusLeftName;
            img.TexutureNoFocusMidName = buttonNotifyTemplate.TexutureNoFocusMidName;
            img.TexutureNoFocusRightName = buttonNotifyTemplate.TexutureNoFocusRightName;

            img.TileFillTFL = buttonNotifyTemplate.TileFillTFL;
            img.TileFillTNFL = buttonNotifyTemplate.TileFillTNFL;
            img.TileFillTFM = buttonNotifyTemplate.TileFillTFM;
            img.TileFillTNFM = buttonNotifyTemplate.TileFillTNFM;
            img.TileFillTFR = buttonNotifyTemplate.TileFillTFR;
            img.TileFillTNFR = buttonNotifyTemplate.TileFillTNFR;

            // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
            img.TexutureIcon = Thumbs.TvNotifyIcon;
            img.IconOffsetX = buttonNotifyTemplate.IconOffsetX;
            img.IconOffsetY = buttonNotifyTemplate.IconOffsetY;
            img.IconAlign = buttonNotifyTemplate.IconAlign;
            img.IconVAlign = buttonNotifyTemplate.IconVAlign;
            img.IconInlineLabel1 = buttonNotifyTemplate.IconInlineLabel1;
          }
          else
          {
            if (_useNewNotifyButtonColor)
            {
              img.TexutureFocusLeftName = "tvguide_notifyButton_Focus_left.png";
              img.TexutureFocusMidName = "tvguide_notifyButton_Focus_middle.png";
              img.TexutureFocusRightName = "tvguide_notifyButton_Focus_right.png";
              img.TexutureNoFocusLeftName = "tvguide_notifyButton_noFocus_left.png";
              img.TexutureNoFocusMidName = "tvguide_notifyButton_noFocus_middle.png";
              img.TexutureNoFocusRightName = "tvguide_notifyButton_noFocus_right.png";
            }
            else
            {
              img.TexutureIcon = Thumbs.TvNotifyIcon;
            }
          }
        }
        if (bRecording)
        {
          bool bPartialRecording = program.IsPartialRecordingSeriesPending;
          GUIButton3PartControl buttonRecordTemplate = GetControl((int)Controls.BUTTON_PROGRAM_RECORD) as GUIButton3PartControl;

          // Select the partial recording template if needed.
          if (bPartialRecording)
          {
            buttonRecordTemplate = GetControl((int)Controls.BUTTON_PROGRAM_PARTIAL_RECORD) as GUIButton3PartControl;
          }

          if (buttonRecordTemplate != null)
          {
            buttonRecordTemplate.IsVisible = false;

            img.TexutureFocusLeftName = buttonRecordTemplate.TexutureFocusLeftName;
            img.TexutureFocusMidName = buttonRecordTemplate.TexutureFocusMidName;
            img.TexutureFocusRightName = buttonRecordTemplate.TexutureFocusRightName;
            img.TexutureNoFocusLeftName = buttonRecordTemplate.TexutureNoFocusLeftName;
            img.TexutureNoFocusMidName = buttonRecordTemplate.TexutureNoFocusMidName;
            img.TexutureNoFocusRightName = buttonRecordTemplate.TexutureNoFocusRightName;
            
            img.TileFillTFL = buttonRecordTemplate.TileFillTFL;
            img.TileFillTNFL = buttonRecordTemplate.TileFillTNFL;
            img.TileFillTFM = buttonRecordTemplate.TileFillTFM;
            img.TileFillTNFM = buttonRecordTemplate.TileFillTNFM;
            img.TileFillTFR = buttonRecordTemplate.TileFillTFR;
            img.TileFillTNFR = buttonRecordTemplate.TileFillTNFR;

            // Use of the button template control implies use of the icon.  Use a blank image if the icon is not desired.
            if (bConflict)
            {
              img.TexutureIcon = Thumbs.TvConflictRecordingIcon;
            }
            else if (bSeries)
            {
              img.TexutureIcon = Thumbs.TvRecordingSeriesIcon;
            }
            else
            {
              img.TexutureIcon = Thumbs.TvRecordingIcon;
            }
            img.IconOffsetX = buttonRecordTemplate.IconOffsetX;
            img.IconOffsetY = buttonRecordTemplate.IconOffsetY;
            img.IconAlign = buttonRecordTemplate.IconAlign;
            img.IconVAlign = buttonRecordTemplate.IconVAlign;
            img.IconInlineLabel1 = buttonRecordTemplate.IconInlineLabel1;
          }
          else
          {
            if (bPartialRecording && _useNewPartialRecordingButtonColor)
            {
              img.TexutureFocusLeftName = "tvguide_partRecButton_Focus_left.png";
              img.TexutureFocusMidName = "tvguide_partRecButton_Focus_middle.png";
              img.TexutureFocusRightName = "tvguide_partRecButton_Focus_right.png";
              img.TexutureNoFocusLeftName = "tvguide_partRecButton_noFocus_left.png";
              img.TexutureNoFocusMidName = "tvguide_partRecButton_noFocus_middle.png";
              img.TexutureNoFocusRightName = "tvguide_partRecButton_noFocus_right.png";
            }
            else
            {
              if (_useNewRecordingButtonColor)
              {
                img.TexutureFocusLeftName = "tvguide_recButton_Focus_left.png";
                img.TexutureFocusMidName = "tvguide_recButton_Focus_middle.png";
                img.TexutureFocusRightName = "tvguide_recButton_Focus_right.png";
                img.TexutureNoFocusLeftName = "tvguide_recButton_noFocus_left.png";
                img.TexutureNoFocusMidName = "tvguide_recButton_noFocus_middle.png";
                img.TexutureNoFocusRightName = "tvguide_recButton_noFocus_right.png";
              }
              else
              {
                if (bConflict)
                {
                  img.TexutureIcon = Thumbs.TvConflictRecordingIcon;
                }
                else if (bSeries)
                {
                  img.TexutureIcon = Thumbs.TvRecordingSeriesIcon;
                }
                else
                {
                  img.TexutureIcon = Thumbs.TvRecordingIcon;
                }
              }
            }
          }
        }
      }
    }
예제 #5
0
        private void Update(bool selectCurrentShow)
        {
            lock (this)
            {
                if (GUIWindowManager.ActiveWindowEx != this.GetID)
                {
                    return;
                }

                // sets button visible state
                UpdateGroupButton();

                _updateTimer = DateTime.Now;
                GUISpinControl cntlDay = GetControl((int)Controls.SPINCONTROL_DAY) as GUISpinControl;

                // Find first day in TVGuide and set spincontrol position
                int iDay = CalcDays();
                for (; iDay < 0; ++iDay)
                {
                    _viewingTime = _viewingTime.AddDays(1.0);
                }
                for (; iDay >= MaxDaysInGuide; --iDay)
                {
                    _viewingTime = _viewingTime.AddDays(-1.0);
                }
                cntlDay.Value = iDay;

                int xpos, ypos;
                GUIControl cntlPanel = GetControl((int)Controls.PANEL_BACKGROUND);
                GUIImage cntlChannelImg = (GUIImage)GetControl((int)Controls.CHANNEL_IMAGE_TEMPLATE);
                GUILabelControl cntlChannelLabel = (GUILabelControl)GetControl((int)Controls.CHANNEL_LABEL_TEMPLATE);
                GUILabelControl labelTime = (GUILabelControl)GetControl((int)Controls.LABEL_TIME1);
                GUIImage cntlHeaderBkgImg = (GUIImage)GetControl((int)Controls.IMG_TIME1);
                GUIImage cntlChannelTemplate = (GUIImage)GetControl((int)Controls.CHANNEL_TEMPLATE);


                _titleDarkTemplate = GetControl((int)Controls.LABEL_TITLE_DARK_TEMPLATE) as GUILabelControl;
                _titleTemplate = GetControl((int)Controls.LABEL_TITLE_TEMPLATE) as GUILabelControl;
                _genreDarkTemplate = GetControl((int)Controls.LABEL_GENRE_DARK_TEMPLATE) as GUILabelControl;
                _genreTemplate = GetControl((int)Controls.LABEL_GENRE_TEMPLATE) as GUILabelControl;

                _programPartialRecordTemplate = GetControl((int)Controls.BUTTON_PROGRAM_PARTIAL_RECORD) as GUIButton3PartControl;
                _programRecordTemplate = GetControl((int)Controls.BUTTON_PROGRAM_RECORD) as GUIButton3PartControl;
                _programNotifyTemplate = GetControl((int)Controls.BUTTON_PROGRAM_NOTIFY) as GUIButton3PartControl;
                _programNotRunningTemplate = GetControl((int)Controls.BUTTON_PROGRAM_NOT_RUNNING) as GUIButton3PartControl;
                _programRunningTemplate = GetControl((int)Controls.BUTTON_PROGRAM_RUNNING) as GUIButton3PartControl;

                _showChannelLogos = cntlChannelImg != null;
                if (_showChannelLogos)
                {
                    cntlChannelImg.IsVisible = false;
                }
                cntlChannelLabel.IsVisible = false;
                cntlHeaderBkgImg.IsVisible = false;
                labelTime.IsVisible = false;
                cntlChannelTemplate.IsVisible = false;
                int iLabelWidth = (cntlPanel.XPosition + cntlPanel.Width - labelTime.XPosition) / 4;

                // add labels for time blocks 1-4
                int iHour, iMin;
                iMin = _viewingTime.Minute;
                _viewingTime = _viewingTime.AddMinutes(-iMin);
                iMin = (iMin / _timePerBlock) * _timePerBlock;
                _viewingTime = _viewingTime.AddMinutes(iMin);

                DateTime dt = new DateTime();
                dt = _viewingTime;

                for (int iLabel = 0; iLabel < 4; iLabel++)
                {
                    xpos = iLabel * iLabelWidth + labelTime.XPosition;
                    ypos = labelTime.YPosition;

                    GUIImage img = GetControl((int)Controls.IMG_TIME1 + iLabel) as GUIImage;
                    if (img == null)
                    {
                        img = new GUIImage(GetID, (int)Controls.IMG_TIME1 + iLabel, xpos, ypos, iLabelWidth - 4,
                                           cntlHeaderBkgImg.RenderHeight, cntlHeaderBkgImg.FileName, 0x0);
                        img.AllocResources();
                        GUIControl cntl2 = (GUIControl)img;
                        Add(ref cntl2);
                    }

                    img.IsVisible = !_singleChannelView;
                    img.Width = iLabelWidth - 4;
                    img.Height = cntlHeaderBkgImg.RenderHeight;
                    img.SetFileName(cntlHeaderBkgImg.FileName);
                    img.SetPosition(xpos, ypos);
                    img.DoUpdate();

                    GUILabelControl label = GetControl((int)Controls.LABEL_TIME1 + iLabel) as GUILabelControl;
                    if (label == null)
                    {
                        label = new GUILabelControl(GetID, (int)Controls.LABEL_TIME1 + iLabel, xpos, ypos, iLabelWidth,
                                                    cntlHeaderBkgImg.RenderHeight, labelTime.FontName, String.Empty,
                                                    labelTime.TextColor, GuideBase.TimeAlignment, labelTime.TextVAlignment, false,
                                                    labelTime.ShadowAngle, labelTime.ShadowDistance, labelTime.ShadowColor);
                        label.AllocResources();
                        GUIControl cntl = (GUIControl)label;
                        this.Add(ref cntl);
                    }
                    iHour = dt.Hour;
                    iMin = dt.Minute;
                    string strTime = dt.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat);
                    label.Label = " " + strTime;
                    dt = dt.AddMinutes(_timePerBlock);

                    label.TextAlignment = GuideBase.TimeAlignment;
                    label.IsVisible = !_singleChannelView;
                    label.Width = iLabelWidth;
                    label.Height = cntlHeaderBkgImg.RenderHeight;
                    label.FontName = labelTime.FontName;
                    label.TextColor = labelTime.TextColor;
                    label.SetPosition(xpos, ypos);
                }

                // add channels...
                int iHeight = cntlPanel.Height + cntlPanel.YPosition - cntlChannelTemplate.YPosition;
                int iItemHeight = cntlChannelTemplate.Height;

                _channelCount = (int)(((float)iHeight) / ((float)iItemHeight));
                for (int iChan = 0; iChan < _channelCount; ++iChan)
                {
                    xpos = cntlChannelTemplate.XPosition;
                    ypos = cntlChannelTemplate.YPosition + iChan * iItemHeight;

                    //this.Remove((int)Controls.IMG_CHAN1+iChan);
                    GUIButton3PartControl imgBut = GetControl((int)Controls.IMG_CHAN1 + iChan) as GUIButton3PartControl;
                    if (imgBut == null)
                    {
                        string strChannelImageFileName = String.Empty;
                        if (_showChannelLogos)
                        {
                            strChannelImageFileName = cntlChannelImg.FileName;
                        }

                        // Use a template control if it exists, otherwise use default values.
                        GUIButton3PartControl buttonTemplate = GetControl((int)Controls.BUTTON_PROGRAM_NOT_RUNNING) as GUIButton3PartControl;
                        if (buttonTemplate != null)
                        {
                            buttonTemplate.IsVisible = false;
                            imgBut = new GUIButton3PartControl(GetID, (int)Controls.IMG_CHAN1 + iChan, xpos, ypos,
                                                               cntlChannelTemplate.Width - 2, cntlChannelTemplate.Height - 2,
                                                               buttonTemplate.TexutureFocusLeftName,
                                                               buttonTemplate.TexutureFocusMidName,
                                                               buttonTemplate.TexutureFocusRightName,
                                                               buttonTemplate.TexutureNoFocusLeftName,
                                                               buttonTemplate.TexutureNoFocusMidName,
                                                               buttonTemplate.TexutureNoFocusRightName,
                                                               strChannelImageFileName);

                            imgBut.TileFillTFL = buttonTemplate.TileFillTFL;
                            imgBut.TileFillTNFL = buttonTemplate.TileFillTNFL;
                            imgBut.TileFillTFM = buttonTemplate.TileFillTFM;
                            imgBut.TileFillTNFM = buttonTemplate.TileFillTNFM;
                            imgBut.TileFillTFR = buttonTemplate.TileFillTFR;
                            imgBut.TileFillTNFR = buttonTemplate.TileFillTNFR;
                        }
                        else
                        {
                            imgBut = new GUIButton3PartControl(GetID, (int)Controls.IMG_CHAN1 + iChan, xpos, ypos,
                                                               cntlChannelTemplate.Width - 2, cntlChannelTemplate.Height - 2,
                                                               "tvguide_button_selected_left.png",
                                                               "tvguide_button_selected_middle.png",
                                                               "tvguide_button_selected_right.png",
                                                               "tvguide_button_light_left.png",
                                                               "tvguide_button_light_middle.png",
                                                               "tvguide_button_light_right.png",
                                                               strChannelImageFileName);
                        }
                        imgBut.AllocResources();
                        GUIControl cntl = (GUIControl)imgBut;
                        Add(ref cntl);
                    }

                    imgBut.Width = cntlChannelTemplate.Width - 2; //labelTime.XPosition-cntlChannelImg.XPosition;
                    imgBut.Height = cntlChannelTemplate.Height - 2; //iItemHeight-2;
                    imgBut.SetPosition(xpos, ypos);
                    imgBut.FontName1 = cntlChannelLabel.FontName;
                    imgBut.TextColor1 = cntlChannelLabel.TextColor;
                    imgBut.Label1 = String.Empty;
                    imgBut.RenderLeft = false;
                    imgBut.RenderRight = false;
                    imgBut.SetShadow1(cntlChannelLabel.ShadowAngle, cntlChannelLabel.ShadowDistance, cntlChannelLabel.ShadowColor);

                    if (_showChannelLogos)
                    {
                        imgBut.TexutureIcon = cntlChannelImg.FileName;
                        imgBut.IconOffsetX = cntlChannelImg.XPosition;
                        imgBut.IconOffsetY = cntlChannelImg.YPosition;
                        imgBut.IconWidth = cntlChannelImg.RenderWidth;
                        imgBut.IconHeight = cntlChannelImg.RenderHeight;
                        imgBut.IconKeepAspectRatio = cntlChannelImg.KeepAspectRatio;
                        imgBut.IconCentered = cntlChannelImg.Centered;
                        imgBut.IconZoom = cntlChannelImg.Zoom;
                    }
                    imgBut.TextOffsetX1 = cntlChannelLabel.XPosition;
                    imgBut.TextOffsetY1 = cntlChannelLabel.YPosition;
                    imgBut.ColourDiffuse = 0xffffffff;
                    imgBut.DoUpdate();
                }

                UpdateHorizontalScrollbar();
                UpdateVerticalScrollbar();

                GetChannels(false);


                string day;
                switch (_viewingTime.DayOfWeek)
                {
                    case DayOfWeek.Monday:
                        day = GUILocalizeStrings.Get(657);
                        break;
                    case DayOfWeek.Tuesday:
                        day = GUILocalizeStrings.Get(658);
                        break;
                    case DayOfWeek.Wednesday:
                        day = GUILocalizeStrings.Get(659);
                        break;
                    case DayOfWeek.Thursday:
                        day = GUILocalizeStrings.Get(660);
                        break;
                    case DayOfWeek.Friday:
                        day = GUILocalizeStrings.Get(661);
                        break;
                    case DayOfWeek.Saturday:
                        day = GUILocalizeStrings.Get(662);
                        break;
                    default:
                        day = GUILocalizeStrings.Get(663);
                        break;
                }
                GUIPropertyManager.SetProperty(SkinPropertyPrefix + ".Guide.View.SDOW", day);
                GUIPropertyManager.SetProperty(SkinPropertyPrefix + ".Guide.View.Month", _viewingTime.Month.ToString());
                GUIPropertyManager.SetProperty(SkinPropertyPrefix + ".Guide.View.Day", _viewingTime.Day.ToString());

                //day = String.Format("{0} {1}-{2}", day, _viewingTime.Day, _viewingTime.Month);
                day = Utils.GetShortDayString(_viewingTime);
                GUIPropertyManager.SetProperty(SkinPropertyPrefix + ".Guide.Day", day);

                //2004 03 31 22 20 00
                string strStart = String.Format("{0}{1:00}{2:00}{3:00}{4:00}{5:00}",
                                                _viewingTime.Year, _viewingTime.Month, _viewingTime.Day,
                                                _viewingTime.Hour, _viewingTime.Minute, 0);
                DateTime dtStop = new DateTime();
                dtStop = _viewingTime;
                dtStop = dtStop.AddMinutes(_numberOfBlocks * _timePerBlock - 1);
                iMin = dtStop.Minute;
                string strEnd = String.Format("{0}{1:00}{2:00}{3:00}{4:00}{5:00}",
                                              dtStop.Year, dtStop.Month, dtStop.Day,
                                              dtStop.Hour, iMin, 0);

                long iStart = Int64.Parse(strStart);
                long iEnd = Int64.Parse(strEnd);


                LoadSchedules(false);

                if (_channelOffset > _channelList.Count)
                {
                    _channelOffset = 0;
                    _cursorX = 0;
                }

                for (int i = 0; i < controlList.Count; ++i)
                {
                    GUIControl cntl = (GUIControl)controlList[i];
                    if (cntl.GetID >= GUIDE_COMPONENTID_START)
                    {
                        cntl.IsVisible = false;
                    }
                }

                if (_singleChannelView)
                {
                    // show all buttons (could be less visible if channels < rows)
                    for (int iChannel = 0; iChannel < _channelCount; iChannel++)
                    {
                        GUIButton3PartControl imgBut = GetControl((int)Controls.IMG_CHAN1 + iChannel) as GUIButton3PartControl;
                        if (imgBut != null)
                            imgBut.IsVisible = true;
                    }

                    Channel channel = (Channel)_channelList[_singleChannelNumber].channel;
                    setGuideHeadingVisibility(false);
                    RenderSingleChannel(channel);
                }
                else
                {
                    List<Channel> visibleChannels = new List<Channel>();

                    int chan = _channelOffset;
                    for (int iChannel = 0; iChannel < _channelCount; iChannel++)
                    {
                        if (chan < _channelList.Count)
                        {
                            visibleChannels.Add(_channelList[chan].channel);
                        }
                        chan++;
                        if (chan >= _channelList.Count && visibleChannels.Count < _channelList.Count)
                        {
                            chan = 0;
                        }
                    }

                    _controller.RefreshChannelsEpgData(visibleChannels, Utils.longtodate(iStart), Utils.longtodate(iEnd));

                    // make sure the TV Guide heading is visiable and the single channel labels are not.
                    setGuideHeadingVisibility(true);
                    SetSingleChannelLabelVisibility(false);
                    chan = _channelOffset;

                    int firstButtonYPos = 0;
                    int lastButtonYPos = 0;

                    for (int iChannel = 0; iChannel < _channelCount; iChannel++)
                    {
                        if (chan < _channelList.Count)
                        {
                            GuideBaseChannel tvGuideChannel = _channelList[chan];
                            RenderChannel(iChannel, tvGuideChannel, iStart, iEnd, selectCurrentShow);
                            // remember bottom y position from last visible button
                            GUIButton3PartControl imgBut = GetControl((int)Controls.IMG_CHAN1 + iChannel) as GUIButton3PartControl;
                            if (imgBut != null)
                            {
                                if (iChannel == 0)
                                    firstButtonYPos = imgBut.YPosition;

                                lastButtonYPos = imgBut.YPosition + imgBut.Height;
                            }
                        }
                        chan++;
                        if (chan >= _channelList.Count && _channelList.Count > _channelCount)
                        {
                            chan = 0;
                        }
                        if (chan > _channelList.Count)
                        {
                            GUIButton3PartControl imgBut = GetControl((int)Controls.IMG_CHAN1 + iChannel) as GUIButton3PartControl;
                            if (imgBut != null)
                            {
                                imgBut.IsVisible = false;
                            }
                        }
                    }

                    GUIImage vertLine = GetControl((int)Controls.VERTICAL_LINE) as GUIImage;
                    if (vertLine != null)
                    {
                        // height taken from last button (bottom) minus the yposition of slider plus the offset of slider in relation to first button
                        vertLine.Height = lastButtonYPos - vertLine.YPosition + (firstButtonYPos - vertLine.YPosition);
                    }
                    // update selected channel
                    _singleChannelNumber = _cursorX + _channelOffset;
                    if (_singleChannelNumber >= _channelList.Count)
                    {
                        _singleChannelNumber -= _channelList.Count;
                    }

                    // instead of direct casting us "as"; else it fails for other controls!
                    GUIButton3PartControl img = GetControl(_cursorX + (int)Controls.IMG_CHAN1) as GUIButton3PartControl;
                    if (null != img)
                    {
                        _currentChannel = (Channel)img.Data;
                    }
                }
                UpdateVerticalScrollbar();
            }
        }