// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.widgets;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.events.VerifyEvent;
import org.eclipse.swt.events.VerifyListener;
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.Label;
import org.eclipse.swt.widgets.Text;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.image.EImage;
import com.amalto.workbench.image.ImageCache;
public class PageingToolBar {
int pagesize = 20;
int page = 1;
int totalsize;
int totalpage;
Composite parent;
WidgetFactory toolkit = WidgetFactory.getWidgetFactory();
private Label displayItems;
private Text pageSizeText;
private Button refreshBtn;
private Label totalPage;
private Button firstPageBtn;
private Button prevPageBtn;
private Text pageText;
private Button nextPageBtn;
private Button lastPageBtn;
IPagingListener listener;
public void setPageingListener(IPagingListener listener) {
this.listener = listener;
}
public PageingToolBar(Composite parent) {
this.parent = parent;
create();
}
public int getStart() {
return (page - 1) * pagesize;
}
public int getLimit() {
return pagesize;
}
public int getTotalsize() {
return totalsize;
}
public void setTotalsize(int totalsize) {
this.totalsize = totalsize;
totalpage = totalsize % pagesize == 0 ? totalsize / pagesize : totalsize / pagesize + 1;
}
public void reset() {
pagesize = 20;
page = 1;
totalsize = 0;
totalpage = 0;
refreshUI();
}
public PageingToolBar(Composite parent, int pagesize, int page, int totalsize) {
this.parent = parent;
this.page = page;
this.pagesize = pagesize;
this.totalsize = totalsize;
totalpage = totalsize % pagesize == 0 ? totalsize / pagesize : totalsize / pagesize + 1;
create();
}
KeyListener keylistener = new KeyListener() {
public void keyReleased(KeyEvent e) {
if (e.keyCode == SWT.CR) {
doSearchAndRefresh();
}
}
public void keyPressed(KeyEvent e) {
}
};
VerifyListener validator = new VerifyListener() {
public void verifyText(VerifyEvent e) {
String pattern = "[0-9]*"; //$NON-NLS-1$
if (!e.text.matches(pattern)) {
e.doit = false;
}
}
};
SelectionListener selListener = new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
doSearchAndRefresh();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
};
private void doSearchAndRefresh() {
if (isPageNumValid()) {
page = Integer.valueOf(pageText.getText());
pagesize = Integer.valueOf(pageSizeText.getText());
totalpage = totalsize / pagesize + 1;
if (listener != null) {
listener.doSearch();
}
refreshUI();
}
}
private boolean isPageNumValid() {
page = Integer.valueOf(pageText.getText());
pagesize = Integer.valueOf(pageSizeText.getText());
if (pagesize == 0) {
MessageDialog.openWarning(getComposite().getShell(), Messages.Warning,
Messages.PageingToolBar_greaterThanZero);
return false;
}
totalpage = totalsize % pagesize == 0 ? totalsize / pagesize : totalsize / pagesize + 1;
totalPage.setText(Messages.bind(Messages.PageingToolBar_LabelText, totalpage));
if (totalpage == 0) {
return false;
}
if (page == 0) {
MessageDialog.openWarning(getComposite().getShell(), Messages.Warning,
Messages.bind(Messages.PageingToolBar_invalidNumber, totalpage));
return false;
}
boolean valid = (page * pagesize <= totalsize) || ((page - 1) * pagesize < totalsize && page * pagesize > totalsize);
if (!valid) {
MessageDialog.openWarning(getComposite().getShell(), Messages.Warning,
Messages.bind(Messages.PageingToolBar_invalidNumber, totalpage));
}
return valid;
}
private Composite comp;
public Composite getComposite() {
return comp;
}
private void create() {
comp = toolkit.createComposite(parent);
GridLayout layout = new GridLayout(15, false);
layout.marginBottom = 0;
layout.marginTop = 0;
layout.marginHeight = 0;
layout.marginWidth = 0;
comp.setLayout(layout);
// firstpage
GridData gd = new GridData();
firstPageBtn = toolkit.createButton(comp, "", SWT.PUSH);//$NON-NLS-1$
firstPageBtn.setToolTipText(Messages.PageingToolBar_FirstPage);
firstPageBtn.setImage(ImageCache.getCreatedImage("icons/page-first.gif"));//$NON-NLS-1$
firstPageBtn.setLayoutData(gd);
// previous page
gd = new GridData();
prevPageBtn = toolkit.createButton(comp, "", SWT.PUSH);//$NON-NLS-1$
prevPageBtn.setToolTipText(Messages.PageingToolBar_PrePage);
prevPageBtn.setImage(ImageCache.getCreatedImage("icons/page-prev.gif"));//$NON-NLS-1$
prevPageBtn.setLayoutData(gd);
// page
// Button btn=toolkit.createButton(comp, "", SWT.SEPARATOR);
// gd=new GridData();
// btn.setLayoutData(gd);
Label label = toolkit.createLabel(comp, Messages.PageingToolBar_Page, SWT.NULL);
gd = new GridData();
label.setLayoutData(gd);
pageText = toolkit.createText(comp, "" + page);//$NON-NLS-1$
gd = new GridData();
gd.widthHint = 25;
pageText.setLayoutData(gd);
pageText.addKeyListener(keylistener);
pageText.addVerifyListener(validator);
totalPage = toolkit.createLabel(comp, Messages.bind(Messages.PageingToolBar_LabelText, totalpage), SWT.NULL);
gd = new GridData();
totalPage.setLayoutData(gd);
// Button btn1=toolkit.createButton(comp, "", SWT.SEPARATOR);
// gd=new GridData();
// btn1.setLayoutData(gd);
// nextpage
gd = new GridData();
nextPageBtn = toolkit.createButton(comp, "", SWT.PUSH);//$NON-NLS-1$
nextPageBtn.setToolTipText(Messages.PageingToolBar_NextPage);
nextPageBtn.setImage(ImageCache.getCreatedImage("icons/page-next.gif"));//$NON-NLS-1$
nextPageBtn.setLayoutData(gd);
// last page
gd = new GridData();
lastPageBtn = toolkit.createButton(comp, "", SWT.PUSH);//$NON-NLS-1$
lastPageBtn.setToolTipText(Messages.PageingToolBar_LastPage);
lastPageBtn.setImage(ImageCache.getCreatedImage("icons/page-last.gif"));//$NON-NLS-1$
lastPageBtn.setLayoutData(gd);
// refresh
// Button btn2=toolkit.createButton(comp, "", SWT.SEPARATOR);
// gd=new GridData();
// btn2.setLayoutData(gd);
refreshBtn = toolkit.createButton(comp, "", SWT.PUSH); //$NON-NLS-1$
gd = new GridData();
refreshBtn.setToolTipText(Messages.PageingToolBar_Refresh);
refreshBtn.setLayoutData(gd);
refreshBtn.setImage(ImageCache.getCreatedImage(EImage.REFRESH.getPath()));
// Button btn3=toolkit.createButton(comp, "", SWT.SEPARATOR);
// gd=new GridData();
// btn3.setLayoutData(gd);
// page size
Label label3 = toolkit.createLabel(comp, Messages.PageingToolBar_LineNumberOfPage, SWT.NULL);
gd = new GridData();
label3.setLayoutData(gd);
pageSizeText = toolkit.createText(comp, "" + pagesize);//$NON-NLS-1$
gd = new GridData();
gd.widthHint = 25;
pageSizeText.setLayoutData(gd);
pageSizeText.addKeyListener(keylistener);
pageSizeText.addVerifyListener(validator);
// display items
displayItems = toolkit.createLabel(comp, "");//$NON-NLS-1$
gd = new GridData(SWT.RIGHT, SWT.CENTER, true, true);
displayItems.setLayoutData(gd);
// add sellistener
firstPageBtn.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
page = 1;
if (listener != null) {
listener.doSearch();
}
refreshUI();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
prevPageBtn.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
page = page - 1 <= 1 ? 1 : page - 1;
if (listener != null) {
listener.doSearch();
}
refreshUI();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
nextPageBtn.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
page = page + 1 >= totalpage ? totalpage : page + 1;
if (listener != null) {
listener.doSearch();
}
refreshUI();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
lastPageBtn.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
page = totalpage;
if (listener != null) {
listener.doSearch();
}
refreshUI();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
refreshBtn.addSelectionListener(selListener);
}
public void refreshUI() {
long count = page * pagesize > totalsize ? totalsize : page * pagesize;
displayItems.setText(Messages.bind(Messages.PageingToolBar_DisplayText,
((page - 1) * pagesize + 1) + "", "" + count, "" + totalsize));//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
pageSizeText.setText("" + pagesize);//$NON-NLS-1$
pageText.setText("" + page);//$NON-NLS-1$
totalPage.setText(Messages.bind(Messages.PageingToolBar_LabelText, totalpage));
if (page <= 1) {
firstPageBtn.setImage(ImageCache.getCreatedImage("icons/page-first-disabled.gif"));//$NON-NLS-1$
prevPageBtn.setImage(ImageCache.getCreatedImage("icons/page-prev-disabled.gif"));//$NON-NLS-1$
firstPageBtn.setEnabled(false);
prevPageBtn.setEnabled(false);
} else {
firstPageBtn.setImage(ImageCache.getCreatedImage("icons/page-first.gif"));//$NON-NLS-1$
prevPageBtn.setImage(ImageCache.getCreatedImage("icons/page-prev.gif"));//$NON-NLS-1$
firstPageBtn.setEnabled(true);
prevPageBtn.setEnabled(true);
}
if (page >= totalpage) {
nextPageBtn.setImage(ImageCache.getCreatedImage("icons/page-next-disabled.gif"));//$NON-NLS-1$
lastPageBtn.setImage(ImageCache.getCreatedImage("icons/page-last-disabled.gif"));//$NON-NLS-1$
nextPageBtn.setEnabled(false);
lastPageBtn.setEnabled(false);
} else {
nextPageBtn.setImage(ImageCache.getCreatedImage("icons/page-next.gif"));//$NON-NLS-1$
lastPageBtn.setImage(ImageCache.getCreatedImage("icons/page-last.gif"));//$NON-NLS-1$
nextPageBtn.setEnabled(true);
lastPageBtn.setEnabled(true);
}
}
}