Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37741509
en ru br
Репозитории ALT

Группа :: Офис
Пакет: kde5-okular

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: alt-add-indication-for-document-loading-process.patch
Скачать


From 9540909181e03e58cf608153187ca2b8308aa9c4 Mon Sep 17 00:00:00 2001
From: Aleksei Nikiforov <darktemplar@basealt.ru>
Date: Mon, 6 Jul 2020 16:21:01 +0300
Subject: [PATCH] Okular: add indication for document loading process
---
 okular/core/document.cpp |  6 +++++
 okular/core/observer.cpp | 16 ++++++++++++
 okular/core/observer.h   |  8 ++++++
 okular/part.cpp          |  4 +++
 okular/part.h            |  2 ++
 okular/po/ru/okular.po   |  5 ++++
 okular/ui/minibar.cpp    | 56 ++++++++++++++++++++++++++++++++++++++++
 okular/ui/minibar.h      | 25 ++++++++++++++++++
 8 files changed, 122 insertions(+)
--- a/okular/core/document.cpp
+++ b/okular/core/document.cpp
@@ -1434,6 +1434,7 @@ void DocumentPrivate::sendGeneratorPixma
         // we can not really know if the generator can do async requests
         m_executingPixmapRequests.push_back(request);
         m_pixmapRequestsMutex.unlock();
+        foreachObserverD( notifyPixmapGenerationStarted() );
         m_generator->generatePixmap(request);
     } else {
         m_pixmapRequestsMutex.unlock();
@@ -3245,6 +3246,7 @@ void Document::requestTextPage(uint page
 
     // Memory management for TextPages
 
+    foreachObserver( notifyTextGenerationStarted() );
     d->m_generator->generateTextPage(kp);
 }
 
@@ -4971,6 +4973,8 @@ void DocumentPrivate::requestDone(Pixmap
         else
             qCWarning(OkularCoreDebug) << "Receiving a done request for the defunct observer" << observer;
 #endif
+
+        foreachObserverD( notifyPixmapGenerationFinished() );
     }
 
     // 3. delete request
@@ -5044,6 +5048,8 @@ void DocumentPrivate::textGenerationDone
 
     // 2. Add the page to the fifo of generated text pages
     m_allocatedTextPagesFifo.append(page->number());
+
+    foreachObserverD( notifyTextGenerationFinished() );
 }
 
 void Document::setRotation(int r)
diff --git a/okular/core/observer.cpp b/okular/core/observer.cpp
index caacfefef..6b9592160 100644
--- a/okular/core/observer.cpp
+++ b/okular/core/observer.cpp
@@ -52,3 +52,19 @@ bool DocumentObserver::canUnloadPixmap( int ) const
 void DocumentObserver::notifyCurrentPageChanged( int, int )
 {
 }
+
+void DocumentObserver::notifyPixmapGenerationStarted()
+{
+}
+
+void DocumentObserver::notifyPixmapGenerationFinished()
+{
+}
+
+void DocumentObserver::notifyTextGenerationStarted()
+{
+}
+
+void DocumentObserver::notifyTextGenerationFinished()
+{
+}
--- a/okular/core/observer.h
+++ b/okular/core/observer.h
@@ -118,6 +118,14 @@ public:
      */
     virtual void notifyCurrentPageChanged(int previous, int current);
 
+    virtual void notifyPixmapGenerationStarted();
+
+    virtual void notifyPixmapGenerationFinished();
+
+    virtual void notifyTextGenerationStarted();
+
+    virtual void notifyTextGenerationFinished();
+
 private:
     class Private;
     const Private *d;
--- a/okular/part/part.cpp
+++ b/okular/part/part.cpp
@@ -537,6 +537,8 @@ Part::Part(QWidget *parentWidget, QObjec
     bottomBarLayout->addWidget(m_miniBar);
     bottomBarLayout->addWidget(m_pageSizeLabel);
     rightLayout->addWidget(m_bottomBar);
+    m_loadingProgressBarWidget = new LoadingProgressBarWidget( rightContainer, m_document );
+    rightLayout->addWidget( m_loadingProgressBarWidget );
 
     m_pageNumberTool = new MiniBar(nullptr, m_miniBarLogic);
 
@@ -555,6 +557,7 @@ Part::Part(QWidget *parentWidget, QObjec
     m_document->registerView(m_pageView);
     m_document->addObserver(m_toc);
     m_document->addObserver(m_miniBarLogic);
+    m_document->addObserver(m_loadingProgressBarWidget);
 #ifdef OKULAR_ENABLE_MINIBAR
     m_document->addObserver(m_progressWidget);
 #endif
@@ -954,6 +957,7 @@ Part::~Part()
     delete m_pageNumberTool;
     delete m_miniBarLogic;
     delete m_bottomBar;
+    delete m_loadingProgressBarWidget;
 #ifdef OKULAR_ENABLE_MINIBAR
     delete m_progressWidget;
 #endif
--- a/okular/part/part.h
+++ b/okular/part/part.h
@@ -63,6 +63,7 @@ class ThumbnailList;
 class PageSizeLabel;
 class PageView;
 class PresentationWidget;
+class LoadingProgressBarWidget;
 class ProgressWidget;
 class SearchWidget;
 class Sidebar;
@@ -325,6 +326,7 @@ private:
     QPointer<MiniBar> m_miniBar;
     QPointer<MiniBar> m_pageNumberTool;
     QPointer<QWidget> m_bottomBar;
+    QPointer<LoadingProgressBarWidget> m_loadingProgressBarWidget;
     QPointer<PresentationWidget> m_presentationWidget;
     QPointer<ProgressWidget> m_progressWidget;
     QPointer<PageSizeLabel> m_pageSizeLabel;
--- a/okular/part/minibar.cpp
+++ b/okular/part/minibar.cpp
@@ -13,6 +13,7 @@
 // qt / kde includes
 #include <KLocalizedString>
 #include <QIcon>
+#include <QProgressBar>
 #include <QToolButton>
 #include <kacceleratormanager.h>
 #include <kicontheme.h>
@@ -556,6 +557,61 @@ HoverButton::HoverButton(QWidget *parent
     KAcceleratorManager::setNoAccel(this);
 }
 
+LoadingProgressBarWidget::LoadingProgressBarWidget( QWidget * parent, Okular::Document * document )
+    : QWidget(parent)
+    , m_document(document)
+    , m_pixmapGenerationInProgress(false)
+    , m_textGenerationInProgress(false)
+{
+    QHBoxLayout * horLayout = new QHBoxLayout( this );
+
+    QLabel * textLabel = new QLabel( i18n( "Loading document..." ), this );
+    horLayout->addWidget( textLabel );
+
+    QProgressBar * progressBar = new QProgressBar( this );
+    progressBar->setMaximum( 0 );
+    horLayout->addWidget( progressBar );
+
+    hide();
+}
+
+LoadingProgressBarWidget::~LoadingProgressBarWidget()
+{
+    m_document->removeObserver( this );
+}
+
+void LoadingProgressBarWidget::notifyPixmapGenerationStarted()
+{
+    m_pixmapGenerationInProgress = true;
+    show();
+}
+
+void LoadingProgressBarWidget::notifyPixmapGenerationFinished()
+{
+    m_pixmapGenerationInProgress = false;
+
+    if (!m_textGenerationInProgress)
+    {
+        hide();
+    }
+}
+
+void LoadingProgressBarWidget::notifyTextGenerationStarted()
+{
+    m_textGenerationInProgress = true;
+    show();
+}
+
+void LoadingProgressBarWidget::notifyTextGenerationFinished()
+{
+    m_textGenerationInProgress = false;
+
+    if (!m_pixmapGenerationInProgress)
+    {
+        hide();
+    }
+}
+
 #include "minibar.moc"
 
 /* kate: replace-tabs on; indent-width 4; */
diff --git a/okular/ui/minibar.h b/okular/ui/minibar.h
index 0bf969ff0..17ceb1e53 100644
--- a/okular/part/minibar.h
+++ b/okular/part/minibar.h
@@ -179,4 +179,29 @@ class ProgressWidget : public QWidget, public Okular::DocumentObserver
         float m_progressPercentage;
 };
 
+class LoadingProgressBarWidget : public QWidget, public Okular::DocumentObserver
+{
+    Q_OBJECT
+    public:
+        LoadingProgressBarWidget( QWidget * parent, Okular::Document * document );
+        ~LoadingProgressBarWidget();
+
+        // [INHERITED] from DocumentObserver
+        void notifyPixmapGenerationStarted() override;
+
+        // [INHERITED] from DocumentObserver
+        void notifyPixmapGenerationFinished() override;
+
+        // [INHERITED] from DocumentObserver
+        void notifyTextGenerationStarted() override;
+
+        // [INHERITED] from DocumentObserver
+        void notifyTextGenerationFinished() override;
+
+    private:
+        Okular::Document * m_document;
+        bool m_pixmapGenerationInProgress;
+        bool m_textGenerationInProgress;
+};
+
 #endif
-- 
2.25.4
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin