You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebase/khotkeys/kcontrol/gesturedrawer.cpp

162 lines
3.7 KiB

/****************************************************************************
KHotKeys
Copyright (C) 2003 Mike Pilone <mpilone@slac.com>
Copyright (C) 2003 Lubos Lunak <l.lunak@kde.org>
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
Q_UINT32 startCell = 0;
Q_UINT32 endCell = 0;
TQPoint startPoint;
TQPoint endPoint;
TQPainter p(this);
if (_data.length() > 0)
{
startCell = TQString(_data[0]).toUInt();
}
for (Q_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(Q_UINT32 cell)
{
// First divide the widget into thirds, horizontally and vertically
Q_UINT32 w = width();
Q_UINT32 h = height();
Q_UINT32 wThird = w / 3;
Q_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"