git-svn-id: svn://db.shs.com.ru/libs@244 a8b55f48-bf90-11e4-a774-851b48703e85

This commit is contained in:
2017-06-26 10:23:47 +00:00
parent 853d907725
commit 4a0663673a
7 changed files with 58 additions and 24 deletions

View File

@@ -123,7 +123,7 @@ BlockItem::~BlockItem() {
void BlockItem::_resize(QSizeF s) {
g_main.setRect(QRectF(QPointF(), s));
g_main.setPos(-g_main.rect().center());
g_main.setPos(QPointF(-g_main.rect().center().x(), -10.));
g_selection.setRect(enlargedRect(g_main.rect(), 0, 0, 8));
g_selection.setPos(g_main.pos());
QRadialGradient g(g_main.rect().width() / 2., 0, qMax<qreal>(g_main.rect().width() / 2., g_main.rect().height()));
@@ -137,6 +137,16 @@ void BlockItem::_resize(QSizeF s) {
}
void BlockItem::_moveToTop(bool only_decors) {
qreal dy = -g_main.rect().center().y() + 10;
if (!only_decors)
moveBy(0., dy);
foreach (QGraphicsItem * d, decors_)
d->moveBy(0., -dy);
}
BlockItemPin * BlockItem::addPin(BlockItemPin * pin, bool update_) {
pin->setParentItem(this);
if (!pins_[pin->alignment()].contains(pin)) pins_[pin->alignment()] << pin;
@@ -162,7 +172,9 @@ void BlockItem::removePin(BlockItemPin * pin) {
QMutableMapIterator<Qt::Alignment, QVector<BlockItemPin * > > it(pins_);
while (it.hasNext()) {
it.next();
it.value().remove(it.value().indexOf(pin));
QVector<BlockItemPin * > & pv(it.value());
if (pv.contains(pin))
pv.remove(it.value().indexOf(pin));
}
delete pin;
arrangePins();
@@ -256,7 +268,8 @@ QByteArray BlockItem::saveModel() {
foreach (QGraphicsItem * i, decors_)
s << i;*/
ChunkStream cs;
cs << cs.chunk(1, pos()) << cs.chunk(2, rotation()) << cs.chunk(3, size()) << cs.chunk(4, color()) << cs.chunk(5, pins()) << cs.chunk(6, decors_) << cs.chunk(7, pins_margin);
cs << cs.chunk(1, pos()) << cs.chunk(2, rotation()) << cs.chunk(3, size()) << cs.chunk(4, color()) << cs.chunk(5, pins())
<< cs.chunk(6, decors_) << cs.chunk(7, pins_margin) << cs.chunk(0xFF, _blockitem_current_version_);
return cs.data();
}
@@ -294,23 +307,27 @@ void BlockItem::loadModel(const QByteArray & data) {
ChunkStream cs(data);
QVector<BlockItemPin * > tp;
QList<QGraphicsItem * > dl;
int version = -1;
while (!cs.atEnd()) {
switch (cs.read()) {
case 1: /*setPos(cs.getData<QPointF>());*/ break;
case 2: /*setRotation(cs.getData<qreal>());*/ break;
case 3: setSize(cs.getData<QSizeF>()); break;
case 4: setColor(cs.getData<QColor>()); break;
case 5:
tp = cs.getData<QVector<BlockItemPin * > >();
foreach (BlockItemPin * p, tp) addPin(p);
break;
case 6:
dl = cs.getData<QList<QGraphicsItem * > >();
foreach (QGraphicsItem * d, dl) addDecor(d);
break;
case 7: setPinsMargin(cs.getData<int>()); break;
case 1: /*setPos(cs.getData<QPointF>());*/ break;
case 2: /*setRotation(cs.getData<qreal>());*/ break;
case 3: setSize(cs.getData<QSizeF>()); break;
case 4: setColor(cs.getData<QColor>()); break;
case 5:
cs.get(tp);
foreach (BlockItemPin * p, tp) addPin(p);
break;
case 6:
cs.get(dl);
foreach (QGraphicsItem * d, dl) addDecor(d);
break;
case 7: setPinsMargin(cs.getData<int>()); break;
case 0xFF: cs.get(version); break;
}
}
if (version <= 0)
_moveToTop(true);
}
@@ -321,7 +338,7 @@ QByteArray BlockItem::save() const {
pp[p->text()] = p->properties();
}
cs << cs.chunk(1, pos()) << cs.chunk(2, rotation()) << cs.chunk(3, props) << cs.chunk(5, pp) << cs.chunk(6, size());
cs << cs.chunk(10, data(2000)) << cs.chunk(11, data(2001));
cs << cs.chunk(10, data(2000)) << cs.chunk(11, data(2001)) << cs.chunk(0xFF, _blockitem_current_version_);
return cs.data();
}
@@ -330,13 +347,14 @@ void BlockItem::load(const QByteArray & data) {
if (data.isEmpty()) return;
ChunkStream cs(data);
QMap<QString, QList<BlockItem::Property> > _p;
int version = -1;
while (!cs.atEnd()) {
switch (cs.read()) {
case 1: setPos(cs.getData<QPointF>()); break;
case 2: setRotation(cs.getData<qreal>()); break;
case 3: props = cs.getData<QList<BlockItem::Property> >(); break;
case 3: cs.get(props); break;
case 5:
_p = cs.getData<QMap<QString, QList<BlockItem::Property> > >();
cs.get(_p);
foreach (BlockItemPin * p, pins())
if (_p.contains(p->text()))
p->properties() = _p[p->text()];
@@ -344,8 +362,12 @@ void BlockItem::load(const QByteArray & data) {
case 6: setSize(cs.getData<QSizeF>()); break;
case 10: setData(2000, cs.getData<QVariant>()); break;
case 11: setData(2001, cs.getData<QVariant>()); break;
case 0xFF: cs.get(version); break;
}
}
if (version <= 0) {
_moveToTop();
}
}
@@ -428,9 +450,9 @@ void BlockItem::arrangePins() {
cp = pins_.value(Qt::AlignTop);
for (int i = 0; i < cp.size(); ++i) cp[i]->setPos(_POS(pins_margin), top());
cp = pins_.value(Qt::AlignLeft);
for (int i = 0; i < cp.size(); ++i) cp[i]->setPos(left(), _POS(pins_margin));
for (int i = 0; i < cp.size(); ++i) cp[i]->setPos(left(), i * pins_margin);
cp = pins_.value(Qt::AlignRight);
for (int i = 0; i < cp.size(); ++i) cp[i]->setPos(right(), _POS(pins_margin));
for (int i = 0; i < cp.size(); ++i) cp[i]->setPos(right(), i * pins_margin);
}
#undef _POS