diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 2c0391f79..1d780a419 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include #include @@ -151,7 +152,7 @@ public: KToggleAction * aZoomFitWidth; KToggleAction * aZoomFitPage; KToggleAction * aZoomFitText; - KSelectAction * aViewMode; + KActionMenu * aViewMode; KToggleAction * aViewContinuous; QAction * aPrevAction; KAction * aToggleForms; @@ -463,16 +464,25 @@ void PageView::setupActions( KActionCollection * ac ) */ // View-Layout actions - QStringList viewModes; - viewModes.append( i18n( "Single Page" ) ); - viewModes.append( i18n( "Facing Pages" ) ); - viewModes.append( i18n( "Overview" ) ); - - d->aViewMode = new KSelectAction(KIcon( "view-split-left-right" ), i18n("&View Mode"), this); + d->aViewMode = new KActionMenu( KIcon( "view-split-left-right" ), i18n( "&View Mode" ), this ); + d->aViewMode->setDelayed( false ); +#define ADD_VIEWMODE_ACTION( text, name, id ) \ +do { \ + KAction *vm = new KAction( text, d->aViewMode->menu() ); \ + vm->setCheckable( true ); \ + vm->setData( qVariantFromValue( id ) ); \ + d->aViewMode->addAction( vm ); \ + ac->addAction( name, vm ); \ + vmGroup->addAction( vm ); \ +} while( 0 ) ac->addAction("view_render_mode", d->aViewMode ); - connect( d->aViewMode, SIGNAL( triggered( int ) ), SLOT( slotViewMode( int ) ) ); - d->aViewMode->setItems( viewModes ); - d->aViewMode->setCurrentItem( Okular::Settings::viewMode() ); + QActionGroup *vmGroup = new QActionGroup( d->aViewMode->menu() ); + ADD_VIEWMODE_ACTION( i18n( "Single Page" ), "view_render_mode_single", 0 ); + ADD_VIEWMODE_ACTION( i18n( "Facing Page" ), "view_render_mode_facing", 1 ); + ADD_VIEWMODE_ACTION( i18n( "Overview" ), "view_render_mode_overview", 2 ); + d->aViewMode->menu()->actions().at( Okular::Settings::viewMode() )->setChecked( true ); + connect( vmGroup, SIGNAL( triggered( QAction* ) ), this, SLOT( slotViewMode( QAction* ) ) ); +#undef ADD_VIEWMODE_ACTION d->aViewContinuous = new KToggleAction(KIcon( "view-list-text" ), i18n("&Continuous"), this); ac->addAction("view_continuous", d->aViewContinuous ); @@ -575,7 +585,7 @@ void PageView::fitPageWidth( int page ) d->aZoomFitWidth->setChecked( true ); d->aZoomFitPage->setChecked( false ); // d->aZoomFitText->setChecked( false ); - d->aViewMode->setCurrentItem( 0 ); + d->aViewMode->menu()->actions().at( 0 )->setChecked( true ); viewport()->setUpdatesEnabled( false ); slotRelayoutPages(); viewport()->setUpdatesEnabled( true ); @@ -3195,8 +3205,9 @@ void PageView::slotFitToTextToggled( bool on ) if ( on ) updateZoom( ZoomFitText ); } -void PageView::slotViewMode( int nr ) +void PageView::slotViewMode( QAction *action ) { + const int nr = action->data().toInt(); if ( (int)Okular::Settings::viewMode() != nr ) { Okular::Settings::setViewMode( nr ); diff --git a/ui/pageview.h b/ui/pageview.h index 94c0f3b3a..d2e6a5075 100644 --- a/ui/pageview.h +++ b/ui/pageview.h @@ -190,7 +190,7 @@ Q_OBJECT void slotFitToWidthToggled( bool ); void slotFitToPageToggled( bool ); void slotFitToTextToggled( bool ); - void slotViewMode( int ); + void slotViewMode( QAction *action ); void slotContinuousToggled( bool ); void slotSetMouseNormal(); void slotSetMouseZoom();