*** empty log message ***
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchCategoryDescriptor.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchCategoryDescriptor.java
index 834aa4d..95916e9 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchCategoryDescriptor.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/search/SearchCategoryDescriptor.java
@@ -1,6 +1,7 @@
package org.eclipse.update.internal.ui.search;
import org.eclipse.core.runtime.*;
+import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.update.internal.ui.*;
import org.eclipse.swt.graphics.Image;
@@ -16,6 +17,15 @@
public String getName() {
return config.getAttribute("name");
}
+
+ public ImageDescriptor getImageDescriptor() {
+ String imageName = config.getAttribute("icon");
+ if (imageName == null)
+ return null;
+ return UpdateUIPluginImages.getImageDescriptorFromPlugin(
+ config.getDeclaringExtension().getDeclaringPluginDescriptor(),
+ imageName);
+ }
public Image getImage() {
String imageName = config.getAttribute("icon");
if (imageName == null)
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchMonitorManager.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchMonitorManager.java
new file mode 100644
index 0000000..df098c5
--- /dev/null
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/SearchMonitorManager.java
@@ -0,0 +1,171 @@
+package org.eclipse.update.internal.ui.views;
+
+import java.util.*;
+import java.util.Hashtable;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.update.internal.ui.UpdateUIPlugin;
+import org.eclipse.update.internal.ui.model.*;
+import org.eclipse.update.internal.ui.model.UpdateModel;
+import org.eclipse.update.internal.ui.search.SearchObject;
+
+/**
+ * @author dejan
+ *
+ * To change this generated comment edit the template variable "typecomment":
+ * Window>Preferences>Java>Templates.
+ * To enable and disable the creation of type comments go to
+ * Window>Preferences>Java>Code Generation.
+ */
+public class SearchMonitorManager {
+ Hashtable monitors;
+
+ class SearchMonitor implements IProgressMonitor {
+ private SearchObject sobj;
+ private int totalWork;
+ private int worked;
+ private boolean active;
+
+ public SearchMonitor(SearchObject sobj) {
+ this.sobj = sobj;
+ sobj.attachProgressMonitor(this);
+ }
+
+ public void dispose() {
+ sobj.detachProgressMonitor(this);
+ }
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int)
+ */
+ public void beginTask(String name, int totalWork) {
+ this.totalWork = totalWork;
+ worked = 0;
+ active = true;
+ update();
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#done()
+ */
+ public void done() {
+ active = false;
+ update();
+ }
+
+ private void update() {
+ UpdateUIPlugin.getDefault().getUpdateModel().fireObjectChanged(
+ sobj,
+ NamedModelObject.P_NAME);
+ }
+
+ public String getLabel() {
+ if (active) {
+ int perc = (worked * 100) / totalWork;
+ return sobj.getName() + " - " + perc + "%";
+ } else {
+ return sobj.getName();
+ }
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
+ */
+ public void internalWorked(double work) {
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
+ */
+ public boolean isCanceled() {
+ return false;
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
+ */
+ public void setCanceled(boolean value) {
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String)
+ */
+ public void setTaskName(String name) {
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String)
+ */
+ public void subTask(String name) {
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
+ */
+ public void worked(int work) {
+ worked += work;
+ update();
+ }
+
+ }
+ /**
+ * Constructor for SearchMonitorManager.
+ */
+ public SearchMonitorManager() {
+ monitors = new Hashtable();
+ initialize();
+ }
+
+ public void shutdown() {
+ for (Enumeration enum=monitors.elements(); enum.hasMoreElements();) {
+ SearchMonitor monitor = (SearchMonitor)enum.nextElement();
+ monitor.dispose();
+ }
+ monitors.clear();
+ }
+
+ private void initialize() {
+ UpdateModel model = UpdateUIPlugin.getDefault().getUpdateModel();
+ NamedModelObject [] bookmarks = model.getBookmarks();
+ for (int i=0; i<bookmarks.length; i++) {
+ processBookmark(bookmarks[i]);
+ }
+ }
+
+ private void processFolder(BookmarkFolder folder) {
+ Object [] children = folder.getChildren(null);
+ for (int i=0; i<children.length; i++) {
+ processBookmark((NamedModelObject)children[i]);
+ }
+ }
+
+ private void processBookmark(NamedModelObject obj) {
+ if (obj instanceof SearchObject) {
+ register((SearchObject)obj);
+ }
+ else if (obj instanceof BookmarkFolder) {
+ processFolder((BookmarkFolder)obj);
+ }
+ }
+
+
+ public void register(SearchObject obj) {
+ if (monitors.get(obj) == null)
+ monitors.put(obj, new SearchMonitor(obj));
+ }
+
+ public void unregister(SearchObject obj) {
+ SearchMonitor monitor = (SearchMonitor) monitors.get(obj);
+ if (monitor != null) {
+ monitor.dispose();
+ monitors.remove(obj);
+ }
+ }
+
+ public String getLabel(SearchObject obj) {
+ SearchMonitor monitor = (SearchMonitor) monitors.get(obj);
+ if (monitor == null)
+ return obj.getName();
+ else
+ return monitor.getLabel();
+ }
+}
\ No newline at end of file
diff --git a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
index 5c454f3..600484e 100644
--- a/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
+++ b/update/org.eclipse.update.ui/src/org/eclipse/update/internal/ui/views/UpdatesView.java
@@ -102,6 +102,7 @@
private EnvironmentFilter environmentFilter = new EnvironmentFilter();
private Cursor handCursor;
private Clipboard clipboard;
+ private SearchMonitorManager searchMonitorManager;
class DeleteAction extends Action implements IUpdate {
public DeleteAction() {
@@ -286,6 +287,9 @@
else
return dir.getLabel(dir);
}
+ if (obj instanceof SearchObject) {
+ return searchMonitorManager.getLabel((SearchObject)obj);
+ }
return super.getText(obj);
}
public Image getImage(Object obj) {
@@ -347,7 +351,8 @@
SearchCategoryRegistryReader.getDefault().getDescriptor(
categoryId);
if (desc != null) {
- return desc.getImage();
+ int flags = obj.isSearchInProgress()?UpdateLabelProvider.F_CURRENT:0;
+ return UpdateUIPlugin.getDefault().getLabelProvider().get(desc.getImageDescriptor(), flags);
}
return null;
}
@@ -413,10 +418,13 @@
clipboard.dispose();
clipboard = null;
}
+ searchMonitorManager.shutdown();
super.dispose();
}
public void initProviders() {
+ searchMonitorManager = new SearchMonitorManager();
+ searchMonitorManager.register(updateSearchObject);
viewer.setContentProvider(new SiteProvider());
viewer.setLabelProvider(new SiteLabelProvider());
viewer.setInput(UpdateUIPlugin.getDefault().getUpdateModel());
@@ -1097,14 +1105,11 @@
Object child = children[0];
if (child instanceof PendingChange)
return;
- if (child instanceof NamedModelObject
- /*
- || child instanceof SearchResultSite
- || child instanceof IFeature
- || child instanceof IFeatureAdapter
- */
- ) {
+ if (child instanceof NamedModelObject) {
UpdateModel model = UpdateUIPlugin.getDefault().getUpdateModel();
+ if (child instanceof SearchObject) {
+ searchMonitorManager.register((SearchObject)child);
+ }
if (parent == null)
parent = model;
viewer.add(parent, children);
@@ -1118,16 +1123,19 @@
if (children[0] instanceof PendingChange)
return;
if (children[0] instanceof NamedModelObject
- /*|| children[0] instanceof SearchResultSite */
) {
viewer.remove(children);
viewer.setSelection(new StructuredSelection());
+ for (int i=0; i<children.length; i++) {
+ if (children[i] instanceof SearchObject)
+ searchMonitorManager.unregister((SearchObject)children[i]);
+ }
}
}
public void objectChanged(Object object, String property) {
if (object instanceof NamedModelObject) {
- if (property.equals(SiteBookmark.P_NAME)) {
+ if (property.equals(NamedModelObject.P_NAME)) {
viewer.update(object, null);
}
if (object instanceof SiteBookmark) {