11package cn.yiiguxing.plugin.md.palette
22
33import com.intellij.icons.AllIcons
4+ import com.intellij.openapi.Disposable
45import com.intellij.openapi.ide.CopyPasteManager
56import com.intellij.openapi.project.Project
67import com.intellij.openapi.ui.DialogWrapper
78import com.intellij.openapi.ui.JBMenuItem
89import com.intellij.openapi.ui.JBPopupMenu
10+ import com.intellij.openapi.util.Disposer
11+ import com.intellij.openapi.wm.IdeFocusManager
912import com.intellij.ui.JBColor
1013import com.intellij.ui.PopupMenuListenerAdapter
1114import com.intellij.ui.border.CustomLineBorder
@@ -40,9 +43,10 @@ class MaterialPaletteDialog(project: Project?) : DialogWrapper(project) {
4043
4144 init {
4245 title = " Material Palette"
43- peer.setAppIcons()
46+ isModal = false
4447 setResizable(false )
4548
49+ peer.setAppIcons()
4650 form.init ()
4751 init ()
4852 }
@@ -225,5 +229,28 @@ class MaterialPaletteDialog(project: Project?) : DialogWrapper(project) {
225229 private const val COLOR_BOX_SIZE = 40
226230 private val BORDER_COLOR = JBColor (0xB3B3B3 , 0x232323 )
227231 private val BORDER_COLOR_FIXED = JBColor (0xB3B3B3 , 0x000000 )
232+
233+ private val sDialogMap = HashMap <Project ?, MaterialPaletteDialog >()
234+
235+ fun show (project : Project ? ) {
236+ val dialog = synchronized(sDialogMap) {
237+ sDialogMap.getOrPut(project) {
238+ MaterialPaletteDialog (project).apply {
239+ Disposer .register(disposable, Disposable {
240+ synchronized(sDialogMap) {
241+ sDialogMap.remove(project)
242+ }
243+ })
244+ project?.let { Disposer .register(it, disposable) }
245+ }
246+ }
247+ }
248+
249+ if (! dialog.isShowing) {
250+ dialog.show()
251+ } else {
252+ IdeFocusManager .getInstance(project).requestFocus(dialog.window, true )
253+ }
254+ }
228255 }
229256}
0 commit comments