source: java/FramclipsePlugin/src/main/java/com/framsticks/framclipse/editors/outline/FramclipseEditorOutlinePage.java @ 193

Last change on this file since 193 was 193, checked in by Maciej Komosinski, 10 years ago

Set svn:eol-style native for all textual files

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/plain
File size: 3.9 KB
Line 
1package com.framsticks.framclipse.editors.outline;
2
3import org.eclipse.jface.text.TextSelection;
4import org.eclipse.jface.viewers.ISelection;
5import org.eclipse.jface.viewers.IStructuredSelection;
6import org.eclipse.jface.viewers.SelectionChangedEvent;
7import org.eclipse.jface.viewers.StructuredSelection;
8import org.eclipse.jface.viewers.TreeViewer;
9import org.eclipse.swt.widgets.Composite;
10import org.eclipse.swt.widgets.Control;
11import org.eclipse.swt.widgets.Display;
12import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
13
14import com.framsticks.framclipse.editors.FramclipseEditor;
15import com.framsticks.framclipse.internal.parser.ElementWithOffset;
16import com.framsticks.framclipse.internal.parser.Node;
17
18
19public class FramclipseEditorOutlinePage extends ContentOutlinePage
20{
21        private FramclipseEditor editor;
22        private Object input;
23        private FramclipseEditorOutlineContentProvider contentProvider;
24        private FramclipseEditorOutlineLabelProvider labelProvider;
25       
26        boolean flag = false;
27       
28        public FramclipseEditorOutlinePage(FramclipseEditor editor)
29        {
30                super();
31                this.editor = editor;
32        }
33
34        @Override
35        public void createControl(Composite parent) {
36                super.createControl(parent);
37                TreeViewer viewer = getTreeViewer();
38                contentProvider = new FramclipseEditorOutlineContentProvider(editor);
39                viewer.setContentProvider(contentProvider);
40                labelProvider = new FramclipseEditorOutlineLabelProvider(editor.getDocumentProvider().
41                                getDocument(editor.getEditorInput()));
42                viewer.setLabelProvider(labelProvider);
43                viewer.addSelectionChangedListener(this);
44
45                //control is created after input is set
46                if (input != null)
47                        viewer.setInput(input);
48        }
49       
50        public void setInput(Object input)
51        {
52                this.input = input;
53                update();
54        }
55       
56        public void update()
57        {
58                if(Display.getCurrent() != null)
59                {
60                        Display.getCurrent().asyncExec(new Runnable() {
61
62                                public void run() {
63                                       
64                                        TreeViewer viewer = getTreeViewer();
65
66                                        if (viewer != null)
67                                        {
68                                                Control control = viewer.getControl();
69                                                if (control != null && !control.isDisposed())
70                                                {
71                                                        control.setRedraw(false);
72                                                        viewer.setInput(input);
73                                                        viewer.expandAll();
74                                                        control.setRedraw(true);
75                                                }
76                                        }
77
78                                }
79                               
80                        });
81                }
82        }
83       
84        ElementWithOffset getAncestorWithOffset(Node node)
85        {
86                if(node instanceof ElementWithOffset)
87                        return (ElementWithOffset)node;
88               
89                if(node.jjtGetParent() != null)
90                {
91                        return getAncestorWithOffset(node.jjtGetParent());
92                }
93               
94                return null;
95        }
96
97        @Override
98        public void selectionChanged(SelectionChangedEvent event) {
99                super.selectionChanged(event);
100                //find out which item in tree viewer we have selected, and set highlight range accordingly
101               
102                if(flag)
103                {
104                        flag = false;
105                        return;
106                }
107
108                ISelection selection = event.getSelection();
109                if (!selection.isEmpty())
110                {
111                        Node element = (Node)((IStructuredSelection) selection).getFirstElement();
112                       
113                        ElementWithOffset ancestor = getAncestorWithOffset(element);
114                       
115                        int start = ancestor.getBeginOffset();
116                        int len = ancestor.getEndOffset() - ancestor.getBeginOffset() + 1;
117
118                        try
119                        {
120                                editor.setHighlightRange(start, len, true);
121                                //editor.getSelectionProvider().setSelection(new TextSelection(start, len));
122                        }
123                        catch (IllegalArgumentException x)
124                        {
125                                editor.resetHighlightRange();
126                        }
127                }
128                else
129                {
130                        editor.resetHighlightRange();
131                }
132        }
133       
134        public void setSelectedElement(Node element)
135        {
136                if(element != null)
137                {
138                        flag = true;
139                        getTreeViewer().setSelection(new StructuredSelection(element), true);
140                       
141                        ElementWithOffset ancestor = getAncestorWithOffset(element);
142                       
143                        int start = ancestor.getBeginOffset();
144                        int len = ancestor.getEndOffset() - ancestor.getBeginOffset() + 1;
145
146                        try
147                        {
148                                editor.setHighlightRange(start, len, false);
149                                //editor.getSelectionProvider().setSelection(new TextSelection(start, len));
150                        }
151                        catch (IllegalArgumentException x)
152                        {
153                                editor.resetHighlightRange();
154                        }
155
156                }
157                else
158                {
159                        editor.resetHighlightRange();
160                }
161        }
162}
Note: See TracBrowser for help on using the repository browser.