void RoutingToolTip::maybeTip(const QPoint &p) { RoutingDrawWidget *drawWidget = (RoutingDrawWidget *)parentWidget(); RoutingWidget *parent = (RoutingWidget *)drawWidget->parentWidget(); StrGlobal *structure = parent->getStructure(); if (!structure) return; int i, j; // find object under cursor int xp = p.x(); int yp = p.y(); drawWidget->viewportToContents(xp, yp, xp, yp); xp = parent->deZoomVal(xp); yp = parent->deZoomVal(yp); RSItemBaseWithType *item; for(item = structure->UsedItems.first(); item; item = structure->UsedItems.next()) { if (item->containsPoint(xp, yp)) { int ix; int iy; int iw; int ih; QString tipText = ""; StrInput *in = NULL; StrOutput *out = NULL; StrFX *fx = NULL; StrPatch *patch = NULL; ix = item->x(); iy = item->y(); iw = item->width(); ih = item->height(); RSItemIO *pio = NULL; switch(item->type()) { case RSItemBaseWithType::In: in = (StrInput *)item; tipText = QString("Input: %1\nName: %2").arg(in->num()).arg(in->name()); break; case RSItemBaseWithType::Out: out = (StrOutput *)item; tipText = QString("Output: %1\nName: %2").arg(out->num()).arg(out->name()); break; case RSItemBaseWithType::FX: fx = (StrFX *)item; tipText = QString("FX: %1\nName: %2").arg(fx->num()).arg(fx->name()); break; case RSItemBaseWithType::Patch: patch = (StrPatch *)item; pio = patch->getIOAtPoint(xp, yp); if (pio) { if (pio->isOutput()) tipText = QString("Patch output: %1\nOutput name: %2\n\n").arg(pio->getIdx()).arg(pio->getDesc()); else tipText = QString("Patch input: %1\nInput name: %2\n\n").arg(pio->getIdx()).arg(pio->getDesc()); QRect r; patch->getIORect(pio->isOutput(), pio->getIdx(), r); ix = r.x(); iy = r.y(); iw = r.width(); ih = r.height(); } else { // create region without ios QRegion reg(ix, iy, iw, ih); QRect ior; for (j = 0; j < 2; j++) { for (i = 0; i < patch->getMaxIOIdx(j); i++) { patch->getIORect(j, i, ior); reg = reg.subtract(QRegion(ior)); } } // find rect with point QMemArray<QRect> rects = reg.rects(); for (i = 0; i < (int)rects.count(); i++) { if (rects[i].contains(xp, yp)) { ix = rects[i].x(); iy = rects[i].y(); iw = rects[i].width(); ih = rects[i].height(); break; } } } tipText = tipText + QString("Patch: %1\nOrder: %2\nName: %3").arg(patch->num()).arg(patch->order()).arg(patch->name()); break; default: break; } if (tipText != "") { ix = parent->zoomVal(ix); iy = parent->zoomVal(iy); iw = parent->zoomVal(iw); ih = parent->zoomVal(ih); drawWidget->contentsToViewport(ix, iy, ix, iy); tip(QRect(ix, iy, iw, ih), tipText); } } } }