mirror of
https://github.com/TermoraDev/termora.git
synced 2026-01-15 18:02:58 +08:00
fix: transfer causing repositioning after refresh
This commit is contained in:
@@ -106,6 +106,7 @@ internal class TransportPanel(
|
||||
private val loadingPanel = LoadingPanel()
|
||||
private val model = TransportTableModel()
|
||||
private val table = JTable(model)
|
||||
private val tableScrollPane = JScrollPane(table)
|
||||
private val sorter = TableRowSorter(table.model)
|
||||
private var hasParent = false
|
||||
private val panel get() = this
|
||||
@@ -211,7 +212,7 @@ internal class TransportPanel(
|
||||
|
||||
|
||||
table.setDefaultRenderer(Any::class.java, MyDefaultTableCellRenderer())
|
||||
val scrollPane = JScrollPane(table)
|
||||
val scrollPane = tableScrollPane
|
||||
scrollPane.apply { border = BorderFactory.createMatteBorder(1, 0, 0, 0, DynamicColor.BorderColor) }
|
||||
|
||||
layeredPane.add(scrollPane, JLayeredPane.DEFAULT_LAYER as Any)
|
||||
@@ -241,7 +242,11 @@ internal class TransportPanel(
|
||||
|
||||
Disposer.register(this, editTransferListener)
|
||||
|
||||
refreshBtn.addActionListener { reload(requestFocus = true) }
|
||||
refreshBtn.addActionListener {
|
||||
val filename = getSelectFilename()
|
||||
if (filename != null) registerSelectRow(filename)
|
||||
reload(requestFocus = true)
|
||||
}
|
||||
|
||||
prevBtn.addActionListener { navigator.back() }
|
||||
nextBtn.addActionListener { navigator.forward() }
|
||||
@@ -303,11 +308,16 @@ internal class TransportPanel(
|
||||
if (target.fileSystem != loader.getSyncTransportSupport().getFileSystem()) return
|
||||
}
|
||||
if (target.pathString == workdir?.pathString || target.parent.pathString == workdir?.pathString) {
|
||||
if (loading) {
|
||||
registerNextReloadCallback { reload(requestFocus = false) }
|
||||
} else {
|
||||
val c = {
|
||||
val filename = getSelectFilename()
|
||||
if (filename != null) registerSelectRow(filename)
|
||||
reload(requestFocus = false)
|
||||
}
|
||||
if (loading) {
|
||||
registerNextReloadCallback { c.invoke() }
|
||||
} else {
|
||||
c.invoke()
|
||||
}
|
||||
}
|
||||
}
|
||||
}).let { Disposer.register(this, it) }
|
||||
@@ -658,6 +668,9 @@ internal class TransportPanel(
|
||||
}
|
||||
|
||||
fun registerSelectRow(name: String) {
|
||||
val verticalValue = tableScrollPane.verticalScrollBar.value
|
||||
val horizontalValue = tableScrollPane.horizontalScrollBar.value
|
||||
|
||||
registerNextReloadCallback {
|
||||
for (i in 0 until model.rowCount) {
|
||||
if (model.getAttributes(i).name == name) {
|
||||
@@ -665,12 +678,22 @@ internal class TransportPanel(
|
||||
table.clearSelection()
|
||||
table.setRowSelectionInterval(c, c)
|
||||
table.scrollRectToVisible(table.getCellRect(c, TransportTableModel.COLUMN_NAME, true))
|
||||
tableScrollPane.verticalScrollBar.value = verticalValue
|
||||
tableScrollPane.horizontalScrollBar.value = horizontalValue
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getSelectFilename(): String? {
|
||||
val row = table.selectedRow
|
||||
if (row < 0) return null
|
||||
val c = sorter.convertRowIndexToModel(row)
|
||||
if (c < 0) return null
|
||||
return model.getAttributes(c).name
|
||||
}
|
||||
|
||||
private fun registerNextReloadCallback(block: () -> Unit) {
|
||||
nextReloadCallbacks.computeIfAbsent(mod.get()) { mutableListOf() }
|
||||
.add(block)
|
||||
@@ -1083,6 +1106,8 @@ internal class TransportPanel(
|
||||
} else if (actionCommand == TransportPopupMenu.ActionCommand.Delete) {
|
||||
transfer(InternalTransferManager.TransferMode.Delete)
|
||||
} else if (actionCommand == TransportPopupMenu.ActionCommand.Refresh) {
|
||||
val filename = getSelectFilename()
|
||||
if (filename != null) registerSelectRow(filename)
|
||||
reload(requestFocus = true)
|
||||
} else if (actionCommand == TransportPopupMenu.ActionCommand.Edit) {
|
||||
edit()
|
||||
|
||||
Reference in New Issue
Block a user