mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-11 10:38:31 -05:00
118 lines
4.0 KiB
TypeScript
118 lines
4.0 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { $, append, show, hide } from 'vs/base/browser/dom';
|
|
import { IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';
|
|
import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
|
|
import { IEditorCloseEvent } from 'vs/workbench/common/editor';
|
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
|
import * as LocalizedConstants from 'sql/workbench/parts/query/common/localizedConstants';
|
|
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
|
|
import { EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
|
|
|
|
// Query execution status
|
|
enum QueryExecutionStatus {
|
|
Executing,
|
|
Completed
|
|
}
|
|
|
|
// Shows query status in the editor
|
|
export class QueryStatusbarItem implements IStatusbarItem {
|
|
|
|
private _element: HTMLElement;
|
|
private _queryElement: HTMLElement;
|
|
private _queryStatusEditors: { [editorUri: string]: QueryExecutionStatus };
|
|
private _toDispose: IDisposable[];
|
|
|
|
constructor(
|
|
@IQueryModelService private _queryModelService: IQueryModelService,
|
|
@IEditorService private _editorService: EditorServiceImpl
|
|
) {
|
|
this._queryStatusEditors = {};
|
|
}
|
|
|
|
public render(container: HTMLElement): IDisposable {
|
|
this._element = append(container, $('.query-statusbar-group'));
|
|
this._queryElement = append(this._element, $('div.query-statusbar-item'));
|
|
hide(this._queryElement);
|
|
|
|
this._toDispose = [];
|
|
this._toDispose.push(
|
|
this._queryModelService.onRunQueryStart((uri: string) => this._onRunQueryStart(uri)),
|
|
this._queryModelService.onRunQueryComplete((uri: string) => this._onRunQueryComplete(uri)),
|
|
this._editorService.onDidVisibleEditorsChange(() => this._onEditorsChanged()),
|
|
this._editorService.onDidCloseEditor(event => this._onEditorClosed(event))
|
|
);
|
|
|
|
return combinedDisposable(this._toDispose);
|
|
}
|
|
|
|
private _onEditorClosed(event: IEditorCloseEvent): void {
|
|
let uri = WorkbenchUtils.getEditorUri(event.editor);
|
|
if (uri && uri in this._queryStatusEditors) {
|
|
// If active editor is being closed, hide the query status.
|
|
let activeEditor = this._editorService.activeControl;
|
|
if (activeEditor) {
|
|
let currentUri = WorkbenchUtils.getEditorUri(activeEditor.input);
|
|
if (uri === currentUri) {
|
|
hide(this._queryElement);
|
|
}
|
|
}
|
|
delete this._queryStatusEditors[uri];
|
|
}
|
|
}
|
|
|
|
private _onEditorsChanged(): void {
|
|
let activeEditor = this._editorService.activeControl;
|
|
if (activeEditor) {
|
|
let uri = WorkbenchUtils.getEditorUri(activeEditor.input);
|
|
|
|
// Show active editor's query status
|
|
if (uri && uri in this._queryStatusEditors) {
|
|
this._showStatus(uri);
|
|
} else {
|
|
hide(this._queryElement);
|
|
}
|
|
} else {
|
|
hide(this._queryElement);
|
|
}
|
|
}
|
|
|
|
private _onRunQueryStart(uri: string): void {
|
|
this._updateStatus(uri, QueryExecutionStatus.Executing);
|
|
}
|
|
|
|
private _onRunQueryComplete(uri: string): void {
|
|
this._updateStatus(uri, QueryExecutionStatus.Completed);
|
|
}
|
|
|
|
// Update query status for the editor
|
|
private _updateStatus(uri: string, newStatus: QueryExecutionStatus) {
|
|
if (uri) {
|
|
this._queryStatusEditors[uri] = newStatus;
|
|
this._showStatus(uri);
|
|
}
|
|
}
|
|
|
|
// Show/hide query status for active editor
|
|
private _showStatus(uri: string): void {
|
|
let activeEditor = this._editorService.activeControl;
|
|
if (activeEditor) {
|
|
let currentUri = WorkbenchUtils.getEditorUri(activeEditor.input);
|
|
if (uri === currentUri) {
|
|
switch (this._queryStatusEditors[uri]) {
|
|
case QueryExecutionStatus.Executing:
|
|
this._queryElement.textContent = LocalizedConstants.msgStatusRunQueryInProgress;
|
|
show(this._queryElement);
|
|
break;
|
|
default:
|
|
hide(this._queryElement);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|