2005-03-18 16:42:48 +00:00
|
|
|
/*
|
|
|
|
|
* qlo10k1 - GUI frontend for ld10k1
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2004 by Peter Zubaj
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, write to the Free Software
|
2017-11-14 14:46:35 +01:00
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
2005-03-18 16:42:48 +00:00
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <qpainter.h>
|
|
|
|
|
|
|
|
|
|
#include "structure_io.h"
|
|
|
|
|
#include "structure_link.h"
|
|
|
|
|
|
|
|
|
|
#define IO_WIDTH 70
|
|
|
|
|
#define IO_HEIGHT 20
|
|
|
|
|
|
|
|
|
|
StrIOBase::StrIOBase(RSItemBaseWithType::ItemType it) : RSItemBaseWithType(it)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StrIOBase::calcSize()
|
|
|
|
|
{
|
|
|
|
|
setSize(IO_WIDTH, IO_HEIGHT);
|
|
|
|
|
|
|
|
|
|
RSItemBase::calcSize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define IO_SELECT_WH 7
|
|
|
|
|
#define IO_INNER_SPACE_X 7
|
|
|
|
|
#define IO_INNER_SPACE_Y 2
|
|
|
|
|
|
|
|
|
|
void StrIOBase::draw(DrawingParams *dp)
|
|
|
|
|
{
|
|
|
|
|
int xp, yp, wp, hp;
|
|
|
|
|
xp = (int)(x() * dp->zoomKoef);
|
|
|
|
|
yp = (int)(y() * dp->zoomKoef);
|
|
|
|
|
wp = (int)(width() * dp->zoomKoef);
|
|
|
|
|
hp = (int)(height() * dp->zoomKoef);
|
|
|
|
|
|
|
|
|
|
dp->painter->setPen(QPen(IO_BOX_COLOR, 1));
|
|
|
|
|
dp->painter->drawRoundRect(xp, yp, wp, hp, 20, 50);
|
|
|
|
|
|
|
|
|
|
if (flagSelected())
|
|
|
|
|
{
|
|
|
|
|
// top left
|
|
|
|
|
dp->painter->fillRect(
|
|
|
|
|
xp,
|
|
|
|
|
yp,
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
QBrush(BOX_SELECTED_COLOR));
|
|
|
|
|
// top right
|
|
|
|
|
dp->painter->fillRect(
|
|
|
|
|
(int)(xp + wp - IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
yp,
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
QBrush(BOX_SELECTED_COLOR));
|
|
|
|
|
// bottom left
|
|
|
|
|
dp->painter->fillRect(
|
|
|
|
|
xp,
|
|
|
|
|
(int)(yp + hp - IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
QBrush(BOX_SELECTED_COLOR));
|
|
|
|
|
|
|
|
|
|
// bottom right
|
|
|
|
|
dp->painter->fillRect(
|
|
|
|
|
(int)(xp + wp - IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(yp + hp - IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
(int)(IO_SELECT_WH * dp->zoomKoef),
|
|
|
|
|
QBrush(BOX_SELECTED_COLOR));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dp->painter->setPen(IO_TEXT_PEN);
|
|
|
|
|
dp->painter->drawText(
|
|
|
|
|
(int)((x() + 2 * IO_INNER_SPACE_X + (width() / 100) * 10) * dp->zoomKoef),
|
|
|
|
|
(int)((y() + IO_INNER_SPACE_Y + (height() / 100) * 10) * dp->zoomKoef),
|
|
|
|
|
(int)((width() - 4 * IO_INNER_SPACE_X) * dp->zoomKoef),
|
|
|
|
|
(int)((height() - 2 * IO_INNER_SPACE_Y) * dp->zoomKoef),
|
|
|
|
|
Qt::AlignLeft | Qt::WordBreak,
|
|
|
|
|
getIOName());
|
|
|
|
|
dp->painter->setPen(DEF_PAINTING_PEN);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool StrIOBase::containsPoint(int xp, int yp)
|
|
|
|
|
{
|
|
|
|
|
// FIXME - round shape
|
|
|
|
|
return QRect(x(), y(), width(), height()).contains(xp, yp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool StrIOBase::containsHandlePoint(int xp, int yp)
|
|
|
|
|
{
|
|
|
|
|
return getHandlePoint(xp, yp) != RSItemBase::None;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RSItemBase::RSItemHandle StrIOBase::getHandlePoint(int xp, int yp)
|
|
|
|
|
{
|
|
|
|
|
// top left
|
|
|
|
|
if (QRect(x(), y(), IO_SELECT_WH, IO_SELECT_WH).contains(xp, yp))
|
|
|
|
|
return RSItemBase::TopLeft;
|
|
|
|
|
// top right
|
|
|
|
|
if (QRect(x() + width() - IO_SELECT_WH, y(), IO_SELECT_WH, IO_SELECT_WH).contains(xp, yp))
|
|
|
|
|
return RSItemBase::TopRight;
|
|
|
|
|
// bottom left
|
|
|
|
|
if (QRect(x(), y() + height() - IO_SELECT_WH, IO_SELECT_WH, IO_SELECT_WH).contains(xp, yp))
|
|
|
|
|
return RSItemBase::BottomLeft;
|
|
|
|
|
// bottom right
|
|
|
|
|
if (QRect(x() + width() - IO_SELECT_WH, y() + height() - IO_SELECT_WH, IO_SELECT_WH, IO_SELECT_WH).contains(xp, yp))
|
|
|
|
|
return RSItemBase::BottomRight;
|
|
|
|
|
return RSItemBase::None;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StrIOBase::getIOPoint(RSItemIO *item, int *xp, int *yp)
|
|
|
|
|
{
|
|
|
|
|
// for io it is in center
|
|
|
|
|
*xp = x() + width() / 2;
|
|
|
|
|
*yp = y() + height() / 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StrIOBase::updateContents(QScrollView *sv, float zoom)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++)
|
|
|
|
|
{
|
|
|
|
|
RSItemIO *io = getIO(i, 0);
|
|
|
|
|
if (io)
|
|
|
|
|
{
|
|
|
|
|
StrLink *l = io->getConnectedTo();
|
|
|
|
|
if (l)
|
|
|
|
|
l->updateOneSegment(sv, l->findRoute(io), zoom);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RSItemBaseWithType::updateContents(sv, zoom);
|
|
|
|
|
}
|