Explorar el Código

fix: 按Esc退出鼠标画线模式

main
suyu hace 3 semanas
padre
commit
84352e5bad
Se han modificado 4 ficheros con 57 adiciones y 0 borrados
  1. +14
    -0
      app/src/ui/logic_editor_widget.cpp
  2. +2
    -0
      app/src/ui/logic_editor_widget.h
  3. +10
    -0
      app/src/ui/main_window.cpp
  4. +31
    -0
      app/tests/runtime_panel_controller_tests.cpp

+ 14
- 0
app/src/ui/logic_editor_widget.cpp Ver fichero

@@ -2386,6 +2386,20 @@ void LogicEditorWidget::mouseDoubleClickEvent(QMouseEvent *event)
event->accept();
}

void LogicEditorWidget::keyPressEvent(QKeyEvent *event)
{
if (event != nullptr
&& event->key() == Qt::Key_Escape
&& event->modifiers() == Qt::NoModifier
&& mouse_wire_mode_ != MouseWireMode::Select)
{
setMouseWireMode(MouseWireMode::Select);
event->accept();
return;
}
QGraphicsView::keyPressEvent(event);
}

void LogicEditorWidget::drawForeground(
QPainter *painter, const QRectF &rect)
{


+ 2
- 0
app/src/ui/logic_editor_widget.h Ver fichero

@@ -15,6 +15,7 @@
class QGraphicsScene;
class QCompleter;
class QEvent;
class QKeyEvent;
class QLineEdit;
class QMouseEvent;
class QPainter;
@@ -77,6 +78,7 @@ protected:
void mouseMoveEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
void keyPressEvent(QKeyEvent *event) override;
void drawForeground(QPainter *painter, const QRectF &rect) override;
void resizeEvent(QResizeEvent *event) override;
void scrollContentsBy(int dx, int dy) override;


+ 10
- 0
app/src/ui/main_window.cpp Ver fichero

@@ -1476,6 +1476,16 @@ void MainWindow::clearActiveSelection()
logic_editor_widget_->clearSelection();
selected_logic_node_id_.clear();
showLogicNodeProperties({});
if (logic_editor_widget_->mouseWireMode()
!= LogicEditorWidget::MouseWireMode::Select)
{
const QSignalBlocker draw_blocker(ui_->mouseDrawWireAction);
const QSignalBlocker erase_blocker(ui_->mouseEraseWireAction);
ui_->mouseDrawWireAction->setChecked(false);
ui_->mouseEraseWireAction->setChecked(false);
logic_editor_widget_->setMouseWireMode(
LogicEditorWidget::MouseWireMode::Select);
}
}
}



+ 31
- 0
app/tests/runtime_panel_controller_tests.cpp Ver fichero

@@ -839,6 +839,36 @@ void testWireGesturePreviewKeepsAtomicCommit()
"undo must restore every cell changed by the gesture");
}

void testEscapeExitsMouseWireMode()
{
TestProjectStorage storage;
ProjectService project_service(storage);
LogicEditorService editor(project_service);
LogicEditorWidget widget(editor);

const auto press_escape = [&widget]
{
QKeyEvent event(
QEvent::KeyPress,
Qt::Key_Escape,
Qt::NoModifier);
QApplication::sendEvent(&widget, &event);
require(event.isAccepted(), "escape must be consumed by the logic editor");
};

widget.setMouseWireMode(LogicEditorWidget::MouseWireMode::Draw);
press_escape();
require(
widget.mouseWireMode() == LogicEditorWidget::MouseWireMode::Select,
"escape must exit mouse draw mode");

widget.setMouseWireMode(LogicEditorWidget::MouseWireMode::Erase);
press_escape();
require(
widget.mouseWireMode() == LogicEditorWidget::MouseWireMode::Select,
"escape must exit mouse erase mode");
}

void testCursorAdvanceAndInlineCommandInput()
{
TestProjectStorage storage;
@@ -1232,6 +1262,7 @@ int main(int argc, char *argv[])
testLogicEditorGridSelectionAndDeletion();
testLadderLayoutAndDragDeletion();
testWireGesturePreviewKeepsAtomicCommit();
testEscapeExitsMouseWireMode();
testCursorAdvanceAndInlineCommandInput();
testVerticalWireShortcutAdvancesDownward();
testSegmentLevelTraceProjection();


Cargando…
Cancelar
Guardar