KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > text > list > ListSelectionSpace


1 package text.list;
2
3 import java.awt.*;
4 import java.awt.event.*;
5 import javax.swing.event.*;
6 import text.*;
7
8 import java.util.*;
9
10 public class ListSelectionSpace extends MouseInputAdapter
11 {
12     protected ListData data;
13     protected ListDisplay display;
14
15     protected int start;
16   
17     public ListSelectionSpace(ListDisplay _display, ListData _data)
18     {
19         data = _data;
20         display = _display;
21     }
22
23     public void clearSelections()
24     {
25         Iterator i = data.dataIterator();
26         while (i.hasNext())
27         {
28             ListElement element = (ListElement)i.next();
29             element.setSelected(false);
30         }
31     }
32
33     /** returns the list element for the *primary* selected element */
34     public ListElement getSelectedElement()
35     {
36         ListElement temp = data.getElementAtLocation(start);
37         if (temp != null && temp.isSelected())
38         {
39            return temp;
40         }
41  
42         return null;
43     }
44
45     /** returns a linked list of all the selected elements (in order from top of the list to the bottom) */
46     public LinkedList getSelectedElements()
47     {
48         LinkedList selection = new LinkedList();
49
50         Iterator i = data.dataIterator();
51         while (i.hasNext())
52         {
53             ListElement element = (ListElement)i.next();
54             if (element.isSelected())
55             {
56                selection.add(element);
57             }
58         }
59
60         return selection;
61     }
62
63     public void mousePressed(MouseEvent ev)
64     {
65         if (ev.getButton() == MouseEvent.BUTTON1 && !ev.isPopupTrigger() && !(ev.isShiftDown() && ev.isControlDown()) )
66         {
67            if ((ev.getModifiers() & MouseEvent.CTRL_MASK) == MouseEvent.CTRL_MASK ||
68                (ev.getModifiers() & MouseEvent.ALT_MASK) == MouseEvent.ALT_MASK)
69            {
70               ListElement temp = data.getElementAtLocation(ev.getY());
71
72               if (temp != null)
73               {
74                  if (!temp.isSelected())
75                  {
76                     start = ev.getY();
77                  }
78                  temp.setSelected(!temp.isSelected());
79                  display.repaint();
80               }
81            }
82            else if ((ev.getModifiers() & MouseEvent.SHIFT_MASK) == MouseEvent.SHIFT_MASK)
83            {
84               selectRange(ev);
85            }
86            else
87            {
88               start = ev.getY();
89               clearSelections();
90
91               setSelectedAt(start, true);
92               display.repaint();
93            }
94         }
95     }
96
97     public void mouseReleased(MouseEvent ev)
98     {
99     }
100
101     public void mouseClicked(MouseEvent ev)
102     {
103     }
104
105     public void mouseDragged(MouseEvent ev)
106     {
107        if (ev.getButton() == MouseEvent.BUTTON1_MASK || (ev.getModifiers() & MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK)
108        {
109           selectRange(ev);
110        }
111     }
112
113     private void selectRange(MouseEvent ev)
114     {
115        clearSelections();
116
117        boolean repaint = false;
118
119        int _height = (TextSource.fontMetrics.getHeight() + 2);
120
121        if (start < ev.getY())
122        {
123           int temp = start;
124           while (temp < ev.getY())
125           {
126              setSelectedAt(temp, true);
127              temp += _height;
128           }
129        }
130        else
131        {
132           int temp = ev.getY();
133           while (temp < start)
134           {
135              setSelectedAt(temp, true);
136              temp += _height;
137           }
138           setSelectedAt(start, true);
139        }
140
141        display.repaint();
142     }
143
144     public boolean setSelectedAt(int pixely, boolean selected)
145     {
146        ListElement temp = data.getElementAtLocation(pixely);
147
148        if (temp != null && temp.isSelected() != selected)
149        {
150           temp.setSelected(selected);
151           return true;
152        }
153        return false;
154     }
155
156     public int translateToLineNumber(int pixely)
157     {
158        int _height = (TextSource.fontMetrics.getHeight() + 2);
159        int lineNo = ((pixely - (pixely % _height)) / _height) + data.getValue();
160        return lineNo;
161     }
162 }
163
Popular Tags