convert over weird hidden RID_FMSHELL_CONVERSIONMENU use to new .ui

Desktop / LibreOffice - Caolán McNamara [redhat.com] - 19 April 2017 03:49 EDT



###

diff --git a/framework/source/classes/fwlresid.cxx b/framework/source/classes/fwlresid.cxx
index 5e9dd27..3fd5f60 100644
--- a/framework/source/classes/fwlresid.cxx
+++ b/framework/source/classes/fwlresid.cxx
@@ -19,11 +19,11 @@

#include "classes/fwlresid.hxx"
#include
+#include
+#include
#include
#include

-#include
-
namespace framework
{

diff --git a/framework/source/uielement/controlmenucontroller.cxx b/framework/source/uielement/controlmenucontroller.cxx
index a151573..9eea330 100644
--- a/framework/source/uielement/controlmenucontroller.cxx
+++ b/framework/source/uielement/controlmenucontroller.cxx
@@ -30,6 +30,7 @@
#include

#include
+#include
#include
#include
#include
@@ -47,32 +48,7 @@
#include "svx/svxids.hrc"
#include "svx/fmresids.hrc"

-// Copied from svx
-// Function-Id's
-#define RID_FMSHELL_CONVERSIONMENU (RID_FORMS_START + 4)
-
-static const sal_Int16 nConvertSlots[] =
-{
- SID_FM_CONVERTTO_EDIT,
- SID_FM_CONVERTTO_BUTTON,
- SID_FM_CONVERTTO_FIXEDTEXT,
- SID_FM_CONVERTTO_LISTBOX,
- SID_FM_CONVERTTO_CHECKBOX,
- SID_FM_CONVERTTO_RADIOBUTTON,
- SID_FM_CONVERTTO_GROUPBOX,
- SID_FM_CONVERTTO_COMBOBOX,
- SID_FM_CONVERTTO_IMAGEBUTTON,
- SID_FM_CONVERTTO_FILECONTROL,
- SID_FM_CONVERTTO_DATE,
- SID_FM_CONVERTTO_TIME,
- SID_FM_CONVERTTO_NUMERIC,
- SID_FM_CONVERTTO_CURRENCY,
- SID_FM_CONVERTTO_PATTERN,
- SID_FM_CONVERTTO_IMAGECONTROL,
- SID_FM_CONVERTTO_FORMATTED,
- SID_FM_CONVERTTO_SCROLLBAR,
- SID_FM_CONVERTTO_SPINBUTTON
-};
+// See svx/source/form/fmshimp.cxx for other use of this .ui

static const char* aCommands[] =
{
@@ -94,7 +70,8 @@ static const char* aCommands[] =
".uno:ConvertToImageControl",
".uno:ConvertToFormatted",
".uno:ConvertToScrollBar",
- ".uno:ConvertToSpinButton"
+ ".uno:ConvertToSpinButton",
+ ".uno:ConvertToNavigationBar"
};

static const sal_Int16 nImgIds[] =
@@ -185,13 +162,13 @@ private:
void fillPopupMenu( uno::Reference< awt::XPopupMenu >& rPopupMenu );

bool m_bShowMenuImages : 1;
- VclPtr m_pResPopupMenu;
+ std::unique_ptr m_xBuilder;
+ VclPtr m_xResPopupMenu;
UrlToDispatchMap m_aURLToDispatchMap;
};

-ControlMenuController::ControlMenuController( const css::uno::Reference< css::uno::XComponentContext >& xContext ) :
- svt::PopupMenuControllerBase( xContext ),
- m_pResPopupMenu( nullptr )
+ControlMenuController::ControlMenuController(const css::uno::Reference< css::uno::XComponentContext >& xContext)
+ : svt::PopupMenuControllerBase(xContext)
{
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
m_bShowMenuImages = rSettings.GetUseImagesInMenus();
@@ -202,13 +179,16 @@ ControlMenuController::ControlMenuController( const css::uno::Reference< css::un
void ControlMenuController::updateImagesPopupMenu( PopupMenu* pPopupMenu )
{
std::unique_ptr xResMgr(ResMgr::CreateResMgr("svx", Application::GetSettings().GetUILanguageTag()));
- for (sal_uInt32 i=0; i < SAL_N_ELEMENTS(nConvertSlots); ++i)
+ for (sal_uInt32 i=0; i < SAL_N_ELEMENTS(aCommands); ++i)
{
+ //ident is .uno:Command without .uno:
+ OString sIdent = OString(aCommands[i]).copy(5);
+ sal_uInt16 nId = pPopupMenu->GetItemId(sIdent);
ResId aResId(nImgIds[i], *xResMgr);
if (m_bShowMenuImages && xResMgr->IsAvailable(aResId))
- pPopupMenu->SetItemImage(nConvertSlots[i], Image(BitmapEx(aResId)));
+ pPopupMenu->SetItemImage(nId, Image(BitmapEx(aResId)));
else
- pPopupMenu->SetItemImage(nConvertSlots[i], Image());
+ pPopupMenu->SetItemImage(nId, Image());
}
}

@@ -224,8 +204,8 @@ void ControlMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu >& rP
if ( pPopupMenu )
pVCLPopupMenu = static_cast(pPopupMenu->GetMenu());

- if ( pVCLPopupMenu && m_pResPopupMenu )
- *pVCLPopupMenu = *m_pResPopupMenu;
+ if (pVCLPopupMenu && m_xResPopupMenu)
+ *pVCLPopupMenu = *m_xResPopupMenu;
}

// XEventListener
@@ -240,7 +220,8 @@ void SAL_CALL ControlMenuController::disposing( const EventObject& )
if ( m_xPopupMenu.is() )
m_xPopupMenu->removeMenuListener( Reference< css::awt::XMenuListener >(static_cast(this), UNO_QUERY ));
m_xPopupMenu.clear();
- m_pResPopupMenu.disposeAndClear();
+ m_xResPopupMenu.clear();
+ m_xBuilder.reset();
}

