Workbench µ¿½Ã¼º Áö¿ø

JFace UI ÇÁ·¹ÀÓ¿öÅ©°¡ ´ëÈ­ »óÀÚ¿¡ Ÿ½ºÅ© ÁøÇàÀ» Ç¥½ÃÇϱâ À§ÇÑ ±âº» Áö¿øÀ» Á¦°øÇÏ´Â °ÍÀ» »ìÆìº¸¾Ò½À´Ï´Ù(ÀÚ¼¼ÇÑ ³»¿ëÀº Àå±â ½ÇÇà Á¶ÀÛ ÂüÁ¶). µ¿½Ã¼º ÇϺα¸Á¶¿¡¼­ µ¿½Ã¼º ¹× Àå±â ½ÇÇà Á¶ÀÛ¿¡ ´ëÇÑ Ç÷§Æû ·±Å¸ÀÓ Áö¿øÀ» °ËÅäÇß½À´Ï´Ù. ÀÌÁ¦ Ç÷§Æû UI°¡ org.eclipse.ui.progress ÆÐŰÁö¿¡¼­ ÀÌ ÇϺα¸Á¶¸¦ Çâ»ó½ÃŰ´Â ¹æ¹ý¿¡ ´ëÇØ »ìÆìº¾´Ï´Ù. ÀÌ ÆÐŰÁö´Â Workbench¿¡ ÀÛ¾÷ ÁøÇàÀ» Ç¥½ÃÇÏ´Â UI¸¦ Á¦°øÇϰí UI ½º·¹µå¿¡¼­ ½ÇÇàÇÏ´Â ÀÛ¾÷¿¡ ´ëÇÑ Ãß°¡ Áö¿øÀ» Á¤ÀÇÇÕ´Ï´Ù.

»õ API¸¦ ¼Ò°³Çϱâ Àü¿¡ ÀϺΠ°³³äÀ» °ËÅäÇÏ´Â °ÍÀ¸·Î ½ÃÀÛÇÕ´Ï´Ù. ¸ÕÀú ¼­·Î ´Ù¸¥ Á¾·ùÀÇ ¹è°æ Á¶ÀÛÀ» ±¸ºÐÇØ¾ß ÇÕ´Ï´Ù.


¸î °¡Áö »çÇ×ÀÌ µ¿½Ã¿¡ ¹ß»ýÇÒ ¼ö Àִ ȯ°æÀ» °í·ÁÇÏ¸é »ç¿ëÀÚ´Â ´ÙÀ½À» ÇÊ¿ä·Î ÇÕ´Ï´Ù.

´ÙÀ½À¸·Î »õ API¸¦ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×À¸·Î À̵¿ÇÕ´Ï´Ù.

ÁøÇà ¼­ºñ½º

Workbench ÁøÇà ¼­ºñ½º(IProgressService)´Â Workbench ÁøÇà Áö¿ø¿¡ ´ëÇÑ 1Â÷ ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ÀÌ´Â Workbench¿¡¼­ È®º¸ÇÏ¿© ¹è°æ Á¶ÀÛ°ú UI ½º·¹µå¿¡¼­ ½ÇÇàÇÏ´Â Á¶ÀÛ¿¡ ´ëÇØ ÁøÇà º¸±â¸¦ Ç¥½ÃÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Å¬·¡½ºÀÇ ±âº» ¸ñÀûÀº ½ÇÇà ÁßÀÎ Á¶ÀÛ¿¡ ´ëÇÑ ¿ø½ºÅé ¼îÇÎ(one-stop shopping)À» Á¦°øÇÏ¿© Ç÷¯±×ÀÎ °³¹ßÀÚ°¡ ÇØ´ç »óȲ¿¡¼­ ÁøÇàÀ» Ç¥½ÃÇÏ´Â µ¥ »ç¿ëÇÒ ¸ÞÄ¿´ÏÁòÀ» °áÁ¤ÇÒ Çʿ䰡 ¾øµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. ´Ù¸¥ ÀåÁ¡Àº ÀÌ ¸Þ¼Òµå·Î Ç¥½ÃµÈ ÁøÇà ´ëÈ­ »óÀÚ°¡ ´Ù¸¥ »ç¿ëÀÚ¿¡ ÀÇÇØ Á¶ÀÛÀÌ Â÷´ÜµÇ´Â °æ¿ì¸¦ Ç¥½ÃÇϱâ À§ÇÑ Áö¿øÀ» Á¦°øÇϰí Ãæµ¹À» ÇØ°áÇÏ´Â »ç¿ëÀÚ Á¦¾î¸¦ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. °¡´ÉÇÑ °æ¿ì IProgressService#busyCursorWhileÀ» »ç¿ëÇÏ¿© Àå±â ½ÇÇà Á¶ÀÛÀÌ ½ÇÇàµÇ¾î¾ß ÇÕ´Ï´Ù.


   IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
   progressService.busyCursorWhile(new IRunnableWithProgress(){
      public void run(IProgressMonitor monitor) {
         //do non-UI work
      }
   });

