package com.thingtrack.konekti.view.addon.ui;
import java.io.Serializable;
import org.vaadin.peter.buttongroup.ButtonGroup;
import com.thingtrack.konekti.view.addon.data.BindingSource;
import com.thingtrack.konekti.view.addon.data.BindingSource.IndexChangeEvent;
import com.thingtrack.konekti.view.addon.data.BindingSource.IndexChangeListener;
import com.thingtrack.konekti.view.kernel.ui.layout.IViewContainer;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.HorizontalLayout;
@SuppressWarnings("serial")
public class NavigationToolbar extends AbstractToolbar {
@AutoGenerated
private HorizontalLayout toolbarLayout;
@AutoGenerated
private Button btnRefreshRegister;
@AutoGenerated
private Button btnUpRegister;
@AutoGenerated
private Button btnDownRegister;
@AutoGenerated
private Button btnLastRegister;
@AutoGenerated
private Button btnNextRegister;
@AutoGenerated
private Button lblCountRegister;
@AutoGenerated
private Button btnPreviousRegister;
@AutoGenerated
private Button btnFirstRegister;
/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */
private Object register;
private int position = 0;
private boolean navigationButtons;
// navigator button listeners
private ClickFirstButtonListener listenerFirstButton = null;
private ClickPreviousButtonListener listenerPreviousButton = null;
private ClickNextButtonListener listenerNextButton = null;
private ClickLastButtonListener listenerLastButton = null;
private ClickDownButtonListener listenerDownButton = null;
private ClickUpButtonListener listenerUpButton = null;
private ClickRefreshButtonListener listenerRefreshButton = null;
private IViewContainer viewContainer;
/**
* The constructor should first build the main layout, set the
* composition root and then do any custom initialization.
*
* The constructor will not be automatically regenerated by the
* visual editor.
*/
public NavigationToolbar(int position, final BindingSource<?> bindingSource, IViewContainer viewContainer) {
super(position, bindingSource);
buildMainLayout();
// TODO add user code here
this.viewContainer = viewContainer;
btnFirstRegister.setDescription("Primer Registro");
btnNextRegister.setDescription("Siguiente Registro");
btnPreviousRegister.setDescription("Anterior Registro");
btnLastRegister.setDescription("Ăšltimo Registro");
btnRefreshRegister.setDescription("Refrescar Registros");
btnDownRegister.setDescription("Registros Detalle");
btnUpRegister.setDescription("Registros Maestro");
setBindingSource(bindingSource);
btnFirstRegister.addListener(new Button.ClickListener() {
public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
// set status register
register = bindingSource.firstItem();
int index = bindingSource.getIndex();
lblCountRegister.setCaption(bindingSource.getIndex() + "/" + bindingSource.size());
btnFirstRegister.setEnabled(false);
btnPreviousRegister.setEnabled(false);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
// fire event
if (listenerFirstButton != null)
listenerFirstButton.firstButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, index));
}
});
// set previous button listener
btnPreviousRegister.addListener(new Button.ClickListener() {
public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
// set status register
register = bindingSource.prevItem();
int index = bindingSource.getIndex();
lblCountRegister.setCaption(index + "/" + bindingSource.size());
if (index == 1) {
btnFirstRegister.setEnabled(false);
btnPreviousRegister.setEnabled(false);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
}
else {
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
}
// fire event
if (listenerPreviousButton != null)
listenerPreviousButton.previousButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, index));
}
});
// set next button listener
btnNextRegister.addListener(new Button.ClickListener() {
public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
// set status register
register = bindingSource.nextItem();
int index = bindingSource.getIndex();
lblCountRegister.setCaption(index + "/" + bindingSource.size());
if (index == bindingSource.size()) {
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(false);
btnLastRegister.setEnabled(false);
}
else {
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
}
// fire event
if (listenerNextButton != null)
listenerNextButton.nextButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, index));
}
});
// set last button listener
btnLastRegister.addListener(new Button.ClickListener() {
public void buttonClick(com.vaadin.ui.Button.ClickEvent event) {
// set status register
register = bindingSource.lastItem();
int index = bindingSource.getIndex();
lblCountRegister.setCaption(bindingSource.getIndex() + "/" + bindingSource.size());
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(false);
btnLastRegister.setEnabled(false);
// fire event
if (listenerLastButton != null)
listenerLastButton.lastButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, index));
}
});
btnDownRegister.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// fire the index change if exist any register
if (bindingSource.getItemIds().size() > 0)
bindingSource.setItemId(this, true, bindingSource.getItemId());
// fire the app event if it's implemented
if (listenerDownButton != null)
listenerDownButton.downButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, 0));
}
});
btnUpRegister.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// fire the app event if it's implemented
if (listenerUpButton != null)
listenerUpButton.upButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, 0));
}
});
btnRefreshRegister.addListener(new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
if (listenerRefreshButton != null)
listenerRefreshButton.refreshButtonClick(new ClickNavigationEvent(event.getButton(), event.getComponent() , null, register, 0));
}
});
//setWidth("425px");
}
@Override
public int getPosition() {
return position;
}
@Override
public ComponentContainer getContent() {
return this.toolbarLayout;
}
@Override
public BindingSource<?> getBindingSource() {
return this.bindingSource;
}
@Override
public void setBindingSource(BindingSource<?> bindingSource) {
this.bindingSource = bindingSource;
// add change index binding source
if (bindingSource != null) {
bindingSource.addListenerToolBar((IndexChangeListener)this);
// initialize binding source
//bindingSource.Initialize();
}
}
@Override
public void bindingSourceIndexChange(IndexChangeEvent event) {
if (bindingSource != null) {
lblCountRegister.setCaption(Integer.toString(event.getIndex() + 1) + "/" + bindingSource.size());
// set horizontal status navigation buttons
if (event.getIndex() == -1) {
btnFirstRegister.setEnabled(false);
btnPreviousRegister.setEnabled(false);
btnNextRegister.setEnabled(false);
btnLastRegister.setEnabled(false);
}
else if (event.getIndex() == 0) {
btnFirstRegister.setEnabled(false);
btnPreviousRegister.setEnabled(false);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
}
else if (event.getIndex() == bindingSource.size() - 1){
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(false);
btnLastRegister.setEnabled(false);
}
else {
btnFirstRegister.setEnabled(true);
btnPreviousRegister.setEnabled(true);
btnNextRegister.setEnabled(true);
btnLastRegister.setEnabled(true);
}
// TODO: check the slide level
// set level status navigation buttons
if (viewContainer != null && bindingSource.getLevel() == viewContainer.getSliderView().getViewCount() - 1) {
btnDownRegister.setEnabled(false);
btnUpRegister.setEnabled(true);
}
else if (bindingSource.getLevel() == 0) {
btnDownRegister.setEnabled(true);
btnUpRegister.setEnabled(false);
}
else {
btnDownRegister.setEnabled(true);
btnUpRegister.setEnabled(true);
}
}
}
public boolean getNavigationButtons() {
return this.navigationButtons;
}
public void setNavigationButtons(boolean visible) {
this.navigationButtons = visible;
btnFirstRegister.setVisible(visible);
btnPreviousRegister.setVisible(visible);
btnNextRegister.setVisible(visible);
btnLastRegister.setVisible(visible);
lblCountRegister.setVisible(visible);
}
public void setDownButton(boolean visible) {
this.btnDownRegister.setVisible(visible);
}
public boolean getDownButton() {
return this.btnDownRegister.isVisible();
}
public void setUpButton(boolean visible) {
this.btnUpRegister.setVisible(visible);
}
public boolean getUpButton() {
return this.btnUpRegister.isVisible();
}
public void addListenerFirstButton(ClickFirstButtonListener listener) {
this.listenerFirstButton = listener;
}
public void addListenerPreviousButton(ClickPreviousButtonListener listener) {
this.listenerPreviousButton = listener;
}
public void addListenerNextButton(ClickNextButtonListener listener) {
this.listenerNextButton = listener;
}
public void addListenerLastButton(ClickLastButtonListener listener) {
this.listenerLastButton = listener;
}
public void addListenerDownButton(ClickDownButtonListener listener) {
this.listenerDownButton = listener;
}
public void addListenerUpButton(ClickUpButtonListener listener) {
this.listenerUpButton = listener;
}
public void addListenerRefreshButton(ClickRefreshButtonListener listener) {
this.listenerRefreshButton = listener;
}
// navigation listener toolbar
public interface ClickFirstButtonListener extends Serializable {
public void firstButtonClick(ClickNavigationEvent event);
}
public interface ClickPreviousButtonListener extends Serializable {
public void previousButtonClick(ClickNavigationEvent event);
}
public interface ClickNextButtonListener extends Serializable {
public void nextButtonClick(ClickNavigationEvent event);
}
public interface ClickLastButtonListener extends Serializable {
public void lastButtonClick(ClickNavigationEvent event);
}
public interface ClickDownButtonListener extends Serializable {
public void downButtonClick(ClickNavigationEvent event);
}
public interface ClickUpButtonListener extends Serializable {
public void upButtonClick(ClickNavigationEvent event);
}
public interface ClickRefreshButtonListener extends Serializable {
public void refreshButtonClick(ClickNavigationEvent event);
}
public class ClickNavigationEvent extends ClickEvent {
private int index;
private Object register;
public ClickNavigationEvent(Button button, Component source) {
button.super(source);
}
public ClickNavigationEvent(Button button, Component source, MouseEventDetails details) {
button.super(source, details);
}
public ClickNavigationEvent(Button button, Component source, MouseEventDetails details, Object register, int index) {
button.super(source, details);
this.index = index;
this.register = register;
}
public int getIndex() {
return this.index;
}
public Object getRegister() {
return this.register;
}
}
@AutoGenerated
private void buildMainLayout() {
// toolbarLayout
toolbarLayout = buildToolbarLayout();
addComponent(toolbarLayout);
}
@AutoGenerated
private HorizontalLayout buildToolbarLayout() {
// common part: create layout
toolbarLayout = new HorizontalLayout();
toolbarLayout.setImmediate(false);
toolbarLayout.setSpacing(true);
// btnFirstRegister
ButtonGroup rowNav = new ButtonGroup();
toolbarLayout.addComponent(rowNav);
btnFirstRegister = new Button();
btnFirstRegister
.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-stop-180.png"));
btnFirstRegister.setImmediate(true);
btnFirstRegister.setWidth("-1px");
btnFirstRegister.setHeight("-1px");
rowNav.addButton(btnFirstRegister);
// btnPreviousRegister
btnPreviousRegister = new Button();
btnPreviousRegister.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-180.png"));
btnPreviousRegister.setImmediate(true);
btnPreviousRegister.setWidth("-1px");
btnPreviousRegister.setHeight("-1px");
rowNav.addButton(btnPreviousRegister);
// lblCountRegister
lblCountRegister = new Button();
lblCountRegister.setImmediate(false);
lblCountRegister.setCaption("1/1");
lblCountRegister.setStyleName("counter");
lblCountRegister.setEnabled(false);
rowNav.addButton(lblCountRegister);
// btnNextRegister
btnNextRegister = new Button();
btnNextRegister.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow.png"));
btnNextRegister.setImmediate(true);
btnNextRegister.setWidth("-1px");
btnNextRegister.setHeight("-1px");
rowNav.addButton(btnNextRegister);
// btnLastRegister
btnLastRegister = new Button();
btnLastRegister.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-stop.png"));
btnLastRegister.setImmediate(true);
btnLastRegister.setWidth("-1px");
btnLastRegister.setHeight("-1px");
rowNav.addButton(btnLastRegister);
// btnDownRegister
ButtonGroup masterDetailNav = new ButtonGroup();
toolbarLayout.addComponent(masterDetailNav);
btnDownRegister = new Button();
btnDownRegister.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-270.png"));
btnDownRegister.setImmediate(true);
btnDownRegister.setWidth("-1px");
btnDownRegister.setHeight("-1px");
masterDetailNav.addButton(btnDownRegister);
// btnUpRegister
btnUpRegister = new Button();
btnUpRegister.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-090.png"));
btnUpRegister.setImmediate(true);
btnUpRegister.setWidth("-1px");
btnUpRegister.setHeight("-1px");
masterDetailNav.addButton(btnUpRegister);
// btnRefreshRegister
btnRefreshRegister = new Button();
btnRefreshRegister
.setIcon(new ThemeResource(
"../konekti/images/icons/navigation-toolbar/arrow-circle-double.png"));
btnRefreshRegister.setImmediate(true);
btnRefreshRegister.setWidth("-1px");
btnRefreshRegister.setHeight("-1px");
toolbarLayout.addComponent(btnRefreshRegister);
toolbarLayout.setExpandRatio(btnRefreshRegister, 1.0f);
return toolbarLayout;
}
@Override
protected void updateLabels() {
btnFirstRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnFirstRegister.description"));
btnNextRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnFirstRegister.description"));
btnPreviousRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnPreviousRegister.description"));
btnLastRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnLastRegister.description"));
btnRefreshRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnRefreshRegister.description"));
btnDownRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnDownRegister.description"));
btnUpRegister.setDescription(getI18N().getMessage("com.thingtrack.konekti.view.addon.ui.NavigationToolbar.btnUpRegister.description"));
}
}