OSDN Git Service

cf1fc8c3c450f9462e547dfdc779eddcfbe95628
[moreemacs/moreemacs.git] / jp.sourceforge.moreemacs / src / jp / sourceforge / moreemacs / handlers / TextEditorExecution.java
1 package jp.sourceforge.moreemacs.handlers;\r
2 \r
3 import org.eclipse.jface.text.IDocument;\r
4 import org.eclipse.jface.text.ITextOperationTarget;\r
5 import org.eclipse.jface.text.ITextSelection;\r
6 import org.eclipse.jface.text.ITextViewer;\r
7 import org.eclipse.jface.text.ITextViewerExtension;\r
8 import org.eclipse.ui.IEditorPart;\r
9 import org.eclipse.ui.IWorkbenchWindow;\r
10 import org.eclipse.ui.texteditor.ITextEditor;\r
11 \r
12 abstract class TextEditorExecution implements Execution {\r
13     protected IWorkbenchWindow window;\r
14     protected ITextEditor textEditor;\r
15     protected ITextViewer textViewer;\r
16     protected Cursor cursor;\r
17     protected IDocument doc;\r
18     \r
19     @Override\r
20     public boolean init(IWorkbenchWindow window) {\r
21         this.window = window;\r
22 \r
23         IEditorPart editor = window.getActivePage().getActiveEditor();\r
24         if (editor instanceof ITextEditor) {\r
25             textEditor = (ITextEditor) editor;\r
26         } else {\r
27             textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class);\r
28         }\r
29         if(textEditor == null) {\r
30             return false;\r
31         }\r
32         \r
33         doc = textEditor.getDocumentProvider().getDocument(\r
34                 textEditor.getEditorInput());\r
35 \r
36         ITextOperationTarget target =\r
37             (ITextOperationTarget)editor.getAdapter(ITextOperationTarget.class);\r
38         if(!(target instanceof ITextViewer)) {\r
39             return false;\r
40         }\r
41         textViewer = (ITextViewer) target;\r
42         \r
43         cursor = new Cursor(textEditor, textViewer);\r
44         \r
45         return true;\r
46     }\r
47     \r
48     protected ITextSelection getSelection(boolean fallbackToMark) {\r
49         ITextSelection selection =\r
50             (ITextSelection) textEditor.getSelectionProvider().getSelection();\r
51         \r
52         if(!fallbackToMark && selection.getLength() != 0) {\r
53             return selection;\r
54         }\r
55         \r
56         IEditorPart editor = window.getActivePage().getActiveEditor();\r
57         ITextOperationTarget target =\r
58             (ITextOperationTarget)editor.getAdapter(ITextOperationTarget.class);\r
59         \r
60         if(!(target instanceof ITextViewerExtension)) {\r
61             return selection;\r
62         }\r
63         \r
64         ITextViewerExtension viewerEx = (ITextViewerExtension) target;\r
65             \r
66         int mark = viewerEx.getMark();\r
67         \r
68         if(mark == -1) {\r
69             return selection;\r
70         }\r
71         \r
72         int current = selection.getOffset();\r
73         \r
74         int start = (mark < current) ? mark : current;\r
75         textViewer.setSelectedRange(start, Math.abs(mark - current));\r
76         \r
77         return (ITextSelection) textEditor.getSelectionProvider().getSelection();\r
78     }\r
79 \r
80     protected final int getTabStop() {\r
81         return textViewer.getTextWidget().getTabs();\r
82     }\r
83 }\r