@theia/core 1.53.0-next.4 → 1.53.0-next.55
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -7
- package/i18n/nls.cs.json +582 -552
- package/i18n/nls.de.json +582 -552
- package/i18n/nls.es.json +582 -552
- package/i18n/nls.fr.json +582 -552
- package/i18n/nls.hu.json +582 -552
- package/i18n/nls.it.json +582 -552
- package/i18n/nls.ja.json +582 -552
- package/i18n/nls.json +582 -552
- package/i18n/nls.ko.json +582 -0
- package/i18n/nls.pl.json +582 -552
- package/i18n/nls.pt-br.json +582 -552
- package/i18n/nls.ru.json +582 -552
- package/i18n/nls.tr.json +582 -0
- package/i18n/nls.zh-cn.json +582 -552
- package/i18n/nls.zh-tw.json +582 -0
- package/lib/browser/authentication-service.d.ts +15 -14
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +5 -5
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/catalog.json +6889 -0
- package/lib/browser/common-frontend-contribution.js +3 -3
- package/lib/browser/common-styling-participants.js +166 -166
- package/lib/browser/context-key-service.d.ts +3 -2
- package/lib/browser/context-key-service.d.ts.map +1 -1
- package/lib/browser/context-key-service.js.map +1 -1
- package/lib/browser/core-preferences.d.ts.map +1 -1
- package/lib/browser/core-preferences.js +9 -0
- package/lib/browser/core-preferences.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +0 -3
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +2 -12
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/open-with-service.d.ts +13 -1
- package/lib/browser/open-with-service.d.ts.map +1 -1
- package/lib/browser/open-with-service.js +48 -9
- package/lib/browser/open-with-service.js.map +1 -1
- package/lib/browser/opener-service.d.ts +8 -0
- package/lib/browser/opener-service.d.ts.map +1 -1
- package/lib/browser/opener-service.js +18 -3
- package/lib/browser/opener-service.js.map +1 -1
- package/lib/browser/progress-location-service.spec.js +7 -7
- package/lib/browser/saveable-service.d.ts.map +1 -1
- package/lib/browser/saveable-service.js +6 -2
- package/lib/browser/saveable-service.js.map +1 -1
- package/lib/browser/saveable.d.ts +17 -1
- package/lib/browser/saveable.d.ts.map +1 -1
- package/lib/browser/saveable.js +62 -1
- package/lib/browser/saveable.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +5 -4
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +6 -16
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +12 -29
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +43 -78
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +8 -39
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +10 -10
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +43 -32
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/storage-service.js +3 -3
- package/lib/browser/tree/tree.spec.js +75 -75
- package/lib/browser/view-container.d.ts +2 -2
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-open-handler.d.ts +4 -1
- package/lib/browser/widget-open-handler.d.ts.map +1 -1
- package/lib/browser/widget-open-handler.js.map +1 -1
- package/lib/browser/widgets/extractable-widget.js +1 -1
- package/lib/browser/widgets/extractable-widget.js.map +1 -1
- package/lib/browser/widgets/index.d.ts +1 -0
- package/lib/browser/widgets/index.d.ts.map +1 -1
- package/lib/browser/widgets/index.js +1 -0
- package/lib/browser/widgets/index.js.map +1 -1
- package/lib/browser/widgets/split-widget.d.ts +45 -0
- package/lib/browser/widgets/split-widget.d.ts.map +1 -0
- package/lib/browser/widgets/split-widget.js +126 -0
- package/lib/browser/widgets/split-widget.js.map +1 -0
- package/lib/common/event.d.ts +2 -0
- package/lib/common/event.d.ts.map +1 -1
- package/lib/common/event.js +4 -0
- package/lib/common/event.js.map +1 -1
- package/lib/common/glob.d.ts +4 -4
- package/lib/common/json-schema.d.ts +2 -0
- package/lib/common/json-schema.d.ts.map +1 -1
- package/lib/common/menu/menu-types.d.ts.map +1 -1
- package/lib/common/menu/menu-types.js.map +1 -1
- package/lib/electron-browser/electron-uri-handler.d.ts +6 -0
- package/lib/electron-browser/electron-uri-handler.d.ts.map +1 -0
- package/lib/electron-browser/electron-uri-handler.js +49 -0
- package/lib/electron-browser/electron-uri-handler.js.map +1 -0
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
- package/lib/electron-browser/menu/electron-main-menu-factory.js +6 -6
- package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +12 -0
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +3 -0
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js +1 -1
- package/lib/electron-browser/window/external-app-open-handler.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +2 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js +2 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts +2 -0
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +27 -3
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +5 -3
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +57 -14
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/theia-electron-window.d.ts +1 -0
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +3 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.d.ts.map +1 -1
- package/lib/node/i18n/theia-localization-contribution.js +12 -8
- package/lib/node/i18n/theia-localization-contribution.js.map +1 -1
- package/lib/node/process-utils.spec.js +8 -8
- package/package.json +10 -8
- package/shared/ajv/index.d.ts +2 -2
- package/shared/markdown-it.d.ts +2 -2
- package/shared/markdown-it.js +1 -1
- package/shared/reflect-metadata/index.d.ts +1 -1
- package/shared/reflect-metadata/index.js +1 -1
- package/shared/vscode-languageserver-types/index.d.ts +1 -1
- package/src/browser/about-dialog.tsx +137 -137
- package/src/browser/authentication-service.ts +467 -468
- package/src/browser/breadcrumbs/breadcrumb-popup-container.ts +101 -101
- package/src/browser/breadcrumbs/breadcrumb-renderer.tsx +41 -41
- package/src/browser/breadcrumbs/breadcrumbs-constants.ts +79 -79
- package/src/browser/breadcrumbs/breadcrumbs-renderer.tsx +185 -185
- package/src/browser/breadcrumbs/breadcrumbs-service.ts +108 -108
- package/src/browser/breadcrumbs/index.ts +21 -21
- package/src/browser/browser-clipboard-service.ts +122 -122
- package/src/browser/browser.ts +239 -239
- package/src/browser/clipboard-service.ts +23 -23
- package/src/browser/color-application-contribution.ts +110 -110
- package/src/browser/color-registry.ts +60 -60
- package/src/browser/command-open-handler.ts +54 -54
- package/src/browser/common-frontend-contribution.ts +2680 -2680
- package/src/browser/common-styling-participants.ts +361 -361
- package/src/browser/connection-status-service.spec.ts +200 -200
- package/src/browser/connection-status-service.ts +216 -216
- package/src/browser/context-key-service.ts +142 -142
- package/src/browser/context-menu-renderer.ts +124 -124
- package/src/browser/core-preferences.ts +343 -334
- package/src/browser/credentials-service.ts +106 -106
- package/src/browser/decoration-style.ts +65 -65
- package/src/browser/decorations-service.ts +209 -209
- package/src/browser/dialogs/react-dialog.tsx +56 -56
- package/src/browser/dialogs.ts +534 -534
- package/src/browser/diff-uris.ts +117 -117
- package/src/browser/encoding-registry.ts +97 -97
- package/src/browser/endpoint.spec.ts +148 -148
- package/src/browser/endpoint.ts +136 -136
- package/src/browser/external-uri-service.ts +79 -79
- package/src/browser/file-icons-js.d.ts +20 -20
- package/src/browser/frontend-application-bindings.ts +62 -62
- package/src/browser/frontend-application-config-provider.spec.ts +45 -45
- package/src/browser/frontend-application-config-provider.ts +50 -50
- package/src/browser/frontend-application-contribution.ts +110 -110
- package/src/browser/frontend-application-module.ts +474 -475
- package/src/browser/frontend-application-state.ts +74 -74
- package/src/browser/frontend-application.ts +326 -326
- package/src/browser/hover-service.ts +218 -218
- package/src/browser/http-open-handler.ts +49 -49
- package/src/browser/i18n/i18n-frontend-module.ts +27 -27
- package/src/browser/i18n/language-quick-pick-service.ts +130 -130
- package/src/browser/icon-registry.ts +87 -87
- package/src/browser/icon-theme-contribution.ts +64 -64
- package/src/browser/icon-theme-service.ts +217 -217
- package/src/browser/icons/CollapseAll.svg +7 -7
- package/src/browser/icons/CollapseAll_inverse.svg +7 -7
- package/src/browser/icons/Refresh.svg +7 -7
- package/src/browser/icons/Refresh_inverse.svg +7 -7
- package/src/browser/icons/add-inverse.svg +4 -4
- package/src/browser/icons/add.svg +4 -4
- package/src/browser/icons/arrow-down-bright.svg +6 -6
- package/src/browser/icons/arrow-down-dark.svg +6 -6
- package/src/browser/icons/arrow-up-bright.svg +6 -6
- package/src/browser/icons/arrow-up-dark.svg +6 -6
- package/src/browser/icons/case-sensitive-dark.svg +16 -16
- package/src/browser/icons/case-sensitive.svg +16 -16
- package/src/browser/icons/chevron-right-dark.svg +5 -5
- package/src/browser/icons/chevron-right-light.svg +6 -6
- package/src/browser/icons/circle-bright.svg +7 -7
- package/src/browser/icons/circle-dark.svg +7 -7
- package/src/browser/icons/clear-search-results-dark.svg +7 -7
- package/src/browser/icons/clear-search-results.svg +7 -7
- package/src/browser/icons/close-all-bright.svg +7 -7
- package/src/browser/icons/close-all-dark.svg +7 -7
- package/src/browser/icons/close-bright.svg +7 -7
- package/src/browser/icons/close-dark.svg +7 -7
- package/src/browser/icons/collapse.svg +4 -4
- package/src/browser/icons/edit-json-dark.svg +6 -6
- package/src/browser/icons/edit-json.svg +6 -6
- package/src/browser/icons/expand.svg +4 -4
- package/src/browser/icons/loading-dark.svg +6 -6
- package/src/browser/icons/loading-light.svg +6 -6
- package/src/browser/icons/open-change-bright.svg +3 -3
- package/src/browser/icons/open-change-dark.svg +4 -4
- package/src/browser/icons/open-file-bright.svg +4 -4
- package/src/browser/icons/open-file-dark.svg +4 -4
- package/src/browser/icons/preview-bright.svg +3 -3
- package/src/browser/icons/preview-dark.svg +3 -3
- package/src/browser/icons/regex-dark.svg +10 -10
- package/src/browser/icons/regex.svg +10 -10
- package/src/browser/icons/remove-all-inverse.svg +4 -4
- package/src/browser/icons/remove-all.svg +4 -4
- package/src/browser/icons/replace-all-inverse.svg +13 -13
- package/src/browser/icons/replace-all.svg +13 -13
- package/src/browser/icons/replace-inverse.svg +15 -15
- package/src/browser/icons/replace.svg +15 -15
- package/src/browser/icons/whole-word-dark.svg +19 -19
- package/src/browser/icons/whole-word.svg +19 -19
- package/src/browser/index.ts +50 -50
- package/src/browser/json-schema-store.ts +118 -127
- package/src/browser/keybinding.spec.ts +554 -554
- package/src/browser/keybinding.ts +759 -759
- package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +108 -108
- package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +171 -171
- package/src/browser/keyboard/browser-keyboard-layout-provider.ts +469 -469
- package/src/browser/keyboard/browser-keyboard-module.ts +30 -30
- package/src/browser/keyboard/index.ts +20 -20
- package/src/browser/keyboard/keyboard-layout-service.spec.ts +121 -121
- package/src/browser/keyboard/keyboard-layout-service.ts +455 -455
- package/src/browser/keyboard/keys.spec.ts +258 -258
- package/src/browser/keyboard/keys.ts +20 -20
- package/src/browser/keys.ts +21 -21
- package/src/browser/label-parser.spec.ts +165 -165
- package/src/browser/label-parser.ts +108 -108
- package/src/browser/label-provider.spec.ts +62 -62
- package/src/browser/label-provider.ts +385 -385
- package/src/browser/language-icon-provider.ts +55 -55
- package/src/browser/language-service.ts +77 -77
- package/src/browser/logger-frontend-module.ts +65 -65
- package/src/browser/markdown-rendering/markdown-renderer.ts +98 -98
- package/src/browser/menu/browser-context-menu-renderer.ts +48 -48
- package/src/browser/menu/browser-menu-module.ts +28 -28
- package/src/browser/menu/browser-menu-plugin.ts +491 -491
- package/src/browser/menu/context-menu-context.ts +41 -41
- package/src/browser/messaging/connection-source.ts +26 -26
- package/src/browser/messaging/frontend-id-provider.ts +37 -37
- package/src/browser/messaging/index.ts +18 -18
- package/src/browser/messaging/messaging-frontend-module.ts +41 -41
- package/src/browser/messaging/service-connection-provider.ts +140 -140
- package/src/browser/messaging/ws-connection-provider.ts +49 -49
- package/src/browser/messaging/ws-connection-source.ts +230 -230
- package/src/browser/mime-service.ts +30 -30
- package/src/browser/navigatable-types.ts +81 -81
- package/src/browser/navigatable.ts +39 -39
- package/src/browser/open-with-service.ts +140 -93
- package/src/browser/opener-service.spec.ts +49 -49
- package/src/browser/opener-service.ts +169 -146
- package/src/browser/performance/frontend-stopwatch.ts +65 -65
- package/src/browser/performance/index.ts +18 -18
- package/src/browser/performance/measurement-frontend-bindings.ts +31 -31
- package/src/browser/preferences/index.ts +23 -23
- package/src/browser/preferences/injectable-preference-proxy.ts +283 -283
- package/src/browser/preferences/preference-configurations.ts +82 -82
- package/src/browser/preferences/preference-contribution.ts +436 -436
- package/src/browser/preferences/preference-language-override-service.ts +111 -111
- package/src/browser/preferences/preference-provider.spec.ts +36 -36
- package/src/browser/preferences/preference-provider.ts +277 -277
- package/src/browser/preferences/preference-proxy.spec.ts +367 -367
- package/src/browser/preferences/preference-proxy.ts +367 -367
- package/src/browser/preferences/preference-schema-provider.spec.ts +130 -130
- package/src/browser/preferences/preference-scope.ts +18 -18
- package/src/browser/preferences/preference-service.spec.ts +613 -613
- package/src/browser/preferences/preference-service.ts +594 -594
- package/src/browser/preferences/preference-validation-service.spec.ts +334 -334
- package/src/browser/preferences/preference-validation-service.ts +358 -358
- package/src/browser/preferences/test/index.ts +19 -19
- package/src/browser/preferences/test/mock-preference-provider.ts +50 -50
- package/src/browser/preferences/test/mock-preference-proxy.ts +48 -48
- package/src/browser/preferences/test/mock-preference-service.ts +63 -63
- package/src/browser/preload/i18n-preload-contribution.ts +50 -50
- package/src/browser/preload/os-preload-contribution.ts +37 -37
- package/src/browser/preload/preload-module.ts +45 -45
- package/src/browser/preload/preloader.ts +37 -37
- package/src/browser/preload/theme-preload-contribution.ts +31 -31
- package/src/browser/progress-bar-factory.ts +29 -29
- package/src/browser/progress-bar.ts +76 -76
- package/src/browser/progress-client.ts +53 -53
- package/src/browser/progress-location-service.spec.ts +50 -50
- package/src/browser/progress-location-service.ts +96 -96
- package/src/browser/progress-status-bar-item.ts +83 -83
- package/src/browser/quick-input/index.ts +23 -23
- package/src/browser/quick-input/quick-access.ts +75 -75
- package/src/browser/quick-input/quick-command-frontend-contribution.ts +89 -89
- package/src/browser/quick-input/quick-command-service.ts +246 -246
- package/src/browser/quick-input/quick-help-service.ts +87 -87
- package/src/browser/quick-input/quick-input-frontend-contribution.ts +33 -33
- package/src/browser/quick-input/quick-input-service.spec.ts +176 -176
- package/src/browser/quick-input/quick-input-service.ts +17 -17
- package/src/browser/quick-input/quick-pick-service-impl.ts +69 -69
- package/src/browser/quick-input/quick-view-service.ts +83 -83
- package/src/browser/request/browser-request-module.ts +23 -23
- package/src/browser/request/browser-request-service.ts +172 -172
- package/src/browser/resource-context-key.ts +77 -77
- package/src/browser/saveable-service.ts +332 -328
- package/src/browser/saveable.ts +395 -327
- package/src/browser/secondary-window-handler.ts +211 -211
- package/src/browser/shell/additional-views-menu-widget.tsx +71 -71
- package/src/browser/shell/application-shell-mouse-tracker.ts +103 -103
- package/src/browser/shell/application-shell.ts +2271 -2271
- package/src/browser/shell/current-widget-command-adapter.ts +57 -57
- package/src/browser/shell/index.ts +23 -23
- package/src/browser/shell/shell-layout-restorer.ts +399 -399
- package/src/browser/shell/side-panel-handler.ts +794 -794
- package/src/browser/shell/side-panel-toolbar.ts +111 -111
- package/src/browser/shell/sidebar-bottom-menu-widget.tsx +39 -39
- package/src/browser/shell/sidebar-menu-widget.tsx +183 -183
- package/src/browser/shell/sidebar-top-menu-widget.tsx +26 -26
- package/src/browser/shell/split-panels.ts +191 -191
- package/src/browser/shell/tab-bar-decorator.ts +106 -106
- package/src/browser/shell/tab-bar-toolbar/index.ts +19 -19
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.ts +31 -31
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +242 -256
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +149 -207
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +62 -62
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +443 -428
- package/src/browser/shell/tab-bars.spec.ts +63 -63
- package/src/browser/shell/tab-bars.ts +1468 -1468
- package/src/browser/shell/theia-dock-panel.ts +265 -265
- package/src/browser/shell/view-column-service.ts +125 -125
- package/src/browser/shell/view-contribution.ts +178 -178
- package/src/browser/source-tree/index.ts +19 -19
- package/src/browser/source-tree/source-tree-widget.tsx +107 -107
- package/src/browser/source-tree/source-tree.ts +146 -146
- package/src/browser/source-tree/tree-source.ts +73 -73
- package/src/browser/status-bar/index.ts +29 -29
- package/src/browser/status-bar/status-bar-types.ts +97 -97
- package/src/browser/status-bar/status-bar-view-model.ts +209 -209
- package/src/browser/status-bar/status-bar.tsx +189 -189
- package/src/browser/storage-service.spec.ts +76 -76
- package/src/browser/storage-service.ts +129 -129
- package/src/browser/style/about.css +36 -36
- package/src/browser/style/alert-messages.css +62 -62
- package/src/browser/style/ansi.css +88 -88
- package/src/browser/style/breadcrumbs.css +130 -130
- package/src/browser/style/dialog.css +126 -126
- package/src/browser/style/dockpanel.css +76 -76
- package/src/browser/style/hover-service.css +101 -101
- package/src/browser/style/icons.css +61 -61
- package/src/browser/style/index.css +353 -351
- package/src/browser/style/materialcolors.css +278 -278
- package/src/browser/style/menus.css +230 -230
- package/src/browser/style/notification.css +39 -39
- package/src/browser/style/os.css +87 -87
- package/src/browser/style/progress-bar.css +43 -43
- package/src/browser/style/quick-title-bar.css +45 -45
- package/src/browser/style/scrollbars.css +172 -172
- package/src/browser/style/search-box.css +123 -123
- package/src/browser/style/select-component.css +107 -107
- package/src/browser/style/sidepanel.css +367 -367
- package/src/browser/style/split-widget.css +38 -0
- package/src/browser/style/status-bar.css +127 -127
- package/src/browser/style/tabs.css +647 -658
- package/src/browser/style/tooltip.css +28 -28
- package/src/browser/style/tree-decorators.css +81 -81
- package/src/browser/style/tree.css +232 -232
- package/src/browser/style/view-container.css +187 -194
- package/src/browser/style/widget.css +19 -19
- package/src/browser/styling-service.ts +96 -96
- package/src/browser/supported-encodings.ts +262 -262
- package/src/browser/test/jsdom.ts +69 -69
- package/src/browser/test/mock-connection-status-service.ts +33 -33
- package/src/browser/test/mock-env-variables-server.ts +47 -47
- package/src/browser/test/mock-opener-service.ts +34 -34
- package/src/browser/test/mock-storage-service.ts +49 -49
- package/src/browser/theming.ts +206 -206
- package/src/browser/tooltip-service.tsx +96 -96
- package/src/browser/tree/fuzzy-search.spec.ts +99 -99
- package/src/browser/tree/fuzzy-search.ts +136 -136
- package/src/browser/tree/index.ts +29 -29
- package/src/browser/tree/search-box-debounce.ts +96 -96
- package/src/browser/tree/search-box.ts +355 -355
- package/src/browser/tree/test/mock-selectable-tree-model.ts +109 -109
- package/src/browser/tree/test/mock-tree-model.ts +136 -136
- package/src/browser/tree/test/tree-test-container.ts +50 -50
- package/src/browser/tree/tree-compression/compressed-tree-expansion-service.ts +46 -46
- package/src/browser/tree/tree-compression/compressed-tree-model.ts +88 -88
- package/src/browser/tree/tree-compression/compressed-tree-widget.tsx +203 -203
- package/src/browser/tree/tree-compression/index.ts +20 -20
- package/src/browser/tree/tree-compression/tree-compression-service.ts +125 -125
- package/src/browser/tree/tree-compression/tree-compression.css +28 -28
- package/src/browser/tree/tree-consistency.spec.ts +105 -105
- package/src/browser/tree/tree-container.spec.ts +45 -45
- package/src/browser/tree/tree-container.ts +155 -155
- package/src/browser/tree/tree-decorator.spec.ts +162 -162
- package/src/browser/tree/tree-decorator.ts +238 -238
- package/src/browser/tree/tree-expansion.spec.ts +173 -173
- package/src/browser/tree/tree-expansion.ts +165 -165
- package/src/browser/tree/tree-focus-service.ts +55 -55
- package/src/browser/tree/tree-iterator.spec.ts +170 -170
- package/src/browser/tree/tree-iterator.ts +256 -256
- package/src/browser/tree/tree-label-provider.ts +40 -40
- package/src/browser/tree/tree-model.ts +562 -562
- package/src/browser/tree/tree-navigation.ts +58 -58
- package/src/browser/tree/tree-preference.ts +50 -50
- package/src/browser/tree/tree-search.ts +128 -128
- package/src/browser/tree/tree-selectable.spec.ts +152 -152
- package/src/browser/tree/tree-selection-impl.ts +176 -176
- package/src/browser/tree/tree-selection-state.spec.ts +462 -462
- package/src/browser/tree/tree-selection-state.ts +245 -245
- package/src/browser/tree/tree-selection.ts +159 -159
- package/src/browser/tree/tree-view-welcome-widget.tsx +263 -263
- package/src/browser/tree/tree-widget-selection.ts +45 -45
- package/src/browser/tree/tree-widget.tsx +1591 -1591
- package/src/browser/tree/tree.spec.ts +241 -241
- package/src/browser/tree/tree.ts +425 -425
- package/src/browser/undo-redo-handler.ts +85 -85
- package/src/browser/user-working-directory-provider.ts +77 -77
- package/src/browser/view-container.ts +1640 -1640
- package/src/browser/widget-decoration.ts +358 -358
- package/src/browser/widget-manager.spec.ts +102 -102
- package/src/browser/widget-manager.ts +318 -318
- package/src/browser/widget-open-handler.ts +168 -165
- package/src/browser/widgets/alert-message.tsx +56 -56
- package/src/browser/widgets/enhanced-preview-widget.ts +27 -27
- package/src/browser/widgets/extractable-widget.ts +33 -33
- package/src/browser/widgets/index.ts +21 -20
- package/src/browser/widgets/previewable-widget.ts +31 -31
- package/src/browser/widgets/react-renderer.tsx +53 -53
- package/src/browser/widgets/react-widget.tsx +51 -51
- package/src/browser/widgets/select-component.tsx +367 -367
- package/src/browser/widgets/split-widget.ts +163 -0
- package/src/browser/widgets/widget.ts +406 -406
- package/src/browser/window/browser-window-module.ts +32 -32
- package/src/browser/window/default-secondary-window-service.ts +189 -189
- package/src/browser/window/default-window-service.spec.ts +78 -78
- package/src/browser/window/default-window-service.ts +171 -171
- package/src/browser/window/secondary-window-service.ts +39 -39
- package/src/browser/window/test/mock-window-service.ts +29 -29
- package/src/browser/window/window-service.ts +78 -78
- package/src/browser/window/window-title-service.ts +107 -107
- package/src/browser/window/window-title-updater.ts +95 -95
- package/src/browser/window-contribution.ts +64 -64
- package/src/browser-only/frontend-only-application-module.ts +116 -116
- package/src/browser-only/i18n/i18n-frontend-only-module.ts +37 -37
- package/src/browser-only/logger-frontend-only-module.ts +63 -63
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +39 -39
- package/src/browser-only/messaging/messaging-frontend-only-module.ts +42 -42
- package/src/browser-only/preload/frontend-only-preload-module.ts +49 -49
- package/src/common/accessibility.ts +33 -33
- package/src/common/application-error.spec.ts +27 -27
- package/src/common/application-error.ts +76 -76
- package/src/common/application-protocol.ts +42 -42
- package/src/common/array-utils.ts +129 -129
- package/src/common/buffer.ts +228 -228
- package/src/common/cancellation.ts +163 -163
- package/src/common/char-code.ts +438 -438
- package/src/common/collections.ts +125 -125
- package/src/common/color.ts +103 -103
- package/src/common/command.spec.ts +208 -208
- package/src/common/command.ts +489 -489
- package/src/common/contribution-filter/contribution-filter-registry.ts +79 -79
- package/src/common/contribution-filter/contribution-filter.ts +64 -64
- package/src/common/contribution-filter/filter.ts +23 -23
- package/src/common/contribution-filter/index.ts +19 -19
- package/src/common/contribution-provider.ts +96 -96
- package/src/common/disposable.spec.ts +94 -94
- package/src/common/disposable.ts +188 -188
- package/src/common/encoding-service.ts +380 -380
- package/src/common/encodings.ts +24 -24
- package/src/common/env-variables/env-variables-protocol.ts +38 -38
- package/src/common/env-variables/index.ts +17 -17
- package/src/common/event.spec.ts +32 -32
- package/src/common/event.ts +493 -487
- package/src/common/file-uri.ts +61 -61
- package/src/common/frontend-application-state.ts +38 -38
- package/src/common/glob.ts +741 -741
- package/src/common/hash.ts +85 -85
- package/src/common/i18n/localization-server.ts +25 -25
- package/src/common/i18n/localization.ts +80 -80
- package/src/common/i18n/nls.metadata.json +34112 -34112
- package/src/common/index.ts +51 -51
- package/src/common/json-schema.ts +108 -106
- package/src/common/key-store.ts +26 -26
- package/src/common/keybinding.ts +152 -152
- package/src/common/keyboard/keyboard-layout-provider.ts +51 -51
- package/src/common/keys.ts +694 -694
- package/src/common/label-protocol.ts +35 -35
- package/src/common/logger-protocol.ts +119 -119
- package/src/common/logger-watcher.ts +48 -48
- package/src/common/logger.spec.ts +46 -46
- package/src/common/logger.ts +389 -389
- package/src/common/lsp-types.ts +34 -34
- package/src/common/markdown-rendering/icon-utilities.ts +30 -30
- package/src/common/markdown-rendering/index.ts +18 -18
- package/src/common/markdown-rendering/markdown-string.ts +152 -152
- package/src/common/menu/action-menu-node.ts +65 -65
- package/src/common/menu/composite-menu-node.spec.ts +67 -67
- package/src/common/menu/composite-menu-node.ts +114 -114
- package/src/common/menu/index.ts +21 -21
- package/src/common/menu/menu-adapter.ts +103 -103
- package/src/common/menu/menu-model-registry.ts +374 -374
- package/src/common/menu/menu-types.ts +220 -219
- package/src/common/menu/menu.spec.ts +101 -101
- package/src/common/message-rpc/channel.spec.ts +88 -88
- package/src/common/message-rpc/channel.ts +300 -300
- package/src/common/message-rpc/index.ts +22 -22
- package/src/common/message-rpc/message-buffer.ts +105 -105
- package/src/common/message-rpc/msg-pack-extension-manager.ts +70 -70
- package/src/common/message-rpc/rpc-message-encoder.spec.ts +65 -65
- package/src/common/message-rpc/rpc-message-encoder.ts +190 -190
- package/src/common/message-rpc/rpc-protocol.ts +255 -255
- package/src/common/message-rpc/uint8-array-message-buffer.spec.ts +41 -41
- package/src/common/message-rpc/uint8-array-message-buffer.ts +213 -213
- package/src/common/message-service-protocol.ts +148 -148
- package/src/common/message-service.ts +226 -226
- package/src/common/messaging/connection-error-handler.ts +73 -73
- package/src/common/messaging/connection-management.ts +43 -43
- package/src/common/messaging/handler.ts +26 -26
- package/src/common/messaging/index.ts +19 -19
- package/src/common/messaging/proxy-factory.spec.ts +108 -108
- package/src/common/messaging/proxy-factory.ts +336 -336
- package/src/common/messaging/socket-write-buffer.ts +52 -52
- package/src/common/messaging/web-socket-channel.ts +76 -76
- package/src/common/nls.ts +151 -151
- package/src/common/numbers.ts +21 -21
- package/src/common/objects.spec.ts +112 -112
- package/src/common/objects.ts +123 -123
- package/src/common/os.ts +82 -82
- package/src/common/path.spec.ts +415 -415
- package/src/common/path.ts +334 -334
- package/src/common/paths.ts +250 -250
- package/src/common/performance/index.ts +19 -19
- package/src/common/performance/measurement-protocol.ts +104 -104
- package/src/common/performance/measurement.ts +130 -130
- package/src/common/performance/stopwatch.ts +183 -183
- package/src/common/preferences/preference-schema.ts +101 -101
- package/src/common/preferences/preference-scope.spec.ts +48 -48
- package/src/common/preferences/preference-scope.ts +68 -68
- package/src/common/prioritizeable.ts +58 -58
- package/src/common/progress-service-protocol.ts +35 -35
- package/src/common/progress-service.ts +82 -82
- package/src/common/promise-util.spec.ts +102 -102
- package/src/common/promise-util.ts +143 -143
- package/src/common/quick-pick-service.ts +353 -353
- package/src/common/reference.spec.ts +145 -145
- package/src/common/reference.ts +230 -230
- package/src/common/resource.ts +430 -430
- package/src/common/selection-command-handler.ts +101 -101
- package/src/common/selection-service.spec.ts +43 -43
- package/src/common/selection-service.ts +49 -49
- package/src/common/selection.ts +50 -50
- package/src/common/severity.ts +111 -111
- package/src/common/stream.ts +718 -718
- package/src/common/strings.ts +231 -231
- package/src/common/telemetry.ts +45 -45
- package/src/common/ternary-search-tree.ts +417 -417
- package/src/common/test/expect.ts +34 -34
- package/src/common/test/mock-logger.ts +118 -118
- package/src/common/test/mock-menu.ts +35 -35
- package/src/common/test/mock-resource-provider.ts +33 -33
- package/src/common/theme.ts +68 -68
- package/src/common/types.spec.ts +86 -86
- package/src/common/types.ts +140 -140
- package/src/common/uri-command-handler.spec.ts +90 -90
- package/src/common/uri-command-handler.ts +148 -148
- package/src/common/uri.spec.ts +278 -278
- package/src/common/uri.ts +279 -279
- package/src/common/uuid.ts +45 -45
- package/src/common/version.ts +17 -17
- package/src/common/view-column.ts +33 -33
- package/src/common/window.ts +34 -34
- package/src/electron-browser/electron-clipboard-service.ts +32 -32
- package/src/electron-browser/electron-uri-handler.ts +42 -0
- package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +39 -39
- package/src/electron-browser/keyboard/electron-keyboard-module.ts +28 -28
- package/src/electron-browser/menu/electron-context-menu-renderer.ts +122 -122
- package/src/electron-browser/menu/electron-main-menu-factory.ts +339 -338
- package/src/electron-browser/menu/electron-menu-contribution.ts +506 -506
- package/src/electron-browser/menu/electron-menu-module.ts +40 -40
- package/src/electron-browser/menu/electron-menu-style.css +110 -110
- package/src/electron-browser/messaging/electron-frontend-id-provider.ts +25 -25
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +65 -65
- package/src/electron-browser/messaging/electron-local-ws-connection-source.ts +45 -45
- package/src/electron-browser/messaging/electron-messaging-frontend-module.ts +78 -78
- package/src/electron-browser/messaging/electron-ws-connection-source.ts +38 -38
- package/src/electron-browser/preload.ts +264 -249
- package/src/electron-browser/request/electron-browser-request-module.ts +26 -26
- package/src/electron-browser/token/electron-token-frontend-module.ts +22 -22
- package/src/electron-browser/window/electron-frontend-application-state.ts +26 -26
- package/src/electron-browser/window/electron-secondary-window-service.ts +35 -35
- package/src/electron-browser/window/electron-window-module.ts +48 -45
- package/src/electron-browser/window/electron-window-preferences.ts +76 -76
- package/src/electron-browser/window/electron-window-service.ts +109 -109
- package/src/electron-browser/window/external-app-open-handler.ts +42 -42
- package/src/electron-common/electron-api.ts +157 -154
- package/src/electron-common/electron-main-window-service.ts +24 -24
- package/src/electron-common/electron-token.ts +27 -27
- package/src/electron-main/electron-api-main.ts +373 -347
- package/src/electron-main/electron-main-application-module.ts +65 -65
- package/src/electron-main/electron-main-application.ts +860 -818
- package/src/electron-main/electron-main-constants.ts +23 -23
- package/src/electron-main/electron-main-window-service-impl.ts +44 -44
- package/src/electron-main/electron-security-token-service.ts +36 -36
- package/src/electron-main/event-utils.ts +36 -36
- package/src/electron-main/messaging/electron-connection-handler.ts +21 -21
- package/src/electron-main/messaging/electron-messaging-contribution.ts +143 -143
- package/src/electron-main/messaging/electron-messaging-service.ts +35 -35
- package/src/electron-main/theia-electron-window.ts +219 -214
- package/src/electron-node/cli/electron-backend-cli-module.ts +24 -24
- package/src/electron-node/cli/electron-cli-contribution.ts +35 -35
- package/src/electron-node/hosting/electron-backend-hosting-module.ts +24 -24
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +37 -37
- package/src/electron-node/keyboard/electron-backend-keyboard-module.ts +30 -30
- package/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +35 -35
- package/src/electron-node/request/electron-backend-request-module.ts +23 -23
- package/src/electron-node/request/electron-backend-request-service.ts +78 -78
- package/src/electron-node/token/electron-token-backend-contribution.ts +48 -48
- package/src/electron-node/token/electron-token-backend-module.ts +28 -28
- package/src/electron-node/token/electron-token-validator.ts +93 -93
- package/src/node/application-server.ts +59 -59
- package/src/node/backend-application-config-provider.spec.ts +29 -29
- package/src/node/backend-application-config-provider.ts +48 -48
- package/src/node/backend-application-module.ts +139 -139
- package/src/node/backend-application.ts +374 -374
- package/src/node/cli.spec.ts +94 -94
- package/src/node/cli.ts +63 -63
- package/src/node/console-logger-server.spec.ts +59 -59
- package/src/node/console-logger-server.ts +76 -76
- package/src/node/debug.ts +30 -30
- package/src/node/dynamic-require.ts +56 -56
- package/src/node/env-variables/env-variables-server.ts +123 -123
- package/src/node/env-variables/index.ts +17 -17
- package/src/node/environment-utils.spec.ts +92 -92
- package/src/node/environment-utils.ts +66 -66
- package/src/node/file-uri.spec.ts +76 -76
- package/src/node/filesystem-locking.ts +77 -77
- package/src/node/hosting/backend-application-hosts.ts +60 -60
- package/src/node/hosting/backend-hosting-module.ts +26 -26
- package/src/node/hosting/ws-origin-validator.ts +36 -36
- package/src/node/i18n/i18n-backend-module.ts +42 -42
- package/src/node/i18n/localization-contribution.ts +112 -112
- package/src/node/i18n/localization-provider.ts +125 -125
- package/src/node/i18n/localization-server.ts +52 -52
- package/src/node/i18n/theia-localization-contribution.ts +40 -36
- package/src/node/index.ts +22 -22
- package/src/node/key-store-server.ts +162 -162
- package/src/node/logger-backend-module.ts +88 -88
- package/src/node/logger-cli-contribution.spec.ts +245 -245
- package/src/node/logger-cli-contribution.ts +168 -168
- package/src/node/main.ts +33 -33
- package/src/node/messaging/binary-message-pipe.ts +168 -168
- package/src/node/messaging/connection-container-module.ts +96 -96
- package/src/node/messaging/default-messaging-service.ts +129 -129
- package/src/node/messaging/frontend-connection-service.ts +24 -24
- package/src/node/messaging/index.ts +19 -19
- package/src/node/messaging/ipc-bootstrap.ts +27 -27
- package/src/node/messaging/ipc-channel.ts +77 -77
- package/src/node/messaging/ipc-connection-provider.ts +107 -107
- package/src/node/messaging/ipc-protocol.ts +76 -76
- package/src/node/messaging/messaging-backend-module.ts +52 -52
- package/src/node/messaging/messaging-listeners.ts +52 -52
- package/src/node/messaging/messaging-service.ts +46 -46
- package/src/node/messaging/test/test-web-socket-channel.ts +61 -61
- package/src/node/messaging/websocket-endpoint.ts +79 -79
- package/src/node/messaging/websocket-frontend-connection-service.ts +186 -186
- package/src/node/os-backend-provider.ts +25 -25
- package/src/node/performance/index.ts +18 -18
- package/src/node/performance/measurement-backend-bindings.ts +35 -35
- package/src/node/performance/node-stopwatch.ts +40 -40
- package/src/node/process-utils.spec.ts +48 -48
- package/src/node/process-utils.ts +102 -102
- package/src/node/remote/backend-remote-service.ts +25 -25
- package/src/node/remote/remote-cli-contribution.ts +34 -34
- package/src/node/remote/remote-copy-contribution.ts +45 -45
- package/src/node/request/backend-request-facade.ts +39 -39
- package/src/node/request/backend-request-module.ts +25 -25
- package/src/node/request/proxy-cli-contribution.ts +65 -65
- package/src/node/ws-request-validators.ts +56 -56
- package/src/typings/native-keymap.d.ts +108 -108
- package/i18n/nls.pt-pt.json +0 -552
|
@@ -1,562 +1,562 @@
|
|
|
1
|
-
// *****************************************************************************
|
|
2
|
-
// Copyright (C) 2017 TypeFox and others.
|
|
3
|
-
//
|
|
4
|
-
// This program and the accompanying materials are made available under the
|
|
5
|
-
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
-
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
-
//
|
|
8
|
-
// This Source Code may also be made available under the following Secondary
|
|
9
|
-
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
-
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
-
// with the GNU Classpath Exception which is available at
|
|
12
|
-
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
-
//
|
|
14
|
-
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
-
// *****************************************************************************
|
|
16
|
-
|
|
17
|
-
import { inject, injectable, postConstruct } from 'inversify';
|
|
18
|
-
import { Event, Emitter, WaitUntilEvent } from '../../common/event';
|
|
19
|
-
import { DisposableCollection } from '../../common/disposable';
|
|
20
|
-
import { CancellationToken } from '../../common/cancellation';
|
|
21
|
-
import { ILogger } from '../../common/logger';
|
|
22
|
-
import { SelectionProvider } from '../../common/selection-service';
|
|
23
|
-
import { Tree, TreeNode, CompositeTreeNode } from './tree';
|
|
24
|
-
import { TreeSelectionService, SelectableTreeNode, TreeSelection } from './tree-selection';
|
|
25
|
-
import { TreeExpansionService, ExpandableTreeNode } from './tree-expansion';
|
|
26
|
-
import { TreeNavigationService } from './tree-navigation';
|
|
27
|
-
import { TreeIterator, BottomUpTreeIterator, TopDownTreeIterator, Iterators } from './tree-iterator';
|
|
28
|
-
import { TreeSearch } from './tree-search';
|
|
29
|
-
import { TreeFocusService } from './tree-focus-service';
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* The tree model.
|
|
33
|
-
*/
|
|
34
|
-
export const TreeModel = Symbol('TreeModel');
|
|
35
|
-
export interface TreeModel extends Tree, TreeSelectionService, TreeExpansionService {
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Expands the given node. If the `node` argument is `undefined`, then expands the currently selected tree node.
|
|
39
|
-
* If multiple tree nodes are selected, expands the most recently selected tree node.
|
|
40
|
-
*/
|
|
41
|
-
expandNode(node?: Readonly<ExpandableTreeNode>): Promise<Readonly<ExpandableTreeNode> | undefined>;
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Collapses the given node. If the `node` argument is `undefined`, then collapses the currently selected tree node.
|
|
45
|
-
* If multiple tree nodes are selected, collapses the most recently selected tree node.
|
|
46
|
-
*/
|
|
47
|
-
collapseNode(node?: Readonly<ExpandableTreeNode>): Promise<boolean>;
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Collapses recursively. If the `node` argument is `undefined`, then collapses the currently selected tree node.
|
|
51
|
-
* If multiple tree nodes are selected, collapses the most recently selected tree node.
|
|
52
|
-
*/
|
|
53
|
-
collapseAll(node?: Readonly<CompositeTreeNode>): Promise<boolean>;
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Toggles the expansion state of the given node. If not give, then it toggles the expansion state of the currently selected node.
|
|
57
|
-
* If multiple nodes are selected, then the most recently selected tree node's expansion state will be toggled.
|
|
58
|
-
*/
|
|
59
|
-
toggleNodeExpansion(node?: Readonly<ExpandableTreeNode>): Promise<void>;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Opens the given node or the currently selected on if the argument is `undefined`.
|
|
63
|
-
* If multiple nodes are selected, open the most recently selected node.
|
|
64
|
-
*/
|
|
65
|
-
openNode(node?: Readonly<TreeNode> | undefined): void;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Event when a node should be opened.
|
|
69
|
-
*/
|
|
70
|
-
readonly onOpenNode: Event<Readonly<TreeNode>>;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Selects the parent node relatively to the selected taking into account node expansion.
|
|
74
|
-
*/
|
|
75
|
-
selectParent(): void;
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Navigates to the given node if it is defined. This method accepts both the tree node and its ID as an argument.
|
|
79
|
-
* Navigation sets a node as a root node and expand it. Resolves to the node if the navigation was successful. Otherwise,
|
|
80
|
-
* resolves to `undefined`.
|
|
81
|
-
*/
|
|
82
|
-
navigateTo(nodeOrId: Readonly<TreeNode> | string | undefined): Promise<TreeNode | undefined>;
|
|
83
|
-
/**
|
|
84
|
-
* Tests whether it is possible to navigate forward.
|
|
85
|
-
*/
|
|
86
|
-
canNavigateForward(): boolean;
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Tests whether it is possible to navigate backward.
|
|
90
|
-
*/
|
|
91
|
-
canNavigateBackward(): boolean;
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Navigates forward.
|
|
95
|
-
*/
|
|
96
|
-
navigateForward(): Promise<void>;
|
|
97
|
-
/**
|
|
98
|
-
* Navigates backward.
|
|
99
|
-
*/
|
|
100
|
-
navigateBackward(): Promise<void>;
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Selects the previous tree node, regardless of its selection or visibility state.
|
|
104
|
-
*/
|
|
105
|
-
selectPrev(): void;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Selects the previous node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
109
|
-
*/
|
|
110
|
-
selectPrevNode(type?: TreeSelection.SelectionType): void;
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Returns the previous tree node, regardless of its selection or visibility state.
|
|
114
|
-
*/
|
|
115
|
-
getPrevNode(node?: TreeNode): TreeNode | undefined;
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Returns the previous selectable tree node.
|
|
119
|
-
*/
|
|
120
|
-
getPrevSelectableNode(node?: TreeNode): SelectableTreeNode | undefined;
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Selects the next tree node, regardless of its selection or visibility state.
|
|
124
|
-
*/
|
|
125
|
-
selectNext(): void;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Selects the next node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
129
|
-
*/
|
|
130
|
-
selectNextNode(type?: TreeSelection.SelectionType): void;
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Returns the next tree node, regardless of its selection or visibility state.
|
|
134
|
-
*/
|
|
135
|
-
getNextNode(node?: TreeNode): TreeNode | undefined;
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Returns the next selectable tree node.
|
|
139
|
-
*/
|
|
140
|
-
getNextSelectableNode(node?: TreeNode): SelectableTreeNode | undefined;
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Selects the given tree node. Has no effect when the node does not exist in the tree. Discards any previous selection state.
|
|
144
|
-
*/
|
|
145
|
-
selectNode(node: Readonly<SelectableTreeNode>): void;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Selects the given node if it was not yet selected, or unselects it if it was. Keeps the previous selection state and updates it
|
|
149
|
-
* with the current toggle selection.
|
|
150
|
-
*/
|
|
151
|
-
toggleNode(node: Readonly<SelectableTreeNode>): void;
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Selects a range of tree nodes. The target of the selection range is the argument, the from tree node is the previous selected node.
|
|
155
|
-
* If no node was selected previously, invoking this method does nothing.
|
|
156
|
-
*/
|
|
157
|
-
selectRange(node: Readonly<SelectableTreeNode>): void;
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Returns the node currently in focus in this tree, or undefined if no node is focused.
|
|
161
|
-
*/
|
|
162
|
-
getFocusedNode(): SelectableTreeNode | undefined
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
@injectable()
|
|
166
|
-
export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray<Readonly<SelectableTreeNode>>> {
|
|
167
|
-
|
|
168
|
-
@inject(ILogger) protected readonly logger: ILogger;
|
|
169
|
-
@inject(Tree) protected readonly tree: Tree;
|
|
170
|
-
@inject(TreeSelectionService) protected readonly selectionService: TreeSelectionService;
|
|
171
|
-
@inject(TreeExpansionService) protected readonly expansionService: TreeExpansionService;
|
|
172
|
-
@inject(TreeNavigationService) protected readonly navigationService: TreeNavigationService;
|
|
173
|
-
@inject(TreeFocusService) protected readonly focusService: TreeFocusService;
|
|
174
|
-
@inject(TreeSearch) protected readonly treeSearch: TreeSearch;
|
|
175
|
-
|
|
176
|
-
protected readonly onChangedEmitter = new Emitter<void>();
|
|
177
|
-
protected readonly onOpenNodeEmitter = new Emitter<TreeNode>();
|
|
178
|
-
protected readonly toDispose = new DisposableCollection();
|
|
179
|
-
|
|
180
|
-
@postConstruct()
|
|
181
|
-
protected init(): void {
|
|
182
|
-
this.toDispose.push(this.tree);
|
|
183
|
-
this.toDispose.push(this.tree.onChanged(() => this.fireChanged()));
|
|
184
|
-
|
|
185
|
-
this.toDispose.push(this.selectionService);
|
|
186
|
-
|
|
187
|
-
this.toDispose.push(this.expansionService);
|
|
188
|
-
this.toDispose.push(this.expansionService.onExpansionChanged(node => {
|
|
189
|
-
this.fireChanged();
|
|
190
|
-
this.handleExpansion(node);
|
|
191
|
-
}));
|
|
192
|
-
|
|
193
|
-
this.toDispose.push(this.onOpenNodeEmitter);
|
|
194
|
-
this.toDispose.push(this.onChangedEmitter);
|
|
195
|
-
this.toDispose.push(this.treeSearch);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
dispose(): void {
|
|
199
|
-
this.toDispose.dispose();
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
protected handleExpansion(node: Readonly<ExpandableTreeNode>): void {
|
|
203
|
-
this.selectIfAncestorOfSelected(node);
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Select the given node if it is the ancestor of a selected node.
|
|
208
|
-
*/
|
|
209
|
-
protected selectIfAncestorOfSelected(node: Readonly<ExpandableTreeNode>): void {
|
|
210
|
-
if (!node.expanded && this.selectedNodes.some(selectedNode => CompositeTreeNode.isAncestor(node, selectedNode))) {
|
|
211
|
-
if (SelectableTreeNode.isVisible(node)) {
|
|
212
|
-
this.selectNode(node);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
get root(): TreeNode | undefined {
|
|
218
|
-
return this.tree.root;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
set root(root: TreeNode | undefined) {
|
|
222
|
-
this.tree.root = root;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
get onChanged(): Event<void> {
|
|
226
|
-
return this.onChangedEmitter.event;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
get onOpenNode(): Event<TreeNode> {
|
|
230
|
-
return this.onOpenNodeEmitter.event;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
protected fireChanged(): void {
|
|
234
|
-
this.onChangedEmitter.fire(undefined);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
get onNodeRefreshed(): Event<Readonly<CompositeTreeNode> & WaitUntilEvent> {
|
|
238
|
-
return this.tree.onNodeRefreshed;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
getNode(id: string | undefined): TreeNode | undefined {
|
|
242
|
-
return this.tree.getNode(id);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
getFocusedNode(): SelectableTreeNode | undefined {
|
|
246
|
-
return this.focusService.focusedNode;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
validateNode(node: TreeNode | undefined): TreeNode | undefined {
|
|
250
|
-
return this.tree.validateNode(node);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
async refresh(parent?: Readonly<CompositeTreeNode>): Promise<CompositeTreeNode | undefined> {
|
|
254
|
-
if (parent) {
|
|
255
|
-
return this.tree.refresh(parent);
|
|
256
|
-
}
|
|
257
|
-
return this.tree.refresh();
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// tslint:disable-next-line:typedef
|
|
261
|
-
get selectedNodes() {
|
|
262
|
-
return this.selectionService.selectedNodes;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// tslint:disable-next-line:typedef
|
|
266
|
-
get onSelectionChanged() {
|
|
267
|
-
return this.selectionService.onSelectionChanged;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
get onExpansionChanged(): Event<Readonly<ExpandableTreeNode>> {
|
|
271
|
-
return this.expansionService.onExpansionChanged;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
async expandNode(raw?: Readonly<ExpandableTreeNode>): Promise<ExpandableTreeNode | undefined> {
|
|
275
|
-
for (const node of this.getExpansionCandidates(raw)) {
|
|
276
|
-
if (ExpandableTreeNode.is(node)) {
|
|
277
|
-
return this.expansionService.expandNode(node);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
return undefined;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
protected *getExpansionCandidates(raw?: Readonly<TreeNode>): IterableIterator<TreeNode | undefined> {
|
|
284
|
-
yield raw;
|
|
285
|
-
yield this.getFocusedNode();
|
|
286
|
-
yield* this.selectedNodes;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
async collapseNode(raw?: Readonly<ExpandableTreeNode>): Promise<boolean> {
|
|
290
|
-
for (const node of this.getExpansionCandidates(raw)) {
|
|
291
|
-
if (ExpandableTreeNode.is(node)) {
|
|
292
|
-
return this.expansionService.collapseNode(node);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
async collapseAll(raw?: Readonly<CompositeTreeNode>): Promise<boolean> {
|
|
299
|
-
const node = raw || this.getFocusedNode();
|
|
300
|
-
if (SelectableTreeNode.is(node)) {
|
|
301
|
-
this.selectNode(node);
|
|
302
|
-
}
|
|
303
|
-
if (CompositeTreeNode.is(node)) {
|
|
304
|
-
return this.expansionService.collapseAll(node);
|
|
305
|
-
}
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
async toggleNodeExpansion(raw?: Readonly<ExpandableTreeNode>): Promise<void> {
|
|
310
|
-
for (const node of raw ? [raw] : this.selectedNodes) {
|
|
311
|
-
if (ExpandableTreeNode.is(node)) {
|
|
312
|
-
await this.expansionService.toggleNodeExpansion(node);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
selectPrev(): void {
|
|
318
|
-
const node = this.getPrevNode();
|
|
319
|
-
this.selectNodeIfSelectable(node);
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
selectPrevNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
323
|
-
const node = this.getPrevSelectableNode();
|
|
324
|
-
if (node) {
|
|
325
|
-
this.addSelection({ node, type });
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
getPrevNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
330
|
-
const iterator = this.createBackwardTreeIterator(node);
|
|
331
|
-
return iterator && this.doGetNode(iterator);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
getPrevSelectableNode(node: TreeNode | undefined = this.getFocusedNode()): SelectableTreeNode | undefined {
|
|
335
|
-
if (!node) {
|
|
336
|
-
return this.getNextSelectableNode(this.root);
|
|
337
|
-
}
|
|
338
|
-
const iterator = this.createBackwardIterator(node);
|
|
339
|
-
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
selectNext(): void {
|
|
343
|
-
const node = this.getNextNode();
|
|
344
|
-
this.selectNodeIfSelectable(node);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
selectNextNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
348
|
-
const node = this.getNextSelectableNode();
|
|
349
|
-
if (node) {
|
|
350
|
-
this.addSelection({ node, type });
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
getNextNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
355
|
-
const iterator = this.createTreeIterator(node);
|
|
356
|
-
return iterator && this.doGetNode(iterator);
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
getNextSelectableNode(node: TreeNode | undefined = this.getFocusedNode() ?? this.root): SelectableTreeNode | undefined {
|
|
360
|
-
const iterator = this.createIterator(node);
|
|
361
|
-
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
protected selectNodeIfSelectable(node: TreeNode | undefined): void {
|
|
365
|
-
if (SelectableTreeNode.is(node)) {
|
|
366
|
-
this.addSelection(node);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
protected doGetNode(iterator: TreeIterator): TreeNode | undefined {
|
|
371
|
-
iterator.next();
|
|
372
|
-
const result = iterator.next();
|
|
373
|
-
return result.done ? undefined : result.value;
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
protected doGetNextNode<T extends TreeNode>(iterator: TreeIterator, criterion: (node: TreeNode) => node is T): T | undefined {
|
|
377
|
-
// Skip the first item. // TODO: clean this up, and skip the first item in a different way without loading everything.
|
|
378
|
-
iterator.next();
|
|
379
|
-
let result = iterator.next();
|
|
380
|
-
while (!result.done) {
|
|
381
|
-
if (criterion(result.value)) {
|
|
382
|
-
return result.value;
|
|
383
|
-
}
|
|
384
|
-
result = iterator.next();
|
|
385
|
-
}
|
|
386
|
-
return undefined;
|
|
387
|
-
}
|
|
388
|
-
|
|
389
|
-
protected isVisibleSelectableNode(node: TreeNode): node is SelectableTreeNode {
|
|
390
|
-
return SelectableTreeNode.isVisible(node);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
protected createBackwardTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
394
|
-
const { filteredNodes } = this.treeSearch;
|
|
395
|
-
if (filteredNodes.length === 0) {
|
|
396
|
-
return node ? new BottomUpTreeIterator(node!, { pruneCollapsed: false }) : undefined;
|
|
397
|
-
}
|
|
398
|
-
if (node && filteredNodes.indexOf(node) === -1) {
|
|
399
|
-
return undefined;
|
|
400
|
-
}
|
|
401
|
-
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
protected createBackwardIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
405
|
-
const { filteredNodes } = this.treeSearch;
|
|
406
|
-
if (filteredNodes.length === 0) {
|
|
407
|
-
return node ? new BottomUpTreeIterator(node!, { pruneCollapsed: true }) : undefined;
|
|
408
|
-
}
|
|
409
|
-
if (node && filteredNodes.indexOf(node) === -1) {
|
|
410
|
-
return undefined;
|
|
411
|
-
}
|
|
412
|
-
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
protected createTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
416
|
-
const { filteredNodes } = this.treeSearch;
|
|
417
|
-
if (filteredNodes.length === 0) {
|
|
418
|
-
return node && new TopDownTreeIterator(node, { pruneCollapsed: false });
|
|
419
|
-
}
|
|
420
|
-
if (node && filteredNodes.indexOf(node) === -1) {
|
|
421
|
-
return undefined;
|
|
422
|
-
}
|
|
423
|
-
return Iterators.cycle(filteredNodes, node);
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
protected createIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
427
|
-
const { filteredNodes } = this.treeSearch;
|
|
428
|
-
if (filteredNodes.length === 0) {
|
|
429
|
-
return node && this.createForwardIteratorForNode(node);
|
|
430
|
-
}
|
|
431
|
-
if (node && filteredNodes.indexOf(node) === -1) {
|
|
432
|
-
return undefined;
|
|
433
|
-
}
|
|
434
|
-
return Iterators.cycle(filteredNodes, node);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
protected createForwardIteratorForNode(node: TreeNode): TreeIterator {
|
|
438
|
-
return new TopDownTreeIterator(node, { pruneCollapsed: true });
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
openNode(raw?: TreeNode | undefined): void {
|
|
442
|
-
const node = raw ?? this.focusService.focusedNode;
|
|
443
|
-
if (node) {
|
|
444
|
-
this.doOpenNode(node);
|
|
445
|
-
this.onOpenNodeEmitter.fire(node);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
protected doOpenNode(node: TreeNode): void {
|
|
450
|
-
if (ExpandableTreeNode.is(node)) {
|
|
451
|
-
this.toggleNodeExpansion(node);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
selectParent(): void {
|
|
456
|
-
const node = this.getFocusedNode();
|
|
457
|
-
if (node) {
|
|
458
|
-
const parent = SelectableTreeNode.getVisibleParent(node);
|
|
459
|
-
if (parent) {
|
|
460
|
-
this.selectNode(parent);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
async navigateTo(nodeOrId: TreeNode | string | undefined): Promise<TreeNode | undefined> {
|
|
466
|
-
if (nodeOrId) {
|
|
467
|
-
const node = typeof nodeOrId === 'string' ? this.getNode(nodeOrId) : nodeOrId;
|
|
468
|
-
if (node) {
|
|
469
|
-
this.navigationService.push(node);
|
|
470
|
-
await this.doNavigate(node);
|
|
471
|
-
return node;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
return undefined;
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
canNavigateForward(): boolean {
|
|
478
|
-
return !!this.navigationService.next;
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
canNavigateBackward(): boolean {
|
|
482
|
-
return !!this.navigationService.prev;
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
async navigateForward(): Promise<void> {
|
|
486
|
-
const node = this.navigationService.advance();
|
|
487
|
-
if (node) {
|
|
488
|
-
await this.doNavigate(node);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
async navigateBackward(): Promise<void> {
|
|
493
|
-
const node = this.navigationService.retreat();
|
|
494
|
-
if (node) {
|
|
495
|
-
await this.doNavigate(node);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
protected async doNavigate(node: TreeNode): Promise<void> {
|
|
500
|
-
this.tree.root = node;
|
|
501
|
-
if (ExpandableTreeNode.is(node)) {
|
|
502
|
-
await this.expandNode(node);
|
|
503
|
-
}
|
|
504
|
-
if (SelectableTreeNode.is(node)) {
|
|
505
|
-
this.selectNode(node);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
|
|
509
|
-
addSelection(selectionOrTreeNode: TreeSelection | Readonly<SelectableTreeNode>): void {
|
|
510
|
-
this.selectionService.addSelection(selectionOrTreeNode);
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
clearSelection(): void {
|
|
514
|
-
this.selectionService.clearSelection();
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
selectNode(node: Readonly<SelectableTreeNode>): void {
|
|
518
|
-
this.addSelection(node);
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
toggleNode(node: Readonly<SelectableTreeNode>): void {
|
|
522
|
-
this.addSelection({ node, type: TreeSelection.SelectionType.TOGGLE });
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
selectRange(node: Readonly<SelectableTreeNode>): void {
|
|
526
|
-
this.addSelection({ node, type: TreeSelection.SelectionType.RANGE });
|
|
527
|
-
}
|
|
528
|
-
|
|
529
|
-
storeState(): TreeModelImpl.State {
|
|
530
|
-
return {
|
|
531
|
-
selection: this.selectionService.storeState()
|
|
532
|
-
};
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
restoreState(state: TreeModelImpl.State): void {
|
|
536
|
-
if (state.selection) {
|
|
537
|
-
this.selectionService.restoreState(state.selection);
|
|
538
|
-
}
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
get onDidChangeBusy(): Event<TreeNode> {
|
|
542
|
-
return this.tree.onDidChangeBusy;
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
markAsBusy(node: Readonly<TreeNode>, ms: number, token: CancellationToken): Promise<void> {
|
|
546
|
-
return this.tree.markAsBusy(node, ms, token);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
get onDidUpdate(): Event<TreeNode[]> {
|
|
550
|
-
return this.tree.onDidUpdate;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
markAsChecked(node: TreeNode, checked: boolean): void {
|
|
554
|
-
this.tree.markAsChecked(node, checked);
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
}
|
|
558
|
-
export namespace TreeModelImpl {
|
|
559
|
-
export interface State {
|
|
560
|
-
selection: object
|
|
561
|
-
}
|
|
562
|
-
}
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2017 TypeFox and others.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { inject, injectable, postConstruct } from 'inversify';
|
|
18
|
+
import { Event, Emitter, WaitUntilEvent } from '../../common/event';
|
|
19
|
+
import { DisposableCollection } from '../../common/disposable';
|
|
20
|
+
import { CancellationToken } from '../../common/cancellation';
|
|
21
|
+
import { ILogger } from '../../common/logger';
|
|
22
|
+
import { SelectionProvider } from '../../common/selection-service';
|
|
23
|
+
import { Tree, TreeNode, CompositeTreeNode } from './tree';
|
|
24
|
+
import { TreeSelectionService, SelectableTreeNode, TreeSelection } from './tree-selection';
|
|
25
|
+
import { TreeExpansionService, ExpandableTreeNode } from './tree-expansion';
|
|
26
|
+
import { TreeNavigationService } from './tree-navigation';
|
|
27
|
+
import { TreeIterator, BottomUpTreeIterator, TopDownTreeIterator, Iterators } from './tree-iterator';
|
|
28
|
+
import { TreeSearch } from './tree-search';
|
|
29
|
+
import { TreeFocusService } from './tree-focus-service';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The tree model.
|
|
33
|
+
*/
|
|
34
|
+
export const TreeModel = Symbol('TreeModel');
|
|
35
|
+
export interface TreeModel extends Tree, TreeSelectionService, TreeExpansionService {
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Expands the given node. If the `node` argument is `undefined`, then expands the currently selected tree node.
|
|
39
|
+
* If multiple tree nodes are selected, expands the most recently selected tree node.
|
|
40
|
+
*/
|
|
41
|
+
expandNode(node?: Readonly<ExpandableTreeNode>): Promise<Readonly<ExpandableTreeNode> | undefined>;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Collapses the given node. If the `node` argument is `undefined`, then collapses the currently selected tree node.
|
|
45
|
+
* If multiple tree nodes are selected, collapses the most recently selected tree node.
|
|
46
|
+
*/
|
|
47
|
+
collapseNode(node?: Readonly<ExpandableTreeNode>): Promise<boolean>;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Collapses recursively. If the `node` argument is `undefined`, then collapses the currently selected tree node.
|
|
51
|
+
* If multiple tree nodes are selected, collapses the most recently selected tree node.
|
|
52
|
+
*/
|
|
53
|
+
collapseAll(node?: Readonly<CompositeTreeNode>): Promise<boolean>;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Toggles the expansion state of the given node. If not give, then it toggles the expansion state of the currently selected node.
|
|
57
|
+
* If multiple nodes are selected, then the most recently selected tree node's expansion state will be toggled.
|
|
58
|
+
*/
|
|
59
|
+
toggleNodeExpansion(node?: Readonly<ExpandableTreeNode>): Promise<void>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Opens the given node or the currently selected on if the argument is `undefined`.
|
|
63
|
+
* If multiple nodes are selected, open the most recently selected node.
|
|
64
|
+
*/
|
|
65
|
+
openNode(node?: Readonly<TreeNode> | undefined): void;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Event when a node should be opened.
|
|
69
|
+
*/
|
|
70
|
+
readonly onOpenNode: Event<Readonly<TreeNode>>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Selects the parent node relatively to the selected taking into account node expansion.
|
|
74
|
+
*/
|
|
75
|
+
selectParent(): void;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Navigates to the given node if it is defined. This method accepts both the tree node and its ID as an argument.
|
|
79
|
+
* Navigation sets a node as a root node and expand it. Resolves to the node if the navigation was successful. Otherwise,
|
|
80
|
+
* resolves to `undefined`.
|
|
81
|
+
*/
|
|
82
|
+
navigateTo(nodeOrId: Readonly<TreeNode> | string | undefined): Promise<TreeNode | undefined>;
|
|
83
|
+
/**
|
|
84
|
+
* Tests whether it is possible to navigate forward.
|
|
85
|
+
*/
|
|
86
|
+
canNavigateForward(): boolean;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Tests whether it is possible to navigate backward.
|
|
90
|
+
*/
|
|
91
|
+
canNavigateBackward(): boolean;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Navigates forward.
|
|
95
|
+
*/
|
|
96
|
+
navigateForward(): Promise<void>;
|
|
97
|
+
/**
|
|
98
|
+
* Navigates backward.
|
|
99
|
+
*/
|
|
100
|
+
navigateBackward(): Promise<void>;
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Selects the previous tree node, regardless of its selection or visibility state.
|
|
104
|
+
*/
|
|
105
|
+
selectPrev(): void;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Selects the previous node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
109
|
+
*/
|
|
110
|
+
selectPrevNode(type?: TreeSelection.SelectionType): void;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Returns the previous tree node, regardless of its selection or visibility state.
|
|
114
|
+
*/
|
|
115
|
+
getPrevNode(node?: TreeNode): TreeNode | undefined;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Returns the previous selectable tree node.
|
|
119
|
+
*/
|
|
120
|
+
getPrevSelectableNode(node?: TreeNode): SelectableTreeNode | undefined;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Selects the next tree node, regardless of its selection or visibility state.
|
|
124
|
+
*/
|
|
125
|
+
selectNext(): void;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Selects the next node relatively to the currently selected one. This method takes the expansion state of the tree into consideration.
|
|
129
|
+
*/
|
|
130
|
+
selectNextNode(type?: TreeSelection.SelectionType): void;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Returns the next tree node, regardless of its selection or visibility state.
|
|
134
|
+
*/
|
|
135
|
+
getNextNode(node?: TreeNode): TreeNode | undefined;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Returns the next selectable tree node.
|
|
139
|
+
*/
|
|
140
|
+
getNextSelectableNode(node?: TreeNode): SelectableTreeNode | undefined;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Selects the given tree node. Has no effect when the node does not exist in the tree. Discards any previous selection state.
|
|
144
|
+
*/
|
|
145
|
+
selectNode(node: Readonly<SelectableTreeNode>): void;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Selects the given node if it was not yet selected, or unselects it if it was. Keeps the previous selection state and updates it
|
|
149
|
+
* with the current toggle selection.
|
|
150
|
+
*/
|
|
151
|
+
toggleNode(node: Readonly<SelectableTreeNode>): void;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Selects a range of tree nodes. The target of the selection range is the argument, the from tree node is the previous selected node.
|
|
155
|
+
* If no node was selected previously, invoking this method does nothing.
|
|
156
|
+
*/
|
|
157
|
+
selectRange(node: Readonly<SelectableTreeNode>): void;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Returns the node currently in focus in this tree, or undefined if no node is focused.
|
|
161
|
+
*/
|
|
162
|
+
getFocusedNode(): SelectableTreeNode | undefined
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
@injectable()
|
|
166
|
+
export class TreeModelImpl implements TreeModel, SelectionProvider<ReadonlyArray<Readonly<SelectableTreeNode>>> {
|
|
167
|
+
|
|
168
|
+
@inject(ILogger) protected readonly logger: ILogger;
|
|
169
|
+
@inject(Tree) protected readonly tree: Tree;
|
|
170
|
+
@inject(TreeSelectionService) protected readonly selectionService: TreeSelectionService;
|
|
171
|
+
@inject(TreeExpansionService) protected readonly expansionService: TreeExpansionService;
|
|
172
|
+
@inject(TreeNavigationService) protected readonly navigationService: TreeNavigationService;
|
|
173
|
+
@inject(TreeFocusService) protected readonly focusService: TreeFocusService;
|
|
174
|
+
@inject(TreeSearch) protected readonly treeSearch: TreeSearch;
|
|
175
|
+
|
|
176
|
+
protected readonly onChangedEmitter = new Emitter<void>();
|
|
177
|
+
protected readonly onOpenNodeEmitter = new Emitter<TreeNode>();
|
|
178
|
+
protected readonly toDispose = new DisposableCollection();
|
|
179
|
+
|
|
180
|
+
@postConstruct()
|
|
181
|
+
protected init(): void {
|
|
182
|
+
this.toDispose.push(this.tree);
|
|
183
|
+
this.toDispose.push(this.tree.onChanged(() => this.fireChanged()));
|
|
184
|
+
|
|
185
|
+
this.toDispose.push(this.selectionService);
|
|
186
|
+
|
|
187
|
+
this.toDispose.push(this.expansionService);
|
|
188
|
+
this.toDispose.push(this.expansionService.onExpansionChanged(node => {
|
|
189
|
+
this.fireChanged();
|
|
190
|
+
this.handleExpansion(node);
|
|
191
|
+
}));
|
|
192
|
+
|
|
193
|
+
this.toDispose.push(this.onOpenNodeEmitter);
|
|
194
|
+
this.toDispose.push(this.onChangedEmitter);
|
|
195
|
+
this.toDispose.push(this.treeSearch);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
dispose(): void {
|
|
199
|
+
this.toDispose.dispose();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
protected handleExpansion(node: Readonly<ExpandableTreeNode>): void {
|
|
203
|
+
this.selectIfAncestorOfSelected(node);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Select the given node if it is the ancestor of a selected node.
|
|
208
|
+
*/
|
|
209
|
+
protected selectIfAncestorOfSelected(node: Readonly<ExpandableTreeNode>): void {
|
|
210
|
+
if (!node.expanded && this.selectedNodes.some(selectedNode => CompositeTreeNode.isAncestor(node, selectedNode))) {
|
|
211
|
+
if (SelectableTreeNode.isVisible(node)) {
|
|
212
|
+
this.selectNode(node);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
get root(): TreeNode | undefined {
|
|
218
|
+
return this.tree.root;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
set root(root: TreeNode | undefined) {
|
|
222
|
+
this.tree.root = root;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
get onChanged(): Event<void> {
|
|
226
|
+
return this.onChangedEmitter.event;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
get onOpenNode(): Event<TreeNode> {
|
|
230
|
+
return this.onOpenNodeEmitter.event;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
protected fireChanged(): void {
|
|
234
|
+
this.onChangedEmitter.fire(undefined);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
get onNodeRefreshed(): Event<Readonly<CompositeTreeNode> & WaitUntilEvent> {
|
|
238
|
+
return this.tree.onNodeRefreshed;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
getNode(id: string | undefined): TreeNode | undefined {
|
|
242
|
+
return this.tree.getNode(id);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
getFocusedNode(): SelectableTreeNode | undefined {
|
|
246
|
+
return this.focusService.focusedNode;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
validateNode(node: TreeNode | undefined): TreeNode | undefined {
|
|
250
|
+
return this.tree.validateNode(node);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
async refresh(parent?: Readonly<CompositeTreeNode>): Promise<CompositeTreeNode | undefined> {
|
|
254
|
+
if (parent) {
|
|
255
|
+
return this.tree.refresh(parent);
|
|
256
|
+
}
|
|
257
|
+
return this.tree.refresh();
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// tslint:disable-next-line:typedef
|
|
261
|
+
get selectedNodes() {
|
|
262
|
+
return this.selectionService.selectedNodes;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// tslint:disable-next-line:typedef
|
|
266
|
+
get onSelectionChanged() {
|
|
267
|
+
return this.selectionService.onSelectionChanged;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
get onExpansionChanged(): Event<Readonly<ExpandableTreeNode>> {
|
|
271
|
+
return this.expansionService.onExpansionChanged;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
async expandNode(raw?: Readonly<ExpandableTreeNode>): Promise<ExpandableTreeNode | undefined> {
|
|
275
|
+
for (const node of this.getExpansionCandidates(raw)) {
|
|
276
|
+
if (ExpandableTreeNode.is(node)) {
|
|
277
|
+
return this.expansionService.expandNode(node);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
protected *getExpansionCandidates(raw?: Readonly<TreeNode>): IterableIterator<TreeNode | undefined> {
|
|
284
|
+
yield raw;
|
|
285
|
+
yield this.getFocusedNode();
|
|
286
|
+
yield* this.selectedNodes;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
async collapseNode(raw?: Readonly<ExpandableTreeNode>): Promise<boolean> {
|
|
290
|
+
for (const node of this.getExpansionCandidates(raw)) {
|
|
291
|
+
if (ExpandableTreeNode.is(node)) {
|
|
292
|
+
return this.expansionService.collapseNode(node);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
async collapseAll(raw?: Readonly<CompositeTreeNode>): Promise<boolean> {
|
|
299
|
+
const node = raw || this.getFocusedNode();
|
|
300
|
+
if (SelectableTreeNode.is(node)) {
|
|
301
|
+
this.selectNode(node);
|
|
302
|
+
}
|
|
303
|
+
if (CompositeTreeNode.is(node)) {
|
|
304
|
+
return this.expansionService.collapseAll(node);
|
|
305
|
+
}
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
async toggleNodeExpansion(raw?: Readonly<ExpandableTreeNode>): Promise<void> {
|
|
310
|
+
for (const node of raw ? [raw] : this.selectedNodes) {
|
|
311
|
+
if (ExpandableTreeNode.is(node)) {
|
|
312
|
+
await this.expansionService.toggleNodeExpansion(node);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
selectPrev(): void {
|
|
318
|
+
const node = this.getPrevNode();
|
|
319
|
+
this.selectNodeIfSelectable(node);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
selectPrevNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
323
|
+
const node = this.getPrevSelectableNode();
|
|
324
|
+
if (node) {
|
|
325
|
+
this.addSelection({ node, type });
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
getPrevNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
330
|
+
const iterator = this.createBackwardTreeIterator(node);
|
|
331
|
+
return iterator && this.doGetNode(iterator);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
getPrevSelectableNode(node: TreeNode | undefined = this.getFocusedNode()): SelectableTreeNode | undefined {
|
|
335
|
+
if (!node) {
|
|
336
|
+
return this.getNextSelectableNode(this.root);
|
|
337
|
+
}
|
|
338
|
+
const iterator = this.createBackwardIterator(node);
|
|
339
|
+
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
selectNext(): void {
|
|
343
|
+
const node = this.getNextNode();
|
|
344
|
+
this.selectNodeIfSelectable(node);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
selectNextNode(type: TreeSelection.SelectionType = TreeSelection.SelectionType.DEFAULT): void {
|
|
348
|
+
const node = this.getNextSelectableNode();
|
|
349
|
+
if (node) {
|
|
350
|
+
this.addSelection({ node, type });
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
getNextNode(node: TreeNode | undefined = this.getFocusedNode()): TreeNode | undefined {
|
|
355
|
+
const iterator = this.createTreeIterator(node);
|
|
356
|
+
return iterator && this.doGetNode(iterator);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
getNextSelectableNode(node: TreeNode | undefined = this.getFocusedNode() ?? this.root): SelectableTreeNode | undefined {
|
|
360
|
+
const iterator = this.createIterator(node);
|
|
361
|
+
return iterator && this.doGetNextNode(iterator, this.isVisibleSelectableNode.bind(this));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
protected selectNodeIfSelectable(node: TreeNode | undefined): void {
|
|
365
|
+
if (SelectableTreeNode.is(node)) {
|
|
366
|
+
this.addSelection(node);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
protected doGetNode(iterator: TreeIterator): TreeNode | undefined {
|
|
371
|
+
iterator.next();
|
|
372
|
+
const result = iterator.next();
|
|
373
|
+
return result.done ? undefined : result.value;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
protected doGetNextNode<T extends TreeNode>(iterator: TreeIterator, criterion: (node: TreeNode) => node is T): T | undefined {
|
|
377
|
+
// Skip the first item. // TODO: clean this up, and skip the first item in a different way without loading everything.
|
|
378
|
+
iterator.next();
|
|
379
|
+
let result = iterator.next();
|
|
380
|
+
while (!result.done) {
|
|
381
|
+
if (criterion(result.value)) {
|
|
382
|
+
return result.value;
|
|
383
|
+
}
|
|
384
|
+
result = iterator.next();
|
|
385
|
+
}
|
|
386
|
+
return undefined;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
protected isVisibleSelectableNode(node: TreeNode): node is SelectableTreeNode {
|
|
390
|
+
return SelectableTreeNode.isVisible(node);
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
protected createBackwardTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
394
|
+
const { filteredNodes } = this.treeSearch;
|
|
395
|
+
if (filteredNodes.length === 0) {
|
|
396
|
+
return node ? new BottomUpTreeIterator(node!, { pruneCollapsed: false }) : undefined;
|
|
397
|
+
}
|
|
398
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
399
|
+
return undefined;
|
|
400
|
+
}
|
|
401
|
+
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
protected createBackwardIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
405
|
+
const { filteredNodes } = this.treeSearch;
|
|
406
|
+
if (filteredNodes.length === 0) {
|
|
407
|
+
return node ? new BottomUpTreeIterator(node!, { pruneCollapsed: true }) : undefined;
|
|
408
|
+
}
|
|
409
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}
|
|
412
|
+
return Iterators.cycle(filteredNodes.slice().reverse(), node);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
protected createTreeIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
416
|
+
const { filteredNodes } = this.treeSearch;
|
|
417
|
+
if (filteredNodes.length === 0) {
|
|
418
|
+
return node && new TopDownTreeIterator(node, { pruneCollapsed: false });
|
|
419
|
+
}
|
|
420
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
return Iterators.cycle(filteredNodes, node);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
protected createIterator(node: TreeNode | undefined): TreeIterator | undefined {
|
|
427
|
+
const { filteredNodes } = this.treeSearch;
|
|
428
|
+
if (filteredNodes.length === 0) {
|
|
429
|
+
return node && this.createForwardIteratorForNode(node);
|
|
430
|
+
}
|
|
431
|
+
if (node && filteredNodes.indexOf(node) === -1) {
|
|
432
|
+
return undefined;
|
|
433
|
+
}
|
|
434
|
+
return Iterators.cycle(filteredNodes, node);
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
protected createForwardIteratorForNode(node: TreeNode): TreeIterator {
|
|
438
|
+
return new TopDownTreeIterator(node, { pruneCollapsed: true });
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
openNode(raw?: TreeNode | undefined): void {
|
|
442
|
+
const node = raw ?? this.focusService.focusedNode;
|
|
443
|
+
if (node) {
|
|
444
|
+
this.doOpenNode(node);
|
|
445
|
+
this.onOpenNodeEmitter.fire(node);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
protected doOpenNode(node: TreeNode): void {
|
|
450
|
+
if (ExpandableTreeNode.is(node)) {
|
|
451
|
+
this.toggleNodeExpansion(node);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
selectParent(): void {
|
|
456
|
+
const node = this.getFocusedNode();
|
|
457
|
+
if (node) {
|
|
458
|
+
const parent = SelectableTreeNode.getVisibleParent(node);
|
|
459
|
+
if (parent) {
|
|
460
|
+
this.selectNode(parent);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
async navigateTo(nodeOrId: TreeNode | string | undefined): Promise<TreeNode | undefined> {
|
|
466
|
+
if (nodeOrId) {
|
|
467
|
+
const node = typeof nodeOrId === 'string' ? this.getNode(nodeOrId) : nodeOrId;
|
|
468
|
+
if (node) {
|
|
469
|
+
this.navigationService.push(node);
|
|
470
|
+
await this.doNavigate(node);
|
|
471
|
+
return node;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return undefined;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
canNavigateForward(): boolean {
|
|
478
|
+
return !!this.navigationService.next;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
canNavigateBackward(): boolean {
|
|
482
|
+
return !!this.navigationService.prev;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
async navigateForward(): Promise<void> {
|
|
486
|
+
const node = this.navigationService.advance();
|
|
487
|
+
if (node) {
|
|
488
|
+
await this.doNavigate(node);
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
async navigateBackward(): Promise<void> {
|
|
493
|
+
const node = this.navigationService.retreat();
|
|
494
|
+
if (node) {
|
|
495
|
+
await this.doNavigate(node);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
protected async doNavigate(node: TreeNode): Promise<void> {
|
|
500
|
+
this.tree.root = node;
|
|
501
|
+
if (ExpandableTreeNode.is(node)) {
|
|
502
|
+
await this.expandNode(node);
|
|
503
|
+
}
|
|
504
|
+
if (SelectableTreeNode.is(node)) {
|
|
505
|
+
this.selectNode(node);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
addSelection(selectionOrTreeNode: TreeSelection | Readonly<SelectableTreeNode>): void {
|
|
510
|
+
this.selectionService.addSelection(selectionOrTreeNode);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
clearSelection(): void {
|
|
514
|
+
this.selectionService.clearSelection();
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
selectNode(node: Readonly<SelectableTreeNode>): void {
|
|
518
|
+
this.addSelection(node);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
toggleNode(node: Readonly<SelectableTreeNode>): void {
|
|
522
|
+
this.addSelection({ node, type: TreeSelection.SelectionType.TOGGLE });
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
selectRange(node: Readonly<SelectableTreeNode>): void {
|
|
526
|
+
this.addSelection({ node, type: TreeSelection.SelectionType.RANGE });
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
storeState(): TreeModelImpl.State {
|
|
530
|
+
return {
|
|
531
|
+
selection: this.selectionService.storeState()
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
restoreState(state: TreeModelImpl.State): void {
|
|
536
|
+
if (state.selection) {
|
|
537
|
+
this.selectionService.restoreState(state.selection);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
get onDidChangeBusy(): Event<TreeNode> {
|
|
542
|
+
return this.tree.onDidChangeBusy;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
markAsBusy(node: Readonly<TreeNode>, ms: number, token: CancellationToken): Promise<void> {
|
|
546
|
+
return this.tree.markAsBusy(node, ms, token);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
get onDidUpdate(): Event<TreeNode[]> {
|
|
550
|
+
return this.tree.onDidUpdate;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
markAsChecked(node: TreeNode, checked: boolean): void {
|
|
554
|
+
this.tree.markAsChecked(node, checked);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
}
|
|
558
|
+
export namespace TreeModelImpl {
|
|
559
|
+
export interface State {
|
|
560
|
+
selection: object
|
|
561
|
+
}
|
|
562
|
+
}
|