mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-16 02:12:58 +08:00
chore: improve factories
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -10,8 +10,8 @@ class TerminalFactory private constructor() : Disposable {
|
||||
private val terminals = mutableListOf<Terminal>()
|
||||
|
||||
companion object {
|
||||
fun getInstance(scope: WindowScope): TerminalFactory {
|
||||
return scope.getOrCreate(TerminalFactory::class) { TerminalFactory() }
|
||||
fun getInstance(): TerminalFactory {
|
||||
return ApplicationScope.forApplicationScope().getOrCreate(TerminalFactory::class) { TerminalFactory() }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<TerminalPanel> {
|
||||
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() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<Pair<String, String>>()
|
||||
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<OhKeyPair>) {
|
||||
|
||||
@@ -23,7 +23,6 @@ import javax.swing.UIManager
|
||||
|
||||
class SSHCopyIdDialog(
|
||||
owner: Window,
|
||||
private val windowScope: WindowScope,
|
||||
private val hosts: List<Host>,
|
||||
// key: name , value: public key
|
||||
private val publicKeys: List<Pair<String, String>>,
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user