use of com.biglybt.ui.swt.shells.GCStringPrinter.URLInfo in project BiglyBT by BiglySoftware.
the class ColumnSearchSubResultActions method cellPaint.
@Override
public void cellPaint(GC gc, TableCellSWT cell) {
SearchSubsResultBase entry = (SearchSubsResultBase) cell.getDataSource();
if (entry == null) {
return;
}
TableRow row = cell.getTableRow();
if (row == null) {
return;
}
String text = (String) row.getData("text");
if (text != null && text.length() > 0) {
if (font == null) {
FontData[] fontData = gc.getFont().getFontData();
fontData[0].setStyle(SWT.BOLD);
font = new Font(gc.getDevice(), fontData);
}
gc.setFont(font);
Rectangle bounds = getDrawBounds(cell);
GCStringPrinter sp = new GCStringPrinter(gc, text, bounds, true, true, SWT.WRAP | SWT.CENTER);
sp.calculateMetrics();
if (sp.hasHitUrl()) {
URLInfo[] hitUrlInfo = sp.getHitUrlInfo();
for (int i = 0; i < hitUrlInfo.length; i++) {
URLInfo info = hitUrlInfo[i];
// handle fake row when showing in column editor
info.urlUnderline = cell.getTableRow() == null || cell.getTableRow().isSelected();
if (info.urlUnderline) {
info.urlColor = null;
} else {
info.urlColor = colorLinkNormal;
}
}
int[] mouseOfs = cell.getMouseOffset();
if (mouseOfs != null) {
Rectangle realBounds = cell.getBounds();
URLInfo hitUrl = sp.getHitUrl(mouseOfs[0] + realBounds.x, mouseOfs[1] + realBounds.y);
if (hitUrl != null) {
hitUrl.urlColor = colorLinkHover;
}
}
}
sp.printString();
}
}
use of com.biglybt.ui.swt.shells.GCStringPrinter.URLInfo in project BiglyBT by BiglySoftware.
the class SystemWarningWindow method openWindow.
protected void openWindow() {
Display display = parent.getDisplay();
// shell = new Shell(parent, SWT.TOOL | SWT.TITLE | SWT.CLOSE);
// shell.setText("Warning (X of X)");
shell = new Shell(parent, SWT.TOOL);
shell.setLayout(new FormLayout());
shell.setBackground(Colors.getSystemColor(display, SWT.COLOR_INFO_BACKGROUND));
shell.setForeground(Colors.getSystemColor(display, SWT.COLOR_INFO_FOREGROUND));
Menu menu = new Menu(shell);
MenuItem menuItem = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(menuItem, "MyTorrentsView.menu.thisColumn.toClipboard");
menuItem.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
ClipboardCopy.copyToClipBoard(logAlert.text + (logAlert.details == null ? "" : "\n" + logAlert.details));
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
shell.setMenu(menu);
ImageLoader imageLoader = ImageLoader.getInstance();
imgClose = imageLoader.getImage("image.systemwarning.closeitem");
boundsClose = imgClose.getBounds();
GC gc = new GC(shell);
FontData[] fontdata = gc.getFont().getFontData();
fontdata[0].setHeight(fontdata[0].getHeight() + 1);
fontdata[0].setStyle(SWT.BOLD);
fontTitle = new Font(display, fontdata);
fontdata = gc.getFont().getFontData();
fontdata[0].setHeight(fontdata[0].getHeight() - 1);
fontCount = new Font(display, fontdata);
shell.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
Utils.disposeSWTObjects(new Object[] { fontTitle, fontCount });
numWarningWindowsOpen--;
}
});
Rectangle printArea = new Rectangle(BORDER_X, 0, WIDTH - (BORDER_X * 2), 5000);
spText = new GCStringPrinter(gc, text, printArea, true, false, SWT.WRAP);
spText.setUrlColor(Colors.blues[Colors.FADED_DARKEST]);
spText.calculateMetrics();
gc.setFont(fontCount);
String sCount = MessageText.getString("label.xOfTotal", new String[] { "" + historyPosition + 1, "" + getWarningCount() });
spCount = new GCStringPrinter(gc, sCount, printArea, true, false, SWT.WRAP);
spCount.calculateMetrics();
gc.setFont(fontTitle);
spTitle = new GCStringPrinter(gc, title, printArea, true, false, SWT.WRAP);
spTitle.calculateMetrics();
gc.dispose();
sizeText = spText.getCalculatedSize();
sizeTitle = spTitle.getCalculatedSize();
sizeCount = spCount.getCalculatedSize();
FormData fd;
Button btnDismiss = new Button(shell, SWT.PUSH);
Messages.setLanguageText(btnDismiss, "Button.dismiss");
final int btnHeight = btnDismiss.computeSize(SWT.DEFAULT, SWT.DEFAULT).y;
Button btnPrev = new Button(shell, SWT.PUSH);
btnPrev.setText("<");
Button btnNext = new Button(shell, SWT.PUSH);
btnNext.setText(">");
fd = new FormData();
fd.bottom = new FormAttachment(100, -BORDER_Y1);
fd.right = new FormAttachment(100, -BORDER_X);
btnNext.setLayoutData(fd);
fd = new FormData();
fd.bottom = new FormAttachment(100, -BORDER_Y1);
fd.right = new FormAttachment(btnNext, -BORDER_X);
btnPrev.setLayoutData(fd);
fd = new FormData();
fd.bottom = new FormAttachment(100, -BORDER_Y1);
fd.right = new FormAttachment(btnPrev, -BORDER_X);
btnDismiss.setLayoutData(fd);
height = BORDER_Y0 + sizeTitle.y + GAP_Y + sizeText.y + GAP_Y_TITLE_COUNT + sizeCount.y + GAP_BUTTON_Y + btnHeight + BORDER_Y1;
Rectangle area = shell.computeTrim(ptBottomRight.x - WIDTH, ptBottomRight.y - height, WIDTH, height);
shell.setBounds(area);
shell.setLocation(ptBottomRight.x - area.width, ptBottomRight.y - area.height - 2);
rectX = new Rectangle(area.width - BORDER_X - boundsClose.width, BORDER_Y0, boundsClose.width, boundsClose.height);
shell.addMouseMoveListener(new MouseMoveListener() {
int lastCursor = SWT.CURSOR_ARROW;
@Override
public void mouseMove(MouseEvent e) {
if (shell == null || shell.isDisposed()) {
return;
}
URLInfo hitUrl = spText.getHitUrl(e.x, e.y);
int cursor = (rectX.contains(e.x, e.y)) || hitUrl != null ? SWT.CURSOR_HAND : SWT.CURSOR_ARROW;
if (cursor != lastCursor) {
lastCursor = cursor;
shell.setCursor(e.display.getSystemCursor(cursor));
}
}
});
shell.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent e) {
if (shell == null || shell.isDisposed()) {
return;
}
if (rectX.contains(e.x, e.y)) {
shell.dispose();
}
URLInfo hitUrl = spText.getHitUrl(e.x, e.y);
if (hitUrl != null) {
if (hitUrl.url.equals("details")) {
MessageBoxShell mb = new MessageBoxShell(Constants.APP_NAME, logAlert.details, new String[] { MessageText.getString("Button.ok") }, 0);
mb.setUseTextBox(true);
mb.setParent(Utils.findAnyShell());
mb.open(null);
} else {
Utils.launch(hitUrl.url);
}
}
}
@Override
public void mouseDown(MouseEvent e) {
}
@Override
public void mouseDoubleClick(MouseEvent e) {
}
});
shell.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
e.gc.drawImage(imgClose, WIDTH - BORDER_X - boundsClose.width, BORDER_Y0);
Rectangle printArea;
printArea = new Rectangle(BORDER_X, BORDER_Y0 + sizeTitle.y + GAP_Y_TITLE_COUNT, WIDTH, 100);
String sCount = MessageText.getString("label.xOfTotal", new String[] { "" + (historyPosition + 1), "" + getWarningCount() });
e.gc.setAlpha(180);
Font lastFont = e.gc.getFont();
e.gc.setFont(fontCount);
spCount = new GCStringPrinter(e.gc, sCount, printArea, true, false, SWT.WRAP | SWT.TOP);
spCount.printString();
e.gc.setAlpha(255);
sizeCount = spCount.getCalculatedSize();
e.gc.setFont(lastFont);
spText.printString(e.gc, new Rectangle(BORDER_X, BORDER_Y0 + sizeTitle.y + GAP_Y_TITLE_COUNT + sizeCount.y + GAP_Y, WIDTH - BORDER_X - BORDER_X, 5000), SWT.WRAP | SWT.TOP);
e.gc.setFont(fontTitle);
e.gc.setForeground(ColorCache.getColor(e.gc.getDevice(), "#54728c"));
spTitle.printString(e.gc, new Rectangle(BORDER_X, BORDER_Y0, WIDTH - BORDER_X - BORDER_X, 5000), SWT.WRAP | SWT.TOP);
e.gc.setLineStyle(SWT.LINE_DOT);
e.gc.setLineWidth(1);
e.gc.setAlpha(180);
e.gc.drawLine(BORDER_X, height - btnHeight - (GAP_BUTTON_Y / 2) - BORDER_Y1, WIDTH - BORDER_X, height - btnHeight - (GAP_BUTTON_Y / 2) - BORDER_Y1);
}
});
shell.addTraverseListener(new TraverseListener() {
@Override
public void keyTraversed(TraverseEvent e) {
if (e.detail == SWT.TRAVERSE_ESCAPE) {
shell.dispose();
return;
}
}
});
btnPrev.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
int pos = historyPosition - 1;
if (pos < 0 || pos >= alerts.size()) {
return;
}
new SystemWarningWindow(alerts.get(pos), ptBottomRight, parent, pos);
shell.dispose();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
btnPrev.setEnabled(historyPosition > 0);
btnNext.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
int pos = historyPosition + 1;
if (pos >= alerts.size()) {
return;
}
new SystemWarningWindow(alerts.get(pos), ptBottomRight, parent, pos);
shell.dispose();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
btnNext.setEnabled(alerts.size() != historyPosition + 1);
btnDismiss.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
ArrayList<LogAlert> alerts = Alerts.getUnviewedLogAlerts();
for (int i = 0; i < alerts.size() && i <= historyPosition; i++) {
Alerts.markAlertAsViewed(alerts.get(i));
}
shell.dispose();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
shell.open();
numWarningWindowsOpen++;
}
use of com.biglybt.ui.swt.shells.GCStringPrinter.URLInfo in project BiglyBT by BiglySoftware.
the class ColumnActivityActions method cellMouseTrigger.
// @see com.biglybt.pif.ui.tables.TableCellMouseListener#cellMouseTrigger(com.biglybt.pif.ui.tables.TableCellMouseEvent)
@Override
public void cellMouseTrigger(TableCellMouseEvent event) {
ActivitiesEntry entry = (ActivitiesEntry) event.cell.getDataSource();
String tooltip = null;
boolean invalidateAndRefresh = false;
Rectangle bounds = ((TableCellSWT) event.cell).getBounds();
String text = (String) event.cell.getTableRow().getData("text");
if (text == null) {
return;
}
GCStringPrinter sp = null;
GC gc = new GC(Display.getDefault());
try {
if (font != null) {
gc.setFont(font);
}
Rectangle drawBounds = getDrawBounds((TableCellSWT) event.cell);
sp = new GCStringPrinter(gc, text, drawBounds, true, true, SWT.WRAP | SWT.CENTER);
sp.calculateMetrics();
} catch (Exception e) {
Debug.out(e);
} finally {
gc.dispose();
}
if (sp != null) {
URLInfo hitUrl = sp.getHitUrl(event.x + bounds.x, event.y + bounds.y);
int newCursor;
if (hitUrl != null) {
if (event.eventType == TableCellMouseEvent.EVENT_MOUSEUP) {
if (hitUrl.url.equals("download")) {
String referal = null;
Object ds = event.cell.getDataSource();
if (ds instanceof ActivitiesEntry) {
referal = DLReferals.DL_REFERAL_DASHACTIVITY + "-" + ((ActivitiesEntry) ds).getTypeID();
}
TorrentListViewsUtils.downloadDataSource(ds, false, referal);
} else if (hitUrl.url.equals("play")) {
String referal = null;
Object ds = event.cell.getDataSource();
if (ds instanceof ActivitiesEntry) {
referal = DLReferals.DL_REFERAL_PLAYDASHACTIVITY + "-" + ((ActivitiesEntry) ds).getTypeID();
}
TorrentListViewsUtils.playOrStreamDataSource(ds, referal, false, true);
} else if (hitUrl.url.equals("launch")) {
// run via play or stream so we get the security warning
Object ds = event.cell.getDataSource();
TorrentListViewsUtils.playOrStreamDataSource(ds, DLReferals.DL_REFERAL_LAUNCH, false, true);
} else if (hitUrl.url.startsWith("action:")) {
entry.invokeCallback(hitUrl.url.substring(7));
} else if (!UrlFilter.getInstance().urlCanRPC(hitUrl.url)) {
Utils.launch(hitUrl.url);
} else {
UIFunctionsSWT uif = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uif != null) {
String target = hitUrl.target;
if (target == null) {
target = SkinConstants.VIEWID_BROWSER_BROWSE;
}
uif.viewURL(hitUrl.url, target, "column.activity.action");
return;
}
}
}
Object ds = event.cell.getDataSource();
newCursor = SWT.CURSOR_HAND;
if (UrlFilter.getInstance().urlCanRPC(hitUrl.url)) {
tooltip = hitUrl.title;
} else {
tooltip = hitUrl.url;
}
} else {
newCursor = SWT.CURSOR_ARROW;
}
int oldCursor = ((TableCellSWT) event.cell).getCursorID();
if (oldCursor != newCursor) {
invalidateAndRefresh = true;
((TableCellSWT) event.cell).setCursorID(newCursor);
}
}
Object o = event.cell.getToolTip();
if ((o == null) || (o instanceof String)) {
String oldTooltip = (String) o;
if (!StringCompareUtils.equals(oldTooltip, tooltip)) {
invalidateAndRefresh = true;
event.cell.setToolTip(tooltip);
}
}
if (invalidateAndRefresh) {
event.cell.invalidate();
((TableCellSWT) event.cell).redraw();
}
}
use of com.biglybt.ui.swt.shells.GCStringPrinter.URLInfo in project BiglyBT by BiglySoftware.
the class ColumnActivityActions method cellPaint.
// @see com.biglybt.ui.swt.views.table.TableCellSWTPaintListener#cellPaint(org.eclipse.swt.graphics.GC, com.biglybt.ui.swt.views.table.TableCellSWT)
@Override
public void cellPaint(GC gc, TableCellSWT cell) {
ActivitiesEntry entry = (ActivitiesEntry) cell.getDataSource();
if (entry == null) {
return;
}
TableRow row = cell.getTableRow();
if (row == null) {
return;
}
String text = (String) row.getData("text");
if (text != null && text.length() > 0) {
if (font == null) {
FontData[] fontData = gc.getFont().getFontData();
fontData[0].setStyle(SWT.BOLD);
font = new Font(gc.getDevice(), fontData);
}
gc.setFont(font);
Rectangle bounds = getDrawBounds(cell);
GCStringPrinter sp = new GCStringPrinter(gc, text, bounds, true, true, SWT.WRAP | SWT.CENTER);
sp.calculateMetrics();
if (sp.hasHitUrl()) {
URLInfo[] hitUrlInfo = sp.getHitUrlInfo();
for (int i = 0; i < hitUrlInfo.length; i++) {
URLInfo info = hitUrlInfo[i];
// handle fake row when showing in column editor
info.urlUnderline = cell.getTableRow() == null || cell.getTableRow().isSelected();
if (info.urlUnderline) {
info.urlColor = null;
} else {
info.urlColor = colorLinkNormal;
}
}
int[] mouseOfs = cell.getMouseOffset();
if (mouseOfs != null) {
Rectangle realBounds = cell.getBounds();
URLInfo hitUrl = sp.getHitUrl(mouseOfs[0] + realBounds.x, mouseOfs[1] + realBounds.y);
if (hitUrl != null) {
hitUrl.urlColor = colorLinkHover;
}
}
}
sp.printString();
}
}
use of com.biglybt.ui.swt.shells.GCStringPrinter.URLInfo in project BiglyBT by BiglySoftware.
the class ColumnActivityText method cellMouseTrigger.
// @see com.biglybt.pif.ui.tables.TableCellMouseListener#cellMouseTrigger(com.biglybt.pif.ui.tables.TableCellMouseEvent)
@Override
public void cellMouseTrigger(TableCellMouseEvent event) {
String tooltip = null;
boolean invalidateAndRefresh = false;
ActivitiesEntry entry = (ActivitiesEntry) event.cell.getDataSource();
// Rectangle bounds = getDrawBounds((TableCellSWT) event.cell);
Rectangle bounds = ((TableCellSWT) event.cell).getBounds();
String text = entry.getText();
GC gc = new GC(Display.getDefault());
GCStringPrinter sp = null;
try {
sp = setupStringPrinter(gc, (TableCellSWT) event.cell);
} catch (Exception e) {
Debug.out(e);
} finally {
gc.dispose();
}
if (sp != null) {
URLInfo hitUrl = sp.getHitUrl(event.x + bounds.x, event.y + bounds.y);
int newCursor;
if (hitUrl != null) {
String url = hitUrl.url;
boolean ourUrl = UrlFilter.getInstance().urlCanRPC(url) || url.startsWith("/") || url.startsWith("#");
if (event.eventType == TableCellMouseEvent.EVENT_MOUSEDOWN && event.button == 1) {
if (!ourUrl) {
if (UrlUtils.isInternalProtocol(url)) {
try {
UIFunctionsManagerSWT.getUIFunctionsSWT().doSearch(url);
} catch (Throwable e) {
Debug.out(e);
}
} else {
Utils.launch(url);
}
} else {
UIFunctionsSWT uif = UIFunctionsManagerSWT.getUIFunctionsSWT();
if (uif != null) {
String target = hitUrl.target;
if (target == null) {
target = SkinConstants.VIEWID_BROWSER_BROWSE;
}
uif.viewURL(hitUrl.url, target, "column.activity.text");
return;
}
}
}
newCursor = SWT.CURSOR_HAND;
if (ourUrl) {
try {
tooltip = hitUrl.title == null ? null : URLDecoder.decode(hitUrl.title, "utf-8");
} catch (UnsupportedEncodingException e) {
}
} else {
tooltip = hitUrl.url;
}
} else {
newCursor = SWT.CURSOR_ARROW;
}
int oldCursor = ((TableCellSWT) event.cell).getCursorID();
if (oldCursor != newCursor) {
invalidateAndRefresh = true;
((TableCellSWT) event.cell).setCursorID(newCursor);
}
}
Object o = event.cell.getToolTip();
if ((o == null) || (o instanceof String)) {
String oldTooltip = (String) o;
if (!StringCompareUtils.equals(oldTooltip, tooltip)) {
invalidateAndRefresh = true;
event.cell.setToolTip(tooltip);
}
}
if (invalidateAndRefresh) {
event.cell.invalidate();
((TableCellSWT) event.cell).redraw();
}
}
Aggregations