summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/gui/GuiManager.java
blob: 8e28409cd511bd689907d733c09aae1da2651655 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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();
		}
	}
}