📄 updatewindow.java
字号:
formData.width = 100;
formData.right = new FormAttachment(100,0);
formData.bottom = new FormAttachment(100,0);
btnCancel.setLayoutData(formData);
formData = new FormData();
formData.width = 100;
formData.right = new FormAttachment(btnCancel);
formData.bottom = new FormAttachment(100,0);
btnOk.setLayoutData(formData);
updateWindow.setSize(400,400);
//updateWindow.open();
}
protected void
rowSelected()
{
checkMandatory();
checkRestartNeeded();
TableItem[] items = table.getSelection();
if(items.length == 0) return;
Update update = (Update) items[0].getData();
String[] descriptions = update.getDescription();
stDescription.setText("");
int ofs = 0;
for(int i = 0 ; i < descriptions.length ; i++) {
String s = descriptions[i].replaceAll("<.*a\\s++.*href=\"?([^\\'\"\\s>]++).*", "$1");
stDescription.append(s + "\n");
try {
int iURLStart = s.indexOf("http");
if (iURLStart >= 0) {
int iURLEnd = s.indexOf(' ', iURLStart);
String url;
if (iURLEnd >= 0) {
url = s.substring(iURLStart, iURLEnd);
} else {
url = s.substring(iURLStart);
}
linkInfo info = new linkInfo(iURLStart + ofs, iURLStart + ofs
+ url.length(), url);
links.add(info);
StyleRange sr = new StyleRange();
sr.start = info.ofsStart;
sr.length = url.length();
sr.underline = true;
stDescription.setStyleRange(sr);
}
ofs += s.length() + 1;
} catch (Exception e) {
Debug.out(e);
}
}
}
public Shell
getShell()
{
return( updateWindow );
}
public void dispose() {
updateWindow.dispose();
MainWindow window = MainWindow.getWindow();
if (window != null) {
MainWindow.getWindow().setUpdateNeeded(null);
}
}
public void addUpdate(final Update update) {
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable() {
public void runSupport() {
if(table == null || table.isDisposed())
return;
final TableItem item = new TableItem(table,SWT.NULL);
item.setData(update);
item.setText(COL_NAME,update.getName()==null?"Unknown":update.getName());
item.setText(COL_VERSION,update.getNewVersion()==null?"Unknown":update.getNewVersion());
ResourceDownloader[] rds = update.getDownloaders();
long totalLength = 0;
for(int i = 0 ; i < rds.length ; i++) {
try {
totalLength += rds[i].getSize();
} catch(Exception e) {
}
}
item.setText(COL_SIZE,DisplayFormatters.formatByteCountToBase10KBEtc(totalLength));
item.setChecked(true);
// select first entry
if ( table.getItemCount() == 1 ){
table.select(0);
rowSelected(); // don't seem to be getting the selection event, do it explicitly
}
checkRestartNeeded();
if( COConfigurationManager.getBooleanParameter("update.opendialog")||
check_instance.getType() != UpdateCheckInstance.UCI_UPDATE ) {
show();
}else{
if (MainWindow.getWindow() != null) {
MainWindow.getWindow().setUpdateNeeded(UpdateWindow.this);
}
}
}
});
}
protected void
updateAdditionComplete()
{
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable() {
public void runSupport() {
if(btnOk == null || btnOk.isDisposed())
return;
btnOk.setEnabled(true);
}
});
}
public void show() {
if(updateWindow == null || updateWindow.isDisposed())
return;
Utils.centreWindow( updateWindow );
updateWindow.open();
updateWindow.forceActive();
}
private void checkMandatory() {
TableItem[] items = table.getItems();
for(int i = 0 ; i < items.length ; i++) {
Update update = (Update) items[i].getData();
if(update.isMandatory()) items[i].setChecked(true);
}
}
private void checkRestartNeeded() {
restartRequired = false;
boolean restartMaybeRequired = false;
TableItem[] items = table.getItems();
for(int i = 0 ; i < items.length ; i++) {
if(! items[i].getChecked()) continue;
Update update = (Update) items[i].getData();
int required = update.getRestartRequired();
if((required == Update.RESTART_REQUIRED_MAYBE)){
restartMaybeRequired = true;
}else if ( required == Update.RESTART_REQUIRED_YES ){
restartRequired = true;
}
}
if(restartRequired) {
status.setText(MessageText.getString("swt.update.window.status.restartNeeded"));
}else if(restartMaybeRequired) {
status.setText(MessageText.getString("swt.update.window.status.restartMaybeNeeded"));
}else{
status.setText("");
}
}
private void update() {
btnOk.setEnabled(false);
Messages.setLanguageText(btnCancel,"swt.update.window.cancel");
table.setEnabled(false);
stDescription.setText("");
TableItem[] items = table.getItems();
totalDownloadSize = 0;
downloaders = new ArrayList();
for(int i = 0 ; i < items.length ; i++) {
if(! items[i].getChecked()) continue;
Update update = (Update) items[i].getData();
ResourceDownloader[] rds = update.getDownloaders();
for(int j = 0 ; j < rds.length ; j++) {
downloaders.add(rds[j]);
try {
totalDownloadSize += rds[j].getSize();
} catch (Exception e) {
stDescription.append(MessageText.getString("swt.update.window.no_size") + rds[j].getName() +"\n");
}
}
}
downloadersToData = new HashMap();
iterDownloaders = downloaders.iterator();
nextUpdate();
}
private void nextUpdate() {
if(iterDownloaders.hasNext()) {
ResourceDownloader downloader = (ResourceDownloader) iterDownloaders.next();
downloader.addListener(this);
downloader.asyncDownload();
} else {
switchToRestart();
}
}
private void switchToRestart() {
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable(){
public void runSupport() {
checkRestartNeeded(); // gotta recheck coz a maybe might have got to yes
progress.setSelection(100);
status.setText(MessageText.getString("swt.update.window.status.done"));
btnOk.removeListener(SWT.Selection,lOk);
btnOk.setEnabled(true);
btnOk.addListener(SWT.Selection,new Listener() {
public void handleEvent(Event e) {
finishUpdate(true);
}
});
if(restartRequired) {
((FormData)btnOk.getLayoutData()).width = 150;
((FormData)btnCancel.getLayoutData()).width = 150;
updateWindow.layout();
Messages.setLanguageText(btnOk,"swt.update.window.restart");
btnCancel.removeListener(SWT.Selection,lCancel);
Messages.setLanguageText(btnCancel,"swt.update.window.restartLater");
btnCancel.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
finishUpdate(false);
}
});
} else {
Messages.setLanguageText(btnOk,"swt.update.window.close");
btnCancel.setEnabled(false);
}
}
});
}
public void reportPercentComplete(ResourceDownloader downloader,
int percentage) {
setProgressSelection(percentage);
}
private void setProgressSelection(final int percent) {
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable() {
public void runSupport() {
if(progress != null && !progress.isDisposed())
progress.setSelection(percent);
}
});
}
private Map downloadersToData;
public boolean completed(ResourceDownloader downloader, InputStream data) {
downloadersToData.put(downloader,data);
downloader.removeListener(this);
setProgressSelection(0);
nextUpdate();
return true;
}
public void failed(ResourceDownloader downloader,
ResourceDownloaderException e) {
downloader.removeListener(this);
setStatusText(MessageText.getString("swt.update.window.status.failed"));
String msg = downloader.getName() + " : " + e;
if ( e.getCause() != null ){
msg += " [" + e.getCause() + "]";
}
appendDetails(msg);
}
public void reportActivity(ResourceDownloader downloader, final String activity) {
setStatusText(activity.trim());
appendDetails(activity);
}
private void setStatusText(final String text) {
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable(){
public void runSupport() {
if(status != null && !status.isDisposed())
status.setText(text);
}
});
}
private void appendDetails(final String text) {
if(display == null || display.isDisposed())
return;
display.asyncExec(new AERunnable(){
public void runSupport() {
if(stDescription != null && !stDescription.isDisposed())
stDescription.append(text + "\n");
}
});
}
private void finishUpdate(boolean restartNow) {
//When completing, remove the link in mainWindow :
if (MainWindow.getWindow() != null) {
MainWindow.getWindow().setUpdateNeeded(null);
}
//If restart is required, then restart
if( restartRequired && restartNow) {
// this HAS to be done this way around else the restart inherits
// the 6880 port listen. However, this is a general problem....
UIFunctionsSWT uiFunctions = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uiFunctions != null) {
if (!uiFunctions.dispose(true, false)) {
updateWindow.dispose();
}
} else {
updateWindow.dispose();
}
}else{
updateWindow.dispose();
}
}
protected boolean
isDisposed()
{
return( display == null || display.isDisposed() || updateWindow == null || updateWindow.isDisposed());
}
public static class linkInfo {
int ofsStart;
int ofsEnd;
String url;
linkInfo(int s, int e, String url) {
ofsStart = s;
ofsEnd = e;
this.url = url;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -