package net.mms_projects.copy_it.ui;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import net.mms_projects.copy_it.Activatable;
import net.mms_projects.copy_it.ClipboardManager;
import net.mms_projects.copy_it.Config;
import net.mms_projects.copy_it.EnvironmentIntegration;
import net.mms_projects.copy_it.FunctionalityManager;
import net.mms_projects.copy_it.Messages;
import net.mms_projects.copy_it.SyncListener;
import net.mms_projects.copy_it.SyncManager;
import net.mms_projects.copy_it.clipboard_backends.SwtBackend;
import net.mms_projects.copy_it.ui.swt.forms.AboutDialog;
import net.mms_projects.copy_it.ui.swt.forms.DataQueue;
import net.mms_projects.copy_it.ui.swt.forms.PreferencesDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SwtInterface implements UserInterfaceImplementation {
private SettingsUserInterface settingsUserInterface;
private AboutUserInterface aboutUserInterface;
private QueueUserInterface queueUserInterface;
protected Config config;
protected Display display;
protected Shell activityShell;
protected SyncManager syncManager;
protected ClipboardManager clipboardManager;
protected EnvironmentIntegration environmentIntegration;
private final Logger log = LoggerFactory.getLogger(this.getClass());
private FunctionalityManager<Activatable> functionality;
public SwtInterface(final Config config,
FunctionalityManager<Activatable> functionality,
EnvironmentIntegration environmentIntegration,
SyncManager syncManager, ClipboardManager clipboardManager) {
this.config = config;
this.syncManager = syncManager;
this.clipboardManager = clipboardManager;
this.functionality = functionality;
try {
this.display = Display.getDefault();
} catch (UnsatisfiedLinkError error) {
error.printStackTrace();
String message = Messages.getString("text.error.swt_loading",
error.getMessage());
JOptionPane.showMessageDialog(new JFrame(), message, "Dialog",
JOptionPane.ERROR_MESSAGE);
System.exit(1);
}
SwtBackend swtClipboard = new SwtBackend(this.clipboardManager);
this.clipboardManager.addCopyService(swtClipboard);
this.clipboardManager.addPasteService(swtClipboard);
this.clipboardManager.addPollingService(swtClipboard);
this.activityShell = new Shell(this.display);
this.setSettingsUserInterface(new PreferencesDialog(this.activityShell,
config, functionality, environmentIntegration));
this.setAboutUserInterface(new AboutDialog(this.activityShell, SWT.NONE));
DataQueue queueWindow = new DataQueue(this.activityShell,
SWT.DIALOG_TRIM, this.clipboardManager);
queueWindow.setup();
this.setQueueUserInterface(queueWindow);
}
@Override
public void open() {
if (this.config.get("run.firsttime") == null) {
MessageBox firstTimer = new MessageBox(this.activityShell);
firstTimer.setMessage(Messages.getString("text.firstrun"));
firstTimer.open();
this.getSettingsUserInterface().open();
this.config.set("run.firsttime", "nope");
}
// this.checkVersion();
while (!this.activityShell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
@Override
public void close() {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
activityShell.close();
}
});
}
@Override
public void setSettingsUserInterface(
SettingsUserInterface settingsUserInterface) {
this.settingsUserInterface = settingsUserInterface;
}
@Override
public SettingsUserInterface getSettingsUserInterface() {
return this.settingsUserInterface;
}
@Override
public void setAboutUserInterface(AboutUserInterface userInterface) {
this.aboutUserInterface = userInterface;
}
@Override
public AboutUserInterface getAboutUserInterface() {
return this.aboutUserInterface;
}
@Override
public void setQueueUserInterface(QueueUserInterface userInterface) {
this.queueUserInterface = userInterface;
}
@Override
public QueueUserInterface getQueueUserInterface() {
return this.queueUserInterface;
}
}