Refactored editors.component and tabs.service
This commit is contained in:
parent
a4d602f98a
commit
a0914e8096
@ -45,45 +45,21 @@ export class TabsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getLeftSiblingTab(fpath: string): string {
|
public getLeftSiblingTab(fpath: string): string {
|
||||||
let size = this.tabs.length;
|
if (this.tabs.length === 0 ) return;
|
||||||
let i = 0;
|
|
||||||
|
|
||||||
for (; i < size; i++) {
|
let i = this.tabs.indexOf(fpath);
|
||||||
if (this.tabs[i].path == fpath) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !(size > 1) ) {
|
(i === 0) ? i = this.tabs.length - 1 : i -= 1;
|
||||||
return "";
|
return this.tabs[i].path;
|
||||||
}
|
|
||||||
|
|
||||||
if ( i === 0 ) {
|
|
||||||
return this.tabs[i + 1].path;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.tabs[i - 1].path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public getRightSiblingTab(fpath: string): string {
|
public getRightSiblingTab(fpath: string): string {
|
||||||
let size = this.tabs.length;
|
if (this.tabs.length === 0 ) return;
|
||||||
let i = 0;
|
|
||||||
|
|
||||||
for (; i < size; i++) {
|
let i = this.tabs.indexOf(fpath);
|
||||||
if (this.tabs[i].path == fpath) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !(size > 1) ) {
|
(i === (this.tabs.length - 1)) ? i = 0 : i += 1;
|
||||||
return "";
|
return this.tabs[i].path;
|
||||||
}
|
|
||||||
|
|
||||||
if ( i === (size - 1) ) {
|
|
||||||
return this.tabs[i - 1].path;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.tabs[i + 1].path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public setNewTargetIndex(fpath: string): void {
|
public setNewTargetIndex(fpath: string): void {
|
||||||
|
@ -41,17 +41,19 @@ export class FilesService {
|
|||||||
|
|
||||||
public getPreviousFile(path: string): NewtonFile {
|
public getPreviousFile(path: string): NewtonFile {
|
||||||
let paths = this.getAllPaths();
|
let paths = this.getAllPaths();
|
||||||
let i = paths.indexOf(path);
|
if (paths.length === 0 ) return;
|
||||||
|
|
||||||
(i == 0) ? i += 1 : i -= 1;
|
let i = paths.indexOf(path);
|
||||||
|
(i === 0) ? i = paths.length - 1 : i -= 1;
|
||||||
return this.files.get( paths[i] );
|
return this.files.get( paths[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
public getNextFile(path: string): NewtonFile {
|
public getNextFile(path: string): NewtonFile {
|
||||||
let paths = this.getAllPaths();
|
let paths = this.getAllPaths();
|
||||||
let i = paths.indexOf(path);
|
if (paths.length === 0 ) return;
|
||||||
|
|
||||||
(i > paths.length) ? i -= 1 : i += 1;
|
let i = paths.indexOf(path);
|
||||||
|
(i === (paths.length - 1)) ? i = 0 : i += 1;
|
||||||
return this.files.get( paths[i] );
|
return this.files.get( paths[i] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,8 +187,7 @@ export class CodeViewComponent extends CodeViewBase {
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.zoomIn();
|
this.zoomIn();
|
||||||
}
|
} else if (event.domEvent.ctrlKey && event.domEvent.deltaY > 0) {
|
||||||
else if (event.domEvent.ctrlKey && event.domEvent.deltaY > 0) {
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.zoomOut();
|
this.zoomOut();
|
||||||
|
@ -55,109 +55,80 @@ export class EditorsComponent {
|
|||||||
this.editorsService.getMessage$().pipe(
|
this.editorsService.getMessage$().pipe(
|
||||||
takeUntil(this.unsubscribe)
|
takeUntil(this.unsubscribe)
|
||||||
).subscribe((message: ServiceMessage) => {
|
).subscribe((message: ServiceMessage) => {
|
||||||
if (message.action === "select-left-editor") {
|
switch ( message.action ) {
|
||||||
let editorComponent = this.editorsService.get(message.editorUUID);
|
case "select-left-editor":
|
||||||
if (!editorComponent.leftSiblingUUID) return;
|
this.selectLeftEditor(message);
|
||||||
let siblingComponent = this.editorsService.get(editorComponent.leftSiblingUUID);
|
break;
|
||||||
siblingComponent.editor.focus()
|
case "select-right-editor":
|
||||||
} else if (message.action === "select-right-editor") {
|
this.selectRightEditor(message);
|
||||||
let editorComponent = this.editorsService.get(message.editorUUID);
|
break;
|
||||||
if (!editorComponent.rightSiblingUUID) return;
|
case "move-session-left":
|
||||||
let siblingComponent = this.editorsService.get(editorComponent.rightSiblingUUID);
|
this.moveSessionLeft(message);
|
||||||
siblingComponent.editor.focus()
|
break;
|
||||||
} else if (message.action === "move-session-left") {
|
case "move-session-right":
|
||||||
let editorComponent = this.editorsService.get(message.editorUUID);
|
this.moveSessionRight(message);
|
||||||
if (!editorComponent.leftSiblingUUID) return;
|
break;
|
||||||
|
case "set-active-editor":
|
||||||
let siblingComponent = this.editorsService.get(editorComponent.leftSiblingUUID);
|
this.setActiveEditor(message);
|
||||||
let session = editorComponent.editor.getSession();
|
break;
|
||||||
let siblingSession = siblingComponent.editor.getSession();
|
case "set-tab-to-editor":
|
||||||
|
this.setTabToEditor(message);
|
||||||
if (session == siblingSession) return;
|
break;
|
||||||
|
case "close-tab":
|
||||||
siblingComponent.assignSession(editorComponent.activeFile);
|
this.closeTab(message);
|
||||||
|
break;
|
||||||
let targetPath = this.tabsService.getRightSiblingTab(
|
default:
|
||||||
editorComponent.activeFile.path
|
break;
|
||||||
)
|
|
||||||
if (targetPath) {
|
|
||||||
editorComponent.assignSession(
|
|
||||||
this.filesService.get(targetPath)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
editorComponent.newFile();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
siblingComponent.editor.focus()
|
|
||||||
} else if (message.action === "move-session-right") {
|
|
||||||
let editorComponent = this.editorsService.get(message.editorUUID);
|
|
||||||
if (!editorComponent.rightSiblingUUID) return;
|
|
||||||
|
|
||||||
let siblingComponent = this.editorsService.get(editorComponent.rightSiblingUUID);
|
|
||||||
let session = editorComponent.editor.getSession();
|
|
||||||
let siblingSession = siblingComponent.editor.getSession();
|
|
||||||
|
|
||||||
if (session == siblingSession) return;
|
|
||||||
|
|
||||||
siblingComponent.assignSession(editorComponent.activeFile);
|
|
||||||
|
|
||||||
let targetPath = this.tabsService.getRightSiblingTab(
|
|
||||||
editorComponent.activeFile.path
|
|
||||||
)
|
|
||||||
if (targetPath) {
|
|
||||||
editorComponent.assignSession(
|
|
||||||
this.filesService.get(targetPath)
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
editorComponent.newFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
siblingComponent.editor.focus()
|
|
||||||
} else if (message.action === "set-active-editor") {
|
|
||||||
this.editorsService.getActiveEditorComponent().removeActiveStyling();
|
|
||||||
this.editorsService.setActiveEditor(message.editorUUID);
|
|
||||||
this.editorsService.getActiveEditorComponent().addActiveStyling();
|
|
||||||
} else if (message.action === "set-tab-to-editor") {
|
|
||||||
let file = this.filesService.get(message.filePath);
|
|
||||||
let editorComponent = this.editorsService.getActiveEditorComponent();
|
|
||||||
let editor = editorComponent.editor;
|
|
||||||
|
|
||||||
editorComponent.assignSession(file);
|
|
||||||
this.editorsService.miniMapView.cloneSession(file);
|
|
||||||
} else if (message.action === "close-tab") {
|
|
||||||
let activeComponent = this.editorsService.getActiveEditorComponent();
|
|
||||||
let editors = this.editorsService.getEditorsAsArray();
|
|
||||||
let file = this.filesService.get(message.filePath);
|
|
||||||
|
|
||||||
for (let i = 0; i < editors.length; i++) {
|
|
||||||
let editorComponent = editors[i];
|
|
||||||
|
|
||||||
if (editorComponent.editor.session !== file.session) continue;
|
|
||||||
|
|
||||||
let targetFile = this.filesService.getPreviousFile(file.path)
|
|
||||||
if (targetFile) {
|
|
||||||
editorComponent.assignSession(targetFile);
|
|
||||||
if (activeComponent == editorComponent) {
|
|
||||||
this.editorsService.miniMapView.cloneSession(targetFile);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
editorComponent.newFile();
|
|
||||||
if (activeComponent == editorComponent) {
|
|
||||||
this.editorsService.miniMapView.newFile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
activeComponent.lspManagerService.closeDocument(file.session);
|
|
||||||
this.filesService.unset(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private loadMainSubscribers() {
|
private loadMainSubscribers() {
|
||||||
|
window.main.onMenuActions(async (action: string) => {
|
||||||
|
let editorComponent = this.editorsService.getActiveEditorComponent();
|
||||||
|
let editor = editorComponent.editor;
|
||||||
|
|
||||||
|
switch ( action ) {
|
||||||
|
case "new-file":
|
||||||
|
break;
|
||||||
|
case "open-files":
|
||||||
|
editorComponent.openFiles();
|
||||||
|
break;
|
||||||
|
case "save-file":
|
||||||
|
editorComponent.saveFile();
|
||||||
|
break;
|
||||||
|
case "save-file-as":
|
||||||
|
editorComponent.saveFileAs();
|
||||||
|
break;
|
||||||
|
case "cut":
|
||||||
|
editorComponent.cutText();
|
||||||
|
break;
|
||||||
|
case "copy":
|
||||||
|
editorComponent.copyText();
|
||||||
|
break;
|
||||||
|
case "paste":
|
||||||
|
editorComponent.pasteText();
|
||||||
|
break;
|
||||||
|
case "zoom-in":
|
||||||
|
editorComponent.zoomIn()
|
||||||
|
break;
|
||||||
|
case "zoom-out":
|
||||||
|
editorComponent.zoomOut()
|
||||||
|
break;
|
||||||
|
case "open-settings":
|
||||||
|
editor.showSettingsMenu();
|
||||||
|
case "show-about":
|
||||||
|
break;
|
||||||
|
case "quit":
|
||||||
|
window.main.quit();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
editor.execCommand(action);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
window.fs.onLoadFiles(async (paths: []) => {
|
window.fs.onLoadFiles(async (paths: []) => {
|
||||||
for (let i = 0; i < paths.length; i++) {
|
for (let i = 0; i < paths.length; i++) {
|
||||||
let file = new File([], "") as NewtonFile;
|
let file = new File([], "") as NewtonFile;
|
||||||
@ -208,48 +179,6 @@ export class EditorsComponent {
|
|||||||
// this.filesService.sendMessage(message);
|
// this.filesService.sendMessage(message);
|
||||||
});
|
});
|
||||||
|
|
||||||
window.main.onMenuActions(async (action: string) => {
|
|
||||||
let editorComponent = this.editorsService.getActiveEditorComponent();
|
|
||||||
let editor = editorComponent.editor;
|
|
||||||
|
|
||||||
switch ( action ) {
|
|
||||||
case "new-file":
|
|
||||||
break;
|
|
||||||
case "open-files":
|
|
||||||
editorComponent.openFiles();
|
|
||||||
break;
|
|
||||||
case "save-file":
|
|
||||||
editorComponent.saveFile();
|
|
||||||
break;
|
|
||||||
case "save-file-as":
|
|
||||||
editorComponent.saveFileAs();
|
|
||||||
break;
|
|
||||||
case "cut":
|
|
||||||
editorComponent.cutText();
|
|
||||||
break;
|
|
||||||
case "copy":
|
|
||||||
editorComponent.copyText();
|
|
||||||
break;
|
|
||||||
case "paste":
|
|
||||||
editorComponent.pasteText();
|
|
||||||
break;
|
|
||||||
case "zoom-in":
|
|
||||||
editorComponent.zoomIn()
|
|
||||||
break;
|
|
||||||
case "zoom-out":
|
|
||||||
editorComponent.zoomOut()
|
|
||||||
break;
|
|
||||||
case "open-settings":
|
|
||||||
editor.showSettingsMenu();
|
|
||||||
case "show-about":
|
|
||||||
break;
|
|
||||||
case "quit":
|
|
||||||
window.main.quit();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
editor.execCommand(action);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected onFileDropped(files: any) {
|
protected onFileDropped(files: any) {
|
||||||
@ -262,4 +191,104 @@ export class EditorsComponent {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private selectLeftEditor(message: ServiceMessage) {
|
||||||
|
let editorComponent = this.editorsService.get(message.editorUUID);
|
||||||
|
if (!editorComponent.leftSiblingUUID) return;
|
||||||
|
let siblingComponent = this.editorsService.get(editorComponent.leftSiblingUUID);
|
||||||
|
siblingComponent.editor.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private selectRightEditor(message: ServiceMessage) {
|
||||||
|
let editorComponent = this.editorsService.get(message.editorUUID);
|
||||||
|
if (!editorComponent.rightSiblingUUID) return;
|
||||||
|
let siblingComponent = this.editorsService.get(editorComponent.rightSiblingUUID);
|
||||||
|
siblingComponent.editor.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private moveSessionLeft(message: ServiceMessage) {
|
||||||
|
let editorComponent = this.editorsService.get(message.editorUUID);
|
||||||
|
if (!editorComponent.leftSiblingUUID) return;
|
||||||
|
|
||||||
|
let siblingComponent = this.editorsService.get(editorComponent.leftSiblingUUID);
|
||||||
|
this.moveSession("left", editorComponent, siblingComponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private moveSessionRight(message: ServiceMessage) {
|
||||||
|
let editorComponent = this.editorsService.get(message.editorUUID);
|
||||||
|
if (!editorComponent.rightSiblingUUID) return;
|
||||||
|
|
||||||
|
let siblingComponent = this.editorsService.get(editorComponent.rightSiblingUUID);
|
||||||
|
this.moveSession("right", editorComponent, siblingComponent);
|
||||||
|
}
|
||||||
|
|
||||||
|
private moveSession(
|
||||||
|
direction: string,
|
||||||
|
editorComponent: CodeViewComponent,
|
||||||
|
siblingComponent: CodeViewComponent
|
||||||
|
) {
|
||||||
|
let session = editorComponent.editor.getSession();
|
||||||
|
let siblingSession = siblingComponent.editor.getSession();
|
||||||
|
|
||||||
|
if (session == siblingSession) return;
|
||||||
|
|
||||||
|
let targetPath: string = this.tabsService.getRightSiblingTab(
|
||||||
|
editorComponent.activeFile.path
|
||||||
|
);
|
||||||
|
|
||||||
|
siblingComponent.assignSession(editorComponent.activeFile);
|
||||||
|
if (targetPath) {
|
||||||
|
editorComponent.assignSession(
|
||||||
|
this.filesService.get(targetPath)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
editorComponent.newFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
siblingComponent.editor.focus()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private setActiveEditor(message: ServiceMessage) {
|
||||||
|
this.editorsService.getActiveEditorComponent().removeActiveStyling();
|
||||||
|
this.editorsService.setActiveEditor(message.editorUUID);
|
||||||
|
this.editorsService.getActiveEditorComponent().addActiveStyling();
|
||||||
|
}
|
||||||
|
private setTabToEditor(message: ServiceMessage) {
|
||||||
|
let file = this.filesService.get(message.filePath);
|
||||||
|
let editorComponent = this.editorsService.getActiveEditorComponent();
|
||||||
|
let editor = editorComponent.editor;
|
||||||
|
|
||||||
|
editorComponent.assignSession(file);
|
||||||
|
this.editorsService.miniMapView.cloneSession(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
private closeTab(message: ServiceMessage) {
|
||||||
|
let activeComponent = this.editorsService.getActiveEditorComponent();
|
||||||
|
let editors = this.editorsService.getEditorsAsArray();
|
||||||
|
let file = this.filesService.get(message.filePath);
|
||||||
|
|
||||||
|
for (let i = 0; i < editors.length; i++) {
|
||||||
|
let editorComponent = editors[i];
|
||||||
|
|
||||||
|
if (editorComponent.editor.session !== file.session) continue;
|
||||||
|
|
||||||
|
let targetFile = this.filesService.getPreviousFile(file.path)
|
||||||
|
if (targetFile) {
|
||||||
|
editorComponent.assignSession(targetFile);
|
||||||
|
if (activeComponent == editorComponent) {
|
||||||
|
this.editorsService.miniMapView.cloneSession(targetFile);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
editorComponent.newFile();
|
||||||
|
if (activeComponent == editorComponent) {
|
||||||
|
this.editorsService.miniMapView.newFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
activeComponent.lspManagerService.closeDocument(file.session);
|
||||||
|
this.filesService.unset(file);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user