Ejemplo n.º 1
0
 public void SetCheckPriorityWithSnapInfo(SnapInfo si)
 {
     if (si.PriorityMatch == SnapInfo.MatchType.X_MATCH)
     {
         CheckPriority = Priority.PRIORITY_X;
     }
     else if (si.PriorityMatch == SnapInfo.MatchType.Y_MATCH)
     {
         CheckPriority = Priority.PRIORITY_Y;
     }
     else
     {
         CheckPriority = Priority.NONE;
     }
 }
Ejemplo n.º 2
0
        SnapInfo ClosestMagnet(double time)
        {
            SnapInfo candidate = null;
            var      min       = double.MaxValue;

            foreach (var magnetInfo in m_Magnets)
            {
                var m = Math.Abs(magnetInfo.time - time);
                if (m < min)
                {
                    candidate = magnetInfo;
                    min       = m;
                }
            }

            if (candidate != null && candidate.IsInInfluenceZone(time, m_State))
            {
                return(candidate);
            }

            return(null);
        }
Ejemplo n.º 3
0
        public ZfsSnapshots(string snapshotList)
        {
            m_snaps = new Dictionary <string, List <SnapInfo> >();

            foreach (string snap in snapshotList.Split('\n'))
            {
                string[] parts      = snap.Split('\t');
                string   name       = parts[0];
                long?    size       = (parts.Length > 1) ? (long?)parts[1].AsLong() : null;
                bool     noAutoSnap = ((parts.Length > 2) && !string.IsNullOrEmpty(parts[2]) && (parts[2] != "-") && (parts[2] != "no"));

                var info = new SnapInfo();
                info.Name           = name;
                info.Size           = size;
                info.NoAutoSnapshot = noAutoSnap;

                parts           = name.Split(new char[] { '@' }, 2);
                info.Filesystem = parts[0];

                parts = parts[1].Split(new char[] { '-' }, 3);
                try
                {
                    info.Date = new DateTime(parts[0].AsInt(), parts[1].AsInt(), parts[2].AsInt());
                }
                catch (FormatException)
                {
                    // Snapshot name not in the date format. Skip it.
                    continue;
                }

                if (!m_snaps.ContainsKey(info.Filesystem))
                {
                    m_snaps[info.Filesystem] = new List <SnapInfo>();
                }
                m_snaps[info.Filesystem].Add(info);
            }
        }
Ejemplo n.º 4
0
        public void Snap(Vector2 currentMousePosition, EventModifiers modifiers)
        {
            var d = m_State.PixelToTime(currentMousePosition.x) - m_GrabbedTime;

            m_CurrentTimes = m_GrabbedTimes.Translate(d);

            bool isLeft  = m_ManipulateEdges == ManipulateEdges.Left || m_ManipulateEdges == ManipulateEdges.Both;
            bool isRight = m_ManipulateEdges == ManipulateEdges.Right || m_ManipulateEdges == ManipulateEdges.Both;

            bool attracted = false;

            m_SnapEnabled = modifiers == ManipulatorsUtils.actionModifier ? !m_State.edgeSnaps : m_State.edgeSnaps;

            if (m_SnapEnabled)
            {
                SnapInfo leftActiveMagnet  = null;
                SnapInfo rightActiveMagnet = null;

                if (isLeft)
                {
                    leftActiveMagnet = ClosestMagnet(m_CurrentTimes.left);
                }

                if (isRight)
                {
                    rightActiveMagnet = ClosestMagnet(m_CurrentTimes.right);
                }

                if (leftActiveMagnet != null || rightActiveMagnet != null)
                {
                    attracted = true;

                    bool leftAttraction = false;

                    if (rightActiveMagnet == null)
                    {
                        // Attracted by a left magnet only.
                        leftAttraction = true;
                    }
                    else
                    {
                        if (leftActiveMagnet != null)
                        {
                            // Attracted by both magnets, choose the closest one.
                            var leftDistance  = Math.Abs(leftActiveMagnet.time - m_CurrentTimes.left);
                            var rightDistance = Math.Abs(rightActiveMagnet.time - m_CurrentTimes.right);

                            leftAttraction = leftDistance <= rightDistance;
                        }
                        // else, Attracted by right magnet only
                    }

                    if (leftAttraction)
                    {
                        m_AttractionHandler.OnAttractedEdge(m_Attractable, m_ManipulateEdges, AttractedEdge.Left, leftActiveMagnet.time);
                    }
                    else
                    {
                        m_AttractionHandler.OnAttractedEdge(m_Attractable, m_ManipulateEdges, AttractedEdge.Right, rightActiveMagnet.time);
                    }
                }
            }

            if (!attracted)
            {
                var time = isLeft ? m_CurrentTimes.left : m_CurrentTimes.right;

                time = m_State.SnapToFrameIfRequired(time);

                m_AttractionHandler.OnAttractedEdge(m_Attractable, m_ManipulateEdges, AttractedEdge.None, time);
            }
        }
Ejemplo n.º 5
0
 public static string Delete(SnapInfo snapshot)
 {
     return(Zfs.DestroySnapshot(snapshot.Name));
 }