Á¶ÀÛÀÌ ÁöÁ¤µÈ ½Ã°£ ÀÓ°è°ªº¸´Ù ¿À·¡ Áö¼ÓµÇ´Â °æ¿ì ÀÌ ¸Þ¼Òµå°¡ »ç¿ë ÁßÀÎ Ä¿¼­¸¦ ÁøÇà ´ëÈ­ »óÀÚ·Î ´ëüÇÕ´Ï´Ù. ÁøÇà ´ëÈ­ »óÀÚ »ç¿ë¿¡ ´ëÇÑ ÀÌ ¸Þ¼ÒµåÀÇ ÀåÁ¡Àº Á¶ÀÛÀÌ Âª°Ô ½ÇÇàµÇ´Â °æ¿ì ÁøÇà ´ëÈ­ »óÀÚ°¡ Ç¥½ÃµÇÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù. Á¶ÀÛÀÌ UI¸¦ °»½ÅÇØ¾ß ÇÏ´Â °æ¿ì Ç×»ó Display.asyncExec ¶Ç´Â Display.syncExec¸¦ °Ô½ÃÇÏ¿© UI¸¦ ¼öÁ¤ÇÏ´Â Äڵ带 ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. UI ½º·¹µå¿¡¼­ Á¶ÀÛÀÌ ¿ÏÀüÈ÷ ½ÇÇàµÇ¾î¾ß ÇÏ´Â °æ¿ì IProgressService#runInUI¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ¸Þ¼ÒµåÀÇ ÀåÁ¡Àº Á¶ÀÛÀÌ Â÷´ÜµÇ´Â °æ¿ì ÁøÇà ´ëÈ­ »óÀÚ¸¦ Ç¥½ÃÇÏ°í »ç¿ëÀÚ Á¦¾î¸¦ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.


   progressService.runInUI(
      PlatformUI.getWorkbench().getProgressService(),
      new IRunnableWithProgress() {
         public void run(IProgressMonitor monitor) {
            //do UI work
         }
      },
      Platform.getWorkspace().getRoot());
 

¼¼ ¹øÂ° ¸Å°³º¯¼ö´Â ³Î(null)À̰ųª Á¶ÀÛÀÇ ½ºÄÉÁÙ¸µ ±ÔÄ¢ÀÏ ¼ö ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì ÀÌ UI Á¶ÀÛÀÌ ½ÇÇàÇÏ´Â µ¿¾È ÀÛ¾÷°ø°£À» Àá±×´Â ÀÛ¾÷°ø°£ ·çÆ®¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

ÁøÇà º¸±â¿¡¼­ ½ÇÇà ÁßÀÎ ÀÛ¾÷ ¿·¿¡ ¾ÆÀÌÄÜÀ» Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï ÁøÇà ¼­ºñ½º¸¦ »ç¿ëÇÏ¿© ÀÛ¾÷±º¿¡ ´ëÇÑ ¾ÆÀÌÄÜÀ» µî·ÏÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ÀÚµ¿ ºôµå°¡ ÀÌ ¾ÆÀÌÄܰú ¿¬°üµÇ´Â ¹æ¹ý¿¡ ´ëÇÑ ¿¹Á¦ÀÔ´Ï´Ù.


   IProgressService service = PlatformUI.getWorkbench().getProgressService();
   ImageDescriptor newImage = IDEInternalWorkbenchImages.getImageDescriptor(
      IDEInternalWorkbenchImages.IMG_ETOOL_BUILD_EXEC);
   service.registerIconForFamily(newImage, ResourcesPlugin.FAMILY_MANUAL_BUILD);
   service.registerIconForFamily(newImage, ResourcesPlugin.FAMILY_AUTO_BUILD);

ºÎºÐÀÌ »ç¿ë ÁßÀÓÀ» Ç¥½Ã

IWorkbenchSiteProgressService´Â ÀÛ¾÷ÀÌ ½ÇÇàµÇ´Â µ¿¾È Workbench ºÎºÐÀÇ ¸ð¾çÀ» º¯°æÇÏ´Â ½ºÄÉÁÙ¸µ ÀÛ¾÷¿¡ ´ëÇØ API¸¦ Ãß°¡ÇÕ´Ï´Ù. Ç÷¯±×ÀÎÀÌ ºÎºÐÀÇ »óÅ¿¡ ¿µÇâÀ» ÁÖ´Â ¹è°æ Á¶ÀÛÀ» ½ÇÇàÇÏ´Â °æ¿ì, ºÎºÐÀ» ÅëÇØ ÀÛ¾÷À» ½ºÄÉÁÙÇÒ ¼ö ÀÖÀ¸¸ç »ç¿ëÀÚ´Â ºÎºÐÀÌ »ç¿ë ÁßÀ̶ó´Â Çǵå¹éÀ» ¹Þ°Ô µË´Ï´Ù. ´ÙÀ½Àº Ư¼º º¸±âÀÇ ¿¹Á¦ÀÔ´Ï´Ù.


   IWorkbenchSiteProgressService siteService =
      (IWorkbenchSiteProgressService)view.getSite().getAdapter(IWorkbenchSiteProgressService.class);
   siteService.schedule(job, 0 /* now */, true /* use half-busy cursor in part */);

