Commit 493ba07e authored by David Hurka's avatar David Hurka 🐬 Committed by Albert Astals Cid
Browse files

Move Continuous option to View Mode submenu

Summary:
This moves the Continuous option from the View menu to the
View Mode submenu. This makes the View Mode menu (a KActionMenu)
more useful in the main toolbar. Additionally, “Continuous” is explained by the context “View Mode”.

The primary intention was to give this View Mode a similar usage pattern like
the Change Colors menu (D21195), if both are added to the toolbar. See my
suggestion in Bugs 407217 and 407326.

FEATURE: 407326

Screenshot before:
{F6821917}

Screenshot now:
{F6821920}
and in the toolbar:
{F6821921}

Test Plan:
* Look into View menu and test entries
* Add View Mode menu to toolbar and test entries

Reviewers: #okular, #vdg, aacid

Spies: aacid, ngraham, okular-devel, kde-doc-english

Tags: #okular, #documentation

Differential Revision: https://phabricator.kde.org/D21196
parent 6a93a033
Pipeline #16395 passed with stage
in 10 minutes and 45 seconds
......@@ -1508,22 +1508,6 @@ Context menu actions like Rename Bookmarks etc.)
to a value that, depending on the size relation between the page and the view area, automatically either makes the pages' width equal to the document view's width (like fit-width), the pages' height equal to the document view's height (like fit-height), or the whole page visible (like fit-page).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<menuchoice>
<guimenu>View</guimenu>
<guimenuitem>Continuous</guimenuitem>
</menuchoice>
</term>
<listitem>
<para><action>Enable the continuous page mode</action>. In continuous mode,
all pages of the document are shown, and you can scroll through
them without having to use the <menuchoice><guimenu>Go</guimenu>
<guimenuitem>Previous Page</guimenuitem></menuchoice> and
<menuchoice><guimenu>Go</guimenu><guimenuitem>Next Page</guimenuitem>
</menuchoice> options.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<menuchoice>
......@@ -1538,6 +1522,10 @@ Context menu actions like Rename Bookmarks etc.)
<guimenuitem>Facing Pages (Center First Page)</guimenuitem> and
<guimenuitem>Overview</guimenuitem> (the number of columns is the one
specified in the <link linkend="configure">&okular; settings</link>).</para>
<para>Additionally, you can enable the <guimenuitem>Continuous</guimenuitem> mode.
In continuous mode, all pages of the document are shown, and you can smoothly
scroll through them. Otherwise, only one page (or one row of pages) is shown
at a time.</para>
</listitem>
</varlistentry>
<varlistentry>
......
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
<kpartgui name="okular_part_viewermode" version="4">
<kpartgui name="okular_part_viewermode" version="5">
<MenuBar>
<Menu name="file"><text>&amp;File</text>
......@@ -26,7 +26,6 @@
<Action name="view_fit_to_width" group="viewer_menu_merge"/>
<Action name="view_fit_to_page" group="viewer_menu_merge"/>
<Separator group="viewer_menu_merge"/>
<Action name="view_continuous" group="viewer_menu_merge"/>
<Action name="view_render_mode" group="viewer_menu_merge"/>
<Separator group="viewer_menu_merge"/>
<Menu name="view_orientation" group="viewer_menu_merge"><text>&amp;Orientation</text>
......
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
<kpartgui name="okular_part" version="42">
<kpartgui name="okular_part" version="43">
<MenuBar>
<Menu name="file"><text>&amp;File</text>
<Action name="get_new_stuff" group="file_open"/>
......@@ -38,7 +38,6 @@
<Action name="view_fit_to_page"/>
<Action name="view_auto_fit"/>
<Separator/>
<Action name="view_continuous"/>
<Action name="view_render_mode"/>
<Separator/>
<Menu name="view_orientation"><text>&amp;Orientation</text>
......
......@@ -232,7 +232,8 @@ public:
KToggleAction * aZoomFitWidth;
KToggleAction * aZoomFitPage;
KToggleAction * aZoomAutoFit;
KActionMenu * aViewMode;
KActionMenu * aViewModeMenu;
QActionGroup * viewModeActionGroup;
KToggleAction * aViewContinuous;
QAction * aPrevAction;
QAction * aToggleForms;
......@@ -338,7 +339,7 @@ PageView::PageView( QWidget *parent, Okular::Document *document )
d->aRotateClockwise = nullptr;
d->aRotateCounterClockwise = nullptr;
d->aRotateOriginal = nullptr;
d->aViewMode = nullptr;
d->aViewModeMenu = nullptr;
d->zoomMode = PageView::ZoomFitWidth;
d->zoomFactor = 1.0;
d->mouseSelecting = false;
......@@ -378,8 +379,9 @@ PageView::PageView( QWidget *parent, Okular::Document *document )
d->aZoomFitWidth = nullptr;
d->aZoomFitPage = nullptr;
d->aZoomAutoFit = nullptr;
d->aViewMode = nullptr;
d->aViewModeMenu = nullptr;
d->aViewContinuous = nullptr;
d->viewModeActionGroup = nullptr;
d->aPrevAction = nullptr;
d->aToggleForms = nullptr;
d->aSpeakDoc = nullptr;
......@@ -608,36 +610,46 @@ void PageView::setupViewerActions( KActionCollection * ac )
ac->addAction( QStringLiteral("fit_window_to_page"), d->aFitWindowToPage );
connect( d->aFitWindowToPage, &QAction::triggered, this, &PageView::slotFitWindowToPage );
// View-Layout actions
d->aViewMode = new KActionMenu( QIcon::fromTheme( QStringLiteral("view-split-left-right") ), i18n( "&View Mode" ), this );
d->aViewMode->setDelayed( false );
#define ADD_VIEWMODE_ACTION( text, name, id ) \
do { \
QAction *vm = new QAction( text, this ); \
vm->setCheckable( true ); \
vm->setData( QVariant::fromValue( id ) ); \
d->aViewMode->addAction( vm ); \
ac->addAction( QStringLiteral(name), vm ); \
vmGroup->addAction( vm ); \
} while( 0 )
ac->addAction(QStringLiteral("view_render_mode"), d->aViewMode );
QActionGroup *vmGroup = new QActionGroup( this ); //d->aViewMode->menu() );
ADD_VIEWMODE_ACTION( i18n( "Single Page" ), "view_render_mode_single", (int)Okular::Settings::EnumViewMode::Single );
ADD_VIEWMODE_ACTION( i18n( "Facing Pages" ), "view_render_mode_facing", (int)Okular::Settings::EnumViewMode::Facing );
ADD_VIEWMODE_ACTION( i18n( "Facing Pages (Center First Page)" ), "view_render_mode_facing_center_first", (int)Okular::Settings::EnumViewMode::FacingFirstCentered );
ADD_VIEWMODE_ACTION( i18n( "Overview" ), "view_render_mode_overview", (int)Okular::Settings::EnumViewMode::Summary );
const QList<QAction *> viewModeActions = d->aViewMode->menu()->actions();
for (QAction *viewModeAction : viewModeActions)
{
if (viewModeAction->data().toInt() == Okular::Settings::viewMode())
// View Mode action menu (Single Page, Facing Pages,...(choose), and Continuous (on/off))
d->aViewModeMenu = new KActionMenu( QIcon::fromTheme( QStringLiteral("view-split-left-right") ), i18n( "&View Mode" ), this );
d->aViewModeMenu->setDelayed( false );
ac->addAction( QStringLiteral( "view_render_mode" ), d->aViewModeMenu );
d->viewModeActionGroup = new QActionGroup( this );
auto addViewMode = [=] ( QAction * a, const QString &name, Okular::Settings::EnumViewMode::type id ) {
a->setCheckable( true );
a->setData( int( id ) );
d->aViewModeMenu->addAction( a );
ac->addAction( name, a );
d->viewModeActionGroup->addAction( a );
};
addViewMode( new QAction( i18nc( "@item:inmenu", "&Single Page" ), this ),
QStringLiteral("view_render_mode_single"),
Okular::Settings::EnumViewMode::Single );
addViewMode( new QAction( i18nc( "@item:inmenu", "&Facing Pages" ), this ),
QStringLiteral("view_render_mode_single"),
Okular::Settings::EnumViewMode::Facing );
addViewMode( new QAction( i18nc( "@item:inmenu", "Facing Pages (&Center First Page)" ), this ),
QStringLiteral("view_render_mode_single"),
Okular::Settings::EnumViewMode::FacingFirstCentered );
addViewMode( new QAction( i18nc( "@item:inmenu", "&Overview" ), this ),
QStringLiteral("view_render_mode_single"),
Okular::Settings::EnumViewMode::Summary );
const QList< QAction* > viewModeActions = d->viewModeActionGroup->actions();
for ( QAction * viewModeAction : viewModeActions )
{
if ( viewModeAction->data().toInt() == Okular::Settings::viewMode() )
{
viewModeAction->setChecked( true );
break;
}
}
connect( vmGroup, &QActionGroup::triggered, this, &PageView::slotViewMode );
#undef ADD_VIEWMODE_ACTION
connect( d->viewModeActionGroup, &QActionGroup::triggered, this, &PageView::slotViewMode );
// Continuous view action, add to view mode action menu.
d->aViewModeMenu->addSeparator();
d->aViewContinuous = new KToggleAction(QIcon::fromTheme( QStringLiteral("view-list-text") ), i18n("&Continuous"), this);
d->aViewModeMenu->addAction(d->aViewContinuous);
ac->addAction(QStringLiteral("view_continuous"), d->aViewContinuous );
connect( d->aViewContinuous, &QAction::toggled, this, &PageView::slotContinuousToggled );
d->aViewContinuous->setChecked( Okular::Settings::viewContinuous() );
......@@ -806,7 +818,7 @@ void PageView::fitPageWidth( int page )
d->aZoomFitWidth->setChecked( true );
d->aZoomFitPage->setChecked( false );
d->aZoomAutoFit->setChecked( false );
d->aViewMode->menu()->actions().at( 0 )->setChecked( true );
updateViewMode( 0 );
viewport()->setUpdatesEnabled( false );
slotRelayoutPages();
viewport()->setUpdatesEnabled( true );
......@@ -1241,8 +1253,8 @@ void PageView::updateActionState( bool haspages, bool documentChanged, bool hasf
if ( d->aTrimToSelection )
d->aTrimToSelection->setEnabled( haspages );
if ( d->aViewMode )
d->aViewMode->setEnabled( haspages );
if ( d->aViewModeMenu )
d->aViewModeMenu->setEnabled( haspages );
if ( d->aViewContinuous )
d->aViewContinuous->setEnabled( haspages );
......@@ -1610,12 +1622,16 @@ QVariant PageView::capability( ViewCapability capability ) const
return d->aViewContinuous ? d->aViewContinuous->isChecked() : true;
case ViewModeModality:
{
const int nActions = d->aViewMode ? d->aViewMode->menu()->actions().size() : 0;
for (int i=0; i < nActions; ++i)
if ( d->viewModeActionGroup )
{
const QAction* action = d->aViewMode->menu()->actions().at(i);
if ( action->isChecked() )
return action->data();
const QList<QAction*> actions = d->viewModeActionGroup->actions();
for ( const QAction* action : actions )
{
if (action->isChecked())
{
return action->data();
}
}
}
return QVariant();
}
......@@ -4272,7 +4288,7 @@ void PageView::updateZoomText()
void PageView::updateViewMode(const int nr)
{
const QList<QAction*> actions = d->aViewMode->menu()->actions();
const QList<QAction*> actions = d->viewModeActionGroup->actions();
for ( QAction* action : actions ) {
QVariant mode_id = action->data();
if (mode_id.toInt() == nr) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment