package gui; import org.apache.log4j.Logger; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Monitor; import org.eclipse.swt.widgets.Shell; public abstract class GuiManager { private final static Logger LOGGER = Logger.getLogger(GuiManager.class); static Shell mainShell; static Composite contentComposite; static Display display; /** * Add a new composite with content to the main Shell * @param The composite to add, should be a GUI */ public static void addContent( Composite contentComposite ){ removeContent(); GuiManager.contentComposite = contentComposite; // sets the starting preferred size. GridData gridData = new GridData(GridData.FILL, GridData.FILL, true, true); gridData.widthHint = 800; gridData.heightHint = 600; contentComposite.setLayoutData(gridData); mainShell.layout(); } /** * Remove the current content of the main shell */ private static void removeContent() { if(contentComposite != null) { GuiManager.contentComposite.dispose(); } } // TODO use showMessageBox public static void showMessage(final String message) { MessageBox msgBox = new MessageBox(mainShell, SWT.ICON_INFORMATION); msgBox.setText("Information"); msgBox.setMessage(message); int ret = msgBox.open(); } // /** // * Generic helper to show a message box to the user, and optionally log the message to the log file. // * // * @param message Message to display. Can be multi line. // * @param messageType Type of message (warning, information) // * @param logger Logger instance to log to. Can be null. // * @param exception Exception related to this message. Can be null. // */ // public static void showMessageBox(String message, MessageType messageType, Logger logger, // Throwable exception) { // if (logger != null) // logger.log(messageType.logPriority, message, exception); // if (exception != null) // message += "\n\n" + exception.getClass().getSimpleName(); // JOptionPane.showMessageDialog(mainWindow, message, messageType.title, messageType.optionPaneId); // } public static Display getDisplay(){ return display; } public static void initGui() { display = new Display(); mainShell = new Shell(display, SWT.SHELL_TRIM | SWT.CENTER); Menu menuBar = new Menu(mainShell, SWT.BAR); MenuItem cascadeFileMenu = new MenuItem(menuBar, SWT.CASCADE); cascadeFileMenu.setText("&File"); Menu fileMenu = new Menu(mainShell, SWT.DROP_DOWN); cascadeFileMenu.setMenu(fileMenu); MenuItem exitItem = new MenuItem(fileMenu, SWT.PUSH); exitItem.setText("&Exit"); exitItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { mainShell.getDisplay().dispose(); System.exit(0); } }); mainShell.setText("Dozmod"); mainShell.setMenuBar(menuBar); // Set layout for the mainshell, items added to the shell should get a gridData mainShell.setLayout(new GridLayout(1, true)); addContent(new gui.core.LoginGUI(mainShell)); // center the window on the primary monitor Monitor primary = display.getPrimaryMonitor(); Rectangle bounds = primary.getBounds(); Rectangle rect = mainShell.getBounds(); int x = bounds.x + (bounds.width - rect.width) / 2; int y = bounds.y + (bounds.height - rect.height) / 2; mainShell.setLocation(x, y); mainShell.pack(); mainShell.open(); LOGGER.info("GUI initialised."); while (!mainShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }