ÆíÁý±â Á¶Ä¡ µî·Ï

¹®¼­ ÆíÁý±â ÇÁ·¹ÀÓ¿öÅ©´Â ÅØ½ºÆ® ¹× ¼Ò½º Äڵ带 Á¦½ÃÇÏ°í °»½ÅÇÏ´Â µ¥ µµ¿òÀÌ µÇ´Â ¿©·¯ °¡Áö À¯Æ¿¸®Æ¼ Ŭ·¡½º¸¦ Á¦°øÇÕ´Ï´Ù.  ÀÌÁ¦ºÎÅÍ ÆíÁý±â°¡ ´ÜÁö ÇϳªÀÇ ÆÄÆ®ÀÎ 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 ¿¹Á¦ÀÇ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʿ¡ Áö½ÃµÈ ´ë·Î °­Á¶µÈ ¹üÀ§¸¦ Ç¥½ÃÇϰí Àüü ÆÄÀÏÀ» Ç¥½ÃÇÏ´Â »çÀÌ¿¡¼­ ÆíÁý±â »óŸ¦ Åä±ÛÇÕ´Ï´Ù.   ÀÌ Á¶Ä¡´Â µµ±¸ ¸ðÀ½¿¡¼­¸¸ ³ªÅ¸³³´Ï´Ù.

ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º

ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º°¡ AbstractTextEditor ¹× TextEditor ÇÁ·¹ÀÓ¿öÅ©¿¡¼­ ÀÛ¼ºµÇ°í °ü¸®µË´Ï´Ù.

Á¶Ä¡¸¦ ÆíÁý±â¿¡ µî·ÏÇÏ´Â µ¥ ¸Þ¼Òµå 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¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.  ¸Þ´º ID¸¦ ¼³Á¤Çϱâ À§ÇÑ ¼³°è´Â Ç÷§ÆûÀÇ ¿ø·¡ ¹öÀü ÀÌÈÄ À¶Å뼺ÀÌ È®´ëµÇ¾ú½À´Ï´Ù.  ±×·¯³ª ÇÁ·¹ÀÓ¿öÅ©´Â ¿ø·¡ ¹öÀü¿ëÀ¸·Î °³¹ßµÈ Ç÷¯±×Àΰú °è¼Ó ȣȯÇÒ ¼ö ÀÖµµ·Ï ȣȯ¼º ¸ðµå¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.  AbstractTextEditor.setCompatibilityMode()¸¦ »ç¿ëÇÏ¿© ÀÌ ÀÛµ¿À» Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù.   ±âº» ¼³Á¤Àº trueÀÔ´Ï´Ù.

1.0 ȣȯ °¡´ÉÇÑ ¸Þ´º ID

ȣȯ¼º ¸ðµå°¡ 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°¡ »ç¿ëµË´Ï´Ù.

1.0 ȣȯ ºÒ°¡´ÉÇÑ ¸Þ´º ID

ÆíÁý±â ÄÁÅØ½ºÆ® ¸Þ´º ID´Â Ç×»ó <editor id>.EditorContextÀ̸ç, ¿©±â¼­ <editor id>´Â ÆíÁý±â IDÀÔ´Ï´Ù. ÆíÁý±âÀÇ ID´Â ÆíÁý±âÀÇ xml ¼±¾ð¿¡¼­ Á¤Àǵ˴ϴÙ. ´«±ÝÀÚ ÄÁÅØ½ºÆ® ¸Þ´º ID´Â Ç×»ó <editor id>.RulerContextÀÔ´Ï´Ù.

Copyright IBM Corporation and others 2000, 2003.