// XStatusListener
@@ -248,20 +229,26 @@ void SAL_CALL ControlMenuController::statusChanged( const FeatureStateEvent& Eve
{
osl::ResettableMutexGuard aLock( m_aMutex );

- sal_uInt16 nMenuId = 0;
+ OString sIdent;
for (sal_uInt32 i=0; i < SAL_N_ELEMENTS(aCommands); ++i)
{
if ( Event.FeatureURL.Complete.equalsAscii( aCommands[i] ))
{
- nMenuId = nConvertSlots[i];
+ //ident is .uno:Command without .uno:
+ sIdent = OString(aCommands[i]).copy(5);
break;
}
}

+ sal_uInt16 nMenuId = 0;
+
VCLXPopupMenu* pPopupMenu = nullptr;

- if ( nMenuId )
+ if (!sIdent.isEmpty() && m_xResPopupMenu)
+ {
pPopupMenu = static_cast(VCLXMenu::GetImplementation( m_xPopupMenu ));
+ nMenuId = m_xResPopupMenu->GetItemId(sIdent);
+ }

if (pPopupMenu)
{
@@ -273,12 +260,12 @@ void SAL_CALL ControlMenuController::statusChanged( const FeatureStateEvent& Eve
pVCLPopupMenu->RemoveItem( pVCLPopupMenu->GetItemPos( nMenuId ));
else if ( Event.IsEnabled && pVCLPopupMenu->GetItemPos( nMenuId ) == MENU_ITEM_NOTFOUND )
{
- sal_Int16 nSourcePos = m_pResPopupMenu->GetItemPos(nMenuId);
+ sal_Int16 nSourcePos = m_xResPopupMenu->GetItemPos(nMenuId);
sal_Int16 nPrevInSource = nSourcePos;
sal_uInt16 nPrevInConversion = MENU_ITEM_NOTFOUND;
while (nPrevInSource>0)
{
- sal_Int16 nPrevId = m_pResPopupMenu->GetItemId(--nPrevInSource);
+ sal_Int16 nPrevId = m_xResPopupMenu->GetItemId(--nPrevInSource);

// do we have the source's predecessor in our conversion menu, too ?
nPrevInConversion = pVCLPopupMenu->GetItemPos( nPrevId );
@@ -290,9 +277,9 @@ void SAL_CALL ControlMenuController::statusChanged( const FeatureStateEvent& Eve
// none of the items which precede the nSID-slot in the source menu are present in our conversion menu
nPrevInConversion = sal::static_int_cast< sal_uInt16 >(-1); // put the item at the first position

- pVCLPopupMenu->InsertItem( nMenuId, m_pResPopupMenu->GetItemText( nMenuId ), m_pResPopupMenu->GetItemBits( nMenuId ), OString(), ++nPrevInConversion );
- pVCLPopupMenu->SetItemImage( nMenuId, m_pResPopupMenu->GetItemImage( nMenuId ));
- pVCLPopupMenu->SetHelpId( nMenuId, m_pResPopupMenu->GetHelpId( nMenuId ));
+ pVCLPopupMenu->InsertItem(nMenuId, m_xResPopupMenu->GetItemText(nMenuId), m_xResPopupMenu->GetItemBits(nMenuId), OString(), ++nPrevInConversion);
+ pVCLPopupMenu->SetItemImage(nMenuId, m_xResPopupMenu->GetItemImage(nMenuId));
+ pVCLPopupMenu->SetHelpId(nMenuId, m_xResPopupMenu->GetHelpId(nMenuId));
}
}
}
@@ -329,20 +316,12 @@ void SAL_CALL ControlMenuController::itemActivated( const css::awt::MenuEvent& )
// XPopupMenuController
void ControlMenuController::impl_setPopupMenu()
{
- if ( m_pResPopupMenu == nullptr )
+ if (!m_xResPopupMenu)
{
- std::unique_ptr pResMgr(ResMgr::CreateResMgr("svx", Application::GetSettings().GetUILanguageTag()));
- if ( pResMgr )
- {
- ResId aResId( RID_FMSHELL_CONVERSIONMENU, *pResMgr );
- aResId.SetRT( RSC_MENU );
- if ( pResMgr->IsAvailable( aResId ))
- {
- m_pResPopupMenu = VclPtr::Create( aResId );
- updateImagesPopupMenu( m_pResPopupMenu );
- }
- }
- } // if ( m_pResPopupMenu == 0 )
+ m_xBuilder.reset(new VclBuilder(nullptr, VclBuilderContainer::getUIRootDir(), "svx/ui/convertmenu.ui", ""));
+ m_xResPopupMenu = m_xBuilder->get_menu("menu");
+ updateImagesPopupMenu(m_xResPopupMenu);
+ }
}

void SAL_CALL ControlMenuController::updatePopupMenu()

13bf3cb convert over weird hidden RID_FMSHELL_CONVERSIONMENU use to new .ui
framework/source/classes/fwlresid.cxx | 4 +-
.../source/uielement/controlmenucontroller.cxx | 95 +++++++++-------------
2 files changed, 39 insertions(+), 60 deletions(-)

Upstream: cgit.freedesktop.org


  • Share