1) Moved net.sourceforge.phpeclipse.ui\src\net\sourceforge\phpdt back to net.sourcefo...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PrintMarginPainter.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PrintMarginPainter.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PrintMarginPainter.java
new file mode 100644 (file)
index 0000000..c941e15
--- /dev/null
@@ -0,0 +1,126 @@
+package net.sourceforge.phpeclipse.phpeditor;
+
+/*
+ * (c) Copyright IBM Corp. 2000, 2001.
+ * All Rights Reserved.
+ */
+
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+
+public class PrintMarginPainter implements IPainter, PaintListener {
+
+       private StyledText fTextWidget;
+
+       private int fMarginWidth = 80;
+
+       private Color fColor;
+
+       private int fLineStyle = SWT.LINE_SOLID;
+
+       private int fLineWidth = 1;
+
+       private int fCachedWidgetX = -1;
+
+       private boolean fIsActive = false;
+
+       public PrintMarginPainter(ISourceViewer sourceViewer) {
+               fTextWidget = sourceViewer.getTextWidget();
+       }
+
+       public void setMarginRulerColumn(int width) {
+               fMarginWidth = width;
+               intialize();
+       }
+
+       public void setMarginRulerStyle(int lineStyle) {
+               fLineStyle = lineStyle;
+       }
+
+       public void setMarginRulerWidth(int lineWidth) {
+               fLineWidth = lineWidth;
+       }
+
+       /**
+        * Must be called before <code>paint</code> is called the first time.
+        */
+       public void setMarginRulerColor(Color color) {
+               fColor = color;
+       }
+
+       /**
+        * Must be called explicitly when font of text widget changes.
+        */
+       public void intialize() {
+               computeWidgetX();
+               fTextWidget.redraw();
+       }
+
+       private void computeWidgetX() {
+               GC gc = new GC(fTextWidget);
+               int pixels = gc.getFontMetrics().getAverageCharWidth();
+               gc.dispose();
+
+               fCachedWidgetX = pixels * fMarginWidth;
+       }
+
+       /*
+        * @see IPainter#deactivate(boolean)
+        */
+       public void deactivate(boolean redraw) {
+               if (fIsActive) {
+                       fIsActive = false;
+                       fTextWidget.removePaintListener(this);
+                       if (redraw)
+                               fTextWidget.redraw();
+               }
+       }
+
+       /*
+        * @see IPainter#dispose()
+        */
+       public void dispose() {
+               fTextWidget = null;
+       }
+
+       /*
+        * @see IPainter#paint(int)
+        */
+       public void paint(int reason) {
+               if (!fIsActive) {
+                       fIsActive = true;
+                       fTextWidget.addPaintListener(this);
+                       if (fCachedWidgetX == -1)
+                               computeWidgetX();
+                       fTextWidget.redraw();
+               }
+       }
+
+       /*
+        * @see IPainter#setPositionManager(IPositionManager)
+        */
+       public void setPositionManager(IPositionManager manager) {
+       }
+
+       /*
+        * @see PaintListener#paintControl(PaintEvent)
+        */
+       public void paintControl(PaintEvent e) {
+               if (fTextWidget != null) {
+                       int x = fCachedWidgetX - fTextWidget.getHorizontalPixel();
+                       if (x >= 0) {
+                               Rectangle area = fTextWidget.getClientArea();
+                               e.gc.setForeground(fColor);
+                               e.gc.setLineStyle(fLineStyle);
+                               e.gc.setLineWidth(fLineWidth);
+                               e.gc.drawLine(x, 0, x, area.height);
+                       }
+               }
+       }
+}