diff options
-rw-r--r-- | desktop/source/lib/init.cxx | 2 | ||||
-rw-r--r-- | include/sfx2/msg.hxx | 2 | ||||
-rw-r--r-- | include/svl/memberid.hrc | 2 | ||||
-rw-r--r-- | include/svl/srchitem.hxx | 9 | ||||
-rw-r--r-- | sfx2/sdi/sfxitems.sdi | 2 | ||||
-rw-r--r-- | svl/source/items/srchitem.cxx | 32 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewsrch.cxx | 10 |
7 files changed, 56 insertions, 3 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 00d0976f0485..71e943185744 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -742,6 +742,8 @@ static void jsonToPropertyValues(const char* pJSON, uno::Sequence<beans::Propert aValue.Value <<= OUString::fromUtf8(rValue.c_str()); else if (rType == "boolean") aValue.Value <<= OString(rValue.c_str()).toBoolean(); + else if (rType == "long") + aValue.Value <<= OString(rValue.c_str()).toInt32(); else SAL_WARN("desktop.lib", "jsonToPropertyValues: unhandled type '"<<rType<<"'"); aArguments.push_back(aValue); diff --git a/include/sfx2/msg.hxx b/include/sfx2/msg.hxx index 58785ff82d5d..89faffd09c06 100644 --- a/include/sfx2/msg.hxx +++ b/include/sfx2/msg.hxx @@ -155,7 +155,7 @@ SFX_DECL_TYPE(13); // for SwAddPrinterItem, Sd... SFX_DECL_TYPE(14); SFX_DECL_TYPE(16); // for SwDocDisplayItem SFX_DECL_TYPE(17); // for SvxAddressItem -SFX_DECL_TYPE(18); // for SvxSearchItem +SFX_DECL_TYPE(20); // for SvxSearchItem // all SfxTypes must be in this header #undef SFX_DECL_TYPE diff --git a/include/svl/memberid.hrc b/include/svl/memberid.hrc index ef5639523e8e..1593e2379aec 100644 --- a/include/svl/memberid.hrc +++ b/include/svl/memberid.hrc @@ -53,6 +53,8 @@ #define MID_SEARCH_INSERTEDCHARS 17 #define MID_SEARCH_TRANSLITERATEFLAGS 18 #define MID_SEARCH_COMMAND 19 +#define MID_SEARCH_STARTPOINTX 20 +#define MID_SEARCH_STARTPOINTY 21 #endif diff --git a/include/svl/srchitem.hxx b/include/svl/srchitem.hxx index 7ce0f77c8922..9a298585e43a 100644 --- a/include/svl/srchitem.hxx +++ b/include/svl/srchitem.hxx @@ -84,6 +84,10 @@ class SVL_DLLPUBLIC SvxSearchItem : bool bContent; // search in content bool bAsianOptions; // use asian options? + // Start search at this point (absolute twips). + sal_Int32 m_nStartPointX; + sal_Int32 m_nStartPointY; + virtual void ImplCommit() SAL_OVERRIDE; public: @@ -184,6 +188,11 @@ public: inline bool IsUseAsianOptions() const { return bAsianOptions; } inline void SetUseAsianOptions( bool bVal ) { bAsianOptions = bVal; } + + sal_Int32 GetStartPointX() const; + sal_Int32 GetStartPointY() const; + /// Either x or y start point is set. + bool HasStartPoint() const; }; const OUString SvxSearchItem::GetSearchString() const diff --git a/sfx2/sdi/sfxitems.sdi b/sfx2/sdi/sfxitems.sdi index 1d7649e1d98d..f293e5c90a6f 100644 --- a/sfx2/sdi/sfxitems.sdi +++ b/sfx2/sdi/sfxitems.sdi @@ -89,6 +89,8 @@ INT32 InsertedChars MID_SEARCH_INSERTEDCHARS; INT32 TransliterateFlags MID_SEARCH_TRANSLITERATEFLAGS; INT16 Command MID_SEARCH_COMMAND; + INT32 SearchStartPointX MID_SEARCH_STARTPOINTX; + INT32 SearchStartPointY MID_SEARCH_STARTPOINTY; }; item SvxSearch SvxSearchItem; diff --git a/svl/source/items/srchitem.cxx b/svl/source/items/srchitem.cxx index e46d2557e7d9..986463e1d489 100644 --- a/svl/source/items/srchitem.cxx +++ b/svl/source/items/srchitem.cxx @@ -125,7 +125,9 @@ SvxSearchItem::SvxSearchItem( const sal_uInt16 nId ) : bBackward ( false ), bPattern ( false ), bContent ( false ), - bAsianOptions ( false ) + bAsianOptions ( false ), + m_nStartPointX(0), + m_nStartPointY(0) { EnableNotification( lcl_GetNotifyNames() ); @@ -211,7 +213,9 @@ SvxSearchItem::SvxSearchItem( const SvxSearchItem& rItem ) : bBackward ( rItem.bBackward ), bPattern ( rItem.bPattern ), bContent ( rItem.bContent ), - bAsianOptions ( rItem.bAsianOptions ) + bAsianOptions ( rItem.bAsianOptions ), + m_nStartPointX(rItem.m_nStartPointX), + m_nStartPointY(rItem.m_nStartPointY) { EnableNotification( lcl_GetNotifyNames() ); } @@ -604,6 +608,16 @@ bool SvxSearchItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nM } break; } + case MID_SEARCH_STARTPOINTX: + { + bRet = (rVal >>= m_nStartPointX); + break; + } + case MID_SEARCH_STARTPOINTY: + { + bRet = (rVal >>= m_nStartPointY); + break; + } default: OSL_FAIL( "Unknown MemberId" ); } @@ -611,5 +625,19 @@ bool SvxSearchItem::PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nM return bRet; } +sal_Int32 SvxSearchItem::GetStartPointX() const +{ + return m_nStartPointX; +} + +sal_Int32 SvxSearchItem::GetStartPointY() const +{ + return m_nStartPointY; +} + +bool SvxSearchItem::HasStartPoint() const +{ + return m_nStartPointX > 0 || m_nStartPointY > 0; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/uiview/viewsrch.cxx b/sw/source/uibase/uiview/viewsrch.cxx index 3d3dff11cb2f..dbd792b61be8 100644 --- a/sw/source/uibase/uiview/viewsrch.cxx +++ b/sw/source/uibase/uiview/viewsrch.cxx @@ -476,6 +476,16 @@ bool SwView::SearchAndWrap(bool bApi) // selected regions as the cursor doesn't mark the selection in that case.) m_pWrtShell->GetCrsr()->Normalize( m_pSrchItem->GetBackward() ); + if (!m_pWrtShell->HasSelection() && (m_pSrchItem->HasStartPoint())) + { + // No selection -> but we have a start point (top left corner of the + // current view), start searching from there, not from the current + // cursor position. + SwEditShell& rShell = GetWrtShell(); + Point aPosition(m_pSrchItem->GetStartPointX(), m_pSrchItem->GetStartPointY()); + rShell.SetCrsr(aPosition); + } + // If you want to search in selected areas, they must not be unselected. if (!m_pSrchItem->GetSelection()) m_pWrtShell->KillSelection(0, false); |