122de8995SAndre Fischer /************************************************************** 222de8995SAndre Fischer * 322de8995SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 422de8995SAndre Fischer * or more contributor license agreements. See the NOTICE file 522de8995SAndre Fischer * distributed with this work for additional information 622de8995SAndre Fischer * regarding copyright ownership. The ASF licenses this file 722de8995SAndre Fischer * to you under the Apache License, Version 2.0 (the 822de8995SAndre Fischer * "License"); you may not use this file except in compliance 922de8995SAndre Fischer * with the License. You may obtain a copy of the License at 1022de8995SAndre Fischer * 1122de8995SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 1222de8995SAndre Fischer * 1322de8995SAndre Fischer * Unless required by applicable law or agreed to in writing, 1422de8995SAndre Fischer * software distributed under the License is distributed on an 1522de8995SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1622de8995SAndre Fischer * KIND, either express or implied. See the License for the 1722de8995SAndre Fischer * specific language governing permissions and limitations 1822de8995SAndre Fischer * under the License. 1922de8995SAndre Fischer * 2022de8995SAndre Fischer *************************************************************/ 2122de8995SAndre Fischer 2222de8995SAndre Fischer #include "precompiled_sfx2.hxx" 2322de8995SAndre Fischer 2422de8995SAndre Fischer #include "Panel.hxx" 25*ff12d537SAndre Fischer #include "PanelTitleBar.hxx" 26*ff12d537SAndre Fischer #include "PanelDescriptor.hxx" 27*ff12d537SAndre Fischer #include "Theme.hxx" 28*ff12d537SAndre Fischer #include "Paint.hxx" 2922de8995SAndre Fischer 3022de8995SAndre Fischer #include <tools/svborder.hxx> 3122de8995SAndre Fischer 32*ff12d537SAndre Fischer #include <com/sun/star/ui/XToolPanel.hpp> 33*ff12d537SAndre Fischer 3422de8995SAndre Fischer 3522de8995SAndre Fischer using namespace css; 3622de8995SAndre Fischer using namespace cssu; 3722de8995SAndre Fischer 3822de8995SAndre Fischer namespace { 3922de8995SAndre Fischer static const char* VerticalStackLayouterName("vertical-stack"); 4022de8995SAndre Fischer } 4122de8995SAndre Fischer 4222de8995SAndre Fischer 43*ff12d537SAndre Fischer namespace sfx2 { namespace sidebar { 4422de8995SAndre Fischer 4522de8995SAndre Fischer Panel::Panel ( 46*ff12d537SAndre Fischer const PanelDescriptor& rPanelDescriptor, 47*ff12d537SAndre Fischer Window* pParentWindow, 48*ff12d537SAndre Fischer const ::boost::function<void(void)>& rDeckLayoutTrigger) 4922de8995SAndre Fischer : Window(pParentWindow), 5022de8995SAndre Fischer msLayoutHint(rPanelDescriptor.msLayout), 51*ff12d537SAndre Fischer mpTitleBar(new PanelTitleBar(rPanelDescriptor.msTitle, pParentWindow, this)), 5222de8995SAndre Fischer mbIsTitleBarOptional(rPanelDescriptor.mbIsTitleBarOptional), 5322de8995SAndre Fischer mxElement(), 54*ff12d537SAndre Fischer mxVerticalStackLayoutElement(), 55*ff12d537SAndre Fischer mbIsExpanded(true), 56*ff12d537SAndre Fischer maDeckLayoutTrigger(rDeckLayoutTrigger) 5722de8995SAndre Fischer { 58*ff12d537SAndre Fischer const sidebar::Paint aPaint (Theme::GetPanelBackground()); 59*ff12d537SAndre Fischer switch(aPaint.GetType()) 60*ff12d537SAndre Fischer { 61*ff12d537SAndre Fischer case Paint::NoPaint: 62*ff12d537SAndre Fischer default: 63*ff12d537SAndre Fischer SetBackground(); 64*ff12d537SAndre Fischer break; 65*ff12d537SAndre Fischer 66*ff12d537SAndre Fischer case Paint::ColorPaint: 67*ff12d537SAndre Fischer { 68*ff12d537SAndre Fischer const Color aColor (aPaint.GetColor()); 69*ff12d537SAndre Fischer SetBackground(Wallpaper(aColor)); 70*ff12d537SAndre Fischer break; 71*ff12d537SAndre Fischer } 72*ff12d537SAndre Fischer case Paint::GradientPaint: 73*ff12d537SAndre Fischer SetBackground(Wallpaper(aPaint.GetGradient())); 74*ff12d537SAndre Fischer break; 75*ff12d537SAndre Fischer } 7622de8995SAndre Fischer } 7722de8995SAndre Fischer 7822de8995SAndre Fischer 7922de8995SAndre Fischer 8022de8995SAndre Fischer 8122de8995SAndre Fischer Panel::~Panel (void) 8222de8995SAndre Fischer { 8322de8995SAndre Fischer } 8422de8995SAndre Fischer 8522de8995SAndre Fischer 8622de8995SAndre Fischer 8722de8995SAndre Fischer 88*ff12d537SAndre Fischer void Panel::Dispose (void) 89*ff12d537SAndre Fischer { 90*ff12d537SAndre Fischer mxVerticalStackLayoutElement = NULL; 91*ff12d537SAndre Fischer { 92*ff12d537SAndre Fischer Reference<lang::XComponent> xComponent (mxElement, UNO_QUERY); 93*ff12d537SAndre Fischer mxElement = NULL; 94*ff12d537SAndre Fischer if (xComponent.is()) 95*ff12d537SAndre Fischer xComponent->dispose(); 96*ff12d537SAndre Fischer } 97*ff12d537SAndre Fischer { 98*ff12d537SAndre Fischer Reference<lang::XComponent> xComponent (mxElementWindow, UNO_QUERY); 99*ff12d537SAndre Fischer mxElementWindow = NULL; 100*ff12d537SAndre Fischer if (xComponent.is()) 101*ff12d537SAndre Fischer xComponent->dispose(); 102*ff12d537SAndre Fischer } 103*ff12d537SAndre Fischer } 104*ff12d537SAndre Fischer 105*ff12d537SAndre Fischer 106*ff12d537SAndre Fischer 107*ff12d537SAndre Fischer 10822de8995SAndre Fischer const ::rtl::OUString& Panel::GetLayoutHint (void) const 10922de8995SAndre Fischer { 11022de8995SAndre Fischer return msLayoutHint; 11122de8995SAndre Fischer } 11222de8995SAndre Fischer 11322de8995SAndre Fischer 11422de8995SAndre Fischer 11522de8995SAndre Fischer 11622de8995SAndre Fischer TitleBar* Panel::GetTitleBar (void) const 11722de8995SAndre Fischer { 11822de8995SAndre Fischer return mpTitleBar; 11922de8995SAndre Fischer } 12022de8995SAndre Fischer 12122de8995SAndre Fischer 12222de8995SAndre Fischer 12322de8995SAndre Fischer 12422de8995SAndre Fischer bool Panel::IsTitleBarOptional (void) const 12522de8995SAndre Fischer { 12622de8995SAndre Fischer return mbIsTitleBarOptional; 12722de8995SAndre Fischer } 12822de8995SAndre Fischer 12922de8995SAndre Fischer 13022de8995SAndre Fischer 13122de8995SAndre Fischer 13222de8995SAndre Fischer void Panel::SetUIElement (const Reference<ui::XUIElement>& rxElement) 13322de8995SAndre Fischer { 13422de8995SAndre Fischer mxElement = rxElement; 13522de8995SAndre Fischer if (mxElement.is()) 13622de8995SAndre Fischer { 137*ff12d537SAndre Fischer Reference<ui::XToolPanel> xToolPanel(mxElement->getRealInterface(), UNO_QUERY); 138*ff12d537SAndre Fischer if (xToolPanel.is()) 139*ff12d537SAndre Fischer { 140*ff12d537SAndre Fischer mxElementWindow = xToolPanel->getWindow(); 141*ff12d537SAndre Fischer Reference<awt::XWindowPeer> xPeer (mxElementWindow, UNO_QUERY); 142*ff12d537SAndre Fischer if (xPeer.is()) 143*ff12d537SAndre Fischer xPeer->setBackground(0x00000000); 144*ff12d537SAndre Fischer } 14522de8995SAndre Fischer 14622de8995SAndre Fischer if (msLayoutHint.equalsAscii(VerticalStackLayouterName)) 14722de8995SAndre Fischer mxVerticalStackLayoutElement.set(mxElement->getRealInterface(), UNO_QUERY); 14822de8995SAndre Fischer } 14922de8995SAndre Fischer } 15022de8995SAndre Fischer 15122de8995SAndre Fischer 15222de8995SAndre Fischer 15322de8995SAndre Fischer 154*ff12d537SAndre Fischer void Panel::SetExpanded (const bool bIsExpanded) 155*ff12d537SAndre Fischer { 156*ff12d537SAndre Fischer if (mbIsExpanded != bIsExpanded) 157*ff12d537SAndre Fischer { 158*ff12d537SAndre Fischer mbIsExpanded = bIsExpanded; 159*ff12d537SAndre Fischer maDeckLayoutTrigger(); 160*ff12d537SAndre Fischer } 161*ff12d537SAndre Fischer } 162*ff12d537SAndre Fischer 163*ff12d537SAndre Fischer 164*ff12d537SAndre Fischer 165*ff12d537SAndre Fischer 166*ff12d537SAndre Fischer bool Panel::IsExpanded (void) const 167*ff12d537SAndre Fischer { 168*ff12d537SAndre Fischer return mbIsExpanded; 169*ff12d537SAndre Fischer } 170*ff12d537SAndre Fischer 171*ff12d537SAndre Fischer 172*ff12d537SAndre Fischer 173*ff12d537SAndre Fischer 17422de8995SAndre Fischer void Panel::Paint (const Rectangle& rUpdateArea) 17522de8995SAndre Fischer { 17622de8995SAndre Fischer Window::Paint(rUpdateArea); 17722de8995SAndre Fischer } 17822de8995SAndre Fischer 17922de8995SAndre Fischer 18022de8995SAndre Fischer 18122de8995SAndre Fischer 182*ff12d537SAndre Fischer void Panel::SetPosSizePixel ( 183*ff12d537SAndre Fischer long nX, 184*ff12d537SAndre Fischer long nY, 185*ff12d537SAndre Fischer long nWidth, 186*ff12d537SAndre Fischer long nHeight, 187*ff12d537SAndre Fischer sal_uInt16 nFlags) 188*ff12d537SAndre Fischer { 189*ff12d537SAndre Fischer Window::SetPosSizePixel(nX, nY, nWidth, nHeight, nFlags); 190*ff12d537SAndre Fischer 191*ff12d537SAndre Fischer if (mxElementWindow.is()) 192*ff12d537SAndre Fischer mxElementWindow->setPosSize(0, 0, nWidth, nHeight, nFlags); 193*ff12d537SAndre Fischer } 194*ff12d537SAndre Fischer 195*ff12d537SAndre Fischer 196*ff12d537SAndre Fischer 197*ff12d537SAndre Fischer 19822de8995SAndre Fischer Reference<ui::XVerticalStackLayoutElement> Panel::GetVerticalStackElement (void) const 19922de8995SAndre Fischer { 20022de8995SAndre Fischer return mxVerticalStackLayoutElement; 20122de8995SAndre Fischer } 20222de8995SAndre Fischer 20322de8995SAndre Fischer 204*ff12d537SAndre Fischer } } // end of namespace sfx2::sidebar 205