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

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

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

    很久很久以前

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

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

    ??????? EditPart并不直接進行編輯,它將操作委托給EditPolicy,每個EditPolicy專著于一種編輯任務或者一組相關的操作。當上面的API被調用后(除了performRequest方法),EditPart便委托給它的EditPolicy來處理這個request。對于不同的方法,EditPart可能是在第一個能處理request的policy處就停止調用了或者每個policy都有機會執行這個request。GEF提供了幾個默認的policy,不過還是需要實現其中的一些特定方法。

    ???????? 這里再廢話一點,在注冊相應的EditPolicy時,需要指定Role,這是一個字符串,用來標示這個EditPolicy,相同的Role對應的EditPolicy會被替換,例如子類可以通過Role這個Key來覆蓋其父類所安裝的EditPolicy。EditPolicy(Role)分成兩種類型,一種是圖形的,一種是非圖形的,上文中有提到,這里詳細的描述一下:
    Non-Graphical Roles:
    1) COMPONENT_ROLE: 一個Component存在于一個parent中,并且可以從parent中刪除。更為一般的,它可以使任何只涉及到這個EditPart,而與View無關的東西。(More generally, it is anything that involves only this EditPart.)
    2) CONNECTION_ROLE 這是ConnectionEditParts應該有的一個基本角色。Connections同Components有一點不同,刪除Connections時通常還需要其從其source和target節點中刪除,而不是從其parent中刪除。
    3) CONTAINER_ROLE 大部分擁有children的EditParts都應該具有這個角色。一個Container會涉及到adds/orphans以及creates/deletes等操作。
    4) NODE_ROLE 如果一個EditParts用戶Connection,則其應該具有這個角色,它可以用來創建,刪除,重新連接一個Connection。
    Graphical Roles:
    1) PRIMARY_DRAG_ROLE: 用來允許用戶拖動這個EditPart。用戶可以通過點擊這個EditPart然后拖動,或者點擊這個EditPart所創建的一個Handle來進行拖動。
    2) LAYOUT_ROLE: Layout角色用來放在一個Container的EditPart上,這個EditPart擁有一個graphical layout。如果這個layout有constraints,則它需要通過計算來得到這個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. 用于支持連接到重點的node,當創建、操作連接時,包含這個Role的Editpolicy會分析request的數據,來在圖形view上做“hit testing”,并且判斷這個connection的語義。
    4) CONNECTION_ENDPOINTS_ROLE: 這個Role允許用戶拖動一個ConnectionEditPart的端點。
    5) CONNECTION_BENDPOINTS_ROLE: 這個Role允許用戶能夠在一個Connection中間拖動和創建bendpoints。
    6) SELECTION_FEEDBACK_ROLE: 這個角色只是用來顯示feedback。當鼠標進入或者在一個EditPart上暫停時,Selection Tool會發送兩個類型的request給EditPart。安裝了這個角色的EditPart能夠在此時接受這些請求來改變view的樣子,或者彈出tip,label等。
    7) TREE_CONTAINER_ROLE: SWT Tree的Layout Role。 本地SWT Tree的Layout Role的等價物。這個EditPolicy應該在樹上顯示反饋并計算索引,就像在file explorer里拖拽一樣。
    over。

    posted on 2006-04-09 14:38 Long Long Ago 閱讀(763) 評論(0)  編輯  收藏 所屬分類: GEFEclipse
    主站蜘蛛池模板: 永久免费无码日韩视频| 四虎影视在线影院在线观看免费视频 | 亚洲精品国产成人| 色www永久免费网站| 69天堂人成无码麻豆免费视频| 免费一区二区三区四区五区| 综合偷自拍亚洲乱中文字幕 | 韩国亚洲伊人久久综合影院| 最近免费中文字幕4| 亚洲精品国产首次亮相| 狠狠久久永久免费观看| 国产亚洲福利精品一区| 亚洲第一综合天堂另类专| 日本一道在线日本一道高清不卡免费| 国产成人精品日本亚洲网站| 免费日本一区二区| 久久亚洲私人国产精品vA| 毛色毛片免费观看| 亚洲美女色在线欧洲美女| 久久免费视频一区| 国产真实伦在线视频免费观看| 国产在亚洲线视频观看| 搡女人真爽免费视频大全| 亚洲av综合av一区二区三区| 亚洲国产日韩在线观频| a毛片在线免费观看| 亚洲婷婷天堂在线综合| 野花香高清视频在线观看免费 | 84pao国产成视频免费播放| 亚洲人xxx日本人18| 午夜男人一级毛片免费| 亚洲成aⅴ人在线观看| 成年丰满熟妇午夜免费视频| 美女被爆羞羞网站在免费观看| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 色天使亚洲综合一区二区| 亚洲色欲色欲www在线丝| 国产男女爽爽爽爽爽免费视频| 亚洲国产精品99久久久久久| 久久久久亚洲爆乳少妇无| 69免费视频大片|