~ubuntu-branches/ubuntu/trusty/eclipse-linuxtools/trusty

« back to all changes in this revision

Viewing changes to profiling/org.eclipse.linuxtools.dataviewers/src/org/eclipse/linuxtools/dataviewers/findreplace/STTreeViewerRow.java

  • Committer: Package Import Robot
  • Author(s): Jakub Adam
  • Date: 2012-06-29 12:07:30 UTC
  • Revision ID: package-import@ubuntu.com-20120629120730-bfri1xys1i71dpn6
Tags: upstream-1.0.0
ImportĀ upstreamĀ versionĀ 1.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*******************************************************************************
 
2
 * Copyright (c) 2009 STMicroelectronics.
 
3
 * All rights reserved. This program and the accompanying materials
 
4
 * are made available under the terms of the Eclipse Public License v1.0
 
5
 * which accompanies this distribution, and is available at
 
6
 * http://www.eclipse.org/legal/epl-v10.html
 
7
 *
 
8
 * Contributors:
 
9
 *    Marzia Maugeri <marzia.maugeri@st.com> - initial API and implementation
 
10
 *******************************************************************************/
 
11
 
 
12
package org.eclipse.linuxtools.dataviewers.findreplace;
 
13
 
 
14
import java.util.LinkedList;
 
15
 
 
16
import org.eclipse.core.runtime.Assert;
 
17
import org.eclipse.jface.viewers.TreePath;
 
18
import org.eclipse.jface.viewers.ViewerRow;
 
19
import org.eclipse.swt.graphics.Color;
 
20
import org.eclipse.swt.graphics.Font;
 
21
import org.eclipse.swt.graphics.Image;
 
22
import org.eclipse.swt.graphics.Rectangle;
 
23
import org.eclipse.swt.widgets.Tree;
 
24
import org.eclipse.swt.widgets.TreeItem;
 
25
 
 
26
/**
 
27
 * This is a copy of TreeViewerRow is the Tree implementation of ViewerRow.
 
28
 * It's useful to use some methods from protected to public that in the original
 
29
 * TreeViewerRow can't be used
 
30
 * 
 
31
 */
 
