Skip to content

Commit eb1af3f

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

File tree

2 files changed

+85
-18
lines changed

2 files changed

+85
-18
lines changed

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

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

13+
import com.intellij.openapi.Disposable
14+
import com.intellij.openapi.actionSystem.ActionManager
15+
import com.intellij.openapi.actionSystem.AnActionEvent
16+
import com.intellij.openapi.actionSystem.CommonShortcuts
17+
import com.intellij.openapi.project.DumbAwareAction
18+
import com.intellij.openapi.wm.impl.IdeGlassPaneEx
19+
import com.intellij.ui.PopupBorder
20+
import com.intellij.ui.WindowMoveListener
21+
import com.intellij.ui.WindowResizeListener
1322
import com.intellij.ui.components.JBLabel
23+
import com.intellij.util.ui.JBFont
1424
import com.intellij.util.ui.JBUI
1525
import com.intellij.util.ui.UIUtil
26+
import java.awt.Font
27+
import java.util.stream.Stream
28+
import javax.swing.JComponent
29+
import javax.swing.JLabel
30+
import javax.swing.JRootPane
1631
import javax.swing.text.JTextComponent
1732

1833
fun createExplanationLabel(text: String): JBLabel {
@@ -28,3 +43,40 @@ fun insertNewLineAtCaret(textComponent: JTextComponent) {
2843
textComponent.text = newText
2944
textComponent.caretPosition = caretPosition + 1
3045
}
46+
47+
fun setGlassPaneResizable(rootPane: JRootPane, disposable: Disposable?) {
48+
val resizeListener = WindowResizeListener(rootPane, JBUI.insets(10), null)
49+
val glassPane = rootPane.glassPane as IdeGlassPaneEx
50+
glassPane.addMousePreprocessor(resizeListener, disposable!!)
51+
glassPane.addMouseMotionPreprocessor(resizeListener, disposable)
52+
}
53+
54+
fun setMovable(rootPane: JRootPane, vararg movableComponents: JComponent) {
55+
val windowMoveListener = WindowMoveListener(rootPane)
56+
Stream.of(*movableComponents).forEach { component: JComponent ->
57+
component.addMouseListener(
58+
windowMoveListener
59+
)
60+
}
61+
}
62+
63+
fun setBold(label: JLabel) {
64+
label.font = JBFont.create(label.font.deriveFont(Font.BOLD))
65+
}
66+
67+
fun registerEscapeShortcut(rootPane: JRootPane, closeFunction: () -> Unit, disposable: Disposable) {
68+
val escape = ActionManager.getInstance().getAction("EditorEscape")
69+
DumbAwareAction.create { e: AnActionEvent? -> closeFunction.invoke() }
70+
.registerCustomShortcutSet(
71+
escape?.shortcutSet ?: CommonShortcuts.ESCAPE,
72+
rootPane,
73+
disposable
74+
)
75+
}
76+
77+
fun setRootPaneBorders(rootPane: JRootPane) {
78+
rootPane.border = PopupBorder.Factory.create(true, true)
79+
rootPane.windowDecorationStyle = JRootPane.NONE
80+
}
81+
82+

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

+33-18
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,17 @@ import com.intellij.openapi.ui.ValidationInfo
1616
import com.intellij.ui.TextFieldWithAutoCompletion
1717
import com.intellij.ui.TextFieldWithAutoCompletionListProvider
1818
import com.intellij.ui.components.JBLabel
19-
import com.intellij.util.ui.JBUI
19+
import com.redhat.devtools.intellij.kubernetes.registerEscapeShortcut
20+
import com.redhat.devtools.intellij.kubernetes.setBold
21+
import com.redhat.devtools.intellij.kubernetes.setRootPaneBorders
22+
import com.redhat.devtools.intellij.kubernetes.setGlassPaneResizable
23+
import com.redhat.devtools.intellij.kubernetes.setMovable
2024
import io.fabric8.kubernetes.api.model.HasMetadata
21-
import java.awt.BorderLayout
25+
import net.miginfocom.swing.MigLayout
2226
import java.awt.Point
23-
import javax.swing.Box
24-
import javax.swing.BoxLayout
2527
import javax.swing.JComponent
2628
import javax.swing.JPanel
29+
import javax.swing.RootPaneContainer
2730
import javax.swing.SwingConstants
2831

2932
class ResourceNameDialog<NAMESPACE: HasMetadata>(
@@ -34,9 +37,8 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
3437
private val location: Point?
3538
) : DialogWrapper(project, false) {
3639

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

4244
private val nameTextField = TextFieldWithAutoCompletion(
@@ -55,24 +57,31 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
5557
}
5658

5759
override fun createCenterPanel(): JComponent {
58-
return JPanel(BorderLayout()).apply {
60+
return JPanel(
61+
MigLayout("ins 4, gap 4, fillx, filly, hidemode 3")
62+
).apply {
63+
add(title, "gapbottom 10, span 2, wrap")
5964
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)
65+
add(label)
66+
add(nameTextField, "growx, pushx, w min:200, wrap")
6367
}
6468
}
6569

6670
override fun init() {
67-
title = "Set Current $kind"
68-
setResizable(false)
69-
setOKButtonText("Set")
71+
super.init()
72+
setUndecorated(true)
73+
val dialogWindow = peer.window
74+
val rootPane = (dialogWindow as RootPaneContainer).rootPane
75+
registerEscapeShortcut(rootPane, ::closeImmediately, myDisposable)
76+
setRootPaneBorders(rootPane)
77+
setGlassPaneResizable(peer.rootPane, disposable)
78+
setMovable(getRootPane(), title)
79+
isResizable = false
7080
isModal = false
71-
setSize(WIDTH, HEIGHT)
7281
if (location != null) {
7382
setLocation(location.x, location.y)
7483
}
75-
super.init()
84+
setOKButtonText("Set")
7685
}
7786

7887
override fun getPreferredFocusedComponent(): JComponent {
@@ -86,7 +95,7 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
8695

8796
override fun doValidate(): ValidationInfo? {
8897
return if (nameTextField.text.isEmpty()) {
89-
ValidationInfo("Name musn't be empty", nameTextField)
98+
ValidationInfo("Name mustn't be empty", nameTextField)
9099
} else {
91100
null
92101
}
@@ -96,4 +105,10 @@ class ResourceNameDialog<NAMESPACE: HasMetadata>(
96105
super.doOKAction()
97106
onOk.invoke(nameTextField.text)
98107
}
99-
}
108+
109+
private fun closeImmediately() {
110+
if (isVisible) {
111+
doCancelAction()
112+
}
113+
}
114+
}

0 commit comments

Comments
 (0)