qpdfviewsb/sources/helpdialog.cpp

133 lines
4.2 KiB
C++

/*
Copyright 2018 Marshall Banana
Copyright 2013 Benjamin Eltzner
Copyright 2013, 2018 Adam Reichold
This file is part of qpdfview.
qpdfview is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
qpdfview is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with qpdfview. If not, see <http://www.gnu.org/licenses/>.
*/
#include "helpdialog.h"
#include <QApplication>
#include <QDialogButtonBox>
#include <QDir>
#include <QLineEdit>
#include <QPushButton>
#include <QTextBrowser>
#include <QVBoxLayout>
#include "settings.h"
namespace qpdfview
{
HelpDialog::HelpDialog(QWidget* parent) : QDialog(parent)
{
setWindowTitle(tr("Help") + QLatin1String(" - qpdfview"));
m_textBrowser = new QTextBrowser(this);
m_textBrowser->setTextInteractionFlags(Qt::TextBrowserInteraction | Qt::TextSelectableByKeyboard);
m_textBrowser->setSearchPaths(QStringList() << QDir(QApplication::applicationDirPath()).filePath("data") << DATA_INSTALL_PATH << ":/");
//: Please replace by file name of localized help if available, e.g. "help_fr.html".
m_textBrowser->setSource(QUrl::fromLocalFile(tr("help.html")));
if(m_textBrowser->document()->isEmpty())
{
m_textBrowser->setSource(QUrl::fromLocalFile("help.html"));
}
m_dialogButtonBox = new QDialogButtonBox(QDialogButtonBox::Close, Qt::Horizontal, this);
connect(m_dialogButtonBox, SIGNAL(accepted()), SLOT(accept()));
connect(m_dialogButtonBox, SIGNAL(rejected()), SLOT(reject()));
m_searchLineEdit = new QLineEdit(this);
connect(m_searchLineEdit, SIGNAL(returnPressed()), SLOT(on_findNext_triggered()));
connect(m_searchLineEdit, SIGNAL(textEdited(QString)), SLOT(on_search_textEdited()));
m_findPreviousButton = m_dialogButtonBox->addButton(tr("Find previous"), QDialogButtonBox::ActionRole);
m_findPreviousButton->setShortcut(QKeySequence::FindPrevious);
connect(m_findPreviousButton, SIGNAL(clicked()), SLOT(on_findPrevious_triggered()));
m_findNextButton = m_dialogButtonBox->addButton(tr("Find next"), QDialogButtonBox::ActionRole);
m_findNextButton->setShortcut(QKeySequence::FindNext);
connect(m_findNextButton, SIGNAL(clicked()), SLOT(on_findNext_triggered()));
// Default buttons would interfere with search funtionality...
foreach(QAbstractButton* abstractButton, m_dialogButtonBox->buttons())
{
QPushButton* pushButton = qobject_cast< QPushButton* >(abstractButton);
if(pushButton != 0)
{
pushButton->setAutoDefault(false);
pushButton->setDefault(false);
}
}
setLayout(new QVBoxLayout(this));
layout()->addWidget(m_textBrowser);
layout()->addWidget(m_searchLineEdit);
layout()->addWidget(m_dialogButtonBox);
resize(Settings::instance()->mainWindow().contentsDialogSize(sizeHint()));
m_searchLineEdit->setFocus();
}
HelpDialog::~HelpDialog()
{
Settings::instance()->mainWindow().setContentsDialogSize(size());
}
void HelpDialog::on_findPrevious_triggered()
{
if(!m_searchLineEdit->text().isEmpty() && m_textBrowser->find(m_searchLineEdit->text(), QTextDocument::FindBackward))
{
m_textBrowser->setFocus();
m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #80ff80"));
}
else
{
m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #ff8080"));
}
}
void HelpDialog::on_findNext_triggered()
{
if(!m_searchLineEdit->text().isEmpty() && m_textBrowser->find(m_searchLineEdit->text()))
{
m_textBrowser->setFocus();
m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #80ff80"));
}
else
{
m_searchLineEdit->setStyleSheet(QLatin1String("background-color: #ff8080"));
}
}
void HelpDialog::on_search_textEdited()
{
m_searchLineEdit->setStyleSheet(QString());
}
} // qpdfview