Skip to content

Commit e9d2496

Browse files
sp00ktoberclaude
andcommitted
fix(studio): a node's tip shows over its title, not NodeGraphQt's rename hint
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
1 parent da6a93e commit e9d2496

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

‎apps/studio/src/mhfu_studio/monster/panels/node_graph.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@ def _sync(self, s: _Shown, spec: NodeSpec) -> None:
575575
if resized:
576576
view.draw_node()
577577
view.setToolTip(spec.tip) # after `draw_node`, which sets NodeGraphQt's own
578+
view.text_item.setToolTip("") # NodeGraphQt's rename hint hides the node's tip
578579

579580
def _tint(self, role: str) -> tuple[QColor, QColor] | None:
580581
"""A role's body and edge colours."""

‎apps/studio/tests/monster/ui/test_node_graph.py‎

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@
66

77
import pytest
88
from mhfu_studio.monster.panels.node_graph import (
9+
FADED,
910
NODE_W,
1011
GraphView,
1112
LinkSpec,
1213
NodeSpec,
1314
wrap,
1415
)
1516
from mhfu_studio.shell.overlay import Ink
16-
from PySide6.QtCore import QPoint, QPointF, Qt
17+
from PySide6.QtCore import QEvent, QPoint, QPointF, Qt
1718
from PySide6.QtGui import (
1819
QFont,
1920
QFontMetricsF,
21+
QHelpEvent,
2022
QInputDevice,
2123
QKeySequence,
2224
QNativeGestureEvent,
@@ -25,7 +27,7 @@
2527
QWheelEvent,
2628
)
2729
from PySide6.QtTest import QTest
28-
from PySide6.QtWidgets import QApplication
30+
from PySide6.QtWidgets import QApplication, QToolTip
2931

3032
LEFT, NONE = Qt.MouseButton.LeftButton, Qt.KeyboardModifier.NoModifier
3133

@@ -679,3 +681,43 @@ def test_the_canvas_takes_a_colour_and_frames_nodes(qtbot: Any) -> None:
679681
node = view._shown["m"].view
680682
assert abs(centre.x() - (node.scenePos().x() + node.boundingRect().width() / 2)) < 120
681683
view.frame(["nope"])
684+
685+
686+
def test_a_nodes_tip_shows_over_its_title(qtbot: Any) -> None:
687+
view = make(qtbot)
688+
item = view._shown["m"].view
689+
assert item.text_item.toolTip() == ""
690+
vp = view.viewer.viewport()
691+
where = view.viewer.mapFromScene(item.mapToScene(QPointF(item.width / 2, 8)))
692+
QApplication.sendEvent(vp, QHelpEvent(QEvent.Type.ToolTip, where, vp.mapToGlobal(where)))
693+
qtbot.wait(20)
694+
assert QToolTip.text() == "spins"
695+
QToolTip.hideText()
696+
697+
698+
def test_faded_links_are_drawn_back_and_come_forward_again(qtbot: Any) -> None:
699+
view = make(qtbot)
700+
701+
def ops() -> dict[LinkSpec, float]:
702+
return {w: p.opacity() for w, p in view._pipes().items()}
703+
704+
assert set(ops().values()) == {1.0}
705+
view.show(nodes(), LINKS, faded=[LINKS[0]])
706+
assert ops() == {LINKS[0]: FADED, LINKS[1]: 1.0}
707+
view.show(nodes(), LINKS)
708+
assert set(ops().values()) == {1.0}
709+
710+
711+
def test_a_selection_is_told_whole_and_a_show_does_not_tell_it(qtbot: Any) -> None:
712+
view = make(qtbot)
713+
got: list[list[str]] = []
714+
view.selection_changed.connect(got.append)
715+
view.select(["t"])
716+
qtbot.wait(20)
717+
assert got == []
718+
view._shown["c"].view.setSelected(True)
719+
qtbot.wait(20)
720+
assert got == [["t", "c"]]
721+
view.show(nodes(), LINKS)
722+
qtbot.wait(20)
723+
assert got == [["t", "c"]] and view.selected() == ["t", "c"]

0 commit comments

Comments
 (0)