package com.kartoflane.superluminal2.ui;
import java.io.File;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.kartoflane.superluminal2.mvc.controllers.GibController;
import com.kartoflane.superluminal2.ui.sidebar.ImagesToolComposite;
import com.kartoflane.superluminal2.utils.IOUtils;
import com.kartoflane.superluminal2.utils.UIUtils;
public class GibWidget extends Composite {
private GibController controller = null;
private Label label = null;
private Button btnView = null;
private Button btnBrowse = null;
private Text txtImage = null;
private BrowseMenu mnb = null;
public GibWidget(Composite parent, GibController gib) {
super(parent, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
setLayout(layout);
setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 1, 1));
controller = gib;
mnb = new BrowseMenu(this);
label = new Label(this, SWT.NONE);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
String msg = "Gib #" + gib.getId();
String alias = gib.getAlias();
if (alias != null && !alias.equals(""))
msg += ": " + alias;
label.setText(msg);
btnView = new Button(this, SWT.NONE);
btnView.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
btnView.setText("View");
btnView.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String path = controller.getImage();
if (path != null) {
ImageViewerDialog dialog = new ImageViewerDialog(EditorWindow.getInstance().getShell());
dialog.open(path);
}
}
});
btnBrowse = new Button(this, SWT.NONE);
btnBrowse.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
btnBrowse.setText("Browse");
mnb.addTo(btnBrowse);
mnb.addSystemListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog(EditorWindow.getInstance().getShell(), SWT.OPEN);
dialog.setFilterExtensions(new String[] { "*.png" });
dialog.setFilterPath(ImagesToolComposite.getPrevGibsPath());
dialog.setFileName(ImagesToolComposite.getPrevGibsPath());
boolean exit = false;
while (!exit) {
String path = dialog.open();
// path == null only when user cancels
if (path != null) {
exit = setImage("file:", path);
} else {
exit = true;
}
}
}
});
mnb.addDataListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
DatabaseFileDialog dialog = new DatabaseFileDialog(EditorWindow.getInstance().getShell());
dialog.setFilterExtensions(new String[] { "*.png" });
dialog.setText("FTL Archive Browser");
boolean exit = false;
while (!exit) {
String path = dialog.open();
// path == null only when user cancels
if (path == null) {
exit = true;
} else {
exit = setImage("db:", path);
}
}
}
});
txtImage = new Text(this, SWT.BORDER | SWT.READ_ONLY);
txtImage.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
String path = controller.getImage();
txtImage.setText(path == null ? "" : IOUtils.trimProtocol(path));
}
public void updateData() {
String str = "Gib #" + controller.getId();
String alias = controller.getAlias();
if (alias != null && !alias.equals(""))
str += ": " + alias;
label.setText(str);
str = controller.getImage();
txtImage.setText(str == null ? "" : IOUtils.trimProtocol(str));
}
private boolean setImage(String protocol, String path) {
if (protocol.equals("file:") && !new File(path).exists()) {
UIUtils.showWarningDialog(EditorWindow.getInstance().getShell(), null, "The file you have selected does not exist.");
return false;
}
controller.setImage(protocol + path);
EditorWindow.getInstance().canvasRedraw();
updateData();
return true;
}
}