diff options
Diffstat (limited to 'chart2/source/controller/main/ChartWindow.cxx')
-rw-r--r-- | chart2/source/controller/main/ChartWindow.cxx | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/chart2/source/controller/main/ChartWindow.cxx b/chart2/source/controller/main/ChartWindow.cxx new file mode 100644 index 000000000000..240b615cf0f6 --- /dev/null +++ b/chart2/source/controller/main/ChartWindow.cxx @@ -0,0 +1,271 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_chart2.hxx" +#include "ChartWindow.hxx" +#include "ChartController.hxx" +#include "HelpIds.hrc" + +#include <vcl/help.hxx> + +using namespace ::com::sun::star; + +namespace +{ +::Rectangle lcl_AWTRectToVCLRect( const ::com::sun::star::awt::Rectangle & rAWTRect ) +{ + ::Rectangle aResult; + aResult.setX( rAWTRect.X ); + aResult.setY( rAWTRect.Y ); + aResult.setWidth( rAWTRect.Width ); + aResult.setHeight( rAWTRect.Height ); + return aResult; +} +} // anonymous namespace + + +//............................................................................. +namespace chart +{ +//............................................................................. + +ChartWindow::ChartWindow( WindowController* pWindowController, Window* pParent, WinBits nStyle ) + : Window(pParent, nStyle) + , m_pWindowController( pWindowController ) + , m_bInPaint(false) +{ + this->SetSmartHelpId( SmartId( HID_SCH_WIN_DOCUMENT ) ); + this->SetMapMode( MapMode(MAP_100TH_MM) ); + adjustHighContrastMode(); + // chart does not depend on exact pixel painting => enable antialiased drawing + SetAntialiasing( ANTIALIASING_ENABLE_B2DDRAW | GetAntialiasing() ); + EnableRTL( FALSE ); + if( pParent ) + pParent->EnableRTL( FALSE );// #i96215# necessary for a correct position of the context menu in rtl mode +} + +ChartWindow::~ChartWindow() +{ +} + +void ChartWindow::clear() +{ + m_pWindowController=0; + this->ReleaseMouse(); +} + +void ChartWindow::PrePaint() +{ + // forward VCLs PrePaint window event to DrawingLayer + if( m_pWindowController ) + { + m_pWindowController->PrePaint(); + } +} + +void ChartWindow::Paint( const Rectangle& rRect ) +{ + m_bInPaint = true; + if( m_pWindowController ) + m_pWindowController->execute_Paint( rRect ); + else + Window::Paint( rRect ); + m_bInPaint = false; +} + +void ChartWindow::MouseButtonDown(const MouseEvent& rMEvt) +{ + if( m_pWindowController ) + m_pWindowController->execute_MouseButtonDown(rMEvt); + else + Window::MouseButtonDown(rMEvt); +} + +void ChartWindow::MouseMove( const MouseEvent& rMEvt ) +{ + if( m_pWindowController ) + m_pWindowController->execute_MouseMove( rMEvt ); + else + Window::MouseMove( rMEvt ); +} + +void ChartWindow::Tracking( const TrackingEvent& rTEvt ) +{ + if( m_pWindowController ) + m_pWindowController->execute_Tracking( rTEvt ); + else + Window::Tracking( rTEvt ); +} + +void ChartWindow::MouseButtonUp( const MouseEvent& rMEvt ) +{ + if( m_pWindowController ) + m_pWindowController->execute_MouseButtonUp( rMEvt ); + else + Window::MouseButtonUp( rMEvt ); +} + +void ChartWindow::Resize() +{ + if( m_pWindowController ) + m_pWindowController->execute_Resize(); + else + Window::Resize(); +} + +void ChartWindow::Activate() +{ + if( m_pWindowController ) + m_pWindowController->execute_Activate(); + else + Window::Activate(); +} +void ChartWindow::Deactivate() +{ + if( m_pWindowController ) + m_pWindowController->execute_Deactivate(); + else + Window::Deactivate(); +} +void ChartWindow::GetFocus() +{ + if( m_pWindowController ) + m_pWindowController->execute_GetFocus(); + else + Window::GetFocus(); +} +void ChartWindow::LoseFocus() +{ + if( m_pWindowController ) + m_pWindowController->execute_LoseFocus(); + else + Window::LoseFocus(); +} + +void ChartWindow::Command( const CommandEvent& rCEvt ) +{ + if( m_pWindowController ) + m_pWindowController->execute_Command( rCEvt ); + else + Window::Command( rCEvt ); +} + +void ChartWindow::KeyInput( const KeyEvent& rKEvt ) +{ + if( m_pWindowController ) + { + if( !m_pWindowController->execute_KeyInput(rKEvt) ) + Window::KeyInput(rKEvt); + } + else + Window::KeyInput( rKEvt ); +} + +uno::Reference< accessibility::XAccessible > ChartWindow::CreateAccessible() +{ + if( m_pWindowController ) + return m_pWindowController->CreateAccessible(); + else + return Window::CreateAccessible(); +} + +void ChartWindow::DataChanged( const DataChangedEvent& rDCEvt ) +{ + ::Window::DataChanged( rDCEvt ); + + if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && + (rDCEvt.GetFlags() & SETTINGS_STYLE) ) + { + adjustHighContrastMode(); + } +} + +void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) +{ + bool bHelpHandled = false; + if( ( rHEvt.GetMode() & HELPMODE_QUICK ) && + m_pWindowController ) + { +// Point aLogicHitPos = PixelToLogic( rHEvt.GetMousePosPixel()); // old chart: GetPointerPosPixel() + Point aLogicHitPos = PixelToLogic( GetPointerPosPixel()); + ::rtl::OUString aQuickHelpText; + awt::Rectangle aHelpRect; + bool bIsBalloonHelp( Help::IsBalloonHelpEnabled() ); + bHelpHandled = m_pWindowController->requestQuickHelp( aLogicHitPos, bIsBalloonHelp, aQuickHelpText, aHelpRect ); + + if( bHelpHandled ) + { + if( bIsBalloonHelp ) + Help::ShowBalloon( + this, rHEvt.GetMousePosPixel(), lcl_AWTRectToVCLRect( aHelpRect ), String( aQuickHelpText )); + else + Help::ShowQuickHelp( + this, lcl_AWTRectToVCLRect( aHelpRect ), String( aQuickHelpText )); + } + } + + if( !bHelpHandled ) + ::Window::RequestHelp( rHEvt ); +} + +void ChartWindow::adjustHighContrastMode() +{ + static const sal_Int32 nContrastMode = + DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | + DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT; + + bool bUseContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); + SetDrawMode( bUseContrast ? nContrastMode : DRAWMODE_DEFAULT ); +} + +void ChartWindow::ForceInvalidate() +{ + ::Window::Invalidate(); +} +void ChartWindow::Invalidate( USHORT nFlags ) +{ + if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" + return; + ::Window::Invalidate( nFlags ); +} +void ChartWindow::Invalidate( const Rectangle& rRect, USHORT nFlags ) +{ + if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" + return; + ::Window::Invalidate( rRect, nFlags ); +} +void ChartWindow::Invalidate( const Region& rRegion, USHORT nFlags ) +{ + if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" + return; + ::Window::Invalidate( rRegion, nFlags ); +} + +//............................................................................. +} //namespace chart +//............................................................................. |