mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
platform ui: load/unload a module by double click (IDEA-176860)
This commit is contained in:
+44
-15
@@ -33,6 +33,7 @@ import com.intellij.openapi.ui.VerticalFlowLayout
|
||||
import com.intellij.openapi.util.text.NaturalComparator
|
||||
import com.intellij.openapi.wm.IdeFocusManager
|
||||
import com.intellij.ui.ColoredTreeCellRenderer
|
||||
import com.intellij.ui.DoubleClickListener
|
||||
import com.intellij.ui.TreeSpeedSearch
|
||||
import com.intellij.ui.components.JBLabel
|
||||
import com.intellij.ui.components.JBScrollPane
|
||||
@@ -45,13 +46,13 @@ import java.awt.BorderLayout
|
||||
import java.awt.Dimension
|
||||
import java.awt.GridBagConstraints
|
||||
import java.awt.GridBagLayout
|
||||
import java.awt.event.MouseEvent
|
||||
import java.util.*
|
||||
import javax.swing.*
|
||||
import javax.swing.tree.DefaultMutableTreeNode
|
||||
import javax.swing.tree.DefaultTreeModel
|
||||
import javax.swing.tree.MutableTreeNode
|
||||
import javax.swing.tree.TreePath
|
||||
import kotlin.comparisons.compareBy
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
@@ -98,22 +99,10 @@ class ConfigureUnloadedModulesDialog(private val project: Project, selectedModul
|
||||
val moveAllToUnloadedButton = JButton(ProjectBundle.message("module.unload.all.button.text"))
|
||||
val moveAllToLoadedButton = JButton(ProjectBundle.message("module.load.all.button.text"))
|
||||
moveToUnloadedButton.addActionListener {
|
||||
val modulesToMove = includeMissingModules(loadedModulesTree.getSelectedModules(), unloadedModulesTree.getAllModules(),
|
||||
dependentsGraph,
|
||||
ProjectBundle.message("module.unload.dependents.dialog.title"),
|
||||
{ selectedSize, additionalSize, additionalFirst -> ProjectBundle.message("module.unload.dependents.dialog.text", selectedSize, additionalSize, additionalFirst)},
|
||||
ProjectBundle.message("module.unload.with.dependents.button.text"),
|
||||
ProjectBundle.message("module.unload.without.dependents.button.text"))
|
||||
moveModules(modulesToMove, loadedModulesTree, unloadedModulesTree)
|
||||
moveToUnloaded()
|
||||
}
|
||||
moveToLoadedButton.addActionListener {
|
||||
val modulesToMove = includeMissingModules(unloadedModulesTree.getSelectedModules(), loadedModulesTree.getAllModules(),
|
||||
GraphAlgorithms.getInstance().invertEdgeDirections(dependentsGraph),
|
||||
ProjectBundle.message("module.load.dependencies.dialog.title"),
|
||||
{ selectedSize, additionalSize, additionalFirst -> ProjectBundle.message("module.load.dependencies.dialog.text", selectedSize, additionalSize, additionalFirst)},
|
||||
ProjectBundle.message("module.load.with.dependencies.button.text"),
|
||||
ProjectBundle.message("module.load.without.dependencies.button.text"))
|
||||
moveModules(modulesToMove, unloadedModulesTree, loadedModulesTree)
|
||||
moveToLoaded()
|
||||
}
|
||||
moveAllToUnloadedButton.addActionListener {
|
||||
moveAllNodes(loadedModulesTree, unloadedModulesTree)
|
||||
@@ -125,6 +114,8 @@ class ConfigureUnloadedModulesDialog(private val project: Project, selectedModul
|
||||
buttonsPanel.add(moveToLoadedButton)
|
||||
buttonsPanel.add(moveAllToUnloadedButton)
|
||||
buttonsPanel.add(moveAllToLoadedButton)
|
||||
loadedModulesTree.installDoubleClickListener(this::moveToUnloaded)
|
||||
unloadedModulesTree.installDoubleClickListener(this::moveToLoaded)
|
||||
|
||||
val mainPanel = JPanel(BorderLayout())
|
||||
val gridBag = GridBag().setDefaultWeightX(0, 0.5).setDefaultWeightX(1, 0.0).setDefaultWeightX(2, 0.5)
|
||||
@@ -143,6 +134,32 @@ class ConfigureUnloadedModulesDialog(private val project: Project, selectedModul
|
||||
return mainPanel
|
||||
}
|
||||
|
||||
private fun moveToLoaded() {
|
||||
val modulesToMove = includeMissingModules(unloadedModulesTree.getSelectedModules(), loadedModulesTree.getAllModules(),
|
||||
GraphAlgorithms.getInstance().invertEdgeDirections(dependentsGraph),
|
||||
ProjectBundle.message("module.load.dependencies.dialog.title"),
|
||||
{ selectedSize, additionalSize, additionalFirst ->
|
||||
ProjectBundle.message("module.load.dependencies.dialog.text", selectedSize, additionalSize,
|
||||
additionalFirst)
|
||||
},
|
||||
ProjectBundle.message("module.load.with.dependencies.button.text"),
|
||||
ProjectBundle.message("module.load.without.dependencies.button.text"))
|
||||
moveModules(modulesToMove, unloadedModulesTree, loadedModulesTree)
|
||||
}
|
||||
|
||||
private fun moveToUnloaded() {
|
||||
val modulesToMove = includeMissingModules(loadedModulesTree.getSelectedModules(), unloadedModulesTree.getAllModules(),
|
||||
dependentsGraph,
|
||||
ProjectBundle.message("module.unload.dependents.dialog.title"),
|
||||
{ selectedSize, additionalSize, additionalFirst ->
|
||||
ProjectBundle.message("module.unload.dependents.dialog.text", selectedSize, additionalSize,
|
||||
additionalFirst)
|
||||
},
|
||||
ProjectBundle.message("module.unload.with.dependents.button.text"),
|
||||
ProjectBundle.message("module.unload.without.dependents.button.text"))
|
||||
moveModules(modulesToMove, loadedModulesTree, unloadedModulesTree)
|
||||
}
|
||||
|
||||
private fun includeMissingModules(selected: List<ModuleDescription>, availableTargetModules: List<ModuleDescription>,
|
||||
dependenciesGraph: Graph<ModuleDescription>,
|
||||
dialogTitle: String, dialogMessage: (Int, Int, String) -> String, yesButtonText: String,
|
||||
@@ -223,6 +240,18 @@ private class ModuleDescriptionsTree(project: Project) {
|
||||
|
||||
fun getAllModules() = getAllModulesUnder(root)
|
||||
|
||||
fun installDoubleClickListener(action: () -> Unit) {
|
||||
object : DoubleClickListener() {
|
||||
override fun onDoubleClick(event: MouseEvent): Boolean {
|
||||
if (tree.selectionPaths.all { (it?.lastPathComponent as? ModuleDescriptionTreeNode)?.isLeaf == true }) {
|
||||
action()
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
}.installOn(tree)
|
||||
}
|
||||
|
||||
private fun getAllModulesUnder(node: ModuleDescriptionTreeNode): List<ModuleDescription> {
|
||||
val modules = ArrayList<ModuleDescription>()
|
||||
TreeUtil.traverse(node, { node ->
|
||||
|
||||
Reference in New Issue
Block a user