package com.cxy.redisclient.presentation.component; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import com.cxy.redisclient.integration.I18nFile; import com.cxy.redisclient.presentation.RedisClient; public abstract class RedisClientDialog extends Dialog { protected Object result; protected Shell shell; protected Image image; protected int minWidth = 350; protected int minHeight = 150; /** * Create the dialog. * @param parent * @param style */ public RedisClientDialog(Shell parent, Image image) { super(parent, SWT.SHELL_TRIM | SWT.APPLICATION_MODAL); this.image = image; } /** * Open the dialog. * @return the result */ public Object open() { shell = new Shell(getParent(), getStyle()); shell.setImage(image); createContents(); shell.open(); shell.layout(); Display display = getParent().getDisplay(); while (!shell.isDisposed()) { try { if (!display.readAndDispatch()) { display.sleep(); } } catch (Exception e) { MessageDialog.openError(shell, RedisClient.i18nFile.getText(I18nFile.ERROR), e.getLocalizedMessage()); } } return result; } /** * Create contents of the dialog. */ protected void createContents() { shell.setMinimumSize(minWidth, minHeight); shell.pack(); setMiddle(); } protected void setMiddle() { Rectangle screenSize = shell.getParent().getBounds(); Rectangle shellSize = shell.getBounds(); shell.setLocation(screenSize.x + screenSize.width / 2 - shellSize.width / 2, screenSize.y + screenSize.height / 2 - shellSize.height / 2); } }