Ejemplo n.º 1
0
bool HistoryChatView::onContextMenu(ChatView *view, QMenu *menu, const QWebHitTestResult &result)
{
  ChatId id(view->id());
  if (id.type() != ChatId::ChannelId && id.type() != ChatId::UserId)
    return false;

  const QWebElement block = result.enclosingBlockElement();
  if (!block.hasClass("blocks") || block.hasClass("removed"))
    return false;

  const QWebElement container = block.parent();
  const qint64 mdate          = container.attribute(LS("data-mdate")).toLongLong();

  if (!mdate)
    return false;

  id.init(container.attribute(LS("id")).toLatin1());
  id.setDate(mdate);
  if (id.type() != ChatId::MessageId)
    return false;

  const int permissions = this->permissions(HistoryDB::get(id));
  if (permissions == NoPermissions)
    return false;

  if (permissions & Remove) {
    QVariantList data;
    data << view->id() << (id.hasOid() ? ChatId::toBase32(id.oid().byteArray()) : id.toString());

    menu->insertAction(menu->actions().first(), removeAction(data));
  }
  return true;
}
Ejemplo n.º 2
0
/*!
    Returns the area of the largest element at position (\a x,\a y) that is no larger
    than \a maxWidth by \a maxHeight pixels.

    May return an area larger in the case when no smaller element is at the position.
*/
QRect QDeclarativeWebView::elementAreaAt(int x, int y, int maxWidth, int maxHeight) const
{
    QWebHitTestResult hit = page()->mainFrame()->hitTestContent(QPoint(x, y));
    QRect hitRect = hit.boundingRect();
    QWebElement element = hit.enclosingBlockElement();
    if (maxWidth <= 0)
        maxWidth = INT_MAX;
    if (maxHeight <= 0)
        maxHeight = INT_MAX;
    while (!element.parent().isNull() && element.geometry().width() <= maxWidth && element.geometry().height() <= maxHeight) {
        hitRect = element.geometry();
        element = element.parent();
    }
    return hitRect;
}
QRectF WebContentAnimationItem::findZoomableRectForPoint(const QPointF& point)
{
    QPointF zoomPoint = m_webView->mapFromParent(point);

    QWebHitTestResult hitResult = m_webView->page()->mainFrame()->hitTestContent(zoomPoint.toPoint());
    QWebElement targetElement = hitResult.enclosingBlockElement();

    while (!targetElement.isNull() && targetElement.geometry().width() < MinDoubleClickZoomTargetWidth)
        targetElement = targetElement.parent();

    if (!targetElement.isNull()) {
        QRectF elementRect = targetElement.geometry();
        qreal overMinWidth = elementRect.width() - ZoomableContentMinWidth;
        if (overMinWidth < 0)
            elementRect.adjust(overMinWidth / 2, 0, -overMinWidth / 2, 0);
        zoomPoint.setX(elementRect.x());
        QRectF resultRect(zoomPoint, elementRect.size());
        return QRectF(m_webView->mapToParent(resultRect.topLeft()),
                      m_webView->mapToParent(resultRect.bottomRight()));
    }
    return QRectF();
}
Ejemplo n.º 4
0
bool qPBReaderDocView::GetWordAt(QPoint iScreenPt,
                                 QString & osSelectedWord,
                                 QRect & oScreenRect)
{
   TRSCOPE(view, "qPBReaderDocView::GetWordAt");

   osSelectedWord.clear();
   oScreenRect = QRect();

   QWebHitTestResult hit = _pDoc->mainFrame()->hitTestContent(iScreenPt);
   QWebElement e = hit.enclosingBlockElement();
   TRACE << ENC(e.localName()) << endl;
   QString js = "qPBReaderFindClickedWord(this, " + QString::number(
                   iScreenPt.x()) + "," + QString::number(iScreenPt.y()) + ")";
   TRACE << ENC(js) << endl;

   QList<QVariant> lv = e.evaluateJavaScript(js).toList();
   bool b = lv.size() == 5;
   TRACE << "Javascript word search = " << b << endl;

   if (b)
   {
      osSelectedWord = lv[0].toString();
      oScreenRect = QRect(QPoint(lv[1].toInt(), lv[2].toInt()), QPoint(lv[3].toInt(),
                          lv[4].toInt()));
      TRACE << ENC(osSelectedWord)
            << " rect (" << oScreenRect.left() << ", "
            << oScreenRect.top() << ", "
            << oScreenRect.right() << ", "
            << oScreenRect.bottom() << ")" << endl;
   }

   TRACE << TRANAME << " ended with " << b << endl;

   return b;
}