void HelpBrowser::onContextMenuRequest( const QPoint & pos ) { QMenu menu; QWebHitTestResult hitTest = mWebView->page()->mainFrame()->hitTestContent( pos ); if (!hitTest.linkElement().isNull()) { menu.addAction( mWebView->pageAction(QWebPage::CopyLinkToClipboard) ); } menu.addSeparator(); if (hitTest.isContentEditable() || hitTest.isContentSelected()) menu.addAction( mWebView->pageAction(QWebPage::Copy) ); if (hitTest.isContentEditable()) menu.addAction( mWebView->pageAction(QWebPage::Paste) ); if (hitTest.isContentSelected()) menu.addAction( mActions[Evaluate] ); menu.addSeparator(); menu.addAction( mWebView->pageAction(QWebPage::Back) ); menu.addAction( mWebView->pageAction(QWebPage::Forward) ); menu.addAction( mWebView->pageAction(QWebPage::Reload) ); menu.addSeparator(); menu.addAction( mActions[ZoomIn] ); menu.addAction( mActions[ZoomOut] ); menu.addAction( mActions[ResetZoom] ); menu.exec( mWebView->mapToGlobal(pos) ); }
void WebView::contextMenuEvent ( QContextMenuEvent * event ) { QMenu menu; QPoint pos = event->pos(); QWebHitTestResult hitTest = page()->mainFrame()->hitTestContent( pos ); if (!hitTest.linkElement().isNull()) { menu.addAction( pageAction(QWebPage::CopyLinkToClipboard) ); menu.addSeparator(); } if (hitTest.isContentEditable() || hitTest.isContentSelected()) { menu.addAction( pageAction(QWebPage::Copy) ); if (hitTest.isContentEditable()) menu.addAction( pageAction(QWebPage::Paste) ); menu.addSeparator(); } menu.addAction( pageAction(QWebPage::Back) ); menu.addAction( pageAction(QWebPage::Forward) ); menu.addAction( pageAction(QWebPage::Reload) ); menu.exec( event->globalPos() ); }
void CopyTitle::populateWebViewMenu(QMenu* menu, WebView* view, const QWebHitTestResult &r) { m_view = view; if (!r.linkUrl().isEmpty() || r.isContentEditable()) { return; } QString title; if (!r.imageUrl().isEmpty()) { QString m_userFileName = r.imageUrl().toString().trimmed(); int pos = m_userFileName.lastIndexOf(QLatin1Char('/')); if (pos != -1) { int size = m_userFileName.size(); title = m_userFileName.right(size - pos - 1); } else { title += "image"; } } else { title = view->title(); } menu->addAction(QIcon::fromTheme("edit-copy"), !r.imageUrl().isEmpty() ? tr("Copy Image Name") : tr("Copy Page Title"), this, SLOT(copyPageTitle()))->setData(title); }
void ChannelsView::contextMenu(QMenu *menu, const QWebHitTestResult &result) { menu->addSeparator(); const QUrl url = result.linkUrl(); if (url.scheme() == LS("chat") && url.host() == LS("channel")) ChannelMenu::bind(menu, ChatUrls::channel(url), IChannelMenu::ChatViewScope); menu->addSeparator(); if (!result.isContentEditable()) { menu->removeAction(pageAction(QWebPage::SelectAll)); menu->addAction(pageAction(QWebPage::SelectAll)); } }
void GraphicsWebView::mousePressEvent(QGraphicsSceneMouseEvent* event) { pressPoint = event->pos(); if (pressTime) { pressTimer.start(pressTime, this); parent->setKeepMouseGrab(false); } else { grabMouse(); parent->setKeepMouseGrab(true); } QGraphicsWebView::mousePressEvent(event); QWebHitTestResult hit = page()->mainFrame()->hitTestContent(pressPoint.toPoint()); if (hit.isContentEditable()) parent->forceActiveFocus(); setFocus(); }
void TestPlugin::populateWebViewMenu(QMenu* menu, WebView* view, const QWebHitTestResult &r) { // Called from WebView when creating context menu m_view = view; QString title; if (!r.imageUrl().isEmpty()) { title += " on image"; } if (!r.linkUrl().isEmpty()) { title += " on link"; } if (r.isContentEditable()) { title += " on input"; } menu->addAction(tr("My first plugin action") + title, this, SLOT(actionSlot())); }
void PIM_Handler::populateWebViewMenu(QMenu* menu, WebView* view, const QWebHitTestResult &hitTest) { m_view = view; m_element = hitTest.element(); if (!hitTest.isContentEditable()) { return; } if (!m_loaded) { loadSettings(); } QMenu* pimMenu = new QMenu(tr("Insert Personal Information")); pimMenu->setIcon(QIcon(":/PIM/data/PIM.png")); if (!m_allInfo[PI_FirstName].isEmpty() && !m_allInfo[PI_LastName].isEmpty()) { const QString fullname = m_allInfo[PI_FirstName] + " " + m_allInfo[PI_LastName]; QAction* action = pimMenu->addAction(fullname, this, SLOT(pimInsert())); action->setData(fullname); } for (int i = 0; i < PI_Max; ++i) { const QString info = m_allInfo[PI_Type(i)]; if (info.isEmpty()) { continue; } QAction* action = pimMenu->addAction(info, this, SLOT(pimInsert())); action->setData(info); action->setStatusTip(m_translations[PI_Type(i)]); } pimMenu->addSeparator(); pimMenu->addAction(tr("Edit"), this, SLOT(showSettings())); menu->addMenu(pimMenu); menu->addSeparator(); }
void ChatView::contextMenu(QMenu *menu, const QWebHitTestResult &result) { menu->addSeparator(); const QUrl url = result.linkUrl(); if (url.scheme() == LS("chat") && url.host() == LS("channel")) Hooks::ChannelMenu::bind(menu, ChatUrls::channel(url), Hooks::ChatViewScope); else Hooks::ChannelMenu::bind(menu, ChatClient::channels()->get(m_id), Hooks::ChatViewScope); menu->addSeparator(); QMenu *display = menu->addMenu(SCHAT_ICON(Gear), tr("Display")); display->addAction(m_seconds); display->addAction(m_service); developerMenu(display); display->removeAction(pageAction(QWebPage::Reload)); menu->addAction(m_autoscroll); menu->addSeparator(); ClientChannel channel = ChatClient::channels()->get(id()); if (channel && channel->data().value(LS("page")) == 1) menu->addAction(m_reload); else menu->addAction(m_clear); if (!result.isContentEditable()) { menu->removeAction(pageAction(QWebPage::SelectAll)); menu->addAction(pageAction(QWebPage::SelectAll)); } menu->removeAction(pageAction(QWebPage::Reload)); menu->removeAction(pageAction(QWebPage::InspectElement)); connect(menu, SIGNAL(triggered(QAction*)), SLOT(menuTriggered(QAction*))); ChatViewHooks::contextMenu(this, menu, result); }
void MainWindow::editorContextMenuRequested ( const QPoint & pos ) { QString guid = getCurrentNoteGuid(); if (guid == "main") return; QWebHitTestResult element = ui->editor->page()->mainFrame()->hitTestContent(pos); if (element.isNull()) return; QStringList classes = allClasses(element.element()); if (classes.contains("pdfarea")) return; QMenu * menu = new QMenu(ui->editor); menu->addAction(ui->editor->pageAction(QWebPage::SelectAll)); if (element.isContentSelected()) { if (!menu->isEmpty()) menu->addSeparator(); menu->addAction(ui->editor->pageAction(QWebPage::Copy)); if (element.isContentEditable()) { menu->addAction(ui->editor->pageAction(QWebPage::Cut)); menu->addAction(ui->editor->pageAction(QWebPage::Paste)); menu->addSeparator(); menu->addAction(ui->editor->pageAction(QWebPage::ToggleBold)); menu->addAction(ui->editor->pageAction(QWebPage::ToggleItalic)); menu->addAction(ui->editor->pageAction(QWebPage::ToggleUnderline)); } } if(!element.imageUrl().isEmpty() && (element.imageUrl().scheme() != "qrc")) { if (!menu->isEmpty()) menu->addSeparator(); menu->addAction(ui->editor->pageAction(QWebPage::DownloadImageToDisk)); menu->addAction(ui->editor->pageAction(QWebPage::CopyImageToClipboard)); if (element.imageUrl().scheme() == "http" || element.imageUrl().scheme() == "https") menu->addAction(ui->editor->pageAction(QWebPage::CopyImageUrlToClipboard)); QAction * openImage = new QAction(this); openImage->setText("Open Image"); openImage->setObjectName("openImage"); menu->addAction(openImage); if (JS("editMode").toBool()) { menu->addSeparator(); QAction * deleteImage = new QAction(this); deleteImage->setText("Delete Image"); deleteImage->setObjectName("deleteImage"); deleteImage->setIcon(QIcon::fromTheme("edit-delete")); menu->addAction(deleteImage); if (element.imageUrl().scheme() != "resource") { QAction * saveLocally = new QAction(this); saveLocally->setText("Save Locally"); saveLocally->setObjectName("saveLocally"); menu->addAction(saveLocally); } } } if (!element.linkUrl().isEmpty()) { if (!menu->isEmpty()) menu->addSeparator(); menu->addAction(ui->editor->pageAction(QWebPage::CopyLinkToClipboard)); if (element.isContentEditable()) { QAction * deleteURL = new QAction(this); deleteURL->setText("Remove Link"); deleteURL->setObjectName("deleteURL"); menu->addAction(deleteURL); } } if (element.isContentEditable() && !element.isContentSelected() && element.imageUrl().isEmpty()) { Speller *speller = Speller::GetInstance(); if (speller->initialized()) { QHash<QString, QString> languages = speller->availableLanguages(); if (!languages.isEmpty()) { if (!menu->isEmpty()) menu->addSeparator(); QAction* act = menu->addAction(tr("Check &Spelling")); act->setCheckable(true); act->setChecked(speller->isEnabled()); connect(act, SIGNAL(triggered(bool)), speller, SLOT(setEnabled(bool))); if (speller->isEnabled()) { QString word = JS(QString("getSpellingWord(%1,%2);").arg(pos.x()).arg(pos.y())).toString(); if (!word.isEmpty() && speller->isMisspelled(word)) { QStringList wordsList = speller->suggest(word); QFont boldFont = menu->font(); boldFont.setBold(true); QActionGroup *suggestGroup = new QActionGroup(menu); QString suggest; foreach(suggest, wordsList) { QAction* act = menu->addAction(suggest); act->setFont(boldFont); act->setData(suggest); suggestGroup->addAction(act); } connect(suggestGroup, SIGNAL(triggered(QAction*)), this, SLOT(replaceWord(QAction*))); }
void CustomWebView::contextMenuEvent (QGraphicsSceneContextMenuEvent *e) { QPointer<QMenu> menu (new QMenu ()); QWebHitTestResult r = page ()-> mainFrame ()->hitTestContent (e->pos ().toPoint ()); IHookProxy_ptr proxy (new Util::DefaultHookProxy ()); emit hookWebViewContextMenu (proxy, this, e, r, menu, WVSStart); if (!r.linkUrl ().isEmpty ()) { QUrl url = r.linkUrl (); QString text = r.linkText (); if (XmlSettingsManager::Instance ()-> property ("TryToDetectRSSLinks").toBool ()) { bool hasAtom = text.contains ("Atom"); bool hasRSS = text.contains ("RSS"); if (hasAtom || hasRSS) { LeechCraft::Entity e; if (hasAtom) { e.Additional_ ["UserVisibleName"] = "Atom"; e.Mime_ = "application/atom+xml"; } else { e.Additional_ ["UserVisibleName"] = "RSS"; e.Mime_ = "application/rss+xml"; } e.Entity_ = url; e.Parameters_ = LeechCraft::FromUserInitiated | LeechCraft::OnlyHandle; bool ch = false; emit couldHandle (e, &ch); if (ch) { QList<QVariant> datalist; datalist << url << e.Mime_; menu->addAction (tr ("Subscribe"), this, SLOT (subscribeToLink ()))->setData (datalist); menu->addSeparator (); } } } menu->addAction (tr ("Open &here"), this, SLOT (openLinkHere ()))->setData (url); menu->addAction (tr ("Open in new &tab"), this, SLOT (openLinkInNewTab ()))->setData (url); menu->addSeparator (); menu->addAction (tr ("&Save link..."), this, SLOT (saveLink ())); QList<QVariant> datalist; datalist << url << text; menu->addAction (tr ("&Bookmark link..."), this, SLOT (bookmarkLink ()))->setData (datalist); menu->addSeparator (); if (!page ()->selectedText ().isEmpty ()) menu->addAction (pageAction (QWebPage::Copy)); menu->addAction (tr ("&Copy link"), this, SLOT (copyLink ())); if (page ()->settings ()->testAttribute (QWebSettings::DeveloperExtrasEnabled)) menu->addAction (pageAction (QWebPage::InspectElement)); } else if (page ()->selectedText ().contains (UrlInText)) { menu->addAction (tr ("Open as link"), this, SLOT (openLinkInNewTab ()))-> setData (page ()->selectedText ()); } emit hookWebViewContextMenu (proxy, this, e, r, menu, WVSAfterLink); if (!r.imageUrl ().isEmpty ()) { if (!menu->isEmpty ()) menu->addSeparator (); menu->addAction (tr ("Open image here"), this, SLOT (openImageHere ()))->setData (r.imageUrl ()); menu->addAction (tr ("Open image in new tab"), this, SLOT (openImageInNewTab ())); menu->addSeparator (); menu->addAction (tr ("Save image..."), this, SLOT (saveImage ())); QAction *spx = menu->addAction (tr ("Save pixmap..."), this, SLOT (savePixmap ())); spx->setToolTip (tr ("Saves the rendered pixmap without redownloading.")); spx->setProperty ("Poshuku/OrigPX", r.pixmap ()); spx->setProperty ("Poshuku/OrigURL", r.imageUrl ()); menu->addAction (tr ("Copy image"), this, SLOT (copyImage ())); menu->addAction (tr ("Copy image location"), this, SLOT (copyImageLocation ()))->setData (r.imageUrl ()); } emit hookWebViewContextMenu (proxy, this, e, r, menu, WVSAfterImage); bool hasSelected = !page ()->selectedText ().isEmpty (); if (hasSelected) { if (!menu->isEmpty ()) menu->addSeparator (); menu->addAction (pageAction (QWebPage::Copy)); } if (r.isContentEditable ()) menu->addAction (pageAction (QWebPage::Paste)); if (hasSelected) { Browser_->Find_->setData (page ()->selectedText ()); menu->addAction (Browser_->Find_); menu->addAction (tr ("Search..."), this, SLOT (searchSelectedText ())); } emit hookWebViewContextMenu (proxy, this, e, r, menu, WVSAfterSelectedText); if (menu->isEmpty ()) menu = page ()->createStandardContextMenu (); if (!menu->isEmpty ()) menu->addSeparator (); menu->addAction (Browser_->Add2Favorites_); menu->addSeparator (); menu->addAction (Browser_->Print_); menu->addAction (Browser_->PrintPreview_); menu->addSeparator (); menu->addAction (Browser_->ViewSources_); menu->addAction (Browser_->SavePage_); menu->addSeparator (); menu->addAction (pageAction (QWebPage::ReloadAndBypassCache)); menu->addAction (Browser_->ReloadPeriodically_); menu->addAction (Browser_->NotifyWhenFinished_); menu->addSeparator (); menu->addAction (Browser_->ChangeEncoding_->menuAction ()); emit hookWebViewContextMenu (proxy, this, e, r, menu, WVSAfterFinish); if (!menu->isEmpty ()) menu->exec (Browser_->GetGraphicsView ()->viewport ()-> mapToGlobal (e->pos ().toPoint ())); else QGraphicsWebView::contextMenuEvent (e); if (menu) delete menu; }