git-svn-id: svn://db.shs.com.ru/libs@171 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -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.;
|
||||
|
||||
@@ -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<BlockBusItem * > connectedBuses() const {return buses_;}
|
||||
|
||||
@@ -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<BlockItemPin*>(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<QGraphicsItem * > 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<QGraphicsItem * > 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<QGraphicsItem * > gi = scene_->items();
|
||||
foreach (QGraphicsItem * i, gi)
|
||||
if (i->data(1004) == "pin")
|
||||
((BlockItemPin*)i)->resizePin();
|
||||
}
|
||||
|
||||
|
||||
void BlockView::moveBuses(const QList<QGraphicsItem * > & items, QPointF dp) {
|
||||
if (dp.isNull()) return;
|
||||
QList<QGraphicsItem * > gi = scene_->items();
|
||||
|
||||
@@ -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<QGraphicsItem * > & items, QPointF dp);
|
||||
QList<BlockBusItem * > internalBuses(const QList<BlockItem * > & items);
|
||||
QList<BlockItem * > selectedBlocks() const;
|
||||
@@ -119,6 +121,7 @@ protected:
|
||||
QList<BlockItem * > copy_items;
|
||||
QList<BlockBusItem * > 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;
|
||||
|
||||
Reference in New Issue
Block a user