ÆíÁý±â¿¡´Â ÆíÁý±â ÄÁÅÙÃ÷¿¡ ´ëÇÑ ±¸Á¶ÈµÈ º¸±â¸¦ Á¦°øÇÏ°í ÆíÁý±â ÄÁÅÙÃ÷ÀÇ Å½»öÀ» Áö¿øÇÏ´Â ÇØ´ç ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʰ¡ ÀÖ´Â °æ¿ì°¡ ¸¹½À´Ï´Ù.
Workbench´Â ÀÌ·± ¸ñÀûÀ¸·Î Ç¥ÁØ ¾Æ¿ô¶óÀÎ º¸±â¸¦ Á¦°øÇÕ´Ï´Ù. Workbench »ç¿ëÀڴ â >º¸±â Ç¥½Ã ¸Þ´º¸¦ »ç¿ëÇÏ¿© ÀÌ º¸±â¸¦ º¼ ¼ö ÀÖ´Â ½Ã±â¸¦ Á¦¾îÇÕ´Ï´Ù.
ÀÏ¹Ý TextEditor´Â ÅØ½ºÆ® ±¸Á¶¸¦ ¾ËÁö ¸øÇϱ⠶§¹®¿¡ Èï¹Ì·Î¿î ¾Æ¿ô¶óÀÎ º¸±â¿¡ ´ëÇÑ ÀÛµ¿À» Á¦°øÇÒ ¼ö ¾ø½À´Ï´Ù. µû¶ó¼ ¾Æ·¡ Ç¥½ÃµÈ ±âº» ¾Æ¿ô¶óÀÎ º¸±â´Â ¸¹Àº ¿ªÇÒÀ» ¼öÇàÇÏÁö ¸øÇÕ´Ï´Ù.
ÅØ½ºÆ® ÇÁ·¹ÀÓ¿öÅ©ÀÇ ÆíÁý±â´Â °íÀ¯ÇÑ ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ÆäÀÌÁö¸¦ ¾Æ¿ô¶óÀÎ º¸±â¿¡ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ÆíÁý±â ¾Æ¿ô¶óÀ̳ʴ Workbench°¡ IContentOutlinePage À¯Çü ¾î´ðÅ͸¦ ¿äûÇÒ ¶§ ÁöÁ¤µË´Ï´Ù.
public Object getAdapter(Class required) { if (IContentOutlinePage.class.equals(required)) { if (fOutlinePage == null) { fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this); if (getEditorInput() != null) fOutlinePage.setInput(getEditorInput()); } return fOutlinePage; } return super.getAdapter(required); }
ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀÌ³Ê ÆäÀÌÁö´Â IContentOutlinePage¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÀÎÅÍÆäÀ̽º´Â ¼±ÅûçÇ× º¯°æ ¸®½º³Ê(ISelectionProvider)¿¡ ¾Ë¸®´Â ±â´ÉÀ» º¸±â(IPage)ÀÇ ÆäÀÌÁö¿¡ ÀÛµ¿°ú °áÇÕÇÕ´Ï´Ù. ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳ʴ ÀϹÝÀûÀ¸·Î JFace Ç¥½Ã±â¸¦ »ç¿ëÇÏ¿© ±¸ÇöµË´Ï´Ù. ÄÁÅÙÃ÷ ¾Æ¿ô¶óÀ̳Ê(ContentOutlinePage)ÀÇ ±âº» ±¸ÇöÀº JFace Æ®¸® Ç¥½Ã±â¸¦ »ç¿ëÇÏ¿© ¾Æ¿ô¶óÀÎÀÇ °èÃþ ±¸Á¶ Ç¥½Ã¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÀÌ Ç¥½Ã´Â JavaContentOutlinePage¸¦ Æ÷ÇÔÇÏ¿© ´Ù¼öÀÇ ±¸Á¶ÈµÈ ¾Æ¿ô¶óÀ̳ʿ¡ ÀûÇÕÇÕ´Ï´Ù.
ÆäÀÌÁöÀÇ ±¸ÇöÀ» Á» ´õ ÀÚ¼¼È÷ »ìÆì º¾½Ã´Ù. À§ ½º´ÏÆê¿¡¼ ÆíÁý±â·Î ¾Æ¿ô¶óÀÎ ÆäÀÌÁö°¡ ÀÛ¼ºµÉ ¶§ ÇØ´ç ÀÔ·Â ¿ä¼Ò°¡ ÆíÁý±âÀÇ ÀÔ·Â ¿ä¼Ò·Î ¼³Á¤µË´Ï´Ù.
public void createControl(Composite parent) { super.createControl(parent); TreeViewer viewer= getTreeViewer(); viewer.setContentProvider(new ContentProvider()); viewer.setLabelProvider(new LabelProvider()); viewer.addSelectionChangedListener(this); if (fInput != null) viewer.setInput(fInput); }
Æ®¸® Ç¥½Ã±â ÀÛ¼ºÀº ContentOutlinePage¿¡¼ °è½ÂµË´Ï´Ù. Ç¥ÁØ ÄÁÅÙÃ÷ ¹× ·¹À̺í Á¦°ø¾÷ü°¡ »ç¿ëµË´Ï´Ù. ÆíÁý±â ÀÔ·ÂÀÌ ¼³Á¤(¶Ç´Â º¯°æ)µÉ ¶§¸¶´Ù JavaContentOutlinePage´Â ÆíÁý±â ÀԷ¿¡ ´ëÇÑ ¹®¼¸¦ ¾ò°í ÅØ½ºÆ®¸¦ ±¸¹® ºÐ¼®ÇÕ´Ï´Ù.
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { ... if (newInput != null) { IDocument document= fDocumentProvider.getDocument(newInput); if (document != null) { document.addPositionCategory(SEGMENTS); document.addPositionUpdater(fPositionUpdater); parse(document); } } }
ÅØ½ºÆ®´Â ¹®¼ ³»ÀÇ ¼¼±×¸ÕÆ®¶ó´Â ¹üÀ§·Î ±¸¹® ºÐ¼®µË´Ï´Ù. ÀÌ ¼¼±×¸ÕÆ®´Â ¾Æ¿ô¶óÀÎ º¸±â¿¡¼ Ç¥½ÃµË´Ï´Ù.
¼±ÅûçÇ×ÀÌ º¯°æµÇ¸é ¼±ÅÃµÈ ¼¼±×¸ÕÆ®°¡ °Ë»öµË´Ï´Ù. ÇØ´ç ¿ÀÇÁ¼ÂÀÌ ÆíÁý±âÀÇ °Á¶Ç¥½Ã ¹üÀ§¸¦ ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù.
public void selectionChanged(SelectionChangedEvent event) { super.selectionChanged(event); ISelection selection= event.getSelection(); if (selection.isEmpty()) fTextEditor.resetHighlightRange(); else { Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement(); int start= segment.position.getOffset(); int length= segment.position.getLength(); try { fTextEditor.setHighlightRange(start, length, true); } catch (IllegalArgumentException x) { fTextEditor.resetHighlightRange(); } } }