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 "sfx2/sidebar/SidebarPanelBase.hxx" 25b9e67834SAndre Fischer #include "sfx2/sidebar/Theme.hxx" 2602c50d82SAndre Fischer #include "sfx2/sidebar/ILayoutableWindow.hxx" 27f120fe41SAndre Fischer #include "sfx2/sidebar/IContextChangeReceiver.hxx" 28b9e67834SAndre Fischer #include "sfx2/imagemgr.hxx" 2995a18594SAndre Fischer #include <vcl/ctrl.hxx> 3095a18594SAndre Fischer #include <comphelper/processfactory.hxx> 3195a18594SAndre Fischer 32b9e67834SAndre Fischer #include <com/sun/star/ui/ContextChangeEventMultiplexer.hpp> 33b9e67834SAndre Fischer #include <com/sun/star/ui/UIElementType.hpp> 34b9e67834SAndre Fischer 35b9e67834SAndre Fischer using namespace css; 36b9e67834SAndre Fischer using namespace cssu; 37b9e67834SAndre Fischer 38b9e67834SAndre Fischer 39b9e67834SAndre Fischer namespace sfx2 { namespace sidebar { 40b9e67834SAndre Fischer 4195a18594SAndre Fischer Reference<ui::XUIElement> SidebarPanelBase::Create ( 4295a18594SAndre Fischer const ::rtl::OUString& rsResourceURL, 4395a18594SAndre Fischer const cssu::Reference<css::frame::XFrame>& rxFrame, 447a32b0c8SAndre Fischer Window* pWindow, 4502c50d82SAndre Fischer const css::ui::LayoutSize& rLayoutSize) 4695a18594SAndre Fischer { 4795a18594SAndre Fischer Reference<ui::XUIElement> xUIElement ( 4895a18594SAndre Fischer new SidebarPanelBase( 4995a18594SAndre Fischer rsResourceURL, 5095a18594SAndre Fischer rxFrame, 517a32b0c8SAndre Fischer pWindow, 5202c50d82SAndre Fischer rLayoutSize)); 5395a18594SAndre Fischer return xUIElement; 5495a18594SAndre Fischer } 5595a18594SAndre Fischer 5695a18594SAndre Fischer 5795a18594SAndre Fischer 5895a18594SAndre Fischer 59b9e67834SAndre Fischer SidebarPanelBase::SidebarPanelBase ( 60b9e67834SAndre Fischer const ::rtl::OUString& rsResourceURL, 61b9e67834SAndre Fischer const cssu::Reference<css::frame::XFrame>& rxFrame, 627a32b0c8SAndre Fischer Window* pWindow, 6302c50d82SAndre Fischer const css::ui::LayoutSize& rLayoutSize) 64b9e67834SAndre Fischer : SidebarPanelBaseInterfaceBase(m_aMutex), 65b9e67834SAndre Fischer mxFrame(rxFrame), 667a32b0c8SAndre Fischer mpControl(pWindow), 677a32b0c8SAndre Fischer msResourceURL(rsResourceURL), 6802c50d82SAndre Fischer maLayoutSize(rLayoutSize) 697a32b0c8SAndre Fischer { 707a32b0c8SAndre Fischer if (mxFrame.is()) 71b9e67834SAndre Fischer { 72b9e67834SAndre Fischer cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( 73b9e67834SAndre Fischer css::ui::ContextChangeEventMultiplexer::get( 74b9e67834SAndre Fischer ::comphelper::getProcessComponentContext())); 75b9e67834SAndre Fischer if (xMultiplexer.is()) 76b9e67834SAndre Fischer xMultiplexer->addContextChangeEventListener(this, mxFrame->getController()); 77b9e67834SAndre Fischer } 787a32b0c8SAndre Fischer if (mpControl != NULL) 79*37fee4fdSAndre Fischer { 80*37fee4fdSAndre Fischer mpControl->SetBackground(Theme::GetWallpaper(Theme::Paint_PanelBackground)); 817a32b0c8SAndre Fischer mpControl->Show(); 827a32b0c8SAndre Fischer } 83*37fee4fdSAndre Fischer } 84b9e67834SAndre Fischer 85b9e67834SAndre Fischer 86b9e67834SAndre Fischer 87b9e67834SAndre Fischer 88b9e67834SAndre Fischer SidebarPanelBase::~SidebarPanelBase (void) 89b9e67834SAndre Fischer { 90b9e67834SAndre Fischer } 91b9e67834SAndre Fischer 92b9e67834SAndre Fischer 93b9e67834SAndre Fischer 94b9e67834SAndre Fischer 95b9e67834SAndre Fischer void SAL_CALL SidebarPanelBase::disposing (void) 96b9e67834SAndre Fischer throw (cssu::RuntimeException) 97b9e67834SAndre Fischer { 9802c50d82SAndre Fischer if (mpControl != NULL) 9902c50d82SAndre Fischer { 10002c50d82SAndre Fischer delete mpControl; 10195a18594SAndre Fischer mpControl = NULL; 10202c50d82SAndre Fischer } 10395a18594SAndre Fischer 104b9e67834SAndre Fischer if (mxFrame.is()) 105b9e67834SAndre Fischer { 106b9e67834SAndre Fischer cssu::Reference<css::ui::XContextChangeEventMultiplexer> xMultiplexer ( 107b9e67834SAndre Fischer css::ui::ContextChangeEventMultiplexer::get( 108b9e67834SAndre Fischer ::comphelper::getProcessComponentContext())); 109b9e67834SAndre Fischer if (xMultiplexer.is()) 110b9e67834SAndre Fischer xMultiplexer->removeAllContextChangeEventListeners(this); 111b9e67834SAndre Fischer mxFrame = NULL; 112b9e67834SAndre Fischer } 113b9e67834SAndre Fischer } 114b9e67834SAndre Fischer 115b9e67834SAndre Fischer 116b9e67834SAndre Fischer 117b9e67834SAndre Fischer 1187a32b0c8SAndre Fischer void SidebarPanelBase::SetControl (::Window* pControl) 1197a32b0c8SAndre Fischer { 1207a32b0c8SAndre Fischer mpControl = pControl; 1217a32b0c8SAndre Fischer } 1227a32b0c8SAndre Fischer 1237a32b0c8SAndre Fischer 1247a32b0c8SAndre Fischer 1257a32b0c8SAndre Fischer 1267a32b0c8SAndre Fischer ::Window* SidebarPanelBase::GetControl (void) const 1277a32b0c8SAndre Fischer { 1287a32b0c8SAndre Fischer return mpControl; 1297a32b0c8SAndre Fischer } 1307a32b0c8SAndre Fischer 1317a32b0c8SAndre Fischer 1327a32b0c8SAndre Fischer 1337a32b0c8SAndre Fischer 134b9e67834SAndre Fischer // XContextChangeEventListener 135b9e67834SAndre Fischer void SAL_CALL SidebarPanelBase::notifyContextChangeEvent ( 136b9e67834SAndre Fischer const ui::ContextChangeEventObject& rEvent) 13795a18594SAndre Fischer throw (cssu::RuntimeException) 138b9e67834SAndre Fischer { 139f120fe41SAndre Fischer IContextChangeReceiver* pContextChangeReceiver 140f120fe41SAndre Fischer = dynamic_cast<IContextChangeReceiver*>(mpControl); 1417a32b0c8SAndre Fischer if (pContextChangeReceiver != NULL) 14295a18594SAndre Fischer { 14395a18594SAndre Fischer const EnumContext aContext( 144b9e67834SAndre Fischer EnumContext::GetApplicationEnum(rEvent.ApplicationName), 14595a18594SAndre Fischer EnumContext::GetContextEnum(rEvent.ContextName)); 14695a18594SAndre Fischer pContextChangeReceiver->HandleContextChange(aContext); 14795a18594SAndre Fischer } 148b9e67834SAndre Fischer } 149b9e67834SAndre Fischer 150b9e67834SAndre Fischer 151b9e67834SAndre Fischer 152b9e67834SAndre Fischer 153b9e67834SAndre Fischer void SAL_CALL SidebarPanelBase::disposing ( 154b9e67834SAndre Fischer const css::lang::EventObject& rEvent) 155b9e67834SAndre Fischer throw (cssu::RuntimeException) 156b9e67834SAndre Fischer { 15795a18594SAndre Fischer (void)rEvent; 15895a18594SAndre Fischer 15995a18594SAndre Fischer mxFrame = NULL; 16095a18594SAndre Fischer mpControl = NULL; 161b9e67834SAndre Fischer } 162b9e67834SAndre Fischer 163b9e67834SAndre Fischer 164b9e67834SAndre Fischer 165b9e67834SAndre Fischer 166b9e67834SAndre Fischer cssu::Reference<css::frame::XFrame> SAL_CALL SidebarPanelBase::getFrame (void) 167b9e67834SAndre Fischer throw(cssu::RuntimeException) 168b9e67834SAndre Fischer { 169b9e67834SAndre Fischer return mxFrame; 170b9e67834SAndre Fischer } 171b9e67834SAndre Fischer 172b9e67834SAndre Fischer 173b9e67834SAndre Fischer 174b9e67834SAndre Fischer 175b9e67834SAndre Fischer ::rtl::OUString SAL_CALL SidebarPanelBase::getResourceURL (void) 176b9e67834SAndre Fischer throw(cssu::RuntimeException) 177b9e67834SAndre Fischer { 178b9e67834SAndre Fischer return msResourceURL; 179b9e67834SAndre Fischer } 180b9e67834SAndre Fischer 181b9e67834SAndre Fischer 182b9e67834SAndre Fischer 183b9e67834SAndre Fischer 184b9e67834SAndre Fischer sal_Int16 SAL_CALL SidebarPanelBase::getType (void) 185b9e67834SAndre Fischer throw(cssu::RuntimeException) 186b9e67834SAndre Fischer { 187b9e67834SAndre Fischer return ui::UIElementType::TOOLPANEL; 188b9e67834SAndre Fischer } 189b9e67834SAndre Fischer 190b9e67834SAndre Fischer 191b9e67834SAndre Fischer 192b9e67834SAndre Fischer 193b9e67834SAndre Fischer Reference<XInterface> SAL_CALL SidebarPanelBase::getRealInterface (void) 194b9e67834SAndre Fischer throw(cssu::RuntimeException) 195b9e67834SAndre Fischer { 196b9e67834SAndre Fischer return Reference<XInterface>(static_cast<XWeak*>(this)); 197b9e67834SAndre Fischer } 198b9e67834SAndre Fischer 199b9e67834SAndre Fischer 200b9e67834SAndre Fischer 201b9e67834SAndre Fischer 202b9e67834SAndre Fischer Reference<accessibility::XAccessible> SAL_CALL SidebarPanelBase::createAccessible ( 203b9e67834SAndre Fischer const Reference<accessibility::XAccessible>& rxParentAccessible) 204b9e67834SAndre Fischer throw(cssu::RuntimeException) 205b9e67834SAndre Fischer { 20695a18594SAndre Fischer (void)rxParentAccessible; 20795a18594SAndre Fischer 208b9e67834SAndre Fischer // Not yet implemented. 209b9e67834SAndre Fischer return NULL; 210b9e67834SAndre Fischer } 211b9e67834SAndre Fischer 212b9e67834SAndre Fischer 213b9e67834SAndre Fischer 214b9e67834SAndre Fischer 215b9e67834SAndre Fischer Reference<awt::XWindow> SAL_CALL SidebarPanelBase::getWindow (void) 216b9e67834SAndre Fischer throw(cssu::RuntimeException) 217b9e67834SAndre Fischer { 21895a18594SAndre Fischer if (mpControl != NULL) 219b9e67834SAndre Fischer return Reference<awt::XWindow>( 22095a18594SAndre Fischer mpControl->GetComponentInterface(), 221b9e67834SAndre Fischer UNO_QUERY); 22295a18594SAndre Fischer else 22395a18594SAndre Fischer return NULL; 224b9e67834SAndre Fischer } 225b9e67834SAndre Fischer 226b9e67834SAndre Fischer 227b9e67834SAndre Fischer 228b9e67834SAndre Fischer 2297a32b0c8SAndre Fischer ui::LayoutSize SAL_CALL SidebarPanelBase::getHeightForWidth (const sal_Int32 nWidth) 23095a18594SAndre Fischer throw(cssu::RuntimeException) 231b9e67834SAndre Fischer { 23202c50d82SAndre Fischer if (maLayoutSize.Minimum >= 0) 23302c50d82SAndre Fischer return maLayoutSize; 23402c50d82SAndre Fischer else 23502c50d82SAndre Fischer { 23602c50d82SAndre Fischer ILayoutableWindow* pLayoutableWindow = dynamic_cast<ILayoutableWindow*>(mpControl); 23702c50d82SAndre Fischer if (pLayoutableWindow != NULL) 23802c50d82SAndre Fischer return pLayoutableWindow->GetHeightForWidth(nWidth); 23902c50d82SAndre Fischer else if (mpControl != NULL) 2407a32b0c8SAndre Fischer { 2417a32b0c8SAndre Fischer const sal_Int32 nHeight (mpControl->GetSizePixel().Height()); 2427a32b0c8SAndre Fischer return ui::LayoutSize(nHeight,nHeight,nHeight); 2437a32b0c8SAndre Fischer } 24402c50d82SAndre Fischer } 24502c50d82SAndre Fischer 2467a32b0c8SAndre Fischer return ui::LayoutSize(0,0,0); 247b9e67834SAndre Fischer } 248b9e67834SAndre Fischer 249b9e67834SAndre Fischer 250b9e67834SAndre Fischer 2517a32b0c8SAndre Fischer 252b9e67834SAndre Fischer } } // end of namespace sfx2::sidebar 253