package org.sigmah.client.ui.view.pivot; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.button.Button; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.GwtEvent; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.HasValue; import org.sigmah.client.ui.res.icon.IconImageBundle; public class HistorySelector implements HasValue<Integer> { private Button prevButton; private Button nextButton; private HandlerManager handlerManager; private List<PivotLayout> layouts = new ArrayList<PivotLayout>(); private int curIndex = 0; public HistorySelector() { prevButton = new Button(null, IconImageBundle.ICONS.back(), new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { prev(); } }); nextButton = new Button(null, IconImageBundle.ICONS.forward(), new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { next(); } }); prevButton.disable(); nextButton.disable(); handlerManager = new HandlerManager(this); } public List<PivotLayout> getLayouts() { return layouts; } public void setLayouts(List<PivotLayout> layouts) { this.layouts = layouts; } private void prev() { setValue(curIndex-1); enableButtons(); } private void next() { setValue(curIndex+1); enableButtons(); } private void enableButtons() { if(layouts.isEmpty()) { nextButton.disable(); prevButton.disable(); } else { prevButton.setEnabled(curIndex > 0); nextButton.setEnabled(curIndex+1 != layouts.size()); } } public Button getPrevButton() { return prevButton; } public void setPrevButton(Button prevButton) { this.prevButton = prevButton; } public Button getNextButton() { return nextButton; } public void setNextButton(Button nextButton) { this.nextButton = nextButton; } @Override public HandlerRegistration addValueChangeHandler( ValueChangeHandler<Integer> handler) { return handlerManager.addHandler(ValueChangeEvent.getType(), handler); } @Override public void fireEvent(GwtEvent<?> event) { handlerManager.fireEvent(event); } @Override public Integer getValue() { return curIndex; } public PivotLayout getCurrentLayout() { return layouts.isEmpty() ? null : layouts.get(curIndex); } @Override public void setValue(Integer value) { setValue(value, true); } @Override public void setValue(Integer value, boolean fireEvents) { ValueChangeEvent.fireIfNotEqual(this, this.curIndex, value); this.curIndex = value; enableButtons(); } public void onNewLayout(PivotLayout layout) { while(layouts.size() > curIndex+1) { layouts.remove(curIndex+1); } layouts.add(layout); curIndex = layouts.size()-1; enableButtons(); } }