Refactored editors.component and tabs.service

This commit is contained in:
itdominator 2025-07-15 23:11:37 -05:00
parent a4d602f98a
commit a0914e8096
4 changed files with 183 additions and 177 deletions

View File

@ -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 {

View File

@ -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] );
} }

View File

@ -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();

View File

@ -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);
}
} }