From e45ac32c36659b37c2e4918b95d36a4689c6c5aa 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: Fri, 17 Mar 2017 11:53:57 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@171 a8b55f48-bf90-11e4-a774-851b48703e85 --- qad_blockview/blockitem.cpp | 5 +++++ qad_blockview/blockitem.h | 2 ++ qad_blockview/blockview.cpp | 36 +++++++++++++++++++++++++++++++++++- qad_blockview/blockview.h | 3 +++ 4 files changed, 45 insertions(+), 1 deletion(-) diff --git a/qad_blockview/blockitem.cpp b/qad_blockview/blockitem.cpp index f6c3561..9477674 100644 --- a/qad_blockview/blockitem.cpp +++ b/qad_blockview/blockitem.cpp @@ -24,6 +24,11 @@ BlockItemPin::BlockItemPin(Qt::Alignment a, int bus_type_, const QString & text_ } +void BlockItemPin::resizePin(double r) { + ell_item.setRect(-r, -r, r+r, r+r); +} + + void BlockItemPin::_init(bool affect_parent) { QRectF tbr = text_item.boundingRect(); const double r = 7.; diff --git a/qad_blockview/blockitem.h b/qad_blockview/blockitem.h index c79f9d8..aa2e763 100644 --- a/qad_blockview/blockitem.h +++ b/qad_blockview/blockitem.h @@ -77,6 +77,8 @@ public: void saveState() {sstate_.push(state_);} bool restoreState() {if (sstate_.isEmpty()) return false; setState(sstate_.pop()); return true;} void clearStateStack() {sstate_.clear();} + + void resizePin(double r = 7.); BlockItem * parent() const {return parent_;} QList connectedBuses() const {return buses_;} diff --git a/qad_blockview/blockview.cpp b/qad_blockview/blockview.cpp index 8ffa44b..1d773fa 100644 --- a/qad_blockview/blockview.cpp +++ b/qad_blockview/blockview.cpp @@ -58,6 +58,7 @@ void BlockView::_init() { mm_drag = moved = new_branch = new_bus = mm_cancel = iconnect = mm_copy = m_pin_mc = mm_thumb = false; match_bus = bus_from = 0; mm_ci = 0; + hpin = 0; grid_step = 10.; grid_points = 1; grid_pen = QPen(Qt::lightGray, 1, Qt::NoPen); @@ -214,6 +215,7 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { if (me->buttons().testFlag(Qt::MidButton)) btncnt++; mm_cancel = btncnt >= 2; match_bus = bus_from = 0; + hpin = 0; copy_dp = QPointF(); //qDebug() << mm_cancel << mm_copy << mm_drag << new_branch << new_bus; if (mm_copy && mm_cancel) { @@ -318,6 +320,20 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) { mm_drag = fmm_drag = true; } else { if (tmp_bus.isVisible()) { + mil = scene_->items(me->scenePos()); + hpin = 0; + foreach (QGraphicsItem * i, mil) + if (i->data(1004) == "pin") { + hpin = qgraphicsitem_cast(i); + break; + } + if (hpin) { + if (hpin->state() == BlockItemPin::Accept) + hoverAcceptedPin(hpin); + else + hpin = 0; + } else + unhoverPins(); if (new_branch) { matchBus(); break; @@ -963,12 +979,14 @@ void BlockView::applyGridStep() { void BlockView::trace(QPointF scene_pos_from, QPointF scene_pos_to, BlockBusItem * bus) { + if (hpin) + scene_pos_to = hpin->scenePos(); last_trace_from = scene_pos_from; trace_to = scene_pos_to; QRect sr = scene_->sceneRect().toRect(); int dx = sr.left() / grid_step, dy = sr.top() / grid_step; - QPoint dp(-dx, -dy), qpt = quantize(scene_pos_to, grid_step).toPoint() / grid_step + dp; //qDebug() << dp; + QPoint dp(-dx, -dy), qpt = quantize(scene_pos_to, grid_step).toPoint() / grid_step + dp; QTime tm; tm.restart(); wavetrace.resize(sr.size() / grid_step); @@ -1142,6 +1160,7 @@ bool BlockView::connectTmpToBus(BlockBusItem * bus) { void BlockView::markPins(int bus_type) { + unhoverPins(); QList gi = scene_->items(); foreach (QGraphicsItem * i, gi) { if (i->data(1004) == "pin") { @@ -1160,6 +1179,7 @@ void BlockView::markPins(int bus_type) { void BlockView::unmarkPins(bool to_normal) { + unhoverPins(); QList gi = scene_->items(); foreach (QGraphicsItem * i, gi) { if (i->data(1004) == "pin") { @@ -1171,6 +1191,20 @@ void BlockView::unmarkPins(bool to_normal) { } +void BlockView::hoverAcceptedPin(BlockItemPin * pin) { + if (!pin) return; + pin->resizePin(12.); +} + + +void BlockView::unhoverPins() { + QList gi = scene_->items(); + foreach (QGraphicsItem * i, gi) + if (i->data(1004) == "pin") + ((BlockItemPin*)i)->resizePin(); +} + + void BlockView::moveBuses(const QList & items, QPointF dp) { if (dp.isNull()) return; QList gi = scene_->items(); diff --git a/qad_blockview/blockview.h b/qad_blockview/blockview.h index e7ecdf4..19013fa 100644 --- a/qad_blockview/blockview.h +++ b/qad_blockview/blockview.h @@ -98,6 +98,8 @@ protected: bool connectTmpToBus(BlockBusItem* bus); void markPins(int bus_type); void unmarkPins(bool to_normal = false); + void hoverAcceptedPin(BlockItemPin * pin); + void unhoverPins(); void moveBuses(const QList & items, QPointF dp); QList internalBuses(const QList & items); QList selectedBlocks() const; @@ -119,6 +121,7 @@ protected: QList copy_items; QList copy_buses; BlockBusItem tmp_bus, * match_bus, * bus_from; + BlockItemPin * hpin; BlockViewWavetrace wavetrace; QPoint press_point, screen_point, thumb_press; QPointF scene_point, trace_from, last_trace_from, trace_to, copy_dp;