📄 loginpage.java
字号:
// 添加和验证按钮
layout = new GridLayout(2, true);
layout.marginHeight = layout.marginWidth = 0;
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
Composite c = UITool.createContainer(basicGroup, gd, layout);
Button btnAddProxy = UITool.createButton(c, LumaQQ.getString("common.button.add"), new GridData(GridData.HORIZONTAL_ALIGN_FILL));
btnAddProxy.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(checkProxy()) {
if(comboProxyType.getSelectionIndex() == 0) {
Socks5Proxy proxy = new Socks5ProxyImpl();
proxy.setServer(textProxyAddress.getText());
proxy.setPort(textProxyPort.getText());
proxy.setUsername(textProxyUsername.getText());
proxy.setPassword(textProxyPassword.getText());
proxies.addSocks5Proxy(proxy);
proxyViewer.refresh();
} else {
HttpProxy proxy = new HttpProxyImpl();
proxy.setServer(textProxyAddress.getText());
proxy.setPort(textProxyPort.getText());
proxy.setUsername(textProxyUsername.getText());
proxy.setPassword(textProxyPassword.getText());
proxies.addHttpProxy(proxy);
proxyViewer.refresh();
}
}
}
});
btnVerify = UITool.createButton(c, LumaQQ.getString("sys.opt.button.verify"), new GridData(GridData.HORIZONTAL_ALIGN_FILL));
btnVerify.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
startVerify();
}
});
// 列表信息组
layout = new GridLayout();
layout.marginHeight = layout.marginWidth = 8;
listGroup = UITool.createGroup(proxyGroup, LumaQQ.getString("sys.opt.group.proxy.list"), new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL), layout);
listGroup.addPaintListener(paintListener);
// 代理列表
proxyViewer = new ListViewer(listGroup, SWT.SINGLE);
proxyViewer.setContentProvider(new ProxyContentProvider());
proxyViewer.setLabelProvider(new ProxyLabelProvider());
proxyViewer.getList().setLayoutData(new GridData(GridData.FILL_BOTH));
proxyViewer.setInput(this);
proxyViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent e) {
IStructuredSelection selection = (IStructuredSelection)proxyViewer.getSelection();
btnDelete.setEnabled(!selection.isEmpty());
if(!selection.isEmpty()) {
Object obj = selection.getFirstElement();
if(obj instanceof Socks5Proxy) {
Socks5Proxy proxy = (Socks5Proxy)obj;
textProxyAddress.setText(proxy.getServer());
textProxyPort.setText(proxy.getPort());
textProxyUsername.setText(proxy.getUsername());
textProxyPassword.setText(proxy.getPassword());
} else if(obj instanceof HttpProxy) {
HttpProxy proxy = (HttpProxy)obj;
textProxyAddress.setText(proxy.getServer());
textProxyPort.setText(proxy.getPort());
textProxyUsername.setText(proxy.getUsername());
textProxyPassword.setText(proxy.getPassword());
}
}
}
});
// 删除
btnDelete = UITool.createButton(listGroup, LumaQQ.getString("common.button.delete"));
btnDelete.setEnabled(false);
btnDelete.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(comboProxyType.getSelectionIndex() == 0)
proxies.removeSocks5Proxy(proxyViewer.getList().getSelectionIndex());
else
proxies.removeHttpProxy(proxyViewer.getList().getSelectionIndex());
proxyViewer.refresh();
}
});
return container;
}
/**
* 检查代理服务器的地址和端口是否输入了,并且是否有效
*
* @return
* true表示有效,false则提示
*/
private boolean checkProxy() {
if(textProxyAddress.getText().equals("")) {
MessageDialog.openWarning(parentShell, LumaQQ.getString("message.box.common.warning.title"), LumaQQ.getString("message.box.please.fill.proxy.address"));
return false;
} else {
int port = Util.getInt(textProxyPort.getText(), 0);
if(port == 0) {
MessageDialog.openWarning(parentShell, LumaQQ.getString("message.box.common.warning.title"), LumaQQ.getString("message.box.please.fill.proxy.port"));
return false;
}
}
return true;
}
/**
* 刷新界面控件的状态
*/
private void refreshControl() {
comboPort.setEnabled(rdoTcp.getSelection());
boolean useProxy = chkUseProxy.getSelection();
if(basicGroup.isEnabled() != useProxy) {
basicGroup.setEnabled(useProxy);
setChildrenStatus(basicGroup, useProxy);
}
if(listGroup.isEnabled() != useProxy) {
listGroup.setEnabled(useProxy);
setChildrenStatus(listGroup, useProxy);
if(useProxy)
btnDelete.setEnabled(!proxyViewer.getSelection().isEmpty());
}
listGroup.setText(LumaQQ.getString("sys.opt.group.proxy.list", new Object[] { comboProxyType.getText() }));
}
/**
* 递归的设置组件中所有孩子的状态
*
* @param parent
* 父容器
* @param enabled
* true表示使能
*/
private void setChildrenStatus(Composite parent, boolean enabled) {
Control[] children = parent.getChildren();
for(int i = 0; i < children.length; i++) {
children[i].setEnabled(enabled);
if(children[i] instanceof Composite)
setChildrenStatus((Composite)children[i], enabled);
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#getImage()
*/
protected Image getImage() {
return IconHolder.getInstance().getImage(IconHolder.icoSysOpt24);
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#getTitle()
*/
protected String getTitle(int page) {
return LumaQQ.getString("sys.opt.button.login");
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#saveDirtyProperty(int)
*/
protected void saveDirtyProperty(int propertyId) {
OptionUtil options = OptionUtil.getInstance();
switch(propertyId) {
case USE_TCP:
options.setUseTcp(rdoTcp.getSelection());
break;
case LOGIN_SERVER:
options.setServer(comboAddress.getText());
break;
case LOGIN_PORT:
options.setTcpPort(comboPort.getText());
break;
case LOGIN_RANDOM:
options.setAutoSelect(chkRandom.getSelection());
break;
case PROXY_TYPE:
if(chkUseProxy.getSelection()) {
options.setProxyServer(textProxyAddress.getText().trim());
options.setProxyPort(Util.getInt(textProxyPort.getText().trim(), 1080));
options.setProxyUsername(textProxyUsername.getText());
options.setProxyPassword(textProxyPassword.getText());
options.setProxyType((comboProxyType.getSelectionIndex() == 0) ? "Socks5" : "Http");
if(comboProxyType.getSelectionIndex() == 1 && !options.isUseTcp()) {
options.setUseTcp(true);
options.setServer(LumaQQ.tcpServers[0]);
}
} else
options.setProxyType("None");
proxies.save();
break;
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#initializeValues()
*/
protected void initializeValues() {
OptionUtil options = OptionUtil.getInstance();
chkRandom.setSelection(options.isAutoSelect());
if(options.isUseTcp()) {
comboPort.setEnabled(true);
if(options.getTcpPort() == QQ.QQ_TCP_PORT)
comboPort.select(0);
else
comboPort.select(1);
rdoTcp.setSelection(true);
rdoUdp.setSelection(false);
fillTcpServers();
} else {
comboPort.setEnabled(false);
rdoTcp.setSelection(false);
rdoUdp.setSelection(true);
fillUdpServers();
}
comboAddress.setText(options.getServer());
chkUseProxy.setSelection(!(options.getProxyType().equalsIgnoreCase("None") || options.getProxyType().equals("")));
if(options.getProxyType().equalsIgnoreCase("Http"))
comboProxyType.select(1);
else
comboProxyType.select(0);
proxyViewer.refresh();
textProxyAddress.setText(options.getProxyServer());
textProxyPort.setText(String.valueOf(options.getProxyPort()));
textProxyUsername.setText(options.getProxyUsername());
textProxyPassword.setText(options.getProxyPassword());
refreshControl();
}
/**
* 填充TCP Server列表到下拉框
*/
private void fillTcpServers() {
for(int i = 0; i < LumaQQ.tcpServers.length; i++)
comboAddress.add(LumaQQ.tcpServers[i]);
comboAddress.setVisibleItemCount(LumaQQ.tcpServers.length);
}
/**
* 填充UDP Server列表到下拉框
*/
private void fillUdpServers() {
for(int i = 0; i < LumaQQ.udpServers.length; i++)
comboAddress.add(LumaQQ.udpServers[i]);
comboAddress.setVisibleItemCount(LumaQQ.udpServers.length);
}
/**
* 开始验证代理
*/
protected synchronized void startVerify() {
if(verifier == null && checkProxy()) {
btnVerify.setEnabled(false);
InetSocketAddress proxyAddress = new InetSocketAddress(textProxyAddress.getText(), Util.getInt(textProxyPort.getText(), 1080));
try {
verifier = new ProxyVerifier(main.getClient().getPorter(), this, proxyAddress, comboProxyType.getText(), rdoUdp.getSelection(), textProxyUsername.getText(), textProxyPassword.getText());
verifier.start();
} catch (IOException e) {
btnVerify.setEnabled(true);
}
}
}
/**
* 停止验证代理
*/
protected synchronized void stopVerify() {
if(verifier != null) {
try {
verifier.dispose();
} catch (IOException e) {
log.error(e.getMessage());
}
verifier = null;
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.IProxyHandler#proxyReady(java.net.InetSocketAddress)
*/
public void proxyReady(InetSocketAddress bindAddress) throws IOException {
stopVerify();
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openInformation(parentShell, LumaQQ.getString("message.box.common.success.title"), LumaQQ.getString("message.box.proxy.verify.ok"));
}
});
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.IProxyHandler#proxyAuthFail()
*/
public void proxyAuthFail() {
stopVerify();
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openError(parentShell, LumaQQ.getString("message.box.proxy.error.title"), LumaQQ.getString("message.box.proxy.verify.fail"));
}
});
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.IProxyHandler#proxyError(java.lang.Exception)
*/
public synchronized void proxyError(final Exception e) {
if(verifier != null) {
stopVerify();
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openError(parentShell, LumaQQ.getString("message.box.proxy.error.title"), e.getMessage());
}
});
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#onShellClose()
*/
protected void onParentShellClose() {
stopVerify();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -