summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCédric Bosdonnat <cedric.bosdonnat@free.fr>2013-07-16 15:49:44 +0200
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2013-07-17 10:10:55 +0200
commit8bb2c7f1556c10508c8ac451c579539ccf5dacfb (patch)
tree7d6ec305900f0a24a51ff8f669ecd4ef1ba6ea06
parentad4604428dc98686d00637b06fe09078873c9acf (diff)
fdo#39904, n#825976: implement hyperlinks for Illustrations index
Change-Id: I6f682c382e7ab0e06259b335247fdcebd7412942
-rw-r--r--sw/inc/swtypes.hxx3
-rw-r--r--sw/source/core/bastyp/init.cxx1
-rw-r--r--sw/source/core/doc/doctxm.cxx6
-rw-r--r--sw/source/core/inc/txmsrt.hxx3
-rw-r--r--sw/source/core/tox/txmsrt.cxx13
-rw-r--r--sw/source/ui/index/cnttab.cxx3
-rw-r--r--sw/source/ui/uiview/view2.cxx14
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