package org.reldb.dbrowser.ui.content.rev;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.reldb.dbrowser.ui.content.rev.ControlPanel;
import org.reldb.dbrowser.ui.content.rev.Operator;
import org.reldb.dbrowser.ui.content.rev.Rev;
import org.reldb.dbrowser.ui.content.rev.Visualiser;
public abstract class OperatorWithControlPanel extends Operator {
protected Label operatorLabel;
public OperatorWithControlPanel(Rev rev, String name, String title, int xpos, int ypos) {
super(rev.getModel(), name, title, xpos, ypos);
}
@Override
protected Control obtainControlPanel(Visualiser parent) {
Composite controlPanel = new Composite(parent, SWT.NONE);
controlPanel.setLayout(new FillLayout());
operatorLabel = new Label(controlPanel, SWT.NONE);
operatorLabel.setBackground(BackgroundColor);
if (!getModel().getRev().isReadOnly())
operatorLabel.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
if (operatorLabel.getBounds().contains(e.x, e.y))
openDetails();
}
});
return controlPanel;
}
protected abstract void buildControlPanel(Composite container);
protected void controlPanelOkPressed() {}
protected void controlPanelCancelPressed() {}
private class Controls extends ControlPanel {
public Controls(Visualiser visualiser) {
super(visualiser);
}
@Override
protected void buildContents(Composite container) {
container.setLayout(new GridLayout(3, false));
buildControlPanel(container);
}
@Override
protected void okPressed() {
controlPanelOkPressed();
super.okPressed();
}
@Override
protected void cancelPressed() {
controlPanelCancelPressed();
super.cancelPressed();
}
}
private void openDetails() {
if (!queryable)
return;
new Controls(this).open();
}
private boolean queryable = false;
@Override
protected void notifyArgumentChanged(boolean queryable) {
this.queryable = queryable;
}
@Override
public String getQuery() {
return null;
}
}