in src/main/java/com/maddyhome/idea/vim/ui/widgets/mode/ModeWidgetPopup.kt [58:117]
fun createPopup(): JBPopup? {
synchronized(this) {
if (currentPopup?.isDisposed == false) return null
val mainPanel = JPanel(BorderLayout())
val buttonPanel = JPanel(FlowLayout(FlowLayout.RIGHT))
val applyButton = JButton("Apply").apply { isEnabled = false }
val cancelButton = JButton("Close")
buttonPanel.add(applyButton)
buttonPanel.add(cancelButton)
mainPanel.add(buttonPanel, BorderLayout.SOUTH)
val tabbedPane = JBTabbedPane()
val lightThemeSettings = createPanel(getWidgetThemeColors(true))
val darkThemeSettings = createPanel(getWidgetThemeColors(false))
tabbedPane.addTab(MessageHelper.message("widget.mode.popup.tab.light"), lightThemeSettings.addScrollPane())
tabbedPane.addTab(MessageHelper.message("widget.mode.popup.tab.dark"), darkThemeSettings.addScrollPane())
tabbedPane.preferredSize = Dimension(300, 300)
for (i in 0 until tabbedPane.tabCount) {
val label = JLabel(tabbedPane.getTitleAt(i), JLabel.CENTER)
label.preferredSize = Dimension(126, tabbedPane.getTabComponentAt(i).preferredSize.height)
tabbedPane.setTabComponentAt(i, label)
}
tabbedPane.selectedIndex = if (LafManager.getInstance().currentUIThemeLookAndFeel.isDark) 1 else 0
mainPanel.add(tabbedPane, BorderLayout.CENTER)
val popupContent = ContentFactory.getInstance().createContent(mainPanel, "", false).component
val popup = JBPopupFactory.getInstance()
.createComponentPopupBuilder(popupContent, popupContent)
.setTitle(MessageHelper.message("widget.mode.popup.title"))
.setResizable(true)
.setMovable(true)
.setRequestFocus(true)
.setCancelOnClickOutside(false)
.setCancelKeyEnabled(false)
.createPopup()
applyButton.addActionListener {
lightThemeSettings.apply()
darkThemeSettings.apply()
repaintModeWidget()
}
cancelButton.addActionListener {
popup.cancel()
}
val alarm = Alarm(popup)
fun updateApplyButtonVisibility() {
alarm.addRequest({
applyButton.isEnabled = lightThemeSettings.isModified() || darkThemeSettings.isModified()
updateApplyButtonVisibility()
}, 500L)
}
updateApplyButtonVisibility()
currentPopup = popup
return currentPopup
}
}