mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 13:46:13 +00:00
status - make id/name a static thing that cannot change
This commit is contained in:
parent
8a97df9520
commit
12fb60ec2e
|
@ -20,16 +20,6 @@ export const enum StatusbarAlignment {
|
|||
*/
|
||||
export interface IStatusbarEntry {
|
||||
|
||||
/**
|
||||
* The identifier of the entry is needed to allow users to hide entries via settings.
|
||||
*/
|
||||
readonly id: string;
|
||||
|
||||
/**
|
||||
* A human readable name the entry is about.
|
||||
*/
|
||||
readonly name: string;
|
||||
|
||||
/**
|
||||
* The text to show for the entry. You can embed icons in the text by leveraging the syntax:
|
||||
*
|
||||
|
@ -80,8 +70,11 @@ export interface IStatusbarService {
|
|||
/**
|
||||
* Adds an entry to the statusbar with the given alignment and priority. Use the returned accessor
|
||||
* to update or remove the statusbar entry.
|
||||
*
|
||||
* @param id identifier of the entry is needed to allow users to hide entries via settings
|
||||
* @param name human readable name the entry is about
|
||||
*/
|
||||
addEntry(entry: IStatusbarEntry, alignment: StatusbarAlignment, priority?: number): IStatusbarEntryAccessor;
|
||||
addEntry(entry: IStatusbarEntry, id: string, name: string, alignment: StatusbarAlignment, priority?: number): IStatusbarEntryAccessor;
|
||||
}
|
||||
|
||||
export interface IStatusbarEntryAccessor extends IDisposable {
|
||||
|
|
|
@ -27,15 +27,7 @@ export class MainThreadStatusBar implements MainThreadStatusBarShape {
|
|||
}
|
||||
|
||||
$setEntry(id: number, extension: IExtensionDescription, text: string, tooltip: string, command: string, color: string | ThemeColor, alignment: MainThreadStatusBarAlignment, priority: number): void {
|
||||
const entry: IStatusbarEntry = {
|
||||
id: extension.identifier.value,
|
||||
name: localize('extensionLabel', "{0} (Extension)", extension.displayName || extension.name),
|
||||
text,
|
||||
tooltip,
|
||||
command,
|
||||
color,
|
||||
extensionId: extension.identifier
|
||||
};
|
||||
const entry: IStatusbarEntry = { text, tooltip, command, color, extensionId: extension.identifier };
|
||||
|
||||
// Reset existing entry if alignment or priority changed
|
||||
let existingEntry = this.entries.get(id);
|
||||
|
@ -47,7 +39,10 @@ export class MainThreadStatusBar implements MainThreadStatusBarShape {
|
|||
|
||||
// Create new entry if not existing
|
||||
if (!existingEntry) {
|
||||
this.entries.set(id, { accessor: this.statusbarService.addEntry(entry, alignment, priority), alignment, priority });
|
||||
const entryId = extension.identifier.value;
|
||||
const entryName = localize('extensionLabel', "{0} (Extension)", extension.displayName || extension.name);
|
||||
|
||||
this.entries.set(id, { accessor: this.statusbarService.addEntry(entry, entryId, entryName, alignment, priority), alignment, priority });
|
||||
}
|
||||
|
||||
// Otherwise update
|
||||
|
|
|
@ -58,8 +58,6 @@ export class NotificationsStatus extends Disposable {
|
|||
|
||||
private updateNotificationsCenterStatusItem(): void {
|
||||
const statusProperties: IStatusbarEntry = {
|
||||
id: 'status.notifications',
|
||||
name: localize('status.notifications', "Notifictions"),
|
||||
text: this.currentNotifications.size === 0 ? '$(bell)' : `$(bell) ${this.currentNotifications.size}`,
|
||||
command: this.isNotificationsCenterVisible ? HIDE_NOTIFICATIONS_CENTER : SHOW_NOTIFICATIONS_CENTER,
|
||||
tooltip: this.getTooltip(),
|
||||
|
@ -67,7 +65,7 @@ export class NotificationsStatus extends Disposable {
|
|||
};
|
||||
|
||||
if (!this.notificationsCenterStatusItem) {
|
||||
this.notificationsCenterStatusItem = this.statusbarService.addEntry(statusProperties, StatusbarAlignment.RIGHT, -1000 /* towards the far end of the right hand side */);
|
||||
this.notificationsCenterStatusItem = this.statusbarService.addEntry(statusProperties, 'status.notifications', localize('status.notifications', "Notifictions"), StatusbarAlignment.RIGHT, -1000 /* towards the far end of the right hand side */);
|
||||
} else {
|
||||
this.notificationsCenterStatusItem.update(statusProperties);
|
||||
}
|
||||
|
@ -139,11 +137,13 @@ export class NotificationsStatus extends Disposable {
|
|||
// Create new
|
||||
let statusMessageEntry: IStatusbarEntryAccessor;
|
||||
let showHandle: any = setTimeout(() => {
|
||||
statusMessageEntry = this.statusbarService.addEntry({
|
||||
id: 'status.message',
|
||||
name: localize('status.message', "Status Message"),
|
||||
text: message
|
||||
}, StatusbarAlignment.LEFT, -Number.MAX_VALUE /* far right on left hand side */);
|
||||
statusMessageEntry = this.statusbarService.addEntry(
|
||||
{ text: message },
|
||||
'status.message',
|
||||
localize('status.message', "Status Message"),
|
||||
StatusbarAlignment.LEFT,
|
||||
-Number.MAX_VALUE /* far right on left hand side */
|
||||
);
|
||||
showHandle = null;
|
||||
}, showAfter);
|
||||
|
||||
|
|
|
@ -37,6 +37,8 @@ import { Event, Emitter } from 'vs/base/common/event';
|
|||
import { values } from 'vs/base/common/map';
|
||||
|
||||
interface IPendingStatusbarEntry {
|
||||
id: string;
|
||||
name: string;
|
||||
entry: IStatusbarEntry;
|
||||
alignment: StatusbarAlignment;
|
||||
priority: number;
|
||||
|
@ -279,20 +281,20 @@ export class StatusbarPart extends Part implements IStatusbarService {
|
|||
});
|
||||
}
|
||||
|
||||
addEntry(entry: IStatusbarEntry, alignment: StatusbarAlignment, priority: number = 0): IStatusbarEntryAccessor {
|
||||
addEntry(entry: IStatusbarEntry, id: string, name: string, alignment: StatusbarAlignment, priority: number = 0): IStatusbarEntryAccessor {
|
||||
|
||||
// As long as we have not been created into a container yet, record all entries
|
||||
// that are pending so that they can get created at a later point
|
||||
if (!this.element) {
|
||||
return this.doAddPendingEntry(entry, alignment, priority);
|
||||
return this.doAddPendingEntry(entry, id, name, alignment, priority);
|
||||
}
|
||||
|
||||
// Otherwise add to view
|
||||
return this.doAddEntry(entry, alignment, priority);
|
||||
return this.doAddEntry(entry, id, name, alignment, priority);
|
||||
}
|
||||
|
||||
private doAddPendingEntry(entry: IStatusbarEntry, alignment: StatusbarAlignment, priority: number): IStatusbarEntryAccessor {
|
||||
const pendingEntry: IPendingStatusbarEntry = { entry, alignment, priority };
|
||||
private doAddPendingEntry(entry: IStatusbarEntry, id: string, name: string, alignment: StatusbarAlignment, priority: number): IStatusbarEntryAccessor {
|
||||
const pendingEntry: IPendingStatusbarEntry = { entry, id, name, alignment, priority };
|
||||
this.pendingEntries.push(pendingEntry);
|
||||
|
||||
const accessor: IStatusbarEntryAccessor = {
|
||||
|
@ -316,14 +318,14 @@ export class StatusbarPart extends Part implements IStatusbarService {
|
|||
return accessor;
|
||||
}
|
||||
|
||||
private doAddEntry(entry: IStatusbarEntry, alignment: StatusbarAlignment, priority: number): IStatusbarEntryAccessor {
|
||||
private doAddEntry(entry: IStatusbarEntry, id: string, name: string, alignment: StatusbarAlignment, priority: number): IStatusbarEntryAccessor {
|
||||
|
||||
// Add to view model
|
||||
const viewModelItem: IStatusbarViewModelItem = { id: entry.id, name: entry.name, alignment, priority };
|
||||
const viewModelItem: IStatusbarViewModelItem = { id, name, alignment, priority };
|
||||
this.viewModel.add(viewModelItem);
|
||||
|
||||
// Render entry in status bar
|
||||
const itemContainer = this.doCreateStatusItem(entry.id, entry.name, alignment, priority, ...coalesce(['statusbar-entry', entry.showBeak ? 'has-beak' : undefined]));
|
||||
const itemContainer = this.doCreateStatusItem(id, name, alignment, priority, ...coalesce(['statusbar-entry', entry.showBeak ? 'has-beak' : undefined]));
|
||||
const item = this.instantiationService.createInstance(StatusbarEntryItem, itemContainer, entry);
|
||||
|
||||
// Insert according to priority
|
||||
|
@ -445,9 +447,9 @@ export class StatusbarPart extends Part implements IStatusbarService {
|
|||
|
||||
// Fill in pending entries if any
|
||||
while (this.pendingEntries.length) {
|
||||
const entry = this.pendingEntries.shift();
|
||||
if (entry) {
|
||||
entry.accessor = this.addEntry(entry.entry, entry.alignment, entry.priority);
|
||||
const pending = this.pendingEntries.shift();
|
||||
if (pending) {
|
||||
pending.accessor = this.addEntry(pending.entry, pending.id, pending.name, pending.alignment, pending.priority);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,17 +23,21 @@ export class DebugStatusContribution implements IWorkbenchContribution {
|
|||
@IConfigurationService readonly configurationService: IConfigurationService
|
||||
) {
|
||||
|
||||
const addStatusBarEntry = () => {
|
||||
this.entryAccessor = this.statusBarService.addEntry(this.entry, 'status.debug', nls.localize('status.debug', "Debug Configuration"), StatusbarAlignment.LEFT, 30 /* Low Priority */);
|
||||
};
|
||||
|
||||
const setShowInStatusBar = () => {
|
||||
this.showInStatusBar = configurationService.getValue<IDebugConfiguration>('debug').showInStatusBar;
|
||||
if (this.showInStatusBar === 'always' && !this.entryAccessor) {
|
||||
this.entryAccessor = this.statusBarService.addEntry(this.entry, StatusbarAlignment.LEFT, 30 /* Low Priority */);
|
||||
addStatusBarEntry();
|
||||
}
|
||||
};
|
||||
setShowInStatusBar();
|
||||
|
||||
this.toDispose.push(this.debugService.onDidChangeState(state => {
|
||||
if (state !== State.Inactive && this.showInStatusBar === 'onFirstSessionStart' && !this.entryAccessor) {
|
||||
this.entryAccessor = this.statusBarService.addEntry(this.entry, StatusbarAlignment.LEFT, 30 /* Low Priority */);
|
||||
addStatusBarEntry();
|
||||
}
|
||||
}));
|
||||
this.toDispose.push(configurationService.onDidChangeConfiguration(e => {
|
||||
|
@ -65,8 +69,6 @@ export class DebugStatusContribution implements IWorkbenchContribution {
|
|||
|
||||
private get entry(): IStatusbarEntry {
|
||||
return {
|
||||
id: 'status.debug',
|
||||
name: nls.localize('status.debug', "Debug Configuration"),
|
||||
text: this.getText(),
|
||||
tooltip: nls.localize('selectAndStartDebug', "Select and start debug configuration"),
|
||||
command: 'workbench.action.debug.selectandstart'
|
||||
|
|
|
@ -84,8 +84,6 @@ export class ExtensionHostProfileService extends Disposable implements IExtensio
|
|||
|
||||
if (visible) {
|
||||
const indicator: IStatusbarEntry = {
|
||||
id: 'status.profiler',
|
||||
name: nls.localize('status.profiler', "Extension Profiler"),
|
||||
text: nls.localize('profilingExtensionHost', "$(sync~spin) Profiling Extension Host"),
|
||||
tooltip: nls.localize('selectAndStartDebug', "Click to stop profiling."),
|
||||
command: 'workbench.action.extensionHostProfilder.stop'
|
||||
|
@ -100,7 +98,7 @@ export class ExtensionHostProfileService extends Disposable implements IExtensio
|
|||
this.profilingStatusBarIndicatorLabelUpdater = toDisposable(() => clearInterval(handle));
|
||||
|
||||
if (!this.profilingStatusBarIndicator) {
|
||||
this.profilingStatusBarIndicator = this._statusbarService.addEntry(indicator, StatusbarAlignment.RIGHT);
|
||||
this.profilingStatusBarIndicator = this._statusbarService.addEntry(indicator, 'status.profiler', nls.localize('status.profiler', "Extension Profiler"), StatusbarAlignment.RIGHT);
|
||||
} else {
|
||||
this.profilingStatusBarIndicator.update(indicator);
|
||||
}
|
||||
|
|
|
@ -279,15 +279,13 @@ class MarkersStatusBarContributions extends Disposable implements IWorkbenchCont
|
|||
@IStatusbarService private readonly statusbarService: IStatusbarService
|
||||
) {
|
||||
super();
|
||||
this.markersStatusItem = this._register(this.statusbarService.addEntry(this.getMarkersItem(), StatusbarAlignment.LEFT, 50 /* Medium Priority */));
|
||||
this.markersStatusItem = this._register(this.statusbarService.addEntry(this.getMarkersItem(), 'status.problems', localize('status.problems', "Problems"), StatusbarAlignment.LEFT, 50 /* Medium Priority */));
|
||||
this.markerService.onMarkerChanged(() => this.markersStatusItem.update(this.getMarkersItem()));
|
||||
}
|
||||
|
||||
private getMarkersItem(): IStatusbarEntry {
|
||||
const markersStatistics = this.markerService.getStatistics();
|
||||
return {
|
||||
id: 'status.problems',
|
||||
name: localize('status.problems', "Problems"),
|
||||
text: this.getMarkersText(markersStatistics),
|
||||
tooltip: this.getMarkersTooltip(markersStatistics),
|
||||
command: 'workbench.actions.view.toggleProblems'
|
||||
|
|
|
@ -138,14 +138,12 @@ export class RemoteWindowActiveIndicator extends Disposable implements IWorkbenc
|
|||
|
||||
private renderWindowIndicator(text: string, tooltip?: string, command?: string): void {
|
||||
const properties: IStatusbarEntry = {
|
||||
id: 'status.host',
|
||||
name: nls.localize('status.host', "Remote Host"),
|
||||
backgroundColor: themeColorFromId(STATUS_BAR_HOST_NAME_BACKGROUND), color: themeColorFromId(STATUS_BAR_HOST_NAME_FOREGROUND), text, tooltip, command
|
||||
};
|
||||
if (this.windowIndicatorEntry) {
|
||||
this.windowIndicatorEntry.update(properties);
|
||||
} else {
|
||||
this.windowIndicatorEntry = this.statusbarService.addEntry(properties, StatusbarAlignment.LEFT, Number.MAX_VALUE /* first entry */);
|
||||
this.windowIndicatorEntry = this.statusbarService.addEntry(properties, 'status.host', nls.localize('status.host', "Remote Host"), StatusbarAlignment.LEFT, Number.MAX_VALUE /* first entry */);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -190,13 +190,11 @@ export class StatusBarController implements IWorkbenchContribution {
|
|||
const disposables = new DisposableStore();
|
||||
for (const c of commands) {
|
||||
disposables.add(this.statusbarService.addEntry({
|
||||
id: 'status.scm',
|
||||
name: localize('status.scm', "Source Control"),
|
||||
text: c.title,
|
||||
tooltip: `${label} - ${c.tooltip}`,
|
||||
command: c.id,
|
||||
arguments: c.arguments
|
||||
}, MainThreadStatusBarAlignment.LEFT, 10000));
|
||||
}, 'status.scm', localize('status.scm', "Source Control"), MainThreadStatusBarAlignment.LEFT, 10000));
|
||||
}
|
||||
|
||||
this.statusBarDisposable = disposables;
|
||||
|
|
|
@ -182,15 +182,13 @@ export class TaskStatusBarContributions extends Disposable implements IWorkbench
|
|||
}
|
||||
} else {
|
||||
const itemProps: IStatusbarEntry = {
|
||||
id: 'status.runningTasks',
|
||||
name: nls.localize('status.runningTasks', "Running Tasks"),
|
||||
text: `$(tools) ${tasks.length}`,
|
||||
tooltip: nls.localize('runningTasks', "Show Running Tasks"),
|
||||
command: 'workbench.action.tasks.showTasks',
|
||||
};
|
||||
|
||||
if (!this.runningTasksStatusItem) {
|
||||
this.runningTasksStatusItem = this.statusbarService.addEntry(itemProps, StatusbarAlignment.LEFT, 50 /* Medium Priority */);
|
||||
this.runningTasksStatusItem = this.statusbarService.addEntry(itemProps, 'status.runningTasks', nls.localize('status.runningTasks', "Running Tasks"), StatusbarAlignment.LEFT, 50 /* Medium Priority */);
|
||||
} else {
|
||||
this.runningTasksStatusItem.update(itemProps);
|
||||
}
|
||||
|
|
|
@ -129,11 +129,9 @@ export class ProgressService implements IProgressService {
|
|||
}
|
||||
|
||||
this._globalStatusEntry = this._statusbarService.addEntry({
|
||||
id: 'status.progress',
|
||||
name: localize('status.progress', "Progress Message"),
|
||||
text: `$(sync~spin) ${text}`,
|
||||
tooltip: title
|
||||
}, StatusbarAlignment.LEFT);
|
||||
}, 'status.progress', localize('status.progress', "Progress Message"), StatusbarAlignment.LEFT);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue