/* * Copyright 2000-2009 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.intellij.xdebugger.impl.ui; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; import com.intellij.ui.EditorComboBoxEditor; import com.intellij.ui.EditorComboBoxRenderer; import com.intellij.xdebugger.XExpression; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.EvaluationMode; import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider; import com.intellij.xdebugger.impl.XDebuggerHistoryManager; import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; /** * @author nik */ public class XDebuggerExpressionComboBox extends XDebuggerEditorBase { private final JComponent myComponent; private final ComboBox myComboBox; private EditorComboBoxEditor myEditor; private XExpression myExpression; public XDebuggerExpressionComboBox(final @NotNull Project project, final @NotNull XDebuggerEditorsProvider debuggerEditorsProvider, final @Nullable @NonNls String historyId, final @Nullable XSourcePosition sourcePosition) { super(project, debuggerEditorsProvider, EvaluationMode.EXPRESSION, historyId, sourcePosition); myComboBox = new ComboBox(100); myComboBox.setEditable(true); myExpression = XExpressionImpl.EMPTY_EXPRESSION; Dimension minimumSize = new Dimension(myComboBox.getMinimumSize()); minimumSize.width = 100; myComboBox.setMinimumSize(minimumSize); initEditor(); fillComboBox(); myComponent = addChooseFactoryLabel(myComboBox, false); } public ComboBox getComboBox() { return myComboBox; } @Override public JComponent getComponent() { return myComponent; } @Nullable public Editor getEditor() { return myEditor.getEditor(); } public JComponent getEditorComponent() { return myEditor.getEditorComponent(); } public void setEnabled(boolean enable) { if (enable == myComboBox.isEnabled()) return; myComboBox.setEnabled(enable); //myComboBox.setEditable(enable); if (enable) { //initEditor(); } else { myExpression = getExpression(); } } private void initEditor() { myEditor = new EditorComboBoxEditor(getProject(), getEditorsProvider().getFileType()) { @Override public void setItem(Object anObject) { if (anObject == null) { anObject = XExpressionImpl.EMPTY_EXPRESSION; } super.setItem(createDocument(((XExpression)anObject))); } @Override protected void onEditorCreate(EditorEx editor) { editor.putUserData(DebuggerCopyPastePreprocessor.REMOVE_NEWLINES_ON_PASTE, true); } }; myEditor.getEditorComponent().setFontInheritedFromLAF(false); myComboBox.setEditor(myEditor); //myEditor.setItem(myExpression); myComboBox.setRenderer(new EditorComboBoxRenderer(myEditor)); myComboBox.setMaximumRowCount(XDebuggerHistoryManager.MAX_RECENT_EXPRESSIONS); } @Override protected void onHistoryChanged() { fillComboBox(); } private void fillComboBox() { myComboBox.removeAllItems(); for (XExpression expression : getRecentExpressions()) { myComboBox.addItem(expression); } if (myComboBox.getItemCount() > 0) { myComboBox.setSelectedIndex(0); } } @Override protected void doSetText(XExpression text) { if (myComboBox.getItemCount() > 0) { myComboBox.setSelectedIndex(0); } //if (myComboBox.isEditable()) { myEditor.setItem(text); //} myExpression = text; } @Override public XExpression getExpression() { if (myComboBox.isPopupVisible()) { return (XExpression)myComboBox.getPopup().getList().getSelectedValue(); } else { return getEditorsProvider().createExpression(getProject(), (Document)myEditor.getItem(), myExpression.getLanguage(), EvaluationMode.EXPRESSION); } } @Override public JComponent getPreferredFocusedComponent() { return (JComponent)myComboBox.getEditor().getEditorComponent(); } @Override public void selectAll() { myComboBox.getEditor().selectAll(); } }