From 69459e742a90cf0e32659b5fa3f0e16d47bc3deb Mon Sep 17 00:00:00 2001 From: Luigi Toscano Date: Sat, 10 May 2014 10:26:29 +0200 Subject: [PATCH] Redirect error and warning signals to a KMessageWidget Those two categories are usually longer messages and more important, so more fit for a (new) KMessageWidget; simple notice signals still go to PageViewMessage into PageView. A more general review of all the messages should be probably performed in order to assign proper categories to them. Reviewed by: Albert Astal Cid --- part.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++----- part.h | 11 ++++++++- ui/pageview.h | 15 ------------- 3 files changed, 67 insertions(+), 21 deletions(-) diff --git a/part.cpp b/part.cpp index c42fd95aa..4b55f3957 100644 --- a/part.cpp +++ b/part.cpp @@ -43,7 +43,6 @@ #include #include #include -#include #include #include #include @@ -440,13 +439,21 @@ m_cliPresentation(false), m_cliPrint(false), m_embedMode(detectEmbedMode(parentW m_formsMessage->setWordWrap( true ); m_formsMessage->setMessageType( KMessageWidget::Information ); rightLayout->addWidget( m_formsMessage ); + m_infoMessage = new KMessageWidget( rightContainer ); + m_infoMessage->setVisible( false ); + m_infoMessage->setWordWrap( true ); + m_infoMessage->setMessageType( KMessageWidget::Information ); + rightLayout->addWidget( m_infoMessage ); + m_infoTimer = new QTimer(); + m_infoTimer->setSingleShot( true ); + connect( m_infoTimer, SIGNAL(timeout()), m_infoMessage, SLOT(animatedHide()) ); m_pageView = new PageView( rightContainer, m_document ); QMetaObject::invokeMethod( m_pageView, "setFocus", Qt::QueuedConnection ); //usability setting // m_splitter->setFocusProxy(m_pageView); connect( m_pageView, SIGNAL(rightClick(const Okular::Page*,QPoint)), this, SLOT(slotShowMenu(const Okular::Page*,QPoint)) ); - connect( m_document, SIGNAL(error(QString,int)), m_pageView, SLOT(errorMessage(QString,int)) ); - connect( m_document, SIGNAL(warning(QString,int)), m_pageView, SLOT(warningMessage(QString,int)) ); - connect( m_document, SIGNAL(notice(QString,int)), m_pageView, SLOT(noticeMessage(QString,int)) ); + connect( m_document, SIGNAL(error(QString,int)), this, SLOT(errorMessage(QString,int)) ); + connect( m_document, SIGNAL(warning(QString,int)), this, SLOT(warningMessage(QString,int)) ); + connect( m_document, SIGNAL(notice(QString,int)), this, SLOT(noticeMessage(QString,int)) ); connect( m_document, SIGNAL(sourceReferenceActivated(const QString&,int,int,bool*)), this, SLOT(slotHandleActivatedSourceReference(const QString&,int,int,bool*)) ); rightLayout->addWidget( m_pageView ); m_findBar = new FindBar( m_document, rightContainer ); @@ -857,6 +864,7 @@ Part::~Part() delete m_pageSizeLabel; delete m_reviewsWidget; delete m_bookmarkList; + delete m_infoTimer; delete m_document; @@ -1025,7 +1033,7 @@ void Part::slotJobFinished(KJob *job) { if ( job->error() == KIO::ERR_USER_CANCELED ) { - m_pageView->noticeMessage( i18n( "The loading of %1 has been canceled.", realUrl().pathOrUrl() ) ); + m_pageView->displayMessage( i18n( "The loading of %1 has been canceled.", realUrl().pathOrUrl() ) ); } } @@ -2741,6 +2749,50 @@ void Part::psTransformEnded(int exit, QProcess::ExitStatus status) } +void Part::displayInfoMessage( const QString &message, KMessageWidget::MessageType messageType, int duration ) +{ + if ( !Okular::Settings::showOSD() ) + { + if (messageType == KMessageWidget::Error) + { + KMessageBox::error( widget(), message ); + } + return; + } + + // hide messageWindow if string is empty + if ( message.isEmpty() ) + m_infoMessage->animatedHide(); + + // display message (duration is length dependant) + if ( duration < 0 ) + { + duration = 500 + 100 * message.length(); + } + m_infoTimer->start( duration ); + m_infoMessage->setText( message ); + m_infoMessage->setMessageType( messageType ); + m_infoMessage->animatedShow(); +} + + +void Part::errorMessage( const QString &message, int duration ) +{ + displayInfoMessage( message, KMessageWidget::Error, duration ); +} + +void Part::warningMessage( const QString &message, int duration ) +{ + displayInfoMessage( message, KMessageWidget::Warning, duration ); +} + +void Part::noticeMessage( const QString &message, int duration ) +{ + // less important message -> simpleer display widget in the PageView + m_pageView->displayMessage( message, QString(), PageViewMessage::Info, duration ); +} + + void Part::unsetDummyMode() { if ( m_embedMode == PrintPreviewMode ) diff --git a/part.h b/part.h index 634afd0df..19c0d3eda 100644 --- a/part.h +++ b/part.h @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -47,7 +48,6 @@ class KAboutData; class KTemporaryFile; class KAction; class KMenu; -class KMessageWidget; namespace KParts { class GUIActivateEvent; } class FindBar; @@ -165,6 +165,7 @@ class OKULAR_PART_EXPORT Part : public KParts::ReadWritePart, public Okular::Doc bool openFile(); bool openUrl(const KUrl &url); void guiActivateEvent(KParts::GUIActivateEvent *event); + void displayInfoMessage( const QString &message, KMessageWidget::MessageType messageType = KMessageWidget::Information, int duration = -1 );; public: bool saveFile(); bool queryClose(); @@ -228,6 +229,10 @@ class OKULAR_PART_EXPORT Part : public KParts::ReadWritePart, public Okular::Doc void psTransformEnded(int, QProcess::ExitStatus); KConfigDialog * slotGeneratorPreferences(); + void errorMessage( const QString &message, int duration = 0 ); + void warningMessage( const QString &message, int duration = -1 ); + void noticeMessage( const QString &message, int duration = -1 ); + private: void setupViewerActions(); void setViewerShortcuts(); @@ -257,6 +262,7 @@ class OKULAR_PART_EXPORT Part : public KParts::ReadWritePart, public Okular::Doc FindBar * m_findBar; KMessageWidget * m_topMessage; KMessageWidget * m_formsMessage; + KMessageWidget * m_infoMessage; QPointer m_thumbnailList; QPointer m_pageView; QPointer m_toc; @@ -337,6 +343,9 @@ class OKULAR_PART_EXPORT Part : public KParts::ReadWritePart, public Okular::Doc KXMLGUIClient *m_generatorGuiClient; FileKeeper *m_keeper; + // Timer for m_infoMessage + QTimer *m_infoTimer; + private slots: void slotAnnotationPreferences(); void slotHandleActivatedSourceReference(const QString& absFileName, int line, int col, bool *handled); diff --git a/ui/pageview.h b/ui/pageview.h index b94a0875a..a8adb2c13 100644 --- a/ui/pageview.h +++ b/ui/pageview.h @@ -114,21 +114,6 @@ Q_OBJECT void updateCursor(); public slots: - void errorMessage( const QString & message, int duration = -1 ) - { - displayMessage( message, QString(), PageViewMessage::Error, duration ); - } - - void noticeMessage( const QString & message, int duration = -1 ) - { - displayMessage( message, QString(), PageViewMessage::Info, duration ); - } - - void warningMessage( const QString & message, int duration = -1 ) - { - displayMessage( message, QString(), PageViewMessage::Warning, duration ); - } - void copyTextSelection() const; void selectAll();