Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.ui.notifications/src/org/eclipse/tcf/te/ui/notifications/ScalingHyperlink.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.ui.notifications/src/org/eclipse/tcf/te/ui/notifications/ScalingHyperlink.java112
1 files changed, 112 insertions, 0 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.ui.notifications/src/org/eclipse/tcf/te/ui/notifications/ScalingHyperlink.java b/target_explorer/plugins/org.eclipse.tcf.te.ui.notifications/src/org/eclipse/tcf/te/ui/notifications/ScalingHyperlink.java
new file mode 100644
index 000000000..6b685b104
--- /dev/null
+++ b/target_explorer/plugins/org.eclipse.tcf.te.ui.notifications/src/org/eclipse/tcf/te/ui/notifications/ScalingHyperlink.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2013 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ * Wind River Systems - Extracted from o.e.mylyn.commons and adapted for Target Explorer
+ *******************************************************************************/
+
+package org.eclipse.tcf.te.ui.notifications;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.forms.widgets.ImageHyperlink;
+
+/**
+ * Enhanced {@link ImageHyperlink} that truncates the link text at the end rather than the middle if it is wider than
+ * the available space. Also provides default color and underline on hover.
+ *
+ * @author Leo Dos Santos
+ * @author Mik Kersten
+ */
+public class ScalingHyperlink extends ImageHyperlink {
+
+ private boolean strikeThrough;
+
+ protected final MouseTrackListener MOUSE_TRACK_LISTENER = new MouseTrackListener() {
+
+ @Override
+ public void mouseEnter(MouseEvent e) {
+ setUnderlined(true);
+ }
+
+ @Override
+ public void mouseExit(MouseEvent e) {
+ setUnderlined(false);
+ }
+
+ @Override
+ public void mouseHover(MouseEvent e) {
+ }
+ };
+
+ public ScalingHyperlink(Composite parent, int style) {
+ super(parent, style);
+ }
+
+ @Override
+ public void dispose() {
+ removeMouseTrackListener(MOUSE_TRACK_LISTENER);
+ super.dispose();
+ }
+
+ public void registerMouseTrackListener() {
+ addMouseTrackListener(MOUSE_TRACK_LISTENER);
+ }
+
+ public boolean isStrikeThrough() {
+ return strikeThrough;
+ }
+
+ @Override
+ protected void paintText(GC gc, Rectangle bounds) {
+ super.paintText(gc, bounds);
+ if (strikeThrough) {
+ Point totalSize = computeTextSize(SWT.DEFAULT, SWT.DEFAULT);
+ int textWidth = Math.min(bounds.width, totalSize.x);
+ int textHeight = totalSize.y;
+
+ // int descent = gc.getFontMetrics().getDescent();
+ int lineY = bounds.y + (textHeight / 2); // - descent + 1;
+ gc.drawLine(bounds.x, lineY, bounds.x + textWidth, lineY);
+ }
+ }
+
+ public void setStrikeThrough(boolean strikethrough) {
+ this.strikeThrough = strikethrough;
+ }
+
+ @Override
+ protected String shortenText(GC gc, String t, int width) {
+ if (t == null) {
+ return null;
+ }
+
+ if ((getStyle() & SWT.SHORT) != 0) {
+ return t;
+ }
+
+ String returnText = t;
+ if (gc.textExtent(t).x > width) {
+ for (int i = t.length(); i > 0; i--) {
+ String test = t.substring(0, i);
+ test = test + "..."; //$NON-NLS-1$
+ if (gc.textExtent(test).x < width) {
+ returnText = test;
+ break;
+ }
+ }
+ }
+ return returnText;
+ }
+
+} \ No newline at end of file

Back to the top