package cz.nkp.differ.gui.components;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Layout;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.Notification;
import cz.nkp.differ.DifferApplication;
import cz.nkp.differ.compare.io.CompareComponent;
import cz.nkp.differ.gui.tabs.DifferProgramTab;
import cz.nkp.differ.gui.windows.MainDifferWindow;
import cz.nkp.differ.gui.windows.ProfileCreationWindow;
import cz.nkp.differ.gui.windows.UploadFilesWindow;
import cz.nkp.differ.model.Image;
import cz.nkp.differ.util.GUIMacros;
public class DifferProgramTabButtonPanel extends CustomComponent {
private static final long serialVersionUID = -3190731385605086001L;
private Button uploadImagesButton;
private Button createProfilesButton;
private Button logoutButton;
private Button deleteImagesButton;
private Button refreshImagesButton;
private Button compareButton;
private DifferProgramTab parent;
private MainDifferWindow mainWindow;
public DifferProgramTabButtonPanel(DifferProgramTab parent, MainDifferWindow window) {
this.parent = parent;
this.mainWindow = window;
this.setCompositionRoot(createDifferProgramTabButtonPanel());
for (UserFilesWidget widget : mainWindow.getUserFilesWidgets()) {
widget.addSelectionListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
int left = mainWindow.getUserFilesWidgets().get(0).getSelectedImages().size();
int right = mainWindow.getUserFilesWidgets().get(1).getSelectedImages().size();
deleteImagesButton.setEnabled(left > 0 || right > 0);
compareButton.setEnabled(left + right >= 1);
}
});
}
}
private Panel createDifferProgramTabButtonPanel() {
Panel panel = new Panel();
panel.addComponent(createDifferProgramTabButtonLayout());
panel.setHeight("100%");
return panel;
}
private Layout createDifferProgramTabButtonLayout() {
VerticalLayout buttonPanelRoot = new VerticalLayout();
uploadImagesButton = new Button("Upload images");
uploadImagesButton.addListener(GUIMacros.createWindowOpenButtonListener(mainWindow, new UploadFilesWindow(mainWindow)));
refreshImagesButton = new Button("Refresh images");
refreshImagesButton.addListener(new Listener() {
@Override
public void componentEvent(Event event) {
for (UserFilesWidget widget : mainWindow.getUserFilesWidgets()) {
widget.refresh();
}
}
});
deleteImagesButton = new Button("Remove images");
deleteImagesButton.addListener(new Listener() {
@Override
public void componentEvent(Event event) {
int count = 0;
for (UserFilesWidget widget : mainWindow.getUserFilesWidgets()) {
count += widget.removeSelectedImages();
}
mainWindow.showNotification("Remove images", String.format("%s file(s) has been removed.", count),
Notification.TYPE_TRAY_NOTIFICATION);
for (UserFilesWidget widget : mainWindow.getUserFilesWidgets()) {
widget.refresh();
}
}
});
deleteImagesButton.setEnabled(false);
createProfilesButton = new Button("Create New Profile");
createProfilesButton.addListener(GUIMacros.createWindowOpenButtonListener(mainWindow, new ProfileCreationWindow()));
buttonPanelRoot.addComponent(GUIMacros.bindTooltipToComponent(uploadImagesButton, "Upload image", "Use this function to upload new image files"));
buttonPanelRoot.addComponent(GUIMacros.bindTooltipToComponent(refreshImagesButton, "Refresh images", "Refresh images"));
buttonPanelRoot.addComponent(GUIMacros.bindTooltipToComponent(deleteImagesButton, "Delete images", "Delete selected images"));
buttonPanelRoot.addComponent(GUIMacros.bindTooltipToComponent(createProfilesButton, "Create Profile", "Create a new image processing profile"));
compareButton = new Button("Compare");
compareButton.addListener(new ClickListener() {
@Override
public void buttonClick(Button.ClickEvent event) {
try {
HorizontalLayout layout = new HorizontalLayout();
Image[] selectedImages = parent.getSelectedImages();
CompareComponent cp = new CompareComponent();
cp.setApplication(DifferApplication.getCurrentApplication());
layout.addComponent(new PluginDisplayComponent(cp, selectedImages));
parent.setCustomView(layout);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
compareButton.setEnabled(false);
buttonPanelRoot.addComponent(compareButton);
logoutButton = new Button("Logout");
logoutButton.addListener(new Listener() {
@Override
public void componentEvent(Event event) {
parent.setLoggedOutView();
}
});
buttonPanelRoot.addComponent(logoutButton);
return buttonPanelRoot;
}
}