📄 sendclusterimwindow.java
字号:
tiFont.setToolTipText(LumaQQ.getString("tooltip.button.font"));
tiFont.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
FontDialog dialog = new FontDialog(getShell());
if(main.getDefaultStyle() != null)
dialog.setFontList(main.getDefaultStyle().createFontData());
if(main.getFontColor() != null)
dialog.setRGB(main.getFontColor().getRGB());
dialog.open();
FontData[] fontList = dialog.getFontList();
if(fontList == null) return;
RGB rgb = dialog.getRGB();
if(main.getFontColor() != null) main.getFontColor().dispose();
main.getDefaultStyle().fontName = fontList[0].getName();
main.getDefaultStyle().fontSize = fontList[0].getHeight();
main.getDefaultStyle().fontStyle = fontList[0].getStyle();
if(rgb != null) {
main.setFontColor(new Color(main.getDisplay(), rgb));
main.getDefaultStyle().foreground = main.getFontColor();
}
inputBox.setDefaultStyle(main.getDefaultStyle());
}
});
// 颜色,在有些平台下需要
if(IS_GTK || IS_MOTIF) {
ToolItem tiColor = new ToolItem(tb, SWT.NONE);
tiColor.setImage(icons.getImage(IconHolder.icoColor));
tiColor.setToolTipText(LumaQQ.getString("tooltip.button.color"));
tiColor.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ColorDialog dialog = new ColorDialog(getShell());
if(main.getFontColor() != null)
dialog.setRGB(main.getFontColor().getRGB());
dialog.open();
RGB rgb = dialog.getRGB();
if(rgb != null) {
if(main.getFontColor() != null)
main.getFontColor().dispose();
if(rgb != null) {
main.setFontColor(new Color(main.getDisplay(), rgb));
main.getDefaultStyle().foreground = main.getFontColor();
}
}
inputBox.setDefaultStyle(main.getDefaultStyle());
}
});
}
// 表情
ToolItem tiFace = new ToolItem(tb, SWT.NONE);
tiFace.setImage(icons.getImage(IconHolder.icoSmiley));
tiFace.setToolTipText(LumaQQ.getString("tooltip.button.smiley"));
tiFace.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Rectangle bound = tb.getBounds();
openImageSelectionShell(tb.getParent().toDisplay(bound.x, bound.y + bound.height));
}
});
// 动画状态
ToolItem tiAnimation = new ToolItem(tb, SWT.CHECK);
tiAnimation.setImage(icons.getImage(IconHolder.icoStop));
tiAnimation.setToolTipText(LumaQQ.getString("tooltip.button.forbid.animation"));
tiAnimation.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ToolItem ti = (ToolItem)e.widget;
outputBox.setForbiddenAnimation(ti.getSelection());
inputBox.setForbiddenAnimation(ti.getSelection());
ti.setToolTipText(ti.getSelection() ? LumaQQ.getString("tooltip.button.animation") : LumaQQ.getString("tooltip.button.forbid.animation"));
}
});
inputForm.setTopLeft(tb);
ToolBar tbSwitch = new ToolBar(inputForm, SWT.FLAT);
tbSwitch.setBackground(Colors.VIEWFORM_BANNER_BACKGROUP);
ToolItem tiSwitch = new ToolItem(tbSwitch, SWT.NONE);
tiSwitch.setImage(icons.getImage(IconHolder.icoRightArrow));
tiSwitch.setToolTipText(LumaQQ.getString("tooltip.button.hide"));
inputForm.setTopRight(tbSwitch);
inputBox = new RichBox(inputForm);
inputBox.setBackground(Colors.WHITE);
inputForm.setContent(inputBox);
tiSwitch.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
ToolItem item = (ToolItem)e.getSource();
GridData gd = (GridData)sideContainer.getLayoutData();
if(gd.widthHint == 0) {
gd.widthHint = 140;
item.setImage(icons.getImage(IconHolder.icoRightArrow));
item.setToolTipText(LumaQQ.getString("tooltip.button.hide"));
} else {
gd.widthHint = 0;
item.setImage(icons.getImage(IconHolder.icoLeftArrow));
item.setToolTipText(LumaQQ.getString("tooltip.button.show"));
}
sideContainer.getParent().layout();
}
});
// 垂直sash
sash = new Sash(container, SWT.VERTICAL);
gd = new GridData(GridData.VERTICAL_ALIGN_FILL);
gd.verticalSpan = 2;
sash.setLayoutData(gd);
sash.setBackground(Colors.DIALOG_BACKGOUND);
sash.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
GridData gd = (GridData)sideContainer.getLayoutData();
GridLayout layout = (GridLayout)sideContainer.getParent().getLayout();
gd.widthHint = sideContainer.getParent().getClientArea().width - e.x - (layout.marginWidth << 1);
sideContainer.getParent().layout();
}
});
// 成员列表区
sideContainer = new Composite(container, SWT.NONE);
gd = new GridData(GridData.VERTICAL_ALIGN_FILL);
gd.verticalSpan = 2;
gd.widthHint = 140;
sideContainer.setLayoutData(gd);
layout = new GridLayout();
layout.marginHeight = layout.marginWidth = 1;
layout.horizontalSpacing = layout.verticalSpacing = 0;
sideContainer.setLayout(layout);
sideContainer.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Composite c = (Composite)e.getSource();
Rectangle rect = c.getClientArea();
rect.width--;
rect.height--;
if(rect.width > 0 && rect.height > 0) {
e.gc.setForeground(Colors.WIDGET_BORDER);
e.gc.drawRectangle(rect);
}
}
});
ViewForm listForm = new ViewForm(sideContainer, SWT.FLAT);
listForm.setLayoutData(new GridData(GridData.FILL_BOTH));
lblList = new CLabel(listForm, SWT.LEFT);
lblList.setImage(icons.getSmallClusterHead(6));
lblList.setBackground(Colors.VIEWFORM_BANNER_BACKGROUP);
setListLabel(model.getMembers().size(), 0);
listForm.setTopLeft(lblList);
listViewer = new TableViewer(listForm, SWT.SINGLE | SWT.V_SCROLL | SWT.FULL_SELECTION);
listViewer.setContentProvider(new MapValueContentProvider(model.getMembers()));
listViewer.setLabelProvider(new FriendModelLabelProvider());
listViewer.setSorter(new ModelSorter());
listViewer.setInput(this);
Table t = listViewer.getTable();
TableColumn tc = new TableColumn(t, SWT.LEFT);
t.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
Table t = (Table)e.getSource();
t.getColumn(0).setWidth(t.getClientArea().width);
}
});
t.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
if(e.button == 3) {
Table t = (Table)e.getSource();
memberMenu.setLocation(t.toDisplay(e.x, e.y));
memberMenu.setVisible(true);
}
}
});
t.addSelectionListener(new SelectionAdapter() {
public void widgetDefaultSelected(SelectionEvent e) {
IStructuredSelection selection = (IStructuredSelection)listViewer.getSelection();
if(!selection.isEmpty()) {
FriendModel f = (FriendModel)selection.getFirstElement();
main.getShellLauncher().openUserInfoWindow(f, UserInfoWindow.READ_ONLY);
main.getClient().getUserInfo(f.getQQ());
}
}
});
t.setHeaderVisible(false);
t.setLinesVisible(false);
listViewer.setInput(this);
listForm.setContent(t);
// 按钮区
Composite buttonContainer = new Composite(container, SWT.NONE);
gd = new GridData(GridData.FILL_HORIZONTAL);
buttonContainer.setLayoutData(gd);
layout = new GridLayout(4, false);
layout.marginHeight = layout.marginWidth = layout.verticalSpacing = layout.horizontalSpacing = 0;
buttonContainer.setLayout(layout);
buttonContainer.setBackground(container.getBackground());
QButton btnRecord = new QButton(buttonContainer);
btnRecord.setText(LumaQQ.getString("cluster.im.button.record"));
btnRecord.setLayoutData(new GridData());
btnRecord.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
showRecord();
}
});
QButton btnClose = new QButton(buttonContainer);
btnClose.setText(LumaQQ.getString("cluster.im.button.close"));
gd = new GridData(GridData.HORIZONTAL_ALIGN_END);
gd.grabExcessHorizontalSpace = true;
btnClose.setLayoutData(gd);
btnClose.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
closeAction.run();
}
});
final QButton btnSend = new QButton(buttonContainer);
btnSend.setText(LumaQQ.getString("cluster.im.button.send"));
gd = new GridData();
gd.horizontalIndent = 3;
btnSend.setLayoutData(gd);
btnSend.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
sendMessage(inputBox.getText());
}
});
QButton btnDropDown = new QButton(buttonContainer, SWT.ARROW_DOWN);
btnDropDown.setMarginWidth(0);
gd = new GridData();
gd.horizontalIndent = 1;
btnDropDown.setLayoutData(gd);
btnDropDown.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
// 设置菜单位置
Rectangle bound = btnSend.getBounds();
enterMenu.setLocation(btnSend.getParent().toDisplay(bound.x, bound.y + bound.height));
// 显示菜单
enterMenu.setVisible(true);
}
});
// 聊天记录面板
viewer = new RecordViewer(container, SWT.NONE);
viewer.setVisible(false);
viewer.setBackground(container.getBackground());
gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gd.horizontalSpan = 3;
gd.heightHint = 0;
viewer.setLayoutData(gd);
// 设置消息管理器、字符串格式化器,导出器
viewer.setMessageManager(main.getMessageManager());
viewer.setQQ(model.getClusterId());
viewer.setExporter(new ClusterMessageExporter(model));
viewer.setFormatter(new ClusterMessageFormatter(model));
// 添加表头
viewer.setTableColumn(new String[] { LumaQQ.getString("cluster.im.table.header.nick"), LumaQQ.getString("cluster.im.table.header.time"), LumaQQ.getString("cluster.im.table.header.message") });
viewer.setTableColumnWidth(new String[] { "80", "120", "*" });
// tableitem双击事件监听器
viewer.addSelectionListener(new SelectionAdapter() {
public void widgetDefaultSelected(SelectionEvent e) {
TableItem ti = viewer.getSelectedItem();
inputBox.setText(ti.getText(2));
}
});
// 初始化菜单
initEnterMenu();
initMemberMenu();
// 初始化快捷键设置
initKeyAction();
return container;
}
/**
* 打开表情选择窗口
*/
private void openImageSelectionShell(Point loc) {
ImageSelector fss = new ImageSelector(getShell(), new FaceImageProvider(main));
fss.setListener(this);
fss.setLocation(loc);
fss.open();
}
/**
* 初始化快捷键设置
*/
private void initKeyAction() {
// mod3 -> alt
inputBox.setUserKeyAction('C' | SWT.MOD3, closeAction);
inputBox.setUserKeyAction('S' | SWT.MOD3, sendAction);
inputBox.setUserKeyAction('H' | SWT.MOD3, showRecordAction);
// 发送消息的快捷键
if(OptionUtil.getInstance().isUseEnterInTalkMode()) {
inputBox.removeUserKeyAction(SWT.MOD1 | SWT.CR);
inputBox.setUserKeyAction(SWT.CR, sendAction);
inputBox.setKeyBinding(SWT.MOD1 | SWT.CR, RichBox.NEW_LINE);
} else {
inputBox.removeUserKeyAction(SWT.CR);
inputBox.setUserKeyAction(SWT.MOD1 | SWT.CR, sendAction);
inputBox.setKeyBinding(SWT.CR, RichBox.NEW_LINE);
}
}
/**
* 刷新群名称标签
*/
private void setClusterNameLabel() {
lblName.setImage(icons.getSmallClusterHead(model.getFaceId()));
if(model.isPermanent())
lblName.setText(model.getName() + " (" + model.getExternalId() + ')');
else
lblName.setText(model.getName());
}
/**
* 设置列表提示文本
*
* @param total
* 群内人数
* @param online
* 群内在线数
*/
private void setListLabel(int total, int online) {
lblList.setText(LumaQQ.getString("cluster.im.list.label", new Object[] { String.valueOf(online), String.valueOf(total) }));
}
/**
* 停止闪烁图标
*/
protected void stopBlinkImage() {
blinkRunnable.setStop(true);
}
/**
* 开始闪烁图标
*/
public void startBlinkImage() {
if(!blinkRunnable.isStop()) return;
blinkRunnable.setStop(false);
main.getDisplay().timerExec(0, blinkRunnable);
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#getShellStyle()
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -