mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Multiline support for regexp editor
This commit is contained in:
@@ -36,25 +36,26 @@
|
||||
<text value="RegExp:"/>
|
||||
</properties>
|
||||
</component>
|
||||
<grid id="aab68" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="South"/>
|
||||
</children>
|
||||
</grid>
|
||||
<grid id="aab68" layout-manager="BorderLayout" hgap="0" vgap="0">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="47807" class="com.intellij.ui.EditorTextField" binding="mySampleText" custom-create="true">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
<border type="none"/>
|
||||
<children>
|
||||
<component id="47807" class="com.intellij.ui.EditorTextField" binding="mySampleText" custom-create="true">
|
||||
<constraints border-constraint="Center"/>
|
||||
<properties/>
|
||||
</component>
|
||||
<component id="ec7ec" class="javax.swing.JLabel">
|
||||
<constraints border-constraint="West"/>
|
||||
<properties>
|
||||
<alignmentX value="1.0"/>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="Sample:"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</component>
|
||||
<component id="ec7ec" class="javax.swing.JLabel">
|
||||
<constraints border-constraint="West"/>
|
||||
<properties>
|
||||
<alignmentX value="1.0"/>
|
||||
<alignmentY value="0.0"/>
|
||||
<preferredSize width="55" height="16"/>
|
||||
<text value="Sample:"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</children>
|
||||
|
||||
@@ -16,8 +16,11 @@
|
||||
package org.intellij.lang.regexp.intention;
|
||||
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonShortcuts;
|
||||
import com.intellij.openapi.actionSystem.CustomShortcutSet;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.event.DocumentAdapter;
|
||||
import com.intellij.openapi.editor.event.DocumentEvent;
|
||||
import com.intellij.openapi.fileTypes.PlainTextFileType;
|
||||
@@ -34,15 +37,18 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.impl.source.resolve.FileContextUtil;
|
||||
import com.intellij.ui.BalloonImpl;
|
||||
import com.intellij.ui.EditorTextField;
|
||||
import com.intellij.ui.Gray;
|
||||
import com.intellij.ui.JBColor;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.intellij.lang.regexp.RegExpLanguage;
|
||||
import org.intellij.lang.regexp.RegExpModifierProvider;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.CompoundBorder;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.border.LineBorder;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
@@ -73,30 +79,46 @@ public class CheckRegExpForm {
|
||||
myRegExp = new EditorTextField(document, myProject, RegExpLanguage.INSTANCE.getAssociatedFileType());
|
||||
final String sampleText = PropertiesComponent.getInstance(myProject).getValue(LAST_EDITED_REGEXP, "Sample Text");
|
||||
mySampleText = new EditorTextField(sampleText, myProject, PlainTextFileType.INSTANCE);
|
||||
mySampleText.setBorder(
|
||||
new CompoundBorder(new EmptyBorder(2, 2, 2, 4), new LineBorder(UIUtil.isUnderDarcula() ? Gray._100 : UIUtil.getBorderColor())));
|
||||
mySampleText.setOneLineMode(false);
|
||||
mySampleText.addDocumentListener(new DocumentAdapter() {
|
||||
@Override
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
//noinspection SSBasedInspection
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
myRootPanel.revalidate();
|
||||
final Balloon balloon = myRef.get();
|
||||
if (balloon != null) {
|
||||
balloon.revalidate();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
myRootPanel = new JPanel(new BorderLayout()) {
|
||||
@Override
|
||||
public void addNotify() {
|
||||
super.addNotify();
|
||||
IdeFocusManager.getGlobalInstance().requestFocus(mySampleText, true);
|
||||
|
||||
final KeyAdapter escaper = new KeyAdapter() {
|
||||
new AnAction(){
|
||||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
|
||||
if (!myRef.get().isDisposed()) {
|
||||
myRef.get().hide();
|
||||
}
|
||||
}
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
IdeFocusManager.findInstance().requestFocus(myRegExp.getFocusTarget(), true);
|
||||
}
|
||||
}.registerCustomShortcutSet(CustomShortcutSet.fromString("shift TAB"), mySampleText, myRef.get());
|
||||
final AnAction escaper = new AnAction() {
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
myRef.get().hide();
|
||||
}
|
||||
};
|
||||
escaper.registerCustomShortcutSet(CommonShortcuts.ESCAPE, myRegExp.getFocusTarget(), myRef.get());
|
||||
escaper.registerCustomShortcutSet(CommonShortcuts.ESCAPE, mySampleText.getFocusTarget(), myRef.get());
|
||||
|
||||
final Editor fieldEditor = myRegExp.getEditor();
|
||||
final Editor textEditor = mySampleText.getEditor();
|
||||
|
||||
assert fieldEditor != null && textEditor != null;
|
||||
|
||||
fieldEditor.getContentComponent().addKeyListener(escaper);
|
||||
textEditor.getContentComponent().addKeyListener(escaper);
|
||||
|
||||
myRef.get().addListener(new JBPopupAdapter() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user