diff options
author | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2013-07-16 15:49:44 +0200 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2013-07-17 10:10:55 +0200 |
commit | 8bb2c7f1556c10508c8ac451c579539ccf5dacfb (patch) | |
tree | 7d6ec305900f0a24a51ff8f669ecd4ef1ba6ea06 | |
parent | ad4604428dc98686d00637b06fe09078873c9acf (diff) |
fdo#39904, n#825976: implement hyperlinks for Illustrations index
Change-Id: I6f682c382e7ab0e06259b335247fdcebd7412942
-rw-r--r-- | sw/inc/swtypes.hxx | 3 | ||||
-rw-r--r-- | sw/source/core/bastyp/init.cxx | 1 | ||||
-rw-r--r-- | sw/source/core/doc/doctxm.cxx | 6 | ||||
-rw-r--r-- | sw/source/core/inc/txmsrt.hxx | 3 | ||||
-rw-r--r-- | sw/source/core/tox/txmsrt.cxx | 13 | ||||
-rw-r--r-- | sw/source/ui/index/cnttab.cxx | 3 | ||||
-rw-r--r-- | sw/source/ui/uiview/view2.cxx | 14 |
7 files changed, 37 insertions, 6 deletions
diff --git a/sw/inc/swtypes.hxx b/sw/inc/swtypes.hxx index fe1c414960d9..7bc54bd8446b 100644 --- a/sw/inc/swtypes.hxx +++ b/sw/inc/swtypes.hxx @@ -174,6 +174,8 @@ SW_DLLPUBLIC Size GetGraphicSizeTwip( const Graphic&, OutputDevice* pOutDev ); // Separator for jumps to different content types in document. const sal_Unicode cMarkSeperator = '|'; +// Sequences names for jumps are <name of sequence>!<no> +const sal_Unicode cSequenceMarkSeparator = '!'; extern const sal_Char* pMarkToTable; // Strings are extern const sal_Char* pMarkToFrame; // in Init.cxx. extern const sal_Char* pMarkToRegion; @@ -181,6 +183,7 @@ SW_DLLPUBLIC extern const sal_Char* pMarkToOutline; extern const sal_Char* pMarkToText; extern const sal_Char* pMarkToGraphic; extern const sal_Char* pMarkToOLE; +extern const sal_Char* pMarkToSequence; #ifndef DB_DELIM // This is defined in OFA! #define DB_DELIM ((sal_Unicode)0xff) // Database <-> table separator. diff --git a/sw/source/core/bastyp/init.cxx b/sw/source/core/bastyp/init.cxx index 73bc1df0070f..5be84f735b9f 100644 --- a/sw/source/core/bastyp/init.cxx +++ b/sw/source/core/bastyp/init.cxx @@ -421,6 +421,7 @@ const sal_Char* pMarkToText = "text"; const sal_Char* pMarkToOutline = "outline"; const sal_Char* pMarkToGraphic = "graphic"; const sal_Char* pMarkToOLE = "ole"; +const sal_Char* pMarkToSequence = "sequence"; std::vector<SvGlobalName*> *pGlobalOLEExcludeList = 0; diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index a25a6d61e62b..e7b908222367 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -1286,7 +1286,11 @@ void SwTOXBaseSection::UpdateSequence( const SwTxtNode* pOwnChapterNode ) ( !IsFromChapter() || ::lcl_FindChapterNode( rTxtNode, 0 ) == pOwnChapterNode ) ) { - SwTOXPara * pNew = new SwTOXPara( rTxtNode, nsSwTOXElement::TOX_SEQUENCE, 1 ); + const SwSetExpField* pSeqField = dynamic_cast< const SwSetExpField* >( pFmtFld->GetFld() ); + OUString sName = GetSequenceName(); + sName += OUString( cSequenceMarkSeparator ); + sName += OUString::valueOf( sal_Int32( pSeqField->GetSeqNumber() ) ); + SwTOXPara * pNew = new SwTOXPara( rTxtNode, nsSwTOXElement::TOX_SEQUENCE, 1, sName ); // set indexes if the number or the reference text are to be displayed if( GetCaptionDisplay() == CAPTION_TEXT ) { diff --git a/sw/source/core/inc/txmsrt.hxx b/sw/source/core/inc/txmsrt.hxx index 990ada1ab9a8..40525e12ebc1 100644 --- a/sw/source/core/inc/txmsrt.hxx +++ b/sw/source/core/inc/txmsrt.hxx @@ -229,7 +229,7 @@ private: struct SwTOXPara : public SwTOXSortTabBase { - SwTOXPara( const SwCntntNode&, SwTOXElement, sal_uInt16 nLevel = FORM_ALPHA_DELIMITTER ); + SwTOXPara( const SwCntntNode&, SwTOXElement, sal_uInt16 nLevel = FORM_ALPHA_DELIMITTER, OUString sSeqName = OUString() ); virtual ~SwTOXPara() {} void SetStartIndex( xub_StrLen nSet) { nStartIndex = nSet;} @@ -246,6 +246,7 @@ private: sal_uInt16 m_nLevel; xub_StrLen nStartIndex; xub_StrLen nEndIndex; + OUString m_sSequenceName; }; struct SwTOXTable : public SwTOXSortTabBase diff --git a/sw/source/core/tox/txmsrt.cxx b/sw/source/core/tox/txmsrt.cxx index 942d2399e750..2edda928b697 100644 --- a/sw/source/core/tox/txmsrt.cxx +++ b/sw/source/core/tox/txmsrt.cxx @@ -572,12 +572,13 @@ sal_uInt16 SwTOXContent::GetLevel() const The position must not come from the document, but from the "anchor"! --------------------------------------------------------------------*/ -SwTOXPara::SwTOXPara( const SwCntntNode& rNd, SwTOXElement eT, sal_uInt16 nLevel ) +SwTOXPara::SwTOXPara( const SwCntntNode& rNd, SwTOXElement eT, sal_uInt16 nLevel, OUString sSeqName ) : SwTOXSortTabBase( TOX_SORT_PARA, &rNd, 0, 0 ), eType( eT ), m_nLevel(nLevel), nStartIndex(0), - nEndIndex(STRING_LEN) + nEndIndex(STRING_LEN), + m_sSequenceName( sSeqName ) { } @@ -700,6 +701,14 @@ String SwTOXPara::GetURL() const } } break; + case nsSwTOXElement::TOX_SEQUENCE: + { + aTxt = '#'; + aTxt += m_sSequenceName; + aTxt += cMarkSeperator; + aTxt.AppendAscii( pMarkToSequence ); + } + break; default: break; } return aTxt; diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx index 7feb49d413c2..28bb8fc7b926 100644 --- a/sw/source/ui/index/cnttab.cxx +++ b/sw/source/ui/index/cnttab.cxx @@ -2095,6 +2095,7 @@ void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) sal_Bool bToxIsAuthorities = TOX_AUTHORITIES == aCurType.eType; sal_Bool bToxIsIndex = TOX_INDEX == aCurType.eType; sal_Bool bToxIsContent = TOX_CONTENT == aCurType.eType; + sal_Bool bToxIsSequence = TOX_ILLUSTRATIONS == aCurType.eType; aLevelLB.Clear(); for(sal_uInt16 i = 1; i < m_pCurrentForm->GetFormMax(); i++) @@ -2227,7 +2228,7 @@ void SwTOXEntryTabPage::ActivatePage( const SfxItemSet& /*rSet*/) //show or hide controls aEntryNoPB.Show( bToxIsContent ); - aHyperLinkPB.Show( bToxIsContent ); + aHyperLinkPB.Show( bToxIsContent || bToxIsSequence ); aRelToStyleCB.Show( !bToxIsAuthorities ); aChapterInfoPB.Show( !bToxIsContent && !bToxIsAuthorities); aEntryPB.Show( !bToxIsAuthorities ); diff --git a/sw/source/ui/uiview/view2.cxx b/sw/source/ui/uiview/view2.cxx index b6a7d1020280..f5f9da499511 100644 --- a/sw/source/ui/uiview/view2.cxx +++ b/sw/source/ui/uiview/view2.cxx @@ -115,6 +115,7 @@ #include <svtools/templdlg.hxx> #include <dbconfig.hxx> #include <dbmgr.hxx> +#include <reffld.hxx> #include <PostItMgr.hxx> @@ -1867,7 +1868,7 @@ bool SwView::JumpToSwMark( const String& rMark ) if( sCmp.Len() ) { - String sName( sMark.Copy( 0, nPos ) ); + rtl::OUString sName( sMark.Copy( 0, nPos ) ); sCmp.ToLowerAscii(); FlyCntType eFlyType = FLYCNTTYPE_ALL; @@ -1892,6 +1893,17 @@ bool SwView::JumpToSwMark( const String& rMark ) pWrtShell->EnterStdMode(); bRet = pWrtShell->GotoTable( sName ); } + else if( COMPARE_EQUAL == sCmp.CompareToAscii( pMarkToSequence ) ) + { + pWrtShell->EnterStdMode(); + sal_Int32 nNoPos = sName.indexOf( cSequenceMarkSeparator ); + if ( nNoPos != -1 ) + { + sal_uInt16 nSeqNo = sName.copy( nNoPos + 1 ).toInt32(); + sName = sName.copy( 0, nNoPos ); + pWrtShell->GotoRefMark( sName, REF_SEQUENCEFLD, nSeqNo ); + } + } else if( COMPARE_EQUAL == sCmp.CompareToAscii( pMarkToText ) ) { // Normale Textsuche |