/// <summary> /// Za pomoci datového zdroje <see cref="LinkDataSource"/> získá vztahy (linky) pro daný režim, a zajistí jejich zobrazení. /// Je voláno po změně režimu <see cref="CurrentLinksMode"/>, a explicitně z metody <see cref="ReloadLinks()"/>. /// </summary> /// <param name="clear">Nulovat aktuální soupis linků?</param> /// <param name="linksMode">Režim pro zobrazení nových linků</param> protected void ReadLinksForMode(bool clear, TimeGraphLinkMode linksMode) { if (clear) { this.Clear(); } ITimeGraphLinkDataSource linkDataSource = this.LinkDataSource; if (linkDataSource == null) { return; } TimeGraphLinkMode itemMode = linksMode; if (linksMode.HasFlag(TimeGraphLinkMode.Allways)) { itemMode = TimeGraphLinkMode.Allways; } CreateAllLinksArgs args = null; if (linkDataSource != null) { // Tato varianta nemusí řešit režim Linků GTimeGraphLinkMode.MouseOver, protože linky MouseOver naskočí samy při pohybu myši :-). // Primárně jde o rozlišení Allways / Selected / None: if (linksMode.HasFlag(TimeGraphLinkMode.Allways)) { args = new CreateAllLinksArgs(TimeGraphLinkMode.Allways); linkDataSource.CreateLinks(args); } else if (linksMode.HasFlag(TimeGraphLinkMode.Selected)) { if (this.Host != null && this.Host.Selector != null) { args = new CreateAllLinksArgs(TimeGraphLinkMode.Selected, this.Host.Selector.SelectedItems); linkDataSource.CreateLinks(args); } } } if (args != null && args.Links.Count > 0) { this.AddLinks(args.Links, itemMode); } }
/// <summary> /// Metoda vrací poměr průhlednosti pro daný režim linku. /// Průhlednost Linku = hodnota v rozsahu 0.0 (neviditelná) - 1.0 (plná barva). /// Na hodnoty průhlednosti má vliv i aktuální režim <see cref="CurrentLinksMode"/>. /// </summary> /// <param name="itemLinkMode"></param> /// <returns></returns> internal float GetVisibleRatioForMode(TimeGraphLinkMode itemLinkMode) { bool isMouseOver = itemLinkMode.HasFlag(TimeGraphLinkMode.MouseOver); TimeGraphLinkMode currentMode = this.CurrentLinksMode; if (currentMode.HasFlag(TimeGraphLinkMode.Allways)) { // Pokud aktuálně vidím všechny Linky, tak budu ignorovat bit Selected, a použiju dvě úrovně průhlednosti - podle přítomnosti myši nad prvkem: return(isMouseOver ? LinkVisibleRatioAllwaysWithMouse : LinkVisibleRatioAllwaysStandard); } // Nejsou zapnuty všechny linky dle režimu, tedy zobrazuji jen Linky pro prvky Selected + MouseOver: bool isSelected = itemLinkMode.HasFlag(TimeGraphLinkMode.Selected); return(isSelected ? (isMouseOver ? LinkVisibleRatioSelectedWithMouse : LinkVisibleRatioSelectedStandard) : (isMouseOver ? LinkVisibleRatioOnlyWithMouse : LinkVisibleRatioNone)); }