package com.cxy.redisclient.presentation.component; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import com.cxy.redisclient.integration.ConfigFile; import com.cxy.redisclient.integration.I18nFile; import com.cxy.redisclient.presentation.RedisClient; public class PagingListener implements Listener { private Table table; public static int PAGE_SIZE = ConfigFile.getPagesize(); private IPage page; private int count; private boolean addHead = false; public PagingListener(Table table, IPage page){ this.table = table; this.page = page; this.count = (int) page.getCount(); table.setItemCount(count); this.addHead = false; } public PagingListener(Table table, IPage page, boolean addHead){ this.table = table; this.page = page; this.addHead = addHead; if(!addHead){ this.count = (int) page.getCount(); }else{ this.count = (int) page.getCount()+1; } this.table.setItemCount(count); } @Override public void handleEvent(Event event) { TableItem item = (TableItem) event.item; setPage(table.indexOf(item)); } private void setPage(int index) { TableItem item; int start; int end; if(!addHead){ start = index / PAGE_SIZE * PAGE_SIZE; end = Math.min(start + PAGE_SIZE, count); }else{ start = index / PAGE_SIZE * PAGE_SIZE-1; if(start < 0) start = 0; end = Math.min(start + PAGE_SIZE, count-1); } this.page.initPage(start, end); for (int i = start; i < end; i++) { if(!addHead) item = table.getItem (i); else{ item = table.getItem (i+1); } item.setText (this.page.getText(i)); } } public void setCount(){ this.count = (int) page.getCount(); if(count == 0) throw new RuntimeException(RedisClient.i18nFile.getText(I18nFile.KEYNOTEXIST)); table.setItemCount(count); } }