convert header/footer menu to .ui
Change-Id: Ia1aed81bfd806fbca78acc3b23886056a23ade4d
diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk
index 81d0736..66e1996 100644
--- a/sw/UIConfig_swriter.mk
+++ b/sw/UIConfig_swriter.mk
@@ -149,6 +149,7 @@ $(eval $(call gb_UIConfig_add_uifiles,modules/swriter,\
sw/uiconfig/swriter/ui/frmtypepage \
sw/uiconfig/swriter/ui/frmurlpage \
sw/uiconfig/swriter/ui/gotopagedialog \
sw/uiconfig/swriter/ui/headerfootermenu \
sw/uiconfig/swriter/ui/indexentry \
sw/uiconfig/swriter/ui/inputfielddialog \
sw/uiconfig/swriter/ui/inputwinmenu \
diff --git a/sw/inc/cmdid.h b/sw/inc/cmdid.h
index 9e718b8..0b2662a 100644
--- a/sw/inc/cmdid.h
+++ b/sw/inc/cmdid.h
@@ -711,10 +711,6 @@
#define FN_REPLY (FN_NOTES+7)
#define FN_FORMAT_ALL_NOTES (FN_NOTES+8)
#define FN_HEADERFOOTER_EDIT (FN_HEADERFOOTER+1)
#define FN_HEADERFOOTER_DELETE (FN_HEADERFOOTER+2)
#define FN_HEADERFOOTER_BORDERBACK (FN_HEADERFOOTER+3)
// Region: Parameter
#define FN_PARAM_MOVE_COUNT (FN_PARAM+2)
#define FN_PARAM_MOVE_SELECTION (FN_PARAM+3)
diff --git a/sw/inc/swcommands.h b/sw/inc/swcommands.h
index d1ad3e7..e726c81 100644
--- a/sw/inc/swcommands.h
+++ b/sw/inc/swcommands.h
@@ -32,9 +32,6 @@
#define CMD_FN_REDLINE_REJECT_DIRECT ".uno:RejectTrackedChange"
#define CMD_FN_REDLINE_NEXT_CHANGE ".uno:NextTrackedChange"
#define CMD_FN_REDLINE_PREV_CHANGE ".uno:PreviousTrackedChange"
#define CMD_FN_HEADERFOOTER_EDIT ".uno:HeaderFooterEdit"
#define CMD_FN_HEADERFOOTER_DELETE ".uno:HeaderFooterDelete"
#define CMD_FN_HEADERFOOTER_BORDERBACK ".uno:HeaderFooterBorderBackground"
#endif
diff --git a/sw/source/ui/app/mn.src b/sw/source/ui/app/mn.src
index fe71b4d..984e7eb 100644
--- a/sw/source/ui/app/mn.src
+++ b/sw/source/ui/app/mn.src
@@ -89,27 +89,4 @@ Menu MN_ANNOTATION_BUTTON
};
};
Menu MN_HEADERFOOTER_BUTTON
{
ItemList =
{
MenuItem
{
Identifier = FN_HEADERFOOTER_EDIT ;
HelpID = CMD_FN_HEADERFOOTER_EDIT ;
};
MenuItem
{
Identifier = FN_HEADERFOOTER_BORDERBACK ;
HelpID = CMD_FN_HEADERFOOTER_BORDERBACK ;
Text [ en-US ] = "Border and Background..." ;
};
MenuItem
{
Identifier = FN_HEADERFOOTER_DELETE ;
HelpID = CMD_FN_HEADERFOOTER_DELETE ;
};
};
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/uibase/docvw/HeaderFooterWin.cxx b/sw/source/uibase/docvw/HeaderFooterWin.cxx
index f686d8c..85e2836 100644
--- a/sw/source/uibase/docvw/HeaderFooterWin.cxx
+++ b/sw/source/uibase/docvw/HeaderFooterWin.cxx
@@ -126,8 +126,9 @@ namespace
SwHeaderFooterWin::SwHeaderFooterWin( SwEditWin* pEditWin, const SwFrame *pFrame, bool bHeader ) :
SwFrameMenuButtonBase( pEditWin, pFrame ),
m_aBuilder(nullptr, VclBuilderContainer::getUIRootDir(), "modules/swriter/ui/headerfootermenu.ui", ""),
m_bIsHeader( bHeader ),
m_pPopupMenu( nullptr ),
m_pPopupMenu(m_aBuilder.get_menu("menu")),
m_pLine( nullptr ),
m_bIsAppearing( false ),
m_nFadeRate( 100 ),
@@ -143,19 +144,17 @@ SwHeaderFooterWin::SwHeaderFooterWin( SwEditWin* pEditWin, const SwFrame *pFrame
m_pLine = VclPtr<SwDashedLine>::Create(GetEditWin(), &SwViewOption::GetHeaderFooterMarkColor);
m_pLine->SetZOrder(this, ZOrderFlags::Before);
// Create and set the PopupMenu
m_pPopupMenu = VclPtr<PopupMenu>::Create(SW_RES(MN_HEADERFOOTER_BUTTON));
// set the PopupMenu
// Rewrite the menu entries' text
if (m_bIsHeader)
{
m_pPopupMenu->SetItemText(FN_HEADERFOOTER_EDIT, SW_RESSTR(STR_FORMAT_HEADER));
m_pPopupMenu->SetItemText(FN_HEADERFOOTER_DELETE, SW_RESSTR(STR_DELETE_HEADER));
m_pPopupMenu->SetItemText(m_pPopupMenu->GetItemId("edit"), SW_RESSTR(STR_FORMAT_HEADER));
m_pPopupMenu->SetItemText(m_pPopupMenu->GetItemId("delete"), SW_RESSTR(STR_DELETE_HEADER));
}
else
{
m_pPopupMenu->SetItemText(FN_HEADERFOOTER_EDIT, SW_RESSTR(STR_FORMAT_FOOTER));
m_pPopupMenu->SetItemText(FN_HEADERFOOTER_DELETE, SW_RESSTR(STR_DELETE_FOOTER));
m_pPopupMenu->SetItemText(m_pPopupMenu->GetItemId("edit"), SW_RESSTR(STR_FORMAT_FOOTER));
m_pPopupMenu->SetItemText(m_pPopupMenu->GetItemId("delete"), SW_RESSTR(STR_DELETE_FOOTER));
}
SetPopupMenu(m_pPopupMenu);
@@ -171,7 +170,8 @@ SwHeaderFooterWin::~SwHeaderFooterWin( )
void SwHeaderFooterWin::dispose()
{
m_pPopupMenu.disposeAndClear();
m_pPopupMenu.clear();
m_aBuilder.disposeBuilder();
m_pLine.disposeAndClear();
SwFrameMenuButtonBase::dispose();
}
@@ -402,78 +402,70 @@ bool SwHeaderFooterWin::IsEmptyHeaderFooter( )
return bResult;
}
void SwHeaderFooterWin::ExecuteCommand( sal_uInt16 nSlot )
void SwHeaderFooterWin::ExecuteCommand(const OString& rIdent)
{
SwView& rView = GetEditWin()->GetView();
SwWrtShell& rSh = rView.GetWrtShell();
const OUString& rStyleName = GetPageFrame()->GetPageDesc()->GetName();
switch ( nSlot )
if (rIdent == "edit")
{
case FN_HEADERFOOTER_EDIT:
OString sPageId = m_bIsHeader ? OString("header") : OString("footer");
rView.GetDocShell()->FormatPage(rStyleName, sPageId, rSh);
}
else if (rIdent == "borderback")
{
const SwPageDesc* pDesc = GetPageFrame()->GetPageDesc();
const SwFrameFormat& rMaster = pDesc->GetMaster();
SwFrameFormat* pHFFormat = const_cast< SwFrameFormat* >( rMaster.GetFooter().GetFooterFormat() );
if ( m_bIsHeader )
pHFFormat = const_cast< SwFrameFormat* >( rMaster.GetHeader().GetHeaderFormat() );
SfxItemPool* pPool = pHFFormat->GetAttrSet().GetPool();
SfxItemSet aSet( *pPool,
RES_BACKGROUND, RES_BACKGROUND,
RES_BOX, RES_BOX,
SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
RES_SHADOW, RES_SHADOW, 0 );
aSet.Put( pHFFormat->GetAttrSet() );
// Create a box info item... needed by the dialog
SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
const SfxPoolItem *pBoxInfo;
if ( SfxItemState::SET == pHFFormat->GetAttrSet().GetItemState( SID_ATTR_BORDER_INNER,
true, &pBoxInfo) )
aBoxInfo = *static_cast<const SvxBoxInfoItem*>(pBoxInfo);
aBoxInfo.SetTable( false );
aBoxInfo.SetDist( true);
aBoxInfo.SetMinDist( false );
aBoxInfo.SetDefDist( MIN_BORDER_DIST );
aBoxInfo.SetValid( SvxBoxInfoItemValidFlags::DISABLE );
aSet.Put( aBoxInfo );
if ( svx::ShowBorderBackgroundDlg( this, &aSet, true ) )
{
OString sPageId = m_bIsHeader ? OString("header") : OString("footer");
rView.GetDocShell()->FormatPage(rStyleName, sPageId, rSh);
}
break;
case FN_HEADERFOOTER_BORDERBACK:
{
const SwPageDesc* pDesc = GetPageFrame()->GetPageDesc();
const SwFrameFormat& rMaster = pDesc->GetMaster();
SwFrameFormat* pHFFormat = const_cast< SwFrameFormat* >( rMaster.GetFooter().GetFooterFormat() );
if ( m_bIsHeader )
pHFFormat = const_cast< SwFrameFormat* >( rMaster.GetHeader().GetHeaderFormat() );
const SfxPoolItem* pItem;
if ( SfxItemState::SET == aSet.GetItemState( RES_BACKGROUND, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
SfxItemPool* pPool = pHFFormat->GetAttrSet().GetPool();
SfxItemSet aSet( *pPool,
RES_BACKGROUND, RES_BACKGROUND,
RES_BOX, RES_BOX,
SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
RES_SHADOW, RES_SHADOW, 0 );
if ( SfxItemState::SET == aSet.GetItemState( RES_BOX, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
aSet.Put( pHFFormat->GetAttrSet() );
// Create a box info item... needed by the dialog
SvxBoxInfoItem aBoxInfo( SID_ATTR_BORDER_INNER );
const SfxPoolItem *pBoxInfo;
if ( SfxItemState::SET == pHFFormat->GetAttrSet().GetItemState( SID_ATTR_BORDER_INNER,
true, &pBoxInfo) )
aBoxInfo = *static_cast<const SvxBoxInfoItem*>(pBoxInfo);
aBoxInfo.SetTable( false );
aBoxInfo.SetDist( true);
aBoxInfo.SetMinDist( false );
aBoxInfo.SetDefDist( MIN_BORDER_DIST );
aBoxInfo.SetValid( SvxBoxInfoItemValidFlags::DISABLE );
aSet.Put( aBoxInfo );
if ( svx::ShowBorderBackgroundDlg( this, &aSet, true ) )
{
const SfxPoolItem* pItem;
if ( SfxItemState::SET == aSet.GetItemState( RES_BACKGROUND, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
if ( SfxItemState::SET == aSet.GetItemState( RES_BOX, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
if ( SfxItemState::SET == aSet.GetItemState( RES_SHADOW, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
if ( SfxItemState::SET == aSet.GetItemState( RES_SHADOW, false, &pItem ) ) {
pHFFormat->SetFormatAttr( *pItem );
rView.GetDocShell()->SetModified();
}
}
break;
case FN_HEADERFOOTER_DELETE:
{
rSh.ChangeHeaderOrFooter( rStyleName, m_bIsHeader, false, true );
}
break;
default:
break;
}
else if (rIdent == "delete")
{
rSh.ChangeHeaderOrFooter( rStyleName, m_bIsHeader, false, true );
}
}
@@ -498,7 +490,7 @@ void SwHeaderFooterWin::MouseButtonDown( const MouseEvent& rMEvt )
void SwHeaderFooterWin::Select()
{
ExecuteCommand(GetCurItemId());
ExecuteCommand(GetCurItemIdent());
}
IMPL_LINK_NOARG(SwHeaderFooterWin, FadeHandler, Timer *, void)
diff --git a/sw/source/uibase/inc/HeaderFooterWin.hxx b/sw/source/uibase/inc/HeaderFooterWin.hxx
index ab4d4d3..da51bee 100644
--- a/sw/source/uibase/inc/HeaderFooterWin.hxx
+++ b/sw/source/uibase/inc/HeaderFooterWin.hxx
@@ -10,7 +10,7 @@
#define INCLUDED_SW_SOURCE_UIBASE_INC_HEADERFOOTERWIN_HXX
#include <FrameControl.hxx>
#include <vcl/builder.hxx>
#include <vcl/menubtn.hxx>
/** Class for the header and footer separator control window.
@@ -20,6 +20,7 @@
*/
class SwHeaderFooterWin : public SwFrameMenuButtonBase
{
VclBuilder m_aBuilder;
OUString m_sLabel;
bool m_bIsHeader;
VclPtr<PopupMenu> m_pPopupMenu;
@@ -45,7 +46,7 @@ public:
bool IsHeader() { return m_bIsHeader; };
bool IsEmptyHeaderFooter( );
void ExecuteCommand(sal_uInt16 nSlot);
void ExecuteCommand(const OString &rIdent);
void SetReadonly( bool bReadonly ) override;
diff --git a/sw/source/uibase/inc/popup.hrc b/sw/source/uibase/inc/popup.hrc
index 9f12daf..0bc6595 100644
--- a/sw/source/uibase/inc/popup.hrc
+++ b/sw/source/uibase/inc/popup.hrc
@@ -23,9 +23,8 @@
#include "rcid.hrc"
#define MN_ANNOTATION_BUTTON (RC_POPUPS_BEGIN + 0)
#define MN_HEADERFOOTER_BUTTON (RC_POPUPS_BEGIN + 1)
#if MN_HEADERFOOTER_BUTTON > RC_POPUPS_END
#if MN_ANNOTATION_BUTTON > RC_POPUPS_END
#error Resource-Id Ueberlauf in #file, #line
#endif
diff --git a/sw/uiconfig/swriter/ui/headerfootermenu.ui b/sw/uiconfig/swriter/ui/headerfootermenu.ui
new file mode 100644
index 0000000..2a77501
--- /dev/null
+++ b/sw/uiconfig/swriter/ui/headerfootermenu.ui
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface>
<requires lib="gtk+" version="3.10"/>
<object class="GtkMenu" id="menu">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkMenuItem" id="edit">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="borderback">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Border and Background...</property>
<property name="use_underline">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="delete">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_underline">True</property>
</object>
</child>
</object>
</interface>