/*
* Copyright (c) 2006 Manuel Traut and Volker Dahnke
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors: Manuel Traut and Volker Dahnke
*/
package YalpClients.SwtClient.GUI;
import YalpClients.*;
import YalpClients.SwtClient.*;
import YalpInterfaces.*;
import org.eclipse.swt.*;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import java.util.LinkedList;
/*
* Class Browser
*
*
*
* @author Volker Dahnke / Manuel Traut
*
* @version 1 02-04-2006
*/
public class Browser extends Composite{
private Composite parentComposite;
private Display display1;
private Shell shell;
private Model model;
private LinkedList alreadyBrowsed;
private Tree tree;
private Button add;
private Button cancel;
Browser( Composite parent,
final Model model,
Display display,
Composite parentComposite,
int style )
{
super(parent, style);
this.parentComposite=parentComposite;
this.alreadyBrowsed = new LinkedList();
this.model = model;
this.display1 = display;
this.shell = new Shell(this.display1,SWT.NONE);
this.setSize(300,400);
GridLayout gridLayout = new GridLayout();
this.shell.setLayout(gridLayout);
gridLayout.numColumns = 2;
GridData treeGrid = new GridData();
treeGrid.horizontalSpan = 2;
treeGrid.widthHint = 300;
treeGrid.heightHint = 400;
treeGrid.grabExcessHorizontalSpace = true;
treeGrid.grabExcessVerticalSpace = true;
treeGrid.horizontalAlignment = SWT.FILL;
treeGrid.verticalAlignment = SWT.FILL;
this.tree = new Tree(this.shell, SWT.SINGLE);
this.tree.setLayoutData(treeGrid);
TreeItem tmp;
for(YalpFile aFile : model.getDir("/")){
tmp = new TreeItem(this.tree, SWT.NULL);
tmp.setText(aFile.name);
if(aFile.isDir) tmp.setImage(new Image(display1, "folder.gif"));
else tmp.setImage(new Image(display1, "yalpV2_klein.gif"));
}
this.tree.addSelectionListener (
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String path = getPath();
if(!alreadyBrowsed.contains(path)){
alreadyBrowsed.add(path);
TreeItem tmp;
for(YalpFile aFile : model.getDir(path)){
tmp = new TreeItem(tree.getSelection()[0],SWT.NULL);
tmp.setText(aFile.name);
if(aFile.isDir) tmp.setImage(new Image(display1, "folder.gif"));
else tmp.setImage(new Image(display1, "yalpV2_klein.gif"));
tmp.getParentItem().setExpanded(true);
}
}
}
}
);
GridData buttonGrid1 = new GridData();
buttonGrid1.horizontalSpan = 1;
this.add = new Button(this.shell, SWT.PUSH);
this.add.setText("Indicate");
this.add.setLayoutData(buttonGrid1);
this.add.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
model.addDir(getPath());
parentEnable(true);
shell.setVisible(false);
}
});
GridData buttonGrid2 = new GridData();
buttonGrid2.horizontalSpan = 1;
buttonGrid2.horizontalAlignment = SWT.END;
this.cancel = new Button(this.shell, SWT.PUSH);
this.cancel.setText("Cancel");
this.cancel.setLayoutData(buttonGrid2);
this.cancel.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
parentEnable(true);
shell.setVisible(false);
}
});
}
public void show(){
parentEnable(false);
Point size=this.getSize();
Rectangle parentRec=((Shell)this.parentComposite).getBounds();
Rectangle thisRec=this.shell.computeTrim(parentRec.x+(parentRec.width/2)-(size.x/2),parentRec.y+(parentRec.height/2)-(size.y/2),size.x,size.y);
shell.setBounds(thisRec);
shell.open();
while(!shell.isDisposed()){
if(!this.display1.readAndDispatch()) this.display1.sleep();
}
this.display1.dispose();
}
private String getPath(){
TreeItem actualItem = tree.getSelection()[0];
String path = "/"+tree.getSelection()[0].getText();
while(actualItem.getParentItem() != null){
actualItem = actualItem.getParentItem();
path = "/" + actualItem.getText() + path;
}
return path;
}
private void parentEnable(boolean bool){
parentComposite.setEnabled(bool);
}
}