This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 181523
Collapse All | Expand All

(-)a/editor.lib/apichanges.xml (+15 lines)
Lines 104-109 Link Here
104
    <!-- ACTUAL CHANGES BEGIN HERE: -->
104
    <!-- ACTUAL CHANGES BEGIN HERE: -->
105
105
106
    <changes>
106
    <changes>
107
        <change id="Utilities.createSingleLineEditor">
108
            <summary>Adding Utilities.createSingleLineEditor</summary>
109
            <version major="2" minor="7"/>
110
            <date day="29" month="3" year="2010"/>
111
            <author login="vstejskal"/>
112
            <compatibility binary="compatible" source="compatible" semantic="compatible" addition="yes" deprecation="no" deletion="no" modification="no" />
113
            <description>
114
                <p>
115
                    Adding <code>o.n.editor.Utilities.createSingleLineEditor(String mimeType)</code> method
116
                    in order to give modules a unified way of creating simple <code>TextField</code>-like
117
                    controls.
118
                </p>
119
            </description>
120
        </change>
121
107
        <change id="ToolTipSupport-api-cleanup">
122
        <change id="ToolTipSupport-api-cleanup">
108
            <summary>Hiding listener methods from public API</summary>
123
            <summary>Hiding listener methods from public API</summary>
109
            <version major="2" minor="4"/>
124
            <version major="2" minor="4"/>
(-)a/editor.lib/nbproject/project.properties (-1 / +1 lines)
Lines 39-45 Link Here
39
39
40
javac.compilerargs=-Xlint:unchecked
40
javac.compilerargs=-Xlint:unchecked
41
javac.source=1.6
41
javac.source=1.6
42
spec.version.base=2.6
42
spec.version.base=2.7
43
is.autoload=true
43
is.autoload=true
44
44
45
javadoc.arch=${basedir}/arch.xml
45
javadoc.arch=${basedir}/arch.xml
(-)a/editor.lib/src/org/netbeans/editor/Utilities.java (+85 lines)
Lines 41-58 Link Here
41
41
42
package org.netbeans.editor;
42
package org.netbeans.editor;
43
43
44
import java.awt.AWTKeyStroke;
44
import java.awt.Rectangle;
45
import java.awt.Rectangle;
45
import java.awt.Frame;
46
import java.awt.Frame;
47
import java.awt.GridBagConstraints;
48
import java.awt.GridBagLayout;
46
import java.awt.Insets;
49
import java.awt.Insets;
50
import java.awt.KeyboardFocusManager;
47
import java.awt.Shape;
51
import java.awt.Shape;
48
import java.awt.event.ActionEvent;
52
import java.awt.event.ActionEvent;
49
import java.awt.event.KeyEvent;
53
import java.awt.event.KeyEvent;
50
import java.awt.geom.Rectangle2D;
54
import java.awt.geom.Rectangle2D;
55
import java.util.Set;
51
import java.util.logging.Level;
56
import java.util.logging.Level;
52
import java.util.logging.Logger;
57
import java.util.logging.Logger;
53
import javax.swing.SwingUtilities;
58
import javax.swing.SwingUtilities;
54
import javax.swing.Action;
59
import javax.swing.Action;
60
import javax.swing.InputMap;
61
import javax.swing.JComponent;
62
import javax.swing.JEditorPane;
63
import javax.swing.JPanel;
64
import javax.swing.JScrollPane;
65
import javax.swing.JTextField;
55
import javax.swing.KeyStroke;
66
import javax.swing.KeyStroke;
67
import javax.swing.border.CompoundBorder;
68
import javax.swing.border.EmptyBorder;
56
import javax.swing.text.JTextComponent;
69
import javax.swing.text.JTextComponent;
57
import javax.swing.text.BadLocationException;
70
import javax.swing.text.BadLocationException;
58
import javax.swing.text.EditorKit;
71
import javax.swing.text.EditorKit;
Lines 65-70 Link Here
65
import javax.swing.text.Element;
78
import javax.swing.text.Element;
66
import javax.swing.text.View;
79
import javax.swing.text.View;
67
import org.netbeans.api.editor.EditorRegistry;
80
import org.netbeans.api.editor.EditorRegistry;
81
import org.netbeans.api.editor.mimelookup.MimeLookup;
68
import org.netbeans.lib.editor.util.CharSequenceUtilities;
82
import org.netbeans.lib.editor.util.CharSequenceUtilities;
69
import org.netbeans.lib.editor.util.swing.DocumentUtilities;
83
import org.netbeans.lib.editor.util.swing.DocumentUtilities;
70
import org.netbeans.modules.editor.lib.drawing.DrawEngineDocView;
84
import org.netbeans.modules.editor.lib.drawing.DrawEngineDocView;
Lines 1540-1543 Link Here
1540
	}
1554
	}
1541
	return null;
1555
	return null;
1542
    }
1556
    }
1557
1558
    /**
1559
     * Creates a single line editor pane. Can be called from AWT event thread only.
1560
     *
1561
     * @param mimeType The mimetype of the editor's content.
1562
     *
1563
     * @return Two components, the first one is a visual <code>JComponent</code> and
1564
     *   the second one is the editor <code>JTextComponent</code>.
1565
     *
1566
     * @since 2.7
1567
     */
1568
    public static JComponent [] createSingleLineEditor(String mimeType) {
1569
        assert SwingUtilities.isEventDispatchThread()
1570
                : "Utilities.createSingleLineEditor must be called from AWT thread only"; // NOI18N
1571
1572
        EditorKit kit = MimeLookup.getLookup(mimeType).lookup(EditorKit.class);
1573
        if (kit == null) {
1574
            throw new IllegalArgumentException("No EditorKit for '" + mimeType + "' mimetype."); //NOI18N
1575
        }
1576
1577
        JEditorPane editorPane = new JEditorPane();
1578
        editorPane.setEditorKit(kit);
1579
1580
        editorPane.putClientProperty(
1581
            "HighlightsLayerExcludes", //NOI18N
1582
            "^org\\.netbeans\\.modules\\.editor\\.lib2\\.highlighting\\.CaretRowHighlighting$" //NOI18N
1583
        );
1584
        getEditorUI(editorPane).textLimitLineVisible = false;
1585
1586
        KeyStroke enterKs = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
1587
        KeyStroke escKs = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
1588
        KeyStroke tabKs = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
1589
        InputMap im = editorPane.getInputMap();
1590
        im.put(enterKs, NO_ACTION);
1591
        im.put(escKs, NO_ACTION);
1592
        im.put(tabKs, NO_ACTION);
1593
1594
        editorPane.setBorder (
1595
            new CompoundBorder (editorPane.getBorder(),
1596
            new EmptyBorder (0, 0, 0, 0))
1597
        );
1598
1599
        JTextField referenceTextField = new JTextField("M"); //NOI18N
1600
        Set<AWTKeyStroke> tfkeys = referenceTextField.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
1601
        editorPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, tfkeys);
1602
        tfkeys = referenceTextField.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
1603
        editorPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, tfkeys);
1604
1605
        JScrollPane sp = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
1606
        sp.setBorder(referenceTextField.getBorder());
1607
        sp.setBackground(referenceTextField.getBackground());
1608
1609
        JPanel panel = new JPanel(new GridBagLayout());
1610
        panel.setBackground(referenceTextField.getBackground());
1611
        GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
1612
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
1613
        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
1614
        gridBagConstraints.weightx = 1.0;
1615
        panel.add(editorPane, gridBagConstraints);
1616
        sp.setViewportView(panel);
1617
1618
        int preferredHeight = referenceTextField.getPreferredSize().height;
1619
        if (sp.getPreferredSize().height < preferredHeight) {
1620
            sp.setPreferredSize(referenceTextField.getPreferredSize());
1621
        }
1622
        sp.setMinimumSize(sp.getPreferredSize());
1623
1624
        return new JComponent [] { sp, editorPane };
1625
    }
1626
1627
    private static final String NO_ACTION = "no-action"; //NOI18N
1543
}
1628
}
(-)a/spi.debugger.ui/nbproject/project.xml (-2 / +2 lines)
Lines 61-67 Link Here
61
                    <compile-dependency/>
61
                    <compile-dependency/>
62
                    <run-dependency>
62
                    <run-dependency>
63
                        <release-version>2</release-version>
63
                        <release-version>2</release-version>
64
                        <specification-version>2.1</specification-version>
64
                        <specification-version>2.7</specification-version>
65
                    </run-dependency>
65
                    </run-dependency>
66
                </dependency>
66
                </dependency>
67
                <dependency>
67
                <dependency>
Lines 70-76 Link Here
70
                    <compile-dependency/>
70
                    <compile-dependency/>
71
                    <run-dependency>
71
                    <run-dependency>
72
                        <release-version>1</release-version>
72
                        <release-version>1</release-version>
73
                        <specification-version>1.11</specification-version>
73
                        <specification-version>1.24</specification-version>
74
                    </run-dependency>
74
                    </run-dependency>
75
                </dependency>
75
                </dependency>
76
                <dependency>
76
                <dependency>
