<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    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 閱讀(4576) 評論(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。
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲精品天堂成人片?V在线播放| 免费黄色福利视频| 国产成人精品免费视频软件| 亚洲国产日韩在线一区| 99re视频精品全部免费| 亚洲AV日韩精品久久久久久| 你好老叔电影观看免费| 国产亚洲A∨片在线观看| 成人网站免费看黄A站视频| 亚洲精品美女久久777777| 国内精品免费视频精选在线观看| 国产亚洲综合一区柠檬导航| 久久免费视频99| 亚洲欧洲在线播放| 最近最新的免费中文字幕| 亚洲国产成人精品无码区二本 | 久久精品国产亚洲精品2020| 99国产精品免费视频观看| 亚洲国产精品乱码在线观看97| 啦啦啦高清视频在线观看免费 | 国产成人免费在线| 亚洲日本乱码卡2卡3卡新区| 日韩免费视频网站| 国产成人高清精品免费观看| 久久久久久亚洲精品中文字幕| 免费观看美女用震蛋喷水的视频| 亚洲一卡2卡三卡4卡无卡下载| 亚洲成a人在线看天堂无码| 西西人体免费视频| 亚洲w码欧洲s码免费| 四虎永久精品免费观看| a视频在线观看免费| 亚洲三级视频在线观看| 亚洲国产V高清在线观看| 无码精品国产一区二区三区免费 | 亚洲精品网站在线观看你懂的| 青娱分类视频精品免费2| 黄色免费网址大全| 久久亚洲AV无码精品色午夜| 免费看国产一级片| 久久久久国产精品免费看|