diff options
Diffstat (limited to 'khotkeys/kcontrol/gesturedrawer.cpp')
-rw-r--r-- | khotkeys/kcontrol/gesturedrawer.cpp | 161 |
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" |