import { AfterViewInit, ChangeDetectorRef, EventEmitter } from '@angular/core'; import { EditorController } from '../controller/editor.controller'; import { IdeTabsComponent } from '../components/tabs/ide-tabs.component'; import { CenterPanelComponent } from './center-panel/center-panel.component'; import { ContextService } from '../services/context.service'; import { RootHandler } from '../interface/handler/root-handler'; import { CommonEvent } from '../interface/event'; import { SaveResult } from '../event-bus/lib/types'; import { Splitter } from '../components/splitter/splitter'; import { NavPanelConfig } from '../interface/nav-panel'; import { IEditorController } from '../controller/types'; import { ContextMenuItem } from '@farris/ui-context-menu'; import { TabContextMenuService } from '../services/tab-menu.service'; import { ShortcutKeyDesc } from '../interface/placeholder'; import { Observable } from 'rxjs'; export declare class CodeViewComponent implements RootHandler, AfterViewInit { private cd; private controller; private context; private changeDetectorRef; private tabContextMenuService; /** 切换“设计器” <-> “代码” */ switchView: EventEmitter; /** * 通知表单设计器代码编辑器内容已修改 */ detectFileDirty: EventEmitter; /** 不保存,切换“设计器” <-> “代码” */ closeWithoutSave: EventEmitter; /** * 保存全部时触发,通知外层的设计器也执行保存 * @remarks * 注意:只有点击右上角保存按钮时,才会触发保存全部事件 * 通过ctrl+s快捷键、关闭前弹框提示、切换前弹框提示造成的保存都不会触发saveAll事件 * 如果想要监听所有的保存行为,请查看saved属性 * * “保存全部”与其它保存行为的区别: * 如果用户点击右上角的保存按钮,则应该保存代码视图以及其关联的设计器元数据,此时代码视图不会直接反馈保存结果,所有结果统一交给设计器反馈 * 其它保存行为被触发时,代码视图直接反馈保存结果,不会触发saveAll事件,设计器不会同时保存 */ saveAll: EventEmitter; /** * 保存后提示 * @remarks 任何保存操作都将触发此事件 */ saved: EventEmitter; /** * 当前是否正在显示代码视图 * @remarks 如果正在显示,则启用快捷键监听,否则禁用快捷键 */ onTop: boolean; /** * 保存全部时直接反馈保存结果 * @remarks * 右上角的“保存”按钮即为保存全部按钮,当点击该按钮时应该同时保存代码视图和外层的表单或BE设计器 * 默认应该由外层的设计器组件通过接收saveAll事件的参数,统一地反馈保存结果 * 当保存全部时,不推荐通过本组件直接反馈结果,因为设计器也应该反馈结果,导致弹出多条反馈信息 */ directlyNotifySaveAllResults: boolean; /** * 入口文件路径 * @remarks * 将根据该文件的后缀名判断设计器的类型,使用对应的导航数据服务,加载对应的(预置的)导航面板 * 如果该路径为“/”,则作为“整体代码视图”运行 */ entryFilePath: string; /** * 导航面板配置 * @remarks * 定义了左侧导航面板的视图结构并配置其数据服务(usePresetConfigs参数非true时生效,推荐使用本参数定制导航面板) * 注意:当前不支持动态修改导航面板的配置 */ navPanelConfigs: NavPanelConfig[]; /** * 标签页为空时的快捷键列表内容 * @remarks 可选,为空时显示默认的快捷键列表 */ shortcutsList: ShortcutKeyDesc[]; /** * 使用预置的导航面板配置 * @remarks * 如果传入true,则忽略navPanelConfigs参数并使用内置的导航面板配置信息(将会根据entryFilePath的文件后缀名自动判断) * 当前仅预置了frm和be的导航面板配置信息,其它情况下请自行组织导航面板配置信息(本参数默认值为false) * 不推荐使用预置的导航面板配置,将逐步弃用本方式 * 注意:该参数必须在本组件初始化完成前传入,初始化完成后修改本参数的值是无效的 */ usePresetConfigs: boolean; /** * 标签页的页签的最大宽度 * @remarks * 如果设置为-1则不启用最大宽度,默认不启用,单位:px * 注意:低于100的值将被忽略 */ maxTabWidth: number; editorCmp: CenterPanelComponent; tabsCmp: IdeTabsComponent; splitterCmp: Splitter; /** 保存按钮点击事件回调函数 - 节流版本 */ throttledSaveAllFile: () => void; /** 标签页上下文菜单 */ contextMenuItems: ContextMenuItem[]; /** 存在文件被打开 */ readonly opened: boolean; constructor(cd: ChangeDetectorRef, controller: EditorController, context: ContextService, changeDetectorRef: ChangeDetectorRef, tabContextMenuService: TabContextMenuService); ngAfterViewInit(): void; private listenCloseTabEvent; private init; /** * 处理保存按钮点击事件 */ handleSaveBtnClicked(): Promise; /** * 保存全部文件 * @param notifyResult 是否反馈保存结果,默认不反馈 */ saveAllFile(notifyResult?: boolean): Promise; /** * 保存当前文件 * @param notifyResult 是否反馈保存结果,默认反馈 */ saveCurrentFile(notifyResult?: boolean): Promise; /** * 打开一个指定路径的文件 * @param path 文件路径 * @param appendInfo 附加信息,可在编辑页面中通过事件总线上下文获取 */ open(path: string, appendInfo?: any): void; /** * 刷新导航树数据 * @param selectNodePath 数据刷新完成后,选中该条目 * @param type 待刷新的导航树类型,为空则全部刷新 */ refreshNavTree(selectNodePath?: string, type?: string[]): void; /** 触发变更检测 */ detectChanges(): void; handleSwitch(): void; /** * 在事件总线上设置全局上下文参数 * @remarks 打开的编辑页面可以通过事件总线获取到这些参数 * @param key 键 * @param value 值 * @returns 该键的历史值 */ setGlobalContextParam(key: string, value: any): any; /** * 在事件总线上获取全局上下文参数 * @param key 键 */ getGlobalContextParam(key: string): any; /** * 向标签页发送新通知 * @param path 标签页路径 * @param event 通知事件 * @returns 被通知的标签页针对该事件反馈的结果(如果标签页不存在则返回null) */ sendNotification(path: string, event: CommonEvent): Observable | null; /** * 切换左侧导航面板的收折状态 * @param collapse 是否收折 */ toggleNavPanel(collapse?: boolean): void; /** * 获取代码视图的控制器实例 * @remarks * 当为导航面板传入自定义模板时,需要自行实现由该导航面板引发的交互逻辑,此时需要获取控制器实例以实现对各个部件的操作 * @returns 代码视图控制器 */ getEditorController(): IEditorController; /** * 销毁代码视图 * @remarks * 清除window上的事件总线对象,防止内存泄漏 * 调用本方法后不应再对代码视图组件进行任何操作 */ destroy(): void; }