Beispiel #1
0
    protected override void SetupSelectionTracker()
    {
        SelectionSettings settings = new SelectionSettings();

        settings.shouldDrawArea = false;
        SelectionTracker.GetInstance().SetSettings(settings);
    }
        public void LoadSongs_ViewModelCollectionsUpdated_InclueAllArtistsOption()
        {
            ViewModelFaker.InitializeLoadedViewModel(ViewModelFaker.CreateSongs(2, 2, 1));
            var viewModel = new SelectionTracker(JukeController.Instance.Browser);

            AreEqual(JukeController.Instance.Browser.Artists.Count + 1, viewModel.Artists.Count); //Including ALL_ARTISTS
        }
Beispiel #3
0
        public void Start_DontResetSelection()
        {
            Create(VisualKind.Character, "");
            var realView  = CreateTextView("foo bar baz");
            var selection = new Mock <ITextSelection>(MockBehavior.Strict);
            var snapshot  = new Mock <ITextSnapshot>(MockBehavior.Strict);

            snapshot.SetupGet(x => x.Length).Returns(1);
            selection.SetupGet(x => x.IsEmpty).Returns(false).Verifiable();
            var nonEmptySpan = new VirtualSnapshotSpan(new SnapshotSpan(snapshot.Object, new Span(0, 1)));

            selection.SetupGet(x => x.StreamSelectionSpan).Returns(nonEmptySpan).Verifiable();
            selection.SetupGet(x => x.IsReversed).Returns(false).Verifiable();
            selection.SetupGet(x => x.AnchorPoint).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 0));
            selection.SetupGet(x => x.ActivePoint).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 1));
            selection.SetupGet(x => x.End).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 1));
            selection.SetupProperty(x => x.Mode);
            var view = new Mock <ITextView>(MockBehavior.Strict);

            view.SetupGet(x => x.TextBuffer).Returns(realView.TextBuffer);
            view.SetupGet(x => x.Caret).Returns(realView.Caret);
            view.SetupGet(x => x.TextSnapshot).Returns(realView.TextSnapshot);
            view.SetupGet(x => x.Selection).Returns(selection.Object);
            var vimTextBuffer = new Mock <IVimTextBuffer>(MockBehavior.Strict);

            vimTextBuffer.SetupGet(x => x.LocalSettings).Returns(new LocalSettings(_globalSettings));
            vimTextBuffer.SetupGet(x => x.UseVirtualSpace).Returns(false);
            vimTextBuffer.SetupSet(x => x.LastVisualSelection = It.IsAny <Microsoft.FSharp.Core.FSharpOption <VisualSelection> >());
            var vimBufferData = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, view.Object);
            var tracker       = new SelectionTracker(vimBufferData, _commonOperations, _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            selection.Verify();
        }
Beispiel #4
0
    protected override void UnsubscribeFromEvents()
    {
        InputListener.GetInstance().OnMouse0_Down -= OnLeftMouseDown;
        InputListener.GetInstance().OnMouse0_Up   -= OnLeftMouseUp;
        InputListener.GetInstance().OnMouse1_Down -= SwitchToDefaultState;

        SelectionTracker.GetInstance().OnAreaChange -= OnAreaChange;
    }
Beispiel #5
0
 private void Create(VisualKind kind, int caretPosition, params string[] lines)
 {
     _textView = CreateTextView(lines);
     _textView.MoveCaretTo(caretPosition);
     _globalSettings    = new GlobalSettings();
     _incrementalSearch = new Mock <IIncrementalSearch>(MockBehavior.Loose);
     _tracker           = new SelectionTracker(_textView, _globalSettings, _incrementalSearch.Object, kind);
     _tracker.Start();
 }
    protected override void SubscribeToEvents()
    {
        InputListener.GetInstance().OnMouse0_Down += OnLeftClickDown;
        InputListener.GetInstance().OnMouse0_Up   += OnLeftClickUp;
        InputListener.GetInstance().OnMouse1_Down += SwitchToDefaultState;
        InputListener.GetInstance().OnEscape_Down += SwitchToDefaultState;

        SelectionTracker.GetInstance().OnAreaChange += OnAreaChange;
    }
