protected virtual void PopupClear() { if (PopUp != null) { PopUp.Visibility = Visibility.Hidden; } lastPopupInfo = null; lastPopupPos = new Point(-1, -1); }
// PopUpの初期化 protected virtual void SetPopup(ViewPanelItemBase popInfo) { UpdatePopupPosition(popInfo); PopUp.Width = popInfo.Width; if (popInfo.TopPos < scroll.ContentVerticalOffset) { PopUp.MinHeight = Math.Max(0, popInfo.TopPos + popInfo.Height - scroll.ContentVerticalOffset); } else { PopUp.MinHeight = Math.Max(0, Math.Min(scroll.ContentVerticalOffset + scroll.ViewportHeight - popInfo.TopPos, popInfo.Height)); } }
// PopUp が画面内に収まるように調整する protected void UpdatePopupPosition(ViewPanelItemBase popInfo) { // offsetHが正のとき右にはみ出している double offsetH = popInfo.LeftPos + PopUp.ActualWidth - (scroll.ContentHorizontalOffset + scroll.ViewportWidth); // 右にはみ出した分だけ左にずらす double left = popInfo.LeftPos - Math.Max(0, offsetH); // 左にはみ出てる場合はscrollエリアの左端から表示する Canvas.SetLeft(PopUp, Math.Floor(Math.Max(left, scroll.ContentHorizontalOffset))); // offsetVが正のとき下にはみ出している double offsetV = popInfo.TopPos + PopUp.ActualHeight - (scroll.ContentVerticalOffset + scroll.ViewportHeight); // 下にはみ出した分だけ上にずらす double top = popInfo.TopPos - Math.Max(0, offsetV); // 上にはみ出てる場合はscrollエリアの上端から表示する Canvas.SetTop(PopUp, Math.Floor(Math.Max(top, scroll.ContentVerticalOffset - 1))); }
protected virtual void PopUpWork(bool reset = false) { if (IsPopupEnabled == false) { return; } if (reset == true) { PopupClear(); } Point cursorPos = Mouse.GetPosition(scroll); if (lastPopupPos != cursorPos) { lastPopupPos = cursorPos; if (cursorPos.X < 0 || cursorPos.Y < 0 || scroll.ViewportWidth < cursorPos.X || scroll.ViewportHeight < cursorPos.Y) { PopupClear(); return; } Point itemPos = Mouse.GetPosition(cnvs); ViewPanelItemBase item = GetPopupItem(itemPos); if (item != lastPopupInfo) { lastPopupInfo = item; if (item == null) { PopupClear(); return; } SetPopup(item); PopUp.Visibility = Visibility.Visible; } } }
protected override void SetPopup(ViewPanelItemBase item) { base.SetPopup(item); var viewInfo = (ReserveViewItem)item; var resItem = new ReserveItem(viewInfo.ReserveInfo); popupItem.Background = viewInfo.BackColorTuner; popupItemTextArea.Margin = new Thickness(1, -1, 5, 1); double sizeTitle = Settings.Instance.TunerFontSizeService; double sizeNormal = Settings.Instance.TunerFontSize; double indentTitle = Math.Floor((Settings.Instance.TunerPopupRecinfo == false || Settings.Instance.TunerTitleIndent == true) ? sizeNormal * 1.7 : 2); double indentNormal = Math.Floor(Settings.Instance.TunerTitleIndent == true ? indentTitle : 2); var fontTitle = new FontFamily(Settings.Instance.TunerFontNameService); var fontNormal = new FontFamily(Settings.Instance.TunerFontName); FontWeight weightTitle = Settings.Instance.TunerFontBoldService == true ? FontWeights.Bold : FontWeights.Normal; Brush colorTitle = Settings.Instance.TunerColorModeUse == true ? viewInfo.ForeColorPriTuner : CommonManager.Instance.CustTunerServiceColor; Brush colorNormal = CommonManager.Instance.CustTunerTextColor; //録画中は枠をかえる popupItem.BorderBrush = viewInfo.BorderBrushTuner; //追加情報の表示 if (Settings.Instance.TunerPopupRecinfo == true) { timeText.Visibility = Visibility.Visible; recInfoText.Visibility = Visibility.Visible; minText.Visibility = Visibility.Collapsed; //'録画中'を表示 statusText.Text = viewInfo.StatusTuner; statusText.Visibility = Visibility.Collapsed; if (statusText.Text != "") { statusText.Visibility = Visibility.Visible; statusText.FontFamily = fontNormal; statusText.FontSize = sizeNormal; //statusText.FontWeight = FontWeights.Normal; statusText.Foreground = CommonManager.Instance.StatRecForeColor; minText.Margin = new Thickness(1, 1, 0, 4); statusText.LineHeight = Math.Max(Settings.Instance.TunerFontHeight, sizeNormal + 2); } timeText.Text = resItem.StartTimeShort; timeText.FontFamily = fontNormal; timeText.FontSize = sizeNormal; timeText.Foreground = colorTitle; timeText.Margin = new Thickness(1, 1, 0, 2); timeText.LineHeight = Math.Max(Settings.Instance.TunerFontHeight, sizeNormal + 2); recInfoText.Text = "優先度 : " + resItem.Priority + "\r\n" + "録画モード : " + resItem.RecMode; recInfoText.FontFamily = fontNormal; recInfoText.FontSize = sizeNormal; //recInfoText.FontWeight = FontWeights.Normal; recInfoText.Foreground = colorTitle; recInfoText.Margin = new Thickness(2 + indentTitle, 0, 2, 4); recInfoText.LineHeight = Math.Max(Settings.Instance.TunerFontHeight, sizeNormal + 2); } else { statusText.Visibility = Visibility.Collapsed; timeText.Visibility = Visibility.Collapsed; recInfoText.Visibility = Visibility.Collapsed; minText.Visibility = Visibility.Visible; minText.Text = viewInfo.ReserveInfo.StartTime.Minute.ToString("d02"); minText.FontFamily = fontNormal; minText.FontSize = sizeNormal; //minText.FontWeight = FontWeights.Normal; minText.Foreground = colorTitle; minText.Margin = new Thickness(1, 1, 0, 0); minText.LineHeight = Settings.Instance.TunerFontHeight; } var titletext = resItem.ServiceName + "(" + resItem.NetworkName + ")"; titleText.Text = Regex.Replace(titletext, ".", "$0\u200b"); titleText.FontFamily = fontTitle; titleText.FontSize = sizeTitle; titleText.FontWeight = weightTitle; titleText.Foreground = colorTitle; titleText.Margin = new Thickness(2 + indentTitle, 1, 0, 2); titleText.LineHeight = Math.Max(Settings.Instance.TunerFontHeightService, sizeTitle + 2); //必ず文字単位で折り返すためにZWSPを挿入 (\\w を使うと記号の間にZWSPが入らない) infoText.Text = Regex.Replace(resItem.EventName, ".", "$0\u200b"); //infoText.Text = resItem.EventName; infoText.FontFamily = fontNormal; infoText.FontSize = sizeNormal; //infoText.FontWeight = FontWeights.Normal; infoText.Foreground = colorNormal; infoText.Margin = new Thickness(2 + indentNormal, 0, 0, 2); infoText.LineHeight = Math.Max(Settings.Instance.TunerFontHeight, sizeNormal + 2); }
protected override void SetPopup(ViewPanelItemBase item) { base.SetPopup(item); var viewInfo = (ProgramViewItem)item; EpgEventInfo epgInfo = viewInfo.EventInfo; popupItem.Background = viewInfo.ContentColor; double sizeMin = Settings.Instance.FontSizeTitle - 1; double sizeTitle = Settings.Instance.FontSizeTitle; double sizeNormal = Settings.Instance.FontSize; double indentTitle = Math.Floor(sizeMin * 1.7 + 1); double indentNormal = Math.Floor(Settings.Instance.EpgTitleIndent ? indentTitle : 3); var fontNormal = new FontFamily(Settings.Instance.FontName); var fontTitle = new FontFamily(Settings.Instance.FontNameTitle); FontWeight titleWeight = Settings.Instance.FontBoldTitle == true ? FontWeights.Bold : FontWeights.Normal; minText.Text = (epgInfo.StartTimeFlag != 1 ? "未定" : epgInfo.start_time.Minute.ToString("d02")); minText.FontFamily = fontTitle; minText.FontSize = sizeMin; minText.FontWeight = titleWeight; minText.Foreground = CommonManager.Instance.CustTitle1Color; minText.Margin = new Thickness(1, 1, 0, 0); minText.LineHeight = Settings.Instance.FontHeightTitle; if (epgInfo.ShortInfo != null) { //必ず文字単位で折り返すためにZWSPを挿入 (\\w を使うと記号の間にZWSPが入らない) titleText.Text = System.Text.RegularExpressions.Regex.Replace(epgInfo.ShortInfo.event_name, ".", "$0\u200b"); titleText.FontFamily = fontTitle; titleText.FontSize = sizeTitle; titleText.FontWeight = titleWeight; titleText.Foreground = CommonManager.Instance.CustTitle1Color; titleText.Margin = new Thickness(indentTitle, 1, 0, 3); titleText.LineHeight = Math.Max(Settings.Instance.FontHeightTitle, sizeTitle + 2); if (epgInfo.ShortInfo.text_char.Length == 0) { infoText.Visibility = Visibility.Collapsed; } else { infoText.Visibility = Visibility.Visible; infoText.Text = System.Text.RegularExpressions.Regex.Replace(epgInfo.ShortInfo.text_char, ".", "$0\u200b"); infoText.FontFamily = fontNormal; infoText.FontSize = sizeNormal; //infoText.FontWeight = FontWeights.Normal; infoText.Foreground = CommonManager.Instance.CustTitle2Color; infoText.Margin = new Thickness(indentNormal, 1, 0, 3); infoText.LineHeight = Math.Max(Settings.Instance.FontHeight, sizeNormal + 2); } } else { titleText.Text = null; infoText.Text = null; } //予約枠の表示 double marginEpg = 1; double marginRes = marginEpg + 3; popupItemTextArea.Margin = new Thickness(marginEpg, marginEpg - 2, marginEpg + 3, marginEpg); if (resPopItem != null) { SetReserveBorder(popupItemBorder, resPopItem); popupItemBorder.Visibility = Visibility.Visible; if (Settings.Instance.ReserveRectBackground == false) { popupItemTextArea.Margin = new Thickness(marginRes, marginRes - 1, marginRes, marginRes); } } else { popupItemBorder.Visibility = Visibility.Collapsed; } }