Workbench µ¿½Ã¼º Áö¿ø

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

ù ¹øÂ°, ½ÇÇà ÁßÀÏ ¼ö ÀÖ´Â ¿©·¯ °¡Áö Á¾·ùÀÇ ¹è°æ Á¶ÀÛ ¹× À̵éÀÌ Workbench UI¿¡ Ç¥½ÃµÇ´Â ¹æ¹ýÀ» ãÀ¸½Ê½Ã¿À.


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

ÁøÇà ¼­ºñ½º

Workbench ÁøÇà ¼­ºñ½º(IProgressService)´Â Workbench ÁøÇà Áö¿ø¿¡ ´ëÇÑ ±âº» ÀÎÅÍÆäÀ̽ºÀÔ´Ï´Ù. ÀÌ´Â 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 the half-busy cursor in the part */);

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

Workbench°¡ 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.  
         // Keep the finished job in the progress view only if it is 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¸¦ °»½ÅÇÏ´Â °ÍÀÏ °æ¿ì UI ½º·¹µå¿¡¼­ ¼öÇàµÇ¾î¾ß ÇÕ´Ï´Ù. SWT ½º·¹µù ¹®Á¦¿¡¼­´Â SWT Display¸¦ »ç¿ëÇÏ¿© ¿Ï·áÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. Workbench¿¡¼­´Â ½ÇÇà ¸Þ¼Òµå°¡ SWT asyncExec¿¡¼­ ½ÇÇàµÇ´Â Ư¼ö ÀÛ¾÷ UIJob¿¡ ´ëÇØ Á¤ÀÇÇÕ´Ï´Ù. UIJobÀÇ ¼­ºêŬ·¡½º´Â run ¸Þ¼Òµå ´ë½Å runInUIThread ¸Þ¼Òµå¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù.

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