Beispiel #7
0
        public void Start4()
        {
            var view = EditorUtil.CreateTextView("foo bar baz");

            view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
            var tracker = new SelectionTracker(view, _settings, _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            Assert.AreEqual(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position.Position);
        }
    protected override void SetupSelectionTracker()
    {
        SelectionSettings settings = new SelectionSettings();

        settings.selectionMask = new List <System.Type>()
        {
            typeof(Human)
        };
        settings.shouldDrawArea = true;
        SelectionTracker.GetInstance().SetSettings(settings);
    }
Beispiel #9
0
        public void Start4()
        {
            Create(VisualKind.Character);
            var view = CreateTextView("foo bar baz");

            view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
            var tracker = new SelectionTracker(view, new LocalSettings(_globalSettings), _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            Assert.Equal(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position);
        }
Beispiel #10
0
 private void Create(VisualKind kind, int caretPosition, params string[] lines)
 {
     _textView = CreateTextView(lines);
     _textView.MoveCaretTo(caretPosition);
     _globalSettings = new GlobalSettings();
     var localSettings = new LocalSettings(_globalSettings);
     var vimTextBuffer = MockObjectFactory.CreateVimTextBuffer(_textView.TextBuffer, localSettings);
     _vimBufferData = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, _textView);
     _incrementalSearch = new Mock<IIncrementalSearch>(MockBehavior.Loose);
     _tracker = new SelectionTracker(_vimBufferData, _incrementalSearch.Object, kind);
     _tracker.Start();
 }
Beispiel #11
0
        private void Create(VisualKind kind, int caretPosition, params string[] lines)
        {
            _textView = CreateTextView(lines);
            _textView.MoveCaretTo(caretPosition);
            _globalSettings = new GlobalSettings();
            var localSettings = new LocalSettings(_globalSettings);
            var vimTextBuffer = MockObjectFactory.CreateVimTextBuffer(_textView.TextBuffer, localSettings);

            _vimBufferData     = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, _textView);
            _incrementalSearch = new Mock <IIncrementalSearch>(MockBehavior.Loose);
            _tracker           = new SelectionTracker(_vimBufferData, _incrementalSearch.Object, kind);
            _tracker.Start();
        }
Beispiel #12
0
        public void Start4()
        {
            Create(VisualKind.Character);
            var view = CreateTextView("foo bar baz");

            view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
            var vimTextBuffer = new Mock <IVimTextBuffer>(MockBehavior.Strict);

            vimTextBuffer.SetupGet(x => x.LocalSettings).Returns(new LocalSettings(_globalSettings));
            var vimBufferData = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, view);
            var tracker       = new SelectionTracker(vimBufferData, _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            Assert.Equal(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position);
        }
Beispiel #13
0
        public static Task <T> GetInputAsync <T>(this SelectionTracker tracker, Func <T, bool> filter)
        {
            var taskCompletor     = new TaskCompletionSource <T>();
            var highlightSelector = new SingleObjectHighlightSelector <T>(filter, (item) =>
            {
                taskCompletor.SetResult(item);
            }, () =>
            {
                taskCompletor.SetException(new ObjectSelectionCancelledException("Object selection overwritten by another input option"));
            });

            tracker.PushSelectionInput(highlightSelector);

            return(taskCompletor.Task);
        }
Beispiel #14
0
        public void StressTest_FewArtists_FewAlbums_ManySongs()
        {
            Console.WriteLine("Start it up! " + DateTime.Now);
            ViewModelFaker.InitializeLoadedAdminViewModel(ViewModelFaker.CreateSongsDistinct(5, 3, 500),
                                                          new FakeViewControl("path"));
            var viewModel = new SelectionTracker(JukeController.Instance.Browser);

            viewModel.SelectedArtist = Song.ALL_ARTISTS;
            Console.WriteLine("Roll it! " + DateTime.Now);
            var start = DateTime.Now;

            viewModel.SelectedArtist = "artist2";
            var end  = DateTime.Now;
            var diff = end - start;

            IsTrue(diff.TotalMilliseconds <= 500, diff.TotalMilliseconds + "ms - max 500ms!");
        }
