/Source/biblioteq_documentationwindow.cc

https://github.com/textbrowser/biblioteq · C++ · 165 lines · 145 code · 20 blank · 0 comment · 13 complexity · 99a2b1f645679fb86afce5698168d672 MD5 · raw file

  1. #include <QDesktopServices>
  2. #include <QPrintDialog>
  3. #include <QPrinter>
  4. #include "biblioteq_documentationwindow.h"
  5. #include "biblioteq_misc_functions.h"
  6. biblioteq_documentationwindow::biblioteq_documentationwindow
  7. (QWidget *parent):biblioteq_documentationwindow(QUrl(), parent)
  8. {
  9. }
  10. biblioteq_documentationwindow::biblioteq_documentationwindow
  11. (const QUrl &url, QWidget *parent):QMainWindow(parent)
  12. {
  13. m_openExternalLinks = false;
  14. m_ui.setupUi(this);
  15. m_ui.find->setPlaceholderText("Find");
  16. m_ui.text->setSource(url);
  17. m_originalFindPalette = m_ui.find->palette();
  18. if(menuBar())
  19. menuBar()->setNativeMenuBar(true);
  20. connectSignals();
  21. }
  22. biblioteq_documentationwindow::
  23. ~biblioteq_documentationwindow()
  24. {
  25. }
  26. void biblioteq_documentationwindow::connectSignals(void)
  27. {
  28. #ifdef Q_OS_ANDROID
  29. connect(m_ui.action_Close,
  30. SIGNAL(triggered(void)),
  31. this,
  32. SLOT(hide(void)),
  33. Qt::UniqueConnection);
  34. #else
  35. connect(m_ui.action_Close,
  36. SIGNAL(triggered(void)),
  37. this,
  38. SLOT(close(void)),
  39. Qt::UniqueConnection);
  40. #endif
  41. connect(m_ui.action_Find,
  42. SIGNAL(triggered(void)),
  43. this,
  44. SLOT(slotFind(void)),
  45. Qt::UniqueConnection);
  46. connect(m_ui.action_Print,
  47. SIGNAL(triggered(void)),
  48. this,
  49. SLOT(slotPrint(void)),
  50. Qt::UniqueConnection);
  51. connect(m_ui.find,
  52. SIGNAL(returnPressed(void)),
  53. this,
  54. SLOT(slotFindText(void)),
  55. Qt::UniqueConnection);
  56. connect(m_ui.find,
  57. SIGNAL(textEdited(const QString &)),
  58. this,
  59. SLOT(slotFindText(void)),
  60. Qt::UniqueConnection);
  61. connect(m_ui.next,
  62. SIGNAL(clicked(void)),
  63. this,
  64. SLOT(slotFindText(void)),
  65. Qt::UniqueConnection);
  66. connect(m_ui.previous,
  67. SIGNAL(clicked(void)),
  68. this,
  69. SLOT(slotFindText(void)),
  70. Qt::UniqueConnection);
  71. connect(m_ui.text,
  72. SIGNAL(anchorClicked(const QUrl &)),
  73. this,
  74. SLOT(slotAnchorClicked(const QUrl &)),
  75. Qt::UniqueConnection);
  76. }
  77. void biblioteq_documentationwindow::
  78. setAllowOpeningOfExternalLinks(const bool state)
  79. {
  80. m_openExternalLinks = state;
  81. }
  82. void biblioteq_documentationwindow::setHtml(const QString &html)
  83. {
  84. m_ui.text->setHtml(html);
  85. }
  86. void biblioteq_documentationwindow::show(void)
  87. {
  88. #ifdef Q_OS_ANDROID
  89. QMainWindow::showMaximized();
  90. #else
  91. biblioteq_misc_functions::center
  92. (this, static_cast<QMainWindow *> (parentWidget()));
  93. QMainWindow::showNormal();
  94. #endif
  95. QMainWindow::activateWindow();
  96. QMainWindow::raise();
  97. }
  98. void biblioteq_documentationwindow::slotAnchorClicked(const QUrl &url)
  99. {
  100. if(url.scheme().toLower().trimmed() == "qrc")
  101. m_ui.text->setSource(url);
  102. else if(m_openExternalLinks)
  103. QDesktopServices::openUrl(url);
  104. }
  105. void biblioteq_documentationwindow::slotFind(void)
  106. {
  107. m_ui.find->setFocus();
  108. m_ui.find->selectAll();
  109. }
  110. void biblioteq_documentationwindow::slotFindText(void)
  111. {
  112. #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
  113. QTextDocument::FindFlags options = QTextDocument::FindFlags();
  114. #else
  115. QTextDocument::FindFlags options = 0;
  116. #endif
  117. if(qobject_cast<QToolButton *> (sender()) == m_ui.previous)
  118. options = QTextDocument::FindBackward;
  119. if(m_ui.find->text().isEmpty())
  120. {
  121. m_ui.find->setPalette(m_originalFindPalette);
  122. m_ui.text->moveCursor(QTextCursor::Left);
  123. }
  124. else if(!m_ui.text->find(m_ui.find->text(), options))
  125. {
  126. QColor color(240, 128, 128); // Light Coral
  127. QPalette palette(m_ui.find->palette());
  128. palette.setColor(m_ui.find->backgroundRole(), color);
  129. m_ui.find->setPalette(palette);
  130. if(!options)
  131. m_ui.text->moveCursor(QTextCursor::Start);
  132. else
  133. m_ui.text->moveCursor(QTextCursor::End);
  134. }
  135. else
  136. m_ui.find->setPalette(m_originalFindPalette);
  137. }
  138. void biblioteq_documentationwindow::slotPrint(void)
  139. {
  140. QPrinter printer;
  141. QPrintDialog printDialog(&printer, this);
  142. printDialog.setWindowIcon(windowIcon());
  143. if(printDialog.exec() == QDialog::Accepted)
  144. m_ui.text->print(&printer);
  145. }