From 880dae2e192308d62655a595296d6479b167d445 Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Tue, 25 Oct 2011 22:21:22 +0200 Subject: [PATCH] Add a way to rename the current page bookmark from the menu Comes with some api additions to bookmarkmanager --- core/bookmarkmanager.cpp | 31 +++++++++++++++++++++++++++++++ core/bookmarkmanager.h | 19 +++++++++++++++++++ part.cpp | 24 ++++++++++++++++++++++++ part.h | 2 ++ part.rc | 3 ++- 5 files changed, 78 insertions(+), 1 deletion(-) diff --git a/core/bookmarkmanager.cpp b/core/bookmarkmanager.cpp index 3ed5d27c5..ed1ea35ea 100644 --- a/core/bookmarkmanager.cpp +++ b/core/bookmarkmanager.cpp @@ -225,6 +225,25 @@ KBookmark::List BookmarkManager::bookmarks( const KUrl& url ) const return ret; } +KBookmark::List BookmarkManager::bookmarks() const +{ + return bookmarks( d->url ); +} + +KBookmark BookmarkManager::bookmark( int page ) const +{ + const KBookmark::List bmarks = bookmarks(); + foreach( const KBookmark &bm, bmarks ) + { + DocumentViewport vp( bm.url().htmlRef() ); + if ( vp.isValid() && vp.pageNumber == page ) + { + return bm; + } + } + return KBookmark(); +} + void BookmarkManager::save() const { d->manager->emitChanged(); @@ -334,6 +353,18 @@ void BookmarkManager::removeBookmark( int n ) } } +void BookmarkManager::renameBookmark( KBookmark* bm, const QString& newName) +{ + KBookmarkGroup thebg; + QHash::iterator it = d->bookmarkFind( d->url, false, &thebg ); + Q_ASSERT ( it != d->knownFiles.end() ); + if ( it == d->knownFiles.end() ) + return; + + bm->setFullText( newName ); + d->manager->emitChanged( thebg ); +} + int BookmarkManager::removeBookmark( const KUrl& referurl, const KBookmark& bm ) { if ( !referurl.isValid() || bm.isNull() || bm.isGroup() || bm.isSeparator() ) diff --git a/core/bookmarkmanager.h b/core/bookmarkmanager.h index 1802230d0..03bd1eb9c 100644 --- a/core/bookmarkmanager.h +++ b/core/bookmarkmanager.h @@ -40,11 +40,24 @@ class OKULAR_EXPORT BookmarkManager : public QObject * Returns the list of documents with bookmarks. */ KUrl::List files() const; + /** * Returns the list of bookmarks for the specified @p url. */ KBookmark::List bookmarks( const KUrl& url ) const; + /** + * Returns the list of bookmarks for document + * @since 0.14 (KDE 4.8) + */ + KBookmark::List bookmarks() const; + + /** + * Returns the bookmark for the given page of the document + * @since 0.14 (KDE 4.8) + */ + KBookmark bookmark( int page ) const; + /** * Forces to save the list of bookmarks. */ @@ -82,6 +95,12 @@ class OKULAR_EXPORT BookmarkManager : public QObject */ void removeBookmarks( const KUrl& referurl, const KBookmark::List& list ); + /** + * Returns the bookmark given bookmark of the document + * @since 0.14 (KDE 4.8) + */ + void renameBookmark( KBookmark* bm, const QString& newName ); + /** * Returns whether the given @p page is bookmarked. */ diff --git a/part.cpp b/part.cpp index 9219db7d9..55b89f4b5 100644 --- a/part.cpp +++ b/part.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -457,6 +458,12 @@ m_cliPresentation(false), m_embedMode(detectEmbedMode(parentWidget, parent, args m_addBookmarkText = m_addBookmark->text(); m_addBookmarkIcon = m_addBookmark->icon(); + m_renameBookmark = ac->addAction("rename_bookmark"); + m_renameBookmark->setText(i18n( "Rename Bookmark" )); + m_renameBookmark->setIcon(KIcon( "edit-rename" )); + m_renameBookmark->setWhatsThis( i18n( "Rename the current page bookmark" ) ); + connect( m_renameBookmark, SIGNAL(triggered()), this, SLOT(slotRenameBookmark()) ); + m_prevBookmark = ac->addAction("previous_bookmark"); m_prevBookmark->setText(i18n( "Previous Bookmark" )); m_prevBookmark->setIcon(KIcon( "go-up-search" )); @@ -1377,11 +1384,13 @@ void Part::updateBookmarksActions() { m_addBookmark->setText( i18n( "Remove Bookmark" ) ); m_addBookmark->setIcon( KIcon( "edit-delete-bookmark" ) ); + m_renameBookmark->setEnabled( true ); } else { m_addBookmark->setText( m_addBookmarkText ); m_addBookmark->setIcon( m_addBookmarkIcon ); + m_renameBookmark->setEnabled( false ); } } else @@ -1389,6 +1398,7 @@ void Part::updateBookmarksActions() m_addBookmark->setEnabled( false ); m_addBookmark->setText( m_addBookmarkText ); m_addBookmark->setIcon( m_addBookmarkIcon ); + m_renameBookmark->setEnabled( false ); } } @@ -1531,6 +1541,20 @@ void Part::slotAddBookmark() } } +void Part::slotRenameBookmark() +{ + const uint current = m_document->currentPage(); + Q_ASSERT(m_document->bookmarkManager()->isBookmarked( current )); + if ( m_document->bookmarkManager()->isBookmarked( current ) ) + { + KBookmark bookmark = m_document->bookmarkManager()->bookmark( current ); + const QString newName = KInputDialog::getText( i18n( "Rename Bookmark" ), i18n( "Enter the new name of the bookmark:" ), bookmark.fullText(), 0, widget()); + if (!newName.isEmpty()) + { + m_document->bookmarkManager()->renameBookmark(&bookmark, newName); + } + } +} void Part::slotPreviousBookmark() { diff --git a/part.h b/part.h index f30eb6d1d..2440d5d77 100644 --- a/part.h +++ b/part.h @@ -138,6 +138,7 @@ class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver, publi void slotHistoryBack(); void slotHistoryNext(); void slotAddBookmark(); + void slotRenameBookmark(); void slotPreviousBookmark(); void slotNextBookmark(); void slotFindNext(); @@ -234,6 +235,7 @@ class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver, publi KAction *m_historyBack; KAction *m_historyNext; KAction *m_addBookmark; + KAction *m_renameBookmark; KAction *m_prevBookmark; KAction *m_nextBookmark; KAction *m_copy; diff --git a/part.rc b/part.rc index 020c72eab..33d3829d7 100644 --- a/part.rc +++ b/part.rc @@ -1,5 +1,5 @@ - + &File @@ -58,6 +58,7 @@ &Bookmarks +