锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
棣栧厛瑕佸湪妯″瀷涓婃敮鎸侊紝鑳藉淇濆瓨榪炴帴鐨勪俊鎭傚浜庝笉鍚岀殑欏圭洰鏈変笉鍚岀殑瑕佹眰銆傛垜浠氳繃涓や釜渚嬪瓙灝卞彲浠ョ湅鍑鴻繖涓鐐規潵銆?/font>
1銆?/font>http://www13.plala.or.jp/observe/GEF/紺轟緥涓殑GEF6.zip 錛堜笅闈㈢О榪欎釜渚嬪瓙涓?/font>HelloWold錛?/font>
榪愯鐨勭粨鏋滃叆涓嬪浘鎵紺猴細
瀹冪殑妯″瀷鍙互浣跨敤濡備笅鐨勭被鍥炬潵琛ㄧず錛?/font>
鐢ㄦ潵鎻忚堪Connection鐨勫垎鍒槸LineConnectionModel鍜?/font>ArrowConnectionModel榪欎袱涓被銆傝繖涓や釜綾葷殑鐖剁被鍜屽浘褰㈡ā鍨嬶紙HellowModel錛夌浉鍏熾?/font>
2銆?/font>IBM綰㈢毊涔︿腑鐨?/font>GEF鑼冧緥(涓嬮潰縐拌繖涓緥瀛愪負workflow)
榪愯鏁堟灉濡備笅鍥撅細
浠栫殑妯″瀷鍙敤涓嬮潰鐨勭被鍥炬弿榪幫細
鍏跺疄榪炴帴鐨勬ā鍨嬪簲璇ュ緢綆鍗曪紝浠栧彧瑕佽兘淇濆瓨浠栫殑涓ょ鐨勫璞″氨濂戒簡銆傚浘褰㈡ā鍨嬶紙濡?/font>HelloWold涓殑HelloModel錛夎兘澶熶繚鎸佷笌浠栫浉鍏寵繛鐨勮繛鎺ワ紙HelloWold涓殑LineConnectionModel鎴?/font>ArrowConnectionModel錛夈?/font>
鐪嬪畬浜?/font>Model錛屾垜浠笅闈㈠氨鍙互鐪嬬湅EditPart閮ㄥ垎浜嗐?/font>
瑕佺湅EditPart褰撶劧鏄鐪嬫渶鍏抽敭鐨勪簡銆備篃灝辨槸鍜岃繛鎺ョ洿鎺ュ叧鑱旂殑EditPart浜嗐傚垎鍒療鐪嬩簡鍜岃繛鎺ョ浉鍏崇殑EditPart錛屽彂鐜頒粬浠兘浼氬疄鐜頒竴涓彨org.eclipse.gef.NodeEditPart鐨勬帴鍙c傚涓嬪浘鎵紺猴細
鍦?/font>nodeEditPart涓湁鍥涗釜鏂規硶闇瑕佸疄鐜般傞氳繃榪欎釜鍥涗釜鏂規硶鐨勫悕瀛楀氨鍙互鐪嬪嚭浠栦滑鍜?/font>Anchor2瀵嗗垏鐩稿叧銆備笅闈㈠氨鏉ョ湅鐪嬭繖鍑犱釜鏂規硶鐨勫叿浣撳姛鑳斤細
ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection);
褰撻渶瑕佺敾榪炴帴鐨勬椂鍊欙紝閫氳繃榪欎釜鏂規硶鑾峰彇榪炴帴鐨勬簮閿氱偣銆備笉綆¤繖涓敋鐐瑰湪浠涔堜綅緗紝浠栧彇寰椾互鍚庣洿鎺ュ氨鐢ㄥ畠浣滀負婧愮偣浜嗐?/font>
ConnectionAnchor getSourceConnectionAnchor(Request request);
褰撳湪鍑嗗鍒涘緩榪炴帴鐨勬椂鍊欙紝閫氳繃Request鏉ヨ幏鍙栨柊榪炴帴鐨勬簮閿氱偣銆?/font>
鍙﹀鐨勪袱涓氨涓嶅啀鍟板棪浜嗐傛槸涓轟簡鑾峰緱鐩爣鐨勯敋鐐廣?/font>
浣嗘槸鎴戜滑鑲畾鐪嬪埌浜?/font>HelloWold鍜?/font>Workflow涓殑榪炴帴鏈夌偣涓嶄竴鏍楓?/font>HelloWold涓洿鎺ユ槸鍥懼厓涓婄殑錛岃?/font>workflow鏄氳繃榪炴帴鍩烘湰鍥懼厓涓婇潰鐨勪竴涓瓙鍥懼厓鑰岃繛鎺ョ殑銆傜畝鍗曟潵璇村氨鏄粬浠繛鎺ョ殑anchor鏈夌偣涓嶄竴鏍鳳紝榪欐牱灝變細鍑虹幇鎵ц緇撴灉鐨勪笉鍚屻?/font>
涓嬮潰鏉ョ湅鐪嬩粬浠埌搴曟槸鎬庝箞瀹炵幇鐨勩傛牴鎹笂闈㈡彁鍒扮殑銆傞敋鐐圭殑鑾峰彇鏄氳繃getSourceConnectionAnchor鍜?/font>getTargetConnectionAnchor鏂規硶鏉ヨ幏鍙栫殑銆傛垜浠彧闇瑕佸ソ濂芥瘮瀵逛竴涓嬩粬浠繖鍑犱釜鏂規硶鐨勪笉鍚屽氨鍙互浜嗐?/font>
HelloWold涓殑getSourceConnectionAnchor
public ConnectionAnchor getSourceConnectionAnchor(Request request) {
returnnew ChopboxAnchor(getFigure());
}
榪欓噷灝辯畝鍗曠殑鍒涘緩涓涓? ChopboxAnchor 灝卞ソ浜嗐傝繖涓氨鍙互鐩存帴榪炲埌璇?/span>Figure涓婁簡銆?/span>
鍦?/font>workflow涓繖涓儏鍐電◢寰湁涓鐐瑰鏉備簡銆傚厛涓嶈錛岃繕鏄湅鐪嬩粬鐨? getSourceConnectionAnchor 鏄庝箞瀹炵幇鐨勩?/font>
public ConnectionAnchor getSourceConnectionAnchor(
ConnectionEditPart connection) {
Connection edge = (Connection) connection.getModel();
return getNodeFigure().getConnectionAnchor(edge.getSource().getName());
}
/**
*returnsananchorgivenitsname
*
*@paramportNamenameoftheanchor
*@returntheanchorwiththename<code>portName</code>
*/
public ConnectionAnchor getConnectionAnchor(String portName) {
return (ConnectionAnchor)connectionAnchors.get( portName );
}
protected Hashtable connectionAnchors = new Hashtable(7);
/**
*Addaninputportanditsanchor
*
*@paramportName
*uniquenametorefertotheport
*/
publicvoid addInput(String portName) {
InputPortFigure inputPort = new InputPortFigure();
add(inputPort);
PortConnectionAnchor anchor = new PortConnectionAnchor(inputPort);
getTargetConnectionAnchors().add(anchor);
connectionAnchors.put(portName, anchor);
}
閫氳繃榪欏嚑涓柟娉曞彲浠ョ湅鍑哄畠鏄湪娣誨姞Input鏃跺欏氨鍒涘緩濂戒簡涓涓拰PortFigure 鐩稿叧Anchor騫舵妸瀹冧繚瀛樿搗鏉ャ傚湪瑕佺敤鐨勬椂鍊欏氨鎶婂畠鍙栧嚭鏉ャ傝繖鏍峰氨鎼炲畾浜嗐?/font>
鍏蜂綋鐨勫彲浠ュ弬鑰冭繖涓や釜渚嬪瓙鐨勪唬鐮併傚ソ浜嗭紝鎵撳畬鏀跺伐銆?/font>
鍙傝冩枃妗?/font>
IBM 綰㈢毊涔?/font>
2銆?/span>GEF 榪涢樁錛岀涓閮ㄥ垎: Anchor
闂鍦ㄨ繖閲屽嚭鏉ワ細褰撴病鏈夊嚭鐜版粴鍔ㄦ潯鐨勬椂鍊欎竴鍒囬兘寰堟甯革紝褰撲竴鍑虹幇婊氬姩鏉″氨姝繪椿娌℃湁鍔炴硶鎷栧姩浜嗐傛渶鍚庢墠鍙戠幇DragSourceEvent涓殑鍧愭爣鏄寜鐓у睆騫曟潵寰楋紝鑰?/span>EditPartViewer 涓殑鍧愭爣鏄寜鐓т粬鐨勯偅涓?/span>viewer鏉ュ緱銆傝繖涓湴鏂歸渶瑕佽漿鎹竴涓嬨?/span>
榪欎釜杞崲鐨勫姩浣滃彂鐜板湪jfire錛?/span>org.nightlabs.editor2d.util.EditorUtil https://svn.jfire.org/svn/main/trunk/org.nightlabs.editor2d/src/org/nightlabs/editor2d/util/EditorUtil.java錛変腑鏈夌幇鎴愮殑銆備笉澶氳浜嗭紝鎷挎潵鐢ㄥ惂銆?/p>
]]>
鍚庢潵灝?span lang="zh-CN">鎯沖亣濡?/span>鎴戦渶瑕佷粠鍥懼艦緙栬緫鍣ㄤ腑鎷栨嫿瀵硅薄鍒?/span>swt鎺т歡涓張璇ユ庝箞鍋氥?br />緇忚繃涓孌墊椂闂寸殑鎺㈢儲錛岀粓浜庢悶瀹氫簡銆?/span>
璁頒笅濡備笅榪囩▼錛屽笇鏈涘闇瑕佺殑鏈嬪弸鏈夌偣甯姪銆?/p>
棣栧厛鏈変簡銆婁粠SWT鎺т歡涓墭鎷藉璞″埌GEF緙栬緫鍣ㄤ腑銆嬫枃涓addDropTargetListener鏂規硶浣跨敤鐨勭粡鍘嗭紝寰堝揩灝辯‘瀹氭垜闇瑕佸GraphicalViewer娣誨姞涓涓?/span>DragSourceListener銆?/span>
鎯崇潃鍒拌繖涓湴鏂規垜搴旇鍙互寰堝揩鏀跺伐浜嗐備絾鏄坊鍔犲畬浜嗕互鍚庡彂鐜?span lang="zh-CN">鍘熸潵鐨勬嫋鍔ㄥ姛鑳介兘娌℃湁浜?/span>錛岃繖涓庝箞鍥炰簨銆傝皝鍦ㄥ悗闈㈡悶楝箋?/font>
緇忚繃涓孌墊椂闂寸殑鐙傛悳婊ョ儲緇堜簬鎵懼埌浜嗛棶棰樼殑鍏抽敭銆傚洜涓?font face="Times New Roman, serif">GEF涓嶅厑璁稿悓鏃舵湁涓や釜媧誨姩 DragSource 銆?/p>
瀹冩湰韜凡緇忔嫢鏈変竴涓?font face="Times New Roman, serif">DragSource浜嗭紙緙栬緫鍣ㄥ唴閮ㄧ殑鎵樻嫿錛夛紝鎴戜滑榪欐椂鍊欐坊鍔犱竴涓氨浼氬瓨鍦ㄥ
DragSource浜嗐傚綋鎴戞坊鍔犱竴涓柊鐨?font face="Times New Roman, serif">DragSource鏃跺欐垜浠柊瀹剁殑DragSource灝變細琚涓烘槸榛樿鐨?font face="Times New Roman, serif">DragSource銆?/p>
浠栦互鍓嶇殑DragSource灝卞け鏁堜簡銆傝繖涓嶆槸鎴戝儚鐪嬪埌鐨勩?/p>
鎬庝箞澶勭悊銆傜湅鍒頒簡涓涓墰浜虹殑瑙e喅鏂規銆?/p>
What I made to fix the problem was to only allow my DragSource to act under certain
conditions (in my application this happens when you click and drag the mouse AND
聽the SHIFT key is pressed). So when the SHIFT key is not pressed my DragSource does
nothing and the editor's internal drag and drop works fine銆?br />
public void dragStart(DragSourceEvent event)
{
...
if (!condition.isValid())
event.doit = false;
...
}
鎴戝皾璇曚簡涓涓嬭繖縐嶇姸鍐碉紝涓涓嬪氨鎼炲畾浜嗐?/span>
鍦ㄦ垜鐨勯」鐩腑錛岀敱浜庤繕鏈変竴浜涙暟鎹渶瑕佽漿鍖栥?font size="2">鍛靛懙錛屾劅瑙変笉閿欍?br />
鍙傝冩枃妗o細
http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15754.html
涓鑸儏鍐典笅GEF紼嬪簭閮芥槸閲囩敤濡備笅鐨勭晫闈細
鏂板緩瀵硅薄鐨勬搷浣滄椂閫氳繃鎷栨嫿Palette涓厓绱犲埌緙栬緫鑰岃幏寰椼備絾鏄湁鏃跺欏彲鑳介渶瑕佷粠SWT錛屾搷浣滅郴緇熸嫋涓浜涘厓绱犲埌GEF緙栬緫鍣ㄤ腑鏉ャ?/p>
涓嬮潰鎴戝氨鎶婂垱寤鴻繖鏍風殑鎷栨嫿榪囩▼澶ф鐨勬弿榪頒竴涓嬶細
1銆佸畾涔夋嫋鎷芥簮錛?font face="Times New Roman, serif">DragSource錛夈?/p>
2銆佸畾涔夋嫋鎷界洰鏍囩殑鐩戝惉錛?font face="Times New Roman, serif">DropTarget錛夈?/p>
鍒拌繖閲屽浜庝竴鑸殑鎷栨嫿鍏跺疄鏄彲浠ュ畬宸ヤ簡銆?/p>
榪欎釜閮ㄥ垎鍙互鍙傝?font face="Times New Roman, serif">weidagang2046鐨勪笓鏍忕殑銆?/a>DND鍏ラ棬瀛︿範銆?/a>
浣嗘槸瑕佽兘璁?font face="Times New Roman, serif">GraphicalViewer榪欎釜瀵硅薄鎵紨璧?/font>DropTarget鎴戜滑榪橀渶瑕佸仛鐐瑰叾浠栫殑宸ヤ綔銆?/font>GraphicalViewer榪欎釜綾繪湰韜彁渚涗簡涓涓?/font>addDropTargetListener鏂規硶銆傜湅鍒拌繖涓柟娉曟槸涓嶆槸涓闃電媯鍠滃晩銆傚鏋滄湁涔熸槸搴旇鐨勶紝鍥犱負榪欎釜鏂規硶灝辨槸鎴戜滑瑙e喅鍓嶉潰鎻愬嚭闂鐨勫叧閿?/font>
濂戒簡鐪嬬湅浠栫殑澹版槑鍚э紒
public void addDropTargetListener(TransferDropTargetListener聽listener)
浠栬繖涓弬鏁板眳鐒朵笉鏄?/font> DropTargetListener 銆傝繖涓?/font> TransferDropTargetListener 鏄竴涓粈涔堢帺鎰忓晩錛?/font>
鍦?/font> help 涓煡鍒幫細
A DropTragetListener
that handles one type of SWT Transfer
.
The purpose of a TransferDropTargetListener is to:
Determine enablement for a Drop operation. Enablement is often a function drop location, and/or criteria.
When enabled, optionally showing feedback on the DropTarget.
Performing the actualy Drop
DelegatingDropAdapter
allows these functions to be implemented separately for unrelated
types of Drags. DelegatingDropAdapter then combines the function of
each TransferDropTargetListener, while allowing them to be
implemented as if they were the only DragSourceListener.
鍋蜂笅鎳掞紝灝變笉緲昏瘧浜嗐?/font>
鍒涘緩濡備笅綾繪潵瀹炵幇榪欎釜鎺ュ彛錛?/font>
public class TreeNodeTransferDropTargetListener extends
AbstractTransferDropTargetListener {
public TreeNodeTransferDropTargetListener(EditPartViewer editPartViewer) {
// 鏀圭被榛樿鏄鐞? TextTransfer 綾誨瀷鐨勬嫋鎷戒簨浠?/font>
super (editPartViewer,TextTransfer.getInstance());
// TODO Auto-generated constructor stub
}
@Override
protected void updateTargetRequest() {
}
}
鎴戜滑榪欎釜鎷栨嫿鎯蟲槸璁╀粬鎵ц涓涓?/font>
create
鍛戒護銆傛墍浠ヤ笅闈㈠氨鏄閲嶈澆浠栫殑
createTargetRequest()
鐢ㄦ潵澶勭悊
create
瀵硅薄鐨勮姹傦紙
CreateRequestion
錛夈?/font>
CreateRequetion
闇瑕佷嬌鐢ㄥ埌涓涓被錛屽府鍔╂垜浠垱寤哄璞$殑宸ュ巶綾匯?/font>
GEF
緇欎簡鎴戜滑榪欐牱鐨勪竴涓帴鍙?/font>
CreationFactory
銆備笅闈㈡垜浠彇瀹炵幇浠栧氨濂戒簡銆?/p>
package
org.eclipse.gef.examples.shapes.rcp.views;
import
org.eclipse.gef.examples.shapes.model.EllipticalShape;
import
org.eclipse.gef.requests.CreationFactory;
public
class
TypeCreationFactory
implements
CreationFactory {
public
Object getNewObject() {
//
TODO
Auto-generated method stub
EllipticalShape
label =
new
EllipticalShape();
return
label;
}
public
Object getObjectType() {
return
EllipticalShape.
class
;
}
}
娉ㄦ剰錛氳繖閲岀殑
getNewObject
鏄繑鍥炶鍒涘緩綾葷殑涓涓璞″疄渚嬨?/font>
GetObjectType
闇瑕佽繑鍥為渶瑕佸垱寤哄璞$殑綾匯傝繖涓彲涓嶈鎼炲弽浜嗐?/font>
榪欐牱鎴戜滑灝卞彲浠ユ妸鎴戜滑鐨?
TreeNodeTransferDropTargetListener
綾諱腑鐨?/font>
createTargetRequest
鏂規硶鍔犱笂浜嗐?/font>
private
TypeCreationFactory factory = new
TypeCreationFactory();
protected
Request createTargetRequest() {
CreateRequest
request =
new
CreateRequest();
request.setFactory(
factory
);
return
request;
}
濂戒簡榪欎釜鏃跺欎笉瑕佸姘斾簡錛屽姞涓?/font>
protected
void
handleDragOver() {
getCurrentEvent().
detail
= DND.
DROP_MOVE
|DND.
DROP_COPY
;
super
.handleDragOver();
}
@Override
protected
void
handleDrop() {
//String
s = (String)getCurrentEvent().data;
//factory.setText(s);
super
.handleDrop();
}
榪欐牱鐨勬柟娉曞惂銆?/font>
榪欐牱榪欎釜鍔熻兘灝卞畬鎴愪簡銆?/font>
鍙傝冩枃鐚細
http://m.tkk7.com/weidagang2046/archive/2006/09/05/67707.html
http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html
]]>