Beispiel #15
0
        public void Start3()
        {
            var realView  = EditorUtil.CreateTextView("foo bar baz");
            var selection = new Mock <ITextSelection>(MockBehavior.Strict);

            selection.SetupGet(x => x.IsEmpty).Returns(false).Verifiable();
            selection.SetupGet(x => x.Mode).Returns(TextSelectionMode.Stream);
            selection.SetupGet(x => x.AnchorPoint).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 0));
            var view = new Mock <ITextView>(MockBehavior.Strict);

            view.SetupGet(x => x.TextBuffer).Returns(realView.TextBuffer);
            view.SetupGet(x => x.Caret).Returns(realView.Caret);
            view.SetupGet(x => x.TextSnapshot).Returns(realView.TextSnapshot);
            view.SetupGet(x => x.Selection).Returns(selection.Object);
            var tracker = new SelectionTracker(view.Object, _settings, _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            selection.Verify();
        }
Beispiel #16
0
        // --------------------------------------------------------------------------------------------
        /// <summary>
        /// Executes the internal initialization steps.
        /// </summary>
        // --------------------------------------------------------------------------------------------
        private void InternalInit()
        {
            // --- Set up command dispatching
            _CommandDispatcher = new CommandDispatcher <TPackage>(this);

            // --- Register command handlers
            var parentService = Package.GetService <IMenuCommandService, OleMenuCommandService>();
            var localService  = GetService <IMenuCommandService, OleMenuCommandService>();

            _CommandDispatcher.RegisterCommandHandlers(localService, parentService);

            // --- Create the selection tracker for the window
            SelectionTracker = new SelectionTracker(this);
            var container = CreateSelectionContainer();

            if (container != null)
            {
                SelectionTracker.Container = container;
            }
        }
Beispiel #17
0
        public void Start4()
        {
            Create(VisualKind.Character);
            var view = CreateTextView("foo bar baz");

            view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
            var vimTextBuffer = new Mock <IVimTextBuffer>(MockBehavior.Strict);

            vimTextBuffer.SetupGet(x => x.Vim).Returns(Vim);
            vimTextBuffer.SetupGet(x => x.UndoRedoOperations).Returns(_vimBufferData.VimTextBuffer.UndoRedoOperations);
            vimTextBuffer.SetupGet(x => x.WordNavigator).Returns(_vimBufferData.VimTextBuffer.WordNavigator);
            vimTextBuffer.SetupGet(x => x.WordUtil).Returns(_vimBufferData.VimTextBuffer.WordUtil);
            vimTextBuffer.SetupGet(x => x.LocalSettings).Returns(_vimBufferData.VimTextBuffer.LocalSettings);
            vimTextBuffer.SetupGet(x => x.UseVirtualSpace).Returns(false);
            vimTextBuffer.SetupSet(x => x.LastVisualSelection = It.IsAny <Microsoft.FSharp.Core.FSharpOption <VisualSelection> >());
            var vimBufferData    = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, view);
            var commonOperations = CommonOperationsFactory.GetCommonOperations(vimBufferData);
            var tracker          = new SelectionTracker(vimBufferData, commonOperations, _incrementalSearch.Object, VisualKind.Character);

            tracker.Start();
            Assert.Equal(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position);
        }
    private void MoveSelectedUnits()
    {
        if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }
        Node cursorNode = Utils.NodeAt(Utils.CursorToCoordinates());

        if (cursorNode is null)
        {
            return;
        }

        List <Human> colonists   = SelectionTracker.GetInstance().GetSelected <Human>();
        List <Node>  targetNodes = Dijkstra.DijkstraFor(colonists.Count, cursorNode);

        for (int i = 0; i < targetNodes.Count; i++)
        {
            Task moveTask = new Task();
            moveTask.AddCommand(new MoveCommand(colonists[i].MotionComponent, targetNodes[i].Position));
            colonists[i].AI.CommandProcessor.AddUrgentTask(moveTask);
        }
    }
