package edu.ualberta.med.biobank.views;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import edu.ualberta.med.biobank.SessionManager;
import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseText;
import edu.ualberta.med.biobank.treeview.NewRootNode;
import edu.ualberta.med.biobank.treeview.RootNode;
import edu.ualberta.med.biobank.widgets.trees.AdapterTreeWidget;
public abstract class AbstractAdministrationView extends
AbstractViewWithAdapterTree {
protected BgcBaseText treeText;
private Composite searchComposite;
@Override
public void createPartControlInternal(Composite parent) {
GridLayout gl = new GridLayout(1, false);
gl.marginWidth = 0;
gl.marginHeight = 0;
gl.horizontalSpacing = 0;
gl.verticalSpacing = 0;
parent.setLayout(gl);
searchComposite = new Composite(parent, SWT.NONE);
gl = new GridLayout(1, false);
gl.marginWidth = 0;
gl.marginHeight = 0;
gl.horizontalSpacing = 0;
gl.verticalSpacing = 0;
gl.marginBottom = 5;
gl.marginTop = 2;
searchComposite.setLayout(gl);
searchComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING,
true, false));
createTreeTextOptions(searchComposite);
treeText = new BgcBaseText(searchComposite, SWT.SINGLE);
treeText.addListener(SWT.DefaultSelection, new Listener() {
@Override
public void handleEvent(Event e) {
internalSearch();
}
});
treeText.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true,
false));
treeText.setToolTipText(getTreeTextToolTip());
searchComposite.setEnabled(false);
adaptersTree = new AdapterTreeWidget(parent, false);
getSite().setSelectionProvider(adaptersTree.getTreeViewer());
createRootNode();
adaptersTree.getTreeViewer().setInput(rootNode);
adaptersTree.getTreeViewer().expandAll();
}
// FIXME temporary method until only one possible rootnode is possible
protected abstract void createRootNode();
protected void createOldRootNode() {
rootNode = new RootNode();
((RootNode) rootNode).setTreeViewer(adaptersTree.getTreeViewer());
}
protected void createNewRootNode() {
rootNode = new NewRootNode();
((NewRootNode) rootNode).setTreeViewer(adaptersTree.getTreeViewer());
}
protected abstract String getTreeTextToolTip();
@SuppressWarnings("unused")
protected void createTreeTextOptions(Composite parent) {
// default do nothing
}
protected abstract void internalSearch();
@Override
public void reload() {
if (!getTreeViewer().getControl().isDisposed()) {
getTreeViewer().refresh(true);
getTreeViewer().expandToLevel(3);
}
}
@Override
public void clear() {
super.clear();
setSearchFieldsEnablement(false);
}
protected void setSearchFieldsEnablement(boolean enabled) {
if (!searchComposite.isDisposed()) {
searchComposite.setEnabled(enabled);
for (Control c : searchComposite.getChildren()) {
c.setEnabled(enabled);
}
}
}
@Override
public void dispose() {
super.dispose();
}
@Override
public void setFocus() {
treeText.setFocus();
}
@Override
public void opened() {
if (SessionManager.getInstance().isConnected())
reload();
}
}