📄 loginpage.java
字号:
// 密码
UITool.createLabel(basicGroup, sys_opt_login_proxy_password);
textProxyPassword = UITool.createSingleText(basicGroup, new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL), SWT.SINGLE | SWT.PASSWORD);
textProxyPassword.addModifyListener(ml);
// 添加和验证按钮
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, 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 = ProxyFactory.eINSTANCE.createSocks5Proxy();
proxy.setServer(textProxyAddress.getText());
proxy.setPort(textProxyPort.getText());
proxy.setUsername(textProxyUsername.getText());
proxy.setPassword(textProxyPassword.getText());
getProxies().getSocks5Proxy().add(proxy);
proxyViewer.refresh();
} else {
HttpProxy proxy = ProxyFactory.eINSTANCE.createHttpProxy();
proxy.setServer(textProxyAddress.getText());
proxy.setPort(textProxyPort.getText());
proxy.setUsername(textProxyUsername.getText());
proxy.setPassword(textProxyPassword.getText());
getProxies().getHttpProxy().add(proxy);
proxyViewer.refresh();
}
}
}
});
btnVerify = UITool.createButton(c, 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, sys_opt_group_proxy_list, new GridData(GridData.FILL_BOTH), 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.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, button_delete);
btnDelete.setEnabled(false);
btnDelete.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if(comboProxyType.getSelectionIndex() == 0)
getProxies().getSocks5Proxy().remove(proxyViewer.getList().getSelectionIndex());
else
getProxies().getHttpProxy().remove(proxyViewer.getList().getSelectionIndex());
proxyViewer.refresh();
}
});
return container;
}
/**
* 检查代理服务器的地址和端口是否输入了,并且是否有效
*
* @return
* true表示有效,false则提示
*/
private boolean checkProxy() {
if(textProxyAddress.getText().equals("")) {
MessageDialog.openWarning(parentShell, message_box_common_warning_title, message_box_please_fill_proxy_address);
return false;
} else {
int port = Util.getInt(textProxyPort.getText(), 0);
if(port == 0) {
MessageDialog.openWarning(parentShell, message_box_common_warning_title, 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(NLS.bind(sys_opt_group_proxy_list, 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()
*/
@Override
protected Image getImage() {
return Resources.getInstance().getImage(Resources.icoSysOpt24);
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#getTitle()
*/
@Override
protected String getTitle(int page) {
return sys_opt_button_login;
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#saveDirtyProperty(int)
*/
@Override
protected void saveDirtyProperty(int propertyId) {
OptionHelper options = main.getOptionHelper();
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) ? ProxyType.SOCKS5_LITERAL : ProxyType.HTTP_LITERAL);
if(comboProxyType.getSelectionIndex() == 1 && !options.isUseTcp()) {
options.setUseTcp(true);
options.setServer(LumaQQ.tcpServers[0]);
}
} else
options.setProxyType(ProxyType.NONE_LITERAL);
main.getConfigHelper().saveProxies();
break;
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.shells.AbstractPage#initializeValues()
*/
@Override
protected void initializeValues() {
OptionHelper options = main.getOptionHelper();
chkRandom.setSelection(options.isAutoSelect());
if(options.isUseTcp()) {
comboPort.setEnabled(true);
if(options.getTcpPort() == QQ.QQ_PORT_TCP)
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() != ProxyType.NONE_LITERAL);
if(options.getProxyType() == ProxyType.HTTP_LITERAL)
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(checkProxy()) {
btnVerify.setEnabled(false);
String proxyType = comboProxyType.getText();
boolean udp = rdoUdp.getSelection();
InetSocketAddress serverAddress = null;
if(proxyType.equalsIgnoreCase("Socks5")) {
// 得到一个随机服务器
if(udp) {
String server = LumaQQ.udpServers[Util.random().nextInt(LumaQQ.udpServers.length)];
serverAddress = new InetSocketAddress(server, QQ.QQ_PORT_UDP);
} else {
String server = LumaQQ.tcpServers[Util.random().nextInt(LumaQQ.tcpServers.length)];
serverAddress = new InetSocketAddress(server, QQ.QQ_PORT_TCP);
}
} else if(proxyType.equalsIgnoreCase("Http")) {
String server = LumaQQ.tcpServers[Util.random().nextInt(LumaQQ.tcpServers.length - 1)];
serverAddress = new InetSocketAddress(server, QQ.QQ_PORT_HTTP);
}
InetSocketAddress proxyAddress = new InetSocketAddress(textProxyAddress.getText(), Util.getInt(textProxyPort.getText(), 1080));
if(!main.getClient().getConnectionPool().verifyProxy(this, proxyAddress, serverAddress, proxyType, udp, textProxyUsername.getText(), textProxyPassword.getText()))
btnVerify.setEnabled(true);
}
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.IProxyHandler#proxyReady(java.net.InetSocketAddress)
*/
public void proxyReady(InetSocketAddress bindAddress) throws IOException {
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openInformation(parentShell, message_box_common_success_title, message_box_proxy_verify_ok);
}
});
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.IProxyHandler#proxyAuthFail()
*/
public void proxyAuthFail() {
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openError(parentShell, message_box_proxy_error_title, message_box_proxy_verify_fail);
}
});
}
/* (non-Javadoc)
* @see edu.tsinghua.lumaqq.qq.net.IProxyHandler#proxyError(java.lang.String)
*/
public synchronized void proxyError(final String err) {
parentShell.getDisplay().syncExec(new Runnable() {
public void run() {
btnVerify.setEnabled(true);
MessageDialog.openError(parentShell, message_box_proxy_error_title, err);
}
});
}
/**
* @return
*/
private Proxies getProxies() {
return main.getConfigHelper().getProxies();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -