blob: 858c041c47b63eb4e0df00495124592e9d585888 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_reportdesign.hxx"
#include <FixedTextColor.hxx>
#include <com/sun/star/report/XFixedText.hpp>
#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <com/sun/star/awt/InvalidateStyle.hpp>
#include <RptObject.hxx>
#include <RptModel.hxx>
#include <RptPage.hxx>
#include <ViewsWindow.hxx>
#include <ReportSection.hxx>
#include <ReportController.hxx>
#include <uistrings.hrc>
#include <reportformula.hxx>
#include <toolkit/helper/property.hxx>
#include <tools/color.hxx> // COL_TRANSPARENT
#include <svtools/extcolorcfg.hxx>
#include <unotools/confignode.hxx>
// DBG_*
#include <tools/debug.hxx>
// DBG_UNHANDLED_EXCEPTION
#include <tools/diagnose_ex.h>
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>
namespace rptui
{
using namespace ::com::sun::star;
DBG_NAME(rpt_FixedTextColor)
FixedTextColor::FixedTextColor(const OReportController& _aController)
:m_rReportController(_aController)
{
DBG_CTOR(rpt_FixedTextColor, NULL);
}
//--------------------------------------------------------------------
// sal_Int32 FixedTextColor::getTextColor()
// {
// const StyleSettings& aStyleSettings = Application::GetSettings().GetStyleSettings();
// sal_Bool bHighContrast = aStyleSettings.GetHighContrastMode();
//
// Color aGetFaceColor = aStyleSettings.GetFaceColor();
// Color aGetCheckedColor = aStyleSettings.GetCheckedColor();
// Color aGetLightColor = aStyleSettings.GetLightColor();
// Color aGetLightBorderColor = aStyleSettings.GetLightBorderColor();
// Color aGetShadowColor = aStyleSettings.GetShadowColor();
// Color aGetDarkShadowColor = aStyleSettings.GetDarkShadowColor();
// Color aGetButtonTextColor = aStyleSettings.GetButtonTextColor();
// Color aGetButtonRolloverTextColor = aStyleSettings.GetButtonRolloverTextColor();
// Color aGetRadioCheckTextColor = aStyleSettings.GetRadioCheckTextColor();
// Color aGetGroupTextColor = aStyleSettings.GetGroupTextColor();
// Color aGetLabelTextColor = aStyleSettings.GetLabelTextColor();
// Color aGetInfoTextColor = aStyleSettings.GetInfoTextColor();
// Color aGetWindowColor = aStyleSettings.GetWindowColor();
// Color aGetWindowTextColor = aStyleSettings.GetWindowTextColor();
// Color aGetDialogColor = aStyleSettings.GetDialogColor();
// Color aGetDialogTextColor = aStyleSettings.GetDialogTextColor();
// Color aGetWorkspaceColor = aStyleSettings.GetWorkspaceColor();
// Color aGetFieldColor = aStyleSettings.GetFieldColor();
// Color aGetFieldTextColor = aStyleSettings.GetFieldTextColor();
// Color aGetFieldRolloverTextColor = aStyleSettings.GetFieldRolloverTextColor();
// Color aGetActiveColor = aStyleSettings.GetActiveColor();
// Color aGetActiveColor2 = aStyleSettings.GetActiveColor2();
// Color aGetActiveTextColor = aStyleSettings.GetActiveTextColor();
// Color aGetActiveBorderColor = aStyleSettings.GetActiveBorderColor();
// Color aGetDeactiveColor = aStyleSettings.GetDeactiveColor();
// Color aGetDeactiveColor2 = aStyleSettings.GetDeactiveColor2();
// Color aGetDeactiveTextColor = aStyleSettings.GetDeactiveTextColor();
// Color aGetDeactiveBorderColor = aStyleSettings.GetDeactiveBorderColor();
// Color aGetHighlightColor = aStyleSettings.GetHighlightColor();
// Color aGetHighlightTextColor = aStyleSettings.GetHighlightTextColor();
// Color aGetDisableColor = aStyleSettings.GetDisableColor();
// Color aGetHelpColor = aStyleSettings.GetHelpColor();
// Color aGetHelpTextColor = aStyleSettings.GetHelpTextColor();
// Color aGetMenuColor = aStyleSettings.GetMenuColor();
// Color aGetMenuBarColor = aStyleSettings.GetMenuBarColor();
// Color aGetMenuBorderColor = aStyleSettings.GetMenuBorderColor();
// Color aGetMenuTextColor = aStyleSettings.GetMenuTextColor();
// Color aGetMenuHighlightColor = aStyleSettings.GetMenuHighlightColor();
// Color aGetMenuHighlightTextColor = aStyleSettings.GetMenuHighlightTextColor();
// Color aGetLinkColor = aStyleSettings.GetLinkColor();
// Color aGetVisitedLinkColor = aStyleSettings.GetVisitedLinkColor();
// Color aGetHighlightLinkColor = aStyleSettings.GetHighlightLinkColor();
// Color aGetMonoColor = aStyleSettings.GetMonoColor();
// Color aGetActiveTabColor = aStyleSettings.GetActiveTabColor();
// Color aGetInactiveTabColor = aStyleSettings.GetInactiveTabColor();
//
// Color aWindowColor = aStyleSettings.GetWindowColor();
// Color aLabelColor = aStyleSettings.GetLabelTextColor();
//
// // if (m_nTextColor == -1)
// // {
// // svtools::ExtendedColorConfig aConfig;
// // m_nTextColor = aConfig.GetColorValue(CFG_REPORTDESIGNER, DBTEXTBOXBOUNDCONTENT).getColor();
// // }
// return aLabelColor.GetColor();
// }
//--------------------------------------------------------------------
FixedTextColor::~FixedTextColor()
{
DBG_DTOR(rpt_FixedTextColor,NULL);
}
// -----------------------------------------------------------------------------
void FixedTextColor::notifyPropertyChange( const beans::PropertyChangeEvent& _rEvent )
{
// (void)_rEvent;
uno::Reference< report::XFixedText > xFixedText( _rEvent.Source, uno::UNO_QUERY );
if ( ! xFixedText.is() )
{
return;
}
try
{
uno::Reference< lang::XComponent > xComponent( xFixedText, uno::UNO_QUERY_THROW );
handle(xComponent);
// uno::Reference<awt::XVclWindowPeer> xVclWindowPeer = getVclWindowPeer(xComponent);
// setPropertyTextColor(xVclWindowPeer, getTextColor());
}
catch (uno::Exception e)
{
DBG_UNHANDLED_EXCEPTION();
}
}
// -----------------------------------------------------------------------------
void FixedTextColor::setPropertyTextColor(const uno::Reference< awt::XVclWindowPeer >& _xVclWindowPeer, sal_Int32 _nTextColor)
{
_xVclWindowPeer->setProperty(PROPERTY_TEXTCOLOR, uno::makeAny(sal_Int32(_nTextColor)));
}
// -----------------------------------------------------------------------------
void FixedTextColor::notifyElementInserted( const uno::Reference< uno::XInterface >& _rxElement )
{
handle(_rxElement);
}
// -----------------------------------------------------------------------------
void FixedTextColor::handle( const uno::Reference< uno::XInterface >& _rxElement )
{
// (void) _rxElement;
uno::Reference< report::XFixedText > xFixedText( _rxElement, uno::UNO_QUERY );
if ( ! xFixedText.is() )
{
return;
}
try
{
sal_Bool bIsDark = sal_False;
const sal_Int32 nBackColor( xFixedText->getControlBackground() );
if ((sal_uInt32)nBackColor == COL_TRANSPARENT)
{
uno::Reference <report::XSection> xSection(xFixedText->getParent(), uno::UNO_QUERY_THROW);
sal_Bool bSectionBackColorIsTransparent = xSection->getBackTransparent();
if (bSectionBackColorIsTransparent)
{
// Label Transparent, Section Transparent set LabelTextColor
const StyleSettings& aStyleSettings = Application::GetSettings().GetStyleSettings();
Color aWindowColor = aStyleSettings.GetWindowColor();
bIsDark = aWindowColor.IsDark();
}
else
{
com::sun::star::util::Color aColor2 = xSection->getBackColor();
Color aBackColor(aColor2);
bIsDark = aBackColor.IsDark();
}
}
else
{
Color aLabelBackColor(nBackColor);
bIsDark = aLabelBackColor.IsDark();
}
uno::Reference<awt::XVclWindowPeer> xVclWindowPeer = getVclWindowPeer(xFixedText);
if (bIsDark)
{
const StyleSettings& aStyleSettings = Application::GetSettings().GetStyleSettings();
Color aLabelTextColor = aStyleSettings.GetLabelTextColor();
setPropertyTextColor(xVclWindowPeer, aLabelTextColor.GetColor());
}
else
{
util::Color aLabelColor = xFixedText->getCharColor();
setPropertyTextColor(xVclWindowPeer, aLabelColor);
}
}
catch( const uno::Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
}
// -----------------------------------------------------------------------------
// XPropertyChangeListener
uno::Reference<awt::XControl> FixedTextColor::getXControl(const uno::Reference< report::XFixedText >& _xFixedText) throw(uno::RuntimeException)
{
uno::Reference<awt::XControl> xControl;
OReportController *pController = (OReportController *)&m_rReportController;
::boost::shared_ptr<OReportModel> pModel = pController->getSdrModel();
uno::Reference<report::XSection> xSection(_xFixedText->getSection());
if ( xSection.is() )
{
OReportPage *pPage = pModel->getPage(xSection);
sal_uLong nIndex = pPage->getIndexOf(_xFixedText.get());
if (nIndex < pPage->GetObjCount() )
{
SdrObject *pObject = pPage->GetObj(nIndex);
OUnoObject* pUnoObj = dynamic_cast<OUnoObject*>(pObject);
if ( pUnoObj ) // this doesn't need to be done for shapes
{
::boost::shared_ptr<OSectionWindow> pSectionWindow = pController->getSectionWindow(xSection);
if( bool(pSectionWindow) )
{
OReportSection& aOutputDevice = pSectionWindow->getReportSection(); // OutputDevice
OSectionView& aSdrView = aOutputDevice.getSectionView(); // SdrView
xControl = pUnoObj->GetUnoControl(aSdrView, aOutputDevice);
}
}
}
}
return xControl;
}
// -----------------------------------------------------------------------------
uno::Reference<awt::XVclWindowPeer> FixedTextColor::getVclWindowPeer(const uno::Reference< report::XFixedText >& _xComponent) throw(uno::RuntimeException)
{
uno::Reference<awt::XVclWindowPeer> xVclWindowPeer;
uno::Reference<awt::XControl> xControl = getXControl(_xComponent);
xVclWindowPeer = uno::Reference<awt::XVclWindowPeer>( xControl->getPeer(), uno::UNO_QUERY);
return xVclWindowPeer;
}
}