Skip to content

Commit f6ad127

Browse files
committed
dont set dialog size, make dialog undecorated (redhat-developer#637)
Signed-off-by: Andre Dietisheim <[email protected]>
1 parent bf7c7b2 commit f6ad127

File tree

2 files changed

+84
-17
lines changed

2 files changed

+84
-17
lines changed

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/SwingUtils.kt

+31
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,19 @@
1010
******************************************************************************/
1111
package com.redhat.devtools.intellij.kubernetes
1212

13+
import com.intellij.openapi.Disposable
14+
import com.intellij.openapi.wm.impl.IdeGlassPaneEx
15+
import com.intellij.ui.WindowMoveListener
16+
import com.intellij.ui.WindowResizeListener
1317
import com.intellij.ui.components.JBLabel
18+
import com.intellij.util.ui.JBFont
1419
import com.intellij.util.ui.JBUI
1520
import com.intellij.util.ui.UIUtil
21+
import java.awt.Font
22+
import java.util.stream.Stream
23+
import javax.swing.JComponent
24+
import javax.swing.JLabel
25+
import javax.swing.JRootPane
1626
import javax.swing.text.JTextComponent
1727

1828
fun createExplanationLabel(text: String): JBLabel {
@@ -28,3 +38,24 @@ fun insertNewLineAtCaret(textComponent: JTextComponent) {
2838
textComponent.text = newText
2939
textComponent.caretPosition = caretPosition + 1
3040
}
41+
42+
fun setGlassPaneResizable(rootPane: JRootPane, disposable: Disposable?) {
43+
val resizeListener = WindowResizeListener(rootPane, JBUI.insets(10), null)
44+
val glassPane = rootPane.glassPane as IdeGlassPaneEx
45+
glassPane.addMousePreprocessor(resizeListener, disposable!!)
46+
glassPane.addMouseMotionPreprocessor(resizeListener, disposable)
47+
}
48+
49+
fun setMovable(rootPane: JRootPane, vararg movableComponents: JComponent) {
50+
val windowMoveListener = WindowMoveListener(rootPane)
51+
Stream.of(*movableComponents).forEach { component: JComponent ->
52+
component.addMouseListener(
53+
windowMoveListener
54+
)
55+
}
56+
}
57+
58+
fun setBold(label: JLabel) {
59+
label.font = JBFont.create(label.font.deriveFont(Font.BOLD))
60+
}
61+

src/main/kotlin/com/redhat/devtools/intellij/kubernetes/dialogs/ResourceNameDialog.kt

+53-17
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,27 @@
1010
******************************************************************************/
1111
package com.redhat.devtools.intellij.kubernetes.dialogs
1212

13+
import com.intellij.openapi.actionSystem.ActionManager
14+
import com.intellij.openapi.actionSystem.AnActionEvent
15+
import com.intellij.openapi.actionSystem.CommonShortcuts
16+
import com.intellij.openapi.project.DumbAwareAction
1317
import com.intellij.openapi.project.Project
1418
import com.intellij.openapi.ui.DialogWrapper
1519
import com.intellij.openapi.ui.ValidationInfo
20+
import com.intellij.ui.PopupBorder
1621
import com.intellij.ui.TextFieldWithAutoCompletion
1722
import com.intellij.ui.TextFieldWithAutoCompletionListProvider
1823
import com.intellij.ui.components.JBLabel
19-
import com.intellij.util.ui.JBUI
24+
import com.redhat.devtools.intellij.kubernetes.setBold
25+
import com.redhat.devtools.intellij.kubernetes.setGlassPaneResizable
26+
import com.redhat.devtools.intellij.kubernetes.setMovable
2027
import io.fabric8.kubernetes.api.model.HasMetadata
21-
import java.awt.BorderLayout
28+
import net.miginfocom.swing.MigLayout
2229
import java.awt.Point
23-
import javax.swing.Box
24-
import javax.swing.BoxLayout
2530
import javax.swing.JComponent
2631
import javax.swing.JPanel
32+
import javax.swing.JRootPane
33+
import javax.swing.RootPaneContainer
2734
import javax.swing.SwingConstants
2835

2936
class ResourceNameDialog<NAMESPACE: HasMetadata>(
@@ -34,9 +41,8 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
3441
private val location: Point?
3542
) : DialogWrapper(project, false) {
3643

37-
companion object {
38-
private const val HEIGHT = 40
39-
private const val WIDTH = 300
44+
private val title = JBLabel("Set current $kind").apply {
45+
setBold(this)
4046
}
4147

4248
private val nameTextField = TextFieldWithAutoCompletion(
@@ -55,24 +61,31 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
5561
}
5662

5763
override fun createCenterPanel(): JComponent {
58-
return JPanel(BorderLayout()).apply {
64+
return JPanel(
65+
MigLayout("ins 4, gap 4, fillx, filly, hidemode 3")
66+
).apply {
67+
add(title, "gapbottom 10, span 2, wrap")
5968
val label = JBLabel("Current $kind:", SwingConstants.LEFT)
60-
label.border = JBUI.Borders.empty(0, 2, 2, 0)
61-
add(label, BorderLayout.PAGE_START)
62-
add(nameTextField, BorderLayout.CENTER)
69+
add(label)
70+
add(nameTextField, "growx, pushx, w min:200, wrap")
6371
}
6472
}
6573

6674
override fun init() {
67-
title = "Set Current $kind"
68-
setResizable(false)
69-
setOKButtonText("Set")
75+
super.init()
76+
setUndecorated(true)
77+
val dialogWindow = peer.window
78+
val rootPane = (dialogWindow as RootPaneContainer).rootPane
79+
registerShortcuts(rootPane)
80+
setBorders(rootPane)
81+
setGlassPaneResizable(peer.rootPane, disposable)
82+
setMovable(getRootPane(), title)
83+
isResizable = false
7084
isModal = false
71-
setSize(WIDTH, HEIGHT)
7285
if (location != null) {
7386
setLocation(location.x, location.y)
7487
}
75-
super.init()
88+
setOKButtonText("Set")
7689
}
7790

7891
override fun getPreferredFocusedComponent(): JComponent {
@@ -96,4 +109,27 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
96109
super.doOKAction()
97110
onOk.invoke(nameTextField.text)
98111
}
99-
}
112+
113+
private fun registerShortcuts(rootPane: JRootPane) {
114+
val escape = ActionManager.getInstance().getAction("EditorEscape")
115+
DumbAwareAction.create { e: AnActionEvent? -> closeImmediately() }
116+
.registerCustomShortcutSet(
117+
escape?.shortcutSet ?: CommonShortcuts.ESCAPE,
118+
rootPane,
119+
myDisposable
120+
)
121+
}
122+
123+
124+
private fun setBorders(rootPane: JRootPane) {
125+
rootPane.border = PopupBorder.Factory.create(true, true)
126+
rootPane.windowDecorationStyle = JRootPane.NONE
127+
}
128+
129+
private fun closeImmediately() {
130+
if (isVisible) {
131+
doCancelAction()
132+
}
133+
}
134+
135+
}

0 commit comments

Comments
 (0)