mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
vcs: migrate GitStageTree to AsyncChangesTree
GitOrigin-RevId: 38cb861dff4d504ff88cb6289c97368f5ad944db
This commit is contained in:
committed by
intellij-monorepo-bot
parent
df3c76b47b
commit
db4cb88dc6
@@ -311,9 +311,11 @@ internal class GitStagePanel(private val tracker: GitStageTracker,
|
||||
fun editedCommitChanged() {
|
||||
rebuildTree()
|
||||
|
||||
commitPanel.editedCommit?.let {
|
||||
val node = TreeUtil.findNodeWithObject(root, it)
|
||||
node?.let { expandPath(TreeUtil.getPathFromRoot(node)) }
|
||||
invokeAfterRefresh {
|
||||
commitPanel.editedCommit?.let {
|
||||
val node = TreeUtil.findNodeWithObject(root, it)
|
||||
node?.let { expandPath(TreeUtil.getPathFromRoot(node)) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ import javax.swing.tree.DefaultTreeModel
|
||||
abstract class GitStageTree(project: Project,
|
||||
private val settings: GitStageUiSettings,
|
||||
parentDisposable: Disposable) :
|
||||
ChangesTree(project, false, true) {
|
||||
AsyncChangesTree(project, false, true) {
|
||||
|
||||
protected abstract val state: GitStageTracker.State
|
||||
protected abstract val ignoredFilePaths: Map<VirtualFile, List<FilePath>>
|
||||
@@ -88,26 +88,30 @@ abstract class GitStageTree(project: Project,
|
||||
|
||||
protected abstract fun createHoverIcon(node: ChangesBrowserGitFileStatusNode): HoverIcon?
|
||||
|
||||
override fun rebuildTree() {
|
||||
val builder = MyTreeModelBuilder(myProject, groupingSupport.grouping)
|
||||
|
||||
builder.createKindNode(NodeKind.STAGED)
|
||||
builder.createKindNode(NodeKind.UNSTAGED)
|
||||
|
||||
state.forEachStatus(*NodeKind.values()) { root, status, kind ->
|
||||
builder.insertStatus(root, status, kind)
|
||||
}
|
||||
|
||||
if (settings.ignoredFilesShown()) {
|
||||
builder.insertIgnoredPaths(ignoredFilePaths)
|
||||
}
|
||||
|
||||
customizeTreeModel(builder)
|
||||
updateTreeModel(builder.build())
|
||||
}
|
||||
|
||||
protected open fun customizeTreeModel(builder: TreeModelBuilder) = Unit
|
||||
|
||||
override val changesTreeModel: AsyncChangesTreeModel = GitStateTreeModel()
|
||||
|
||||
private inner class GitStateTreeModel : SimpleAsyncChangesTreeModel() {
|
||||
override fun buildTreeModelSync(grouping: ChangesGroupingPolicyFactory): DefaultTreeModel {
|
||||
val builder = MyTreeModelBuilder(myProject, grouping)
|
||||
|
||||
builder.createKindNode(NodeKind.STAGED)
|
||||
builder.createKindNode(NodeKind.UNSTAGED)
|
||||
|
||||
state.forEachStatus(*NodeKind.values()) { root, status, kind ->
|
||||
builder.insertStatus(root, status, kind)
|
||||
}
|
||||
|
||||
if (settings.ignoredFilesShown()) {
|
||||
builder.insertIgnoredPaths(ignoredFilePaths)
|
||||
}
|
||||
|
||||
customizeTreeModel(builder)
|
||||
return builder.build()
|
||||
}
|
||||
}
|
||||
|
||||
override fun getData(dataId: String): Any? {
|
||||
return when {
|
||||
GitStageDataKeys.GIT_STAGE_TREE.`is`(dataId) -> this
|
||||
|
||||
Reference in New Issue
Block a user