()
| 122 | } |
| 123 | |
| 124 | #createExtensionSetting() { |
| 125 | this.extensionsTable = new EditableTable<Extension>([ |
| 126 | {title: 'Name', key: 'displayName'}, |
| 127 | {title: 'Path', key: 'dirPath'}, |
| 128 | ]); |
| 129 | this.extensionsTable.view.setStyle({ |
| 130 | gap: basicStyle.padding, |
| 131 | padding: basicStyle.padding, |
| 132 | }); |
| 133 | |
| 134 | this.extensionsTable.editButton.setVisible(false); |
| 135 | this.extensionsTable.onRemoveRow.connect((index, extension) => { |
| 136 | try { |
| 137 | extensionManager.unregisterExternalExtension(extension.name); |
| 138 | } catch (error) { |
| 139 | alert(`Failed to remove extension: ${error.message}`, {window: this.window}); |
| 140 | } |
| 141 | }); |
| 142 | |
| 143 | const addButton = this.extensionsTable.buttonsArea.addButton('Add'); |
| 144 | addButton.onClick = () => { |
| 145 | const dialog = gui.FileOpenDialog.create(); |
| 146 | dialog.setTitle('Load extension'); |
| 147 | dialog.setButtonLabel('Load'); |
| 148 | dialog.setOptions(gui.FileDialog.optionPickFolders); |
| 149 | if (dialog.runForWindow(this.window)) { |
| 150 | try { |
| 151 | extensionManager.registerExternalExtension(dialog.getResults()[0]); |
| 152 | } catch (error) { |
| 153 | alert(`Failed to load extension: ${error.message}`, {window: this.window}); |
| 154 | } |
| 155 | } |
| 156 | }; |
| 157 | |
| 158 | // Fill table with existing extensions. |
| 159 | const update = () => this.extensionsTable.setData(extensionManager.getExtensions()); |
| 160 | this.connections.add(extensionManager.onAddExtension.connect(update)); |
| 161 | this.connections.add(extensionManager.onRemoveExtension.connect(update)); |
| 162 | update(); |
| 163 | |
| 164 | return this.extensionsTable.view; |
| 165 | } |
| 166 | } |
no test coverage detected