/src/gui/src/image-context-menu.cpp

https://github.com/Bionus/imgbrd-grabber · C++ · 53 lines · 39 code · 10 blank · 4 comment · 2 complexity · d2dd25743d4b9df93d56b575fda3162a MD5 · raw file

  1. #include "image-context-menu.h"
  2. #include <QDesktopServices>
  3. #include <QSignalMapper>
  4. #include "main-window.h"
  5. #include "models/image.h"
  6. #include "reverse-search/reverse-search-engine.h"
  7. #include "reverse-search/reverse-search-loader.h"
  8. ImageContextMenu::ImageContextMenu(QSettings *settings, QSharedPointer<Image> img, MainWindow *mw, QWidget *parent)
  9. : QMenu(parent), m_settings(settings), m_image(std::move(img)), m_mainWindow(mw)
  10. {
  11. // Load reverse search engines
  12. ReverseSearchLoader loader(m_settings);
  13. m_reverseSearchEngines = loader.getAllReverseSearchEngines();
  14. // Open image in browser
  15. addAction(QIcon(":/images/icons/browser.png"), tr("Open in browser"), this, SLOT(openInBrowser()));
  16. // Reverse search actions
  17. QMenu *reverseSearchMenu = addMenu(QIcon(":/images/icons/globe.png"), tr("Web services"));
  18. auto *reverseSearchMapper = new QSignalMapper(this);
  19. connect(reverseSearchMapper, SIGNAL(mapped(int)), this, SLOT(reverseImageSearch(int)));
  20. for (int i = 0; i < m_reverseSearchEngines.count(); ++i) {
  21. ReverseSearchEngine engine = m_reverseSearchEngines[i];
  22. QAction *subMenuAct = reverseSearchMenu->addAction(engine.icon(), engine.name());
  23. connect(subMenuAct, SIGNAL(triggered()), reverseSearchMapper, SLOT(map()));
  24. reverseSearchMapper->setMapping(subMenuAct, i);
  25. }
  26. // MD5 search
  27. addAction(QIcon(":/images/icons/hash.png"), tr("Search MD5"), this, SLOT(searchMd5()));
  28. }
  29. void ImageContextMenu::openInBrowser()
  30. {
  31. QDesktopServices::openUrl(m_image->pageUrl());
  32. }
  33. void ImageContextMenu::searchMd5()
  34. {
  35. m_mainWindow->addTab("md5:" + m_image->md5());
  36. }
  37. void ImageContextMenu::reverseImageSearch(int i)
  38. {
  39. if (m_reverseSearchEngines.count() < i) {
  40. return;
  41. }
  42. m_reverseSearchEngines[i].searchByUrl(m_image->fileUrl());
  43. }