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

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

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

    posts - 36, comments - 30, trackbacks - 0, articles - 3
    要在編輯器中支持復(fù)制,粘貼功能,首先,要在編輯器中選擇活動(dòng)節(jié)點(diǎn),Eclipse工作臺(tái)的菜單中復(fù)制,粘貼按鈕處于激活狀態(tài),要實(shí)現(xiàn)這功能,我們還必須做些配置,因?yàn)榫庉嬈鳑]有單獨(dú)的菜單欄,所有編輯器共享一個(gè)菜單欄,前面我們在定義編輯器擴(kuò)展點(diǎn)時(shí),有一個(gè)屬性contributorClass沒有指定值,它的值應(yīng)該是一個(gè)實(shí)現(xiàn)IEditorActionBarContributor接口的類的全名,只有指定這個(gè)屬性,菜單欄中的菜單項(xiàng)才能夠?qū)ξ覀冊诰庉嬈髦兴龅牟僮鬟M(jìn)行相應(yīng);
    首先,我們增加屬性contributorClass對應(yīng)的類:
    package com.example.workflow.actions;

    import org.eclipse.gef.ui.actions.ActionBarContributor;
    import org.eclipse.ui.actions.ActionFactory;

    public class WorkflowActionContributor extends ActionBarContributor {

        @Override
        
    protected void buildActions() {
            
        }

        
        @Override
        
    protected void declareGlobalActionKeys() {
            addGlobalActionKey(ActionFactory.COPY.getId());
            
        }
        

    }

    在declareGlobalActionKeys增加對復(fù)制命令的申明,同時(shí)把屬性contributorClass指定為這個(gè)類,包含全路徑。再定義復(fù)制動(dòng)作CopyAction,代碼如下:

    package com.example.workflow.actions;

    import org.eclipse.gef.ui.actions.SelectionAction;
    import org.eclipse.ui.IWorkbenchPart;
    import org.eclipse.ui.actions.ActionFactory;

    public class CopyAction extends SelectionAction{

        
    public CopyAction(IWorkbenchPart part) {
            
    super(part);
            setId(ActionFactory.COPY.getId());
        }


        @Override
        
    protected boolean calculateEnabled() {        
            
    return true;
        }


    }

     


    注意構(gòu)造函數(shù)中一定要把這個(gè)action的id設(shè)置為ActionFactory.COPY.getId(),和前面統(tǒng)一起來;

    到這兒還沒有結(jié)束,還必須在編輯器類中注冊這個(gè)action,覆蓋編輯器父類中的createActions()方法:

    protected void createActions() {
        
    super.createActions();

        CopyAction copyAction 
    = new CopyAction((IWorkbenchPart) this);
        getActionRegistry().registerAction(copyAction);
        getSelectionActions().add(copyAction.getId());
    }
    但是當(dāng)我們在復(fù)制按鈕可用情況,點(diǎn)擊之后,我們希望把我們選擇的對象,拷貝到剪切板上,這個(gè)在其他軟件中已經(jīng)成功實(shí)現(xiàn),但要是在我們開發(fā)的流程設(shè)計(jì)器中,要實(shí)現(xiàn)這個(gè)功能,我們還必須自己寫代碼來實(shí)現(xiàn),必須重寫CopyAction父類中的run方法,把我們選擇的對象放到剪切板上,代碼如下:
    public void run() {
        Clipboard.getDefault().setContents(
    super.getSelectedObjects());
    }

    這樣當(dāng)我們點(diǎn)復(fù)制按鈕之后,流程設(shè)計(jì)器就把我們選擇的內(nèi)容放到剪切板上,下一步要做的就是粘貼了。

    要使粘貼按鈕可用,所做的修改和復(fù)制類似,在類WorkflowActionContributor 的方法declareGlobalActionKeys中增加addGlobalActionKey(ActionFactory.PASTE.getId())

    增加PasteAction類,代碼如下:

    package com.example.workflow.actions;

    import org.eclipse.gef.ui.actions.Clipboard;
    import org.eclipse.gef.ui.actions.SelectionAction;
    import org.eclipse.ui.IWorkbenchPart;
    import org.eclipse.ui.actions.ActionFactory;

    public class PasteAction extends SelectionAction{

        
    public PasteAction(IWorkbenchPart part) {
            
    super(part);
            setId(ActionFactory.PASTE.getId());
        }


        @Override
        
    protected boolean calculateEnabled() {        
            
    if(Clipboard.getDefault().getContents()!=null){
                
    return true;
            }
    else{
                
    return false;
            }

        }


    }

    這里對Paste菜單的可用性作了判斷,只有當(dāng)剪切板中內(nèi)容不為空時(shí),粘貼按鈕才可用,否則為不可用狀
    態(tài)。
    另外還要在編輯器中對這個(gè)action進(jìn)行申明,
    PasteAction pasteAction = new PasteAction((IWorkbenchPart) this);
    getActionRegistry().registerAction(pasteAction);
    getSelectionActions().add(pasteAction.getId());
    到這里,當(dāng)我們在編輯器中選擇活動(dòng),選擇復(fù)制之后,粘貼按鈕可用,但點(diǎn)粘貼按鈕具體做什么,我們還沒有定義,要實(shí)現(xiàn)這個(gè)做什么功能,還必須覆蓋PasteAction父類中的run方法:
    public void run() {
            List list 
    = (List)Clipboard.getDefault().getContents();
            
    for(int i=0;i<list.size();i++){
                AbstractActivityEditPart part 
    = (AbstractActivityEditPart)list.get(i);
                AbstractActivity model 
    = (AbstractActivity)part.getModel();
                WorkflowProcess parent 
    = (WorkflowProcess)part.getParent().getModel();
                AbstractActivity clone 
    = new AbstractActivity();
                clone.setName(
    "CloneActivity");
                clone.setLocation(model.getLocation());
                clone.setSize(model.getSize());
                clone.setFigure(model.getFigure());
                parent.addChild(clone);
            }

        }

    這里只是做了一下簡單處理,更復(fù)雜的邏輯用戶可以根據(jù)自己應(yīng)用的需要,這里的run可以通過執(zhí)行一個(gè)命令,以支持撤銷,重做功能,原理就是這樣的,另外剪切功能和這類似,只是在復(fù)制基礎(chǔ)上多了個(gè)刪除操作。

    Feedback

    # re: 流程設(shè)計(jì)器開發(fā)十二(復(fù)制粘貼部分)  回復(fù)  更多評論   

    2008-01-20 08:34 by anone
    呵呵。LZ厲害,坐一下沙發(fā),支持。。。。
    主站蜘蛛池模板: 国产午夜亚洲精品不卡| 国产色无码精品视频免费| 中文字幕中韩乱码亚洲大片 | 91精品国产亚洲爽啪在线影院| 91精品免费在线观看| 国产成人综合久久精品亚洲| 亚洲午夜国产精品无码老牛影视 | 亚洲变态另类一区二区三区| 亚洲人妻av伦理| 免费视频爱爱太爽了| 免费国产va在线观看| 亚洲校园春色小说| 亚洲国产成人精品无码区二本 | 亚洲精品日韩中文字幕久久久| 国产无遮挡色视频免费视频| 久艹视频在线免费观看| 免费人成又黄又爽的视频在线电影| 亚洲视频精品在线| 亚洲视频一区二区| 最近2019中文免费字幕| 无码成A毛片免费| 尤物视频在线免费观看| 亚洲人成色7777在线观看不卡| 18禁黄网站禁片免费观看不卡| 免费人成再在线观看网站| 亚洲精品天堂在线观看| 亚洲爆乳无码专区| 免费成人午夜视频| 久久受www免费人成_看片中文| a级片免费观看视频| 美女被免费网站视频在线| 亚洲乱码一二三四区国产| 亚洲av无码国产精品色午夜字幕| 亚洲 综合 国产 欧洲 丝袜| 亚洲成在人线aⅴ免费毛片| 午夜影院免费观看| 97在线免费视频| 一区在线免费观看| 免费精品视频在线| 亚洲av永久中文无码精品| 亚洲一区动漫卡通在线播放|