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) {
|
void BlockItemPin::_init(bool affect_parent) {
|
||||||
QRectF tbr = text_item.boundingRect();
|
QRectF tbr = text_item.boundingRect();
|
||||||
const double r = 7.;
|
const double r = 7.;
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ public:
|
|||||||
void saveState() {sstate_.push(state_);}
|
void saveState() {sstate_.push(state_);}
|
||||||
bool restoreState() {if (sstate_.isEmpty()) return false; setState(sstate_.pop()); return true;}
|
bool restoreState() {if (sstate_.isEmpty()) return false; setState(sstate_.pop()); return true;}
|
||||||
void clearStateStack() {sstate_.clear();}
|
void clearStateStack() {sstate_.clear();}
|
||||||
|
|
||||||
|
void resizePin(double r = 7.);
|
||||||
|
|
||||||
BlockItem * parent() const {return parent_;}
|
BlockItem * parent() const {return parent_;}
|
||||||
QList<BlockBusItem * > connectedBuses() const {return buses_;}
|
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;
|
mm_drag = moved = new_branch = new_bus = mm_cancel = iconnect = mm_copy = m_pin_mc = mm_thumb = false;
|
||||||
match_bus = bus_from = 0;
|
match_bus = bus_from = 0;
|
||||||
mm_ci = 0;
|
mm_ci = 0;
|
||||||
|
hpin = 0;
|
||||||
grid_step = 10.;
|
grid_step = 10.;
|
||||||
grid_points = 1;
|
grid_points = 1;
|
||||||
grid_pen = QPen(Qt::lightGray, 1, Qt::NoPen);
|
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++;
|
if (me->buttons().testFlag(Qt::MidButton)) btncnt++;
|
||||||
mm_cancel = btncnt >= 2;
|
mm_cancel = btncnt >= 2;
|
||||||
match_bus = bus_from = 0;
|
match_bus = bus_from = 0;
|
||||||
|
hpin = 0;
|
||||||
copy_dp = QPointF();
|
copy_dp = QPointF();
|
||||||
//qDebug() << mm_cancel << mm_copy << mm_drag << new_branch << new_bus;
|
//qDebug() << mm_cancel << mm_copy << mm_drag << new_branch << new_bus;
|
||||||
if (mm_copy && mm_cancel) {
|
if (mm_copy && mm_cancel) {
|
||||||
@@ -318,6 +320,20 @@ bool BlockView::eventFilter(QObject * o, QEvent * e) {
|
|||||||
mm_drag = fmm_drag = true;
|
mm_drag = fmm_drag = true;
|
||||||
} else {
|
} else {
|
||||||
if (tmp_bus.isVisible()) {
|
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) {
|
if (new_branch) {
|
||||||
matchBus();
|
matchBus();
|
||||||
break;
|
break;
|
||||||
@@ -963,12 +979,14 @@ void BlockView::applyGridStep() {
|
|||||||
|
|
||||||
|
|
||||||
void BlockView::trace(QPointF scene_pos_from, QPointF scene_pos_to, BlockBusItem * bus) {
|
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;
|
last_trace_from = scene_pos_from;
|
||||||
trace_to = scene_pos_to;
|
trace_to = scene_pos_to;
|
||||||
QRect sr = scene_->sceneRect().toRect();
|
QRect sr = scene_->sceneRect().toRect();
|
||||||
int dx = sr.left() / grid_step, dy = sr.top() / grid_step;
|
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;
|
//qDebug() << dp;
|
||||||
|
QPoint dp(-dx, -dy), qpt = quantize(scene_pos_to, grid_step).toPoint() / grid_step + dp;
|
||||||
QTime tm;
|
QTime tm;
|
||||||
tm.restart();
|
tm.restart();
|
||||||
wavetrace.resize(sr.size() / grid_step);
|
wavetrace.resize(sr.size() / grid_step);
|
||||||
@@ -1142,6 +1160,7 @@ bool BlockView::connectTmpToBus(BlockBusItem * bus) {
|
|||||||
|
|
||||||
|
|
||||||
void BlockView::markPins(int bus_type) {
|
void BlockView::markPins(int bus_type) {
|
||||||
|
unhoverPins();
|
||||||
QList<QGraphicsItem * > gi = scene_->items();
|
QList<QGraphicsItem * > gi = scene_->items();
|
||||||
foreach (QGraphicsItem * i, gi) {
|
foreach (QGraphicsItem * i, gi) {
|
||||||
if (i->data(1004) == "pin") {
|
if (i->data(1004) == "pin") {
|
||||||
@@ -1160,6 +1179,7 @@ void BlockView::markPins(int bus_type) {
|
|||||||
|
|
||||||
|
|
||||||
void BlockView::unmarkPins(bool to_normal) {
|
void BlockView::unmarkPins(bool to_normal) {
|
||||||
|
unhoverPins();
|
||||||
QList<QGraphicsItem * > gi = scene_->items();
|
QList<QGraphicsItem * > gi = scene_->items();
|
||||||
foreach (QGraphicsItem * i, gi) {
|
foreach (QGraphicsItem * i, gi) {
|
||||||
if (i->data(1004) == "pin") {
|
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) {
|
void BlockView::moveBuses(const QList<QGraphicsItem * > & items, QPointF dp) {
|
||||||
if (dp.isNull()) return;
|
if (dp.isNull()) return;
|
||||||
QList<QGraphicsItem * > gi = scene_->items();
|
QList<QGraphicsItem * > gi = scene_->items();
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ protected:
|
|||||||
bool connectTmpToBus(BlockBusItem* bus);
|
bool connectTmpToBus(BlockBusItem* bus);
|
||||||
void markPins(int bus_type);
|
void markPins(int bus_type);
|
||||||
void unmarkPins(bool to_normal = false);
|
void unmarkPins(bool to_normal = false);
|
||||||
|
void hoverAcceptedPin(BlockItemPin * pin);
|
||||||
|
void unhoverPins();
|
||||||
void moveBuses(const QList<QGraphicsItem * > & items, QPointF dp);
|
void moveBuses(const QList<QGraphicsItem * > & items, QPointF dp);
|
||||||
QList<BlockBusItem * > internalBuses(const QList<BlockItem * > & items);
|
QList<BlockBusItem * > internalBuses(const QList<BlockItem * > & items);
|
||||||
QList<BlockItem * > selectedBlocks() const;
|
QList<BlockItem * > selectedBlocks() const;
|
||||||
@@ -119,6 +121,7 @@ protected:
|
|||||||
QList<BlockItem * > copy_items;
|
QList<BlockItem * > copy_items;
|
||||||
QList<BlockBusItem * > copy_buses;
|
QList<BlockBusItem * > copy_buses;
|
||||||
BlockBusItem tmp_bus, * match_bus, * bus_from;
|
BlockBusItem tmp_bus, * match_bus, * bus_from;
|
||||||
|
BlockItemPin * hpin;
|
||||||
BlockViewWavetrace wavetrace;
|
BlockViewWavetrace wavetrace;
|
||||||
QPoint press_point, screen_point, thumb_press;
|
QPoint press_point, screen_point, thumb_press;
|
||||||
QPointF scene_point, trace_from, last_trace_from, trace_to, copy_dp;
|
QPointF scene_point, trace_from, last_trace_from, trace_to, copy_dp;
|
||||||
|
|||||||
Reference in New Issue
Block a user