Header der Expand Bar erweitern

mp89

Mitglied
Servus,

möchte gerne eine ExpandBar basteln die allerdings schon in allen "ItemHeadern" mehr als nur ein einzeiliges String Objekt enthält, so ein paar Label und vielleicht auch Buttons wären schon gut.

Habe schon versucht mir eine eigene ExpandItem Klasse zu basteln, die ich dann einfach in meine ExpandBar integriere, aber irgendwie kommt nicht das gewünschte Resultat raus. Hier der Code:


ExpandUserItem.java - quasi mein ItemHeader für die ExpandBar

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.ExpandBar;
import org.eclipse.swt.widgets.ExpandItem;
import org.eclipse.swt.widgets.Label;

//import Anweisung

public class ExpandUserItem extends ExpandItem {

	UserInfo userInfo;
	ExpandBar parent;
	
	public ExpandUserItem(ExpandBar parent, int style, UserInfo userInfo) {
		super(parent, style);
		this.userInfo = userInfo;
		this.parent = parent;
		createGUI();
	}

	public ExpandUserItem(ExpandBar parent, int style, int index, UserInfo userInfo) {
		super(parent, style, index);
		this.userInfo = userInfo;
		this.parent = parent;
		createGUI();
	}
	private void createGUI(){
		FillLayout layout = new FillLayout();
		layout.type = SWT.VERTICAL;
		layout.marginHeight = layout.marginWidth = layout.spacing = 10;
		parent.setLayout(layout);
		Label lab = new Label(parent, SWT.NONE);
		lab.setText("1234567890abcdefghijklmnopqrstuvwxyz");
		Button but = new Button(parent, SWT.PUSH);
		but.setText("KLICK MICH");
	}

}

Auszug aus UserInfoItem.java - quasi der Footer meines ExpandItems der erst nach dem aufklappen sichtbar wird.

Java:
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

//ein paar imports

public class UserInfoItem extends Composite {

	UserInfo userInfo;

	private Button lImage = null;
	private Label lFirstname = null;
	private Label lLastname = null;
	private Button bEmail = null;
	private Button b = null;
	
	Image image;

	public UserInfoItem(Composite parent, int style, UserInfo userInfo) {
		super(parent, style);
		this.userInfo = userInfo;
		image = new Image(getDisplay(), Constants.PATH2CACHE
				+ Constants.PATHSEPERATOR + userInfo.getUserID() + ".jpg");
		initialize();
	}

