예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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));
        }