package com.github.sdbg.debug.ui.internal.util;
import com.github.sdbg.debug.core.util.IBrowserTabChooser;
import com.github.sdbg.debug.core.util.IBrowserTabInfo;
import java.util.List;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ListDialog;
public class UIBrowserTabChooser implements IBrowserTabChooser {
private static class TabLabelProvider extends LabelProvider {
@Override
public Image getImage(Object element) {
return null;
}
@Override
public String getText(Object element) {
if (element instanceof IBrowserTabInfo) {
IBrowserTabInfo tab = (IBrowserTabInfo) element;
String text = tab.getTitle();
String url = tab.getUrl();
if (tab.getUrl() != null && tab.getUrl().length() > 0 && !text.equalsIgnoreCase(url)) {
text += " (" + url + ")";
}
return text;
} else {
return null;
}
}
}
public UIBrowserTabChooser() {
}
@Override
public IBrowserTabInfo chooseTab(final List<? extends IBrowserTabInfo> tabs) {
final IBrowserTabInfo[] result = new IBrowserTabInfo[1];
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
ListDialog dlg = new ListDialog(
PlatformUI.getWorkbench().getWorkbenchWindows()[0].getShell());
dlg.setInput(tabs);
dlg.setTitle("Connect to a running Chrome");
dlg.setMessage("Select a tab for remote connection");
dlg.setContentProvider(new ArrayContentProvider());
dlg.setLabelProvider(new TabLabelProvider());
if (dlg.open() == Window.OK) {
result[0] = (IBrowserTabInfo) dlg.getResult()[0];
}
}
});
if (result[0] != null) {
return result[0];
} else {
return null;
}
}
}