package org.reldb.dbrowser.ui.content.cmd;
import java.io.IOException;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.reldb.dbrowser.ui.DbConnection;
import org.reldb.dbrowser.ui.RevDatabase.Script;
import org.reldb.dbrowser.ui.content.cmd.CmdPanelInput.ErrorInformation;
import org.reldb.rel.exceptions.DatabaseFormatVersionException;
public class CmdPanel extends Composite {
public static final int NONE = 0;
public static final int NO_INPUT_TOOLBAR = 1;
private CmdPanelOutput cmdPanelOutput;
private CmdPanelInput cmdPanelInput;
private SashForm sashForm;
/**
* Create the composite.
* @param parent
* @param cmdstyle
* @throws IOException
* @throws ClassNotFoundException
* @throws NumberFormatException
* @throws DatabaseFormatVersionException
*/
public CmdPanel(DbConnection connection, Composite parent, int cmdstyle) throws NumberFormatException, ClassNotFoundException, IOException, DatabaseFormatVersionException {
super(parent, SWT.NONE);
setLayout(new FillLayout(SWT.HORIZONTAL));
sashForm = new SashForm(this, SWT.VERTICAL);
cmdPanelOutput = new CmdPanelOutput(sashForm, connection, SWT.NONE) {
@Override
protected void notifyInputDone() {
cmdPanelInput.done();
cmdPanelInput.setFocused();
}
@Override
protected void notifyInputOfSuccess() {
cmdPanelInput.selectAll();
notifyExecuteSuccess();
cmdPanelInput.setFocused();
}
@Override
protected void notifyInputOfError(StringBuffer errorBuffer) {
ErrorInformation eInfo = cmdPanelInput.handleError(errorBuffer);
notifyError(eInfo);
}
@Override
protected void zoom() {
if (sashForm.getMaximizedControl() == null) {
sashForm.setMaximizedControl(cmdPanelInput);
zoomInParent();
} else if (sashForm.getMaximizedControl() == cmdPanelInput) {
sashForm.setMaximizedControl(cmdPanelOutput);
zoomInParent();
} else {
sashForm.setMaximizedControl(null);
unzoomInParent();
}
}
@Override
protected void notifyEnhancedOutputChange() {
CmdPanel.this.notifyEnhancedOutputChange();
}
};
cmdPanelInput = new CmdPanelInput(sashForm, cmdPanelOutput, cmdstyle, connection.getKeywords()) {
@Override
protected void notifyHistoryAdded(String historyItem) {
CmdPanel.this.notifyHistoryAdded(historyItem);
}
@Override
protected String getDefaultSaveFileName() {
return CmdPanel.this.getDefaultSaveFileName();
}
};
sashForm.setWeights(new int[] {2, 1});
}
/** Override to receive notifications of errors. */
protected void notifyError(ErrorInformation eInfo) {}
public void run() {
cmdPanelInput.run();
}
protected String getDefaultSaveFileName() {
return "Untitled";
}
private void setZoomedParent(Composite parent, Composite setTo) {
Composite parentparent = parent.getParent();
if (parentparent instanceof SashForm) {
SashForm parentSash = (SashForm)parentparent;
parentSash.setMaximizedControl(setTo);
}
}
private void zoomInParent() {
Composite parent = getParent();
setZoomedParent(parent, parent);
}
private void unzoomInParent() {
Composite parent = getParent();
setZoomedParent(parent, null);
}
public void zoom() {
if (sashForm.getMaximizedControl() == null) {
sashForm.setMaximizedControl(cmdPanelInput);
zoomInParent();
} else if (sashForm.getMaximizedControl() == cmdPanelInput) {
sashForm.setMaximizedControl(cmdPanelOutput);
zoomInParent();
} else {
sashForm.setMaximizedControl(null);
unzoomInParent();
}
}
protected void notifyHistoryAdded(String historyItem) {
}
protected void notifyEnhancedOutputChange() {
}
/** Override to be notified of execution/evaluation success. */
public void notifyExecuteSuccess() {
}
public CmdPanelOutput getCmdPanelOutput() {
return cmdPanelOutput;
}
public void dispose() {
cmdPanelInput.dispose();
cmdPanelOutput.dispose();
super.dispose();
}
public void focusOnInput() {
cmdPanelInput.setFocused();
}
public void redisplayed() {
focusOnInput();
}
public void load(String fname) {
cmdPanelInput.loadFile(fname);
}
public void copyOutputToInput() {
cmdPanelInput.copyOutputToInput();
}
public boolean getEnhancedOutput() {
return cmdPanelOutput.getEnhancedOutput();
}
public void setInputText(String text) {
cmdPanelInput.setText(text);
}
public String getInputText() {
return cmdPanelInput.getText();
}
public void setContent(Script script) {
setInputText(script.getContent());
cmdPanelInput.setHistory(script.getHistory());
}
public void setContent(String text) {
cmdPanelInput.saveToHistory();
cmdPanelInput.setText(text);
}
}