| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import './overlayWidgets.css';
- import { createFastDomNode } from '../../../../base/browser/fastDomNode.js';
- import { PartFingerprints, ViewPart } from '../../view/viewPart.js';
- export class ViewOverlayWidgets extends ViewPart {
- constructor(context) {
- super(context);
- const options = this._context.configuration.options;
- const layoutInfo = options.get(133 /* EditorOption.layoutInfo */);
- this._widgets = {};
- this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;
- this._minimapWidth = layoutInfo.minimap.minimapWidth;
- this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;
- this._editorHeight = layoutInfo.height;
- this._editorWidth = layoutInfo.width;
- this._domNode = createFastDomNode(document.createElement('div'));
- PartFingerprints.write(this._domNode, 4 /* PartFingerprint.OverlayWidgets */);
- this._domNode.setClassName('overlayWidgets');
- }
- dispose() {
- super.dispose();
- this._widgets = {};
- }
- getDomNode() {
- return this._domNode;
- }
- // ---- begin view event handlers
- onConfigurationChanged(e) {
- const options = this._context.configuration.options;
- const layoutInfo = options.get(133 /* EditorOption.layoutInfo */);
- this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;
- this._minimapWidth = layoutInfo.minimap.minimapWidth;
- this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;
- this._editorHeight = layoutInfo.height;
- this._editorWidth = layoutInfo.width;
- return true;
- }
- // ---- end view event handlers
- addWidget(widget) {
- const domNode = createFastDomNode(widget.getDomNode());
- this._widgets[widget.getId()] = {
- widget: widget,
- preference: null,
- domNode: domNode
- };
- // This is sync because a widget wants to be in the dom
- domNode.setPosition('absolute');
- domNode.setAttribute('widgetId', widget.getId());
- this._domNode.appendChild(domNode);
- this.setShouldRender();
- }
- setWidgetPosition(widget, preference) {
- const widgetData = this._widgets[widget.getId()];
- if (widgetData.preference === preference) {
- return false;
- }
- widgetData.preference = preference;
- this.setShouldRender();
- return true;
- }
- removeWidget(widget) {
- const widgetId = widget.getId();
- if (this._widgets.hasOwnProperty(widgetId)) {
- const widgetData = this._widgets[widgetId];
- const domNode = widgetData.domNode.domNode;
- delete this._widgets[widgetId];
- domNode.parentNode.removeChild(domNode);
- this.setShouldRender();
- }
- }
- _renderWidget(widgetData) {
- const domNode = widgetData.domNode;
- if (widgetData.preference === null) {
- domNode.setTop('');
- return;
- }
- if (widgetData.preference === 0 /* OverlayWidgetPositionPreference.TOP_RIGHT_CORNER */) {
- domNode.setTop(0);
- domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);
- }
- else if (widgetData.preference === 1 /* OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER */) {
- const widgetHeight = domNode.domNode.clientHeight;
- domNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));
- domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);
- }
- else if (widgetData.preference === 2 /* OverlayWidgetPositionPreference.TOP_CENTER */) {
- domNode.setTop(0);
- domNode.domNode.style.right = '50%';
- }
- }
- prepareRender(ctx) {
- // Nothing to read
- }
- render(ctx) {
- this._domNode.setWidth(this._editorWidth);
- const keys = Object.keys(this._widgets);
- for (let i = 0, len = keys.length; i < len; i++) {
- const widgetId = keys[i];
- this._renderWidget(this._widgets[widgetId]);
- }
- }
- }
|