package com.cari.voip.keyboard.soft.views;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.part.ViewPart;
import com.cari.voip.keyboard.soft.Activator;
import com.cari.voip.keyboard.soft.model.switchUsers.SwitchUsersSession;
import com.cari.voip.keyboard.stack.CCKPConnection;
import com.cari.voip.keyboard.stack.ConnectionListener;
import com.cari.voip.keyboard.stack.events.Packet;
import com.cari.voip.keyboard.stack.events.ReplyListener;
import com.cari.voip.keyboard.stack.events.TrapEventListener;
public class EventView extends ViewPart {
public static final String ID_VIEW =
"com.cari.voip.keyboard.soft.views.EventView";
//private TableViewer tableViewer;
private Table table;
//private List revealListeners = null;
private TrapEventListener listener;
private final int MaxItemsNum = 50;
private ReplyListener replyListener;
public EventView() {
super();
this.listener = new TrapEventListener(){
public void processTrap(final Packet event){
//revealListeners.add(event);
Activator.getDisplay().asyncExec(new Runnable() {
public void run() {
if(table != null && event != null){
String[] des = event.getDiscription();
if(des != null){
if(table.getItemCount() > MaxItemsNum){
table.remove(0);
}
TableItem row = new TableItem(table,SWT.NONE);
row.setText(des);
table.setTopIndex(table.getItemCount()-1);
}
}
}
});
}
};
this.replyListener = new ReplyListener(){
public void processReply(final Packet command,final Packet reply){
Activator.getDisplay().asyncExec(new Runnable() {
public void run() {
if(reply != null && table != null){
String[] des = reply.getDiscription();
if(des != null){
if(table.getItemCount() > MaxItemsNum){
table.remove(0);
}
TableItem row = new TableItem(table,SWT.NONE);
row.setText(des);
table.setTopIndex(table.getItemCount()-1);
}
}
}
});
}
};
//revealListeners = new ArrayList(1);
}
@Override
public void createPartControl(Composite parent) {
//parent.setLayout(new GridLayout(1,true));
createTableViewer(parent);
attachListener();
}
private void attachListener() {
SwitchUsersSession session = Activator.getSwitchUsersSession();
if(session != null){
CCKPConnection connection = session.getConnection();
if(connection != null){
connection.addTrapEventListeners(this.listener, null);
connection.addReplyListeners(this.replyListener, null);
}
}
}
private void detachListener(){
SwitchUsersSession session = Activator.getSwitchUsersSession();
if(session != null){
CCKPConnection connection = session.getConnection();
if(connection != null){
connection.removeReplyListeners(replyListener);
connection.removeTrapEventListeners(listener);
}
}
}
private void createTableViewer(Composite parent) {
table = new Table(parent,
SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
//table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.setHeaderVisible(true);
table.setLinesVisible(true);
/*table.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
if (!revealListeners.isEmpty()) {
// Go through the reveal list and let everyone know that the
// view is now available. Remove the listeners so they are
// only
// called once!
Iterator iterator = revealListeners.iterator();
while (iterator.hasNext()) {
Packet event = (Packet) iterator.next();
if(event != null && table != null){
if(table.getItemCount() > MaxItemsNum){
table.remove(0);
}
TableItem row = new TableItem(table,SWT.NONE);
row.setText(event.getDiscription());
table.setTopIndex(table.getItemCount()-1);
}
iterator.remove();
}
}
}
});
*/
//table.setTopIndex(5);
TableColumn colEventType = new TableColumn(this.table,SWT.NONE);
colEventType.setText(" ");
//colEventType.setWidth(this.table.getSize().x/4);
TableColumn colEventContent = new TableColumn(this.table,SWT.NONE);
colEventContent.setText(" ");
//colEventContent.setWidth(this.table.getSize().x/4);
TableColumn colEventDiscription = new TableColumn(this.table,SWT.NONE);
colEventDiscription.setText(" ");
//colEventDiscription.setWidth(this.table.getSize().x-colEventType.getWidth()-colEventContent.getWidth()-1);
colEventType.pack();
colEventContent.pack();
colEventDiscription.pack();
/*TableItem row = new TableItem(table,SWT.NONE);
row.setText(new String[]{"trap","1000ע��"});
for(int i = 0;i<60;i++){
if(this.table.getItemCount() > this.MaxItemsNum){
this.table.remove(0);
}
row = new TableItem(table,SWT.NONE);
//row.setText(new String[]{"replyreplyreply"+String.valueOf(i),"����ok"});
row.setText("����ok");
}
table.setTopIndex(table.getItemCount()-1);*/
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
public void dispose() {
detachListener();
super.dispose();
}
}