package gui; 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.Monitor; import org.eclipse.swt.widgets.Shell; public abstract class GuiManager { 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(); } } 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.LoginComposite(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(); while (!mainShell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }