精彩的人生

          好好工作,好好生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
          在做的項目里,需要一個這樣的顯示效果.
          以前從來沒有做過,也不知道該用什么關鍵字來搜索.
          于是,只好用最原始的辦法,看Eclipse的源代碼.最后一些跟decorator相關的類引起了我的注意,還發現有一個相關的LabelProvider.于是我用這個詞作為關鍵字搜索到了下面這篇文章,覺得十分有用,所以暫存到這里.


          原文標題: org.eclipse.ui.decorators得用法

          <extension point="org.eclipse.ui.decorators">
              
          <decorator icon="icons/warning_small.gif" id="cnooc.rcp.decorator.node.warning" label="Data Warning Decorator" lightweight="true" location="BOTTOM_LEFT" state="true">
                  
          <enablement>
                      
          <and>
                          
          <objectClass "com.eplat.cnooc.rcp.node.INode"/>
                          
          <objectState name="hasWarning" value="true"/>
                      
          </and>
                  
          </enablement>
              
          </decorator>
              
          <decorator icon="icons/error_small.gif" id="cnooc.rcp.decorator.node.error" label="Data Error Decorator" lightweight="true" location="BOTTOM_LEFT" state="true">
                  
          <enablement>
                      
          <and>
                          
          <objectClass "com.eplat.cnooc.rcp.node.INode"/>
                          
          <objectState name="hasError" value="true"/>
                      
          </and>
                  
          </enablement>
              
          </decorator>
          </extension>

          INode是TreeViewer里面節點得對象.
          Viewer設置LabelProvider時需要如下:

          viewer.setLabelProvider(new DecoratingLabelProvider(new ViewLabelProvider(),
                  Activator.getDefault().getWorkbench().getDecoratorManager().getLabelDecorator()));

          寫了這個以后還沒完, 需要讓INode實現IActionFilter接口. eclipse得API中說要么實現IActionFilter接口, 要么實現IAdapter接口, 如果實現后者得話, 系統會調用getAdapter()方法. 不過我還是選擇前者.

              /**
               * (non-Javadoc)
               * 
               * 
          @see org.eclipse.ui.IActionFilter#testAttribute(java.lang.Object, java.lang.String,java.lang.String)
               
          */

              
          public boolean testAttribute(Object target, String name, String value){
                  
          if (name.equals("hasWarning")){
                      
          return !getProblems().hasError() && getProblems().hasWarning();
                  }
           else if (name.equals("hasError")){
                      
          return getProblems().hasError();
                  }

                  
          return false;
              }

          意思應該比較明顯得, 如果有warning并且沒有error得時候warning得decorator生效. 如果有error則error得decorator生效. name參數對應得就是objectState得name參數. value參數對應得objectState得value參數. target參數就是viewer中得節點對象, 不過由于INode實現了IActionFilter接口, 因此這里得target就是this了.
          一般來說需要判斷得就是根據name獲取得值是否等于value, 等于返回true, 否則返回false. 不過這里我不需要判斷這個了, 直接根據當前狀態返回就好了.
          按照eclipse得原理, 理論上應該INode變化以后viewer就會跟著變化, 但是我實驗下來有時候好有時候不好.
          因此在Editor得verify方法里增加了下面得邏輯:

              /**
               * 校驗數據
               * 
               * 
          @return
               
          */

              
          private boolean verify(){
                  
          //校驗數據
                  
          //不管是否有error或者warning都需要通知向導樹刷新一下節點.
                  ExplorerView view = (ExplorerView) getSite().getPage().findView(ExplorerView.class.getName());
                  view.refresh((INode) getEditorInput());

                  
          return true;
              }

          現在好了, 只要執行verify方法, viewer就會刷新對應得節點, 以達到顯示左下方小圖標得目的.


          原文地址: http://blog.csdn.net/bradwoo8621/archive/2007/05/11/1604738.aspx








          posted on 2008-03-25 15:00 hopeshared 閱讀(4578) 評論(2)  編輯  收藏 所屬分類: Eclipse

          Feedback

          # re: 如何讓Eclipse View中的TreeItem顯示出error時的小紅叉和warn時的感嘆號? 2009-02-27 22:17 智商250網
          0【智商250】http://www.iq250.com
          0【生活大家壇】http://bbs.iq250.com   回復  更多評論
            

          # re: 如何讓Eclipse View中的TreeItem顯示出error時的小紅叉和warn時的感嘆號? 2012-10-29 10:55 小段
          請問大俠:
          testAttribute方法里getProblems()是哪里的方法哦?求指導,求demo。
            回復  更多評論
            

          主站蜘蛛池模板: 平塘县| 邳州市| 阿坝| 泸州市| 浦城县| 皋兰县| 习水县| 高碑店市| 阳西县| 台中县| 霍州市| 汶上县| 获嘉县| 定日县| 赤水市| 通山县| 九江县| 塘沽区| 杂多县| 海南省| 盈江县| 杨浦区| 图木舒克市| 太康县| 深州市| 博客| 龙岩市| 德庆县| 崇礼县| 汝城县| 托克逊县| 合江县| 凤翔县| 马关县| 崇礼县| 成安县| 子洲县| 营山县| 清涧县| 富宁县| 德格县|