Commit ce24bff5 authored by Laurent Montel's avatar Laurent Montel 😁

Move to own directory

parent 6fd82c8f
......@@ -31,10 +31,10 @@ add_messageviewer_class_unittest(zoomactionmenutest.cpp "../src/widgets/zoomacti
macro(add_messageviewer_mailsourceviewbrowserwidget_unittest _source)
set(_test ${_source} util.cpp)
get_filename_component(_name ${_source} NAME_WE)
ecm_add_test(${_source} util.cpp ../src/widgets/mailsourceviewtextbrowserwidget.cpp ../src/findbar/findbarbase.cpp ../src/findbar/findbarsourceview.cpp
ecm_add_test(${_source} util.cpp ../src/widgets/mailsourceviewtextbrowserwidget.cpp ../src/findbar/findbarsourceview.cpp
TEST_NAME ${_name}
NAME_PREFIX "messageviewer-"
LINK_LIBRARIES Qt5::Test Qt5::Gui Qt5::Widgets KF5::KIOCore KF5::Mime KF5::AkonadiCore KF5::CalendarCore KF5::PimTextEdit KF5::PimCommon KF5::MessageViewer
LINK_LIBRARIES Qt5::Test Qt5::Gui Qt5::Widgets KF5::KIOCore KF5::Mime KF5::AkonadiCore KF5::CalendarCore KF5::PimTextEdit KF5::PimCommon KF5::MessageViewer KF5::WebEngineViewer
)
endmacro ()
......
......@@ -52,7 +52,7 @@ set(libmessageviewer_mailviewer_SRCS
viewer/webengine/loadexternalreferencesurlinterceptor/loadexternalreferencesurlinterceptor.cpp
viewer/webengine/cidreferencesurlinterceptor/cidreferencesurlinterceptor.cpp
viewer/webengine/mailwebenginescript.cpp
findbar/findbarwebengineview.cpp
#findbar/findbarwebengineview.cpp
)
set(libmessageviewer_viewer_SRCS
......@@ -119,7 +119,6 @@ set(libmessageviewer_scamdetection_webengine_SRCS
)
set(libmessageviewer_findbar_SRCS
findbar/findbarbase.cpp
findbar/findbarsourceview.cpp
)
......@@ -294,22 +293,6 @@ ecm_generate_headers(MessageViewer_Camelcaseutils_HEADERS
RELATIVE utils
)
ecm_generate_headers(MessageViewer_Camelfindbar_HEADERS
HEADER_NAMES
FindBarBase
REQUIRED_HEADERS MessageViewer_findbar_HEADERS
PREFIX MessageViewer
RELATIVE findbar
)
ecm_generate_headers(MessageViewer_CamelfindbarWebEngine_HEADERS
HEADER_NAMES
FindBarWebEngineView
REQUIRED_HEADERS MessageViewer_findbarWebEngine_HEADERS
PREFIX MessageViewer
RELATIVE findbar
)
ecm_generate_headers(MessageViewer_Camelcaseantispam_HEADERS
HEADER_NAMES
SpamHeaderAnalyzer
......@@ -384,7 +367,6 @@ ecm_generate_pri_file(BASE_NAME MessageViewer
install(FILES
${MessageViewer_Camelcasewebengine_HEADERS}
${MessageViewer_CamelfindbarWebEngine_HEADERS}
${MessageViewer_Camelcaseheader_HEADERS}
${MessageViewer_Camelcaseviewerplugin_HEADERS}
${MessageViewer_Camelcasesettings_HEADERS}
......@@ -403,7 +385,6 @@ install(FILES
install(FILES
${MessageViewer_webengine_HEADERS}
${MessageViewer_scam_HEADERS}
${MessageViewer_findbarWebEngine_HEADERS}
${MessageViewer_viewerplugin_HEADERS}
${MessageViewer_settings_HEADERS}
${MessageViewer_header_HEADERS}
......
/* Copyright (C) 2010 Torgny Nyblom <nyblom@kde.org>
* Copyright (C) 2010-2016 Laurent Montel <montel@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "findbarbase.h"
#include "PimCommon/LineEditWithCompleter"
#include <qicon.h>
#include <KLocalizedString>
#include <klineedit.h>
#include <KColorScheme>
#include <QHBoxLayout>
#include <QPushButton>
#include <QTimer>
#include <QLabel>
#include <QMenu>
#include <QToolButton>
#include <QEvent>
#include <QKeyEvent>
using namespace MessageViewer;
FindBarBase::FindBarBase(QWidget *parent)
: QWidget(parent)
{
QHBoxLayout *lay = new QHBoxLayout(this);
lay->setMargin(2);
QToolButton *closeBtn = new QToolButton(this);
closeBtn->setIcon(QIcon::fromTheme(QStringLiteral("dialog-close")));
closeBtn->setObjectName(QStringLiteral("close"));
closeBtn->setIconSize(QSize(16, 16));
closeBtn->setToolTip(i18n("Close"));
#ifndef QT_NO_ACCESSIBILITY
closeBtn->setAccessibleName(i18n("Close"));
#endif
closeBtn->setAutoRaise(true);
lay->addWidget(closeBtn);
QLabel *label = new QLabel(i18nc("Find text", "F&ind:"), this);
lay->addWidget(label);
mSearch = new PimCommon::LineEditWithCompleter(this);
mSearch->setObjectName(QStringLiteral("searchline"));
mSearch->setToolTip(i18n("Text to search for"));
mSearch->setClearButtonShown(true);
label->setBuddy(mSearch);
lay->addWidget(mSearch);
mFindNextBtn = new QPushButton(QIcon::fromTheme(QStringLiteral("go-down-search")), i18nc("Find and go to the next search match", "Next"), this);
mFindNextBtn->setToolTip(i18n("Jump to next match"));
mFindNextBtn->setObjectName(QStringLiteral("findnext"));
lay->addWidget(mFindNextBtn);
mFindNextBtn->setEnabled(false);
mFindPrevBtn = new QPushButton(QIcon::fromTheme(QStringLiteral("go-up-search")), i18nc("Find and go to the previous search match", "Previous"), this);
mFindPrevBtn->setToolTip(i18n("Jump to previous match"));
mFindPrevBtn->setObjectName(QStringLiteral("findprevious"));
lay->addWidget(mFindPrevBtn);
mFindPrevBtn->setEnabled(false);
QPushButton *optionsBtn = new QPushButton(this);
optionsBtn->setText(i18n("Options"));
optionsBtn->setToolTip(i18n("Modify search behavior"));
mOptionsMenu = new QMenu(optionsBtn);
mCaseSensitiveAct = mOptionsMenu->addAction(i18n("Case sensitive"));
mCaseSensitiveAct->setCheckable(true);
optionsBtn->setMenu(mOptionsMenu);
lay->addWidget(optionsBtn);
connect(closeBtn, &QToolButton::clicked, this, &FindBarBase::closeBar);
connect(mFindNextBtn, &QPushButton::clicked, this, &FindBarBase::findNext);
connect(mFindPrevBtn, &QPushButton::clicked, this, &FindBarBase::findPrev);
connect(mCaseSensitiveAct, &QAction::toggled, this, &FindBarBase::caseSensitivityChanged);
connect(mSearch, &KLineEdit::textChanged, this, &FindBarBase::autoSearch);
connect(mSearch, &KLineEdit::clearButtonClicked, this, &FindBarBase::slotClearSearch);
mStatus = new QLabel;
mStatus->setObjectName(QStringLiteral("status"));
QFontMetrics fm(mStatus->font());
mNotFoundString = i18n("Phrase not found");
mStatus->setFixedWidth(fm.width(mNotFoundString));
lay->addWidget(mStatus);
setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed));
//lay->addStretch();
hide();
}
FindBarBase::~FindBarBase()
{
}
QMenu *FindBarBase::optionsMenu()
{
return mOptionsMenu;
}
QString FindBarBase::text() const
{
return mSearch->text();
}
void FindBarBase::setText(const QString &text)
{
mSearch->setText(text);
}
void FindBarBase::focusAndSetCursor()
{
setFocus();
mStatus->clear();
mSearch->selectAll();
mSearch->setFocus();
}
void FindBarBase::slotClearSearch()
{
clearSelections();
}
void FindBarBase::autoSearch(const QString &str)
{
const bool isNotEmpty = (!str.isEmpty());
mFindPrevBtn->setEnabled(isNotEmpty);
mFindNextBtn->setEnabled(isNotEmpty);
if (isNotEmpty) {
QTimer::singleShot(0, this, SLOT(slotSearchText()));
} else {
clearSelections();
}
}
void FindBarBase::slotSearchText(bool backward, bool isAutoSearch)
{
searchText(backward, isAutoSearch);
}
void FindBarBase::setFoundMatch(bool match)
{
#ifndef QT_NO_STYLE_STYLESHEET
QString styleSheet;
if (!mSearch->text().isEmpty()) {
if (mNegativeBackground.isEmpty()) {
KStatefulBrush bgBrush(KColorScheme::View, KColorScheme::PositiveBackground);
mPositiveBackground = QStringLiteral("QLineEdit{ background-color:%1 }").arg(bgBrush.brush(mSearch).color().name());
bgBrush = KStatefulBrush(KColorScheme::View, KColorScheme::NegativeBackground);
mNegativeBackground = QStringLiteral("QLineEdit{ background-color:%1 }").arg(bgBrush.brush(mSearch).color().name());
}
if (match) {
styleSheet = mPositiveBackground;
mStatus->clear();
} else {
styleSheet = mNegativeBackground;
mStatus->setText(mNotFoundString);
}
}
mSearch->setStyleSheet(styleSheet);
#endif
}
void FindBarBase::searchText(bool backward, bool isAutoSearch)
{
Q_UNUSED(backward);
Q_UNUSED(isAutoSearch);
}
void FindBarBase::addToCompletion(const QString &text)
{
KCompletion *comp = mSearch->completionObject();
comp->addItem(text);
}
void FindBarBase::findNext()
{
searchText(false, false);
addToCompletion(mLastSearchStr);
}
void FindBarBase::findPrev()
{
searchText(true, false);
addToCompletion(mLastSearchStr);
}
void FindBarBase::caseSensitivityChanged(bool b)
{
updateSensitivity(b);
}
void FindBarBase::updateSensitivity(bool)
{
}
void FindBarBase::slotHighlightAllChanged(bool b)
{
updateHighLight(b);
}
void FindBarBase::updateHighLight(bool)
{
}
void FindBarBase::clearSelections()
{
setFoundMatch(false);
}
void FindBarBase::closeBar()
{
// Make sure that all old searches are cleared
mSearch->clear();
clearSelections();
mSearch->clearFocus();
Q_EMIT hideFindBar();
}
bool FindBarBase::event(QEvent *e)
{
// Close the bar when pressing Escape.
// Not using a QShortcut for this because it could conflict with
// window-global actions (e.g. Emil Sedgh binds Esc to "close tab").
// With a shortcut Q_DECL_OVERRIDE we can catch this before it gets to kactions.
const bool shortCutOverride = (e->type() == QEvent::ShortcutOverride);
if (shortCutOverride || e->type() == QEvent::KeyPress) {
QKeyEvent *kev = static_cast<QKeyEvent * >(e);
if (kev->key() == Qt::Key_Escape) {
if (shortCutOverride) {
e->accept();
return true;
}
e->accept();
closeBar();
return true;
} else if (kev->key() == Qt::Key_Enter ||
kev->key() == Qt::Key_Return) {
e->accept();
if (shortCutOverride) {
return true;
}
if (mSearch->text().isEmpty()) {
return true;
}
if (kev->modifiers() & Qt::ShiftModifier) {
findPrev();
} else if (kev->modifiers() == Qt::NoModifier) {
findNext();
}
return true;
}
}
return QWidget::event(e);
}
/* Copyright (C) 2010 Torgny Nyblom <nyblom@kde.org>
* Copyright (C) 2010-2016 Laurent Montel <montel@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef FINDBARBASE_H
#define FINDBARBASE_H
#include <QWidget>
#include "messageviewer_export.h"
class QAction;
class QPushButton;
class QMenu;
class QLabel;
namespace PimCommon
{
class LineEditWithCompleter;
}
namespace MessageViewer
{
class MESSAGEVIEWER_EXPORT FindBarBase : public QWidget
{
Q_OBJECT
public:
explicit FindBarBase(QWidget *parent = Q_NULLPTR);
virtual ~FindBarBase();
QString text() const;
void setText(const QString &text);
void focusAndSetCursor();
protected:
bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual void clearSelections();
virtual void updateHighLight(bool);
virtual void searchText(bool backward, bool isAutoSearch);
virtual void updateSensitivity(bool);
void setFoundMatch(bool match);
QMenu *optionsMenu();
public Q_SLOTS:
void findNext();
void findPrev();
void autoSearch(const QString &str);
void slotSearchText(bool backward = false, bool isAutoSearch = true);
void closeBar();
Q_SIGNALS:
void hideFindBar();
protected Q_SLOTS:
void caseSensitivityChanged(bool);
void slotHighlightAllChanged(bool);
void slotClearSearch();
protected:
QString mNotFoundString;
QString mPositiveBackground;
QString mNegativeBackground;
QString mLastSearchStr;
PimCommon::LineEditWithCompleter *mSearch;
QAction *mCaseSensitiveAct;
QPushButton *mFindPrevBtn;
QPushButton *mFindNextBtn;
QMenu *mOptionsMenu;
QLabel *mStatus;
void addToCompletion(const QString &text);
};
}
#endif /* FINDBARBASE_H */
......@@ -24,7 +24,7 @@
using namespace MessageViewer;
FindBarSourceView::FindBarSourceView(QPlainTextEdit *view, QWidget *parent)
: FindBarBase(parent), mView(view)
: WebEngineViewer::FindBarBase(parent), mView(view)
{
}
......@@ -62,7 +62,7 @@ void FindBarSourceView::clearSelections()
textCursor.setPosition(0);
mView->setTextCursor(textCursor);
FindBarBase::clearSelections();
WebEngineViewer::FindBarBase::clearSelections();
}
void FindBarSourceView::updateHighLight(bool)
......
......@@ -19,13 +19,13 @@
#ifndef FINDBARSOURCEVIEW_H
#define FINDBARSOURCEVIEW_H
#include "findbarbase.h"
#include <WebEngineViewer/FindBarBase>
class QPlainTextEdit;
namespace MessageViewer
{
class FindBarSourceView : public FindBarBase
class FindBarSourceView : public WebEngineViewer::FindBarBase
{
Q_OBJECT
......
/* Copyright (C) 2016 Laurent Montel <montel@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#include "findbarwebengineview.h"
#include "PimCommon/LineEditWithCompleter"
#include <QWebEngineView>
#include <QAction>
using namespace MessageViewer;
class MessageViewer::FindBarWebEngineViewPrivate
{
public:
FindBarWebEngineViewPrivate()
: mView(Q_NULLPTR)
{
}
QWebEngineView *mView;
};
FindBarWebEngineView::FindBarWebEngineView(QWebEngineView *view, QWidget *parent)
: FindBarBase(parent),
d(new MessageViewer::FindBarWebEngineViewPrivate)
{
d->mView = view;
}
FindBarWebEngineView::~FindBarWebEngineView()
{
delete d;
}
void FindBarWebEngineView::searchText(bool backward, bool isAutoSearch)
{
QWebEnginePage::FindFlags searchOptions;
if (backward) {
searchOptions |= QWebEnginePage::FindBackward;
}
if (mCaseSensitiveAct->isChecked()) {
searchOptions |= QWebEnginePage::FindCaseSensitively;
}
const QString searchWord(mSearch->text());
if (!isAutoSearch && !mLastSearchStr.contains(searchWord, Qt::CaseSensitive)) {
clearSelections();
}
d->mView->findText(QString()); //Clear an existing highligh
mLastSearchStr = searchWord;
d->mView->findText(mLastSearchStr, searchOptions, [this](bool found) {
setFoundMatch(found);
});
}
void FindBarWebEngineView::updateSensitivity(bool sensitivity)
{
QWebEnginePage::FindFlags searchOptions;
if (sensitivity) {
searchOptions |= QWebEnginePage::FindCaseSensitively;
d->mView->findText(QString()); //Clear an existing highligh
}
d->mView->findText(QString(), searchOptions, [this](bool found) {
setFoundMatch(found);
});
}
void FindBarWebEngineView::clearSelections()
{
d->mView->findText(QString());
mLastSearchStr.clear();
FindBarBase::clearSelections();
}
/* Copyright (C) 2016 Laurent Montel <montel@kde.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef MESSAGEVIEWER_FINDBAR_MAILWEBENGINEVIEW_H
#define MESSAGEVIEWER_FINDBAR_MAILWEBENGINEVIEW_H
#include "findbarbase.h"
#include "messageviewer_export.h"
class QWebEngineView;
namespace MessageViewer
{
class FindBarWebEngineViewPrivate;
class MESSAGEVIEWER_EXPORT FindBarWebEngineView : public FindBarBase
{
Q_OBJECT
public:
explicit FindBarWebEngineView(QWebEngineView *view, QWidget *parent = Q_NULLPTR);
~FindBarWebEngineView();
private:
void clearSelections() Q_DECL_OVERRIDE;
void searchText(bool backward, bool isAutoSearch) Q_DECL_OVERRIDE;
void updateSensitivity(bool sensitivity) Q_DECL_OVERRIDE;
private:
FindBarWebEngineViewPrivate *const d;
};
}
#endif
......@@ -116,7 +116,7 @@
#include "messageviewer/messageviewerutil.h"
#include "widgets/vcardviewer.h"
#include "findbar/findbarwebengineview.h"