# Gesamte Form als DragSource



## SegFault (6. Feb 2010)

Ich stelle in einer View den inhalt eines Objektes vom Typ Kunde dar. Die view dient als reine Nutzerinformation. Jetzt möchte ich für das gesamte Objekte den dnd Support aktivieren. Also wenn jemand irgendwo innerhalb der Form anfängt die maustaste gedrückt zu halten beginnt das DND. Aber irgendwie scheint das nicht zu gehen. Ich kann nicht den gesamten Formbody als DragSource angeben. Was muss ich ändern?

Hier mal der Code zum anlegen des ganzen:

```
DragSource ds = new DragSource(form.getBody(),DND.DROP_LINK);
		//draglabel = new Label(form.getBody(), SWT.NONE);
		ds.setTransfer(new Transfer[]{KundenTransfer.getInstance()});
		ds.addDragListener(new DragSourceListener()
		{

			@Override
			public void dragFinished(DragSourceEvent event) 
			{
				
			}

			@Override
			public void dragSetData(DragSourceEvent event) {
				System.out.println("check issupportedtype: " + event.dataType);
				if (KundenTransfer.getInstance().isSupportedType(event.dataType))
				{
					event.data = data;
				}
				
				
			}

			@Override
			public void dragStart(DragSourceEvent event) {
				System.out.println("dragstart");
				if (data==null || data.getDeleted())event.doit=false;			
			}
			
		});
```

Benutze ich das draglabel (Oben auskommentiert) als DragSource klappt alles. Aber wie schon gesagt es soll egal sein wo im Form der Drag&Drop Support beginnt. Nicht nur über einen bestimmten Steuerlelement.


----------



## SegFault (7. Feb 2010)

Gesamte Form geht wohl nicht, aber es funktioniert über den Header des Formulars. Würde sogar über das TabControl Funktionieren. Auf jedenfall klappt es so ähnlich wie ich mir das vorgestellt habe.


----------



## Gast2 (8. Feb 2010)

Weclhen Header??
Ja ich wollte auch mal ein Composite draggen, aber irgenwie gehts das mit nem Composite nicht...


----------



## Gast2 (9. Feb 2010)

Eigentlich müsstest du asl DragSource einfach nur dein parent mitgeben, dass du bei

```
public void createPartControl(Composite parent)
```
 bekommst, dann sollte der ganze Editor als DragSource dienen.

Hier mal ein Bsp.

```
@Override
	public void createPartControl(Composite parent) {
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 4;
		parent.setLayout(gridLayout);
		Text text = new Text(parent,SWT.BORDER);
		GridDataFactory.fillDefaults().align(1, 1).span(100, 100).applyTo(text);
		DragSource source = new DragSource(parent, DND.DROP_COPY);
		source.setTransfer(new Transfer[] { TextTransfer.getInstance() });
		source.addDragListener(new DragSourceAdapter() {
			public void dragSetData(DragSourceEvent event) {
				event.data = "test";
			}
		});
		
		
	}
```


----------



## SegFault (9. Feb 2010)

das hatte ich schon probiert, aber irgendwie ging das nicht. Ich hatte auch alle anderen Versionen versucht (eigenes Composite o.ä. erstellt). Bei mir ist es kein Editor sondern eine View welche als DragSource dienen soll. Aber ich glaube das sollte den ganzen keinen unterschied machen. 

Zu der Rückfrage wegen den Header: Es gibt da eine Funktion für die swt Forms die es erlauben die Titelzeile des Forms als Dragsource zu verwenden.


----------



## Gast2 (9. Feb 2010)

SegFault hat gesagt.:


> das hatte ich schon probiert, aber irgendwie ging das nicht. Ich hatte auch alle anderen Versionen versucht (eigenes Composite o.ä. erstellt). Bei mir ist es kein Editor sondern eine View welche als DragSource dienen soll. Aber ich glaube das sollte den ganzen keinen unterschied machen.
> 
> Zu der Rückfrage wegen den Header: Es gibt da eine Funktion für die swt Forms die es erlauben die Titelzeile des Forms als Dragsource zu verwenden.



Also bei mir klappt es in der View das composite, außer du hast noch etwas über die Composite gelegt welche sie komplett ausfüllt...


----------



## SegFault (11. Feb 2010)

prinzipiell erstelle ich immer mehrere Composites. Also eine Schachtelung wie: Hauptframe(Composite1(Label,Text....),Composite2(Text,Text,Text),.....,CompositeN(...));
Die Composites enthalten meist noch Sections etc. Ich probiers aber einfach nochmal aus.
P.S. ich verwende wie schon gesagt das FormToolkit, das liefert zwar auch SWT Componenten zurück aber ggf verbiegt es dennoch was an der Verhaltensweise.


----------



## Gast2 (11. Feb 2010)

SegFault hat gesagt.:


> prinzipiell erstelle ich immer mehrere Composites. Also eine Schachtelung wie: Hauptframe(Composite1(Label,Text....),Composite2(Text,Text,Text),.....,CompositeN(...));
> Die Composites enthalten meist noch Sections etc. Ich probiers aber einfach nochmal aus.
> P.S. ich verwende wie schon gesagt das FormToolkit, das liefert zwar auch SWT Componenten zurück aber ggf verbiegt es dennoch was an der Verhaltensweise.



Du musst als DragSource immer die oberste Komponente die zur Verfügung ist angeben... Anders geht es nicht... Das können dann bei einem Editor oder View dann schon mal mehrer Widgets sein.


----------

