| 1123 | } |
| 1124 | |
| 1125 | VisualNode* |
| 1126 | TreeCanvas::eventNode(QEvent* event) { |
| 1127 | int x = 0; |
| 1128 | int y = 0; |
| 1129 | switch (event->type()) { |
| 1130 | case QEvent::ToolTip: |
| 1131 | { |
| 1132 | QHelpEvent* he = static_cast<QHelpEvent*>(event); |
| 1133 | x = he->x(); |
| 1134 | y = he->y(); |
| 1135 | break; |
| 1136 | } |
| 1137 | case QEvent::MouseButtonDblClick: |
| 1138 | case QEvent::MouseButtonPress: |
| 1139 | case QEvent::MouseButtonRelease: |
| 1140 | case QEvent::MouseMove: |
| 1141 | { |
| 1142 | QMouseEvent* me = static_cast<QMouseEvent*>(event); |
| 1143 | #if QT_VERSION >= 0x060000 |
| 1144 | x = me->position().x(); |
| 1145 | y = me->position().y(); |
| 1146 | #else |
| 1147 | x = me->x(); |
| 1148 | y = me->y(); |
| 1149 | #endif |
| 1150 | break; |
| 1151 | } |
| 1152 | case QEvent::ContextMenu: |
| 1153 | { |
| 1154 | QContextMenuEvent* ce = static_cast<QContextMenuEvent*>(event); |
| 1155 | x = ce->x(); |
| 1156 | y = ce->y(); |
| 1157 | break; |
| 1158 | } |
| 1159 | default: |
| 1160 | return nullptr; |
| 1161 | } |
| 1162 | QAbstractScrollArea* sa = |
| 1163 | static_cast<QAbstractScrollArea*>(parentWidget()->parentWidget()); |
| 1164 | int xoff = sa->horizontalScrollBar()->value()/scale; |
| 1165 | int yoff = sa->verticalScrollBar()->value()/scale; |
| 1166 | |
| 1167 | BoundingBox bb = root->getBoundingBox(); |
| 1168 | int w = |
| 1169 | static_cast<int>((bb.right-bb.left+Layout::extent)*scale); |
| 1170 | if (w < sa->viewport()->width()) |
| 1171 | xoff -= (sa->viewport()->width()-w)/2; |
| 1172 | |
| 1173 | VisualNode* n; |
| 1174 | n = root->findNode(*na, |
| 1175 | static_cast<int>(x/scale-xtrans+xoff), |
| 1176 | static_cast<int>((y-30)/scale+yoff)); |
| 1177 | return n; |
| 1178 | } |
| 1179 | |
| 1180 | bool |
| 1181 | TreeCanvas::event(QEvent* event) { |