summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svtools/toolbarmenu.hxx79
-rw-r--r--solenv/clang-format/blacklist2
-rw-r--r--svtools/Library_svt.mk1
-rw-r--r--svtools/inc/pch/precompiled_svt.hxx7
-rw-r--r--svtools/source/control/toolbarmenu.cxx1341
-rw-r--r--svtools/source/control/toolbarmenuacc.cxx833
-rw-r--r--svtools/source/control/toolbarmenuimp.hxx292
7 files changed, 3 insertions, 2552 deletions
diff --git a/include/svtools/toolbarmenu.hxx b/include/svtools/toolbarmenu.hxx
index b11b89380774..7dcfd936b3ce 100644
--- a/include/svtools/toolbarmenu.hxx
+++ b/include/svtools/toolbarmenu.hxx
@@ -32,14 +32,8 @@ namespace com :: sun :: star :: frame { class XFrame; }
namespace com :: sun :: star :: frame { struct FeatureStateEvent; }
namespace svt { class FrameStatusListener; }
-class Control;
-class ValueSet;
-
namespace svtools {
-class ToolbarMenuEntry;
-struct ToolbarMenu_Impl;
-
class SVT_DLLPUBLIC ToolbarPopupBase
{
friend class ToolbarPopupStatusListener;
@@ -78,79 +72,6 @@ private:
void init();
};
-class SVT_DLLPUBLIC ToolbarMenu : public ToolbarPopup
-{
- friend struct ToolbarMenu_Impl;
-public:
- ToolbarMenu(const css::uno::Reference<css::frame::XFrame>& rFrame,
- vcl::Window* pParentWindow,
- WinBits nBits );
-
- virtual ~ToolbarMenu() override;
- virtual void dispose() override;
-
- virtual void MouseMove( const MouseEvent& rMEvt ) override;
- virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
- virtual void MouseButtonUp( const MouseEvent& rMEvt ) override;
- virtual void KeyInput( const KeyEvent& rKEvent ) override;
- virtual void Command( const CommandEvent& rCEvt ) override;
- virtual void Paint( vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect ) override;
- virtual void GetFocus() override;
- virtual void LoseFocus() override;
-
- void appendEntry( int nEntryId, const OUString& rStr, MenuItemBits nItemBits = MenuItemBits::NONE );
- void appendEntry( int nEntryId, const OUString& rStr, const Image& rImage );
- void appendEntry( int nEntryId, Control* pControl );
- void appendSeparator();
-
- /** creates an empty ValueSet that is initialized and can be inserted with appendEntry. */
- VclPtr<ValueSet> createEmptyValueSetControl();
-
- void checkEntry( int nEntryId, bool bCheck );
-
- void enableEntry( int nEntryId, bool bEnable );
-
- void setEntryText( int nEntryId, const OUString& rStr );
-
- void setEntryImage( int nEntryId, const Image& rImage );
-
- const Size& getMenuSize() const;
-
- void SetSelectHdl( const Link<ToolbarMenu*,void>& rLink );
-
- int getSelectedEntryId() const;
- int getHighlightedEntryId() const;
-
-protected:
- virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
-
- void StateChanged( StateChangedType nType ) override;
- void DataChanged( const DataChangedEvent& rDCEvt ) override;
-
-private:
- DECL_LINK( HighlightHdl, ValueSet*, void );
-
- void initWindow();
-
- Size implCalcSize();
-
- void appendEntry(std::unique_ptr<ToolbarMenuEntry> pEntry);
-
- void implPaint(vcl::RenderContext& rRenderContext, ToolbarMenuEntry const * pThisOnly = nullptr, bool bHighlight = false);
-
- void implHighlightEntry(vcl::RenderContext& rRenderContext, int nHighlightEntry);
- void implHighlightAtPosition(const MouseEvent& rMEvt);
-
- void implChangeHighlightEntry( int nEntry );
- void implSelectEntry( int nSelectedEntry );
-
- ToolbarMenuEntry* implCursorUpDown( bool bUp, bool bHomeEnd );
- ToolbarMenuEntry* implGetEntry( int nEntry ) const;
- ToolbarMenuEntry* implSearchEntry( int nEntryId ) const;
-
- std::unique_ptr<ToolbarMenu_Impl> mpImpl;
-};
-
} // namespace svtools
class SVT_DLLPUBLIC WeldToolbarPopup : public svtools::ToolbarPopupBase
diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index 890cdc7f8a3c..050b7ad51a56 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -13658,8 +13658,6 @@ svtools/source/control/scriptedtext.cxx
svtools/source/control/scrwin.cxx
svtools/source/control/tabbar.cxx
svtools/source/control/toolbarmenu.cxx
-svtools/source/control/toolbarmenuacc.cxx
-svtools/source/control/toolbarmenuimp.hxx
svtools/source/control/valueacc.cxx
svtools/source/control/valueimp.hxx
svtools/source/control/valueset.cxx
diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk
index f5f155faefef..ab191699615b 100644
--- a/svtools/Library_svt.mk
+++ b/svtools/Library_svt.mk
@@ -105,7 +105,6 @@ $(eval $(call gb_Library_add_exception_objects,svt,\
svtools/source/control/scrwin \
svtools/source/control/tabbar \
svtools/source/control/toolbarmenu \
- svtools/source/control/toolbarmenuacc \
svtools/source/control/valueacc \
svtools/source/control/valueset \
svtools/source/dialogs/addresstemplate \
diff --git a/svtools/inc/pch/precompiled_svt.hxx b/svtools/inc/pch/precompiled_svt.hxx
index 3638394cadc8..a56169b0b141 100644
--- a/svtools/inc/pch/precompiled_svt.hxx
+++ b/svtools/inc/pch/precompiled_svt.hxx
@@ -13,7 +13,7 @@
manual changes will be rewritten by the next run of update_pch.sh (which presumably
also fixes all possible problems, so it's usually better to use it).
- Generated on 2019-12-03 09:22:16 using:
+ Generated on 2020-01-27 20:08:05 using:
./bin/update_pch svtools svt --cutoff=4 --exclude:system --include:module --exclude:local
If after updating build fails, use the following command to locate conflicting headers:
@@ -106,7 +106,6 @@
#include <vcl/combobox.hxx>
#include <vcl/commandevent.hxx>
#include <vcl/ctrl.hxx>
-#include <vcl/decoview.hxx>
#include <vcl/dllapi.h>
#include <vcl/dndhelp.hxx>
#include <vcl/dockwin.hxx>
@@ -173,7 +172,6 @@
#include <basegfx/vector/b2enums.hxx>
#include <basegfx/vector/b2ivector.hxx>
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-#include <com/sun/star/accessibility/AccessibleRole.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
#include <com/sun/star/awt/Key.hpp>
#include <com/sun/star/awt/KeyGroup.hpp>
@@ -218,7 +216,6 @@
#include <com/sun/star/i18n/reservedWords.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
#include <com/sun/star/lang/EventObject.hpp>
-#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
@@ -250,6 +247,7 @@
#include <com/sun/star/view/PrintableState.hpp>
#include <comphelper/broadcasthelper.hxx>
#include <comphelper/comphelperdllapi.h>
+#include <comphelper/interfacecontainer2.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/propagg.hxx>
#include <comphelper/proparrhlp.hxx>
@@ -347,7 +345,6 @@
#include <svtools/colorcfg.hxx>
#include <svtools/htmlkywd.hxx>
#include <svtools/htmltokn.h>
-#include <svtools/svmedit.hxx>
#include <svtools/svtdllapi.h>
#include <svtools/svtresid.hxx>
#include <svtools/table/tabletypes.hxx>
diff --git a/svtools/source/control/toolbarmenu.cxx b/svtools/source/control/toolbarmenu.cxx
index 90bd3f3b53aa..b64c52f3155d 100644
--- a/svtools/source/control/toolbarmenu.cxx
+++ b/svtools/source/control/toolbarmenu.cxx
@@ -18,14 +18,9 @@
*/
#include <memory>
-#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
#include <comphelper/processfactory.hxx>
+#include <osl/diagnose.h>
-#include <vcl/dockwin.hxx>
-#include <vcl/decoview.hxx>
-#include <vcl/image.hxx>
#include <vcl/taskpanelist.hxx>
#include <vcl/settings.hxx>
#include <vcl/commandevent.hxx>
@@ -35,7 +30,6 @@
#include <svtools/framestatuslistener.hxx>
#include <svtools/valueset.hxx>
#include <svtools/toolbarmenu.hxx>
-#include "toolbarmenuimp.hxx"
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
@@ -67,1328 +61,6 @@ static vcl::Window* GetTopMostParentSystemWindow( vcl::Window* pWindow )
return nullptr;
}
-
-void ToolbarMenuEntry::init( int nEntryId, MenuItemBits nBits )
-{
- mnEntryId = nEntryId;
- mnBits = nBits;
-
- mbHasText = false;
- mbHasImage = false;
- mbChecked = false;
- mbEnabled = true;
-
- mpControl = nullptr;
-}
-
-
-ToolbarMenuEntry::ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, const OUString& rText, MenuItemBits nBits )
-: mrMenu( rMenu )
-{
- init( nEntryId, nBits );
-
- maText = rText;
- mbHasText = true;
-}
-
-
-ToolbarMenuEntry::ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, const Image& rImage, const OUString& rText, MenuItemBits nBits )
-: mrMenu( rMenu )
-{
- init( nEntryId, nBits );
-
- maText = rText;
- mbHasText = true;
-
- maImage = rImage;
- mbHasImage = true;
-}
-
-
-ToolbarMenuEntry::ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, Control* pControl, MenuItemBits nBits )
-: mrMenu( rMenu )
-{
- init( nEntryId, nBits );
-
- if( pControl )
- {
- mpControl = pControl;
- mpControl->Show();
- }
-}
-
-
-ToolbarMenuEntry::~ToolbarMenuEntry()
-{
- if( mxAccContext.is() )
- {
- Reference< XComponent > xComponent( mxAccContext, UNO_QUERY );
- if( xComponent.is() )
- xComponent->dispose();
- mxAccContext.clear();
- }
- mpControl.disposeAndClear();
-}
-
-
-const Reference< XAccessibleContext >& ToolbarMenuEntry::GetAccessible()
-{
- if( !mxAccContext.is() )
- {
- if( mpControl )
- {
- mxAccContext.set( mpControl->GetAccessible(), UNO_QUERY );
- }
- else
- {
- mxAccContext.set( new ToolbarMenuEntryAcc( this ) );
- }
- }
-
- return mxAccContext;
-}
-
-
-sal_Int32 ToolbarMenuEntry::getAccessibleChildCount()
-{
- if( mpControl )
- {
- const Reference< XAccessibleContext >& xContext = GetAccessible();
- if( xContext.is() )
- {
- return xContext->getAccessibleChildCount();
- }
- }
- return 1;
-}
-
-
-Reference< XAccessible > ToolbarMenuEntry::getAccessibleChild( sal_Int32 index )
-{
- const Reference< XAccessibleContext >& xContext = GetAccessible();
- if( mpControl )
- {
- if( xContext.is() )
- {
- return xContext->getAccessibleChild(index);
- }
- }
- else if( index == 0 )
- {
- Reference< XAccessible > xRet( xContext, UNO_QUERY );
- if( xRet.is() )
- return xRet;
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-ToolbarMenu_Impl::ToolbarMenu_Impl( ToolbarMenu& rMenu )
-: mrMenu( rMenu )
-, mnCheckPos(0)
-, mnImagePos(0)
-, mnTextPos(0)
-, mnHighlightedEntry(-1)
-, mnSelectedEntry(-1)
-, mnLastColumn(0)
-{
-}
-
-
-ToolbarMenu_Impl::~ToolbarMenu_Impl()
-{
- setAccessible( nullptr );
-}
-
-
-void ToolbarMenu_Impl::setAccessible( ToolbarMenuAcc* pAccessible )
-{
- if( mxAccessible.get() != pAccessible )
- {
- if( mxAccessible.is() )
- mxAccessible->dispose();
-
- mxAccessible.set( pAccessible );
- }
-}
-
-
-void ToolbarMenu_Impl::fireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue )
-{
- if( mxAccessible.is() )
- mxAccessible->FireAccessibleEvent( nEventId, rOldValue, rNewValue );
-}
-
-
-sal_Int32 ToolbarMenu_Impl::getAccessibleChildCount()
-{
- sal_Int32 nCount = 0;
- for( const auto& pEntry : maEntryVector )
- {
- if( pEntry )
- {
- if( pEntry->mpControl )
- {
- nCount += pEntry->getAccessibleChildCount();
- }
- else
- {
- nCount += 1;
- }
- }
- }
-
- return nCount;
-}
-
-
-Reference< XAccessible > ToolbarMenu_Impl::getAccessibleChild( sal_Int32 index )
-{
- for( const auto& pEntry : maEntryVector )
- {
- if( pEntry )
- {
- const sal_Int32 nCount = pEntry->getAccessibleChildCount();
- if( index < nCount )
- {
- return pEntry->getAccessibleChild( index );
- }
- index -= nCount;
- }
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-Reference< XAccessible > ToolbarMenu_Impl::getAccessibleChild( Control const * pControl, sal_Int32 childIndex )
-{
- for( const auto& pEntry : maEntryVector )
- {
- if( pEntry && (pEntry->mpControl.get() == pControl) )
- {
- return pEntry->getAccessibleChild( childIndex );
- }
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-void ToolbarMenu_Impl::selectAccessibleChild( sal_Int32 nChildIndex )
-{
- const int nEntryCount = maEntryVector.size();
- for( int nEntry = 0; nEntry < nEntryCount; nEntry++ )
- {
- ToolbarMenuEntry* const pEntry = maEntryVector[nEntry].get();
- if( pEntry )
- {
- const sal_Int32 nCount = pEntry->getAccessibleChildCount();
- if( nChildIndex < nCount )
- {
- if( pEntry->mpControl )
- {
- Reference< XAccessibleSelection > xSel( pEntry->GetAccessible(), UNO_QUERY_THROW );
- xSel->selectAccessibleChild(nChildIndex);
- }
- else if( pEntry->mnEntryId != TITLE_ID )
- {
- mrMenu.implSelectEntry( nEntry );
- }
- return;
- }
- nChildIndex -= nCount;
- }
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-bool ToolbarMenu_Impl::isAccessibleChildSelected( sal_Int32 nChildIndex )
-{
- const int nEntryCount = maEntryVector.size();
- for( int nEntry = 0; nEntry < nEntryCount; nEntry++ )
- {
- ToolbarMenuEntry* const pEntry = maEntryVector[nEntry].get();
- if( pEntry )
- {
- const sal_Int32 nCount = pEntry->getAccessibleChildCount();
- if( nChildIndex < nCount )
- {
- if( mnHighlightedEntry == nEntry )
- {
- if( pEntry->mpControl )
- {
- Reference< XAccessibleSelection > xSel( pEntry->GetAccessible(), UNO_QUERY_THROW );
- xSel->isAccessibleChildSelected(nChildIndex);
- }
- return true;
- }
- else
- {
- return false;
- }
- }
- nChildIndex -= nCount;
- }
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-void ToolbarMenu_Impl::clearAccessibleSelection()
-{
- if( mnHighlightedEntry != -1 )
- {
- mrMenu.Invalidate();
- mnHighlightedEntry = -1;
- }
-}
-
-
-void ToolbarMenu_Impl::notifyHighlightedEntry()
-{
- if( !(mxAccessible.is() && mxAccessible->HasAccessibleListeners()) )
- return;
-
- ToolbarMenuEntry* pEntry = implGetEntry( mnHighlightedEntry );
- if( !(pEntry && pEntry->mbEnabled && (pEntry->mnEntryId != TITLE_ID)) )
- return;
-
- Any aNew;
- Any aOld( mxOldSelection );
- if( pEntry->mpControl )
- {
- sal_Int32 nChildIndex = 0;
- // todo: if other controls than ValueSet are allowed, adapt this code
- ValueSet* pValueSet = dynamic_cast< ValueSet* >( pEntry->mpControl.get() );
- if( pValueSet )
- nChildIndex = static_cast< sal_Int32 >( pValueSet->GetItemPos( pValueSet->GetSelectedItemId() ) );
-
- if( (nChildIndex >= pEntry->getAccessibleChildCount()) || (nChildIndex < 0) )
- return;
-
- aNew <<= getAccessibleChild( pEntry->mpControl, nChildIndex );
- }
- else
- {
- aNew <<= pEntry->GetAccessible();
- }
-
- fireAccessibleEvent( AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOld, aNew );
- fireAccessibleEvent( AccessibleEventId::SELECTION_CHANGED, aOld, aNew );
- fireAccessibleEvent( AccessibleEventId::STATE_CHANGED, Any(), Any( AccessibleStateType::FOCUSED ) );
- aNew >>= mxOldSelection;
-}
-
-
-ToolbarMenuEntry* ToolbarMenu_Impl::implGetEntry( int nEntry ) const
-{
- if( (nEntry < 0) || (nEntry >= static_cast<int>(maEntryVector.size()) ) )
- return nullptr;
-
- return maEntryVector[nEntry].get();
-}
-
-
-IMPL_LINK_NOARG( ToolbarMenu, HighlightHdl, ValueSet*, void )
-{
- mpImpl->notifyHighlightedEntry();
-}
-
-ToolbarMenu::ToolbarMenu( const css::uno::Reference<css::frame::XFrame>& rFrame, vcl::Window* pParentWindow, WinBits nBits )
- : ToolbarPopup(rFrame, pParentWindow, nBits)
-{
- mpImpl.reset( new ToolbarMenu_Impl( *this ) );
-
- const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
- SetControlBackground( rStyleSettings.GetMenuColor() );
-
- initWindow();
-}
-
-
-ToolbarMenu::~ToolbarMenu()
-{
- disposeOnce();
-}
-
-void ToolbarMenu::dispose()
-{
- mpImpl->mxAccessible.clear();
-
- std::unique_ptr<ToolbarMenu_Impl> pImpl = std::move(mpImpl);
- mpImpl.reset();
-
- pImpl->maEntryVector.clear();
-
- ToolbarPopup::dispose();
-}
-
-
-int ToolbarMenu::getSelectedEntryId() const
-{
- ToolbarMenuEntry* pEntry = implGetEntry( mpImpl->mnSelectedEntry );
- return pEntry ? pEntry->mnEntryId : -1;
-}
-
-
-int ToolbarMenu::getHighlightedEntryId() const
-{
- ToolbarMenuEntry* pEntry = implGetEntry( mpImpl->mnHighlightedEntry );
- return pEntry ? pEntry->mnEntryId : -1;
-}
-
-
-void ToolbarMenu::checkEntry( int nEntryId, bool bChecked )
-{
- ToolbarMenuEntry* pEntry = implSearchEntry( nEntryId );
- if( pEntry && pEntry->mbChecked != bChecked )
- {
- pEntry->mbChecked = bChecked;
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::enableEntry( int nEntryId, bool bEnable )
-{
- ToolbarMenuEntry* pEntry = implSearchEntry( nEntryId );
- if( pEntry && pEntry->mbEnabled != bEnable )
- {
- pEntry->mbEnabled = bEnable;
- if( pEntry->mpControl )
- {
- pEntry->mpControl->Enable( bEnable );
-
- // hack for the valueset to make it paint itself anew
- pEntry->mpControl->Resize();
- }
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::setEntryText( int nEntryId, const OUString& rStr )
-{
- ToolbarMenuEntry* pEntry = implSearchEntry( nEntryId );
- if( pEntry && pEntry->maText != rStr )
- {
- pEntry->maText = rStr;
- mpImpl->maSize = implCalcSize();
- if( IsVisible() )
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::setEntryImage( int nEntryId, const Image& rImage )
-{
- ToolbarMenuEntry* pEntry = implSearchEntry( nEntryId );
- if( pEntry && pEntry->maImage != rImage )
- {
- pEntry->maImage = rImage;
- mpImpl->maSize = implCalcSize();
- if( IsVisible() )
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::initWindow()
-{
- const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-
- // FIXME RenderContext
- SetPointFont(*this, rStyleSettings.GetMenuFont());
- SetBackground(Wallpaper(GetControlBackground()));
- SetTextColor(rStyleSettings.GetMenuTextColor());
- SetTextFillColor();
- SetLineColor();
-
- mpImpl->maSize = implCalcSize();
-}
-
-
-static long ImplGetNativeCheckAndRadioSize(vcl::RenderContext const & rRenderContext, long& rCheckHeight, long& rRadioHeight, long &rMaxWidth )
-{
- rMaxWidth = rCheckHeight = rRadioHeight = 0;
-
- ImplControlValue aVal;
- tools::Rectangle aNativeBounds;
- tools::Rectangle aNativeContent;
- Point tmp( 0, 0 );
- tools::Rectangle aCtrlRegion( tmp, Size( 100, 15 ) );
- if (rRenderContext.IsNativeControlSupported(ControlType::MenuPopup, ControlPart::MenuItemCheckMark))
- {
- if (rRenderContext.GetNativeControlRegion(ControlType::MenuPopup, ControlPart::MenuItemCheckMark,
- aCtrlRegion, ControlState::ENABLED, aVal,
- aNativeBounds, aNativeContent)
- )
- {
- rCheckHeight = aNativeBounds.GetHeight();
- rMaxWidth = aNativeContent.GetWidth();
- }
- }
- if (rRenderContext.IsNativeControlSupported(ControlType::MenuPopup, ControlPart::MenuItemRadioMark))
- {
- if (rRenderContext.GetNativeControlRegion(ControlType::MenuPopup, ControlPart::MenuItemRadioMark,
- aCtrlRegion, ControlState::ENABLED, aVal,
- aNativeBounds, aNativeContent)
- )
- {
- rRadioHeight = aNativeBounds.GetHeight();
- rMaxWidth = std::max (rMaxWidth, aNativeContent.GetWidth());
- }
- }
- return std::max(rCheckHeight, rRadioHeight);
-}
-
-#define gfxExtra 7
-
-Size ToolbarMenu::implCalcSize()
-{
- const long nFontHeight = GetTextHeight();
- long nExtra = nFontHeight/4;
-
- Size aSz;
- Size aMaxImgSz;
- long nMaxTextWidth = 0;
- long nMinMenuItemHeight = nFontHeight+2;
-
- const StyleSettings& rSettings = GetSettings().GetStyleSettings();
- const bool bUseImages = rSettings.GetUseImagesInMenus();
-
- // get maximum image size
- if( bUseImages )
- {
- for( const auto& pEntry : mpImpl->maEntryVector )
- {
- if( pEntry && pEntry->mbHasImage )
- {
- Size aImgSz( pEntry->maImage.GetSizePixel() );
- nMinMenuItemHeight = std::max( nMinMenuItemHeight, aImgSz.Height() + 6 );
- aMaxImgSz.setWidth( std::max( aMaxImgSz.Width(), aImgSz.Width() ) );
- }
- }
- }
-
- mpImpl->mnCheckPos = nExtra;
- mpImpl->mnImagePos = nExtra;
- mpImpl->mnTextPos = mpImpl->mnImagePos + aMaxImgSz.Width();
-
- if ( aMaxImgSz.Width() )
- mpImpl->mnTextPos += std::max( nExtra, 7L );
-
- // set heights, calc maximum width
- for( const auto& pEntry : mpImpl->maEntryVector )
- {
- if( pEntry )
- {
- // Text:
- if( pEntry->mbHasText || pEntry->mbHasImage )
- {
- pEntry->maSize.setHeight( nMinMenuItemHeight );
-
- if( pEntry->mbHasText )
- {
- long nTextWidth = GetCtrlTextWidth( pEntry->maText ) + mpImpl->mnTextPos + nExtra;
- nMaxTextWidth = std::max( nTextWidth, nMaxTextWidth );
- }
- }
- // Control:
- else if( pEntry->mpControl )
- {
- Size aControlSize( pEntry->mpControl->GetOutputSizePixel() );
-
- nMaxTextWidth = std::max( aControlSize.Width(), nMaxTextWidth );
- pEntry->maSize.setHeight( aControlSize.Height() + 1 );
- }
-
- if( pEntry->HasCheck() && !pEntry->mbHasImage )
- {
- if (IsNativeControlSupported(ControlType::MenuPopup, (pEntry->mnBits & MenuItemBits::RADIOCHECK)
- ? ControlPart::MenuItemCheckMark
- : ControlPart::MenuItemRadioMark ) )
- {
- long nCheckHeight = 0, nRadioHeight = 0, nMaxCheckWidth = 0;
- ImplGetNativeCheckAndRadioSize(*this, nCheckHeight, nRadioHeight, nMaxCheckWidth);
-
- long nCtrlHeight = (pEntry->mnBits & MenuItemBits::RADIOCHECK) ? nCheckHeight : nRadioHeight;
- nMaxTextWidth += nCtrlHeight + gfxExtra;
- }
- else if( pEntry->mbChecked )
- {
- long nSymbolWidth = (nFontHeight*25)/40;
- if ( pEntry->mnBits & MenuItemBits::RADIOCHECK )
- nSymbolWidth = nFontHeight/2;
-
- nMaxTextWidth += nSymbolWidth;
- }
- }
- }
- }
-
- aSz.setWidth( nMaxTextWidth + (BORDER_X<<1) );
-
- // positionate controls
- int nY = BORDER_Y;
- for( const auto& pEntry : mpImpl->maEntryVector )
- {
- if (pEntry)
- {
- pEntry->maSize.setWidth( nMaxTextWidth );
-
- if( pEntry->mpControl )
- {
- Size aControlSize( pEntry->mpControl->GetOutputSizePixel() );
- Point aControlPos( (aSz.Width() - aControlSize.Width())>>1, nY);
-
- pEntry->mpControl->SetPosPixel( aControlPos );
-
- pEntry->maRect = tools::Rectangle( aControlPos, aControlSize );
- }
- else
- {
- pEntry->maRect = tools::Rectangle( Point( 0, nY ), pEntry->maSize );
- }
-
- nY += pEntry->maSize.Height();
- }
- else
- {
- nY += SEPARATOR_HEIGHT;
- }
- }
-
- aSz.AdjustHeight(nY + BORDER_Y );
-
- return aSz;
-}
-
-
-void ToolbarMenu::GetFocus()
-{
- if( mpImpl && mpImpl->mnHighlightedEntry == -1 )
- implChangeHighlightEntry( 0 );
-
- ToolbarPopup::GetFocus();
-}
-
-
-void ToolbarMenu::LoseFocus()
-{
- if( mpImpl && mpImpl->mnHighlightedEntry != -1 )
- implChangeHighlightEntry( -1 );
-
- ToolbarPopup::LoseFocus();
-}
-
-
-void ToolbarMenu::appendEntry( int nEntryId, const OUString& rStr, MenuItemBits nItemBits )
-{
- appendEntry( std::make_unique<ToolbarMenuEntry>( *this, nEntryId, rStr, nItemBits ) );
-}
-
-
-void ToolbarMenu::appendEntry( int nEntryId, const OUString& rStr, const Image& rImage )
-{
- appendEntry( std::make_unique<ToolbarMenuEntry>( *this, nEntryId, rImage, rStr, MenuItemBits::NONE ) );
-}
-
-
-void ToolbarMenu::appendEntry( int nEntryId, Control* pControl )
-{
- appendEntry( std::make_unique<ToolbarMenuEntry>( *this, nEntryId, pControl, MenuItemBits::NONE ) );
-}
-
-
-void ToolbarMenu::appendEntry( std::unique_ptr<ToolbarMenuEntry> pEntry )
-{
- mpImpl->maEntryVector.push_back(std::move(pEntry));
- mpImpl->maSize = implCalcSize();
- if (IsVisible())
- Invalidate();
-}
-
-
-void ToolbarMenu::appendSeparator()
-{
- appendEntry( nullptr );
-}
-
-
-/** creates an empty ValueSet that is initialized and can be inserted with appendEntry. */
-VclPtr<ValueSet> ToolbarMenu::createEmptyValueSetControl()
-{
- VclPtr<ValueSet> pSet = VclPtr<ValueSet>::Create( this, WB_TABSTOP | WB_MENUSTYLEVALUESET | WB_FLATVALUESET | WB_NOBORDER | WB_NO_DIRECTSELECT );
- pSet->EnableFullItemMode( false );
- pSet->SetColor( GetControlBackground() );
- pSet->SetHighlightHdl( LINK( this, ToolbarMenu, HighlightHdl ) );
- return pSet;
-}
-
-
-ToolbarMenuEntry* ToolbarMenu::implGetEntry( int nEntry ) const
-{
- return mpImpl->implGetEntry( nEntry );
-}
-
-
-ToolbarMenuEntry* ToolbarMenu::implSearchEntry( int nEntryId ) const
-{
- for( const auto& p : mpImpl->maEntryVector )
- {
- if( p && p->mnEntryId == nEntryId )
- {
- return p.get();
- }
- }
-
- return nullptr;
-}
-
-
-void ToolbarMenu::implHighlightEntry(vcl::RenderContext& rRenderContext, int nHighlightEntry)
-{
- Size aSz(GetOutputSizePixel());
- long nX = 0;
- long nY = 0;
-
- const int nEntryCount = mpImpl->maEntryVector.size();
-
- for (int nEntry = 0; nEntry < nEntryCount; nEntry++)
- {
- ToolbarMenuEntry* const pEntry = mpImpl->maEntryVector[nEntry].get();
- if (pEntry && (nEntry == nHighlightEntry))
- {
- // no highlights for controls only items
- if (pEntry->mpControl)
- {
- break;
- }
-
- bool bRestoreLineColor = false;
- Color oldLineColor;
- bool bDrawItemRect = true;
-
- tools::Rectangle aItemRect(Point(nX, nY), Size(aSz.Width(), pEntry->maSize.Height()));
- if (pEntry->mnBits & MenuItemBits::POPUPSELECT)
- {
- long nFontHeight = GetTextHeight();
- aItemRect.AdjustRight( -(nFontHeight + nFontHeight / 4) );
- }
-
- if (rRenderContext.IsNativeControlSupported(ControlType::MenuPopup, ControlPart::Entire))
- {
- Size aPxSize(GetOutputSizePixel());
- rRenderContext.Push(PushFlags::CLIPREGION);
- rRenderContext.IntersectClipRegion(tools::Rectangle(Point(nX, nY), Size(aSz.Width(), pEntry->maSize.Height())));
- tools::Rectangle aCtrlRect(Point(nX, 0), Size(aPxSize.Width() - nX, aPxSize.Height()));
- rRenderContext.DrawNativeControl(ControlType::MenuPopup, ControlPart::Entire, aCtrlRect,
- ControlState::ENABLED, ImplControlValue(), OUString());
- if (rRenderContext.IsNativeControlSupported(ControlType::MenuPopup, ControlPart::MenuItem))
- {
- bDrawItemRect = false;
- ControlState eState = ControlState::SELECTED | (pEntry->mbEnabled ? ControlState::ENABLED : ControlState::NONE);
- if (!rRenderContext.DrawNativeControl(ControlType::MenuPopup, ControlPart::MenuItem, aItemRect,
- eState, ImplControlValue(), OUString()))
- {
- bDrawItemRect = true;
- }
- }
- else
- {
- bDrawItemRect = true;
- }
- rRenderContext.Pop();
- }
- if (bDrawItemRect)
- {
- if (pEntry->mbEnabled)
- {
- rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuHighlightColor());
- }
- else
- {
- rRenderContext.SetFillColor();
- oldLineColor = rRenderContext.GetLineColor();
- rRenderContext.SetLineColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuHighlightColor());
- bRestoreLineColor = true;
- }
- rRenderContext.DrawRect(aItemRect);
- }
- implPaint(rRenderContext, pEntry, true/*bHighlight*/);
- if (bRestoreLineColor)
- rRenderContext.SetLineColor(oldLineColor);
- break;
- }
-
- nY += pEntry ? pEntry->maSize.Height() : SEPARATOR_HEIGHT;
- }
-}
-
-
-void ToolbarMenu::implSelectEntry( int nSelectedEntry )
-{
- mpImpl->mnSelectedEntry = nSelectedEntry;
-
- ToolbarMenuEntry* pEntry = nullptr;
- if( nSelectedEntry != -1 )
- pEntry = mpImpl->maEntryVector[ nSelectedEntry ].get();
-
- if( pEntry )
- mpImpl->maSelectHdl.Call( this );
-}
-
-
-void ToolbarMenu::MouseButtonDown( const MouseEvent& rMEvt )
-{
- implHighlightAtPosition(rMEvt);
- implSelectEntry(mpImpl->mnHighlightedEntry);
-}
-
-
-void ToolbarMenu::MouseButtonUp( const MouseEvent& )
-{
-}
-
-
-void ToolbarMenu::MouseMove( const MouseEvent& rMEvt )
-{
- if (!IsVisible())
- return;
-
- implHighlightAtPosition(rMEvt);
-}
-
-
-void ToolbarMenu::implHighlightAtPosition(const MouseEvent& rMEvt)
-{
- long nMouseY = rMEvt.GetPosPixel().Y();
- Size aOutSz = GetOutputSizePixel();
- if ( ( nMouseY >= 0 ) && ( nMouseY < aOutSz.Height() ) )
- {
- long nY = 0;
- bool bHighlighted = false;
-
- const int nEntryCount = mpImpl->maEntryVector.size();
- for( int nEntry = 0; nEntry < nEntryCount; nEntry++ )
- {
- ToolbarMenuEntry* pEntry = mpImpl->maEntryVector[nEntry].get();
- if( pEntry )
- {
- long nOldY = nY;
- nY += pEntry->maSize.Height();
-
- if( pEntry->mnEntryId != TITLE_ID )
- {
- if ( ( nOldY <= nMouseY ) && ( nY > nMouseY ) )
- {
- if( nEntry != mpImpl->mnHighlightedEntry )
- {
- implChangeHighlightEntry( nEntry );
- }
- bHighlighted = true;
- }
- }
- }
- else
- {
- nY += SEPARATOR_HEIGHT;
- }
- }
- if ( !bHighlighted )
- implChangeHighlightEntry( -1 );
- }
- else
- {
- implChangeHighlightEntry( -1 );
- }
-}
-
-
-void ToolbarMenu::implChangeHighlightEntry(int nEntry)
-{
- mpImpl->mnHighlightedEntry = nEntry;
- Invalidate();
-
- mpImpl->notifyHighlightedEntry();
-}
-
-
-static bool implCheckSubControlCursorMove( Control* pControl, bool bUp, int& nLastColumn )
-{
- ValueSet* pValueSet = dynamic_cast< ValueSet* >( pControl );
- if( pValueSet )
- {
- size_t nItemPos = pValueSet->GetItemPos( pValueSet->GetSelectedItemId() );
- if( nItemPos != VALUESET_ITEM_NOTFOUND )
- {
- const sal_uInt16 nColCount = pValueSet->GetColCount();
- const size_t nLine = nItemPos / nColCount;
-
- nLastColumn = nItemPos - (nLine * nColCount);
-
- if( bUp )
- {
- return nLine > 0;
- }
- else
- {
- const size_t nLineCount = (pValueSet->GetItemCount() + nColCount - 1) / nColCount;
- return (nLine+1) < nLineCount;
- }
- }
- }
-
- return false;
-}
-
-
-ToolbarMenuEntry* ToolbarMenu::implCursorUpDown( bool bUp, bool bHomeEnd )
-{
- int n = 0, nLoop = 0;
- if( !bHomeEnd )
- {
- n = mpImpl->mnHighlightedEntry;
- if( n == -1 )
- {
- if( bUp )
- n = 0;
- else
- n = mpImpl->maEntryVector.size()-1;
- }
- else
- {
- // if we have a currently selected entry and
- // cursor keys are used then check if this entry
- // has a control that can use those cursor keys
- ToolbarMenuEntry* pData = mpImpl->maEntryVector[n].get();
- if( pData && pData->mpControl && !pData->mbHasText )
- {
- if( implCheckSubControlCursorMove( pData->mpControl, bUp, mpImpl->mnLastColumn ) )
- return pData;
- }
- }
- nLoop = n;
- }
- else
- {
- // absolute positioning
- if( bUp )
- {
- n = mpImpl->maEntryVector.size();
- nLoop = n-1;
- }
- else
- {
- n = -1;
- nLoop = mpImpl->maEntryVector.size()-1;
- }
- }
-
- do
- {
- if( bUp )
- {
- if ( n )
- n--;
- else
- if( mpImpl->mnHighlightedEntry == -1 )
- n = mpImpl->maEntryVector.size()-1;
- else
- break;
- }
- else
- {
- if( n < (static_cast<int>(mpImpl->maEntryVector.size())-1) )
- n++;
- else
- if( mpImpl->mnHighlightedEntry == -1 )
- n = 0;
- else
- break;
- }
-
- ToolbarMenuEntry* pData = mpImpl->maEntryVector[n].get();
- if( pData && (pData->mnEntryId != TITLE_ID) )
- {
- implChangeHighlightEntry( n );
- return pData;
- }
- } while ( n != nLoop );
-
- return nullptr;
-}
-
-
-void ToolbarMenu_Impl::implHighlightControl( sal_uInt16 nCode, Control* pControl )
-{
- ValueSet* pValueSet = dynamic_cast< ValueSet* >( pControl );
- if( !pValueSet )
- return;
-
- const size_t nItemCount = pValueSet->GetItemCount();
- size_t nItemPos = VALUESET_ITEM_NOTFOUND;
- switch( nCode )
- {
- case KEY_UP:
- {
- const sal_uInt16 nColCount = pValueSet->GetColCount();
- const sal_uInt16 nLastLine = nItemCount / nColCount;
- nItemPos = std::min( static_cast<size_t>(((nLastLine-1) * nColCount) + mnLastColumn), nItemCount-1 );
- break;
- }
- case KEY_DOWN:
- nItemPos = std::min( static_cast<size_t>(mnLastColumn), nItemCount-1 );
- break;
- case KEY_END:
- nItemPos = nItemCount -1;
- break;
- case KEY_HOME:
- nItemPos = 0;
- break;
- }
- pValueSet->SelectItem( pValueSet->GetItemId( nItemPos ) );
- notifyHighlightedEntry();
-}
-
-
-void ToolbarMenu::KeyInput( const KeyEvent& rKEvent )
-{
- Control* pForwardControl = nullptr;
- sal_uInt16 nCode = rKEvent.GetKeyCode().GetCode();
- switch ( nCode )
- {
- case KEY_UP:
- case KEY_DOWN:
- {
- int nOldEntry = mpImpl->mnHighlightedEntry;
- ToolbarMenuEntry*p = implCursorUpDown( nCode == KEY_UP, false );
- if( p && p->mpControl )
- {
- if( nOldEntry != mpImpl->mnHighlightedEntry )
- {
- mpImpl->implHighlightControl( nCode, p->mpControl );
- }
- else
- {
- // in case we are in a system floating window, GrabFocus does not work :-/
- pForwardControl = p->mpControl;
- }
- }
- }
- break;
- case KEY_END:
- case KEY_HOME:
- {
- ToolbarMenuEntry* p = implCursorUpDown( nCode == KEY_END, true );
- if( p && p->mpControl )
- {
- mpImpl->implHighlightControl( nCode, p->mpControl );
- }
- }
- break;
- case KEY_F6:
- case KEY_ESCAPE:
- {
- // Ctrl-F6 acts like ESC here, the menu bar however will then put the focus in the document
- if( nCode == KEY_F6 && !rKEvent.GetKeyCode().IsMod1() )
- break;
-
- implSelectEntry( -1 );
- }
- break;
-
- case KEY_RETURN:
- {
- ToolbarMenuEntry* pEntry = implGetEntry( mpImpl->mnHighlightedEntry );
- if ( pEntry && pEntry->mbEnabled && (pEntry->mnEntryId != TITLE_ID) )
- {
- if( pEntry->mpControl )
- {
- pForwardControl = pEntry->mpControl;
- }
- else
- {
- implSelectEntry( mpImpl->mnHighlightedEntry );
- }
- }
- }
- break;
- default:
- {
- ToolbarMenuEntry* pEntry = implGetEntry( mpImpl->mnHighlightedEntry );
- if ( pEntry && pEntry->mbEnabled && pEntry->mpControl && !pEntry->mbHasText )
- {
- pForwardControl = pEntry->mpControl;
- }
- }
-
- }
- if( pForwardControl )
- pForwardControl->KeyInput( rKEvent );
-
-}
-
-
-static void ImplPaintCheckBackground(vcl::RenderContext& rRenderContext, vcl::Window const & rWindow, const tools::Rectangle& i_rRect, bool i_bHighlight )
-{
- bool bNativeOk = false;
- if (rRenderContext.IsNativeControlSupported(ControlType::Toolbar, ControlPart::Button))
- {
- ImplControlValue aControlValue;
- aControlValue.setTristateVal(ButtonValue::On);
-
- bNativeOk = rRenderContext.DrawNativeControl(ControlType::Toolbar, ControlPart::Button,
- i_rRect,
- ControlState::PRESSED | ControlState::ENABLED,
- aControlValue, OUString());
- }
-
- if (!bNativeOk)
- {
- const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
- Color aColor(i_bHighlight ? rSettings.GetMenuHighlightTextColor() : rSettings.GetHighlightColor());
- vcl::RenderTools::DrawSelectionBackground(rRenderContext, rWindow, i_rRect, 0, i_bHighlight, true, false, nullptr, 2, &aColor);
- }
-}
-
-void ToolbarMenu::implPaint(vcl::RenderContext& rRenderContext, ToolbarMenuEntry const * pThisOnly, bool bHighlighted)
-{
- long nFontHeight = GetTextHeight();
-
- long nCheckHeight = 0, nRadioHeight = 0, nMaxCheckWidth = 0;
- ImplGetNativeCheckAndRadioSize(rRenderContext, nCheckHeight, nRadioHeight, nMaxCheckWidth);
-
- DecorationView aDecoView(&rRenderContext);
- const StyleSettings& rSettings = rRenderContext.GetSettings().GetStyleSettings();
- const bool bUseImages = rSettings.GetUseImagesInMenus();
-
- int nOuterSpace = 0; // ImplGetSVData()->maNWFData.mnMenuFormatExtraBorder;
- Point aTopLeft(nOuterSpace, nOuterSpace), aTmpPos;
-
- Size aOutSz(GetOutputSizePixel());
- for (const auto& pEntry : mpImpl->maEntryVector)
- {
- Point aPos(aTopLeft);
-
- if ((pEntry == nullptr) && !pThisOnly)
- {
- // Separator
- aTmpPos.setY( aPos.Y() + ((SEPARATOR_HEIGHT - 2) / 2) );
- aTmpPos.setX( aPos.X() + 2 + nOuterSpace );
- rRenderContext.SetLineColor(rSettings.GetShadowColor());
- rRenderContext.DrawLine(aTmpPos, Point(aOutSz.Width() - 3 - 2 * nOuterSpace, aTmpPos.Y()));
- aTmpPos.AdjustY( 1 );
- rRenderContext.SetLineColor(rSettings.GetLightColor());
- rRenderContext.DrawLine(aTmpPos, Point( aOutSz.Width() - 3 - 2 * nOuterSpace, aTmpPos.Y()));
- rRenderContext.SetLineColor();
- }
- else if (!pThisOnly || (pEntry.get() == pThisOnly))
- {
- const bool bTitle = pEntry->mnEntryId == TITLE_ID;
-
- if (pThisOnly && bHighlighted)
- rRenderContext.SetTextColor(rSettings.GetMenuHighlightTextColor());
-
- if( aPos.Y() >= 0 )
- {
- long nTextOffsetY = (pEntry->maSize.Height() - nFontHeight) / 2;
-
- DrawTextFlags nTextStyle = DrawTextFlags::NONE;
- DrawSymbolFlags nSymbolStyle = DrawSymbolFlags::NONE;
- DrawImageFlags nImageStyle = DrawImageFlags::NONE;
-
- if (!pEntry->mbEnabled)
- {
- nTextStyle |= DrawTextFlags::Disable;
- nSymbolStyle |= DrawSymbolFlags::Disable;
- nImageStyle |= DrawImageFlags::Disable;
- }
-
- tools::Rectangle aOuterCheckRect(Point(aPos.X() + mpImpl->mnCheckPos, aPos.Y()),
- Size(pEntry->maSize.Height(), pEntry->maSize.Height()));
- aOuterCheckRect.AdjustLeft(1 );
- aOuterCheckRect.AdjustRight( -1 );
- aOuterCheckRect.AdjustTop(1 );
- aOuterCheckRect.AdjustBottom( -1 );
-
- if (bTitle)
- {
- // fill the background
- tools::Rectangle aRect(aTopLeft, Size(aOutSz.Width(), pEntry->maSize.Height()));
- rRenderContext.SetFillColor(rSettings.GetDialogColor());
- rRenderContext.SetLineColor();
- rRenderContext.DrawRect(aRect);
- rRenderContext.SetLineColor(rSettings.GetLightColor());
- rRenderContext.DrawLine(aRect.TopLeft(), aRect.TopRight());
- rRenderContext.SetLineColor(rSettings.GetShadowColor());
- rRenderContext.DrawLine(aRect.BottomLeft(), aRect.BottomRight());
- }
-
- // CheckMark
- if (pEntry->HasCheck())
- {
- // draw selection transparent marker if checked
- // onto that either a checkmark or the item image
- // will be painted
- // however do not do this if native checks will be painted since
- // the selection color too often does not fit the theme's check and/or radio
-
- if (!pEntry->mbHasImage)
- {
- if (rRenderContext.IsNativeControlSupported(ControlType::MenuPopup,
- (pEntry->mnBits & MenuItemBits::RADIOCHECK)
- ? ControlPart::MenuItemCheckMark
- : ControlPart::MenuItemRadioMark))
- {
- ControlPart nPart = ((pEntry->mnBits & MenuItemBits::RADIOCHECK)
- ? ControlPart::MenuItemRadioMark
- : ControlPart::MenuItemCheckMark);
-
- ControlState nState = ControlState::NONE;
-
- if (pEntry->mbChecked)
- nState |= ControlState::PRESSED;
-
- if (pEntry->mbEnabled)
- nState |= ControlState::ENABLED;
-
- if ( bHighlighted )
- nState |= ControlState::SELECTED;
-
- long nCtrlHeight = (pEntry->mnBits & MenuItemBits::RADIOCHECK) ? nCheckHeight : nRadioHeight;
- aTmpPos.setX( aOuterCheckRect.Left() + (aOuterCheckRect.GetWidth() - nCtrlHeight) / 2 );
- aTmpPos.setY( aOuterCheckRect.Top() + (aOuterCheckRect.GetHeight() - nCtrlHeight) / 2 );
-
- tools::Rectangle aCheckRect(aTmpPos, Size(nCtrlHeight, nCtrlHeight));
- rRenderContext.DrawNativeControl(ControlType::MenuPopup, nPart, aCheckRect,
- nState, ImplControlValue(), OUString());
- aPos.setX(aPos.getX() + nCtrlHeight + gfxExtra);
- }
- else if (pEntry->mbChecked) // by default do nothing for unchecked items
- {
- ImplPaintCheckBackground(rRenderContext, *this, aOuterCheckRect, pThisOnly && bHighlighted);
-
- SymbolType eSymbol;
- Size aSymbolSize;
- if (pEntry->mnBits & MenuItemBits::RADIOCHECK)
- {
- eSymbol = SymbolType::RADIOCHECKMARK;
- aSymbolSize = Size(nFontHeight / 2, nFontHeight / 2);
- }
- else
- {
- eSymbol = SymbolType::CHECKMARK;
- aSymbolSize = Size((nFontHeight * 25) / 40, nFontHeight / 2);
- }
- aTmpPos.setX( aOuterCheckRect.Left() + (aOuterCheckRect.GetWidth() - aSymbolSize.Width())/2 );
- aTmpPos.setY( aOuterCheckRect.Top() + (aOuterCheckRect.GetHeight() - aSymbolSize.Height())/2 );
- tools::Rectangle aRect( aTmpPos, aSymbolSize );
- aDecoView.DrawSymbol(aRect, eSymbol, GetTextColor(), nSymbolStyle);
- aPos.setX(aPos.getX() + aSymbolSize.getWidth( ) + gfxExtra);
- }
- }
- }
-
- // Image:
- if (pEntry->mbHasImage && bUseImages)
- {
- if (pEntry->mbChecked)
- ImplPaintCheckBackground(rRenderContext, *this, aOuterCheckRect, pThisOnly && bHighlighted);
- aTmpPos = aOuterCheckRect.TopLeft();
- aTmpPos.AdjustX((aOuterCheckRect.GetWidth()-pEntry->maImage.GetSizePixel().Width())/2 );
- aTmpPos.AdjustY((aOuterCheckRect.GetHeight()-pEntry->maImage.GetSizePixel().Height())/2 );
- rRenderContext.DrawImage( aTmpPos, pEntry->maImage, nImageStyle );
- }
-
- // Text:
- if (pEntry->mbHasText)
- {
- aTmpPos.setX( aPos.X() + (bTitle ? 4 : mpImpl->mnTextPos) );
- aTmpPos.setY( aPos.Y() );
- aTmpPos.AdjustY(nTextOffsetY );
- DrawTextFlags nStyle = nTextStyle|DrawTextFlags::Mnemonic;
-
- rRenderContext.DrawCtrlText(aTmpPos, pEntry->maText, 0, pEntry->maText.getLength(), nStyle);
- }
-
- if (pThisOnly && bHighlighted)
- {
- // This restores the normal menu or menu bar text
- // color for when it is no longer highlighted.
- rRenderContext.SetTextColor(rSettings.GetMenuTextColor());
- }
- }
- }
-
- aTopLeft.AdjustY(pEntry ? pEntry->maSize.Height() : SEPARATOR_HEIGHT );
- }
-}
-
-void ToolbarMenu::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
-{
- rRenderContext.SetFillColor(rRenderContext.GetSettings().GetStyleSettings().GetMenuColor());
-
- implPaint(rRenderContext);
-
- if (mpImpl->mnHighlightedEntry != -1)
- implHighlightEntry(rRenderContext, mpImpl->mnHighlightedEntry);
-}
-
-
-void ToolbarMenu::StateChanged( StateChangedType nType )
-{
- ToolbarPopup::StateChanged( nType );
-
- if ( ( nType == StateChangedType::ControlForeground ) || ( nType == StateChangedType::ControlBackground ) )
- {
- initWindow();
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::DataChanged( const DataChangedEvent& rDCEvt )
-{
- ToolbarPopup::DataChanged( rDCEvt );
-
- if ( (rDCEvt.GetType() == DataChangedEventType::FONTS) ||
- (rDCEvt.GetType() == DataChangedEventType::FONTSUBSTITUTION) ||
- ((rDCEvt.GetType() == DataChangedEventType::SETTINGS) &&
- (rDCEvt.GetFlags() & AllSettingsFlags::STYLE)) )
- {
- initWindow();
- Invalidate();
- }
-}
-
-
-void ToolbarMenu::Command( const CommandEvent& rCEvt )
-{
- if ( rCEvt.GetCommand() == CommandEventId::Wheel )
- {
- const CommandWheelData* pData = rCEvt.GetWheelData();
- if( !pData->GetModifier() && ( pData->GetMode() == CommandWheelMode::SCROLL ) )
- {
- implCursorUpDown( pData->GetDelta() > 0, false );
- }
- }
-}
-
-
-Reference< css::accessibility::XAccessible > ToolbarMenu::CreateAccessible()
-{
- mpImpl->setAccessible( new ToolbarMenuAcc( *mpImpl ) );
- return Reference< XAccessible >( mpImpl->mxAccessible.get() );
-}
-
-
class ToolbarPopupStatusListener : public svt::FrameStatusListener
{
public:
@@ -1504,17 +176,6 @@ void ToolbarPopup::EndPopupMode()
}
-const Size& ToolbarMenu::getMenuSize() const
-{
- return mpImpl->maSize;
-}
-
-
-void ToolbarMenu::SetSelectHdl( const Link<ToolbarMenu*,void>& rLink )
-{
- mpImpl->maSelectHdl = rLink;
-}
-
}
WeldToolbarPopup::WeldToolbarPopup(const css::uno::Reference<css::frame::XFrame>& rFrame,
diff --git a/svtools/source/control/toolbarmenuacc.cxx b/svtools/source/control/toolbarmenuacc.cxx
deleted file mode 100644
index b3d97a9ecbb4..000000000000
--- a/svtools/source/control/toolbarmenuacc.cxx
+++ /dev/null
@@ -1,833 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <com/sun/star/accessibility/AccessibleEventId.hpp>
-#include <com/sun/star/accessibility/AccessibleRole.hpp>
-#include <com/sun/star/accessibility/AccessibleStateType.hpp>
-#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
-
-#include <unotools/accessiblestatesethelper.hxx>
-
-#include <vcl/svapp.hxx>
-#include <vcl/settings.hxx>
-#include <tools/debug.hxx>
-
-#include <svtools/toolbarmenu.hxx>
-#include <svtools/framestatuslistener.hxx>
-
-#include "toolbarmenuimp.hxx"
-
-
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::accessibility;
-
-namespace svtools {
-
-
-ToolbarMenuAcc::ToolbarMenuAcc( ToolbarMenu_Impl& rParent )
-: ToolbarMenuAccComponentBase(m_aMutex)
-, mpParent( &rParent )
-, mbIsFocused(false)
-{
- mpParent->mrMenu.AddEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
-}
-
-
-ToolbarMenuAcc::~ToolbarMenuAcc()
-{
- if( mpParent )
- mpParent->mrMenu.RemoveEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
-}
-
-
-IMPL_LINK( ToolbarMenuAcc, WindowEventListener, VclWindowEvent&, rEvent, void )
-{
- /* Ignore VclEventId::WindowEndPopupMode, because the UNO accessibility wrapper
- * might have been destroyed by the previous VCLEventListener (if no AT tool
- * is running), e.g. sub-toolbars in impress.
- */
- if ( !mpParent || (rEvent.GetId() == VclEventId::WindowEndPopupMode) )
- return;
- DBG_ASSERT( rEvent.GetWindow(), "Window???" );
- if( rEvent.GetWindow()->IsAccessibilityEventsSuppressed() && ( rEvent.GetId() != VclEventId::ObjectDying ) )
- return;
-
- switch ( rEvent.GetId() )
- {
- case VclEventId::ObjectDying:
- {
- mpParent->mrMenu.RemoveEventListener( LINK( this, ToolbarMenuAcc, WindowEventListener ) );
- mpParent = nullptr;
- }
- break;
-
- case VclEventId::WindowGetFocus:
- {
- if( !mbIsFocused )
- {
- mpParent->notifyHighlightedEntry();
- mbIsFocused = true;
- }
- }
- break;
- case VclEventId::WindowLoseFocus:
- {
- if( mbIsFocused )
- {
- mbIsFocused = false;
- }
- }
- break;
- default:
- {
- }
- break;
- }
-}
-
-
-void ToolbarMenuAcc::FireAccessibleEvent( short nEventId, const Any& rOldValue, const Any& rNewValue )
-{
- if( !nEventId )
- return;
-
- EventListenerVector aTmpListeners( mxEventListeners );
- AccessibleEventObject aEvtObject;
-
- aEvtObject.EventId = nEventId;
- aEvtObject.Source = static_cast<XWeak*>(this);
- aEvtObject.NewValue = rNewValue;
- aEvtObject.OldValue = rOldValue;
-
- for (auto const& tmpListener : aTmpListeners)
- {
- try
- {
- tmpListener->notifyEvent( aEvtObject );
- }
- catch( Exception& )
- {
- }
- }
-}
-
-
-Reference< XAccessibleContext > SAL_CALL ToolbarMenuAcc::getAccessibleContext()
-{
- ThrowIfDisposed();
- return this;
-}
-
-
-sal_Int32 SAL_CALL ToolbarMenuAcc::getAccessibleChildCount()
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- return mpParent->getAccessibleChildCount();
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleChild( sal_Int32 i )
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- return mpParent->getAccessibleChild(i);
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleParent()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
-
- Reference< XAccessible > xRet;
-
- vcl::Window* pParent = mpParent->mrMenu.GetParent();
- if( pParent )
- xRet = pParent->GetAccessible();
-
- return xRet;
-}
-
-
-sal_Int32 SAL_CALL ToolbarMenuAcc::getAccessibleIndexInParent()
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- vcl::Window* pParent = mpParent->mrMenu.GetParent();
- if( pParent )
- {
- for( sal_uInt16 i = 0, nCount = pParent->GetChildCount(); i < nCount ; i++ )
- {
- if( pParent->GetChild( i ) == &mpParent->mrMenu )
- return i;
- }
- }
-
- return 0;
-}
-
-
-sal_Int16 SAL_CALL ToolbarMenuAcc::getAccessibleRole()
-{
- ThrowIfDisposed();
- return AccessibleRole::LIST;
-}
-
-
-OUString SAL_CALL ToolbarMenuAcc::getAccessibleDescription()
-{
- ThrowIfDisposed();
- return "ToolbarMenu";
-}
-
-
-OUString SAL_CALL ToolbarMenuAcc::getAccessibleName()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- OUString aRet;
-
- if( mpParent )
- aRet = mpParent->mrMenu.GetAccessibleName();
-
- if( aRet.isEmpty() )
- {
- vcl::Window* pLabel = mpParent->mrMenu.GetAccessibleRelationLabeledBy();
- if( pLabel && pLabel != &mpParent->mrMenu )
- aRet = OutputDevice::GetNonMnemonicString( pLabel->GetText() );
- }
-
- return aRet;
-}
-
-
-Reference< XAccessibleRelationSet > SAL_CALL ToolbarMenuAcc::getAccessibleRelationSet()
-{
- ThrowIfDisposed();
- return Reference< XAccessibleRelationSet >();
-}
-
-
-Reference< XAccessibleStateSet > SAL_CALL ToolbarMenuAcc::getAccessibleStateSet()
-{
- ThrowIfDisposed();
- ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper();
-
- // Set some states.
- pStateSet->AddState (AccessibleStateType::ENABLED);
- pStateSet->AddState (AccessibleStateType::SENSITIVE);
- pStateSet->AddState (AccessibleStateType::SHOWING);
- pStateSet->AddState (AccessibleStateType::VISIBLE);
- pStateSet->AddState (AccessibleStateType::MANAGES_DESCENDANTS);
- pStateSet->AddState (AccessibleStateType::FOCUSABLE);
- if (mbIsFocused)
- pStateSet->AddState (AccessibleStateType::FOCUSED);
-
- return pStateSet;
-}
-
-
-Locale SAL_CALL ToolbarMenuAcc::getLocale()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- Reference< XAccessible > xParent( getAccessibleParent() );
- Locale aRet( "", "", "" );
-
- if( xParent.is() )
- {
- Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
-
- if( xParentContext.is() )
- aRet = xParentContext->getLocale ();
- }
-
- return aRet;
-}
-
-
-void SAL_CALL ToolbarMenuAcc::addAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener )
-{
- ThrowIfDisposed();
- ::osl::MutexGuard aGuard(m_aMutex);
-
- if( !rxListener.is() )
- return;
-
- for (auto const& eventListener : mxEventListeners)
- {
- if( eventListener == rxListener )
- return;
- }
-
- mxEventListeners.push_back( rxListener );
-}
-
-
-void SAL_CALL ToolbarMenuAcc::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener )
-{
- ThrowIfDisposed();
- ::osl::MutexGuard aGuard(m_aMutex);
-
- if( rxListener.is() )
- {
- EventListenerVector::iterator aIter = std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
- if (aIter != mxEventListeners.end())
- mxEventListeners.erase(aIter);
- }
-}
-
-
-sal_Bool SAL_CALL ToolbarMenuAcc::containsPoint( const awt::Point& aPoint )
-{
- ThrowIfDisposed();
- const awt::Rectangle aRect( getBounds() );
- const Point aSize( aRect.Width, aRect.Height );
- const Point aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
-
- return tools::Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getAccessibleAtPoint( const awt::Point& aPoint )
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- Reference< XAccessible > xRet;
-
- const Point aVclPoint( aPoint.X, aPoint.Y );
-
- const int nEntryCount = mpParent->maEntryVector.size();
- for( int nEntry = 0; (nEntry < nEntryCount) && !xRet.is(); nEntry++ )
- {
- ToolbarMenuEntry* pEntry = mpParent->maEntryVector[nEntry].get();
- if( pEntry && pEntry->maRect.IsInside( aVclPoint ) )
- {
- if( pEntry->mpControl )
- {
- awt::Point aChildPoint( aPoint.X - pEntry->maRect.Left(), aPoint.Y - pEntry->maRect.Top() );
- Reference< XAccessibleComponent > xComp( pEntry->GetAccessible(), UNO_QUERY_THROW );
- xRet = xComp->getAccessibleAtPoint(aChildPoint);
- }
- else
- {
- xRet.set( pEntry->GetAccessible(), UNO_QUERY );
- }
- }
- }
- return xRet;
-}
-
-
-awt::Rectangle SAL_CALL ToolbarMenuAcc::getBounds()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Point aOutPos( mpParent->mrMenu.GetPosPixel() );
- const Size aOutSize( mpParent->mrMenu.GetOutputSizePixel() );
- awt::Rectangle aRet;
-
- aRet.X = aOutPos.X();
- aRet.Y = aOutPos.Y();
- aRet.Width = aOutSize.Width();
- aRet.Height = aOutSize.Height();
-
- return aRet;
-}
-
-
-awt::Point SAL_CALL ToolbarMenuAcc::getLocation()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Point aOutPos( mpParent->mrMenu.GetPosPixel() );
- return awt::Point( aOutPos.X(), aOutPos.Y() );
-}
-
-
-awt::Point SAL_CALL ToolbarMenuAcc::getLocationOnScreen()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Point aScreenPos( mpParent->mrMenu.OutputToAbsoluteScreenPixel( Point() ) );
- return awt::Point( aScreenPos.X(), aScreenPos.Y() );
-}
-
-
-awt::Size SAL_CALL ToolbarMenuAcc::getSize()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Size aOutSize( mpParent->mrMenu.GetOutputSizePixel() );
- return awt::Size( aOutSize.Width(), aOutSize.Height() );
-}
-
-void SAL_CALL ToolbarMenuAcc::grabFocus()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- mpParent->mrMenu.GrabFocus();
-}
-
-sal_Int32 SAL_CALL ToolbarMenuAcc::getForeground()
-{
- ThrowIfDisposed();
- Color nColor = Application::GetSettings().GetStyleSettings().GetMenuTextColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-sal_Int32 SAL_CALL ToolbarMenuAcc::getBackground()
-{
- ThrowIfDisposed();
- Color nColor = Application::GetSettings().GetStyleSettings().GetMenuColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-void SAL_CALL ToolbarMenuAcc::selectAccessibleChild( sal_Int32 nChildIndex )
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- mpParent->selectAccessibleChild( nChildIndex );
-}
-
-sal_Bool SAL_CALL ToolbarMenuAcc::isAccessibleChildSelected( sal_Int32 nChildIndex )
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
- return mpParent->isAccessibleChildSelected( nChildIndex );
-}
-
-
-void SAL_CALL ToolbarMenuAcc::clearAccessibleSelection()
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
- mpParent->clearAccessibleSelection();
-}
-
-
-void SAL_CALL ToolbarMenuAcc::selectAllAccessibleChildren()
-{
- ThrowIfDisposed();
- // unsupported due to single selection only
-}
-
-
-sal_Int32 SAL_CALL ToolbarMenuAcc::getSelectedAccessibleChildCount()
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- return mpParent->mnHighlightedEntry != -1 ? 1 : 0;
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuAcc::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
-
- if( (mpParent->mnHighlightedEntry != -1) && (nSelectedChildIndex == 0) )
- {
- ToolbarMenuEntry* pEntry = mpParent->maEntryVector[ mpParent->mnHighlightedEntry ].get();
- if( pEntry )
- {
- if( pEntry->mpControl )
- {
- Reference< XAccessibleSelection > xSel( pEntry->GetAccessible(), UNO_QUERY_THROW );
- return xSel->getSelectedAccessibleChild(0);
- }
- else
- return Reference< XAccessible >( pEntry->GetAccessible(), UNO_QUERY );
- }
- }
-
- throw IndexOutOfBoundsException();
-}
-
-
-void SAL_CALL ToolbarMenuAcc::deselectAccessibleChild( sal_Int32 nChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- // Because of the single selection we can reset the whole selection when
- // the specified child is currently selected.
- if (isAccessibleChildSelected(nChildIndex))
- mpParent->clearAccessibleSelection();
-}
-
-
-void SAL_CALL ToolbarMenuAcc::disposing()
-{
- EventListenerVector aListenerListCopy;
-
- {
- // Make a copy of the list and clear the original.
- const SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard (m_aMutex);
- aListenerListCopy = mxEventListeners;
- mxEventListeners.clear();
-
- // Reset the pointer to the parent. It has to be the one who has
- // disposed us because he is dying.
- mpParent = nullptr;
- }
-
- // Inform all listeners that this objects is disposing.
- EventObject aEvent (static_cast<XAccessible*>(this));
- for (auto const& listenerCopy : aListenerListCopy)
- {
- try
- {
- listenerCopy->disposing (aEvent);
- }
- catch( Exception& )
- {
- // Ignore exceptions.
- }
-
- }
-}
-
-void ToolbarMenuAcc::ThrowIfDisposed()
-{
- if(rBHelper.bDisposed || rBHelper.bInDispose || !mpParent)
- {
- throw DisposedException ("object has been already disposed", static_cast<XWeak*>(this));
- }
-}
-
-
-ToolbarMenuEntryAcc::ToolbarMenuEntryAcc( ToolbarMenuEntry* pParent )
-: ToolbarMenuEntryAccBase( m_aMutex )
-, mpParent( pParent )
-{
-}
-
-
-ToolbarMenuEntryAcc::~ToolbarMenuEntryAcc()
-{
-}
-
-
-void SAL_CALL ToolbarMenuEntryAcc::disposing()
-{
- EventListenerVector aListenerListCopy;
-
- {
- // Make a copy of the list and clear the original.
- const SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard (m_aMutex);
- aListenerListCopy = mxEventListeners;
- mxEventListeners.clear();
-
- // Reset the pointer to the parent. It has to be the one who has
- // disposed us because he is dying.
- mpParent = nullptr;
- }
-
- // Inform all listeners that this objects is disposing.
- EventObject aEvent (static_cast<XAccessible*>(this));
- for (auto const& listenerCopy : aListenerListCopy)
- {
- try
- {
- listenerCopy->disposing (aEvent);
- }
- catch( Exception& )
- {
- // Ignore exceptions.
- }
- }
-}
-
-
-Reference< XAccessibleContext > SAL_CALL ToolbarMenuEntryAcc::getAccessibleContext()
-{
- return this;
-}
-
-
-sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getAccessibleChildCount()
-{
- return 0;
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleChild( sal_Int32 )
-{
- throw IndexOutOfBoundsException();
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleParent()
-{
- const SolarMutexGuard aSolarGuard;
- Reference< XAccessible > xRet;
-
- if( mpParent )
- xRet = mpParent->mrMenu.GetAccessible();
-
- return xRet;
-}
-
-
-sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getAccessibleIndexInParent()
-{
- const SolarMutexGuard aSolarGuard;
- // The index defaults to -1 to indicate the child does not belong to its
- // parent.
- sal_Int32 nIndexInParent = -1;
-
- if( mpParent )
- {
- Reference< XAccessibleContext > xParent( mpParent->mrMenu.GetAccessible(), UNO_QUERY );
-
- if( xParent.is() )
- {
- Reference< XAccessible > xThis( this );
-
- const sal_Int32 nCount = xParent->getAccessibleChildCount();
- for( sal_Int32 nIndex = 0; nIndex < nCount; nIndex++ )
- {
- if( xParent->getAccessibleChild(nIndex) == xThis )
- {
- nIndexInParent = nIndex;
- break;
- }
- }
- }
- }
-
- return nIndexInParent;
-}
-
-
-sal_Int16 SAL_CALL ToolbarMenuEntryAcc::getAccessibleRole()
-{
- return AccessibleRole::LIST_ITEM;
-}
-
-
-OUString SAL_CALL ToolbarMenuEntryAcc::getAccessibleDescription()
-{
- return OUString();
-}
-
-
-OUString SAL_CALL ToolbarMenuEntryAcc::getAccessibleName()
-{
- const SolarMutexGuard aSolarGuard;
- OUString aRet;
-
- if( mpParent )
- {
- aRet = mpParent->maText;
-
- if( aRet.isEmpty() )
- {
- aRet = "Item " +
- OUString::number( mpParent->mnEntryId );
- }
- }
-
- return aRet;
-}
-
-
-Reference< XAccessibleRelationSet > SAL_CALL ToolbarMenuEntryAcc::getAccessibleRelationSet()
-{
- return Reference< XAccessibleRelationSet >();
-}
-
-
-Reference< XAccessibleStateSet > SAL_CALL ToolbarMenuEntryAcc::getAccessibleStateSet()
-{
- const SolarMutexGuard aSolarGuard;
- ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper;
-
- if( mpParent )
- {
- pStateSet->AddState (AccessibleStateType::ENABLED);
- pStateSet->AddState (AccessibleStateType::SENSITIVE);
- pStateSet->AddState (AccessibleStateType::SHOWING);
- pStateSet->AddState (AccessibleStateType::VISIBLE);
- pStateSet->AddState (AccessibleStateType::TRANSIENT);
- if( mpParent->mnEntryId != TITLE_ID )
- {
- pStateSet->AddState( AccessibleStateType::SELECTABLE );
-
- // SELECTED
- if( mpParent->mrMenu.getHighlightedEntryId() == mpParent->mnEntryId )
- pStateSet->AddState( AccessibleStateType::SELECTED );
- }
- }
-
- return pStateSet;
-}
-
-
-Locale SAL_CALL ToolbarMenuEntryAcc::getLocale()
-{
- Locale aRet( "", "", "" );
-
- Reference< XAccessible > xParent( getAccessibleParent() );
- if( xParent.is() )
- {
- Reference< XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
-
- if( xParentContext.is() )
- aRet = xParentContext->getLocale();
- }
-
- return aRet;
-}
-
-
-void SAL_CALL ToolbarMenuEntryAcc::addAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener )
-{
- const ::osl::MutexGuard aGuard( maMutex );
-
- if( rxListener.is() )
- {
- for (auto const& eventListener : mxEventListeners)
- {
- if (eventListener == rxListener)
- return;
- }
- // listener not found so add it
- mxEventListeners.push_back( rxListener );
- }
-}
-
-
-void SAL_CALL ToolbarMenuEntryAcc::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& rxListener )
-{
- const ::osl::MutexGuard aGuard( maMutex );
-
- if( rxListener.is() )
- {
- EventListenerVector::iterator aIter = std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
- if (aIter != mxEventListeners.end())
- mxEventListeners.erase(aIter);
- }
-}
-
-
-sal_Bool SAL_CALL ToolbarMenuEntryAcc::containsPoint( const awt::Point& aPoint )
-{
- const awt::Rectangle aRect( getBounds() );
- const Point aSize( aRect.Width, aRect.Height );
- const Point aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
-
- return tools::Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
-}
-
-
-Reference< XAccessible > SAL_CALL ToolbarMenuEntryAcc::getAccessibleAtPoint( const awt::Point& )
-{
- Reference< XAccessible > xRet;
- return xRet;
-}
-
-
-awt::Rectangle SAL_CALL ToolbarMenuEntryAcc::getBounds()
-{
- const SolarMutexGuard aSolarGuard;
- awt::Rectangle aRet;
-
- if( mpParent )
- {
- tools::Rectangle aRect( mpParent->maRect );
- tools::Rectangle aParentRect( Point(), mpParent->mrMenu.GetOutputSizePixel() );
-
- aRect.Intersection( aParentRect );
-
- aRet.X = aRect.Left();
- aRet.Y = aRect.Top();
- aRet.Width = aRect.GetWidth();
- aRet.Height = aRect.GetHeight();
- }
-
- return aRet;
-}
-
-
-awt::Point SAL_CALL ToolbarMenuEntryAcc::getLocation()
-{
- const awt::Rectangle aRect( getBounds() );
- return awt::Point( aRect.X, aRect.Y );
-}
-
-
-awt::Point SAL_CALL ToolbarMenuEntryAcc::getLocationOnScreen()
-{
- const SolarMutexGuard aSolarGuard;
- awt::Point aRet;
-
- if( mpParent )
- {
- const Point aScreenPos( mpParent->mrMenu.OutputToAbsoluteScreenPixel( mpParent->maRect.TopLeft() ) );
-
- aRet.X = aScreenPos.X();
- aRet.Y = aScreenPos.Y();
- }
-
- return aRet;
-}
-
-
-awt::Size SAL_CALL ToolbarMenuEntryAcc::getSize()
-{
- const awt::Rectangle aRect( getBounds() );
- awt::Size aRet;
-
- aRet.Width = aRect.Width;
- aRet.Height = aRect.Height;
-
- return aRet;
-}
-
-void SAL_CALL ToolbarMenuEntryAcc::grabFocus()
-{
- // nothing to do
-}
-
-sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getForeground( )
-{
- return static_cast<sal_Int32>(Application::GetSettings().GetStyleSettings().GetMenuTextColor());
-}
-
-sal_Int32 SAL_CALL ToolbarMenuEntryAcc::getBackground( )
-{
- return static_cast<sal_Int32>(Application::GetSettings().GetStyleSettings().GetMenuColor());
-}
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/control/toolbarmenuimp.hxx b/svtools/source/control/toolbarmenuimp.hxx
deleted file mode 100644
index 7e3d4d0fddc5..000000000000
--- a/svtools/source/control/toolbarmenuimp.hxx
+++ /dev/null
@@ -1,292 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#pragma once
-
-#include <osl/mutex.hxx>
-#include <vcl/ctrl.hxx>
-#include <vcl/image.hxx>
-
-#include <cppuhelper/compbase.hxx>
-#include <cppuhelper/basemutex.hxx>
-
-#include <com/sun/star/accessibility/XAccessible.hpp>
-#include <com/sun/star/accessibility/XAccessibleContext.hpp>
-#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
-#include <com/sun/star/accessibility/XAccessibleSelection.hpp>
-#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
-
-#include <rtl/ref.hxx>
-
-#include <memory>
-#include <vector>
-
-namespace svtools {
-
-struct ToolbarMenu_Impl;
-class ToolbarMenu;
-class ToolbarMenuEntry;
-
-typedef ::std::vector< css::uno::Reference< css::accessibility::XAccessibleEventListener > > EventListenerVector;
-typedef std::vector< std::unique_ptr< ToolbarMenuEntry > > ToolbarMenuEntryVector;
-
-const int SEPARATOR_HEIGHT = 4;
-const int TITLE_ID = -1;
-const int BORDER_X = 0;
-const int BORDER_Y = 0;
-
-
-class ToolbarMenuEntry
-{
-public:
- ToolbarMenu& mrMenu;
-
- int mnEntryId;
- MenuItemBits mnBits;
- Size maSize;
-
- bool mbHasText;
- bool mbHasImage;
- bool mbChecked;
- bool mbEnabled;
-
- OUString maText;
- Image maImage;
- VclPtr<Control> mpControl;
- tools::Rectangle maRect;
-
- css::uno::Reference< css::accessibility::XAccessibleContext > mxAccContext;
-
-public:
- ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, const OUString& rText, MenuItemBits nBits );
- ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, const Image& rImage, const OUString& rText, MenuItemBits nBits );
- ToolbarMenuEntry( ToolbarMenu& rMenu, int nEntryId, Control* pControl, MenuItemBits nBits );
- ~ToolbarMenuEntry();
-
- void init( int nEntryId, MenuItemBits nBits );
-
- const css::uno::Reference< css::accessibility::XAccessibleContext >& GetAccessible();
-
- /// @throws css::uno::RuntimeException
- sal_Int32 getAccessibleChildCount();
- /// @throws css::lang::IndexOutOfBoundsException
- /// @throws css::uno::RuntimeException
- css::uno::Reference< css::accessibility::XAccessible > getAccessibleChild( sal_Int32 index );
-
- bool HasCheck() const
- {
- return mbChecked || ( mnBits & ( MenuItemBits::RADIOCHECK | MenuItemBits::CHECKABLE | MenuItemBits::AUTOCHECK ) );
- }
-};
-
-
-typedef ::cppu::WeakComponentImplHelper<
- css::accessibility::XAccessible,
- css::accessibility::XAccessibleEventBroadcaster,
- css::accessibility::XAccessibleContext,
- css::accessibility::XAccessibleComponent,
- css::accessibility::XAccessibleSelection >
- ToolbarMenuAccComponentBase;
-
-class ToolbarMenuAcc :
- public ::cppu::BaseMutex,
- public ToolbarMenuAccComponentBase
-{
-public:
-
- explicit ToolbarMenuAcc( ToolbarMenu_Impl& rParent );
- virtual ~ToolbarMenuAcc() override;
-
- void FireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue );
- bool HasAccessibleListeners() const { return( mxEventListeners.size() > 0 ); }
-
-public:
-
- // XAccessible
- virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
-
- // XAccessibleEventBroadcaster
- virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
- virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
-
- // XAccessibleContext
- virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override;
- virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override;
- virtual sal_Int16 SAL_CALL getAccessibleRole( ) override;
- virtual OUString SAL_CALL getAccessibleDescription( ) override;
- virtual OUString SAL_CALL getAccessibleName( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override;
- virtual css::lang::Locale SAL_CALL getLocale( ) override;
-
- // XAccessibleComponent
- virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
- virtual css::awt::Rectangle SAL_CALL getBounds( ) override;
- virtual css::awt::Point SAL_CALL getLocation( ) override;
- virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override;
- virtual css::awt::Size SAL_CALL getSize( ) override;
- virtual void SAL_CALL grabFocus( ) override;
- virtual sal_Int32 SAL_CALL getForeground( ) override;
- virtual sal_Int32 SAL_CALL getBackground( ) override;
-
- // XAccessibleSelection
- virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) override;
- virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) override;
- virtual void SAL_CALL clearAccessibleSelection( ) override;
- virtual void SAL_CALL selectAllAccessibleChildren( ) override;
- virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
- virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
-
- DECL_LINK( WindowEventListener, VclWindowEvent&, void );
-
-private:
- EventListenerVector mxEventListeners;
- ToolbarMenu_Impl* mpParent;
- /// The current FOCUSED state.
- bool mbIsFocused;
-
- /** Tell all listeners that the object is dying. This callback is
- usually called from the WeakComponentImplHelper class.
- */
- virtual void SAL_CALL disposing() override;
-
- /** Check whether or not the object has been disposed (or is in the
- state of being disposed). If that is the case then
- DisposedException is thrown to inform the (indirect) caller of the
- foul deed.
-
- @throws css::lang::DisposedException
- */
- void ThrowIfDisposed();
-};
-
-
-typedef ::cppu::WeakComponentImplHelper< css::accessibility::XAccessible,
- css::accessibility::XAccessibleEventBroadcaster,
- css::accessibility::XAccessibleContext,
- css::accessibility::XAccessibleComponent > ToolbarMenuEntryAccBase;
-
-class ToolbarMenuEntryAcc : public ::cppu::BaseMutex,
- public ToolbarMenuEntryAccBase
-{
-public:
- explicit ToolbarMenuEntryAcc( ToolbarMenuEntry* pParent );
- virtual ~ToolbarMenuEntryAcc() override;
-
- // XAccessible
- virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
-
- // XAccessibleEventBroadcaster
- virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
- virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
-
- // XAccessibleContext
- virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override;
- virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override;
- virtual sal_Int16 SAL_CALL getAccessibleRole( ) override;
- virtual OUString SAL_CALL getAccessibleDescription( ) override;
- virtual OUString SAL_CALL getAccessibleName( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override;
- virtual css::lang::Locale SAL_CALL getLocale( ) override;
-
- // XAccessibleComponent
- virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
- virtual css::awt::Rectangle SAL_CALL getBounds( ) override;
- virtual css::awt::Point SAL_CALL getLocation( ) override;
- virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override;
- virtual css::awt::Size SAL_CALL getSize( ) override;
- virtual void SAL_CALL grabFocus( ) override;
- virtual sal_Int32 SAL_CALL getForeground( ) override;
- virtual sal_Int32 SAL_CALL getBackground( ) override;
-
-private:
- EventListenerVector mxEventListeners;
- ::osl::Mutex maMutex;
- ToolbarMenuEntry* mpParent;
-
- /** Tell all listeners that the object is dying. This callback is
- usually called from the WeakComponentImplHelper class.
- */
- virtual void SAL_CALL disposing() override;
-};
-
-
-struct ToolbarMenu_Impl
-{
- ToolbarMenu& mrMenu;
-
- rtl::Reference< ToolbarMenuAcc > mxAccessible;
- css::uno::Reference< css::accessibility::XAccessible > mxOldSelection;
-
- ToolbarMenuEntryVector maEntryVector;
-
- int mnCheckPos;
- int mnImagePos;
- int mnTextPos;
-
- int mnHighlightedEntry;
- int mnSelectedEntry;
- int mnLastColumn;
-
- Size maSize;
-
- Link<ToolbarMenu*,void> maSelectHdl;
-
- explicit ToolbarMenu_Impl( ToolbarMenu& rMenu );
- ~ToolbarMenu_Impl();
-
- void setAccessible( ToolbarMenuAcc* pAccessible );
-
- void fireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue );
-
- /// @throws css::uno::RuntimeException
- sal_Int32 getAccessibleChildCount();
- /// @throws css::lang::IndexOutOfBoundsException
- /// @throws css::uno::RuntimeException
- css::uno::Reference< css::accessibility::XAccessible > getAccessibleChild( sal_Int32 index );
- /// @throws css::lang::IndexOutOfBoundsException
- /// @throws css::uno::RuntimeException
- css::uno::Reference< css::accessibility::XAccessible > getAccessibleChild( Control const * pControl, sal_Int32 childIndex );
-
- /// @throws css::lang::IndexOutOfBoundsException
- /// @throws css::uno::RuntimeException
- void selectAccessibleChild( sal_Int32 nChildIndex );
- /// @throws css::lang::IndexOutOfBoundsException
- /// @throws css::uno::RuntimeException
- bool isAccessibleChildSelected( sal_Int32 nChildIndex );
- void clearAccessibleSelection();
-
- ToolbarMenuEntry* implGetEntry( int nEntry ) const;
- void notifyHighlightedEntry();
-
- void implHighlightControl( sal_uInt16 nCode, Control* pControl );
-};
-
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */