16#include <QApplication>
21#include <QGuiApplication>
24#include <QQmlProperty>
29#ifdef BUILD_TEXT_TO_SPEECH
30#include <QTextToSpeech>
36#include "../../backend/keys/cswordkey.h"
37#include "../../backend/drivers/cswordbiblemoduleinfo.h"
38#include "../../backend/managers/cswordbackend.h"
39#include "../../backend/managers/referencemanager.h"
40#include "../../util/btassert.h"
41#include "../../util/btconnect.h"
42#include "../../util/tool.h"
43#include "../bibletime.h"
44#include "../btcopybyreferencesdialog.h"
45#include "../BtMimeData.h"
46#include "../cexportmanager.h"
47#include "../debugwindow.h"
48#include "../displaywindow/cdisplaywindow.h"
49#include "../keychooser/ckeychooser.h"
58 , m_parentWindow(displayWindow)
60 , m_qmlInterface(m_quickWidget->qmlInterface())
61 , m_scrollBar(new QScrollBar(this))
63 auto *
const layout =
new QHBoxLayout(
this);
64 layout->setContentsMargins(0, 0, 0, 0);
66 m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
69 [
this](QString
const & reference) {
71 key->setKey(reference);
87 [
this](QString
const & reference) {
94 [
this](
const QString& moduleName,
const QString& keyName) {
95 auto & drag = *
new QDrag(
this);
97 std::make_unique<BTMimeData>(
100 if (
auto *
const module =
104 module->moduleIcon().pixmap(
106 std::unique_ptr<CSwordKey> key(module->createKey());
107 key->setKey(keyName);
109 mimedata->setText(key->strippedText());
111 drag.setMimeData(mimedata.release());
112 drag.exec(Qt::CopyAction, Qt::CopyAction);
119 [
this](QString
const & newLink) {
138 int speed = 25 * (1 + std::abs(value/30));
155{ QGuiApplication::clipboard()->setText(
text(part)); }
158 auto const position =
event->globalPos();
160 if (
auto const *
const action =
m_popup->exec(position);
161 action && action->property(
"bibletime_show_raw_text").toBool())
164 auto const *
const item =
166 auto const textProperty =
167 QQmlProperty::read(item, QStringLiteral(
"text"));
168 if (textProperty.isValid()) {
170 window->setPlainText(textProperty.toString());
171 window->setReadOnly(
true);
174 qDebug() << Q_FUNC_INFO <<
"text property is not valid";
177 qDebug() << Q_FUNC_INFO <<
"m_quickWidget not in focus";
184{ QGuiApplication::clipboard()->setText(
qmlInterface()->getSelectedText()); }
191 if (dlg.exec() != QDialog::Accepted)
194 auto const & result = dlg.
result();
196 auto const &
module = *result.module;
200 qml.copyVerseRange(
static_cast<CSwordVerseKey const &
>(*result.key1),
203 qml.copyRange(result.index1, result.index2);
208 auto const filename =
209 QFileDialog::getSaveFileName(
211 QObject::tr(
"Save document ..."),
213 QObject::tr(
"Text files") +
" (*.txt);;"
214 + QObject::tr(
"All files") +
" (*)");
215 if (!filename.isEmpty())
242 const CSBiMI *bible =
dynamic_cast<const CSBiMI*
>(module);
247 mgr.printKey(module, startKey.
key(), stopKey.
key(), displayOptions, filterOptions);
250 mgr.printKey(module, key->key(), key->key(), displayOptions, filterOptions);
264 mgr.printKey(module, startKey.
key(), stopKey.
key(), displayOptions, filterOptions);
271 mgr.printByHyperlink(
m_activeAnchor, displayOptions, filterOptions);
280#ifdef BUILD_TEXT_TO_SPEECH
281void BtModelViewReadDisplay::speakSelectedText() {
307 text = QStringLiteral(
"%1\n(%2, %3)")
313 if (
auto const decodedLink =
315 return decodedLink->key;
320 auto const decodedLink(
322 if (decodedLink && decodedLink->module) {
323 std::unique_ptr<CSwordKey> key(decodedLink->module->createKey());
324 key->setKey(decodedLink->key);
325 return key->strippedText();
331 auto const decodedLink(
333 if (decodedLink && decodedLink->module) {
334 std::unique_ptr<CSwordKey> key(decodedLink->module->createKey());
335 key->setKey(decodedLink->key);
340 return QStringLiteral(
"%1\n(%2, %3)")
341 .arg(key->strippedText(), key->key(), key->module()->name());
QList< BookmarkItem > ItemList
static BibleTime * instance() noexcept
Result const & result() const noexcept
CDisplayWindow * m_parentWindow
void slotSliderMoved(int value)
void findText(bool const backward)
void highlightText(const QString &text, bool caseSensitive)
void copySelectedText()
Copies the currently selected text.
void scrollToKey(CSwordKey *key)
void setModules(QStringList const &modules)
void setNodeInfo(QString const &newNodeInfo)
QString text(TextPart const part=Document)
void activeAnchorChanged(QString newActiveAnchor)
void copyAsPlainText(TextPart const part)
void copyByReferences()
Copies the given text specified by asking user for first and last references.
void save(TextPart const part)
Saves the given text with the specified format into the applications clipboard.
void slotSliderReleased()
void setOptions(DisplayOptions const &displayOptions, FilterOptions const &filterOptions)
BtQmlInterface * qmlInterface() const noexcept
BtQuickWidget *const m_quickWidget
void updateReferenceText()
BtQmlInterface *const m_qmlInterface
void nodeInfoChanged(QString newNodeInfo)
QScrollBar *const m_scrollBar
BtModelViewReadDisplay(CDisplayWindow *displayWindow, QWidget *parent=nullptr)
void print(TextPart const, DisplayOptions const &displayOptions, FilterOptions const &filterOptions)
void contextMenuEvent(QContextMenuEvent *event) final override
void setBibleReference(const QString &reference)
~BtModelViewReadDisplay() override
void scrollToSwordKey(CSwordKey *key)
QString getBibleUrlFromLink(const QString &url)
void dragOccuring(const QString &moduleName, const QString &keyName)
void setBibleReference(const QString &reference)
void activeLinkChanged(QString newActiveLink)
std::optional< Selection > const & selection() const noexcept
void updateReference(const QString &reference)
void setModules(const QStringList &modules)
void setHighlightWords(const QString &words, bool caseSensitivy)
void findText(bool backward)
QString getLemmaFromLink(const QString &url)
The base class for all display windows of BibleTime.
QToolBar * mainToolBar() const noexcept
FilterOptions const & filterOptions() const noexcept
CKeyChooser * keyChooser() const noexcept
void lookupKey(QString const &key)
DisplayOptions const & displayOptions() const noexcept
CSwordKey * swordKey() const noexcept
void setBibleReference(const QString &reference)
static CSwordBackend & instance() noexcept
void setFilterOptions(const FilterOptions &options)
Implementation for Sword Bibles.
CSwordModuleInfo const * module() const
virtual bool setKey(const QString &key)=0
virtual QString key() const =0
QString const & name() const
CSwordKey implementation for Sword's TreeKey.
QString key() const final override
CSwordKey implementation for Sword's VerseKey.
QString key() const final override
static QQuickItem const * quickItemInFocus(QQuickWidget const *quickWidget, QPointF cursorPosition)
std::optional< DecodedHyperlink > decodeHyperlink(QString const &hyperlink)