diff --git a/src/main/kotlin/app/termora/HostTerminalTab.kt b/src/main/kotlin/app/termora/HostTerminalTab.kt index 25afa35..16267a1 100644 --- a/src/main/kotlin/app/termora/HostTerminalTab.kt +++ b/src/main/kotlin/app/termora/HostTerminalTab.kt @@ -13,7 +13,7 @@ import javax.swing.Icon abstract class HostTerminalTab( val windowScope: WindowScope, val host: Host, - protected val terminal: Terminal = TerminalFactory.getInstance(windowScope).createTerminal() + protected val terminal: Terminal = TerminalFactory.getInstance().createTerminal() ) : PropertyTerminalTab(), DataProvider { companion object { val Host = DataKey(app.termora.Host::class) diff --git a/src/main/kotlin/app/termora/LocalTerminalTab.kt b/src/main/kotlin/app/termora/LocalTerminalTab.kt index d10a123..93d1df1 100644 --- a/src/main/kotlin/app/termora/LocalTerminalTab.kt +++ b/src/main/kotlin/app/termora/LocalTerminalTab.kt @@ -9,7 +9,7 @@ class LocalTerminalTab(windowScope: WindowScope, host: Host) : override suspend fun openPtyConnector(): PtyConnector { val winSize = terminalPanel.winSize() - val ptyConnector = PtyConnectorFactory.getInstance(windowScope).createPtyConnector( + val ptyConnector = PtyConnectorFactory.getInstance().createPtyConnector( winSize.rows, winSize.cols, host.options.envs(), Charsets.toCharset(host.options.encoding, StandardCharsets.UTF_8), diff --git a/src/main/kotlin/app/termora/MultiplePtyConnector.kt b/src/main/kotlin/app/termora/MultiplePtyConnector.kt index dcb8928..db4245e 100644 --- a/src/main/kotlin/app/termora/MultiplePtyConnector.kt +++ b/src/main/kotlin/app/termora/MultiplePtyConnector.kt @@ -14,9 +14,7 @@ class MultiplePtyConnector( private val isMultiple get() = ActionManager.getInstance().isSelected(Actions.MULTIPLE) private val ptyConnectors - get() = ApplicationScope.forApplicationScope() - .windowScopes().map { PtyConnectorFactory.getInstance(it).getPtyConnectors() } - .flatten() + get() = PtyConnectorFactory.getInstance().getPtyConnectors() override fun write(buffer: ByteArray, offset: Int, len: Int) { if (isMultiple) { diff --git a/src/main/kotlin/app/termora/MyTabbedPane.kt b/src/main/kotlin/app/termora/MyTabbedPane.kt index 61a7663..872d8d2 100644 --- a/src/main/kotlin/app/termora/MyTabbedPane.kt +++ b/src/main/kotlin/app/termora/MyTabbedPane.kt @@ -1,7 +1,6 @@ package app.termora import app.termora.actions.AnActionEvent -import app.termora.actions.DataProvider import app.termora.actions.DataProviders import com.formdev.flatlaf.extras.components.FlatTabbedPane import org.apache.commons.lang3.StringUtils @@ -237,11 +236,8 @@ class MyTabbedPane : FlatTabbedPane() { private fun dragToAnotherWindow(oldFrame: TermoraFrame, frame: TermoraFrame) { val tab = this.terminalTab ?: return - val terminalPanel = (tab as DataProvider?)?.getData(DataProviders.TerminalPanel) ?: return val tabbedManager = frame.getData(DataProviders.TerminalTabbed) ?: return val tabbedPane = frame.getData(DataProviders.TabbedPane) ?: return - val windowScope = frame.getData(DataProviders.WindowScope) ?: return - val oldWindowScope = oldFrame.getData(DataProviders.WindowScope) ?: return val location = Point(MouseInfo.getPointerInfo().location) SwingUtilities.convertPointFromScreen(location, tabbedPane) val index = tabbedPane.indexAtLocation(location.x, location.y) @@ -253,11 +249,6 @@ class MyTabbedPane : FlatTabbedPane() { index ) - TerminalPanelFactory.getInstance(oldWindowScope).removeTerminalPanel(terminalPanel) - TerminalPanelFactory.getInstance(windowScope).addTerminalPanel(terminalPanel) - - - if (frame.hasFocus()) { return } diff --git a/src/main/kotlin/app/termora/PtyConnectorFactory.kt b/src/main/kotlin/app/termora/PtyConnectorFactory.kt index 43b39a3..1c51f3b 100644 --- a/src/main/kotlin/app/termora/PtyConnectorFactory.kt +++ b/src/main/kotlin/app/termora/PtyConnectorFactory.kt @@ -18,8 +18,8 @@ class PtyConnectorFactory : Disposable { companion object { private val log = LoggerFactory.getLogger(PtyConnectorFactory::class.java) - fun getInstance(scope: Scope): PtyConnectorFactory { - return scope.getOrCreate(PtyConnectorFactory::class) { PtyConnectorFactory() } + fun getInstance(): PtyConnectorFactory { + return ApplicationScope.forApplicationScope().getOrCreate(PtyConnectorFactory::class) { PtyConnectorFactory() } } } diff --git a/src/main/kotlin/app/termora/PtyHostTerminalTab.kt b/src/main/kotlin/app/termora/PtyHostTerminalTab.kt index 9e9b6cc..267cfef 100644 --- a/src/main/kotlin/app/termora/PtyHostTerminalTab.kt +++ b/src/main/kotlin/app/termora/PtyHostTerminalTab.kt @@ -13,7 +13,7 @@ import kotlin.time.Duration.Companion.milliseconds abstract class PtyHostTerminalTab( windowScope: WindowScope, host: Host, - terminal: Terminal = TerminalFactory.getInstance(windowScope).createTerminal() + terminal: Terminal = TerminalFactory.getInstance().createTerminal() ) : HostTerminalTab(windowScope, host, terminal) { companion object { @@ -24,10 +24,10 @@ abstract class PtyHostTerminalTab( private var readerJob: Job? = null private val ptyConnectorDelegate = PtyConnectorDelegate() - private val terminalPanelFactory = TerminalPanelFactory.getInstance(windowScope) + private val terminalPanelFactory = TerminalPanelFactory.getInstance() protected val terminalPanel = terminalPanelFactory.createTerminalPanel(terminal, ptyConnectorDelegate) .apply { Disposer.register(this@PtyHostTerminalTab, this) } - protected val ptyConnectorFactory get() = PtyConnectorFactory.getInstance(windowScope) + protected val ptyConnectorFactory get() = PtyConnectorFactory.getInstance() init { terminal.getTerminalModel().setData(DataKey.PtyConnector, ptyConnectorDelegate) diff --git a/src/main/kotlin/app/termora/SettingsOptionsPane.kt b/src/main/kotlin/app/termora/SettingsOptionsPane.kt index 6476b3c..92cfcde 100644 --- a/src/main/kotlin/app/termora/SettingsOptionsPane.kt +++ b/src/main/kotlin/app/termora/SettingsOptionsPane.kt @@ -340,7 +340,7 @@ class SettingsOptionsPane : OptionsPane() { floatingToolbarComboBox.addItemListener { e -> if (e.stateChange == ItemEvent.SELECTED) { terminalSetting.floatingToolbar = floatingToolbarComboBox.selectedItem as Boolean - TerminalPanelFactory.getAllTerminalPanel().forEach { tp -> + TerminalPanelFactory.getInstance().getTerminalPanels().forEach { tp -> if (terminalSetting.floatingToolbar && FloatingToolbarPanel.isPined) { tp.getData(FloatingToolbarPanel.FloatingToolbar)?.triggerShow() } else { @@ -369,7 +369,7 @@ class SettingsOptionsPane : OptionsPane() { if (it.stateChange == ItemEvent.SELECTED) { val style = cursorStyleComboBox.selectedItem as CursorStyle terminalSetting.cursor = style - TerminalFactory.getInstance(ApplicationScope.forWindowScope(owner)).getTerminals().forEach { e -> + TerminalFactory.getInstance().getTerminals().forEach { e -> e.getTerminalModel().setData(DataKey.CursorStyle, style) } } @@ -379,7 +379,7 @@ class SettingsOptionsPane : OptionsPane() { debugComboBox.addItemListener { e -> if (e.stateChange == ItemEvent.SELECTED) { terminalSetting.debug = debugComboBox.selectedItem as Boolean - TerminalFactory.getInstance(ApplicationScope.forWindowScope(owner)).getTerminals().forEach { + TerminalFactory.getInstance().getTerminals().forEach { it.getTerminalModel().setData(TerminalPanel.Debug, terminalSetting.debug) } } @@ -408,10 +408,8 @@ class SettingsOptionsPane : OptionsPane() { } private fun fireFontChanged() { - ApplicationScope.windowScopes().forEach { - TerminalPanelFactory.getInstance(it) + TerminalPanelFactory.getInstance() .fireResize() - } } private fun initView() { diff --git a/src/main/kotlin/app/termora/TerminalFactory.kt b/src/main/kotlin/app/termora/TerminalFactory.kt index 0892c50..a2ea1d4 100644 --- a/src/main/kotlin/app/termora/TerminalFactory.kt +++ b/src/main/kotlin/app/termora/TerminalFactory.kt @@ -10,8 +10,8 @@ class TerminalFactory private constructor() : Disposable { private val terminals = mutableListOf() companion object { - fun getInstance(scope: WindowScope): TerminalFactory { - return scope.getOrCreate(TerminalFactory::class) { TerminalFactory() } + fun getInstance(): TerminalFactory { + return ApplicationScope.forApplicationScope().getOrCreate(TerminalFactory::class) { TerminalFactory() } } } diff --git a/src/main/kotlin/app/termora/TerminalPanelFactory.kt b/src/main/kotlin/app/termora/TerminalPanelFactory.kt index 1031f34..9a81c56 100644 --- a/src/main/kotlin/app/termora/TerminalPanelFactory.kt +++ b/src/main/kotlin/app/termora/TerminalPanelFactory.kt @@ -19,14 +19,9 @@ class TerminalPanelFactory : Disposable { private val Factory = DataKey(TerminalPanelFactory::class) - fun getInstance(scope: Scope): TerminalPanelFactory { - return scope.getOrCreate(TerminalPanelFactory::class) { TerminalPanelFactory() } - } - - fun getAllTerminalPanel(): Array { - return ApplicationScope.forApplicationScope().windowScopes() - .map { getInstance(it) } - .flatMap { it.terminalPanels }.toTypedArray() + fun getInstance(): TerminalPanelFactory { + return ApplicationScope.forApplicationScope() + .getOrCreate(TerminalPanelFactory::class) { TerminalPanelFactory() } } } @@ -97,10 +92,7 @@ class TerminalPanelFactory : Disposable { coroutineScope.launch { while (coroutineScope.isActive) { delay(500.milliseconds) - SwingUtilities.invokeLater { - ApplicationScope.forApplicationScope().windowScopes() - .map { getInstance(it) }.forEach { it.repaintAll() } - } + SwingUtilities.invokeLater { TerminalPanelFactory.getInstance().repaintAll() } } } } diff --git a/src/main/kotlin/app/termora/actions/MultipleAction.kt b/src/main/kotlin/app/termora/actions/MultipleAction.kt index 9a28835..35bfeef 100644 --- a/src/main/kotlin/app/termora/actions/MultipleAction.kt +++ b/src/main/kotlin/app/termora/actions/MultipleAction.kt @@ -1,6 +1,8 @@ package app.termora.actions -import app.termora.* +import app.termora.I18n +import app.termora.Icons +import app.termora.TerminalPanelFactory class MultipleAction : AnAction( I18n.getString("termora.tools.multiple"), @@ -11,7 +13,6 @@ class MultipleAction : AnAction( } override fun actionPerformed(evt: AnActionEvent) { - ApplicationScope.windowScopes().map { TerminalPanelFactory.getInstance(it) } - .forEach { it.repaintAll() } + TerminalPanelFactory.getInstance().repaintAll() } } \ No newline at end of file diff --git a/src/main/kotlin/app/termora/actions/TerminalZoomAction.kt b/src/main/kotlin/app/termora/actions/TerminalZoomAction.kt index 6764bc1..0420708 100644 --- a/src/main/kotlin/app/termora/actions/TerminalZoomAction.kt +++ b/src/main/kotlin/app/termora/actions/TerminalZoomAction.kt @@ -1,6 +1,5 @@ package app.termora.actions -import app.termora.ApplicationScope import app.termora.Database import app.termora.TerminalPanelFactory @@ -13,10 +12,8 @@ abstract class TerminalZoomAction : AnAction() { evt.getData(DataProviders.TerminalPanel) ?: return if (zoom()) { - ApplicationScope.windowScopes().forEach { - TerminalPanelFactory.getInstance(it) + TerminalPanelFactory.getInstance() .fireResize() - } evt.consume() } } diff --git a/src/main/kotlin/app/termora/highlight/ChooseColorTemplateDialog.kt b/src/main/kotlin/app/termora/highlight/ChooseColorTemplateDialog.kt index 7890abf..2c52a87 100644 --- a/src/main/kotlin/app/termora/highlight/ChooseColorTemplateDialog.kt +++ b/src/main/kotlin/app/termora/highlight/ChooseColorTemplateDialog.kt @@ -1,6 +1,5 @@ package app.termora.highlight -import app.termora.ApplicationScope import app.termora.DialogWrapper import app.termora.TerminalFactory import com.formdev.flatlaf.util.SystemInfo @@ -31,7 +30,7 @@ class ChooseColorTemplateDialog(owner: Window, title: String) : DialogWrapper(ow override fun createCenterPanel(): JComponent { val panel = JPanel(GridLayout(2, 8, 4, 4)) - val colorPalette = TerminalFactory.getInstance(ApplicationScope.forWindowScope(this)) + val colorPalette = TerminalFactory.getInstance() .createTerminal().getTerminalModel().getColorPalette() for (i in 1..16) { val c = JPanel() diff --git a/src/main/kotlin/app/termora/highlight/KeywordHighlightDialog.kt b/src/main/kotlin/app/termora/highlight/KeywordHighlightDialog.kt index 6d3994b..f8099cd 100644 --- a/src/main/kotlin/app/termora/highlight/KeywordHighlightDialog.kt +++ b/src/main/kotlin/app/termora/highlight/KeywordHighlightDialog.kt @@ -21,7 +21,7 @@ class KeywordHighlightDialog(owner: Window) : DialogWrapper(owner) { private val table = FlatTable() private val keywordHighlightManager by lazy { KeywordHighlightManager.getInstance() } private val colorPalette by lazy { - TerminalFactory.getInstance(ApplicationScope.forWindowScope(this)).createTerminal().getTerminalModel() + TerminalFactory.getInstance().createTerminal().getTerminalModel() .getColorPalette() } diff --git a/src/main/kotlin/app/termora/highlight/KeywordHighlightManager.kt b/src/main/kotlin/app/termora/highlight/KeywordHighlightManager.kt index 60f9ca1..9866e96 100644 --- a/src/main/kotlin/app/termora/highlight/KeywordHighlightManager.kt +++ b/src/main/kotlin/app/termora/highlight/KeywordHighlightManager.kt @@ -1,8 +1,8 @@ package app.termora.highlight import app.termora.ApplicationScope -import app.termora.TerminalPanelFactory import app.termora.Database +import app.termora.TerminalPanelFactory import org.slf4j.LoggerFactory class KeywordHighlightManager private constructor() { @@ -27,7 +27,7 @@ class KeywordHighlightManager private constructor() { fun addKeywordHighlight(keywordHighlight: KeywordHighlight) { database.addKeywordHighlight(keywordHighlight) keywordHighlights[keywordHighlight.id] = keywordHighlight - ApplicationScope.windowScopes().forEach { TerminalPanelFactory.getInstance(it).repaintAll() } + TerminalPanelFactory.getInstance().repaintAll() if (log.isDebugEnabled) { log.debug("Keyword highlighter added. {}", keywordHighlight) @@ -37,7 +37,7 @@ class KeywordHighlightManager private constructor() { fun removeKeywordHighlight(id: String) { database.removeKeywordHighlight(id) keywordHighlights.remove(id) - ApplicationScope.windowScopes().forEach { TerminalPanelFactory.getInstance(it).repaintAll() } + TerminalPanelFactory.getInstance().repaintAll() if (log.isDebugEnabled) { log.debug("Keyword highlighter removed. {}", id) diff --git a/src/main/kotlin/app/termora/keymgr/KeyManagerPanel.kt b/src/main/kotlin/app/termora/keymgr/KeyManagerPanel.kt index 2ef74b1..f0cbc48 100644 --- a/src/main/kotlin/app/termora/keymgr/KeyManagerPanel.kt +++ b/src/main/kotlin/app/termora/keymgr/KeyManagerPanel.kt @@ -4,7 +4,6 @@ import app.termora.* import app.termora.AES.decodeBase64 import app.termora.actions.AnAction import app.termora.actions.AnActionEvent -import app.termora.actions.DataProviders import app.termora.native.FileChooser import com.formdev.flatlaf.extras.components.FlatComboBox import com.formdev.flatlaf.extras.components.FlatTable @@ -196,7 +195,6 @@ class KeyManagerPanel : JPanel(BorderLayout()) { } private fun sshCopyId(evt: AnActionEvent) { - val windowScope = evt.getData(DataProviders.WindowScope) ?: return val keyPairs = keyPairTable.selectedRows.map { keyPairTableModel.getOhKeyPair(it) } val publicKeys = mutableListOf>() for (keyPair in keyPairs) { @@ -220,7 +218,7 @@ class KeyManagerPanel : JPanel(BorderLayout()) { return } - SSHCopyIdDialog(owner, windowScope, hosts, publicKeys).start() + SSHCopyIdDialog(owner, hosts, publicKeys).start() } private fun exportKeyPairs(file: File, keyPairs: List) { diff --git a/src/main/kotlin/app/termora/keymgr/SSHCopyIdDialog.kt b/src/main/kotlin/app/termora/keymgr/SSHCopyIdDialog.kt index 4039d9e..f7a3e15 100644 --- a/src/main/kotlin/app/termora/keymgr/SSHCopyIdDialog.kt +++ b/src/main/kotlin/app/termora/keymgr/SSHCopyIdDialog.kt @@ -23,7 +23,6 @@ import javax.swing.UIManager class SSHCopyIdDialog( owner: Window, - private val windowScope: WindowScope, private val hosts: List, // key: name , value: public key private val publicKeys: List>, @@ -33,9 +32,9 @@ class SSHCopyIdDialog( private val log = LoggerFactory.getLogger(SSHCopyIdDialog::class.java) } - private val terminalPanelFactory = TerminalPanelFactory.getInstance(windowScope) + private val terminalPanelFactory = TerminalPanelFactory.getInstance() private val terminal by lazy { - TerminalFactory.getInstance(windowScope).createTerminal().apply { + TerminalFactory.getInstance().createTerminal().apply { getTerminalModel().setData(DataKey.ShowCursor, false) getTerminalModel().setData(DataKey.AutoNewline, true) } diff --git a/src/main/kotlin/app/termora/terminal/panel/FloatingToolbarPanel.kt b/src/main/kotlin/app/termora/terminal/panel/FloatingToolbarPanel.kt index e0ab15b..71d8739 100644 --- a/src/main/kotlin/app/termora/terminal/panel/FloatingToolbarPanel.kt +++ b/src/main/kotlin/app/termora/terminal/panel/FloatingToolbarPanel.kt @@ -41,13 +41,13 @@ class FloatingToolbarPanel : FlatToolBar(), Disposable { actionListeners.forEach { it.actionPerformed(evt) } if (isSelected) { - TerminalPanelFactory.getAllTerminalPanel().forEach { + TerminalPanelFactory.getInstance().getTerminalPanels().forEach { it.getData(FloatingToolbar)?.triggerShow() } } else { // 触发者的不隐藏 val c = evt.getData(FloatingToolbar) - TerminalPanelFactory.getAllTerminalPanel().forEach { + TerminalPanelFactory.getInstance().getTerminalPanels().forEach { val e = it.getData(FloatingToolbar) if (c != e) { e?.triggerHide()