| Summary: | Show context menu for annotations in side pane | ||
|---|---|---|---|
| Product: | [Applications] okular | Reporter: | Gabriel Ambuehl <gabriel_ambuehl> |
| Component: | general | Assignee: | Okular developers <okular-devel> |
| Status: | RESOLVED FIXED | ||
| Severity: | wishlist | ||
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Compiled Sources | ||
| OS: | Linux | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
|
Description
Gabriel Ambuehl
2006-11-22 08:50:00 UTC
It's a wish, not a crash. Thanks, I noticed the instant I had submitted it :-( SVN commit 617807 by tokoe:
Refactor the RMB menu for annotations, so we can use the menu for
the PageView and the SideReview.
BUGS: 137722
M +1 -0 CMakeLists.txt
M +5 -0 part.cpp
A ui/annotationpopup.cpp [License: GPL (v2+)]
A ui/annotationpopup.h [License: GPL (v2+)]
M +39 -66 ui/pageview.cpp
M +4 -3 ui/pageview.h
M +29 -2 ui/side_reviews.cpp
M +7 -2 ui/side_reviews.h
--- trunk/playground/graphics/okular/CMakeLists.txt #617806:617807
@@ -79,6 +79,7 @@
ui/embeddedfilesdialog.cpp
ui/annotwindow.cpp
ui/annotationguiutils.cpp
+ ui/annotationpopup.cpp
ui/annotationpropertiesdialog.cpp
ui/annotationtools.cpp
ui/annotationwidgets.cpp
--- trunk/playground/graphics/okular/part.cpp #617806:617807
@@ -214,6 +214,11 @@
bottomBarLayout->addWidget( m_pageSizeLabel );
rightLayout->addWidget( bottomBar );
+ connect( reviewsWidget, SIGNAL( setAnnotationWindow( Okular::Annotation* ) ),
+ m_pageView, SLOT( setAnnotationWindow( Okular::Annotation* ) ) );
+ connect( reviewsWidget, SIGNAL( removeAnnotationWindow( Okular::Annotation* ) ),
+ m_pageView, SLOT( removeAnnotationWindow( Okular::Annotation* ) ) );
+
// add document observers
m_document->addObserver( this );
m_document->addObserver( m_thumbnailList );
--- trunk/playground/graphics/okular/ui/pageview.cpp #617806:617807
@@ -59,7 +59,7 @@
#include "core/annotations.h"
#include "annotwindow.h" //"embeddedannotationdialog.h"
#include "annotationguiutils.h"
-#include "annotationpropertiesdialog.h"
+#include "annotationpopup.h"
#include "pageviewannotator.h"
#include "core/document.h"
#include "core/page.h"
@@ -440,42 +440,49 @@
setFocus();
}
-void PageView::setAnnotsWindow(Okular::Annotation * annot)
+void PageView::setAnnotationWindow( Okular::Annotation * annotation )
{
- if(!annot)
+ if ( !annotation )
return;
- //find the annot window
- AnnotWindow* existWindow=0;
- foreach(AnnotWindow* tempwnd, d->m_annowindows)
+
+ // find the annot window
+ AnnotWindow* existWindow = 0;
+ foreach ( AnnotWindow* tempwnd, d->m_annowindows )
{
- if(tempwnd)
+ if ( tempwnd )
{
- if(tempwnd->m_annot==annot)
+ if ( tempwnd->m_annot == annotation )
{
- existWindow=tempwnd;
+ existWindow = tempwnd;
break;
}
}
}
-
- /* if(annot->window.flags & Annotation::Hidden)
+
+ if ( existWindow == 0 )
{
- if(existWindow)
- {
- existWindow->hide();
- }
+ existWindow = new AnnotWindow( this, annotation );
+
+ d->m_annowindows << existWindow;
}
- else
- {*/
- if(existWindow==0)
+
+ existWindow->show();
+}
+
+void PageView::removeAnnotationWindow( Okular::Annotation *annotation )
+{
+ QList<AnnotWindow *>::Iterator it = d->m_annowindows.begin();
+ QList<AnnotWindow *>::Iterator itEnd = d->m_annowindows.end();
+ for ( ; it != itEnd; ++it )
+ {
+ if ( annotation == (*it)->m_annot )
{
- existWindow=new AnnotWindow(this,annot);
-
- d->m_annowindows<<existWindow;
+ delete *it;
+ d->m_annowindows.erase( it );
+
+ return;
}
- existWindow->show();
- //}
- return;
+ }
}
void PageView::displayMessage( const QString & message,PageViewMessage::Icon icon,int duration )
@@ -555,7 +562,6 @@
}
}
-
//BEGIN DocumentObserver inherited methods
void PageView::notifySetup( const QVector< Okular::Page * > & pageSet, bool documentChanged )
{
@@ -1355,48 +1361,15 @@
ann = ( (Okular::AnnotationObjectRect *)orect )->annotation();
if ( ann )
{
- KMenu menu( this );
- QAction *popoutWindow = 0;
- QAction *deleteNote = 0;
- QAction *showProperties = 0;
- menu.addTitle( i18n( "Annotation" ) );
- popoutWindow = menu.addAction( KIcon( "comment" ), i18n( "&Open Pop-up Note" ) );
- deleteNote = menu.addAction( KIcon( "remove" ), i18n( "&Delete" ) );
- if ( ann->flags() & Okular::Annotation::DenyDelete )
- deleteNote->setEnabled( false );
- showProperties = menu.addAction( KIcon( "configure" ), i18n( "&Properties..." ) );
+ AnnotationPopup popup( ann, d->document, this );
+ popup.setPageNumber( pageItem->pageNumber() );
- QAction *choice = menu.exec( e->globalPos() );
- // check if the user really selected an action
- if ( choice )
- {
- if ( choice == popoutWindow )
- {
- //ann->window.flags ^= Annotation::Hidden;
- setAnnotsWindow( ann );
- }
- else if( choice == deleteNote )
- {
- // find and close the annotwindow
- QList<AnnotWindow *>::Iterator it = d->m_annowindows.begin();
- QList<AnnotWindow *>::Iterator itEnd = d->m_annowindows.end();
- for ( ; it != itEnd; ++it )
- {
- if ( ann == (*it)->m_annot )
- {
- delete *it;
- it = d->m_annowindows.erase( it );
- break;
- }
- }
- d->document->removePageAnnotation( pageItem->page()->number(), ann );
- }
- else if( choice == showProperties )
- {
- AnnotsPropertiesDialog propdialog( this, d->document, pageItem->pageNumber(), ann );
- propdialog.exec();
- }
- }
+ connect( &popup, SIGNAL( setAnnotationWindow( Okular::Annotation* ) ),
+ this, SLOT( setAnnotationWindow( Okular::Annotation* ) ) );
+ connect( &popup, SIGNAL( removeAnnotationWindow( Okular::Annotation* ) ),
+ this, SLOT( removeAnnotationWindow( Okular::Annotation* ) ) );
+
+ popup.exec( e->globalPos() );
}
}
}
--- trunk/playground/graphics/okular/ui/pageview.h #617806:617807
@@ -51,9 +51,6 @@
PageView( QWidget *parent, Okular::Document *document );
~PageView();
- //set pop-up annotation window states,such as hide/open ,position...
- void setAnnotsWindow(Okular::Annotation * annot);
-
// Zoom mode ( last 4 are internally used only! )
enum ZoomMode { ZoomFixed = 0, ZoomFitWidth = 1, ZoomFitPage = 2, ZoomFitText,
ZoomIn, ZoomOut, ZoomRefreshCurrent };
@@ -99,6 +96,10 @@
void copyTextSelection() const;
+ void setAnnotationWindow( Okular::Annotation *annotation );
+
+ void removeAnnotationWindow( Okular::Annotation *annotation );
+
signals:
void urlDropped( const KUrl& );
void rightClick( const Okular::Page *, const QPoint & );
--- trunk/playground/graphics/okular/ui/side_reviews.cpp #617806:617807
@@ -27,6 +27,7 @@
#include "core/page.h"
#include "settings.h"
#include "annotationguiutils.h"
+#include "annotationpopup.h"
#include "side_reviews.h"
@@ -88,8 +89,15 @@
m_listView->header()->hide();
m_listView->setIndentation( 16 );
m_listView->setMouseTracking( true );
- connect( m_listView, SIGNAL( itemActivated( QTreeWidgetItem *, int ) ), this, SLOT( itemActivated( QTreeWidgetItem *, int ) ) );
- connect( m_listView, SIGNAL( itemEntered( QTreeWidgetItem *, int ) ), this, SLOT( itemEntered( QTreeWidgetItem *, int ) ) );
+
+ connect( m_listView, SIGNAL( itemActivated( QTreeWidgetItem *, int ) ),
+ this, SLOT( itemActivated( QTreeWidgetItem *, int ) ) );
+ connect( m_listView, SIGNAL( itemEntered( QTreeWidgetItem *, int ) ),
+ this, SLOT( itemEntered( QTreeWidgetItem *, int ) ) );
+
+ m_listView->setContextMenuPolicy( Qt::CustomContextMenu );
+ connect( m_listView, SIGNAL( customContextMenuRequested( const QPoint& ) ),
+ this, SLOT( contextMenuRequested( const QPoint& ) ) );
}
//BEGIN DocumentObserver Notifies -> requestListViewUpdate
@@ -367,4 +375,23 @@
QToolTip::showText( QCursor::pos(), tooltip, m_listView, m_listView->visualItemRect( annItem ) );
}
+void Reviews::contextMenuRequested( const QPoint &pos )
+{
+ AnnotationItem *item = dynamic_cast< AnnotationItem* >( m_listView->itemAt( pos ) );
+ if ( item ) {
+ Okular::Annotation *annotation = item->annotation();
+ int pageNumber = item->page();
+
+ AnnotationPopup popup( annotation, m_document, this );
+ popup.setPageNumber( pageNumber );
+
+ connect( &popup, SIGNAL( setAnnotationWindow( Okular::Annotation* ) ),
+ this, SIGNAL( setAnnotationWindow( Okular::Annotation* ) ) );
+ connect( &popup, SIGNAL( removeAnnotationWindow( Okular::Annotation* ) ),
+ this, SIGNAL( removeAnnotationWindow( Okular::Annotation* ) ) );
+
+ popup.exec( m_listView->viewport()->mapToGlobal( pos ) );
+ }
+}
+
#include "side_reviews.moc"
--- trunk/playground/graphics/okular/ui/side_reviews.h #617806:617807
@@ -39,15 +39,20 @@
void notifyViewportChanged( bool smoothMove );
void notifyPageChanged( int pageNumber, int changedFlags );
- public slots:
+ public Q_SLOTS:
void slotPageEnabled( bool );
void slotAuthorEnabled( bool );
void slotCurrentPageOnly( bool );
void slotUpdateListView();
- private slots:
+ Q_SIGNALS:
+ void setAnnotationWindow( Okular::Annotation *annotation );
+ void removeAnnotationWindow( Okular::Annotation *annotation );
+
+ private Q_SLOTS:
void itemActivated( QTreeWidgetItem *, int );
void itemEntered( QTreeWidgetItem *, int );
+ void contextMenuRequested( const QPoint &pos );
private:
// add all annotations of a page to the listView taking care of grouping
|