Kaydet (Commit) 8bb2c7f1 authored tarafından Cédric Bosdonnat's avatar Cédric Bosdonnat

fdo#39904, n#825976: implement hyperlinks for Illustrations index

Change-Id: I6f682c382e7ab0e06259b335247fdcebd7412942
üst ad460442
......@@ -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.
......
......@@ -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;
......
......@@ -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 )
{
......
......@@ -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
......
......@@ -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;
......
......@@ -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 );
......
......@@ -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
......
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