📄 recordviewer.java
字号:
fd.right = new FormAttachment(lblMonthChar, 21, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
fd.bottom = new FormAttachment(0, 10);
btnMonthUp.setLayoutData(fd);
btnMonthUp.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(month > 1) {
month--;
lblMonth.setText(String.valueOf(month));
if(!chkDisplayAll.getSelection())
refreshRecord(false);
}
}
}
);
// 调整月的下按钮
Button btnMonthDown = new Button(this, SWT.ARROW | SWT.DOWN);
fd = new FormData();
fd.left = new FormAttachment(lblMonthChar, 1, SWT.RIGHT);
fd.right = new FormAttachment(lblMonthChar, 21, SWT.RIGHT);
fd.top = new FormAttachment(btnMonthUp, 0, SWT.BOTTOM);
fd.bottom = new FormAttachment(btnMonthUp, 10, SWT.BOTTOM);
btnMonthDown.setLayoutData(fd);
btnMonthDown.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(month < 12) {
month++;
lblMonth.setText(String.valueOf(month));
if(!chkDisplayAll.getSelection())
refreshRecord(false);
}
}
}
);
// 日标签
lblDay = new Label(this, SWT.RIGHT);
lblDay.setText(String.valueOf(day));
fd = new FormData();
fd.left = new FormAttachment(btnMonthUp, 5, SWT.RIGHT);
fd.right = new FormAttachment(btnMonthUp, 25, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
lblDay.setLayoutData(fd);
Label lblDayChar = new Label(this, SWT.NONE);
lblDayChar.setText(LumaQQ.getResourceString("record.viewer.label.day"));
fd = new FormData();
fd.left = new FormAttachment(lblDay, 0, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
lblDayChar.setLayoutData(fd);
// 调整日的上按钮
Button btnDayUp = new Button(this, SWT.ARROW | SWT.UP);
fd = new FormData();
fd.left = new FormAttachment(lblDayChar, 1, SWT.RIGHT);
fd.right = new FormAttachment(lblDayChar, 21, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
fd.bottom = new FormAttachment(0, 10);
btnDayUp.setLayoutData(fd);
btnDayUp.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(day > 1) {
day--;
lblDay.setText(String.valueOf(day));
if(!chkDisplayAll.getSelection())
refreshRecord(false);
}
}
}
);
// 调整日的下按钮
Button btnDayDown = new Button(this, SWT.ARROW | SWT.DOWN);
fd = new FormData();
fd.left = new FormAttachment(lblDayChar, 1, SWT.RIGHT);
fd.right = new FormAttachment(lblDayChar, 21, SWT.RIGHT);
fd.top = new FormAttachment(btnDayUp, 0, SWT.BOTTOM);
fd.bottom = new FormAttachment(btnDayUp, 10, SWT.BOTTOM);
btnDayDown.setLayoutData(fd);
btnDayDown.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(day < 31) {
day++;
lblDay.setText(String.valueOf(day));
if(!chkDisplayAll.getSelection())
refreshRecord(false);
}
}
}
);
// 的消息标签
Label lblRecord = new Label(this, SWT.NONE);
lblRecord.setText(LumaQQ.getResourceString("record.viewer.label.record"));
fd = new FormData();
fd.left = new FormAttachment(btnDayUp, 5, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
lblRecord.setLayoutData(fd);
// 显示所有check box
chkDisplayAll = new Button(this, SWT.CHECK);
chkDisplayAll.setText(LumaQQ.getResourceString("record.viewer.button.display.all"));
fd = new FormData();
fd.left = new FormAttachment(lblRecord, 5, SWT.RIGHT);
fd.top = new FormAttachment(0, 0);
chkDisplayAll.setLayoutData(fd);
chkDisplayAll.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
refreshRecord(chkDisplayAll.getSelection());
}
}
);
// 聊天记录表
recordTable = new Table(this, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.FULL_SELECTION);
fd = new FormData();
fd.left = new FormAttachment(0, 0);
fd.right = fd.bottom = new FormAttachment(100, 0);
fd.top = new FormAttachment(btnYearDown, 1, SWT.BOTTOM);
recordTable.setLayoutData(fd);
// tableitem双击事件监听器
recordTable.addSelectionListener(
new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
fireSelected(e);
}
public void widgetDefaultSelected(SelectionEvent e) {
fireDefaultSelectedEvent(e);
}
}
);
// 添加表格的鼠标事件
recordTable.addMouseListener(
new MouseAdapter() {
public void mouseDown(MouseEvent e) {
if(e.button == 3)
popupMenu(e);
}
}
);
// layout, 为了伺候linux
layout();
}
/**
* 弹出菜单
* @param e
*/
private void popupMenu(MouseEvent e) {
recordMenu.setLocation(recordTable.toDisplay(e.x, e.y));
recordMenu.setVisible(true);
}
// 触发选择事件
protected void fireSelected(SelectionEvent e) {
int size = listeners.size();
for(int i = 0; i < size; i++)
((SelectionListener)listeners.get(i)).widgetSelected(e);
}
// 触发缺省选择事件
protected void fireDefaultSelectedEvent(SelectionEvent e) {
int size = listeners.size();
for(int i = 0; i < size; i++)
((SelectionListener)listeners.get(i)).widgetDefaultSelected(e);
}
/**
* 设置聊天记录表中的内容,显示的是当前年月日的记录,如果设置了显示
* 所有,则显示所有记录
* @param displayAll true时表示显示所有
*/
public void refreshRecord(boolean displayAll) {
if(mm == null || formatter == null) return;
// 清除所有
recordTable.removeAll();
List list = null;
// 得到消息列表
if(displayAll)
list = mm.getMessages(qqNum);
else
list = mm.getMessages(qqNum, year, month, day);
// 设置表中的内容,通过一个接口,接口的实现由用户自定
Iterator iter = list.iterator();
while(iter.hasNext()) {
MessageEntry me = (MessageEntry)iter.next();
String[] texts = formatter.format(me);
if(texts != null) {
TableItem ti = new TableItem(recordTable, SWT.NONE);
ti.setText(texts);
ti.setData(me);
}
}
}
/**
* @return Returns the mm.
*/
public IMessage getMm() {
return mm;
}
/**
* @param mm The mm to set.
*/
public void setMessageManager(IMessage mm) {
this.mm = mm;
}
/**
* @return Returns the formatter.
*/
public IRecordFormatter getFormatter() {
return formatter;
}
/**
* @param formatter The formatter to set.
*/
public void setFormatter(IRecordFormatter formatter) {
this.formatter = formatter;
}
/**
* 设置记录表的表头
* @param columns
*/
public void setTableColumn(String[] columns) {
for(int i = 0; i < columns.length; i++) {
TableColumn tc = new TableColumn(recordTable, SWT.LEFT);
tc.setText(columns[i]);
}
recordTable.setHeaderVisible(true);
}
/**
* 设置表头的宽度
* @param width
*/
public void setTableColumnWidth(int[] width) {
for(int i = 0; i < width.length; i++)
recordTable.getColumn(i).setWidth(width[i]);
}
/**
* 用更灵活的方式设置表头的宽度
* @param width 包含了宽度的字符串数组,宽度的描述有3种形式
* 1. 数字,表示绝对宽度
* 2. 数字后面有一个百分号,表示相对宽度
* 3. 星号,表示改列占据所有未用宽度
*/
public void setTableColumnWidth(String[] width) {
if(rl == null)
rl = new ResizeListener(width);
else
rl.setWidth(width);
recordTable.removeControlListener(rl);
recordTable.addControlListener(rl);
}
/**
* @return 当前选择的项的相关的MessageEntry对象,如果当前没有Item被选,返回null
*/
public MessageEntry getSelectedMessageEntry() {
int index = recordTable.getSelectionIndex();
if(index != -1)
return (MessageEntry)recordTable.getItem(index).getData();
else
return null;
}
/**
* @return 当前选择的item
*/
public TableItem getSelectedItem() {
int index = recordTable.getSelectionIndex();
return (index == -1) ? null : recordTable.getItem(index);
}
/**
* 添加TableItem选择事件监听器
* @param listener
*/
public void addSelectionListener(SelectionListener listener) {
listeners.add(listener);
}
/**
* 除去TableItem选择事件监听器
* @param listener
*/
public void removeSelectionListener(SelectionListener listener) {
listeners.remove(listener);
}
/* (non-Javadoc)
* @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent)
*/
public void widgetDisposed(DisposeEvent e) {
clipboard.dispose();
}
/**
* 将表格卷滚到最后一个item处
*/
public void showLast() {
recordTable.setSelection(recordTable.getItemCount() - 1);
recordTable.showSelection();
}
/**
* @return Returns the qqNum.
*/
public int getQqNum() {
return qqNum;
}
/**
* @param qqNum The qqNum to set.
*/
public void setQqNum(int qqNum) {
this.qqNum = qqNum;
}
/**
* @return Returns the exporter.
*/
public IRecordExporter getExporter() {
return exporter;
}
/**
* @param exporter The exporter to set.
*/
public void setExporter(IRecordExporter exporter) {
this.exporter = exporter;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -