File indexing completed on 2024-04-28 15:51:45

0001 /*
0002     SPDX-FileCopyrightText: 2015 Saheb Preet Singh <saheb.preet@gmail.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "layers.h"
0008 #include "settings.h"
0009 
0010 // qt/kde includes
0011 #include <KLocalizedString>
0012 #include <KTitleWidget>
0013 #include <QHeaderView>
0014 #include <QTreeView>
0015 #include <QVBoxLayout>
0016 
0017 #include <kwidgetsaddons_version.h>
0018 
0019 // local includes
0020 #include "core/document.h"
0021 #include "ktreeviewsearchline.h"
0022 #include "pageview.h"
0023 
0024 Layers::Layers(QWidget *parent, Okular::Document *document)
0025     : QWidget(parent)
0026     , m_document(document)
0027 {
0028     QVBoxLayout *const mainlay = new QVBoxLayout(this);
0029     mainlay->setSpacing(6);
0030 
0031     m_document->addObserver(this);
0032 
0033     KTitleWidget *titleWidget = new KTitleWidget(this);
0034     titleWidget->setLevel(4);
0035     titleWidget->setText(i18n("Layers"));
0036     mainlay->addWidget(titleWidget);
0037     mainlay->setAlignment(titleWidget, Qt::AlignHCenter);
0038     m_searchLine = new KTreeViewSearchLine(this);
0039     mainlay->addWidget(m_searchLine);
0040     m_searchLine->setCaseSensitivity(Okular::Settings::self()->layersSearchCaseSensitive() ? Qt::CaseSensitive : Qt::CaseInsensitive);
0041     m_searchLine->setRegularExpression(Okular::Settings::self()->layersSearchRegularExpression());
0042     connect(m_searchLine, &KTreeViewSearchLine::searchOptionsChanged, this, &Layers::saveSearchOptions);
0043 
0044     m_treeView = new QTreeView(this);
0045     mainlay->addWidget(m_treeView);
0046 
0047     m_treeView->setSortingEnabled(false);
0048     m_treeView->setRootIsDecorated(true);
0049     m_treeView->setAlternatingRowColors(true);
0050     m_treeView->header()->hide();
0051 }
0052 
0053 Layers::~Layers()
0054 {
0055     m_document->removeObserver(this);
0056 }
0057 
0058 void Layers::notifySetup(const QVector<Okular::Page *> & /*pages*/, int /*setupFlags*/)
0059 {
0060     QAbstractItemModel *layersModel = m_document->layersModel();
0061 
0062     if (layersModel) {
0063         m_treeView->setModel(layersModel);
0064         m_searchLine->setTreeView(m_treeView);
0065         Q_EMIT hasLayers(true);
0066         connect(layersModel, &QAbstractItemModel::dataChanged, m_document, &Okular::Document::reloadDocument);
0067         connect(layersModel, &QAbstractItemModel::dataChanged, m_pageView, &PageView::reloadForms);
0068     } else {
0069         Q_EMIT hasLayers(false);
0070     }
0071 }
0072 
0073 void Layers::setPageView(PageView *pageView)
0074 {
0075     m_pageView = pageView;
0076 }
0077 
0078 void Layers::saveSearchOptions()
0079 {
0080     Okular::Settings::setLayersSearchRegularExpression(m_searchLine->regularExpression());
0081     Okular::Settings::setLayersSearchCaseSensitive(m_searchLine->caseSensitivity() == Qt::CaseSensitive ? true : false);
0082     Okular::Settings::self()->save();
0083 }