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 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_chart2.hxx" 26 #include "ChartWindow.hxx" 27 #include "ChartController.hxx" 28 #include "HelpIds.hrc" 29 30 #include <vcl/help.hxx> 31 32 using namespace ::com::sun::star; 33 34 namespace 35 { 36 ::Rectangle lcl_AWTRectToVCLRect( const ::com::sun::star::awt::Rectangle & rAWTRect ) 37 { 38 ::Rectangle aResult; 39 aResult.setX( rAWTRect.X ); 40 aResult.setY( rAWTRect.Y ); 41 aResult.setWidth( rAWTRect.Width ); 42 aResult.setHeight( rAWTRect.Height ); 43 return aResult; 44 } 45 } // anonymous namespace 46 47 48 //............................................................................. 49 namespace chart 50 { 51 //............................................................................. 52 53 ChartWindow::ChartWindow( WindowController* pWindowController, Window* pParent, WinBits nStyle ) 54 : Window(pParent, nStyle) 55 , m_pWindowController( pWindowController ) 56 , m_bInPaint(false) 57 { 58 this->SetHelpId( HID_SCH_WIN_DOCUMENT ); 59 this->SetMapMode( MapMode(MAP_100TH_MM) ); 60 adjustHighContrastMode(); 61 // chart does not depend on exact pixel painting => enable antialiased drawing 62 SetAntialiasing( ANTIALIASING_ENABLE_B2DDRAW | GetAntialiasing() ); 63 EnableRTL( sal_False ); 64 if( pParent ) 65 pParent->EnableRTL( sal_False );// #i96215# necessary for a correct position of the context menu in rtl mode 66 } 67 68 ChartWindow::~ChartWindow() 69 { 70 } 71 72 void ChartWindow::clear() 73 { 74 m_pWindowController=0; 75 this->ReleaseMouse(); 76 } 77 78 void ChartWindow::PrePaint() 79 { 80 // forward VCLs PrePaint window event to DrawingLayer 81 if( m_pWindowController ) 82 { 83 m_pWindowController->PrePaint(); 84 } 85 } 86 87 void ChartWindow::Paint( const Rectangle& rRect ) 88 { 89 m_bInPaint = true; 90 if( m_pWindowController ) 91 m_pWindowController->execute_Paint( rRect ); 92 else 93 Window::Paint( rRect ); 94 m_bInPaint = false; 95 } 96 97 void ChartWindow::MouseButtonDown(const MouseEvent& rMEvt) 98 { 99 if( m_pWindowController ) 100 m_pWindowController->execute_MouseButtonDown(rMEvt); 101 else 102 Window::MouseButtonDown(rMEvt); 103 } 104 105 void ChartWindow::MouseMove( const MouseEvent& rMEvt ) 106 { 107 if( m_pWindowController ) 108 m_pWindowController->execute_MouseMove( rMEvt ); 109 else 110 Window::MouseMove( rMEvt ); 111 } 112 113 void ChartWindow::Tracking( const TrackingEvent& rTEvt ) 114 { 115 if( m_pWindowController ) 116 m_pWindowController->execute_Tracking( rTEvt ); 117 else 118 Window::Tracking( rTEvt ); 119 } 120 121 void ChartWindow::MouseButtonUp( const MouseEvent& rMEvt ) 122 { 123 if( m_pWindowController ) 124 m_pWindowController->execute_MouseButtonUp( rMEvt ); 125 else 126 Window::MouseButtonUp( rMEvt ); 127 } 128 129 void ChartWindow::Resize() 130 { 131 if( m_pWindowController ) 132 m_pWindowController->execute_Resize(); 133 else 134 Window::Resize(); 135 } 136 137 void ChartWindow::Activate() 138 { 139 if( m_pWindowController ) 140 m_pWindowController->execute_Activate(); 141 else 142 Window::Activate(); 143 } 144 void ChartWindow::Deactivate() 145 { 146 if( m_pWindowController ) 147 m_pWindowController->execute_Deactivate(); 148 else 149 Window::Deactivate(); 150 } 151 void ChartWindow::GetFocus() 152 { 153 if( m_pWindowController ) 154 m_pWindowController->execute_GetFocus(); 155 else 156 Window::GetFocus(); 157 } 158 void ChartWindow::LoseFocus() 159 { 160 if( m_pWindowController ) 161 m_pWindowController->execute_LoseFocus(); 162 else 163 Window::LoseFocus(); 164 } 165 166 void ChartWindow::Command( const CommandEvent& rCEvt ) 167 { 168 if( m_pWindowController ) 169 m_pWindowController->execute_Command( rCEvt ); 170 else 171 Window::Command( rCEvt ); 172 } 173 174 void ChartWindow::KeyInput( const KeyEvent& rKEvt ) 175 { 176 if( m_pWindowController ) 177 { 178 if( !m_pWindowController->execute_KeyInput(rKEvt) ) 179 Window::KeyInput(rKEvt); 180 } 181 else 182 Window::KeyInput( rKEvt ); 183 } 184 185 uno::Reference< accessibility::XAccessible > ChartWindow::CreateAccessible() 186 { 187 if( m_pWindowController ) 188 return m_pWindowController->CreateAccessible(); 189 else 190 return Window::CreateAccessible(); 191 } 192 193 void ChartWindow::DataChanged( const DataChangedEvent& rDCEvt ) 194 { 195 ::Window::DataChanged( rDCEvt ); 196 197 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && 198 (rDCEvt.GetFlags() & SETTINGS_STYLE) ) 199 { 200 adjustHighContrastMode(); 201 } 202 } 203 204 void ChartWindow::RequestHelp( const HelpEvent& rHEvt ) 205 { 206 bool bHelpHandled = false; 207 if( ( rHEvt.GetMode() & HELPMODE_QUICK ) && 208 m_pWindowController ) 209 { 210 // Point aLogicHitPos = PixelToLogic( rHEvt.GetMousePosPixel()); // old chart: GetPointerPosPixel() 211 Point aLogicHitPos = PixelToLogic( GetPointerPosPixel()); 212 ::rtl::OUString aQuickHelpText; 213 awt::Rectangle aHelpRect; 214 bool bIsBalloonHelp( Help::IsBalloonHelpEnabled() ); 215 bHelpHandled = m_pWindowController->requestQuickHelp( aLogicHitPos, bIsBalloonHelp, aQuickHelpText, aHelpRect ); 216 217 if( bHelpHandled ) 218 { 219 if( bIsBalloonHelp ) 220 Help::ShowBalloon( 221 this, rHEvt.GetMousePosPixel(), lcl_AWTRectToVCLRect( aHelpRect ), String( aQuickHelpText )); 222 else 223 Help::ShowQuickHelp( 224 this, lcl_AWTRectToVCLRect( aHelpRect ), String( aQuickHelpText )); 225 } 226 } 227 228 if( !bHelpHandled ) 229 ::Window::RequestHelp( rHEvt ); 230 } 231 232 void ChartWindow::adjustHighContrastMode() 233 { 234 static const sal_Int32 nContrastMode = 235 DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | 236 DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT; 237 238 bool bUseContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 239 SetDrawMode( bUseContrast ? nContrastMode : DRAWMODE_DEFAULT ); 240 } 241 242 void ChartWindow::ForceInvalidate() 243 { 244 ::Window::Invalidate(); 245 } 246 void ChartWindow::Invalidate( sal_uInt16 nFlags ) 247 { 248 if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" 249 return; 250 ::Window::Invalidate( nFlags ); 251 } 252 void ChartWindow::Invalidate( const Rectangle& rRect, sal_uInt16 nFlags ) 253 { 254 if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" 255 return; 256 ::Window::Invalidate( rRect, nFlags ); 257 } 258 void ChartWindow::Invalidate( const Region& rRegion, sal_uInt16 nFlags ) 259 { 260 if( m_bInPaint ) // #i101928# superfluous paint calls while entering and editing charts" 261 return; 262 ::Window::Invalidate( rRegion, nFlags ); 263 } 264 265 //............................................................................. 266 } //namespace chart 267 //............................................................................. 268