📄 mainshell.java
字号:
@Override
public void controlResized(ControlEvent e) {
Composite panel = (Composite)e.getSource();
Rectangle rect = panel.getClientArea();
int childrenHeight = 47 + 5 + 19 + 5 + 20 + 10 + 26;
int reference = (rect.height - childrenHeight) >> 1;
FormData fd = (FormData)lblLogo.getLayoutData();
fd.left.offset = (rect.width - 160) >> 1;
fd.top.offset = reference;
fd = (FormData)waitingPanelAnimator.getLayoutData();
fd.left.offset = (rect.width - 108) >> 1;
fd.top.offset = reference + 52;
fd = (FormData)waitingPanelHint.getLayoutData();
fd.left.offset = (rect.width - 160) >> 1;
fd.top.offset = reference + 47 + 5 + 19 + 5;
fd = (FormData)lblCancel.getLayoutData();
fd.left.offset = (rect.width - 90) >> 1;
fd.top.offset = reference + 47 + 5 + 19 + 5 + 20 + 10;
panel.layout();
}
});
return panel;
}
/**
* 设置等待面板的提示
*
* @param text
*/
public void setWaitingPanelHint(String text) {
waitingPanelHint.setText(text);
}
/**
* 停止等待面板的动画
*/
public void stopWaitingPanelAnimation() {
waitingPanelAnimator.stopAnimation();
}
/**
* 回复等待面板的动画
*/
public void resumeWaitingPanelAnimation() {
waitingPanelAnimator.resumeAnimation();
}
/**
* 初始化主面板
*
* @param body
*/
private Composite initMainPanel(Composite body) {
Composite panel = new Composite(body, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = layout.marginWidth = layout.horizontalSpacing = layout.verticalSpacing = 0;
panel.setLayout(layout);
viewContainer = new Composite(panel, SWT.NONE);
viewContainer.setLayoutData(new GridData(GridData.FILL_BOTH));
viewContainer.setLayout(new StackLayout());
viewContainer.setBackground(Colors.MAINSHELL_BACKGROUND);
// 初始化视图
views = new Control[2];
initFriendView();
initDiskView();
// expand bar
Label lblBar = new Label(panel, SWT.LEFT);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 4;
lblBar.setLayoutData(gd);
lblBar.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
boolean expanded = optionHelper.isBarExpanded();
Color color = null;
if(mouseOnBar)
color = new Color(display, 0xA2, 0xD3, 0x75);
else
color = new Color(display, 0x5E, 0xB6, 0xF6);
Label lbl = (Label)e.getSource();
Rectangle rect = lbl.getBounds();
rect.x = rect.y = 0;
e.gc.setBackground(color);
e.gc.fillRectangle(rect);
color.dispose();
int middle = rect.width >> 1;
color = new Color(display, 0x39, 0x69, 0xB9);
e.gc.setForeground(color);
if(expanded) {
e.gc.drawLine(middle - 3, 0, middle + 2, 0);
e.gc.drawLine(middle - 2, 1, middle + 1, 1);
e.gc.drawLine(middle - 1, 2, middle, 2);
} else {
e.gc.drawLine(middle - 1, 1, middle, 1);
e.gc.drawLine(middle - 2, 2, middle + 1, 2);
e.gc.drawLine(middle - 3, 3, middle + 2, 3);
}
color.dispose();
}
});
lblBar.addMouseTrackListener(new MouseTrackAdapter() {
@Override
public void mouseEnter(MouseEvent e) {
mouseOnBar = true;
((Label)e.getSource()).redraw();
}
@Override
public void mouseExit(MouseEvent e) {
mouseOnBar = false;
((Label)e.getSource()).redraw();
}
});
lblBar.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
optionHelper.setBarExpanded(!optionHelper.isBarExpanded());
((Label)e.getSource()).redraw();
}
});
/* 按钮区 */
// 按钮容器
Composite buttonContainer = new Composite(panel, SWT.NONE);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.heightHint = 24;
buttonContainer.setLayoutData(gd);
layout = new GridLayout(5, false);
layout.marginHeight = layout.marginWidth = layout.verticalSpacing = 0;
layout.horizontalSpacing = 6;
buttonContainer.setLayout(layout);
buttonContainer.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
paintBackground(e, ((Composite)e.getSource()).getClientArea().width, res.getImage(Resources.bmpToolbarBackground));
}
});
// 系统菜单
btnSysMenu = new Label(buttonContainer, SWT.LEFT);
btnSysMenu.setImage(res.getImage(Resources.bmpMenuNormal));
gd = new GridData(GridData.FILL_VERTICAL);
btnSysMenu.setLayoutData(gd);
btnSysMenu.setToolTipText(tooltip_button_sysmenu);
btnSysMenu.addMouseListener(new MouseAdapter() {
@Override
public void mouseDown(MouseEvent e) {
btnSysMenu.setImage(res.getImage(Resources.bmpMenuDown));
}
public void mouseUp(MouseEvent e) {
btnSysMenu.setImage(res.getImage(Resources.bmpMenuHover));
if(menuHelper.isSystemMenuVisible())
menuHelper.setSystemMenuVisible(false);
else {
menuHelper.setSystemMenuData(0);
menuHelper.setSystemMenuLocation(btnSysMenu.toDisplay(btnSysMenu.getLocation()));
menuHelper.setSystemMenuVisible(true);
}
}
});
btnSysMenu.addMouseTrackListener(new MouseTrackAdapter() {
@Override
public void mouseEnter(MouseEvent e) {
btnSysMenu.setImage(res.getImage(Resources.bmpMenuHover));
}
@Override
public void mouseExit(MouseEvent e) {
btnSysMenu.setImage(res.getImage(Resources.bmpMenuNormal));
}
});
// 系统消息按钮
btnSysMsg = new Label(buttonContainer, SWT.CENTER);
btnSysMsg.setImage(res.getImage(Resources.icoSysMsg));
btnSysMsg.setToolTipText(tooltip_button_sysmsg);
btnSysMsg.setLayoutData(new GridData(GridData.FILL_VERTICAL));
btnSysMsg.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
btnSysMsg.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
if(mq.hasSystemMessage()) {
InPacket in = (InPacket)mq.getSystemMessage();
shellLauncher.openReceiveSystemMessageShell(in);
if(in instanceof SystemNotificationPacket) {
SystemNotificationPacket packet = (SystemNotificationPacket)in;
if(packet.type == QQ.QQ_SYS_ADD_FRIEND_APPROVED ||
packet.type == QQ.QQ_SYS_ADD_FRIEND_APPROVED_AND_ADD)
blindHelper.addFriend(packet.from);
}
} else
shellLauncher.openSystemMessageListWindow();
}
});
btnSysMsg.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Label label = (Label)e.getSource();
Rectangle bound = label.getBounds();
paintBackground(e, bound.width, res.getImage(Resources.bmpToolbarBackground));
if(label.getImage() != null)
e.gc.drawImage(label.getImage(), 0, (bound.height - label.getImage().getBounds().height) >>> 1);
}
});
// 添加查找按钮
Label btnFind = new Label(buttonContainer, SWT.CENTER);
btnFind.setImage(res.getImage(Resources.icoSearch));
btnFind.setToolTipText(tooltip_button_search);
btnFind.setLayoutData(new GridData(GridData.FILL_VERTICAL));
btnFind.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
btnFind.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
if(client.getUser().isLoggedIn())
shellLauncher.openSearchWizard();
}
});
btnFind.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Label label = (Label)e.getSource();
Rectangle bound = label.getBounds();
paintBackground(e, bound.width, res.getImage(Resources.bmpToolbarBackground));
e.gc.drawImage(label.getImage(), 0, (bound.height - label.getImage().getBounds().height) >>> 1);
}
});
// 短信按钮
btnSMS = new Label(buttonContainer, SWT.CENTER);
btnSMS.setImage(res.getImage(Resources.icoMobile));
btnSMS.setToolTipText(tooltip_button_sms);
btnSMS.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
btnSMS.setLayoutData(new GridData(GridData.FILL_VERTICAL));
btnSMS.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
onSMS();
}
});
btnSMS.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
Label label = (Label)e.getSource();
Rectangle bound = label.getBounds();
paintBackground(e, bound.width, res.getImage(Resources.bmpToolbarBackground));
if(label.getImage() != null)
e.gc.drawImage(label.getImage(), 0, (bound.height - label.getImage().getBounds().height) >>> 1);
}
});
// 状态指示
statusRing = new Ring(buttonContainer);
gd = new GridData(GridData.FILL_BOTH);
statusRing.setLayoutData(gd);
statusRing.setMinWidth(18);
statusRing.setBackground(Colors.MAINSHELL_BACKGROUND);
statusRing.setTiledBackground(res.getImage(Resources.bmpToolbarBackground));
statusRing.setMaxAvailableHeight(18);
statusRing.setCursor(display.getSystemCursor(SWT.CURSOR_HAND));
statusRing.addMouseListener(new MouseAdapter() {
public void mouseUp(MouseEvent e) {
menuHelper.setStatusMenuLocation(statusRing.toDisplay(e.x, e.y));
menuHelper.setStatusMenuVisible(true);
}
});
return panel;
}
/**
* 刷新网络硬盘树型图
*/
public void refreshDiskViewer() {
diskViewer.refresh();
}
/**
* 设置网络硬盘操作提示
*
* @param hint
*/
public void setDiskOpHint(String hint) {
lblDiskHint.setText(hint);
}
/**
* 初始化网络硬盘视图
*/
private void initDiskView() {
Composite comp = new Composite(viewContainer, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = layout.marginWidth = layout.horizontalSpacing = layout.verticalSpacing = 0;
comp.setLayout(layout);
comp.setBackground(Colors.LIGHT_BLUE_2);
// 面板容器
diskCenter = new Composite(comp, SWT.NONE);
diskCenter.setLayoutData(new GridData(GridData.FILL_BOTH));
diskCenter.setLayout(new StackLayout());
diskTreePanel = new Composite(diskCenter, SWT.NONE);
layout = new GridLayout();
layout.marginHeight = layout.marginWidth = layout.horizontalSpacing = layout.verticalSpacing = 0;
diskTreePanel.setLayout(layout);
// 工具条
ToolBar tb = new ToolBar(diskTreePanel, SWT.FLAT);
tb.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
tb.setBackground(Colors.LIGHT_BLUE_2);
tiRefresh = new ToolItem(tb, SWT.PUSH);
tiRefresh.setImage(res.getImage(Resources.icoRefresh));
tiRefresh.setToolTipText(disk_tooltip_refresh);
tiRefresh.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
IStructuredSelection s = (IStructuredSelection)diskViewer.getSelection();
diskManager.refresh(s.getFirstElement());
diskViewer.refresh();
}
});
tiDownload = new ToolItem(tb, SWT.PUSH);
tiDownload.setImage(res.getImage(Resources.icoDiskDownload));
tiDownload.setToolTipText(disk_tooltip_download);
tiDownload.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onDiskDownload((IStructuredSelection)diskViewer.getSelection());
}
});
tiUpload = new ToolItem(tb, SWT.PUSH);
tiUpload.setImage(res.getImage(Resources.icoDiskUpload));
tiUpload.setToolTipText(disk_tooltip_upload);
tiUpload.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onDiskUpload((IStructuredSelection)diskViewer.getSelection());
}
});
// separator
new ToolItem(tb, SWT.SEPARATOR);
// 密码
ToolItem tiPassword = new ToolItem(tb, SWT.PUSH);
tiPassword.setImage(res.getImage(Resources.icoDiskPassword));
tiPassword.setToolTipText(disk_tooltip_password);
tiPassword.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
onDiskPassword();
}
});
// 网络硬盘目录树
diskViewer = new TreeViewer(diskTreePanel, SWT.V_SCROLL | SWT.H_SCROLL | SWT.SINGLE);
diskViewer.getTree().setLayoutData(new GridData(GridData.FILL_BOTH));
diskManager = new DiskManager(this);
diskViewer.setContentProvider(new DiskContentProvider(this));
diskViewer.setLabelProvider(new DiskLabelProvider(this));
diskViewer.setSorter(new DiskViewerSorter());
diskViewer.setInput(this);
diskViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
onDiskViewerSelection(event);
}
});
diskViewer.getTree().addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
if(e.button == 3) {
menuHelper.setDiskMenuLocation(display.map(diskViewer.getTree(), null, e.x, e.y));
menuHelper.setDiskMenuVisible(true);
} else
menuHelper.hideAllMenu();
}
});
diskViewer.addDragSupport(DND.DROP_MOVE, new Transfer[] { TextTransfer.getInstance() }, new DragSourceListener() {
public void dragStart(DragSourceEvent event) {
IStructuredSelection s = (IStructuredSelection)diskViewer.getSelection();
if(s.isEmpty())
event.doit = false;
Object obj = s.getFirstElement();
if(obj instanceof Directory) {
if(!diskManager.isMovable((Directory)obj))
event.doit = false;
} else if(obj instanceof File) {
if(!diskManager.isMovable((File)obj))
event.doit = false;
} else
event.doit = false;
}
public void dragSetData(DragSourceEvent event) {
event.data = "dummy";
IStructuredSelection s = (IStructuredSelection)diskViewer.getSelection();
Object obj = s.getFirstElement();
DragHelper.setObject(obj);
}
public void dragFinished(DragSourceEvent event) {
}
});
diskViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { TextTransfer.getInstance() }, new DropTargetListener() {
public void dragEnter(DropTargetEvent event) {
}
public void dragLeave(DropTargetEvent event) {
}
public void dragOperationChanged(DropTargetEvent event) {
}
public void dragOver(DropTargetEvent event) {
TreeItem item = (TreeItem)event.item;
if(item == null) {
event.detail = DND.DROP_NONE;
} else if(item.getData() instanceof Integer) {
boolean accept = ((Integer)item.getData()) == DiskContentProvider.MY_DISK;
event.detail = accept ? event.operations : DND.DROP_NONE;
if(accept)
event.feedback |= DND.FEEDBACK_EXPAND;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -