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 220468
Collapse All | Expand All

(-)a/spi.quicksearch/src/org/netbeans/modules/quicksearch/QuickSearchPopup.form (-1 / +3 lines)
Lines 1-4 Link Here
1
<?xml version="1.1" encoding="UTF-8" ?>
1
<?xml version="1.0" encoding="UTF-8" ?>
2
2
3
<Form version="1.5" maxVersion="1.6" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
3
<Form version="1.5" maxVersion="1.6" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
4
  <Properties>
4
  <Properties>
Lines 50-55 Link Here
50
          </Properties>
50
          </Properties>
51
          <Events>
51
          <Events>
52
            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jList1MouseClicked"/>
52
            <EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jList1MouseClicked"/>
53
            <EventHandler event="mousePressed" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="jList1MousePressed"/>
54
            <EventHandler event="mouseDragged" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jList1MouseDragged"/>
53
            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jList1MouseMoved"/>
55
            <EventHandler event="mouseMoved" listener="java.awt.event.MouseMotionListener" parameters="java.awt.event.MouseEvent" handler="jList1MouseMoved"/>
54
          </Events>
56
          </Events>
55
        </Component>
57
        </Component>
(-)a/spi.quicksearch/src/org/netbeans/modules/quicksearch/QuickSearchPopup.java (-1 / +93 lines)
Lines 43-48 Link Here
43
43
44
package org.netbeans.modules.quicksearch;
44
package org.netbeans.modules.quicksearch;
45
45
46
import java.awt.Cursor;
46
import java.awt.Dimension;
47
import java.awt.Dimension;
47
import java.awt.EventQueue;
48
import java.awt.EventQueue;
48
import java.awt.FontMetrics;
49
import java.awt.FontMetrics;
Lines 51-58 Link Here
51
import java.awt.Window;
52
import java.awt.Window;
52
import java.awt.event.ActionEvent;
53
import java.awt.event.ActionEvent;
53
import java.awt.event.ActionListener;
54
import java.awt.event.ActionListener;
55
import java.awt.event.MouseAdapter;
56
import java.awt.event.MouseEvent;
57
import java.awt.event.MouseMotionAdapter;
54
import java.util.logging.Level;
58
import java.util.logging.Level;
55
import java.util.logging.Logger;
59
import java.util.logging.Logger;
60
import java.util.prefs.Preferences;
56
import javax.swing.JComponent;
61
import javax.swing.JComponent;
57
import javax.swing.JLayeredPane;
62
import javax.swing.JLayeredPane;
58
import javax.swing.JList;
63
import javax.swing.JList;
Lines 64-69 Link Here
64
import org.netbeans.modules.quicksearch.recent.RecentSearches;
69
import org.netbeans.modules.quicksearch.recent.RecentSearches;
65
import org.netbeans.modules.quicksearch.ResultsModel.ItemResult;
70
import org.netbeans.modules.quicksearch.ResultsModel.ItemResult;
66
import org.openide.util.NbBundle;
71
import org.openide.util.NbBundle;
72
import org.openide.util.NbPreferences;
67
import org.openide.util.RequestProcessor;
73
import org.openide.util.RequestProcessor;
68
import org.openide.util.Task;
74
import org.openide.util.Task;
69
import org.openide.util.TaskListener;
75
import org.openide.util.TaskListener;
Lines 75-80 Link Here
75
public class QuickSearchPopup extends javax.swing.JPanel 
81
public class QuickSearchPopup extends javax.swing.JPanel 
76
        implements ListDataListener, ActionListener, TaskListener, Runnable {
82
        implements ListDataListener, ActionListener, TaskListener, Runnable {
77
83
84
    private static final String CUSTOM_WIDTH = "customWidth";           //NOI18N
85
    private static final int RESIZE_AREA_WIDTH = 5;
78
    private AbstractQuickSearchComboBar comboBar;
86
    private AbstractQuickSearchComboBar comboBar;
79
87
80
    private ResultsModel rModel;
88
    private ResultsModel rModel;
Lines 90-96 Link Here
90
98
91
    private int catWidth;
99
    private int catWidth;
92
    private int resultWidth;
100
    private int resultWidth;
101
    private int customWidth = -1;
102
    private boolean canResize = false;
93
    private Task evalTask;
103
    private Task evalTask;
104
    private Task saveTask;
94
    private static final RequestProcessor RP = new RequestProcessor(QuickSearchPopup.class);
105
    private static final RequestProcessor RP = new RequestProcessor(QuickSearchPopup.class);
95
    private static final RequestProcessor evaluatorRP = new RequestProcessor(QuickSearchPopup.class + ".evaluator"); //NOI18N
106
    private static final RequestProcessor evaluatorRP = new RequestProcessor(QuickSearchPopup.class + ".evaluator"); //NOI18N
96
    private static final Logger LOG = Logger.getLogger(QuickSearchPopup.class.getName());
107
    private static final Logger LOG = Logger.getLogger(QuickSearchPopup.class.getName());
Lines 98-103 Link Here
98
    public QuickSearchPopup (AbstractQuickSearchComboBar comboBar) {
109
    public QuickSearchPopup (AbstractQuickSearchComboBar comboBar) {
99
        this.comboBar = comboBar;
110
        this.comboBar = comboBar;
100
        initComponents();
111
        initComponents();
112
        loadSettings();
113
        makeResizable();
101
        rModel = ResultsModel.getInstance();
114
        rModel = ResultsModel.getInstance();
102
        jList1.setModel(rModel);
115
        jList1.setModel(rModel);
103
        jList1.setCellRenderer(new SearchResultRender(this));
116
        jList1.setCellRenderer(new SearchResultRender(this));
Lines 222-229 Link Here
222
            public void mouseClicked(java.awt.event.MouseEvent evt) {
235
            public void mouseClicked(java.awt.event.MouseEvent evt) {
223
                jList1MouseClicked(evt);
236
                jList1MouseClicked(evt);
224
            }
237
            }
238
            public void mousePressed(java.awt.event.MouseEvent evt) {
239
                jList1MousePressed(evt);
240
            }
225
        });
241
        });
226
        jList1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
242
        jList1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
243
            public void mouseDragged(java.awt.event.MouseEvent evt) {
244
                jList1MouseDragged(evt);
245
            }
227
            public void mouseMoved(java.awt.event.MouseEvent evt) {
246
            public void mouseMoved(java.awt.event.MouseEvent evt) {
228
                jList1MouseMoved(evt);
247
                jList1MouseMoved(evt);
229
            }
248
            }
Lines 276-281 Link Here
276
    }// </editor-fold>//GEN-END:initComponents
295
    }// </editor-fold>//GEN-END:initComponents
277
296
278
private void jList1MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseMoved
297
private void jList1MouseMoved(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseMoved
298
    // toggle resize/default cursor
299
    if (evt.getX() < RESIZE_AREA_WIDTH) {
300
        QuickSearchPopup.this.setCursor(Cursor.getPredefinedCursor(
301
                Cursor.W_RESIZE_CURSOR));
302
    } else {
303
        QuickSearchPopup.this.setCursor(Cursor.getDefaultCursor());
304
    }
279
    // selection follows mouse move
305
    // selection follows mouse move
280
    Point loc = evt.getPoint();
306
    Point loc = evt.getPoint();
281
    int index = jList1.locationToIndex(loc);
307
    int index = jList1.locationToIndex(loc);
Lines 298-303 Link Here
298
324
299
}//GEN-LAST:event_jList1MouseClicked
325
}//GEN-LAST:event_jList1MouseClicked
300
326
327
    private void jList1MouseDragged(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MouseDragged
328
        QuickSearchPopup.this.processMouseMotionEvent(evt);
329
    }//GEN-LAST:event_jList1MouseDragged
330
331
    private void jList1MousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jList1MousePressed
332
        QuickSearchPopup.this.processMouseEvent(evt);
333
    }//GEN-LAST:event_jList1MousePressed
301
334
302
    // Variables declaration - do not modify//GEN-BEGIN:variables
335
    // Variables declaration - do not modify//GEN-BEGIN:variables
303
    private javax.swing.JLabel hintLabel;
336
    private javax.swing.JLabel hintLabel;
Lines 412-418 Link Here
412
        if (resultWidth <= 0) {
445
        if (resultWidth <= 0) {
413
            resultWidth = computeWidth(jList1, 42, 50);
446
            resultWidth = computeWidth(jList1, 42, 50);
414
        }
447
        }
415
        return resultWidth;
448
        if (customWidth > 0) {
449
            return Math.max(resultWidth, customWidth);
450
        } else {
451
            return resultWidth;
452
        }
416
    }
453
    }
417
454
418
    /** Implementation of TaskListener, listen to when providers are finished
455
    /** Implementation of TaskListener, listen to when providers are finished
Lines 516-519 Link Here
516
                comboBar.getKeyStroke()));
553
                comboBar.getKeyStroke()));
517
    }
554
    }
518
555
556
    /**
557
     * Register listeners that make this pop-up resizable.
558
     */
559
    private void makeResizable() {
560
        this.addMouseMotionListener(new MouseMotionAdapter() {
561
            @Override
562
            public void mouseDragged(MouseEvent e) {
563
                if (canResize) {
564
                    customWidth = getResultWidth() - e.getX();
565
                    run();
566
                    saveSettings();
567
                }
568
            }
569
        });
570
        this.addMouseListener(new MouseAdapter() {
571
            @Override
572
            public void mousePressed(MouseEvent e) {
573
                canResize = e.getX() < RESIZE_AREA_WIDTH;
574
            }
575
        });
576
    }
577
578
    /**
579
     * Load settings from preferences file.
580
     */
581
    private void loadSettings() {
582
        RP.post(new Runnable() {
583
            @Override
584
            public void run() {
585
                Preferences p = NbPreferences.forModule(QuickSearchPopup.class);
586
                customWidth = p.getInt(CUSTOM_WIDTH, -1);
587
            }
588
        });
589
    }
590
591
    /**
592
     * Save settings to preferences file. Do nothing if this operation is
593
     * already scheduled.
594
     */
595
    private synchronized void saveSettings() {
596
        if (saveTask == null) {
597
            saveTask = RP.create(new Runnable() {
598
                @Override
599
                public void run() {
600
                    Preferences p = NbPreferences.forModule(
601
                            QuickSearchPopup.class);
602
                    p.putInt(CUSTOM_WIDTH, customWidth);
603
                    synchronized (QuickSearchPopup.this) {
604
                        saveTask = null;
605
                    }
606
                }
607
            });
608
            RP.post(saveTask, 1000);
609
        }
610
    }
519
}
611
}

Return to bug 220468