summaryrefslogtreecommitdiffstats
path: root/khotkeys/kcontrol/gesturedrawer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'khotkeys/kcontrol/gesturedrawer.cpp')
-rw-r--r--khotkeys/kcontrol/gesturedrawer.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/khotkeys/kcontrol/gesturedrawer.cpp b/khotkeys/kcontrol/gesturedrawer.cpp
new file mode 100644
index 000000000..2364e6e51
--- /dev/null
+++ b/khotkeys/kcontrol/gesturedrawer.cpp
@@ -0,0 +1,161 @@
+/****************************************************************************
+
+ KHotKeys
+
+ Copyright (C) 2003 Mike Pilone <[email protected]>
+ Copyright (C) 2003 Lubos Lunak <[email protected]>
+
+ Distributed under the terms of the GNU General Public License version 2.
+
+****************************************************************************/
+
+#include <tqcolor.h>
+#include <tqpainter.h>
+
+#include "gesturedrawer.h"
+
+namespace KHotKeys
+{
+
+GestureDrawer::GestureDrawer(TQWidget *parent, const char *name)
+ : TQFrame(parent, name), _data(TQString::null)
+ {
+ setBackgroundColor( colorGroup().base());
+ setFrameStyle(TQFrame::Panel | TQFrame::Sunken);
+ setMinimumSize(30, 30);
+ }
+
+GestureDrawer::~GestureDrawer()
+ {
+ }
+
+void GestureDrawer::setData(const TQString &data)
+ {
+ _data = data;
+
+ repaint();
+ }
+
+void GestureDrawer::paintEvent(TQPaintEvent *ev)
+ {
+ // Iterate through the data points and draw a line to each of them
+ TQ_UINT32 startCell = 0;
+ TQ_UINT32 endCell = 0;
+ TQPoint startPoint;
+ TQPoint endPoint;
+
+ TQPainter p(this);
+
+ if (_data.length() > 0)
+ {
+ startCell = TQString(_data[0]).toUInt();
+ }
+
+ for (TQ_UINT32 index = 1; index < _data.length(); ++index)
+ {
+ endCell = TQString(_data[index]).toUInt();
+
+ startPoint = lookupCellCoords(startCell);
+ endPoint = lookupCellCoords(endCell);
+
+ if (index == 1)
+ {
+ // Draw something to show the starting point
+ p.drawRect(startPoint.x()-2, startPoint.y()-2, 4, 4);
+ p.fillRect(startPoint.x()-2, startPoint.y()-2, 4, 4,
+ TQBrush(black));
+ }
+
+ p.drawLine(startPoint, endPoint);
+ drawArrowHead(startPoint, endPoint, p);
+
+ startCell = endCell;
+ }
+
+ p.end();
+
+ TQFrame::paintEvent(ev);
+ }
+
+TQPoint GestureDrawer::lookupCellCoords(TQ_UINT32 cell)
+ {
+ // First divide the widget into thirds, horizontally and vertically
+ TQ_UINT32 w = width();
+ TQ_UINT32 h = height();
+
+ TQ_UINT32 wThird = w / 3;
+ TQ_UINT32 hThird = h / 3;
+
+ switch(cell)
+ {
+ case 1:
+ return TQPoint(wThird/2, 2*hThird+hThird/2);
+
+ case 2:
+ return TQPoint(wThird+wThird/2, 2*hThird+hThird/2);
+
+ case 3:
+ return TQPoint(2*wThird+wThird/2, 2*hThird+hThird/2);
+
+ case 4:
+ return TQPoint(wThird/2, hThird+hThird/2);
+
+ case 5:
+ return TQPoint(wThird+wThird/2, hThird+hThird/2);
+
+ case 6:
+ return TQPoint(2*wThird+wThird/2, hThird+hThird/2);
+
+ case 7:
+ return TQPoint(wThird/2, hThird/2);
+
+ case 8:
+ return TQPoint(wThird+wThird/2, hThird/2);
+
+ case 9:
+ return TQPoint(2*wThird+wThird/2, hThird/2);
+ }
+
+ return TQPoint(0, 0);
+ }
+
+void GestureDrawer::drawArrowHead(TQPoint &start, TQPoint &end,
+ TQPainter &p)
+ {
+ int deltaX = end.x() - start.x();
+ int deltaY = end.y() - start.y();
+
+ if (deltaY == 0)
+ {
+ // horizontal line
+ int offset = 0;
+ if (deltaX > 0)
+ offset = -3;
+ else
+ offset = 3;
+
+ p.drawLine(TQPoint(end.x()+offset, end.y()+2), end);
+ p.drawLine(TQPoint(end.x()+offset, end.y()-2), end);
+ }
+ else if (deltaX == 0)
+ {
+ // vertical line
+ int offset = 0;
+ if (deltaY > 0)
+ offset = -3;
+ else
+ offset = +3;
+
+ p.drawLine(TQPoint(end.x()+2, end.y()+offset), end);
+ p.drawLine(TQPoint(end.x()-2, end.y()+offset), end);
+ }
+ else
+ {
+ // diagnal - The math would be pretty complex, so don't do anything
+ }
+
+ }
+
+} // namespace KHotKeys
+
+#include "gesturedrawer.moc"