mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[Kotlin UI DSL] Ported XmlEmmetConfigurable to Kotlin UI DSL
GitOrigin-RevId: b0fb825986b685d0f2f63ac7258ca3f7510785dc
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bea82d00c9
commit
223b8e5a59
@@ -1,125 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.application.options.emmet.XmlEmmetConfigurable">
|
||||
<grid id="27dc6" binding="myPanel" layout-manager="GridLayoutManager" row-count="7" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="20" y="20" width="1797" height="282"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="446a3" class="com.intellij.ui.components.JBCheckBox" binding="myEnableEmmetJBCheckBox" default-binding="true">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.enable.label"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="c52c1" class="com.intellij.ui.components.JBCheckBox" binding="myEnablePreviewJBCheckBox">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.enable.preview"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="cdbb7" binding="myFiltersListPanel" layout-manager="GridLayoutManager" row-count="1" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="5" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children/>
|
||||
</grid>
|
||||
<component id="d49b0" class="com.intellij.ui.components.JBCheckBox" binding="myEnableHrefAutodetectJBCheckBox">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.href.autodetect"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="8349b" class="com.intellij.ui.components.JBCheckBox" binding="myAddEditPointAtTheEndOfTemplateJBCheckBox">
|
||||
<constraints>
|
||||
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="9" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.add.edit.point.at.the.end.of.template"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="fb640" binding="myBemPanel" layout-manager="GridLayoutManager" row-count="3" column-count="3" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties/>
|
||||
<border type="none" title-resource-bundle="messages/XmlBundle" title-key="xml.options.border.title.bem"/>
|
||||
<children>
|
||||
<component id="48744" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<labelFor value="525"/>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.bem.class.name.element.separator.label"/>
|
||||
</properties>
|
||||
</component>
|
||||
<hspacer id="2356c">
|
||||
<constraints>
|
||||
<grid row="0" column="2" row-span="1" col-span="1" vsize-policy="1" hsize-policy="6" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</hspacer>
|
||||
<component id="3083" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="1" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<labelFor value="fddbf"/>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.bem.class.name.modifier.separator.label"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="9b3ce" class="com.intellij.ui.components.JBLabel">
|
||||
<constraints>
|
||||
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<labelFor value="2659b"/>
|
||||
<text resource-bundle="messages/XmlBundle" key="emmet.bem.short.element.prefix.label"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="525" class="com.intellij.ui.components.JBTextField" binding="myBemElementSeparatorTextField">
|
||||
<constraints>
|
||||
<grid row="0" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="50" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="fddbf" class="com.intellij.ui.components.JBTextField" binding="myBemModifierSeparatorTextField">
|
||||
<constraints>
|
||||
<grid row="1" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="50" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="2659b" class="com.intellij.ui.components.JBTextField" binding="myBemShortElementPrefixTextField">
|
||||
<constraints>
|
||||
<grid row="2" column="1" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false">
|
||||
<preferred-size width="50" height="-1"/>
|
||||
</grid>
|
||||
</constraints>
|
||||
<properties/>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
<vspacer id="922eb">
|
||||
<constraints>
|
||||
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
@@ -1,175 +1,102 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.application.options.emmet;
|
||||
package com.intellij.application.options.emmet
|
||||
|
||||
import com.intellij.codeInsight.template.emmet.filters.ZenCodingFilter;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.ui.components.JBCheckBox;
|
||||
import com.intellij.ui.components.JBTextField;
|
||||
import com.intellij.util.ui.JBInsets;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.xml.XmlBundle;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import com.intellij.codeInsight.template.emmet.filters.ZenCodingFilter
|
||||
import com.intellij.openapi.options.BoundSearchableConfigurable
|
||||
import com.intellij.openapi.ui.DialogPanel
|
||||
import com.intellij.ui.components.JBCheckBox
|
||||
import com.intellij.ui.dsl.builder.*
|
||||
import com.intellij.ui.layout.selected
|
||||
import com.intellij.xml.XmlBundle
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
class XmlEmmetConfigurable : BoundSearchableConfigurable(XmlBundle.message("configurable.XmlEmmetConfigurable.display.name"),
|
||||
"reference.idesettings.emmet.xml") {
|
||||
|
||||
public class XmlEmmetConfigurable implements SearchableConfigurable, Disposable, Configurable.NoScroll {
|
||||
private JPanel myPanel;
|
||||
private JBCheckBox myEnableEmmetJBCheckBox;
|
||||
private JBCheckBox myEnablePreviewJBCheckBox;
|
||||
private JPanel myFiltersListPanel;
|
||||
private JBCheckBox myEnableHrefAutodetectJBCheckBox;
|
||||
private JBCheckBox myAddEditPointAtTheEndOfTemplateJBCheckBox;
|
||||
private JBTextField myBemElementSeparatorTextField;
|
||||
private JBTextField myBemModifierSeparatorTextField;
|
||||
private JBTextField myBemShortElementPrefixTextField;
|
||||
private JPanel myBemPanel;
|
||||
private val filtersCheckBoxes = mutableMapOf<String, JBCheckBox>()
|
||||
|
||||
private Map<String, JBCheckBox> myFilterCheckboxes = new HashMap<>();
|
||||
|
||||
public XmlEmmetConfigurable() {
|
||||
myEnableEmmetJBCheckBox.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
boolean selected = myEnableEmmetJBCheckBox.isSelected();
|
||||
myEnablePreviewJBCheckBox.setEnabled(selected);
|
||||
myFiltersListPanel.setEnabled(selected);
|
||||
myEnableHrefAutodetectJBCheckBox.setEnabled(selected);
|
||||
myAddEditPointAtTheEndOfTemplateJBCheckBox.setEnabled(selected);
|
||||
UIUtil.setEnabled(myBemPanel, selected, true);
|
||||
for (JBCheckBox checkBox : myFilterCheckboxes.values()) {
|
||||
checkBox.setEnabled(selected);
|
||||
override fun createPanel(): DialogPanel {
|
||||
return panel {
|
||||
val settings = EmmetOptions.getInstance()
|
||||
lateinit var cbEmmetEnabled: JBCheckBox
|
||||
row {
|
||||
cbEmmetEnabled = checkBox(XmlBundle.message("emmet.enable.label"))
|
||||
.bindSelected(settings::isEmmetEnabled, settings::setEmmetEnabled)
|
||||
.component
|
||||
}
|
||||
rowsRange {
|
||||
row {
|
||||
checkBox(XmlBundle.message("emmet.enable.preview"))
|
||||
.bindSelected(settings::isPreviewEnabled, settings::setPreviewEnabled)
|
||||
}
|
||||
row {
|
||||
checkBox(XmlBundle.message("emmet.href.autodetect"))
|
||||
.bindSelected(settings::isHrefAutoDetectEnabled, settings::setHrefAutoDetectEnabled)
|
||||
}
|
||||
row {
|
||||
checkBox(XmlBundle.message("emmet.add.edit.point.at.the.end.of.template"))
|
||||
.bindSelected(settings::isAddEditPointAtTheEndOfTemplate, settings::setAddEditPointAtTheEndOfTemplate)
|
||||
}
|
||||
}
|
||||
});
|
||||
myFiltersListPanel.setBorder(IdeBorderFactory.createTitledBorder(XmlBundle.message("emmet.filters.enabled.by.default")));
|
||||
myBemPanel.setBorder(IdeBorderFactory.createTitledBorder(XmlBundle.message("emmet.bem.title")));
|
||||
createFiltersCheckboxes();
|
||||
|
||||
}
|
||||
group(XmlBundle.message("xml.options.border.title.bem")) {
|
||||
row(XmlBundle.message("emmet.bem.class.name.element.separator.label")) {
|
||||
textField()
|
||||
.bindText(settings::getBemElementSeparator, settings::setBemElementSeparator)
|
||||
.columns(COLUMNS_TINY)
|
||||
}
|
||||
row(XmlBundle.message("emmet.bem.class.name.modifier.separator.label")) {
|
||||
textField()
|
||||
.bindText(settings::getBemModifierSeparator, settings::setBemModifierSeparator)
|
||||
.columns(COLUMNS_TINY)
|
||||
}
|
||||
row(XmlBundle.message("emmet.bem.short.element.prefix.label")) {
|
||||
textField()
|
||||
.bindText(settings::getBemShortElementPrefix, settings::setBemShortElementPrefix)
|
||||
.columns(COLUMNS_TINY)
|
||||
}
|
||||
}
|
||||
|
||||
public void createFiltersCheckboxes() {
|
||||
final List<ZenCodingFilter> filters = ZenCodingFilter.getInstances();
|
||||
final GridBagLayout layoutManager = new GridBagLayout();
|
||||
final GridBagConstraints constraints = new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
|
||||
JBInsets.emptyInsets(), 0, 0);
|
||||
myFiltersListPanel.setLayout(layoutManager);
|
||||
int added = 0;
|
||||
for (ZenCodingFilter filter : filters) {
|
||||
if (filter.isSystem()) continue;
|
||||
group(XmlBundle.message("emmet.filters.enabled.by.default")) {
|
||||
val filters = ZenCodingFilter.getInstances()
|
||||
for (filter in filters) {
|
||||
if (filter.isSystem || filtersCheckBoxes.containsKey(filter.getSuffix())) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (myFilterCheckboxes.containsKey(filter.getSuffix())) continue;
|
||||
final JBCheckBox checkBox = new JBCheckBox(filter.getDisplayName());
|
||||
myFilterCheckboxes.put(filter.getSuffix(), checkBox);
|
||||
constraints.gridy = added;
|
||||
myFiltersListPanel.add(checkBox, constraints);
|
||||
added++;
|
||||
}
|
||||
myFiltersListPanel.revalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
myFilterCheckboxes.clear();
|
||||
myFilterCheckboxes = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable JComponent createComponent() {
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
EmmetOptions emmetOptions = EmmetOptions.getInstance();
|
||||
return emmetOptions.isEmmetEnabled() != myEnableEmmetJBCheckBox.isSelected() ||
|
||||
emmetOptions.isPreviewEnabled() != myEnablePreviewJBCheckBox.isSelected() ||
|
||||
emmetOptions.isHrefAutoDetectEnabled() != myEnableHrefAutodetectJBCheckBox.isSelected() ||
|
||||
emmetOptions.isAddEditPointAtTheEndOfTemplate() != myAddEditPointAtTheEndOfTemplateJBCheckBox.isSelected() ||
|
||||
!emmetOptions.getFiltersEnabledByDefault().equals(enabledFilters()) ||
|
||||
!emmetOptions.getBemElementSeparator().equals(myBemElementSeparatorTextField.getText()) ||
|
||||
!emmetOptions.getBemModifierSeparator().equals(myBemModifierSeparatorTextField.getText()) ||
|
||||
!emmetOptions.getBemShortElementPrefix().equals(myBemShortElementPrefixTextField.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply() throws ConfigurationException {
|
||||
EmmetOptions emmetOptions = EmmetOptions.getInstance();
|
||||
emmetOptions.setEmmetEnabled(myEnableEmmetJBCheckBox.isSelected());
|
||||
emmetOptions.setPreviewEnabled(myEnablePreviewJBCheckBox.isSelected());
|
||||
emmetOptions.setHrefAutoDetectEnabled(myEnableHrefAutodetectJBCheckBox.isSelected());
|
||||
emmetOptions.setAddEditPointAtTheEndOfTemplate(myAddEditPointAtTheEndOfTemplateJBCheckBox.isSelected());
|
||||
emmetOptions.setFiltersEnabledByDefault(enabledFilters());
|
||||
emmetOptions.setBemElementSeparator(myBemElementSeparatorTextField.getText());
|
||||
emmetOptions.setBemModifierSeparator(myBemModifierSeparatorTextField.getText());
|
||||
emmetOptions.setBemShortElementPrefix(myBemShortElementPrefixTextField.getText());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reset() {
|
||||
EmmetOptions emmetOptions = EmmetOptions.getInstance();
|
||||
myEnableEmmetJBCheckBox.setSelected(emmetOptions.isEmmetEnabled());
|
||||
myEnablePreviewJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
|
||||
myEnablePreviewJBCheckBox.setSelected(emmetOptions.isPreviewEnabled());
|
||||
myEnableHrefAutodetectJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
|
||||
myEnableHrefAutodetectJBCheckBox.setSelected(emmetOptions.isHrefAutoDetectEnabled());
|
||||
myAddEditPointAtTheEndOfTemplateJBCheckBox.setEnabled(emmetOptions.isEmmetEnabled());
|
||||
myAddEditPointAtTheEndOfTemplateJBCheckBox.setSelected(emmetOptions.isAddEditPointAtTheEndOfTemplate());
|
||||
|
||||
myBemElementSeparatorTextField.setText(emmetOptions.getBemElementSeparator());
|
||||
myBemModifierSeparatorTextField.setText(emmetOptions.getBemModifierSeparator());
|
||||
myBemShortElementPrefixTextField.setText(emmetOptions.getBemShortElementPrefix());
|
||||
|
||||
Set<String> enabledByDefault = emmetOptions.getFiltersEnabledByDefault();
|
||||
for (ZenCodingFilter filter : ZenCodingFilter.getInstances()) {
|
||||
if (filter.isSystem()) continue;
|
||||
final String filterSuffix = filter.getSuffix();
|
||||
final JBCheckBox checkBox = myFilterCheckboxes.get(filterSuffix);
|
||||
if (checkBox != null) {
|
||||
checkBox.setEnabled(emmetOptions.isEmmetEnabled());
|
||||
checkBox.setSelected(enabledByDefault.contains(filterSuffix));
|
||||
}
|
||||
row {
|
||||
val checkBox = checkBox(filter.getDisplayName()).component
|
||||
filtersCheckBoxes[filter.getSuffix()] = checkBox
|
||||
}
|
||||
}
|
||||
}
|
||||
}.enabledIf(cbEmmetEnabled.selected)
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void disposeUIResources() {
|
||||
Disposer.dispose(this);
|
||||
override fun disposeUIResources() {
|
||||
filtersCheckBoxes.clear()
|
||||
super.disposeUIResources()
|
||||
}
|
||||
|
||||
private @NotNull Set<String> enabledFilters() {
|
||||
Set<String> result = new HashSet<>();
|
||||
for (Map.Entry<String, JBCheckBox> checkbox : myFilterCheckboxes.entrySet()) {
|
||||
if (checkbox.getValue().isSelected()) {
|
||||
result.add(checkbox.getKey());
|
||||
}
|
||||
override fun isModified(): Boolean {
|
||||
return super.isModified() || EmmetOptions.getInstance().filtersEnabledByDefault != enabledFilters()
|
||||
}
|
||||
|
||||
override fun apply() {
|
||||
super.apply()
|
||||
EmmetOptions.getInstance().filtersEnabledByDefault = enabledFilters()
|
||||
}
|
||||
|
||||
override fun reset() {
|
||||
super.reset()
|
||||
|
||||
val enabledByDefault = EmmetOptions.getInstance().filtersEnabledByDefault
|
||||
for (filter in ZenCodingFilter.getInstances()) {
|
||||
if (filter.isSystem) continue
|
||||
filtersCheckBoxes[filter.getSuffix()]?.setSelected(enabledByDefault.contains(filter.getSuffix()))
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nls String getDisplayName() {
|
||||
return XmlBundle.message("configurable.XmlEmmetConfigurable.display.name");
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String getHelpTopic() {
|
||||
return getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull String getId() {
|
||||
return "reference.idesettings.emmet.xml";
|
||||
private fun enabledFilters(): Set<String> {
|
||||
return filtersCheckBoxes.filterValues { it.isSelected }.keys
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@ emmet.title=Emmet
|
||||
emmet.configuration.title=Emmet
|
||||
emmet.enable.label=&Enable XML/HTML Emmet
|
||||
emmet.filters.enabled.by.default=Filters enabled by default
|
||||
emmet.bem.title=BEM
|
||||
emmet.enable.preview=Enable &abbreviation preview
|
||||
emmet.expand.abbreviation.with=Expand &abbreviation with
|
||||
emmet.href.autodetect=Enable automatic &URL recognition while wrapping text with <a> tag
|
||||
|
||||
Reference in New Issue
Block a user