summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/cmdid.h1
-rw-r--r--sw/inc/view.hxx13
-rw-r--r--sw/sdi/_viewsh.sdi4
-rw-r--r--sw/sdi/swriter.sdi16
-rw-r--r--sw/source/uibase/uiview/view2.cxx38
5 files changed, 72 insertions, 0 deletions
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index c47002b4b90c..3b8194f52ec4 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -726,6 +726,7 @@
#define FN_TO_NEXT_PAGE (FN_SELECTION + 95)
#define FN_TO_PREV_PAGE (FN_SELECTION + 96)
+#define FN_SELECTION_CYCLE (FN_SELECTION + 97)
// QUERY-Block
#define FN_TXTATR_INET (FN_QUERY +29) /* INet-Attribute */
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index f51a80aea1a3..2b7fe95094ec 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -148,6 +148,18 @@ class SW_DLLPUBLIC SwView: public SfxViewShell
friend class SwView_Impl;
friend class SwClipboardChangeListener;
+ // selection cycle
+ struct SelectCycle
+ {
+ Point m_pInitialCursor;
+ Point m_MarkPt;
+ Point m_PointPt;
+ sal_uInt16 nStep;
+
+ SelectCycle() :
+ nStep(0) {}
+ };
+
// search & replace
static SvxSearchItem *s_pSrchItem;
@@ -253,6 +265,7 @@ class SW_DLLPUBLIC SwView: public SfxViewShell
/// functionality based on the user's view, instead of using the m_aVisArea.
SwTwips m_nLOKPageUpDownOffset;
+ SelectCycle m_aSelectCycle;
// methods for searching
// set search context
SAL_DLLPRIVATE bool SearchAndWrap(bool bApi);
diff --git a/sw/sdi/_viewsh.sdi b/sw/sdi/_viewsh.sdi
index f55496ee26a4..3e14394f03b5 100644
--- a/sw/sdi/_viewsh.sdi
+++ b/sw/sdi/_viewsh.sdi
@@ -45,6 +45,10 @@ interface BaseTextEditView
[
ExecMethod = Execute ;
]
+ FN_SELECTION_CYCLE
+ [
+ ExecMethod = Execute ;
+ ]
FN_PAGEUP // status(final|play)
[
ExecMethod = Execute ;
diff --git a/sw/sdi/swriter.sdi b/sw/sdi/swriter.sdi
index da34afb576f8..c560b85b6dc4 100644
--- a/sw/sdi/swriter.sdi
+++ b/sw/sdi/swriter.sdi
@@ -4692,6 +4692,22 @@ SfxVoidItem GoToNextPage FN_TO_NEXT_PAGE
GroupId = SfxGroupId::Navigator;
]
+SfxVoidItem SelectionCycle FN_SELECTION_CYCLE
+()
+[
+ AutoUpdate = FALSE,
+ FastCall = TRUE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Navigator;
+]
SfxUInt16Item PageOffsetDialog FN_CHANGE_PAGENUM
(SfxUInt16Item nOffset FN_CHANGE_PAGENUM)
[
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index bf756f9b7aa7..83ea79dc3beb 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -632,6 +632,44 @@ void SwView::Execute(SfxRequest &rReq)
}
}
break;
+ case FN_SELECTION_CYCLE:
+ {
+ if (m_pWrtShell->IsSelFrameMode())
+ break;
+ if (!m_pWrtShell->IsStdMode())
+ m_pWrtShell->EnterStdMode();
+ SwShellCursor *pCursor = m_pWrtShell->SwCursorShell::GetCursor_();
+ Point CurrMarkPt = pCursor->GetMkPos();
+ Point CurrPointPt = pCursor->GetPtPos();
+ sal_uInt16 nStep = m_aSelectCycle.nStep;
+ if (nStep && (CurrMarkPt != m_aSelectCycle.m_MarkPt || CurrPointPt != m_aSelectCycle.m_PointPt))
+ nStep = 0;
+ switch(nStep)
+ {
+ case 0:
+ m_aSelectCycle.m_pInitialCursor = CurrPointPt;
+ m_pWrtShell->SwCursorShell::ClearMark();
+ m_pWrtShell->SelWrd(&CurrPointPt);
+ break;
+ case 1:
+ m_pWrtShell->SelSentence(&CurrPointPt);
+ break;
+ case 2:
+ m_pWrtShell->SelPara(&CurrPointPt);
+ break;
+ case 3:
+ m_pWrtShell->SwCursorShell::ClearMark();
+ m_pWrtShell->SwCursorShell::SetCursor(m_aSelectCycle.m_pInitialCursor);
+ break;
+ }
+ nStep++;
+ nStep %= 4;
+ pCursor = m_pWrtShell->SwCursorShell::GetCursor_();
+ m_aSelectCycle.m_MarkPt = pCursor->GetMkPos();
+ m_aSelectCycle.m_PointPt = pCursor->GetPtPos();
+ m_aSelectCycle.nStep = nStep;
+ }
+ break;
case FN_REDLINE_ON:
{
if( pArgs &&