mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-03 10:34:14 +02:00
Add live cursor-coordinate readout to the element editor status bar (#580)
Displays the cursor's scene position (same grid units as the parts' X/Y property spinboxes) in a permanent status bar label, updated on every mouse move. Addresses the overlapping-node mis-click case from the originating forum report: with a live readout, precise pointing no longer requires guessing against nearby z-ordered points. ElementScene::mouseMoveEvent already computed the (optionally grid-snapped) scene position on every move; it now also emits it via a new mouseMoved(QPointF) signal, which QETElementEditor's status bar label subscribes to.
This commit is contained in:
@@ -124,6 +124,7 @@ void ElementScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
|
||||
{
|
||||
if (m_event_interface) {
|
||||
if (m_event_interface -> mouseMoveEvent(e)) {
|
||||
emit mouseMoved(e -> scenePos());
|
||||
if (m_event_interface->isFinish()) {
|
||||
delete m_event_interface;
|
||||
m_event_interface = nullptr;
|
||||
@@ -136,6 +137,8 @@ void ElementScene::mouseMoveEvent(QGraphicsSceneMouseEvent *e)
|
||||
if (!(e -> modifiers() & Qt::ControlModifier))
|
||||
event_pos = snapToGrid(event_pos);
|
||||
|
||||
emit mouseMoved(event_pos);
|
||||
|
||||
if (m_behavior == PasteArea) {
|
||||
QRectF current_rect(m_paste_area -> rect());
|
||||
current_rect.moveCenter(event_pos);
|
||||
|
||||
@@ -179,6 +179,8 @@ class ElementScene : public QGraphicsScene
|
||||
void elementInfoChanged();
|
||||
/// Signal emitted when the element type changes
|
||||
void elementTypeChanged();
|
||||
/// Signal emitted with the current cursor position (scene coordinates) on every mouse move
|
||||
void mouseMoved(const QPointF &pos);
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(ElementScene::ItemOptions)
|
||||
|
||||
@@ -1194,6 +1194,16 @@ void QETElementEditor::initGui()
|
||||
if (te) te->refreshMasterLabelVisibility();
|
||||
});
|
||||
|
||||
//Live cursor position readout, in the same scene coordinates as the parts' X/Y properties
|
||||
m_position_label = new QLabel(this);
|
||||
m_position_label->setMinimumWidth(120);
|
||||
statusBar()->addPermanentWidget(m_position_label);
|
||||
connect(m_elmt_scene, &ElementScene::mouseMoved, this, [this](const QPointF &pos) {
|
||||
m_position_label->setText(tr("X: %1 Y: %2")
|
||||
.arg(pos.x(), 0, 'f', 1)
|
||||
.arg(pos.y(), 0, 'f', 1));
|
||||
});
|
||||
|
||||
statusBar()->showMessage(tr("Éditeur d'éléments", "status bar message"));
|
||||
}
|
||||
|
||||
|
||||
@@ -161,6 +161,8 @@ class QETElementEditor : public QMainWindow
|
||||
|
||||
QLabel *m_default_informations = nullptr;
|
||||
|
||||
QLabel *m_position_label = nullptr;
|
||||
|
||||
};
|
||||
|
||||
#endif // QETELEMENTEDITOR_H
|
||||
|
||||
Reference in New Issue
Block a user