From 67d8d3576d228cc76728e132e8fb16bde36118ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 15 Mar 2017 13:21:12 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@167 a8b55f48-bf90-11e4-a774-851b48703e85 --- cd_utils/cdutils_core.cpp | 2 -- cd_utils/cdutils_k.h | 2 +- cd_utils/cdutils_protocol.h | 1 + qad_blockview/blockview.cpp | 19 ++++++++++++++++++- qad_blockview/blockview.h | 2 ++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cd_utils/cdutils_core.cpp b/cd_utils/cdutils_core.cpp index 186a315..b539dc1 100644 --- a/cd_utils/cdutils_core.cpp +++ b/cd_utils/cdutils_core.cpp @@ -192,8 +192,6 @@ void CDCore::K_Send() { piCoutObj << "K_Send"; PIByteArray ba; PIIOByteArray iob(&ba, PIIODevice::ReadWrite); -// PIIOByteArray iob; -// iob.open(&ba, PIIODevice::ReadWrite); k_write(&iob); //piCoutObj << PIString(ba); if (sendt.isRunning()) { diff --git a/cd_utils/cdutils_k.h b/cd_utils/cdutils_k.h index 2588b3e..9cb2fe3 100644 --- a/cd_utils/cdutils_k.h +++ b/cd_utils/cdutils_k.h @@ -25,7 +25,7 @@ public: const CDType operator [](const PIDeque & path_) const {return (*this)[path_];} CDSection & section(int v); const CDSection section(int v) const; - CDSection & section(const PIDeque &path); + CDSection & section(const PIDeque & path); CDSection & root(); const CDSection root() const; diff --git a/cd_utils/cdutils_protocol.h b/cd_utils/cdutils_protocol.h index 4c674bf..d644adc 100644 --- a/cd_utils/cdutils_protocol.h +++ b/cd_utils/cdutils_protocol.h @@ -8,6 +8,7 @@ namespace CDUtils { enum CDPacketType {CD_Ping, CD_Pong, CD_KQuery, CD_KSend, CD_Command, CD_XData, CD_XQuery}; # pragma pack(push,1) + struct PacketHeader { int type; // CDPacketType int session_id; diff --git a/qad_blockview/blockview.cpp b/qad_blockview/blockview.cpp index 5cac43a..ec47db2 100644 --- a/qad_blockview/blockview.cpp +++ b/qad_blockview/blockview.cpp @@ -441,12 +441,15 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { blockSignals(true); if (moved) { QList ci; + QList bi; foreach (QGraphicsItem * b, sel_items) if (b->data(1006) == "item") { ci << qgraphicsitem_cast(b); ai << qgraphicsitem_cast(b); } - copyBlocks(ci, copy_dp); + bi = internalBuses(ci); + if (!ci.isEmpty()) copyBlocks(ci, copy_dp); + if (!bi.isEmpty()) copyBuses(bi, copy_dp); } qDeleteAll(copy_items); copy_items.clear(); @@ -1186,6 +1189,20 @@ void BlockView::moveBuses(const QList & items, QPointF dp) { } +QList BlockView::internalBuses(const QList & items) { + QList ret; + if (items.isEmpty()) return ret; + QList sbl = buses(); + QSet sis = QSet::fromList(items); + foreach (BlockBusItem * bi, sbl) { + QSet bis = QSet::fromList(bi->connectedBlocks()); + if ((bis - sis).isEmpty()) + ret << bi; + } + return ret; +} + + void BlockView::adjustThumb() { if (!scene()) return; QSizeF sr = sceneRect().size(), tr; diff --git a/qad_blockview/blockview.h b/qad_blockview/blockview.h index 4925eba..81c7a6d 100644 --- a/qad_blockview/blockview.h +++ b/qad_blockview/blockview.h @@ -99,11 +99,13 @@ protected: void markPins(int bus_type); void unmarkPins(bool to_normal = false); void moveBuses(const QList & items, QPointF dp); + QList internalBuses(const QList & items); double _thumb() const {return _talpha;} void scrollFromThumb(); virtual void loadBus(BlockBusItem * bus) {} virtual void copyBlocks(QList items, QPointF offset) {} + virtual void copyBuses(QList items, QPointF offset) {} virtual void newBusStarted(int bus_type) {} QGraphicsScene * scene_;