From f10684a78fa7214458adc42f93e63e7982909532 Mon Sep 17 00:00:00 2001 From: Kirill Kirichenko Date: Tue, 22 Sep 2020 17:31:24 +0300 Subject: [PATCH] New UI for theme autodetection. Additional fixes. GitOrigin-RevId: 2ceb4c28ebcfe62e23618a995ef41a1996c87795 --- .../com/intellij/ide/ui/AppearanceConfigurable.kt | 9 +++++++-- .../com/intellij/ui/layout/ComponentPredicate.kt | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.kt b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.kt index c29c2ac5966c..951f7cf12760 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.kt +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.kt @@ -5,6 +5,7 @@ import com.intellij.application.options.editor.CheckboxDescriptor import com.intellij.application.options.editor.checkBox import com.intellij.ide.GeneralSettings import com.intellij.ide.IdeBundle.message +import com.intellij.ide.actions.QuickChangeLookAndFeel import com.intellij.ide.ui.search.OptionDescription import com.intellij.openapi.actionSystem.ActionManager import com.intellij.openapi.actionSystem.ActionPlaces @@ -93,13 +94,17 @@ internal class AppearanceConfigurable : BoundSearchableConfigurable(message("tit blockRow { fullRow { label(message("combobox.look.and.feel")) - comboBox(lafManager.lafComboBoxModel, { lafManager.lookAndFeelReference }, {}, + val theme = comboBox(lafManager.lafComboBoxModel, + { lafManager.lookAndFeelReference }, + { QuickChangeLookAndFeel.switchLafAndUpdateUI(lafManager, lafManager.findLaf(it), true) }, lafManager.lookAndFeelCellRenderer).shouldUpdateLaF() val syncCheckBox = checkBox(message("preferred.theme.autodetect.selector"), - { lafManager.autodetect }, { lafManager.autodetect = it }).withLargeLeftGap().shouldUpdateLaF() + { lafManager.autodetect }, + { lafManager.autodetect = it }).withLargeLeftGap().shouldUpdateLaF() syncCheckBox.visible(lafManager.autodetectSupported) + theme.enableIf(syncCheckBox.selected.not()) component(lafManager.settingsToolbar) .visibleIf(syncCheckBox.selected) diff --git a/platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt b/platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt index 6458ec19cdf6..2673143d9e28 100644 --- a/platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt +++ b/platform/platform-impl/src/com/intellij/ui/layout/ComponentPredicate.kt @@ -41,6 +41,10 @@ infix fun ComponentPredicate.or(other: ComponentPredicate): ComponentPredicate { return OrPredicate(this, other) } +fun ComponentPredicate.not() : ComponentPredicate { + return NotPredicate(this) +} + private class AndPredicate(private val lhs: ComponentPredicate, private val rhs: ComponentPredicate) : ComponentPredicate() { override fun invoke(): Boolean = lhs.invoke() && rhs.invoke() @@ -60,3 +64,12 @@ private class OrPredicate(private val lhs: ComponentPredicate, private val rhs: rhs.addListener(andListener) } } + +private class NotPredicate(private val that: ComponentPredicate) : ComponentPredicate() { + override fun invoke(): Boolean = !that.invoke() + + override fun addListener(listener: (Boolean) -> Unit) { + val notListener: (Boolean) -> Unit = { listener(!that.invoke()) } + that.addListener(notListener) + } +} \ No newline at end of file