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

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

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

    很久很久以前

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      34 隨筆 :: 4 文章 :: 17 評(píng)論 :: 0 Trackbacks
    上文提到的GEF工作過(guò)程中還有一些不太詳細(xì)的地方,這里做些補(bǔ)充。
    再GEF中UI的操作交互都是通過(guò)構(gòu)建Request,并調(diào)用EditPart中的API來(lái)完成相應(yīng)的操作,這些API可以分為四類(lèi):
    1。??EditPart getTargetEditPart(Request)
    ???boolean understandsRequest(Request)
    再我們進(jìn)行交互操作時(shí),首先要確定激活的是那個(gè)EditPart,經(jīng)常是一個(gè)當(dāng)前被選中的viewer和通過(guò)單擊選擇的EditPart的復(fù)合體。這個(gè)被選擇的部件通過(guò)詢(xún)問(wèn)每個(gè)被選擇的EditPart是否處理這個(gè)request(通過(guò)understandsRequest方法)。那個(gè)在鼠標(biāo)單擊確定的EditPart是通過(guò)viewer的幫助和getTargetEditPart方法來(lái)找到的。并不是所有的交互都有target。
    2。
    void showSourceFeedback(Request)
    void eraseSourceFeedback(Request)
    void showTargetFeedback(Request)
    void eraseTargetFeedback(Request)

    在我們的交互操作特別是托拽圖形時(shí),就需要EditPart來(lái)回顯(Feedback),托拽源被認(rèn)為是起作用的那個(gè)editpart,目的部件被認(rèn)為是鼠標(biāo)的目的地。showXXXFeedback可能是在鼠標(biāo)移到目的地,但未作用于目的part時(shí)調(diào)用,eraseXXXFeedback則可能是在鼠標(biāo)作用于目的part后調(diào)用的。
    3。Command getCommand(Request)
    這個(gè)方法用于獲得可執(zhí)行的命令列表,命令可以對(duì)模型進(jìn)行操作,Editpart通過(guò)request詢(xún)問(wèn)Editpolicy來(lái)獲得相應(yīng)的command列表。同時(shí)command也可以判斷這個(gè)交互操作是否時(shí)可能的。如果沒(méi)有command或者command不能執(zhí)行,則ui會(huì)指出這個(gè)操作是不能執(zhí)行的(鼠標(biāo)變成禁止操作的樣子)。如果一個(gè)editpart返回null作為command則它不會(huì)阻止這個(gè)交互操作,除非沒(méi)有一個(gè)command被提供。為了指示某個(gè)操作是不能執(zhí)行的則EditPart需要返回一個(gè)不能執(zhí)行的command。
    4。void performRequest(Request)
    還有一種API,它讓EditPart去do something,可能是一些并不會(huì)立即就改變model的改變,比如打開(kāi)對(duì)話框或者激活直接編輯模式。

    ??????? EditPart并不直接進(jìn)行編輯,它將操作委托給EditPolicy,每個(gè)EditPolicy專(zhuān)著于一種編輯任務(wù)或者一組相關(guān)的操作。當(dāng)上面的API被調(diào)用后(除了performRequest方法),EditPart便委托給它的EditPolicy來(lái)處理這個(gè)request。對(duì)于不同的方法,EditPart可能是在第一個(gè)能處理request的policy處就停止調(diào)用了或者每個(gè)policy都有機(jī)會(huì)執(zhí)行這個(gè)request。GEF提供了幾個(gè)默認(rèn)的policy,不過(guò)還是需要實(shí)現(xiàn)其中的一些特定方法。

    ???????? 這里再?gòu)U話一點(diǎn),在注冊(cè)相應(yīng)的EditPolicy時(shí),需要指定Role,這是一個(gè)字符串,用來(lái)標(biāo)示這個(gè)EditPolicy,相同的Role對(duì)應(yīng)的EditPolicy會(huì)被替換,例如子類(lèi)可以通過(guò)Role這個(gè)Key來(lái)覆蓋其父類(lèi)所安裝的EditPolicy。EditPolicy(Role)分成兩種類(lèi)型,一種是圖形的,一種是非圖形的,上文中有提到,這里詳細(xì)的描述一下:
    Non-Graphical Roles:
    1) COMPONENT_ROLE: 一個(gè)Component存在于一個(gè)parent中,并且可以從parent中刪除。更為一般的,它可以使任何只涉及到這個(gè)EditPart,而與View無(wú)關(guān)的東西。(More generally, it is anything that involves only this EditPart.)
    2) CONNECTION_ROLE 這是ConnectionEditParts應(yīng)該有的一個(gè)基本角色。Connections同Components有一點(diǎn)不同,刪除Connections時(shí)通常還需要其從其source和target節(jié)點(diǎn)中刪除,而不是從其parent中刪除。
    3) CONTAINER_ROLE 大部分擁有children的EditParts都應(yīng)該具有這個(gè)角色。一個(gè)Container會(huì)涉及到adds/orphans以及creates/deletes等操作。
    4) NODE_ROLE 如果一個(gè)EditParts用戶(hù)Connection,則其應(yīng)該具有這個(gè)角色,它可以用來(lái)創(chuàng)建,刪除,重新連接一個(gè)Connection。
    Graphical Roles:
    1) PRIMARY_DRAG_ROLE: 用來(lái)允許用戶(hù)拖動(dòng)這個(gè)EditPart。用戶(hù)可以通過(guò)點(diǎn)擊這個(gè)EditPart然后拖動(dòng),或者點(diǎn)擊這個(gè)EditPart所創(chuàng)建的一個(gè)Handle來(lái)進(jìn)行拖動(dòng)。
    2) LAYOUT_ROLE: Layout角色用來(lái)放在一個(gè)Container的EditPart上,這個(gè)EditPart擁有一個(gè)graphical layout。如果這個(gè)layout有constraints,則它需要通過(guò)計(jì)算來(lái)得到這個(gè)constraints。
    3) GRAPHICAL_NODE_ROLE: A node supports connections to terminals. When creating and manipulating connections, EditPolicies with this role might analyze a Request's data to perform "hit testing" on the graphical view and determine the semantics of the connection. 用于支持連接到重點(diǎn)的node,當(dāng)創(chuàng)建、操作連接時(shí),包含這個(gè)Role的Editpolicy會(huì)分析request的數(shù)據(jù),來(lái)在圖形view上做“hit testing”,并且判斷這個(gè)connection的語(yǔ)義。
    4) CONNECTION_ENDPOINTS_ROLE: 這個(gè)Role允許用戶(hù)拖動(dòng)一個(gè)ConnectionEditPart的端點(diǎn)。
    5) CONNECTION_BENDPOINTS_ROLE: 這個(gè)Role允許用戶(hù)能夠在一個(gè)Connection中間拖動(dòng)和創(chuàng)建bendpoints。
    6) SELECTION_FEEDBACK_ROLE: 這個(gè)角色只是用來(lái)顯示feedback。當(dāng)鼠標(biāo)進(jìn)入或者在一個(gè)EditPart上暫停時(shí),Selection Tool會(huì)發(fā)送兩個(gè)類(lèi)型的request給EditPart。安裝了這個(gè)角色的EditPart能夠在此時(shí)接受這些請(qǐng)求來(lái)改變view的樣子,或者彈出tip,label等。
    7) TREE_CONTAINER_ROLE: SWT Tree的Layout Role。 本地SWT Tree的Layout Role的等價(jià)物。這個(gè)EditPolicy應(yīng)該在樹(shù)上顯示反饋并計(jì)算索引,就像在file explorer里拖拽一樣。
    over。

    posted on 2006-04-09 14:38 Long Long Ago 閱讀(758) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): GEFEclipse
    主站蜘蛛池模板: free哆拍拍免费永久视频| 久久精品人成免费| 亚洲另类激情综合偷自拍图| 99久久国产精品免费一区二区 | 亚洲愉拍99热成人精品热久久 | 亚洲欧洲成人精品香蕉网| **毛片免费观看久久精品| 色偷偷亚洲第一综合| 久久亚洲成a人片| 日本免费无遮挡吸乳视频电影| 成av免费大片黄在线观看| 欧洲 亚洲 国产图片综合| 国产精品亚洲二区在线观看| 国产精品成人观看视频免费| 久久久久久久久久久免费精品| 亚洲中文无码线在线观看| 中文字幕人成人乱码亚洲电影| 妻子5免费完整高清电视| 国产人成网在线播放VA免费| 亚洲人成免费电影| 亚洲香蕉网久久综合影视| 午夜dj免费在线观看| 久久久久久国产精品免费无码| 无码免费又爽又高潮喷水的视频 | 男的把j放进女人下面视频免费| 亚洲av午夜电影在线观看| 99久久精品国产亚洲| 中文字幕久久亚洲一区| 高清国语自产拍免费视频国产| 69精品免费视频| 在线免费播放一级毛片| 免费视频精品一区二区| 亚洲精品无码专区| 亚洲欧洲国产经精品香蕉网| 国产成人麻豆亚洲综合无码精品| 永久黄网站色视频免费| 性xxxxx免费视频播放| 麻豆成人久久精品二区三区免费| 国产福利免费视频| 免费人成视频在线播放| 精品韩国亚洲av无码不卡区|