¹®¼ ÆíÁý±â ÇÁ·¹ÀÓ¿öÅ©´Â ÅØ½ºÆ® ¹× ¼Ò½º Äڵ带 Á¦½ÃÇÏ°í °»½ÅÇÏ´Â µ¥ µµ¿òÀÌ µÇ´Â ¿©·¯ °¡Áö À¯Æ¿¸®Æ¼ Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù. ÀÌÁ¦ºÎÅÍ ÆíÁý±â°¡ ´ÜÁö ÇϳªÀÇ ÆÄÆ®ÀÎ WorkbenchÀ» ´Ù·ì´Ï´Ù. ÆíÁý±â°¡ ÄÁÅØ½ºÆ® ¸Þ´º, ¸Þ´º Ç¥½ÃÁÙ ¹× µµ±¸ ¸ðÀ½°ú °°Àº ´Ù¸¥ Workbench ±â´É°ú »óÈ£ ÀÛ¿ëÇÏ´Â ¹æ¹ýÀº ¹«¾ùÀԴϱî?
ÆíÁý±â°¡ ÀÚü¸¦ Workbench¿¡ µî·ÏÇϰí Workbenc ¸Þ´º Ç¥½ÃÁÙ¿¡ Á¶Ä¡¸¦ Á¦°øÇÏ´Â ¹æ¹ýÀ» ÀÌÇØÇÏ·Á¸é, org.eclipse.ui.editors ³íÀÇ ÀýÀ» ÂüÁ¶ÇϽʽÿÀ. ¿©±â¼ ÇØ´ç Á¤º¸¸¦ ´Ù·çÁö ¾Ê½À´Ï´Ù. Java ¿¹Á¦ ÆíÁý±â°¡ ÆíÁý±â¸¦ µî·ÏÇÏ´Â ¸¶Å©¾÷À» °£·«ÇÏ°Ô »ìÆìº¾´Ï´Ù.
<extension point="org.eclipse.ui.editors"> <editor name="%javaEditorName" icon="icons/obj16/java.gif" extensions="jav" contributorClass="org.eclipse.ui.examples.javaeditor.JavaActionContributor" class="org.eclipse.ui.examples.javaeditor.JavaEditor" id="org.eclipse.ui.JavaEditor"> </editor> </extension>
Workbench ¸Þ´º Ç¥½ÃÁÙ Á¶Ä¡´Â JavaActionContributor¿¡¼ Á¦°øµË´Ï´Ù. ÀÌ Ç׸ñÀº Workbench ÆíÁý ¸Þ´º ¹× Workbench µµ±¸ ¸ðÀ½¿¡ ÀÖ´Â Á¶Ä¡¸¦ ±¸ÇöÇÕ´Ï´Ù.
public JavaActionContributor() { super(); fContentAssistProposal= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal."); //$NON-NLS-1$ ... fContentAssistTip= new RetargetTextEditorAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip."); //$NON-NLS-1$ ... fTogglePresentation= new PresentationAction(); }
óÀ½ µÎ °¡Áö Á¶Ä¡´Â »õ·Î ´ë»ó ÁöÁ¤ °¡´ÉÇÑ ¹®¼ ÆíÁý±â Á¶Ä¡·Î¼ Á¤Àǵ˴ϴÙ. ¿ø¸®´Â Workbench¿¡¼ Á¦°øµÇ´Â »õ·Î ´ë»ó ÁöÁ¤ °¡´ÉÇÑ Á¶Ä¡¿Í ºñ½ÁÇÕ´Ï´Ù. »õ·Î ´ë»ó ÁöÁ¤ °¡´ÉÇÑ ¹®¼ ÆíÁý±â´Â Á¶Ä¡ Áö½ÃÀÚ°¡ Ȱ¼ºÈ ÆíÁý±â¿¡¼ Á¦°øÇÏ´Â ÇØ´ç Á¶Ä¡¸¦ µ¿ÀûÀ¸·Î ¹ÙÀεåÇÏ´Â ¸Þ´º Ç׸ñÀ» ³ªÅ¸³À´Ï´Ù. Ȱ¼º ÆíÁý±â°¡ º¯°æµÇ¸é »õ·Î ´ë»ó ÁöÁ¤ °¡´ÉÇÑ ¹®¼ ÆíÁý±â Á¶Ä¡°¡ ¹ÙÀεåµÇ´Â Á¶Ä¡µµ º¯°æµË´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº ÆíÁý±â¿¡ ÁöÁ¤µÈ ID Á¶Ä¡¸¦ ¿äûÇÏ¿© ÆíÁý±â Á¶Ä¡ Áö½ÃÀÚ°¡ ÇØ´ç Á¶Ä¡¸¦ ã´Â °ÍÀ» º¸¿© ÁÝ´Ï´Ù.
protected final IAction getAction(ITextEditor editor, String actionId) {
return (editor == null ? null : editor.getAction(actionId));
} public void setActiveEditor(IEditorPart part) {
super.setActiveEditor(part);
ITextEditor editor= null;
if (part instanceof ITextEditor)
editor= (ITextEditor) part;
fContentAssistProposal.setAction(getAction(editor, "ContentAssistProposal"));
fContentAssistTip.setAction(getAction(editor, "ContentAssistTip"));
fTogglePresentation.setEditor(editor);
fTogglePresentation.update();
}
ID´Â ¿©±â¼ JavaTextEditor¿¡ ÁöÁ¤µÈ ´ë·Î Á¶Ä¡°¡ ÆíÁý±â¿¡
µî·ÏµÈ ID¿Í µ¿ÀÏÇØ¾ß ÇÕ´Ï´Ù(´ÙÀ½ ¼½¼Çµµ ÂüÁ¶).
protected void createActions() { super.createActions(); IAction a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistProposal.", this, ISourceViewer.CONTENTASSIST_PROPOSALS); //$NON-NLS-1$ a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); setAction("ContentAssistProposal", a); a= new TextOperationAction(JavaEditorMessages.getResourceBundle(), "ContentAssistTip.", this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION); //$NON-NLS-1$ a.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_CONTEXT_INFORMATION); setAction("ContentAssistTip", a); }
Áö½ÃÀÚÀÇ ¼¼ ¹øÂ° Á¶Ä¡´Â Workbench µµ±¸ ¸ðÀ½¿¡ Ãß°¡µÈ ±¸Ã¼Àû Á¶Ä¡ÀÔ´Ï´Ù. ÀÌ Á¶Ä¡´Â Java ¿¹Á¦ÀÇ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʿ¡ Áö½ÃµÈ ´ë·Î °Á¶µÈ ¹üÀ§¸¦ Ç¥½ÃÇϰí Àüü ÆÄÀÏÀ» Ç¥½ÃÇÏ´Â »çÀÌ¿¡¼ ÆíÁý±â »óŸ¦ Åä±ÛÇÕ´Ï´Ù. ÀÌ Á¶Ä¡´Â µµ±¸ ¸ðÀ½¿¡¼¸¸ ³ªÅ¸³³´Ï´Ù.
Á¶Ä¡¸¦ ÆíÁý±â¿¡ µî·ÏÇÏ´Â µ¥ ¸Þ¼Òµå createActions°¡ »ç¿ëµË´Ï´Ù. ¿©±â¿¡´Â ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º¿¡ ÀûÀýÇÑ Á¶Ä¡ ¶Ç´Â È®Àå Á¤ÀÇ¿¡¼ Á¦°øµÈ Á¶Ä¡°¡ Æ÷ÇԵ˴ϴÙ. Java ¿¹Á¦ ÆíÁý±â¿¡¼´Â »õ·Î ´ë»ó ÁöÁ¤ °¡´ÉÇÑ Á¶Ä¡¿¡ ¹ÙÀεåµÇ´Â Á¶Ä¡¸¸ ÀÛ¼ºµË´Ï´Ù. ±×·¯³ª Java ¿¹Á¦ ÆíÁý±â´Â TextEditor ¹× ÇØ´ç ¼öÆÛŬ·¡½º¿¡¼ ÀÛ¼ºµÈ Á¶Ä¡µµ °è½ÂÇÕ´Ï´Ù. ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º¿¡¼ ÀÌ·¯ÇÑ Á¶Ä¡¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
TextEditor ¸Þ¼Òµå editorContextMenuAboutToShow´Â ÆíÁý±â°¡ ÆíÁý ¿µ¿ª¿¡ ´ëÇÑ ÄÁÅØ½ºÆ® ¸Þ´º¿¡ Á¶Ä¡¸¦ Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·¹ÀÓ¿öÅ©¿¡¼ »ç¿ëµË´Ï´Ù. ¸Þ´º °æ·Î¸¦ »ç¿ëÇÏ¿© Á¶Ä¡°¡ Ç¥½ÃµÉ Á¤È®ÇÑ À§Ä¡¸¦ °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º ³»ºÎÀÇ ¿Ã¹Ù¸¥ ¸Þ´º °æ·Î´Â AbstractTextEditorÀÇ ÀÌ ¸Þ¼ÒµåÀÇ ±¸Çö¿¡¼ Á¤Àǵ˴ϴÙ.
ÀÌ ¸Þ´º¿¡ Á¶Ä¡¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Â ¿©·¯ °¡Áö ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ù ¹øÂ°´Â ÆíÁý±â¿¡ µî·ÏµÈ ID¸¸ »ç¿ëÇÏ¿© Á¶Ä¡¸¦ Ãß°¡ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, JavaTextEditor´Â ÀÌ ¸Þ¼Òµå°¡ È£ÃâµÉ ¶§ ÄÁÅÙÃ÷ Áö¿ø¿¡ ÇØ´çÇÏ´Â Á¶Ä¡¸¦ ¸Þ´º¿¡ Ãß°¡ÇÕ´Ï´Ù. »ç¿ëµÈ ID·Î Á¶Ä¡¸¦ µî·ÏÇÏÁö ¾ÊÀ¸¸é ¸Þ´º¿¡ Á¶Ä¡°¡ Ç¥½ÃµÇÁö ¾Ê½À´Ï´Ù.
public void editorContextMenuAboutToShow(MenuManager menu) { super.editorContextMenuAboutToShow(menu); addAction(menu, "ContentAssistProposal"); addAction(menu, "ContentAssistTip"); }
¼öÆÛŬ·¡½º TextEditor´Â Á¶Ä¡¸¦ ¹èÄ¡ÇÏ´Â µ¥ ÇÊ¿äÇÑ ¸Þ´º ±×·ìÀ» ÄÁÅØ½ºÆ® ¸Þ´º¿¡ ÁöÁ¤ÇÏ¿© Á¶Ä¡¸¦ µÎ ¹øÂ° ¹æ¹ýÀ¸·Î Ãß°¡ÇÕ´Ï´Ù. ÀÌ·± °æ¿ì Á¶Ä¡(¿ÞÂÊÀ¸·Î À̵¿, ¿À¸¥ÂÊÀ¸·Î À̵¿)°¡ AbstractTextEditor¿¡ Á¤ÀÇµÈ ±×·ìÀÇ ÄÁÅØ½ºÆ® ¸Þ´º¿¡ Ç¥½ÃµË´Ï´Ù.
protected void editorContextMenuAboutToShow(IMenuManager menu) { super.editorContextMenuAboutToShow(menu); addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_RIGHT); addAction(menu, ITextEditorActionConstants.GROUP_EDIT, ITextEditorActionConstants.SHIFT_LEFT); }
´«±ÝÀÚÀÇ ÄÁÅØ½ºÆ® ¸Þ´º°¡ Ç¥½ÃµÇ±â Àü¿¡ °°Àº ¹æ¹ýÀ¸·Î ¸Þ¼Òµå rulerContextMenuAboutToShow°¡ »ç¿ëµË´Ï´Ù. AbstractTextEditor¿¡¼ ÀÌ ¸Þ¼ÒµåÀÇ ±¸ÇöÀº Ç׸ñÀÌ ¸Þ´º¿¡ Ãß°¡µÉ ¼ö ÀÖ´Â ±×·ìÀ» Á¤ÀÇÇÕ´Ï´Ù.
ÇØ´ç È®ÀåÀÇ ÀÌ·¯ÇÑ ¸Þ´º¿¡ ´Ù¸¥ Ç÷¯±×ÀÎÀ» Á¦°øÇÒ ¼ö ÀÖµµ·Ï ÆíÁý±â ÄÁÅØ½ºÆ® ¹× ´«±ÝÀÚ ÄÁÅØ½ºÆ® ¸Þ´º¿¡´Â ID¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸Þ´º ID¸¦ ¼³Á¤Çϱâ À§ÇÑ ¼³°è´Â Ç÷§ÆûÀÇ ¿ø·¡ ¹öÀü ÀÌÈÄ À¶Å뼺ÀÌ È®´ëµÇ¾ú½À´Ï´Ù. ±×·¯³ª ÇÁ·¹ÀÓ¿öÅ©´Â ¿ø·¡ ¹öÀü¿ëÀ¸·Î °³¹ßµÈ Ç÷¯±×Àΰú °è¼Ó ȣȯÇÒ ¼ö ÀÖµµ·Ï ȣȯ¼º ¸ðµå¿¡¼ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. AbstractTextEditor.setCompatibilityMode()¸¦ »ç¿ëÇÏ¿© ÀÌ ÀÛµ¿À» Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âº» ¼³Á¤Àº trueÀÔ´Ï´Ù.
ȣȯ¼º ¸ðµå°¡ trueÀÎ °æ¿ì ÆíÁý±â ¹× ´«±ÝÀÚ ÄÁÅØ½ºÆ® ¸Þ´ºÀÇ ID´Â AbstractTextEditor ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ¼³Á¤µÉ ¼ö ÀÖ½À´Ï´Ù. ¸Þ¼Òµå setEditorContextMenuId ¹× setRulerContextMenuId´Â ÀÌ·¯ÇÑ ¸ñÀû¿¡ ¸Â°Ô »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ¼öÆÛŬ·¡½º ¸Þ´º¿¡ Á¦°øµÈ ¸Þ´º°¡ °è½ÂµÇÁö ¾Ê°Ô ÇÏ·Á¸é ID¸¦ Àç¼³Á¤ÇÏ´Â °ÍÀÌ À¯¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¿¹Á¦ÀÇ JavaTextEditor´Â ´Ù¸¥ Ç÷¯±×ÀÎÀ¸·ÎºÎÅÍ ÀÏ¹Ý ÅØ½ºÆ® Áö½Ã¹®À» °è½ÂÇÏÁö ¾Êµµ·Ï ÇØ´ç ÄÁÅØ½ºÆ® ¸Þ´º ID°¡ Java ƯÁ¤ ID°¡ µÇµµ·Ï Àç¼³Á¤ÇÕ´Ï´Ù.
protected void initializeEditor() { super.initializeEditor(); JavaEditorEnvironment.connect(this); setSourceViewerConfiguration(new JavaSourceViewerConfiguration()); setEditorContextMenuId("#JavaEditorContext"); setRulerContextMenuId("#JavaRulerContext"); }
±¸Ã¼Àû °èÃþ ±¸Á¶¿¡ ID°¡ ¼³Á¤µÇÁö ¾ÊÀ¸¸é AbstractTextEditor ¿¡ Á¤ÀÇµÈ ±âº» ID°¡ »ç¿ëµË´Ï´Ù.
ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º ID´Â Ç×»ó <editor id>.EditorContext
À̸ç,
¿©±â¼ <editor id>
´Â ÆíÁý±â IDÀÔ´Ï´Ù. ÆíÁý±âÀÇ ID´Â ÆíÁý±âÀÇ xml ¼±¾ð¿¡¼ Á¤Àǵ˴ϴÙ.
´«±ÝÀÚ ÄÁÅØ½ºÆ® ¸Þ´º ID´Â
Ç×»ó <editor id>.RulerContext
ÀÔ´Ï´Ù.