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