feat: support to open host by enter

This commit is contained in:
hstyi
2025-02-24 17:00:04 +08:00
committed by hstyi
parent f3c5009a45
commit 562c1f98fe
4 changed files with 35 additions and 13 deletions

View File

@@ -23,6 +23,7 @@ class MyTabbedPane : FlatTabbedPane() {
.getData(DataProviders.TermoraFrame) as TermoraFrame .getData(DataProviders.TermoraFrame) as TermoraFrame
init { init {
isFocusable = false
initEvents() initEvents()
} }

View File

@@ -30,10 +30,7 @@ import java.awt.Dimension
import java.awt.datatransfer.DataFlavor import java.awt.datatransfer.DataFlavor
import java.awt.datatransfer.Transferable import java.awt.datatransfer.Transferable
import java.awt.datatransfer.UnsupportedFlavorException import java.awt.datatransfer.UnsupportedFlavorException
import java.awt.event.ActionEvent import java.awt.event.*
import java.awt.event.ActionListener
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
import java.io.* import java.io.*
import java.util.* import java.util.*
import java.util.function.Function import java.util.function.Function
@@ -216,6 +213,26 @@ class NewHostTree : JXTree() {
} }
}) })
addKeyListener(object : KeyAdapter() {
override fun keyPressed(e: KeyEvent) {
if (e.keyCode == KeyEvent.VK_ENTER && doubleClickConnection) {
val nodes = getSelectionHostTreeNodes(false)
if (nodes.size == 1 && nodes.first().host.protocol == Protocol.Folder) {
val path = TreePath(model.getPathToRoot(nodes.first()))
if (isExpanded(path)) {
collapsePath(path)
} else {
expandPath(path)
}
} else {
for (node in getSelectionHostTreeNodes(true)) {
openHostAction?.actionPerformed(OpenHostActionEvent(e.source, node.host, e))
}
}
}
}
})
// rename // rename
getCellEditor().addCellEditorListener(object : CellEditorListener { getCellEditor().addCellEditorListener(object : CellEditorListener {
override fun editingStopped(e: ChangeEvent) { override fun editingStopped(e: ChangeEvent) {

View File

@@ -78,21 +78,14 @@ class TerminalTabbed(
tabs[oldIndex].onLostFocus() tabs[oldIndex].onLostFocus()
} }
tabbedPane.getComponentAt(newIndex).requestFocusInWindow()
if (newIndex >= 0 && tabs.size > newIndex) { if (newIndex >= 0 && tabs.size > newIndex) {
tabs[newIndex].onGrabFocus() tabs[newIndex].onGrabFocus()
} }
SwingUtilities.invokeLater { tabbedPane.getComponentAt(newIndex).requestFocusInWindow() }
} }
// 选择变动
tabbedPane.addChangeListener {
if (tabbedPane.selectedIndex >= 0) {
val c = tabbedPane.getComponentAt(tabbedPane.selectedIndex)
c.requestFocusInWindow()
}
}
// 右键菜单 // 右键菜单
tabbedPane.addMouseListener(object : MouseAdapter() { tabbedPane.addMouseListener(object : MouseAdapter() {

View File

@@ -13,7 +13,9 @@ import com.formdev.flatlaf.extras.components.FlatTextField
import org.apache.commons.lang3.StringUtils import org.apache.commons.lang3.StringUtils
import org.jdesktop.swingx.action.ActionManager import org.jdesktop.swingx.action.ActionManager
import java.awt.BorderLayout import java.awt.BorderLayout
import java.awt.Component
import java.awt.Dimension import java.awt.Dimension
import java.awt.KeyboardFocusManager
import java.awt.event.ActionEvent import java.awt.event.ActionEvent
import java.awt.event.ComponentAdapter import java.awt.event.ComponentAdapter
import java.awt.event.ComponentEvent import java.awt.event.ComponentEvent
@@ -32,6 +34,7 @@ class WelcomePanel(private val windowScope: WindowScope) : JPanel(BorderLayout()
private var fullContent = properties.getString("WelcomeFullContent", "false").toBoolean() private var fullContent = properties.getString("WelcomeFullContent", "false").toBoolean()
private val dataProviderSupport = DataProviderSupport() private val dataProviderSupport = DataProviderSupport()
private val hostTreeModel = hostTree.model as NewHostTreeModel private val hostTreeModel = hostTree.model as NewHostTreeModel
private var lastFocused: Component? = null
private val filterableHostTreeModel = FilterableHostTreeModel(hostTree) { private val filterableHostTreeModel = FilterableHostTreeModel(hostTree) {
searchTextField.text.isBlank() searchTextField.text.isBlank()
} }
@@ -258,6 +261,14 @@ class WelcomePanel(private val windowScope: WindowScope) : JPanel(BorderLayout()
return false return false
} }
override fun onLostFocus() {
lastFocused = KeyboardFocusManager.getCurrentKeyboardFocusManager().focusOwner
}
override fun onGrabFocus() {
SwingUtilities.invokeLater { lastFocused?.requestFocusInWindow() }
}
override fun dispose() { override fun dispose() {
properties.putString("WelcomeFullContent", fullContent.toString()) properties.putString("WelcomeFullContent", fullContent.toString())
properties.putString("Welcome.HostTree.state", TreeUtils.saveExpansionState(hostTree)) properties.putString("Welcome.HostTree.state", TreeUtils.saveExpansionState(hostTree))