Beispiel #19
0
        protected override void Initialize()
        {
            _selectionTracker = new SelectionTracker(this);
            uint cookie;
            IVsMonitorSelection monitorSelection = (IVsMonitorSelection)VSPackage.Instance.GetService(typeof(SVsShellMonitorSelection));

            ErrorHandler.ThrowOnFailure(monitorSelection.AdviseSelectionEvents(_selectionTracker, out cookie));

            fileNameLabel.Text = Res.NoCloneReportOrNoFileSelected;
            CloneDetectiveManager.CloneDetectiveResultChanged += delegate
            {
                string filePath = null;
                if (_sourceNode != null)
                {
                    filePath = _sourceNode.FullPath;
                }

                UpdateSelection(filePath);
                UpdateReferenceCloneVisualizationOffset();
            };

            UpdateReferenceCloneVisualizationOffset();
            UpdatePropertyGrid();
        }
Beispiel #20
0
 public void Start4()
 {
     Create(VisualKind.Character);
     var view = CreateTextView("foo bar baz");
     view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
     var vimTextBuffer = new Mock<IVimTextBuffer>(MockBehavior.Strict);
     vimTextBuffer.SetupGet(x => x.LocalSettings).Returns(new LocalSettings(_globalSettings));
     var vimBufferData = MockObjectFactory.CreateVimBufferData(vimTextBuffer.Object, view);
     var tracker = new SelectionTracker(vimBufferData, _incrementalSearch.Object, VisualKind.Character);
     tracker.Start();
     Assert.Equal(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position);
 }
 private void Create(SelectionMode mode, params string[] lines)
 {
     _view = EditorUtil.CreateView(lines);
     _tracker = new SelectionTracker(_view, mode);
     _tracker.Start();
 }
 public void Start4()
 {
     var view = EditorUtil.CreateView("foo bar baz");
     view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
     var tracker = new SelectionTracker(view, SelectionMode.Character);
     tracker.Start();
     Assert.AreEqual(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position.Position);
 }
 public void Start_DontResetSelection()
 {
     Create(VisualKind.Character, "");
     var realView = CreateTextView("foo bar baz");
     var selection = new Mock<ITextSelection>(MockBehavior.Strict);
     selection.SetupGet(x => x.IsEmpty).Returns(false).Verifiable();
     selection.SetupGet(x => x.AnchorPoint).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 0));
     selection.SetupProperty(x => x.Mode);
     var view = new Mock<ITextView>(MockBehavior.Strict);
     view.SetupGet(x => x.TextBuffer).Returns(realView.TextBuffer);
     view.SetupGet(x => x.Caret).Returns(realView.Caret);
     view.SetupGet(x => x.TextSnapshot).Returns(realView.TextSnapshot);
     view.SetupGet(x => x.Selection).Returns(selection.Object);
     var tracker = new SelectionTracker(view.Object, _globalSettings, _incrementalSearch.Object, VisualKind.Character);
     tracker.Start();
     selection.Verify();
 }
Beispiel #24
0
 protected virtual void SetupSelectionTracker() => SelectionTracker.GetInstance().SetSettings(new SelectionSettings());