(-)a/spi.debugger.ui/src/org/netbeans/modules/debugger/ui/WatchPanel.java (-134 / +11 lines)
Lines 40-46 Link Here
40
 */
40
 */
41
package org.netbeans.modules.debugger.ui;
41
package org.netbeans.modules.debugger.ui;
42
42
43
import java.awt.AWTKeyStroke;
44
import org.openide.awt.Mnemonics;
43
import org.openide.awt.Mnemonics;
45
import org.openide.util.NbBundle;
44
import org.openide.util.NbBundle;
46
45
Lines 49-70 Link Here
49
import javax.swing.border.CompoundBorder;
48
import javax.swing.border.CompoundBorder;
50
import java.util.*;
49
import java.util.*;
51
import java.awt.BorderLayout;
50
import java.awt.BorderLayout;
52
import java.awt.Dimension;
51
import javax.swing.text.JTextComponent;
53
import java.awt.GridBagConstraints;
54
import java.awt.GridBagLayout;
55
import java.awt.KeyboardFocusManager;
56
import java.awt.event.KeyEvent;
57
import java.io.IOException;
58
import javax.swing.text.StyledDocument;
59
import org.netbeans.api.editor.DialogBinding;
52
import org.netbeans.api.editor.DialogBinding;
60
import org.netbeans.editor.EditorUI;
53
import org.netbeans.editor.Utilities;
61
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
54
import org.netbeans.spi.debugger.ui.EditorContextDispatcher;
62
import org.openide.ErrorManager;
63
import org.openide.cookies.EditorCookie;
64
import org.openide.filesystems.FileObject;
55
import org.openide.filesystems.FileObject;
65
import org.openide.loaders.DataObject;
66
import org.openide.loaders.DataObjectNotFoundException;
67
import org.openide.text.NbDocument;
68
56
69
/**
57
/**
70
 * A GUI panel for customizing a Watch.
58
 * A GUI panel for customizing a Watch.
Lines 74-80 Link Here
74
public class WatchPanel {
62
public class WatchPanel {
75
63
76
    private JPanel panel;
64
    private JPanel panel;
77
    private JEditorPane editorPane;
65
    private JTextComponent editorPane;
78
    private String expression;
66
    private String expression;
79
67
80
    public WatchPanel(String expression) {
68
    public WatchPanel(String expression) {
Lines 94-116 Link Here
94
        panel.setLayout (new BorderLayout ());
82
        panel.setLayout (new BorderLayout ());
95
        panel.setBorder (new EmptyBorder (11, 12, 1, 11));
83
        panel.setBorder (new EmptyBorder (11, 12, 1, 11));
96
        panel.add (BorderLayout.NORTH, textLabel);
84
        panel.add (BorderLayout.NORTH, textLabel);
85
86
        FileObject file = EditorContextDispatcher.getDefault().getMostRecentFile();
87
        int line = EditorContextDispatcher.getDefault().getMostRecentLineNumber();
88
97
        //Add JEditorPane and context
89
        //Add JEditorPane and context
98
        editorPane = new JEditorPane();//expression); // NOI18N
90
        JComponent [] editorComponents = Utilities.createSingleLineEditor(file.getMIMEType());
91
        editorPane = (JTextComponent) editorComponents[1];
92
        DialogBinding.bindComponentToFile(file, line, 0, 0, editorPane);
99
        editorPane.setText(expression);
93
        editorPane.setText(expression);
100
94
101
        setupContext(editorPane,
102
                     EditorContextDispatcher.getDefault().getMostRecentFile(),
103
                     EditorContextDispatcher.getDefault().getMostRecentLineNumber());
104
        editorPane.setText (expression);
95
        editorPane.setText (expression);
105
        editorPane.selectAll ();
96
        editorPane.selectAll ();
106
97
107
        JScrollPane sp = createScrollableLineEditor(editorPane);
98
        panel.add (BorderLayout.CENTER, editorComponents[0]);
108
        int h = sp.getPreferredSize().height;
109
        int w = Math.min(70*editorPane.getFontMetrics(editorPane.getFont()).charWidth('a'),
110
                         org.openide.windows.WindowManager.getDefault().getMainWindow().getSize().width);
111
        sp.setPreferredSize(new Dimension(w, h));
112
113
        panel.add (BorderLayout.CENTER, sp);
114
        editorPane.getAccessibleContext ().setAccessibleDescription (bundle.getString ("ACSD_CTL_Watch_Name")); // NOI18N
99
        editorPane.getAccessibleContext ().setAccessibleDescription (bundle.getString ("ACSD_CTL_Watch_Name")); // NOI18N
115
        editorPane.setBorder (
100
        editorPane.setBorder (
116
            new CompoundBorder (editorPane.getBorder (),
101
            new CompoundBorder (editorPane.getBorder (),
Lines 129-242 Link Here
129
        return panel;
114
        return panel;
130
    }
115
    }
131
116
132
    private static void setupUI(final JEditorPane editorPane) {
133
        Runnable runnable = new Runnable() {
134
            public void run() {
135
                EditorUI eui = org.netbeans.editor.Utilities.getEditorUI(editorPane);
136
                if (eui == null) {
137
                    return;
138
                }
139
                editorPane.putClientProperty(
140
                    "HighlightsLayerExcludes", //NOI18N
141
                    "^org\\.netbeans\\.modules\\.editor\\.lib2\\.highlighting\\.CaretRowHighlighting$" //NOI18N
142
                );
143
                // Do not draw text limit line
144
                try {
145
                    java.lang.reflect.Field textLimitLineField = EditorUI.class.getDeclaredField("textLimitLineVisible"); // NOI18N
146
                    textLimitLineField.setAccessible(true);
147
                    textLimitLineField.set(eui, false);
148
                } catch (Exception ex) {}
149
            }
150
        };
151
        if (SwingUtilities.isEventDispatchThread()) {
152
            runnable.run();
153
        } else {
154
            SwingUtilities.invokeLater(runnable);
155
        }
156
    }
157
158
    private static void setupContext(JEditorPane editorPane, FileObject file, int line) {
159
        if (line < 1) {
160
            line = 1;
161
        }
162
        StyledDocument doc;
163
        if (file == null) {
164
            return;
165
        }
166
        try {
167
            DataObject dobj = DataObject.find (file);
168
            EditorCookie ec = dobj.getCookie(EditorCookie.class);
169
            if (ec == null) {
170
                return;
171
            }
172
            try {
173
                doc = ec.openDocument();
174
            } catch (IOException ex) {
175
                ErrorManager.getDefault().notify(ex);
176
                return;
177
            }
178
        } catch (DataObjectNotFoundException ex) {
179
            // null dobj
180
            return;
181
        }
182
        try {
183
            int offset = NbDocument.findLineOffset(doc, line - 1); // findLineOffset() expects zero based line numbers
184
            //editorPane.getDocument().putProperty(javax.swing.text.Document.StreamDescriptionProperty, dobj);
185
            //System.err.println("WatchPanel.setupContext("+file+", "+line+", "+offset+")");
186
            DialogBinding.bindComponentToDocument(doc, offset, 0, editorPane);
187
        } catch (IndexOutOfBoundsException ioobex) {
188
            ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, ioobex);
189
        }
190
        setupUI(editorPane);
191
    }
192
193
    private static JScrollPane createScrollableLineEditor(JEditorPane editorPane) {
194
        // Remove control keys:
195
        KeyStroke enterKs = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
196
        KeyStroke escKs = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
197
        KeyStroke tabKs = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
198
        InputMap im = editorPane.getInputMap();
199
        im.put(enterKs, "none");
200
        im.put(escKs, "none");
201
        im.put(tabKs, "none");
202
        
203
        final JScrollPane sp = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_NEVER,
204
                                         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
205
206
        editorPane.setBorder (
207
            new CompoundBorder (editorPane.getBorder(),
208
            new EmptyBorder (0, 0, 0, 0))
209
        );
210
211
        JTextField referenceTextField = new JTextField("M");
212
        JPanel panel = new JPanel(new GridBagLayout());
213
        panel.setBackground(referenceTextField.getBackground());
214
        sp.setBorder(referenceTextField.getBorder());
215
        sp.setBackground(referenceTextField.getBackground());
216
217
        GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
218
        gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
219
        gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
220
        gridBagConstraints.weightx = 1.0;
221
        panel.add(editorPane, gridBagConstraints);
222
        sp.setViewportView(panel);
223
224
        int preferredHeight = referenceTextField.getPreferredSize().height;
225
        if (sp.getPreferredSize().height < preferredHeight) {
226
            sp.setPreferredSize(referenceTextField.getPreferredSize());
227
        }
228
        sp.setMinimumSize(sp.getPreferredSize());
229
230
        setupUI(editorPane);
231
232
        Set<AWTKeyStroke> tfkeys = referenceTextField.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS);
233
        editorPane.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, tfkeys);
234
        tfkeys = referenceTextField.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS);
235
        editorPane.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, tfkeys);
236
        return sp;
237
    }
238
239
240
    public String getExpression() {
117
    public String getExpression() {
241
        return editorPane.getText().trim();
118
        return editorPane.getText().trim();
242
    }
119
    }

Return to bug 181523