📄 updatewindow.java
字号:
stDescription.append(descriptions[i] + "\n");
}
}
public void dispose() {
updateWindow.dispose();
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());
item.setText(COL_VERSION,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{
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;
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 :
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....
if ( !MainWindow.getWindow().dispose(true,false)){
updateWindow.dispose();
}
}else{
updateWindow.dispose();
}
}
protected boolean
isDisposed()
{
return( display == null || display.isDisposed() || updateWindow == null || updateWindow.isDisposed());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -