From 7ba954220cdb533ac32bbd691e6e701b00b56f64 Mon Sep 17 00:00:00 2001 From: Olesya Smirnova Date: Mon, 31 Jan 2005 22:51:30 +0300 Subject: [PATCH] HTML&XML code style --- .../options/CodeStyleAbstractPanel.java | 33 ++++- .../options/CodeStyleHtmlPanel.form | 126 +++++++++--------- .../options/CodeStyleHtmlPanel.java | 19 ++- .../ide/actions/ViewStructureAction.java | 12 +- 4 files changed, 118 insertions(+), 72 deletions(-) diff --git a/source/com/intellij/application/options/CodeStyleAbstractPanel.java b/source/com/intellij/application/options/CodeStyleAbstractPanel.java index 57a3976b7545..286e5dd67c82 100644 --- a/source/com/intellij/application/options/CodeStyleAbstractPanel.java +++ b/source/com/intellij/application/options/CodeStyleAbstractPanel.java @@ -33,6 +33,7 @@ package com.intellij.application.options; import com.intellij.ide.highlighter.HighlighterFactory; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; @@ -63,16 +64,21 @@ public abstract class CodeStyleAbstractPanel { CodeStyleSettings.WRAP_AS_NEEDED, CodeStyleSettings.WRAP_ON_EVERY_ITEM, CodeStyleSettings.WRAP_ALWAYS}; + private long myLastDocumentModificationStamp; + private String myTextToReformat = null; public CodeStyleAbstractPanel(CodeStyleSettings settings) { mySettings = settings; myEditor = createEditor(); } - protected static final Editor createEditor() { + protected final Editor createEditor() { EditorFactory editorFactory = EditorFactory.getInstance(); - Document editorDocument = editorFactory.createDocument(""); - EditorEx editor = (EditorEx)editorFactory.createViewer(editorDocument); + myTextToReformat = getPreviewText(); + Document editorDocument = editorFactory.createDocument(myTextToReformat); + EditorEx editor = (EditorEx)editorFactory.createEditor(editorDocument); + + myLastDocumentModificationStamp = editor.getDocument().getModificationStamp(); EditorSettings editorSettings = editor.getSettings(); editorSettings.setWhitespacesShown(true); @@ -81,11 +87,13 @@ public abstract class CodeStyleAbstractPanel { editorSettings.setFoldingOutlineShown(false); editorSettings.setAdditionalColumnsCount(0); editorSettings.setAdditionalLinesCount(1); + editorSettings.setRightMargin(mySettings.RIGHT_MARGIN); EditorColorsScheme scheme = editor.getColorsScheme(); scheme.setColor(EditorColors.CARET_ROW_COLOR, null); editor.setHighlighter(HighlighterFactory.createXMLHighlighter(scheme)); + return editor; } @@ -93,15 +101,29 @@ public abstract class CodeStyleAbstractPanel { if (!myShouldUpdatePreview) { return; } - final String text = getPreviewText(); + if (myLastDocumentModificationStamp != myEditor.getDocument().getModificationStamp()) { + myTextToReformat = myEditor.getDocument().getText(); + } + + CommandProcessor.getInstance().executeCommand(ProjectManager.getInstance().getDefaultProject(), + new Runnable() { + public void run() { + replaceText(); + } + }, null, null); + + myLastDocumentModificationStamp = myEditor.getDocument().getModificationStamp(); + } + + private void replaceText() { final Project project = ProjectManager.getInstance().getDefaultProject(); final PsiManager manager = PsiManager.getInstance(project); ApplicationManager.getApplication().runWriteAction(new Runnable() { public void run() { PsiElementFactory factory = manager.getElementFactory(); try { - PsiFile psiFile = factory.createFileFromText("a." + getFileType().getDefaultExtension(), text); + PsiFile psiFile = factory.createFileFromText("a." + getFileType().getDefaultExtension(), myTextToReformat); CodeStyleSettings clone = (CodeStyleSettings)mySettings.clone(); apply(clone); @@ -113,7 +135,6 @@ public abstract class CodeStyleAbstractPanel { myEditor.getSettings().setTabSize(clone.getTabSize(getFileType())); Document document = myEditor.getDocument(); document.replaceString(0, document.getTextLength(), psiFile.getText()); - } catch (IncorrectOperationException e) { LOG.error(e); diff --git a/source/com/intellij/application/options/CodeStyleHtmlPanel.form b/source/com/intellij/application/options/CodeStyleHtmlPanel.form index 571697cfce2b..226e6075c45a 100644 --- a/source/com/intellij/application/options/CodeStyleHtmlPanel.form +++ b/source/com/intellij/application/options/CodeStyleHtmlPanel.form @@ -1,46 +1,42 @@
- + - + - + - + + + + + + + + + + + - + - - + + - - - - - - - - - - - - - - - + - + @@ -49,7 +45,7 @@ - + @@ -58,20 +54,20 @@ - + - + - + @@ -81,7 +77,7 @@ - + @@ -89,7 +85,7 @@ - + @@ -98,7 +94,7 @@ - + @@ -109,7 +105,7 @@ - + @@ -118,7 +114,7 @@ - + @@ -127,7 +123,7 @@ - + @@ -137,7 +133,7 @@ - + @@ -145,7 +141,7 @@ - + @@ -154,7 +150,7 @@ - + @@ -163,7 +159,7 @@ - + @@ -172,7 +168,7 @@ - + @@ -181,7 +177,7 @@ - + @@ -190,7 +186,7 @@ - + @@ -199,7 +195,7 @@ - + @@ -208,7 +204,7 @@ - + @@ -217,7 +213,7 @@ - + @@ -226,7 +222,7 @@ - + @@ -235,7 +231,7 @@ - + @@ -244,7 +240,7 @@ - + @@ -253,7 +249,7 @@ - + @@ -262,24 +258,28 @@ + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - diff --git a/source/com/intellij/application/options/CodeStyleHtmlPanel.java b/source/com/intellij/application/options/CodeStyleHtmlPanel.java index e35f3db26a29..6bbbfb73589b 100644 --- a/source/com/intellij/application/options/CodeStyleHtmlPanel.java +++ b/source/com/intellij/application/options/CodeStyleHtmlPanel.java @@ -31,10 +31,10 @@ */ package com.intellij.application.options; -import com.intellij.psi.codeStyle.CodeStyleSettings; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.util.Comparing; +import com.intellij.psi.codeStyle.CodeStyleSettings; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -63,6 +63,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { private JTextField myKeepWhiteSpacesTagNames; private JTextField myTextElementsTagNames; private JTextField myDoNotAlignChildrenMinSize; + private JCheckBox myShouldKeepBlankLines; public CodeStyleHtmlPanel(CodeStyleSettings settings) { super(settings); @@ -109,6 +110,13 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { myDoNotAlignChildrenMinSize.getDocument().addDocumentListener(documentListener); myTextElementsTagNames.getDocument().addDocumentListener(documentListener); myKeepWhiteSpacesTagNames.getDocument().addDocumentListener(documentListener); + myShouldKeepBlankLines.addActionListener(actionListener); + + myShouldKeepBlankLines.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + myKeepBlankLines.setEnabled(myShouldKeepBlankLines.isSelected()); + } + }); } public void apply(CodeStyleSettings settings) { @@ -127,6 +135,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { settings.HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_SIZE = getIntValue(myDoNotAlignChildrenMinSize); settings.HTML_TEXT_ELEMENTS = myTextElementsTagNames.getText(); settings.HTML_KEEP_WHITESPACES_INSIDE = myKeepWhiteSpacesTagNames.getText(); + settings.HTML_KEEP_LINE_BREAKS = myShouldKeepBlankLines.isSelected(); } private int getIntValue(JTextField keepBlankLines) { @@ -147,6 +156,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { myKeepWhiteSpaces.setSelected(mySettings.HTML_KEEP_WHITESPACES); mySpacesAroundTagName.setSelected(mySettings.HTML_SPACE_AROUND_TAG_NAME); mySpacesAroundEquality.setSelected(mySettings.HTML_SPACE_AROUND_EQUALITY_IN_ATTRINUTE); + myShouldKeepBlankLines.setSelected(mySettings.HTML_KEEP_LINE_BREAKS); myInsertNewLineTagNames.setText(mySettings.HTML_ELEMENTS_TO_INSERT_NEW_LINE_BEFORE); myRemoveNewLineTagNames.setText(mySettings.HTML_ELEMENTS_TO_REMOVE_NEW_LINE_BEFORE); @@ -155,6 +165,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { myTextElementsTagNames.setText(mySettings.HTML_TEXT_ELEMENTS); myKeepWhiteSpacesTagNames.setText(mySettings.HTML_KEEP_WHITESPACES_INSIDE); + myKeepBlankLines.setEnabled(myShouldKeepBlankLines.isSelected()); } public boolean isModified(CodeStyleSettings settings) { @@ -213,6 +224,10 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { return true; } + if (myShouldKeepBlankLines.isSelected() != mySettings.HTML_KEEP_LINE_BREAKS) { + return true; + } + return false; } diff --git a/source/com/intellij/ide/actions/ViewStructureAction.java b/source/com/intellij/ide/actions/ViewStructureAction.java index c9024301c219..7c4b76c38a1c 100644 --- a/source/com/intellij/ide/actions/ViewStructureAction.java +++ b/source/com/intellij/ide/actions/ViewStructureAction.java @@ -15,6 +15,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.Navigatable; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; @@ -85,8 +86,17 @@ public class ViewStructureAction extends AnAction implements TreeActionsOwner{ } PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); + if (psiFile == null) { + presentation.setEnabled(false); + return; + } + final VirtualFile virtualFile = psiFile.getVirtualFile(); - presentation.setEnabled((psiFile.getVirtualFile().getFileType().getStructureViewModel(psiFile.getVirtualFile(), project) != null) || AntFileStructureList.canShowFor(psiFile)); + if (virtualFile == null) { + presentation.setEnabled(false); + return; + } + presentation.setEnabled((virtualFile.getFileType().getStructureViewModel(virtualFile, project) != null) || AntFileStructureList.canShowFor(psiFile)); } public void setActionActive(String name, boolean state) {