package org.reldb.dbrowser.ui;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormAttachment;
import org.reldb.dbrowser.ui.StatusPanel;
import org.reldb.dbrowser.ui.crash.CrashTrap;
import org.reldb.dbrowser.ui.log.LogWin;
import org.reldb.dbrowser.ui.preferences.Preferences;
import org.reldb.dbrowser.ui.version.Version;
public class MainPanel extends Composite {
private CTabFolder tabFolder;
private StatusPanel statusPanel;
private final String rectPrefName = "mainpanel.rect";
/**
* Create the composite.
* @param parent
* @param style
*/
public MainPanel(Composite parent, int style) {
super(parent, style);
setLayout(new FormLayout());
getShell().addListener(SWT.Close, new Listener() {
@Override
public void handleEvent(Event event) {
LogWin.remove();
}
});
getShell().addListener(SWT.Move, new Listener() {
@Override
public void handleEvent(Event event) {
Preferences.setPreference(rectPrefName, getShell().getBounds());
}
});
getShell().addListener(SWT.Resize, new Listener() {
@Override
public void handleEvent(Event event) {
Preferences.setPreference(rectPrefName, getShell().getBounds());
}
});
// Install logging
LogWin.install(parent);
// Install platform logging and UI error trapping
CrashTrap uiTrap = new CrashTrap(getShell(), Version.getVersion());
Platform.addLogListener(new ILogListener() {
@Override
public void logging(IStatus status, String plugin) {
String logMessage = "RCP log: " + status + " in " + plugin;
System.out.println(logMessage);
if (status.isOK() || status.matches(IStatus.CANCEL | IStatus.INFO | IStatus.WARNING))
return;
uiTrap.process(status.getException(), logMessage);
}
});
Rectangle rect = Preferences.getPreferenceRectangle(rectPrefName);
if (rect.height > 0 && rect.width > 0)
getShell().setBounds(rect);
tabFolder = new CTabFolder(this, SWT.None);
FormData fd_tabFolder = new FormData();
fd_tabFolder.top = new FormAttachment(0);
fd_tabFolder.left = new FormAttachment(0);
fd_tabFolder.right = new FormAttachment(100);
tabFolder.setLayoutData(fd_tabFolder);
tabFolder.setSelectionBackground(Display.getCurrent().getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND_GRADIENT));
tabFolder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
setStatus(((DbTab)tabFolder.getSelection()).getStatus());
}
});
statusPanel = new StatusPanel(this, SWT.None);
FormData fd_statusPanel = new FormData();
fd_statusPanel.left = new FormAttachment(0);
fd_statusPanel.right = new FormAttachment(100);
fd_statusPanel.bottom = new FormAttachment(100);
statusPanel.setLayoutData(fd_statusPanel);
fd_tabFolder.bottom = new FormAttachment(statusPanel);
}
public void setStatus(String s) {
statusPanel.setStatus(s);
}
public CTabFolder getTabFolder() {
return tabFolder;
}
}