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 26*45da7d5eSAndre Fischer #include <sfx2/msgpool.hxx> 27*45da7d5eSAndre Fischer #include <sfx2/viewsh.hxx> 28*45da7d5eSAndre Fischer #include "sfx2/imagemgr.hxx" 29*45da7d5eSAndre Fischer #include "sfx2/bindings.hxx" 30*45da7d5eSAndre Fischer #include <unotools/cmdoptions.hxx> 31*45da7d5eSAndre Fischer #include "CommandInfoProvider.hxx" 32*45da7d5eSAndre Fischer #include <vcl/svapp.hxx> 33*45da7d5eSAndre Fischer #include <vcl/toolbox.hxx> 34*45da7d5eSAndre Fischer 35*45da7d5eSAndre Fischer #include <com/sun/star/frame/XFrame.hpp> 36*45da7d5eSAndre Fischer #include <com/sun/star/frame/XFrameActionListener.hpp> 37*45da7d5eSAndre Fischer 38*45da7d5eSAndre Fischer 39*45da7d5eSAndre Fischer using namespace css; 40*45da7d5eSAndre Fischer using namespace cssu; 41*45da7d5eSAndre Fischer 42*45da7d5eSAndre Fischer 43*45da7d5eSAndre Fischer #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString))) 44*45da7d5eSAndre Fischer 45*45da7d5eSAndre Fischer namespace 46*45da7d5eSAndre Fischer { 47*45da7d5eSAndre Fischer typedef ::cppu::WeakComponentImplHelper1 < 48*45da7d5eSAndre Fischer css::frame::XFrameActionListener 49*45da7d5eSAndre Fischer > FrameActionListenerInterfaceBase; 50*45da7d5eSAndre Fischer 51*45da7d5eSAndre Fischer class FrameActionListener 52*45da7d5eSAndre Fischer : public ::cppu::BaseMutex, 53*45da7d5eSAndre Fischer public FrameActionListenerInterfaceBase 54*45da7d5eSAndre Fischer { 55*45da7d5eSAndre Fischer public: 56*45da7d5eSAndre Fischer FrameActionListener ( 57*45da7d5eSAndre Fischer sfx2::sidebar::ControllerItem& rControllerItem, 58*45da7d5eSAndre Fischer const Reference<frame::XFrame>& rxFrame) 59*45da7d5eSAndre Fischer : FrameActionListenerInterfaceBase(m_aMutex), 60*45da7d5eSAndre Fischer mrControllerItem(rControllerItem), 61*45da7d5eSAndre Fischer mxFrame(rxFrame) 62*45da7d5eSAndre Fischer { 63*45da7d5eSAndre Fischer if (mxFrame.is()) 64*45da7d5eSAndre Fischer mxFrame->addFrameActionListener(this); 65*45da7d5eSAndre Fischer } 66*45da7d5eSAndre Fischer virtual ~FrameActionListener (void) 67*45da7d5eSAndre Fischer { 68*45da7d5eSAndre Fischer } 69*45da7d5eSAndre Fischer virtual void SAL_CALL disposing (void) 70*45da7d5eSAndre Fischer { 71*45da7d5eSAndre Fischer if (mxFrame.is()) 72*45da7d5eSAndre Fischer mxFrame->removeFrameActionListener(this); 73*45da7d5eSAndre Fischer } 74*45da7d5eSAndre Fischer virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent) 75*45da7d5eSAndre Fischer throw (cssu::RuntimeException) 76*45da7d5eSAndre Fischer { 77*45da7d5eSAndre Fischer (void)rEvent; 78*45da7d5eSAndre Fischer mrControllerItem.ResetFrame(); 79*45da7d5eSAndre Fischer mxFrame = NULL; 80*45da7d5eSAndre Fischer } 81*45da7d5eSAndre Fischer virtual void SAL_CALL frameAction (const css::frame::FrameActionEvent& rEvent) 82*45da7d5eSAndre Fischer throw (cssu::RuntimeException) 83*45da7d5eSAndre Fischer { 84*45da7d5eSAndre Fischer if (rEvent.Action == frame::FrameAction_CONTEXT_CHANGED) 85*45da7d5eSAndre Fischer mrControllerItem.NotifyFrameContextChange(); 86*45da7d5eSAndre Fischer } 87*45da7d5eSAndre Fischer 88*45da7d5eSAndre Fischer private: 89*45da7d5eSAndre Fischer sfx2::sidebar::ControllerItem& mrControllerItem; 90*45da7d5eSAndre Fischer Reference<frame::XFrame> mxFrame; 91*45da7d5eSAndre Fischer }; 92*45da7d5eSAndre Fischer } 93*45da7d5eSAndre Fischer 94b9e67834SAndre Fischer namespace sfx2 { namespace sidebar { 95b9e67834SAndre Fischer 96b9e67834SAndre Fischer ControllerItem::ControllerItem ( 97*45da7d5eSAndre Fischer const sal_uInt16 nSlotId, 98b9e67834SAndre Fischer SfxBindings &rBindings, 99b9e67834SAndre Fischer ItemUpdateReceiverInterface& rItemUpdateReceiver) 100*45da7d5eSAndre Fischer : SfxControllerItem(nSlotId, rBindings), 101*45da7d5eSAndre Fischer mrItemUpdateReceiver(rItemUpdateReceiver), 102*45da7d5eSAndre Fischer mxFrame(), 103*45da7d5eSAndre Fischer mxFrameActionListener(), 104*45da7d5eSAndre Fischer msCommandName() 105*45da7d5eSAndre Fischer { 106*45da7d5eSAndre Fischer } 107*45da7d5eSAndre Fischer 108*45da7d5eSAndre Fischer 109*45da7d5eSAndre Fischer 110*45da7d5eSAndre Fischer 111*45da7d5eSAndre Fischer ControllerItem::ControllerItem ( 112*45da7d5eSAndre Fischer const sal_uInt16 nSlotId, 113*45da7d5eSAndre Fischer SfxBindings &rBindings, 114*45da7d5eSAndre Fischer ItemUpdateReceiverInterface& rItemUpdateReceiver, 115*45da7d5eSAndre Fischer const ::rtl::OUString& rsCommandName, 116*45da7d5eSAndre Fischer const Reference<frame::XFrame>& rxFrame) 117*45da7d5eSAndre Fischer : SfxControllerItem(nSlotId, rBindings), 118*45da7d5eSAndre Fischer mrItemUpdateReceiver(rItemUpdateReceiver), 119*45da7d5eSAndre Fischer mxFrame(rxFrame), 120*45da7d5eSAndre Fischer mxFrameActionListener(new FrameActionListener(*this, mxFrame)), 121*45da7d5eSAndre Fischer msCommandName(rsCommandName) 122b9e67834SAndre Fischer { 123b9e67834SAndre Fischer } 124b9e67834SAndre Fischer 125b9e67834SAndre Fischer 126b9e67834SAndre Fischer 127b9e67834SAndre Fischer 128b9e67834SAndre Fischer ControllerItem::~ControllerItem (void) 129b9e67834SAndre Fischer { 130*45da7d5eSAndre Fischer if (mxFrameActionListener.is()) 131*45da7d5eSAndre 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 { 142*45da7d5eSAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(nSID, eState, pState, IsEnabled()); 143b9e67834SAndre Fischer } 144b9e67834SAndre Fischer 1457a32b0c8SAndre Fischer 1467a32b0c8SAndre Fischer 1477a32b0c8SAndre Fischer 148*45da7d5eSAndre Fischer bool ControllerItem::IsEnabled (void) const 149*45da7d5eSAndre Fischer { 150*45da7d5eSAndre Fischer if ( ! SvtCommandOptions().HasEntries(SvtCommandOptions::CMDOPTION_DISABLED)) 151*45da7d5eSAndre Fischer { 152*45da7d5eSAndre Fischer // There are no disabled commands. 153*45da7d5eSAndre Fischer return true; 154*45da7d5eSAndre Fischer } 155*45da7d5eSAndre Fischer else if (msCommandName.getLength() == 0) 156*45da7d5eSAndre Fischer { 157*45da7d5eSAndre Fischer // We were not given a command name at construction and can 158*45da7d5eSAndre Fischer // not check the state now. Assume the best and return true. 159*45da7d5eSAndre Fischer return true; 160*45da7d5eSAndre Fischer } 161*45da7d5eSAndre Fischer else if (SvtCommandOptions().Lookup(SvtCommandOptions::CMDOPTION_DISABLED, msCommandName)) 162*45da7d5eSAndre Fischer { 163*45da7d5eSAndre Fischer // The command is part of a list of disabled commands. 164*45da7d5eSAndre Fischer return false; 165*45da7d5eSAndre Fischer } 166*45da7d5eSAndre Fischer else 167*45da7d5eSAndre Fischer return true; 168*45da7d5eSAndre Fischer } 169*45da7d5eSAndre Fischer 170*45da7d5eSAndre Fischer 171*45da7d5eSAndre Fischer 172*45da7d5eSAndre Fischer 173*45da7d5eSAndre Fischer void ControllerItem::RequestUpdate (void) 174*45da7d5eSAndre Fischer { 175*45da7d5eSAndre Fischer SfxPoolItem* pState = NULL; 176*45da7d5eSAndre Fischer const SfxItemState eState (GetBindings().QueryState(GetId(), pState)); 177*45da7d5eSAndre Fischer mrItemUpdateReceiver.NotifyItemUpdate(GetId(), eState, pState, IsEnabled()); 178*45da7d5eSAndre Fischer } 179*45da7d5eSAndre Fischer 180*45da7d5eSAndre Fischer 181*45da7d5eSAndre Fischer 182*45da7d5eSAndre Fischer 183*45da7d5eSAndre Fischer void ControllerItem::NotifyFrameContextChange (void) 184*45da7d5eSAndre Fischer { 185*45da7d5eSAndre Fischer RequestUpdate(); 186*45da7d5eSAndre Fischer } 187*45da7d5eSAndre Fischer 188*45da7d5eSAndre Fischer 189*45da7d5eSAndre Fischer 190*45da7d5eSAndre Fischer 191*45da7d5eSAndre Fischer void ControllerItem::ResetFrame (void) 192*45da7d5eSAndre Fischer { 193*45da7d5eSAndre Fischer mxFrame = NULL; 194*45da7d5eSAndre Fischer } 195*45da7d5eSAndre Fischer 196*45da7d5eSAndre Fischer 197*45da7d5eSAndre Fischer 198*45da7d5eSAndre Fischer 199*45da7d5eSAndre Fischer ::rtl::OUString ControllerItem::GetLabel (void) const 200*45da7d5eSAndre Fischer { 201*45da7d5eSAndre Fischer return CommandInfoProvider::Instance().GetLabelForCommand( 202*45da7d5eSAndre Fischer A2S(".uno:")+msCommandName, 203*45da7d5eSAndre Fischer mxFrame); 204*45da7d5eSAndre Fischer } 205*45da7d5eSAndre Fischer 206*45da7d5eSAndre Fischer 207*45da7d5eSAndre Fischer 208*45da7d5eSAndre Fischer 209*45da7d5eSAndre Fischer Image ControllerItem::GetIcon (void) const 210*45da7d5eSAndre Fischer { 211*45da7d5eSAndre Fischer return GetIcon(Application::GetSettings().GetStyleSettings().GetHighContrastMode()); 212*45da7d5eSAndre Fischer } 213*45da7d5eSAndre Fischer 214*45da7d5eSAndre Fischer 215*45da7d5eSAndre Fischer 216*45da7d5eSAndre Fischer 217*45da7d5eSAndre Fischer Image ControllerItem::GetIcon (const bool bIsHighContrastMode) const 218*45da7d5eSAndre Fischer { 219*45da7d5eSAndre Fischer return GetImage(mxFrame, A2S(".uno:")+msCommandName, sal_False, bIsHighContrastMode); 220*45da7d5eSAndre Fischer 221*45da7d5eSAndre Fischer } 222*45da7d5eSAndre Fischer 223*45da7d5eSAndre Fischer 224*45da7d5eSAndre Fischer 225*45da7d5eSAndre Fischer 226*45da7d5eSAndre Fischer void ControllerItem::SetupToolBoxItem (ToolBox& rToolBox, const sal_uInt16 nIndex) 227*45da7d5eSAndre Fischer { 228*45da7d5eSAndre Fischer rToolBox.SetQuickHelpText(nIndex, GetLabel()); 229*45da7d5eSAndre Fischer rToolBox.SetItemImage(nIndex, GetIcon()); 230*45da7d5eSAndre Fischer } 231*45da7d5eSAndre Fischer 232*45da7d5eSAndre Fischer 233b9e67834SAndre Fischer } } // end of namespace sfx2::sidebar 234