/**
* PagingPanel.java
* Created On 2007, May 24, 2007 5:23:14 PM
* @author E. Rajasekar
*/
package app.astrosoft.ui.comp;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import app.astrosoft.consts.DisplayStrings;
import app.astrosoft.ui.table.AstrosoftTableModel;
import app.astrosoft.ui.table.TableRowData;
import app.astrosoft.ui.util.UIConsts;
import app.astrosoft.ui.util.UIUtil;
public class PagingPanel<E extends TableRowData> extends JPanel {
private static Dimension btnSize = new Dimension(20,20);
private static Dimension comboSize = new Dimension(50,20);
private AstrosoftTableModel tableModel;
private Pagination<E> pagination;
private JButton prevBtn = new JButton();
private JButton nextBtn = new JButton();
private int [] pages = new int[]{5,10,15,20,25};
private JComboBox pageCombo = new JComboBox();
private JComboBox showCombo = new JComboBox();
private JLabel pageLabel = new JLabel(DisplayStrings.PAGE_STR.toString());
private JLabel showLabel = new JLabel(DisplayStrings.SHOW_STR.toString());
public PagingPanel(AstrosoftTableModel tableModel, Pagination<E> pagination ){
this.tableModel = tableModel;
this.pagination = pagination;
addComponents();
}
private void addComponents() {
setBackground(UIConsts.THEME_CLR);
for(int page:pages){
showCombo.addItem(page);
}
prevBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
previousButtonClicked();
}
});
nextBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
nextButtonClicked();
}
});
pageCombo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
pageChanged((Integer)e.getItem());
}
});
showCombo.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
pageLengthChanged((Integer)e.getItem());
}
});
showCombo.setSelectedItem(pagination.getPageLength());
prevBtn.setIcon(UIUtil.createImageIcon("prev"));
nextBtn.setIcon(UIUtil.createImageIcon("next"));
nextBtn.setBorder(BorderFactory.createEtchedBorder());
prevBtn.setBorder(BorderFactory.createEtchedBorder());
nextBtn.setPreferredSize(btnSize);
prevBtn.setPreferredSize(btnSize);
pageCombo.setPreferredSize(comboSize);
//showCombo.setPreferredSize(comboSize);
add(showLabel);
add(showCombo);
add(prevBtn);
add(pageLabel);
add(pageCombo);
add(nextBtn);
nextButtonClicked();
prevBtn.setEnabled(false);
}
protected void pageLengthChanged(Integer pageLength) {
pagination.setPageLength(pageLength);
nextButtonClicked();
prevBtn.setEnabled(false);
}
protected void pageChanged(int pageNo) {
tableModel.updateData(pagination.getPage(pageNo));
adjustControls();
}
private void nextButtonClicked() {
tableModel.updateData(pagination.getNextPage());
if (pageCombo.getItemCount() < pagination.getTotalPages()){
pageCombo.addItem(pagination.getTotalPages());
}
pageCombo.setSelectedItem(pagination.getCurrentPage());
adjustControls();
}
private void previousButtonClicked() {
tableModel.updateData(pagination.getPreviousPage());
pageCombo.setSelectedItem(pagination.getCurrentPage());
adjustControls();
}
public void setPagination(Pagination<E> pagination) {
this.pagination = pagination;
nextButtonClicked();
}
private void adjustControls(){
if (pagination.isFirstPage()){
prevBtn.setEnabled(false);
}
else {
prevBtn.setEnabled(true);
}
if (pagination.isLastPage()){
nextBtn.setEnabled(false);
}
else {
nextBtn.setEnabled(true);
}
}
}