1b9e67834SAndre Fischer /************************************************************** 2b9e67834SAndre Fischer * 3b9e67834SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 4b9e67834SAndre Fischer * or more contributor license agreements. See the NOTICE file 5b9e67834SAndre Fischer * distributed with this work for additional information 6b9e67834SAndre Fischer * regarding copyright ownership. The ASF licenses this file 7b9e67834SAndre Fischer * to you under the Apache License, Version 2.0 (the 8b9e67834SAndre Fischer * "License"); you may not use this file except in compliance 9b9e67834SAndre Fischer * with the License. You may obtain a copy of the License at 10b9e67834SAndre Fischer * 11b9e67834SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 12b9e67834SAndre Fischer * 13b9e67834SAndre Fischer * Unless required by applicable law or agreed to in writing, 14b9e67834SAndre Fischer * software distributed under the License is distributed on an 15b9e67834SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16b9e67834SAndre Fischer * KIND, either express or implied. See the License for the 17b9e67834SAndre Fischer * specific language governing permissions and limitations 18b9e67834SAndre Fischer * under the License. 19b9e67834SAndre Fischer * 20b9e67834SAndre Fischer *************************************************************/ 21b9e67834SAndre Fischer 22b9e67834SAndre Fischer #include "precompiled_sfx2.hxx" 23b9e67834SAndre Fischer 24b9e67834SAndre Fischer #include "sidebar/ControllerItem.hxx" 25b9e67834SAndre Fischer 2645da7d5eSAndre Fischer #include <sfx2/msgpool.hxx> 2745da7d5eSAndre Fischer #include <sfx2/viewsh.hxx> 2845da7d5eSAndre Fischer #include "sfx2/imagemgr.hxx" 2945da7d5eSAndre Fischer #include "sfx2/bindings.hxx" 3045da7d5eSAndre Fischer #include <unotools/cmdoptions.hxx> 31f35c6d02SAndre Fischer #include "sfx2/sidebar/CommandInfoProvider.hxx" 3245da7d5eSAndre Fischer #include <vcl/svapp.hxx> 3345da7d5eSAndre Fischer #include <vcl/toolbox.hxx> 3445da7d5eSAndre Fischer 3545da7d5eSAndre Fischer #include <com/sun/star/frame/XFrame.hpp> 3645da7d5eSAndre Fischer #include <com/sun/star/frame/XFrameActionListener.hpp> 3745da7d5eSAndre Fischer 3845da7d5eSAndre Fischer 3945da7d5eSAndre Fischer using namespace css; 4045da7d5eSAndre Fischer using namespace cssu; 4145da7d5eSAndre Fischer 4245da7d5eSAndre Fischer 4345da7d5eSAndre Fischer #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 4445da7d5eSAndre Fischer 4545da7d5eSAndre Fischer namespace 4645da7d5eSAndre Fischer { 4745da7d5eSAndre Fischer typedef ::cppu::WeakComponentImplHelper1 < 4845da7d5eSAndre Fischer css::frame::XFrameActionListener 4945da7d5eSAndre Fischer > FrameActionListenerInterfaceBase; 5045da7d5eSAndre Fischer 5145da7d5eSAndre Fischer class FrameActionListener 5245da7d5eSAndre Fischer : public ::cppu::BaseMutex, 5345da7d5eSAndre Fischer public FrameActionListenerInterfaceBase 5445da7d5eSAndre Fischer { 5545da7d5eSAndre Fischer public: 5645da7d5eSAndre Fischer FrameActionListener ( 5745da7d5eSAndre Fischer sfx2::sidebar::ControllerItem& rControllerItem, 5845da7d5eSAndre Fischer const Reference<frame::XFrame>& rxFrame) 5945da7d5eSAndre Fischer : FrameActionListenerInterfaceBase(m_aMutex), 6045da7d5eSAndre Fischer mrControllerItem(rControllerItem), 6145da7d5eSAndre Fischer mxFrame(rxFrame) 6245da7d5eSAndre Fischer { 6345da7d5eSAndre Fischer if (mxFrame.is()) 6445da7d5eSAndre Fischer mxFrame->addFrameActionListener(this); 6545da7d5eSAndre Fischer } 6645da7d5eSAndre Fischer virtual ~FrameActionListener (void) 6745da7d5eSAndre Fischer { 6845da7d5eSAndre Fischer } 6945da7d5eSAndre Fischer virtual void SAL_CALL disposing (void) 7045da7d5eSAndre Fischer { 7145da7d5eSAndre Fischer if (mxFrame.is()) 7245da7d5eSAndre Fischer mxFrame->removeFrameActionListener(this); 7345da7d5eSAndre Fischer } 7445da7d5eSAndre Fischer virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) 7545da7d5eSAndre Fischer throw (cssu::RuntimeException) 7645da7d5eSAndre Fischer { 7745da7d5eSAndre Fischer (void)rEvent; 7845da7d5eSAndre Fischer mrControllerItem.ResetFrame(); 7945da7d5eSAndre Fischer mxFrame = NULL; 8045da7d5eSAndre Fischer } 8145da7d5eSAndre Fischer virtual void SAL_CALL frameAction (const css::frame::FrameActionEvent& rEvent) 8245da7d5eSAndre Fischer throw (cssu::RuntimeException) 8345da7d5eSAndre Fischer { 8445da7d5eSAndre Fischer if (rEvent.Action == frame::FrameAction_CONTEXT_CHANGED) 8545da7d5eSAndre Fischer mrControllerItem.NotifyFrameContextChange(); 8645da7d5eSAndre Fischer } 8745da7d5eSAndre Fischer 8845da7d5eSAndre Fischer private: 8945da7d5eSAndre Fischer sfx2::sidebar::ControllerItem& mrControllerItem; 9045da7d5eSAndre Fischer Reference<frame::XFrame> mxFrame; 9145da7d5eSAndre Fischer }; 9245da7d5eSAndre Fischer } 9345da7d5eSAndre Fischer 94b9e67834SAndre Fischer namespace sfx2 { namespace sidebar { 95b9e67834SAndre Fischer 96b9e67834SAndre Fischer ControllerItem::ControllerItem ( 9745da7d5eSAndre Fischer const sal_uInt16 nSlotId, 98b9e67834SAndre Fischer SfxBindings &rBindings, 99b9e67834SAndre Fischer ItemUpdateReceiverInterface& rItemUpdateReceiver) 10045da7d5eSAndre Fischer : SfxControllerItem(nSlotId, rBindings), 10145da7d5eSAndre Fischer mrItemUpdateReceiver(rItemUpdateReceiver), 10245da7d5eSAndre Fischer mxFrame(), 10345da7d5eSAndre Fischer mxFrameActionListener(), 10445da7d5eSAndre Fischer msCommandName() 10545da7d5eSAndre Fischer { 10645da7d5eSAndre Fischer } 10745da7d5eSAndre Fischer 10845da7d5eSAndre Fischer 10945da7d5eSAndre Fischer 11045da7d5eSAndre Fischer 11145da7d5eSAndre Fischer ControllerItem::ControllerItem ( 11245da7d5eSAndre Fischer const sal_uInt16 nSlotId, 11345da7d5eSAndre Fischer SfxBindings &rBindings, 11445da7d5eSAndre Fischer ItemUpdateReceiverInterface& rItemUpdateReceiver, 11545da7d5eSAndre Fischer const ::rtl::OUString& rsCommandName, 11645da7d5eSAndre Fischer const Reference<frame::XFrame>& rxFrame) 11745da7d5eSAndre Fischer : SfxControllerItem(nSlotId, rBindings), 11845da7d5eSAndre Fischer mrItemUpdateReceiver(rItemUpdateReceiver), 11945da7d5eSAndre Fischer mxFrame(rxFrame), 12045da7d5eSAndre Fischer mxFrameActionListener(new FrameActionListener(*this, mxFrame)), 12145da7d5eSAndre Fischer msCommandName(rsCommandName) 122b9e67834SAndre Fischer { 123b9e67834SAndre Fischer } 124b9e67834SAndre Fischer 125b9e67834SAndre Fischer 126b9e67834SAndre Fischer 127b9e67834SAndre Fischer 128b9e67834SAndre Fischer ControllerItem::~ControllerItem (void) 129b9e67834SAndre Fischer { 13045da7d5eSAndre Fischer if (mxFrameActionListener.is()) 13145da7d5eSAndre Fischer mxFrameActionListener->dispose(); 132b9e67834SAndre Fischer } 133b9e67834SAndre Fischer 134b9e67834SAndre Fischer 135b9e67834SAndre Fischer 136b9e67834SAndre Fischer 137b9e67834SAndre Fischer void ControllerItem::StateChanged ( 138b9e67834SAndre Fischer sal_uInt16 nSID, 139b9e67834SAndre Fischer SfxItemState eState, 140b9e67834SAndre Fischer const SfxPoolItem* pState) 141b9e67834SAndre Fischer { 142bc7f1831SAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState, IsEnabled(eState)); 143b9e67834SAndre Fischer } 144b9e67834SAndre Fischer 1457a32b0c8SAndre Fischer 1467a32b0c8SAndre Fischer 1477a32b0c8SAndre Fischer 148bc7f1831SAndre Fischer bool ControllerItem::IsEnabled (SfxItemState eState) const 14945da7d5eSAndre Fischer { 150bc7f1831SAndre Fischer if (eState == SFX_ITEM_DISABLED) 151bc7f1831SAndre Fischer return false; 152bc7f1831SAndre Fischer else if ( ! SvtCommandOptions().HasEntries(SvtCommandOptions::CMDOPTION_DISABLED)) 15345da7d5eSAndre Fischer { 15445da7d5eSAndre Fischer // There are no disabled commands. 15545da7d5eSAndre Fischer return true; 15645da7d5eSAndre Fischer } 15745da7d5eSAndre Fischer else if (msCommandName.getLength() == 0) 15845da7d5eSAndre Fischer { 15945da7d5eSAndre Fischer // We were not given a command name at construction and can 16045da7d5eSAndre Fischer // not check the state now. Assume the best and return true. 16145da7d5eSAndre Fischer return true; 16245da7d5eSAndre Fischer } 16345da7d5eSAndre Fischer else if (SvtCommandOptions().Lookup(SvtCommandOptions::CMDOPTION_DISABLED, msCommandName)) 16445da7d5eSAndre Fischer { 16545da7d5eSAndre Fischer // The command is part of a list of disabled commands. 16645da7d5eSAndre Fischer return false; 16745da7d5eSAndre Fischer } 16845da7d5eSAndre Fischer else 16945da7d5eSAndre Fischer return true; 17045da7d5eSAndre Fischer } 17145da7d5eSAndre Fischer 17245da7d5eSAndre Fischer 17345da7d5eSAndre Fischer 17445da7d5eSAndre Fischer 17545da7d5eSAndre Fischer void ControllerItem::RequestUpdate (void) 17645da7d5eSAndre Fischer { 17745da7d5eSAndre Fischer SfxPoolItem* pState = NULL; 17845da7d5eSAndre Fischer const SfxItemState eState (GetBindings().QueryState(GetId(), pState)); 179bc7f1831SAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(GetId(), eState, pState, IsEnabled(eState)); 18045da7d5eSAndre Fischer } 18145da7d5eSAndre Fischer 18245da7d5eSAndre Fischer 18345da7d5eSAndre Fischer 18445da7d5eSAndre Fischer 18545da7d5eSAndre Fischer void ControllerItem::NotifyFrameContextChange (void) 18645da7d5eSAndre Fischer { 18745da7d5eSAndre Fischer RequestUpdate(); 18845da7d5eSAndre Fischer } 18945da7d5eSAndre Fischer 19045da7d5eSAndre Fischer 19145da7d5eSAndre Fischer 19245da7d5eSAndre Fischer 19345da7d5eSAndre Fischer void ControllerItem::ResetFrame (void) 19445da7d5eSAndre Fischer { 19545da7d5eSAndre Fischer mxFrame = NULL; 19645da7d5eSAndre Fischer } 19745da7d5eSAndre Fischer 19845da7d5eSAndre Fischer 19945da7d5eSAndre Fischer 20045da7d5eSAndre Fischer 20145da7d5eSAndre Fischer ::rtl::OUString ControllerItem::GetLabel (void) const 20245da7d5eSAndre Fischer { 20345da7d5eSAndre Fischer return CommandInfoProvider::Instance().GetLabelForCommand( 20445da7d5eSAndre Fischer A2S(".uno:")+msCommandName, 20545da7d5eSAndre Fischer mxFrame); 20645da7d5eSAndre Fischer } 20745da7d5eSAndre Fischer 20845da7d5eSAndre Fischer 20945da7d5eSAndre Fischer 21045da7d5eSAndre Fischer 211*ed3119eeSAndre Fischer ::rtl::OUString ControllerItem::GetHelpText (void) const 212*ed3119eeSAndre Fischer { 213*ed3119eeSAndre Fischer Help* pHelp = Application::GetHelp(); 214*ed3119eeSAndre Fischer if (pHelp != NULL) 215*ed3119eeSAndre Fischer { 216*ed3119eeSAndre Fischer if (msCommandName.getLength() > 0) 217*ed3119eeSAndre Fischer { 218*ed3119eeSAndre Fischer const ::rtl::OUString sHelp (pHelp->GetHelpText(A2S(".uno:")+msCommandName, NULL)); 219*ed3119eeSAndre Fischer return sHelp; 220*ed3119eeSAndre Fischer } 221*ed3119eeSAndre Fischer } 222*ed3119eeSAndre Fischer return ::rtl::OUString(); 223*ed3119eeSAndre Fischer } 224*ed3119eeSAndre Fischer 225*ed3119eeSAndre Fischer 226*ed3119eeSAndre Fischer 227*ed3119eeSAndre Fischer 22845da7d5eSAndre Fischer Image ControllerItem::GetIcon (void) const 22945da7d5eSAndre Fischer { 23045da7d5eSAndre Fischer return GetIcon(Application::GetSettings().GetStyleSettings().GetHighContrastMode()); 23145da7d5eSAndre Fischer } 23245da7d5eSAndre Fischer 23345da7d5eSAndre Fischer 23445da7d5eSAndre Fischer 23545da7d5eSAndre Fischer 23645da7d5eSAndre Fischer Image ControllerItem::GetIcon (const bool bIsHighContrastMode) const 23745da7d5eSAndre Fischer { 23845da7d5eSAndre Fischer return GetImage(mxFrame, A2S(".uno:")+msCommandName, sal_False, bIsHighContrastMode); 23945da7d5eSAndre Fischer 24045da7d5eSAndre Fischer } 24145da7d5eSAndre Fischer 24245da7d5eSAndre Fischer 24345da7d5eSAndre Fischer 24445da7d5eSAndre Fischer 24545da7d5eSAndre Fischer void ControllerItem::SetupToolBoxItem (ToolBox& rToolBox, const sal_uInt16 nIndex) 24645da7d5eSAndre Fischer { 24745da7d5eSAndre Fischer rToolBox.SetQuickHelpText(nIndex, GetLabel()); 248*ed3119eeSAndre Fischer rToolBox.SetHelpText(nIndex, GetHelpText()); 24945da7d5eSAndre Fischer rToolBox.SetItemImage(nIndex, GetIcon()); 25045da7d5eSAndre Fischer } 25145da7d5eSAndre Fischer 25245da7d5eSAndre Fischer 253b9e67834SAndre Fischer } } // end of namespace sfx2::sidebar 254