feat: support transfer double-click behavior

This commit is contained in:
hstyi
2025-07-29 09:14:50 +08:00
committed by hstyi
parent 8323f8eb5d
commit a5638329e7
7 changed files with 50 additions and 1 deletions

View File

@@ -650,6 +650,7 @@ class SettingsOptionsPane : OptionsPane() {
private val browseEditCommandBtn = JButton(Icons.folder)
private val pinTabComboBox = YesOrNoComboBox()
private val preserveModificationTimeComboBox = YesOrNoComboBox()
private val doubleClickComboBox = OutlineComboBox<String>()
private val sftp get() = database.sftp
init {
@@ -699,6 +700,13 @@ class SettingsOptionsPane : OptionsPane() {
})
doubleClickComboBox.addItemListener(object : ItemListener {
override fun itemStateChanged(e: ItemEvent) {
if (e.stateChange != ItemEvent.SELECTED) return
sftp.dbClickBehavior = doubleClickComboBox.selectedItem as String
}
})
preserveModificationTimeComboBox.addItemListener {
if (it.stateChange == ItemEvent.SELECTED) {
sftp.preserveModificationTime = preserveModificationTimeComboBox.selectedItem as Boolean
@@ -780,6 +788,26 @@ class SettingsOptionsPane : OptionsPane() {
sftpCommandField.text = sftp.sftpCommand
pinTabComboBox.selectedItem = sftp.pinTab
preserveModificationTimeComboBox.selectedItem = sftp.preserveModificationTime
doubleClickComboBox.renderer = object : DefaultListCellRenderer() {
override fun getListCellRendererComponent(
list: JList<*>?,
value: Any?,
index: Int,
isSelected: Boolean,
cellHasFocus: Boolean
): Component? {
var text = value?.toString()
if (value == "Edit") text = I18n.getString("termora.keymgr.edit")
if (value == "Transfer") text = getTitle()
return super.getListCellRendererComponent(list, text, index, isSelected, cellHasFocus)
}
}
doubleClickComboBox.addItem("Transfer")
doubleClickComboBox.addItem("Edit")
doubleClickComboBox.selectedItem = sftp.dbClickBehavior
}
override fun getIcon(isSelected: Boolean): Icon {
@@ -813,6 +841,8 @@ class SettingsOptionsPane : OptionsPane() {
builder.add(editCommandField).xy(3, rows).apply { rows += 2 }
builder.add("${I18n.getString("termora.tabbed.contextmenu.sftp-command")}:").xy(1, rows)
builder.add(sftpCommandField).xy(3, rows).apply { rows += 2 }
builder.add("${I18n.getString("termora.settings.sftp.db-click-behavior")}:").xy(1, rows)
builder.add(doubleClickComboBox).xy(3, rows).apply { rows += 2 }
builder.add("${I18n.getString("termora.settings.sftp.default-directory")}:").xy(1, rows)
builder.add(defaultDirectoryField).xy(3, rows).apply { rows += 2 }
builder.add(box).xyw(1, rows, 3).apply { rows += 2 }

View File

@@ -763,6 +763,12 @@ class DatabaseManager private constructor() : Disposable {
*/
var editCommand by StringPropertyDelegate(StringUtils.EMPTY)
/**
* 双击行为
*
* Transfer、Edit
*/
var dbClickBehavior by StringPropertyDelegate("Transfer")
/**
* sftp command

View File

@@ -430,6 +430,7 @@ internal class TransportPanel(
})
table.addMouseListener(object : MouseAdapter() {
private val sftp get() = DatabaseManager.getInstance().sftp
override fun mouseClicked(e: MouseEvent) {
if (SwingUtilities.isLeftMouseButton(e) && e.clickCount % 2 == 0) {
var row = table.selectedRow
@@ -438,10 +439,18 @@ internal class TransportPanel(
val attributes = model.getAttributes(row)
if (attributes.isDirectory) {
enterSelectionFolder()
} else if (sftp.dbClickBehavior == "Edit") {
val path = model.getPath(row)
val target = Application.createSubTemporaryDir().resolve(path.name)
val transferId = internalTransferManager.addHighTransfer(path, target)
editTransferListener.addListenTransfer(transferId)
} else {
val paths = listOf(model.getPath(row) to attributes)
if (loader.isOpened() && internalTransferManager.canTransfer(paths.map { it.first })) {
internalTransferManager.addTransfer(paths, InternalTransferManager.TransferMode.Transfer)
internalTransferManager.addTransfer(
paths,
InternalTransferManager.TransferMode.Transfer
)
}
}
} else if (SwingUtilities.isRightMouseButton(e)) {

View File

@@ -115,6 +115,7 @@ termora.settings.keymap.already-exists=The shortcut [{0}] is already in use by [
termora.settings.sftp.edit-command=Edit Command
termora.settings.sftp.db-click-behavior=Double-click
termora.settings.sftp.fixed-tab=Fixed tab
termora.settings.sftp.default-directory=Default Directory
termora.settings.sftp.preserve-time=Preserve original file modification time

View File

@@ -101,6 +101,7 @@ termora.settings.keymap.already-exists=Комбинация [{0}] уже исп
termora.settings.sftp.edit-command=Редактировать команду
termora.settings.sftp.db-click-behavior=двойной щелчок
termora.settings.sftp.fixed-tab=Отображать вкладку
termora.settings.sftp.default-directory=Директория по умолчанию
termora.settings.sftp.preserve-time=Сохранять исходное время модификации файла

View File

@@ -127,6 +127,7 @@ termora.settings.keymap.already-exists=快捷键 [{0}] 已经被 [{1}] 占用
termora.settings.sftp.edit-command=编辑命令
termora.settings.sftp.db-click-behavior=双击行为
termora.settings.sftp.fixed-tab=固定标签
termora.settings.sftp.default-directory=默认目录
termora.settings.sftp.preserve-time=保留原始文件修改时间

View File

@@ -56,6 +56,7 @@ termora.settings.keymap.action=操作
termora.settings.keymap.already-exists=快捷鍵 [{0}] 已經被 [{1}] 占用
termora.settings.sftp.edit-command=編輯命令
termora.settings.sftp.db-click-behavior=按兩下行為
termora.settings.sftp.fixed-tab=固定標籤
termora.settings.sftp.default-directory=預設目錄
termora.settings.sftp.preserve-time=保留原始文件修改時間