/******************************************************************************* * Copyright (C) 2011 Angelo Zerr <angelo.zerr@gmail.com>, Pascal Leclercq <pascal.leclercq@gmail.com> * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo ZERR - initial API and implementation * Pascal Leclercq - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.widgets.pagination.renderers.pagesize; import java.util.Locale; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.nebula.widgets.pagination.AbstractPageControllerComposite; import org.eclipse.nebula.widgets.pagination.PageableController; import org.eclipse.nebula.widgets.pagination.Resources; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; /** * This SWT {@link Composite} display a SWT {@link Combo} which is populate with * several page list that it can be select to change the page size of the linked * pagination controller. * */ public class PageSizeComboRenderer extends AbstractPageControllerComposite implements SelectionListener { private static class InternalLabelProvider extends LabelProvider { private static final ILabelProvider INSTANCE = new InternalLabelProvider(); public static ILabelProvider getInstance() { return INSTANCE; } } private ComboViewer comboViewer; private Label itemsPerPageLabel; public PageSizeComboRenderer(Composite parent, int style, PageableController controller, Integer[] pageSizeList) { super(parent, style, controller); comboViewer.setInput(pageSizeList); } /* * (non-Javadoc) * * @see * org.eclipse.nebula.widgets.pagination.PageChangedListener#pageIndexChanged * (int, int, org.eclipse.nebula.widgets.pagination.PaginationController) */ public void pageIndexChanged(int oldPageIndex, int newPageIndex, PageableController controller) { Integer selected = getSelectedPageSize(); if (selected == null) { selectPageSize(controller.getPageSize()); } } /* * (non-Javadoc) * * @see org.eclipse.nebula.widgets.pagination.PageChangedListener# * totalElementsChanged(long, long, * org.eclipse.nebula.widgets.pagination.PaginationController) */ public void totalElementsChanged(long oldTotalElements, long newTotalElements, PageableController controller) { // Do nothing. } /* * (non-Javadoc) * * @see * org.eclipse.nebula.widgets.pagination.PageChangedListener#sortChanged * (java.lang.String, java.lang.String, int, int, * org.eclipse.nebula.widgets.pagination.PaginationController) */ public void sortChanged(String oldPopertyName, String propertyName, int oldSortDirection, int sortDirection, PageableController paginationController) { // Do nothing. } /* * (non-Javadoc) * * @see * org.eclipse.nebula.widgets.pagination.PageChangedListener#pageSizeChanged * (int, int, org.eclipse.nebula.widgets.pagination.PaginationController) */ public void pageSizeChanged(int oldPageSize, int newPageSize, PageableController paginationController) { selectPageSize(newPageSize); } @Override protected void createUI(Composite parent) { GridLayout layout = new GridLayout(2, false); layout.marginWidth = 0; layout.marginHeight = 0; this.setLayout(layout); itemsPerPageLabel = new Label(parent, SWT.NONE); itemsPerPageLabel.setText(Resources.getText( Resources.PaginationRenderer_itemsPerPage, getLocale())); itemsPerPageLabel.setLayoutData(new GridData()); comboViewer = new ComboViewer(parent, SWT.READ_ONLY); comboViewer.setContentProvider(ArrayContentProvider.getInstance()); comboViewer.setLabelProvider(InternalLabelProvider.getInstance()); comboViewer.getCombo().setLayoutData( new GridData(GridData.FILL_HORIZONTAL)); comboViewer.getCombo().addSelectionListener(this); } @Override public void dispose() { comboViewer.getCombo().removeSelectionListener(this); super.dispose(); } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { int pageSize = Integer.parseInt(comboViewer.getCombo().getItem( comboViewer.getCombo().getSelectionIndex())); getController().setPageSize(pageSize); } private void selectPageSize(int pageSize) { comboViewer.setSelection(new StructuredSelection(pageSize)); } private Integer getSelectedPageSize() { if (comboViewer.getSelection().isEmpty()) { return null; } return (Integer) ((IStructuredSelection) comboViewer.getSelection()) .getFirstElement(); } @Override public void setLocale(Locale locale) { super.setLocale(locale); itemsPerPageLabel.setText(Resources.getText( Resources.PaginationRenderer_itemsPerPage, getLocale())); } }