32
public class STTreeViewerRow extends STViewerRow<TreeItem> {
 
33
        
 
34
        /**
 
35
         * Create a new instance of the receiver.
 
36
         * @param item
 
37
         */
 
38
        public STTreeViewerRow(TreeItem item) {
 
39
                super(item);
 
40
        }
 
41
 
 
42
        /* (non-Javadoc)
 
43
         * @see org.eclipse.jface.viewers.ViewerRow#getBounds()
 
44
         */
 
45
        @Override
 
46
        public Rectangle getBounds() {
 
47
                return getItem().getBounds();
 
48
        }
 
49
        
 
50
        /* (non-Javadoc)
 
51
         * @see org.eclipse.jface.viewers.ViewerRow#getBounds(int)
 
52
         */
 
53
        @Override
 
54
        public Rectangle getBounds(int columnIndex) {
 
55
                return getItem().getBounds(columnIndex);
 
56
        }
 
57
 
 
58
        /* (non-Javadoc)
 
59
         * @see org.eclipse.jface.viewers.ViewerRow#getColumnCount()
 
60
         */
 
61
        @Override
 
62
        public int getColumnCount() {
 
63
                return getItem().getParent().getColumnCount();
 
64
        }
 
65
 
 
66
        /* (non-Javadoc)
 
67
         * @see org.eclipse.jface.viewers.ViewerRow#getBackground(int)
 
68
         */
 
69
        @Override
 
70
        public Color getBackground(int columnIndex) {
 
71
                return getItem().getBackground(columnIndex);
 
72
        }
 
73
 
 
74
        /* (non-Javadoc)
 
75
         * @see org.eclipse.jface.viewers.ViewerRow#getFont(int)
 
76
         */
 
77
        @Override
 
78
        public Font getFont(int columnIndex) {
 
79
                return getItem().getFont(columnIndex);
 
80
        }
 
81
 
 
82
        /* (non-Javadoc)
 
83
         * @see org.eclipse.jface.viewers.ViewerRow#getForeground(int)
 
84
         */
 
85
        @Override
 
86
        public Color getForeground(int columnIndex) {
 
87
                return getItem().getForeground(columnIndex);
 
88
        }
 
89
 
 
90
        /* (non-Javadoc)
 
91
         * @see org.eclipse.jface.viewers.ViewerRow#getImage(int)
 
92
         */
 
93
        @Override
 
94
        public Image getImage(int columnIndex) {
 
95
                return getItem().getImage(columnIndex);
 
96
        }
 
97
 
 
98
        /* (non-Javadoc)
 
99
         * @see org.eclipse.jface.viewers.ViewerRow#getText(int)
 
100
         */
 
101
        @Override
 
102
        public String getText(int columnIndex) {
 
103
                return getItem().getText(columnIndex);
 
104
        }
 
105
 
 
106
        /* (non-Javadoc)
 
107
         * @see org.eclipse.jface.viewers.ViewerRow#setBackground(int, org.eclipse.swt.graphics.Color)
 
108
         */
 
109
        @Override
 
110
        public void setBackground(int columnIndex, Color color) {
 
111
                getItem().setBackground(columnIndex, color);
 
112
        }
 
113
 
 
114
        /* (non-Javadoc)
 
115
         * @see org.eclipse.jface.viewers.ViewerRow#setFont(int, org.eclipse.swt.graphics.Font)
 
116
         */
 
117
        @Override
 
118
        public void setFont(int columnIndex, Font font) {
 
119
                getItem().setFont(columnIndex, font);
 
120
        }
 
121
 
 
122
        /* (non-Javadoc)
 
123
         * @see org.eclipse.jface.viewers.ViewerRow#setForeground(int, org.eclipse.swt.graphics.Color)
 
124
         */
 
125
        @Override
 
126
        public void setForeground(int columnIndex, Color color) {
 
127
                getItem().setForeground(columnIndex, color);
 
128
        }
 
129
 
 
130
        /* (non-Javadoc)
 
131
         * @see org.eclipse.jface.viewers.ViewerRow#setImage(int, org.eclipse.swt.graphics.Image)
 
132
         */
 
133
        @Override
 
134
        public void setImage(int columnIndex, Image image) {
 
135
                Image oldImage = getItem().getImage(columnIndex);
 
136
                if (image != oldImage) {
 
137
                        getItem().setImage(columnIndex, image);
 
138
                }
 
139
        }
 
140
 
 
141
        /* (non-Javadoc)
 
142
         * @see org.eclipse.jface.viewers.ViewerRow#setText(int, java.lang.String)
 
143
         */
 
144
        @Override
 
145
        public void setText(int columnIndex, String text) {
 
146
                getItem().setText(columnIndex, text == null ? "" : text); //$NON-NLS-1$
 
147
        }
 
148
        
 
149
        /* (non-Javadoc)
 
150
         * @see org.eclipse.jface.viewers.ViewerRow#getControl()
 
151
         */
 
152
        @Override
 
153
        public Tree getControl() {
 
154
                return getItem().getParent();
 
155
        }
 
156
        
 
157
        /*
 
158
         * (non-Javadoc)
 
159
         * @see org.eclipse.linuxtools.dataviewers.findreplace.STViewerRow#getRowBelow(boolean)
 
160
         */
 
161
        @Override
 
162
        protected ViewerRow getRowBelow(boolean sameLevel) {
 
163
                Tree tree = getItem().getParent();
 
164
                
 
165
                // This means we have top-level item
 
166
                if( getItem().getParentItem() == null ) {
 
167
                        if( sameLevel || ! getItem().getExpanded() ) {
 
168
                                int index = tree.indexOf(getItem()) + 1;
 
169
                                if( index < tree.getItemCount() ) {
 
170
                                        return new STTreeViewerRow(tree.getItem(index));
 
171
                                }
 
172
                        } else if( getItem().getExpanded() && getItem().getItemCount() > 0 ) {
 
173
                                return new STTreeViewerRow(getItem().getItem(0));
 
174
                        }
 
175
                } else {
 
176
                        if( sameLevel || ! getItem().getExpanded() ) {
 
177
                                TreeItem parentItem = getItem().getParentItem();
 
178
                                
 
179
                                int nextIndex = parentItem.indexOf(getItem()) + 1;
 
180
                                int totalIndex = parentItem.getItemCount();
 
181
                                
 
182
                                TreeItem itemAfter;
 
183
                                // This would mean that it was the last item
 
184
                                if( nextIndex == totalIndex ) {
 
185
                                        itemAfter = findNextItem( parentItem );
 
186
                                } else {
 
187
                                        itemAfter = parentItem.getItem(nextIndex);
 
188
                                }
 
189
                                
 
190
                                if( itemAfter != null ) {
 
191
                                        return new STTreeViewerRow(itemAfter);
 
192
                                }
 
193
                        } else if( getItem().getExpanded() && getItem().getItemCount() > 0 ) {
 
194
                                return new STTreeViewerRow(getItem().getItem(0));
 
195
                        }
 
196
                }
 
197
                return null;
 
198
        }
 
199
        
 
200
        /*
 
201
         * (non-Javadoc)
 
202
         * @see org.eclipse.linuxtools.dataviewers.findreplace.STViewerRow#getRowAbove(boolean)
 
203
         */
 
204
        @Override
 
205
        protected ViewerRow getRowAbove(boolean sameLevel) {
 
206
                Tree tree = getItem().getParent();
 
207
                
 
208
                // This means we have top-level item
 
209
                if( getItem().getParentItem() == null ) {
 
210
                        int index = tree.indexOf(getItem()) - 1;
 
211
                        TreeItem nextTopItem = null;
 
212
                        if (index >= 0) {
 
213
                                nextTopItem = tree.getItem(index);
 
214
                        }
 
215
                        if (nextTopItem != null) {
 
216
                                if (sameLevel) {
 
217
                                        return new STTreeViewerRow(nextTopItem);
 
218
                                }
 
219
                                return new STTreeViewerRow(findLastVisibleItem(nextTopItem));
 
220
                        }
 
221
                } else {
 
222
                        TreeItem parentItem = getItem().getParentItem();
 
223
                        int previousIndex = parentItem.indexOf(getItem()) - 1;
 
224
                        
 
225
                        TreeItem itemBefore;
 
226
                        if( previousIndex >= 0 ) {
 
227
                                if( sameLevel ) {
 
228
                                        itemBefore = parentItem.getItem(previousIndex);
 
229
                                } else {
 
230
                                        itemBefore = findLastVisibleItem(parentItem.getItem(previousIndex));
 
231
                                }
 
232
                        } else {
 
233
                                itemBefore = parentItem;
 
234
                        }
 
235
                        if( itemBefore != null ) {
 
236
                                return new STTreeViewerRow(itemBefore);
 
237
                        }
 
238
                }
 
239
                return null;
 
240
        }
 
241
 
 
242
        private TreeItem findLastVisibleItem(TreeItem parentItem) {
 
243
                TreeItem rv = parentItem;
 
244
                while( rv.getExpanded() && rv.getItemCount() > 0 ) {
 
245
                        rv = rv.getItem(rv.getItemCount()-1);
 
246
                }
 
247
                return rv;
 
248
        }
 
249
                
 
250
        private TreeItem findNextItem(TreeItem item) {
 
251
                TreeItem rv = null;
 
252
                Tree tree = item.getParent();
 
253
                TreeItem parentItem = item.getParentItem();
 
254
                
 
255
                int nextIndex;
 
256
                int totalItems;
 
257
                
 
258
                if( parentItem == null ) {
 
259
                        nextIndex = tree.indexOf(item) + 1;
 
260
                        totalItems = tree.getItemCount();
 
261
                } else {
 
262
                        nextIndex = parentItem.indexOf(item) + 1;
 
263
                        totalItems = parentItem.getItemCount();
 
264
                }
 
265
                
 
266
                // This is once more the last item in the tree
 
267
                // Search on
 
268
                if( nextIndex == totalItems ) {
 
269
                        if( item.getParentItem() != null ) {
 
270
                                rv = findNextItem(item.getParentItem());
 
271
                        }
 
272
                } else {
 
273
                        if( parentItem == null ) {
 
274
                                rv = tree.getItem(nextIndex);
 
275
                        } else {
 
276
                                rv = parentItem.getItem(nextIndex);
 
277
                        }
 
278
                }
 
279
                
 
280
                return rv;
 
281
        }
 
282
 
 
283
        /*
 
284
         * (non-Javadoc)
 
285
         * @see org.eclipse.jface.viewers.ViewerRow#getTreePath()
 
286
         */
 
287
        @Override
 
288
        public TreePath getTreePath() {
 
289
                TreeItem tItem = getItem();
 
290
                LinkedList<Object> segments = new LinkedList<Object>();
 
291
                while (tItem != null) {
 
292
                        Object segment = tItem.getData();
 
293
                        Assert.isNotNull(segment);
 
294
                        segments.addFirst(segment);
 
295
                        tItem = tItem.getParentItem();
 
296
                }
 
297
                return new TreePath(segments.toArray());
 
298
        }
 
299
                        
 
300
        /*
 
301
         * (non-Javadoc)
 
302
         * @see org.eclipse.jface.viewers.ViewerRow#clone()
 
303
         */
 
304
        @Override
 
305
        public STTreeViewerRow clone() {
 
306
                return new STTreeViewerRow(getItem());
 
307
        }
 
308
}