	private void initialize() {


               //ein bisschen mehr GridData als nötig - ich weiß...

		GridData gridData121 = new GridData();
		gridData121.grabExcessHorizontalSpace = true;
		GridData gridData122 = new GridData();		
		gridData122.grabExcessHorizontalSpace = true;
		GridData gridData120 = new GridData();
		gridData120.heightHint = 20;
		gridData120.horizontalAlignment = GridData.CENTER;
		gridData120.verticalAlignment = GridData.CENTER;
		gridData120.widthHint = 60;
		GridData gridData119 = new GridData();
		gridData119.horizontalAlignment = GridData.CENTER;
		gridData119.heightHint = 20;
		gridData119.widthHint = 60;
		gridData119.verticalAlignment = GridData.CENTER;
		GridData gridData118 = new GridData();
		gridData118.grabExcessHorizontalSpace = true;
		GridData gridData117 = new GridData();
		gridData117.grabExcessHorizontalSpace = true;
		GridData gridData116 = new GridData();
		gridData116.grabExcessHorizontalSpace = true;
		GridData gridData115 = new GridData();
		gridData115.grabExcessHorizontalSpace = true;
		GridData gridData114 = new GridData();
		gridData114.grabExcessHorizontalSpace = true;
		GridData gridData113 = new GridData();
		gridData113.grabExcessHorizontalSpace = true;
		GridData gridData112 = new GridData();
		gridData112.grabExcessHorizontalSpace = true;
		GridData gridData111 = new GridData();
		gridData111.grabExcessHorizontalSpace = true;
		GridData gridData110 = new GridData();
		gridData110.grabExcessHorizontalSpace = true;
		GridData gridData109 = new GridData();
		gridData109.grabExcessHorizontalSpace = true;
		GridData gridData108 = new GridData();
		gridData108.horizontalAlignment = GridData.CENTER;
		gridData108.grabExcessHorizontalSpace = true;
		gridData108.grabExcessVerticalSpace = false;
		gridData108.verticalAlignment = GridData.BEGINNING;
		GridData gridData1 = new GridData();
		gridData1.horizontalSpan = 2;
		gridData1.verticalAlignment = GridData.CENTER;
		gridData1.horizontalAlignment = GridData.FILL;
		GridData gridData = new GridData();
		gridData.verticalSpan = 3;
		gridData.verticalAlignment = GridData.CENTER;
		gridData.heightHint = image.getBounds().height;
		gridData.widthHint = image.getBounds().width;
		gridData.horizontalAlignment = GridData.CENTER;
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 2;
		gridLayout.makeColumnsEqualWidth = false;
		this.setLayout(gridLayout);
		this.pack();

		if (UserInfoItemConfig.showImage) {

			lImage = new Button(this, SWT.FLAT);
			lImage.setToolTipText("Klick on the image to open BluePages");
			lImage.setImage(image);
			lImage.setLayoutData(gridData);
			lImage
					.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
						public void widgetSelected(
								org.eclipse.swt.events.SelectionEvent e) {
							new Web2_0Functions().showBluePagesEntry(userInfo
									.getEmail());
						}
					});
		}
		if (UserInfoItemConfig.showFirstname) {
			lFirstname = new Label(this, SWT.WRAP);
			lFirstname.setText(userInfo.getFirstName());
			lFirstname.setLayoutData(gridData110);
		}
		if (UserInfoItemConfig.showLastname) {
			lLastname = new Label(this, SWT.WRAP);
			lLastname.setText(userInfo.getLastName());
			lLastname.setLayoutData(gridData109);
		}

		bSametime = new Button(this, SWT.NONE);
		bSametime.setText("ABCDE");
		bSametime.setLayoutData(gridData120);
		bSametime
				.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
					public void widgetSelected(
							org.eclipse.swt.events.SelectionEvent e) {
						System.out.println("widgetSelected()"); // TODO
						// Auto-generated
						// Event stub
						// widgetSelected()
					}
				});
		bEmail = new Button(this, SWT.NONE);
		bEmail.setText("Email");
		bEmail.setLayoutData(gridData119);
	}
}

Auszug: - aus der Klasse die mir die ExpandBar zusammenfügt...

Java:
                UserInfoItem expandItemContent;
		ExpandUserItem item;
		for (int i = 0; i < infoList.size(); i++) {
			expandItemContent = new UserInfoItem(bar, SWT.NONE, infoList
					.get(i));
			item = new ExpandUserItem(bar, SWT.NONE, i, searchResultLists.get(i));
			if (UserInfoItemConfig.showNameOnHeading) {
				item.setText(infoList.get(i).getName());
			} else {
				item.setText(infoList.get(i).getCleanNotesID());
			}
			item.setHeight(expandItemContent.computeSize(SWT.DEFAULT,
					SWT.DEFAULT).y);
			item.setControl(expandItemContent);
		}

Am Ende soll meine ExpandBar so aussehen, dass wenn alles eingeklappt ist, z.B. ein Bildchen (das weiß ich noch wie das geht), dann z.B. der Firstname da steht und eine Zeile darunter z.B. noch das Lastname steht und ein Button zum whatever. Wenn man dieses Item aufklappt, dann soll da eben noch mehr stehen (was ich bereits implementiert habe).

Es geht mir also nur um den Item-Header, wie ich dort noch ein paar Widgets/etc. einbaue.

Ist das mit SWT in der Form überhaupt möglich? Gibts vielleicht noch ein anderes Widget, was man ähnlich anpassen kann?

Danke schonmal für die Hilfe / Tipps

Gruß Max
 
Zurück