ÀÛ¾÷ÀÇ ÁøÇà Æ¯¼º

IProgressConstants ¿¡ »çÀüÁ¤ÀÇµÈ Æ¯¼º ¼¼Æ®°¡ À־ ÀÛ¾÷ÀÌ ÁøÇà º¸±â¿¡ Ç¥½ÃµÇ´Â ¹æ¹ýÀ» Á¦¾îÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ÁøÇà º¸±â°¡ ¿Ï·áµÈ ÈÄ º¸±â¿¡ (IProgressConstants#KEEP_PROPERTY) ÀÛ¾÷À» À¯ÁöÇϰųª Çѹø¿¡ ÇϳªÀÇ (IProgressConstants#KEEPONE_PROPERTY) ÀÛ¾÷À» º¸±â¿¡ À¯ÁöÇϵµ·Ï Áö½ÃÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¶Ä¡¸¦ (IProgressConstants#ACTION_PROPERTY) ÀÛ¾÷°ú ¿¬°ü½Ãų ¼öµµ ÀÖ½À´Ï´Ù. ÀÛ¾÷¿¡ ¿¬°üµÈ Á¶Ä¡°¡ ÀÖÀ¸¸é »ç¿ëÀÚ°¡ Á¶Ä¡¸¦ ½ÇÇàÇÒ ¼ö ÀÖµµ·Ï ÁøÇà º¸±â´Â ÇÏÀÌÆÛ¸µÅ©¸¦ Ç¥½ÃÇÕ´Ï´Ù. »ç¿ëÀÚ ÀÛ¾÷ÀÌ ÁøÇà ´ëÈ­ »óÀÚ¿¡ Ç¥½ÃµÇ´ÂÁö ã¾Æ³¾ ¼öµµ ÀÖ½À´Ï´Ù(IProgressConstants#PROPERTY_IN_DIALOG). Á¶Ä¡°¡ »ç¿ë °¡´ÉÇÑ ½Ã±â¿¡ ´ëÇÑ ÈùÆ®°¡ »óÅ ǥ½ÃÁÙ ¿À¸¥ÂÊ ¸Ç¾Æ·¡¿¡ Á¦°øµË´Ï´Ù. ´ÙÀ½Àº ÀÌ Æ¯¼ºÀ» »ç¿ëÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.


   Job job = new Job("Do Work") {
      public IStatus run(IProgressMonitor monitor) {
         // do some work then only keep the finished job in the progress view if
         // not running in the progress dialog
         Boolean inDialog = (Boolean)getProperty(IProgressConstants.PROPERTY_IN_DIALOG);
         if(!inDialog.booleanValue())
            setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
      }
   };
   job.setProperty(IProgressConstants.ICON_PROPERTY, Plugin.getImageDescriptor(WORK_IMAGE));
   IAction gotoAction = new Action("Results") {
public void run() {
         // show the results
      }
   };
   job.setProperty(IProgressConstants.ACTION_PROPERTY, gotoAction);
   job.setUser(true);
   job.schedule();

Workbench ÀÛ¾÷

°¡´ÉÇÑ °æ¿ì UI ½º·¹µå ¹Û¿¡¼­ Àå±â ½ÇÇà Á¶ÀÛÀ» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù. ±×·¯³ª Á¶ÀÛÀÇ ¸ñÀûÀÌ UI¸¦ °»½ÅÇÏ´Â °ÍÀ̸é ÀÌ »óȲÀ» Ç×»ó ÇÇÇÒ ¼ö ¾ø½À´Ï´Ù. SWT ½º·¹µù ¹®Á¦¿¡¼­´Â SWT Ç¥½Ã¸¦ »ç¿ëÇÏ¿© ¿Ï·áÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. Workbench¿¡¼­´Â ½ÇÇà ¸Þ¼Òµå°¡ SWT asyncExec¿¡¼­ ½ÇÇàµÇ´Â Ư¼ö ÀÛ¾÷ UIJob¿¡ ´ëÇØ Á¤ÀÇÇÕ´Ï´Ù. UIJobÀÇ ¼­ºêŬ·¡½º´Â run ¸Þ¼Òµå ´ë½Å runInUIThread ¸Þ¼Òµå¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

WorkbenchJobÀº Workbench°¡ ½ÇÇàµÉ ¶§¸¸ ÀÛ¾÷À» ½ºÄÉÁÙÇϰųª ½ÇÇàÇϵµ·Ï UIJobÀ» È®ÀåÇÕ´Ï´Ù. UI ÀÛ¾÷ÀÇ Áö¼Ó±â°£ µ¿¾È UI°¡ »õ·Î °íÃÄÁöÁö ¾ÊÀ¸¹Ç·Î Ç×»ó UI ½º·¹µå¿¡¼­ °úµµÇÑ ÀÛ¾÷À» ÇÇÇØ¾ß ÇÕ´Ï´Ù.

¹ýÀû ÁÖÀÇ»çÇ×.