Пример #1
0
        public MarkerTrack(Timeline owner) : base(owner)
        {
            name = "Markers";
            AddToClassList("markerTrack");

            RegisterCallback <AttachToPanelEvent>(OnAttachToPanel);
            RegisterCallback <DetachFromPanelEvent>(OnDetachFromPanel);

            m_MarkerOverlapIndicators = new List <MarkerOverlapIndicator>();
            var manipulator = new ContextualMenuManipulator(evt =>
            {
                DropdownMenu menu = evt.menu;
                float time        = m_Owner.WorldPositionToTime(evt.mousePosition.x);
                if (m_Owner.ViewMode == TimelineViewMode.frames)
                {
                    time = (float)TimelineUtility.RoundToFrame(time, Clip.SampleRate);
                }

                string timeStr = TimelineUtility.GetTimeString(m_Owner.ViewMode, time, (int)Clip.SampleRate);

                menu.AppendAction($"Add Marker at {timeStr}", null, DropdownMenuAction.Status.Disabled);
                menu.AppendSeparator();
                var menuStatus = EditorApplication.isPlaying ? DropdownMenuAction.Status.Disabled : DropdownMenuAction.Status.Normal;
                foreach (Type markerType in MarkerAttribute.GetMarkerTypes())
                {
                    evt.menu.AppendAction(MarkerAttribute.GetDescription(markerType), action => OnAddAnnotationSelection(markerType, time), a => menuStatus, markerType);
                }
            });

            this.AddManipulator(manipulator);
        }
        static void AddMarkerMenu(ContextualMenuPopulateEvent evt, Action <DropdownMenuAction> action, DropdownMenuAction.Status menuStatus)
        {
            const string prefix = "Add Marker /";

            foreach (var markerType in MarkerAttribute.GetMarkerTypes())
            {
                evt.menu.AppendAction($"{prefix}{MarkerAttribute.GetDescription(markerType)}", action, a => menuStatus, markerType);
            }
        }