123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import { CoreNavigationCommands } from '../controller/coreCommands.js';
- import { Position } from '../../common/core/position.js';
- import * as platform from '../../../base/common/platform.js';
- export class ViewController {
- constructor(configuration, viewModel, userInputEvents, commandDelegate) {
- this.configuration = configuration;
- this.viewModel = viewModel;
- this.userInputEvents = userInputEvents;
- this.commandDelegate = commandDelegate;
- }
- paste(text, pasteOnNewLine, multicursorText, mode) {
- this.commandDelegate.paste(text, pasteOnNewLine, multicursorText, mode);
- }
- type(text) {
- this.commandDelegate.type(text);
- }
- compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {
- this.commandDelegate.compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta);
- }
- compositionStart() {
- this.commandDelegate.startComposition();
- }
- compositionEnd() {
- this.commandDelegate.endComposition();
- }
- cut() {
- this.commandDelegate.cut();
- }
- setSelection(modelSelection) {
- CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel, {
- source: 'keyboard',
- selection: modelSelection
- });
- }
- _validateViewColumn(viewPosition) {
- const minColumn = this.viewModel.getLineMinColumn(viewPosition.lineNumber);
- if (viewPosition.column < minColumn) {
- return new Position(viewPosition.lineNumber, minColumn);
- }
- return viewPosition;
- }
- _hasMulticursorModifier(data) {
- switch (this.configuration.options.get(69 /* multiCursorModifier */)) {
- case 'altKey':
- return data.altKey;
- case 'ctrlKey':
- return data.ctrlKey;
- case 'metaKey':
- return data.metaKey;
- default:
- return false;
- }
- }
- _hasNonMulticursorModifier(data) {
- switch (this.configuration.options.get(69 /* multiCursorModifier */)) {
- case 'altKey':
- return data.ctrlKey || data.metaKey;
- case 'ctrlKey':
- return data.altKey || data.metaKey;
- case 'metaKey':
- return data.ctrlKey || data.altKey;
- default:
- return false;
- }
- }
- dispatchMouse(data) {
- const options = this.configuration.options;
- const selectionClipboardIsOn = (platform.isLinux && options.get(95 /* selectionClipboard */));
- const columnSelection = options.get(18 /* columnSelection */);
- if (data.middleButton && !selectionClipboardIsOn) {
- this._columnSelect(data.position, data.mouseColumn, data.inSelectionMode);
- }
- else if (data.startedOnLineNumbers) {
- // If the dragging started on the gutter, then have operations work on the entire line
- if (this._hasMulticursorModifier(data)) {
- if (data.inSelectionMode) {
- this._lastCursorLineSelect(data.position);
- }
- else {
- this._createCursor(data.position, true);
- }
- }
- else {
- if (data.inSelectionMode) {
- this._lineSelectDrag(data.position);
- }
- else {
- this._lineSelect(data.position);
- }
- }
- }
- else if (data.mouseDownCount >= 4) {
- this._selectAll();
- }
- else if (data.mouseDownCount === 3) {
- if (this._hasMulticursorModifier(data)) {
- if (data.inSelectionMode) {
- this._lastCursorLineSelectDrag(data.position);
- }
- else {
- this._lastCursorLineSelect(data.position);
- }
- }
- else {
- if (data.inSelectionMode) {
- this._lineSelectDrag(data.position);
- }
- else {
- this._lineSelect(data.position);
- }
- }
- }
- else if (data.mouseDownCount === 2) {
- if (this._hasMulticursorModifier(data)) {
- this._lastCursorWordSelect(data.position);
- }
- else {
- if (data.inSelectionMode) {
- this._wordSelectDrag(data.position);
- }
- else {
- this._wordSelect(data.position);
- }
- }
- }
- else {
- if (this._hasMulticursorModifier(data)) {
- if (!this._hasNonMulticursorModifier(data)) {
- if (data.shiftKey) {
- this._columnSelect(data.position, data.mouseColumn, true);
- }
- else {
- // Do multi-cursor operations only when purely alt is pressed
- if (data.inSelectionMode) {
- this._lastCursorMoveToSelect(data.position);
- }
- else {
- this._createCursor(data.position, false);
- }
- }
- }
- }
- else {
- if (data.inSelectionMode) {
- if (data.altKey) {
- this._columnSelect(data.position, data.mouseColumn, true);
- }
- else {
- if (columnSelection) {
- this._columnSelect(data.position, data.mouseColumn, true);
- }
- else {
- this._moveToSelect(data.position);
- }
- }
- }
- else {
- this.moveTo(data.position);
- }
- }
- }
- }
- _usualArgs(viewPosition) {
- viewPosition = this._validateViewColumn(viewPosition);
- return {
- source: 'mouse',
- position: this._convertViewToModelPosition(viewPosition),
- viewPosition: viewPosition
- };
- }
- moveTo(viewPosition) {
- CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _moveToSelect(viewPosition) {
- CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _columnSelect(viewPosition, mouseColumn, doColumnSelect) {
- viewPosition = this._validateViewColumn(viewPosition);
- CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel, {
- source: 'mouse',
- position: this._convertViewToModelPosition(viewPosition),
- viewPosition: viewPosition,
- mouseColumn: mouseColumn,
- doColumnSelect: doColumnSelect
- });
- }
- _createCursor(viewPosition, wholeLine) {
- viewPosition = this._validateViewColumn(viewPosition);
- CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel, {
- source: 'mouse',
- position: this._convertViewToModelPosition(viewPosition),
- viewPosition: viewPosition,
- wholeLine: wholeLine
- });
- }
- _lastCursorMoveToSelect(viewPosition) {
- CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _wordSelect(viewPosition) {
- CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _wordSelectDrag(viewPosition) {
- CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _lastCursorWordSelect(viewPosition) {
- CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _lineSelect(viewPosition) {
- CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _lineSelectDrag(viewPosition) {
- CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _lastCursorLineSelect(viewPosition) {
- CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _lastCursorLineSelectDrag(viewPosition) {
- CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));
- }
- _selectAll() {
- CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel, { source: 'mouse' });
- }
- // ----------------------
- _convertViewToModelPosition(viewPosition) {
- return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(viewPosition);
- }
- emitKeyDown(e) {
- this.userInputEvents.emitKeyDown(e);
- }
- emitKeyUp(e) {
- this.userInputEvents.emitKeyUp(e);
- }
- emitContextMenu(e) {
- this.userInputEvents.emitContextMenu(e);
- }
- emitMouseMove(e) {
- this.userInputEvents.emitMouseMove(e);
- }
- emitMouseLeave(e) {
- this.userInputEvents.emitMouseLeave(e);
- }
- emitMouseUp(e) {
- this.userInputEvents.emitMouseUp(e);
- }
- emitMouseDown(e) {
- this.userInputEvents.emitMouseDown(e);
- }
- emitMouseDrag(e) {
- this.userInputEvents.emitMouseDrag(e);
- }
- emitMouseDrop(e) {
- this.userInputEvents.emitMouseDrop(e);
- }
- emitMouseDropCanceled() {
- this.userInputEvents.emitMouseDropCanceled();
- }
- emitMouseWheel(e) {
- this.userInputEvents.emitMouseWheel(e);
- }
- }
|