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