Kaydet (Commit) 29a45a09 authored tarafından Cédric Bosdonnat's avatar Cédric Bosdonnat

n#676858: added new menu entry for headers/footers edit mode

üst 523ff044
......@@ -215,6 +215,7 @@ included in c-context files, so c++ style stuff will cause problems.
#define FN_SELECT_INDEX (FN_EDIT + 85) /**/
#define FN_UP (FN_EDIT + 86) /**/
#define FN_EDIT_HEADER_FOOTER (FN_EDIT + 95) /* Toggle headers/footers edition*/
#define FN_SELECT_PARA (FN_EDIT + 97) /* select paragraph*/
#define FN_SELECT_CONTENT (FN_EDIT + 99) /* Navigator - Content Type */
......
......@@ -190,6 +190,7 @@ private:
SwShellCrsr* pCurCrsr; // current cursor
SwShellCrsr* pCrsrStk; // stack for the cursor
SwVisCrsr *pVisCrsr; // the visible cursor
SwShellCrsr* pCrsrBack; // Backup cursor for header/footer edit mode
IBlockCursor *pBlockCrsr; // interface of cursor for block (=rectangular) selection
......@@ -850,6 +851,8 @@ public:
String GetCrsrDescr() const;
SwRect GetRectOfCurrentChar();
virtual void ToggleHeaderFooterEdit( );
};
// Cursor Inlines:
......
......@@ -564,7 +564,7 @@ public:
const SwPostItMgr* GetPostItMgr() const { return (const_cast<ViewShell*>(this))->GetPostItMgr(); }
SwPostItMgr* GetPostItMgr();
void ToggleHeaderFooterEdit( );
virtual void ToggleHeaderFooterEdit( );
sal_Bool IsHeaderFooterEdit( ) const { return bHeaderFooterEdit; }
};
......
......@@ -373,6 +373,12 @@ interface BaseText
StateMethod = GetState;
DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
]
FN_EDIT_HEADER_FOOTER
[
ExecMethod = Execute ;
StateMethod = GetState;
DisableFlags="SW_DISABLE_ON_PROTECTED_CURSOR";
]
FN_TABLE_UNSET_READ_ONLY // status(final|play)
[
ExecMethod = Execute ;
......
......@@ -10417,3 +10417,30 @@ SfxVoidItem NavigateForward FN_NAVIGATION_FORWARD
ToolBoxConfig = TRUE,
GroupId = GID_NAVIGATION;
]
//--------------------------------------------------------------------------
SfxVoidItem EditHeaderFooter FN_EDIT_HEADER_FOOTER
[
/* flags: */
AutoUpdate = FALSE,
Cachable = Cachable,
FastCall = FALSE,
HasCoreId = FALSE,
HasDialog = FALSE,
ReadOnlyDoc = FALSE,
Toggle = TRUE,
Container = FALSE,
RecordAbsolute = FALSE,
RecordPerSet;
Asynchron;
Readonly = FALSE,
/* config: */
AccelConfig = TRUE,
MenuConfig = TRUE,
StatusBarConfig = FALSE,
ToolBoxConfig = TRUE,
GroupId = GID_EDIT;
]
......@@ -2540,7 +2540,7 @@ void SwCrsrShell::ParkCrsr( const SwNodeIndex &rIdx )
SwCrsrShell::SwCrsrShell( SwCrsrShell& rShell, Window *pInitWin )
: ViewShell( rShell, pInitWin ),
SwModify( 0 ), pCrsrStk( 0 ), pBlockCrsr( 0 ), pTblCrsr( 0 ),
SwModify( 0 ), pCrsrStk( 0 ), pCrsrBack( 0 ), pBlockCrsr( 0 ), pTblCrsr( 0 ),
pBoxIdx( 0 ), pBoxPtr( 0 ), nCrsrMove( 0 ), nBasicActionCnt( 0 ),
eMvState( MV_NONE ),
sMarkedListId(),
......@@ -2568,7 +2568,7 @@ SwCrsrShell::SwCrsrShell( SwCrsrShell& rShell, Window *pInitWin )
SwCrsrShell::SwCrsrShell( SwDoc& rDoc, Window *pInitWin,
const SwViewOption *pInitOpt )
: ViewShell( rDoc, pInitWin, pInitOpt ),
SwModify( 0 ), pCrsrStk( 0 ), pBlockCrsr( 0 ), pTblCrsr( 0 ),
SwModify( 0 ), pCrsrStk( 0 ), pCrsrBack( 0 ), pBlockCrsr( 0 ), pTblCrsr( 0 ),
pBoxIdx( 0 ), pBoxPtr( 0 ), nCrsrMove( 0 ), nBasicActionCnt( 0 ),
eMvState( MV_NONE ), // state for crsr-travelling - GetCrsrOfst
sMarkedListId(),
......@@ -2630,6 +2630,9 @@ SwCrsrShell::~SwCrsrShell()
delete pCrsrStk;
}
if( pCrsrBack )
delete pCrsrBack;
// JP 27.07.98: Bug 54025 - ggfs. den HTML-Parser, der als Client in
// der CursorShell haengt keine Chance geben, sich an den
// TextNode zu haengen.
......@@ -3441,4 +3444,46 @@ void SwCrsrShell::GetSmartTagTerm( const Point& rPt, SwRect& rSelectRect,
}
}
void SwCrsrShell::ToggleHeaderFooterEdit( )
{
ViewShell::ToggleHeaderFooterEdit();
SET_CURR_SHELL( this );
if ( IsHeaderFooterEdit() )
{
pCrsrBack = new SwShellCrsr( *this, *pCurCrsr->GetPoint(),
pCurCrsr->GetPtPos() );
if ( pCurCrsr->HasMark() )
{
pCrsrBack->SetMark();
*pCrsrBack->GetMark() = *pCurCrsr->GetMark();
}
SetCrsrInHdFt();
}
else
{
SwPosition& rPos = *pCurCrsr->GetPoint();
rPos.nNode = pCrsrBack->GetPoint()->nNode;
rPos.nContent = pCrsrBack->GetPoint()->nContent;
if ( pCrsrBack->HasMark( ) )
{
pCurCrsr->SetMark();
rPos = *pCurCrsr->GetMark();
rPos.nNode = pCrsrBack->GetMark()->nNode;
rPos.nContent = pCrsrBack->GetMark()->nContent;
}
delete pCrsrBack;
pCrsrBack = NULL;
UpdateCrsr( SwCrsrShell::SCROLLWIN | SwCrsrShell::CHKRANGE |
SwCrsrShell::READONLY );
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -2963,17 +2963,22 @@ SwRootFrm::Paint(SwRect const& rRect, SwPrintData const*const pPrintData) const
if ( pSh->Imp()->HasDrawView() )
{
// Loop over the drawing object to mark them as in or outside a group
SdrObjList* pObjs = pSh->Imp()->GetPageView()->GetObjList();
for ( sal_uInt32 i = 0; pObjs && i < pObjs->GetObjCount(); i++ )
if ( !pGlobalShell->GetViewOptions()->IsPDFExport() &&
!pGlobalShell->GetViewOptions()->IsPrinting() &&
!pGlobalShell->IsPreView() )
{
SdrObject* pDrawObj = pObjs->GetObj( i );
const SwContact* pContact = ::GetUserCall( pDrawObj );
const SwAnchoredObject* pObj = pContact->GetAnchoredObj( pDrawObj );
SdrObjList* pObjs = pSh->Imp()->GetPageView()->GetObjList();
for ( sal_uInt32 i = 0; pObjs && i < pObjs->GetObjCount(); i++ )
{
SdrObject* pDrawObj = pObjs->GetObj( i );
const SwContact* pContact = ::GetUserCall( pDrawObj );
const SwAnchoredObject* pObj = pContact->GetAnchoredObj( pDrawObj );
bool bInHeaderFooter = pObj->GetAnchorFrm()->FindFooterOrHeader() != NULL;
bool bHeaderFooterEdit = pSh->IsHeaderFooterEdit();
bool bInHeaderFooter = pObj->GetAnchorFrm()->FindFooterOrHeader() != NULL;
bool bHeaderFooterEdit = pSh->IsHeaderFooterEdit();
pDrawObj->SetGhosted( bHeaderFooterEdit ^ bInHeaderFooter );
pDrawObj->SetGhosted( bHeaderFooterEdit ^ bInHeaderFooter );
}
}
pLines->LockLines( sal_True );
......
......@@ -75,6 +75,7 @@
#include <editeng/frmdiritem.hxx>
// OD 2004-05-24 #i28701#
#include <sortedobjs.hxx>
#include <viewopt.hxx>
using namespace ::com::sun::star;
......@@ -132,14 +133,19 @@ void SwFrm::RegisterToFormat( SwFmt& rFmt )
sal_uInt64 SwFrm::SetHeaderFooterEditMask( OutputDevice* pOut ) const
{
ViewShell* pShell = getRootFrm()->GetCurrShell();
bool bInHdrFtr = FindFooterOrHeader( ) != NULL;
bool bEditHdrFtr = pShell->IsHeaderFooterEdit();
sal_uInt64 nOldDrawMode = pOut->GetDrawMode();
if ( ( bInHdrFtr && !bEditHdrFtr ) || ( !bInHdrFtr && bEditHdrFtr ) )
pOut->SetDrawMode( DRAWMODE_GHOSTEDLINE | DRAWMODE_GHOSTEDFILL |
DRAWMODE_GHOSTEDTEXT | DRAWMODE_GHOSTEDBITMAP |
DRAWMODE_GHOSTEDGRADIENT );
ViewShell* pShell = getRootFrm()->GetCurrShell();
if ( !pShell->IsPreView() &&
!pShell->GetViewOptions()->IsPDFExport() &&
!pShell->GetViewOptions()->IsPrinting() )
{
bool bInHdrFtr = FindFooterOrHeader( ) != NULL;
bool bEditHdrFtr = pShell->IsHeaderFooterEdit();
if ( ( bInHdrFtr && !bEditHdrFtr ) || ( !bInHdrFtr && bEditHdrFtr ) )
pOut->SetDrawMode( DRAWMODE_GHOSTEDLINE | DRAWMODE_GHOSTEDFILL |
DRAWMODE_GHOSTEDTEXT | DRAWMODE_GHOSTEDBITMAP |
DRAWMODE_GHOSTEDGRADIENT );
}
return nOldDrawMode;
}
......
......@@ -819,6 +819,9 @@ void SwTextShell::Execute(SfxRequest &rReq)
}
}
break;
case FN_EDIT_HEADER_FOOTER:
rWrtSh.ToggleHeaderFooterEdit();
break;
case SID_ATTR_BRUSH_CHAR :
case SID_ATTR_CHAR_SCALEWIDTH :
case SID_ATTR_CHAR_ROTATED :
......@@ -1565,6 +1568,24 @@ void SwTextShell::GetState( SfxItemSet &rSet )
}
}
break;
case FN_EDIT_HEADER_FOOTER:
{
SfxBoolItem aBool( nWhich, rSh.IsHeaderFooterEdit() );
rSet.Put( aBool );
bool bHasHeaderFooter = false;
for ( sal_uInt16 i = 0; !bHasHeaderFooter && i < rSh.GetPageDescCnt(); i++ )
{
const SwPageDesc& rPageDesc = rSh.GetPageDesc( i );
bHasHeaderFooter = rPageDesc.GetMaster().GetHeader().IsActive() ||
rPageDesc.GetMaster().GetFooter().IsActive() ||
rPageDesc.GetLeft().GetHeader().IsActive() ||
rPageDesc.GetLeft().GetFooter().IsActive();
}
if ( !bHasHeaderFooter )
rSet.DisableItem( nWhich );
}
break;
case SID_TRANSLITERATE_HALFWIDTH:
case SID_TRANSLITERATE_FULLWIDTH:
case SID_TRANSLITERATE_HIRAGANA:
......@@ -1698,7 +1719,7 @@ void SwTextShell::ChangeHeaderOrFooter(
{
if( (bShowWarning && !bOn && GetActiveView() && GetActiveView() == &GetView() &&
(bHeader && aDesc.GetMaster().GetHeader().IsActive())) ||
(!bHeader && aDesc.GetMaster().GetFooter().IsActive()))
(!bHeader && aDesc.GetMaster().GetFooter().IsActive()) )
{
bShowWarning = sal_False;
//Actions have to be closed while the dialog is showing
......@@ -1732,9 +1753,13 @@ void SwTextShell::ChangeHeaderOrFooter(
rSh.ChgPageDesc( nFrom, aDesc );
if( !bCrsrSet && bOn )
{
if ( !rSh.IsHeaderFooterEdit() )
rSh.ToggleHeaderFooterEdit();
bCrsrSet = rSh.SetCrsrInHdFt(
!rStyleName.Len() ? USHRT_MAX : nFrom,
bHeader );
}
}
}
}
......
......@@ -90,6 +90,7 @@
<menu:menuitem menu:id=".uno:EditGlossary"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ChangeDatabaseField"/>
<menu:menuitem menu:id=".uno:EditHeaderFooter"/>
<menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:EditFootnote"/>
<menu:menuitem menu:id=".uno:IndexEntryDialog"/>
......
......@@ -90,6 +90,7 @@
<menu:menuitem menu:id=".uno:EditGlossary"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ChangeDatabaseField"/>
<menu:menuitem menu:id=".uno:EditHeaderFooter"/>
<menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:EditFootnote"/>
<menu:menuitem menu:id=".uno:IndexEntryDialog"/>
......
......@@ -90,6 +90,7 @@
<menu:menuitem menu:id=".uno:EditGlossary"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ChangeDatabaseField"/>
<menu:menuitem menu:id=".uno:EditHeaderFooter"/>
<menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:EditFootnote"/>
<menu:menuitem menu:id=".uno:IndexEntryDialog"/>
......
......@@ -93,6 +93,7 @@
<menu:menuitem menu:id=".uno:EditGlossary"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ChangeDatabaseField"/>
<menu:menuitem menu:id=".uno:EditHeaderFooter"/>
<menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:EditFootnote"/>
<menu:menuitem menu:id=".uno:IndexEntryDialog"/>
......
......@@ -91,6 +91,7 @@
<menu:menuitem menu:id=".uno:EditGlossary"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:ChangeDatabaseField"/>
<menu:menuitem menu:id=".uno:EditHeaderFooter"/>
<menu:menuitem menu:id=".uno:FieldDialog"/>
<menu:menuitem menu:id=".uno:EditFootnote"/>
<menu:menuitem menu:id=".uno:IndexEntryDialog"/>
......
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