Beispiel #25
0
        private async void Start()
        {
            var aggregator = new MessageAggregator();

            _relay = aggregator;
            IConfigStore       configStore  = new ConfigStore(Application.persistentDataPath);
            IPreviewImageStore previewStore = new PreviewImageStore(Application.persistentDataPath);

            _library = new Library(configStore, _previewBuilder, previewStore, _relay);
            var factory = new ImportFolderFactory(_library);

            // Misc
            var checker         = new UpdateChecker(_relay);
            var appVersionModel = new AppVersionDisplayModel(_relay);

            _tracker = new SelectionTracker(_library);

            // Main View
            var progressModel    = new ProgressModel();
            var applicationModel = new ApplicationModel(_relay);
            var searchViewModel  = new SearchModel(_library, _relay);
            var itemsViewModel   = new ItemsModel(_library, _relay);

            // Main Menu
            var importFoldersViewModel = new ImportFoldersModel(configStore, factory, _relay);
            var savedSearchesViewModel = new SavedSearchesModel(configStore, _relay);
            var collectionsViewModel   = new CollectionsModel(configStore, _library, _relay);

            // Detail Menu
            var detailMenuModel = new DetailMenuModel(_library, _relay);

            // Dialogs
            var addCollectionModel       = new AddCollectionModel(_relay);
            var addSavedSearchViewModel  = new AddSavedSearchModel(_relay);
            var addImportFolderViewModel = new AddImportFolderModel(_relay);
            var applicationSettingsModel = new ApplicationSettingsModel(configStore);
            var userFeedbackModel        = new UserFeedbackModel();
            var updateNotificationModel  = new UpdateNotificationModel(configStore);
            var exitingModel             = new ExitingModel(_library, OnShutdownComplete);
            var editScreenModel          = new EditScreenModel(_library);

            BindViewModels();
            BindSettings();

            // Wire up misc items
            _disposables.Add(importFoldersViewModel);
            _editScreen.MainView = _mainGroup;

            // Also restores app settings for import etc.
            await applicationSettingsModel.InitializeAsync();

            await _library.InitializeAsync();

            InitializeViewModelsAsync();

            aggregator.Subscribe(
                // Main View
                progressModel,
                searchViewModel,
                itemsViewModel,

                // Main Menu
                importFoldersViewModel,
                savedSearchesViewModel,
                collectionsViewModel,

                // DetailMenu
                detailMenuModel,

                // Misc
                appVersionModel,
                _tracker,

                // Dialogs
                addCollectionModel,
                addSavedSearchViewModel,
                addImportFolderViewModel,
                applicationSettingsModel,
                userFeedbackModel,
                updateNotificationModel,
                exitingModel,
                editScreenModel);

            void BindViewModels()
            {
                // Main View
                _progressView.BindTo(progressModel);
                _applicationView.BindTo(applicationModel);
                _searchView.BindTo(searchViewModel);
                _libraryView.BindTo(itemsViewModel);

                // Main Menu
                _importFoldersView.BindTo(importFoldersViewModel);
                _savedSearchesView.BindTo(savedSearchesViewModel);
                _collectionsView.BindTo(collectionsViewModel);

                // Detail Menu
                _detailMenu.BindTo(detailMenuModel);

                // Misc
                _versionButton.BindTo(appVersionModel);

                // Dialogs
                _addCollectionDialog.BindTo(addCollectionModel);
                _addImportFolderDialog.BindTo(addImportFolderViewModel);
                _addSavedSearchDialog.BindTo(addSavedSearchViewModel);
                _applicationSettingsDialog.BindTo(applicationSettingsModel);
                _userFeedbackDialog.BindTo(userFeedbackModel);
                _updateNotificationDialog.BindTo(updateNotificationModel);
                _exitingDialog.BindTo(exitingModel);
                _editScreen.BindTo(editScreenModel);
            }

            void BindSettings()
            {
                var rt = applicationSettingsModel.RuntimeSettings;

                rt.ImportParallelism.ValueChanged += factor => _library.Parallelism = factor;
                rt.LogLevel.ValueChanged          += logLevel => UnityLogger.LogLevel = logLevel;

                rt.UiScalePercent.ValueChanged += factor =>
                {
                    foreach (var canvas in FindObjectsOfTypeAll <CanvasScaler>())
                    {
                        canvas.scaleFactor = applicationSettingsModel.UiScalePercent / 125f;
                    }
                };

                rt.ScrollSensitivity.ValueChanged += sensitivity =>
                {
                    foreach (var area in FindObjectsOfType <ScrollRect>())
                    {
                        area.scrollSensitivity = sensitivity;
                    }
                };

                rt.PreviewResolution.ValueChanged  += res => _previewBuilder.PreviewResolution.Value = Mathf.RoundToInt(Mathf.Pow(2f, res));
                rt.PreviewJpegQuality.ValueChanged += quality => _previewBuilder.Quality = quality;
            }

            async void InitializeViewModelsAsync()
            {
                await savedSearchesViewModel.InitializeAsync();

                await importFoldersViewModel.InitializeAsync();

                await collectionsViewModel.InitializeAsync();

                await updateNotificationModel.InitializeAsync();

                // run update checks
                await checker.CheckForUpdatesAsync();
            }
        }
 private void OnLeftClickUp() => SelectionTracker.GetInstance().OnLeftMouseButtonUp();
 private void Create(VisualKind kind, int caretPosition, params string[] lines)
 {
     _textView = CreateTextView(lines);
     _textView.MoveCaretTo(caretPosition);
     _globalSettings = new GlobalSettings();
     _incrementalSearch = new Mock<IIncrementalSearch>(MockBehavior.Loose);
     _tracker = new SelectionTracker(_textView, _globalSettings, _incrementalSearch.Object, kind);
     _tracker.Start();
 }
 public void Start3()
 {
     var realView = EditorUtil.CreateView("foo bar baz");
     var selection = new Mock<ITextSelection>(MockBehavior.Strict);
     selection.SetupGet(x => x.IsEmpty).Returns(false).Verifiable();
     selection.SetupGet(x => x.Mode).Returns(TextSelectionMode.Stream);
     selection.SetupGet(x => x.AnchorPoint).Returns(new VirtualSnapshotPoint(realView.TextSnapshot, 0));
     var view = new Mock<ITextView>(MockBehavior.Strict);
     view.SetupGet(x => x.TextBuffer).Returns(realView.TextBuffer);
     view.SetupGet(x => x.Caret).Returns(realView.Caret);
     view.SetupGet(x => x.TextSnapshot).Returns(realView.TextSnapshot);
     view.SetupGet(x => x.Selection).Returns(selection.Object);
     var tracker = new SelectionTracker(view.Object, SelectionMode.Character);
     tracker.Start();
     selection.Verify();
 }
 public void Start4()
 {
     Create(VisualKind.Character);
     var view = CreateTextView("foo bar baz");
     view.Selection.Select(new SnapshotSpan(view.TextSnapshot, 1, 3), false);
     var tracker = new SelectionTracker(view, _globalSettings, _incrementalSearch.Object, VisualKind.Character);
     tracker.Start();
     Assert.Equal(view.Selection.AnchorPoint.Position.Position, tracker.AnchorPoint.Position);
 }
 public void TearDown()
 {
     _view = null;
     _tracker = null;
     SynchronizationContext.SetSynchronizationContext(_before);
 }
Beispiel #31
0
 protected void OnLeftMouseUp() => SelectionTracker.GetInstance().OnLeftMouseButtonUp();
Beispiel #32
0
 public KeyboardEventRouterOfGui(SelectionTracker selectionTracker)
 {
     this.selectionTracker = selectionTracker;
 }
 private void Create(VisualKind kind, int caretPosition, params string[] lines)
 {
     _view = EditorUtil.CreateView(lines);
     _view.MoveCaretTo(caretPosition);
     _settings = new Vim.GlobalSettings();
     _tracker = new SelectionTracker(_view, _settings, kind);
     _tracker.Start();
 }
Beispiel #34
0
 public void TearDown()
 {
     _view    = null;
     _tracker = null;
     SynchronizationContext.SetSynchronizationContext(_before);
 }
 public void OnLeftMouseButtonDown() => SelectionTracker.GetInstance().OnLeftMouseButtonDown();