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> 31*f35c6d02SAndre 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 { 14245da7d5eSAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState, IsEnabled()); 143b9e67834SAndre Fischer } 144b9e67834SAndre Fischer 1457a32b0c8SAndre Fischer 1467a32b0c8SAndre Fischer 1477a32b0c8SAndre Fischer 14845da7d5eSAndre Fischer bool ControllerItem::IsEnabled (void) const 14945da7d5eSAndre Fischer { 15045da7d5eSAndre Fischer if ( ! SvtCommandOptions().HasEntries(SvtCommandOptions::CMDOPTION_DISABLED)) 15145da7d5eSAndre Fischer { 15245da7d5eSAndre Fischer // There are no disabled commands. 15345da7d5eSAndre Fischer return true; 15445da7d5eSAndre Fischer } 15545da7d5eSAndre Fischer else if (msCommandName.getLength() == 0) 15645da7d5eSAndre Fischer { 15745da7d5eSAndre Fischer // We were not given a command name at construction and can 15845da7d5eSAndre Fischer // not check the state now. Assume the best and return true. 15945da7d5eSAndre Fischer return true; 16045da7d5eSAndre Fischer } 16145da7d5eSAndre Fischer else if (SvtCommandOptions().Lookup(SvtCommandOptions::CMDOPTION_DISABLED, msCommandName)) 16245da7d5eSAndre Fischer { 16345da7d5eSAndre Fischer // The command is part of a list of disabled commands. 16445da7d5eSAndre Fischer return false; 16545da7d5eSAndre Fischer } 16645da7d5eSAndre Fischer else 16745da7d5eSAndre Fischer return true; 16845da7d5eSAndre Fischer } 16945da7d5eSAndre Fischer 17045da7d5eSAndre Fischer 17145da7d5eSAndre Fischer 17245da7d5eSAndre Fischer 17345da7d5eSAndre Fischer void ControllerItem::RequestUpdate (void) 17445da7d5eSAndre Fischer { 17545da7d5eSAndre Fischer SfxPoolItem* pState = NULL; 17645da7d5eSAndre Fischer const SfxItemState eState (GetBindings().QueryState(GetId(), pState)); 17745da7d5eSAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(GetId(), eState, pState, IsEnabled()); 17845da7d5eSAndre Fischer } 17945da7d5eSAndre Fischer 18045da7d5eSAndre Fischer 18145da7d5eSAndre Fischer 18245da7d5eSAndre Fischer 18345da7d5eSAndre Fischer void ControllerItem::NotifyFrameContextChange (void) 18445da7d5eSAndre Fischer { 18545da7d5eSAndre Fischer RequestUpdate(); 18645da7d5eSAndre Fischer } 18745da7d5eSAndre Fischer 18845da7d5eSAndre Fischer 18945da7d5eSAndre Fischer 19045da7d5eSAndre Fischer 19145da7d5eSAndre Fischer void ControllerItem::ResetFrame (void) 19245da7d5eSAndre Fischer { 19345da7d5eSAndre Fischer mxFrame = NULL; 19445da7d5eSAndre Fischer } 19545da7d5eSAndre Fischer 19645da7d5eSAndre Fischer 19745da7d5eSAndre Fischer 19845da7d5eSAndre Fischer 19945da7d5eSAndre Fischer ::rtl::OUString ControllerItem::GetLabel (void) const 20045da7d5eSAndre Fischer { 20145da7d5eSAndre Fischer return CommandInfoProvider::Instance().GetLabelForCommand( 20245da7d5eSAndre Fischer A2S(".uno:")+msCommandName, 20345da7d5eSAndre Fischer mxFrame); 20445da7d5eSAndre Fischer } 20545da7d5eSAndre Fischer 20645da7d5eSAndre Fischer 20745da7d5eSAndre Fischer 20845da7d5eSAndre Fischer 20945da7d5eSAndre Fischer Image ControllerItem::GetIcon (void) const 21045da7d5eSAndre Fischer { 21145da7d5eSAndre Fischer return GetIcon(Application::GetSettings().GetStyleSettings().GetHighContrastMode()); 21245da7d5eSAndre Fischer } 21345da7d5eSAndre Fischer 21445da7d5eSAndre Fischer 21545da7d5eSAndre Fischer 21645da7d5eSAndre Fischer 21745da7d5eSAndre Fischer Image ControllerItem::GetIcon (const bool bIsHighContrastMode) const 21845da7d5eSAndre Fischer { 21945da7d5eSAndre Fischer return GetImage(mxFrame, A2S(".uno:")+msCommandName, sal_False, bIsHighContrastMode); 22045da7d5eSAndre Fischer 22145da7d5eSAndre Fischer } 22245da7d5eSAndre Fischer 22345da7d5eSAndre Fischer 22445da7d5eSAndre Fischer 22545da7d5eSAndre Fischer 22645da7d5eSAndre Fischer void ControllerItem::SetupToolBoxItem (ToolBox& rToolBox, const sal_uInt16 nIndex) 22745da7d5eSAndre Fischer { 22845da7d5eSAndre Fischer rToolBox.SetQuickHelpText(nIndex, GetLabel()); 22945da7d5eSAndre Fischer rToolBox.SetItemImage(nIndex, GetIcon()); 23045da7d5eSAndre Fischer } 23145da7d5eSAndre Fischer 23245da7d5eSAndre Fischer 233b9e67834SAndre Fischer } } // end of namespace sfx2::sidebar 234