LibreOffice Module vcl (master) 1
ctrl.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <comphelper/lok.hxx>
21#include <o3tl/safeint.hxx>
22#include <vcl/svapp.hxx>
23#include <vcl/event.hxx>
24#include <vcl/ctrl.hxx>
25#include <vcl/decoview.hxx>
26#include <vcl/mnemonic.hxx>
27#include <vcl/settings.hxx>
28#include <vcl/uitest/logger.hxx>
29#include <vcl/DocWindow.hxx>
30#include <sal/log.hxx>
31
32#include <textlayout.hxx>
33#include <svdata.hxx>
34
35using namespace vcl;
36
38{
39 mbHasControlFocus = false;
40 mbShowAccelerator = false;
41}
42
44 Window( nType )
45{
47}
48
51{
53 ImplInit( pParent, nStyle, nullptr );
54}
55
57{
59}
60
62{
63 mxLayoutData.reset();
65 Window::dispose();
66}
67
68void Control::EnableRTL( bool bEnable )
69{
70 // convenience: for controls also switch layout mode
74 Window::EnableRTL(bEnable);
75}
76
78{
80 Window::Resize();
81}
82
84{
85}
86
88{
89 SAL_WARN_IF( mxLayoutData, "vcl", "Control::CreateLayoutData: should be called with non-existent layout data only!" );
90 mxLayoutData.emplace();
91}
92
94{
95 return bool(mxLayoutData);
96}
97
98void Control::SetText( const OUString& rStr )
99{
101 Window::SetText( rStr );
102}
103
104ControlLayoutData::ControlLayoutData() : m_pParent( nullptr )
105{
106}
107
109{
111}
112
114{
115 if( !HasLayoutData() )
116 FillLayoutData();
117 return mxLayoutData ? mxLayoutData->GetCharacterBounds( nIndex ) : tools::Rectangle();
118}
119
121{
122 tools::Long nIndex = -1;
123 for( tools::Long i = m_aUnicodeBoundRects.size()-1; i >= 0; i-- )
124 {
125 Point aTopLeft = m_aUnicodeBoundRects[i].TopLeft();
126 Point aBottomRight = m_aUnicodeBoundRects[i].BottomRight();
127 if (rPoint.X() >= aTopLeft.X() && rPoint.Y() >= aTopLeft.Y() &&
128 rPoint.X() <= aBottomRight.X() && rPoint.Y() <= aBottomRight.Y())
129 {
130 nIndex = i;
131 break;
132 }
133 }
134 return nIndex;
135}
136
137tools::Long Control::GetIndexForPoint( const Point& rPoint ) const
138{
139 if( ! HasLayoutData() )
140 FillLayoutData();
141 return mxLayoutData ? mxLayoutData->GetIndexForPoint( rPoint ) : -1;
142}
143
145{
146 tools::Long nLines = m_aLineIndices.size();
147 if( nLines == 0 && !m_aDisplayText.isEmpty() )
148 nLines = 1;
149 return nLines;
151
153{
154 Pair aPair( -1, -1 );
155
156 int nDisplayLines = m_aLineIndices.size();
157 if( nLine >= 0 && nLine < nDisplayLines )
158 {
159 aPair.A() = m_aLineIndices[nLine];
160 if( nLine+1 < nDisplayLines )
161 aPair.B() = m_aLineIndices[nLine+1]-1;
162 else
163 aPair.B() = m_aDisplayText.getLength()-1;
164 }
165 else if( nLine == 0 && nDisplayLines == 0 && !m_aDisplayText.isEmpty() )
166 {
167 // special case for single line controls so the implementations
168 // in that case do not have to fill in the line indices
169 aPair.A() = 0;
170 aPair.B() = m_aDisplayText.getLength()-1;
171 }
172 return aPair;
173}
174
176{
177 if( !HasLayoutData() )
178 FillLayoutData();
179 return mxLayoutData ? mxLayoutData->GetLineStartEnd( nLine ) : Pair( -1, -1 );
180}
181
183{
184 // is the index sensible at all ?
185 if( nIndex >= 0 && nIndex < m_aDisplayText.getLength() )
186 {
187 int nDisplayLines = m_aLineIndices.size();
188 // if only 1 line exists, then absolute and relative index are
189 // identical -> do nothing
190 if( nDisplayLines > 1 )
191 {
192 int nLine;
193 for( nLine = nDisplayLines-1; nLine >= 0; nLine-- )
194 {
195 if( m_aLineIndices[nLine] <= nIndex )
197 nIndex -= m_aLineIndices[nLine];
198 break;
199 }
200 }
201 if( nLine < 0 )
202 {
203 SAL_WARN_IF( nLine < 0, "vcl", "ToRelativeLineIndex failed" );
204 nIndex = -1;
205 }
206 }
207 }
208 else
209 nIndex = -1;
210
211 return nIndex;
212}
213
215{
216 if( !HasLayoutData() )
217 FillLayoutData();
218 return mxLayoutData ? mxLayoutData->ToRelativeLineIndex( nIndex ) : -1;
219}
220
222{
223 if( !HasLayoutData() )
224 FillLayoutData();
225 return mxLayoutData ? mxLayoutData->m_aDisplayText : GetText();
226}
227
229{
230 return ImplIsWindowOrChild(pFocusWin);
231}
232
234{
235 if ( rNEvt.GetType() == NotifyEventType::GETFOCUS )
236 {
237 if ( !mbHasControlFocus )
238 {
239 mbHasControlFocus = true;
240 CompatStateChanged( StateChangedType::ControlFocus );
241 if ( ImplCallEventListenersAndHandler( VclEventId::ControlGetFocus, {} ) )
242 // been destroyed within the handler
243 return true;
244 }
245 }
246 else
247 {
248 if ( rNEvt.GetType() == NotifyEventType::LOSEFOCUS )
249 {
251 if ( !pFocusWin || !FocusWindowBelongsToControl(pFocusWin) )
252 {
253 mbHasControlFocus = false;
254 CompatStateChanged( StateChangedType::ControlFocus );
255 if ( ImplCallEventListenersAndHandler( VclEventId::ControlLoseFocus, [this] () { maLoseFocusHdl.Call(*this); } ) )
256 // been destroyed within the handler
257 return true;
258 }
259 }
260 }
261 return Window::EventNotify( rNEvt );
262}
263
265{
266 if( nStateChange == StateChangedType::InitShow ||
267 nStateChange == StateChangedType::Visible ||
268 nStateChange == StateChangedType::Zoom ||
269 nStateChange == StateChangedType::ControlFont
270 )
271 {
272 ImplClearLayoutData();
273 }
274 Window::StateChanged( nStateChange );
275}
276
277void Control::AppendLayoutData( const Control& rSubControl ) const
278{
279 if( !rSubControl.HasLayoutData() )
280 rSubControl.FillLayoutData();
281 if( !rSubControl.HasLayoutData() || rSubControl.mxLayoutData->m_aDisplayText.isEmpty() )
282 return;
283
284 tools::Long nCurrentIndex = mxLayoutData->m_aDisplayText.getLength();
285 mxLayoutData->m_aDisplayText += rSubControl.mxLayoutData->m_aDisplayText;
286 int nLines = rSubControl.mxLayoutData->m_aLineIndices.size();
287 int n;
288 mxLayoutData->m_aLineIndices.push_back( nCurrentIndex );
289 for( n = 1; n < nLines; n++ )
290 mxLayoutData->m_aLineIndices.push_back( rSubControl.mxLayoutData->m_aLineIndices[n] + nCurrentIndex );
291 int nRectangles = rSubControl.mxLayoutData->m_aUnicodeBoundRects.size();
292 tools::Rectangle aRel = rSubControl.GetWindowExtentsRelative(this);
293 for( n = 0; n < nRectangles; n++ )
294 {
295 tools::Rectangle aRect = rSubControl.mxLayoutData->m_aUnicodeBoundRects[n];
296 aRect.Move( aRel.Left(), aRel.Top() );
297 mxLayoutData->m_aUnicodeBoundRects.push_back( aRect );
298 }
299}
300
301void Control::CallEventListeners( VclEventId nEvent, void* pData)
302{
303 VclPtr<Control> xThis(this);
304 UITestLogger::getInstance().logAction(xThis, nEvent);
305
307}
308
309bool Control::ImplCallEventListenersAndHandler( VclEventId nEvent, std::function<void()> const & callHandler )
310{
311 VclPtr<Control> xThis(this);
312
314
315 if ( !xThis->isDisposed() )
316 {
317 if (callHandler)
318 {
319 callHandler();
320 }
321
322 if ( !xThis->isDisposed() )
323 return false;
324 }
325 return true;
326}
327
328void Control::SetLayoutDataParent( const Control* pParent ) const
329{
330 if( HasLayoutData() )
331 mxLayoutData->m_pParent = pParent;
332}
333
335{
336 mxLayoutData.reset();
337}
338
340{
341 // use a deco view to draw the frame
342 // However, since there happens a lot of magic there, we need to fake some (style) settings
343 // on the device
344 AllSettings aOriginalSettings( pDev->GetSettings() );
345
346 AllSettings aNewSettings( aOriginalSettings );
347 StyleSettings aStyle( aNewSettings.GetStyleSettings() );
348
349 // The *only known* clients of the Draw methods of the various VCL-controls are form controls:
350 // During print preview, and during printing, Draw is called. Thus, drawing always happens with a
351 // mono (colored) border
353 aStyle.SetMonoColor( GetSettings().GetStyleSettings().GetMonoColor() );
354
355 aNewSettings.SetStyleSettings( aStyle );
356 // #i67023# do not call data changed listeners for this fake
357 // since they may understandably invalidate on settings changed
358 pDev->OutputDevice::SetSettings( aNewSettings );
359
360 DecorationView aDecoView( pDev );
362
363 pDev->OutputDevice::SetSettings( aOriginalSettings );
364}
365
367{
368 mbShowAccelerator = bVal;
369};
370
372{
373 if( m_pParent )
375}
376
378{
379 return Size( GetTextWidth( GetText() ) + 2 * 12,
380 GetTextHeight() + 2 * 6 );
381}
382
384{
385 if ( mpReferenceDevice == _referenceDevice )
386 return;
387
388 mpReferenceDevice = _referenceDevice;
389 Invalidate();
390}
391
393{
394 // tdf#118377 It can happen that mpReferenceDevice is already disposed and
395 // stays disposed (see task, even when Dialog is closed). I have no idea if
396 // this may be very bad - someone who knows more about lifetime of OutputDevice's
397 // will have to decide.
398 // To secure this, I changed all accesses to mpControlData->mpReferenceDevice to
399 // use Control::GetReferenceDevice() - only use mpControlData->mpReferenceDevice
400 // inside Control::SetReferenceDevice and Control::GetReferenceDevice().
401 // Control::GetReferenceDevice() will now reset mpReferenceDevice if it is already
402 // disposed. This way all usages will do a kind of 'test-and-get' call.
403 if(nullptr != mpReferenceDevice && mpReferenceDevice->isDisposed())
404 {
405 const_cast<Control*>(this)->SetReferenceDevice(nullptr);
406 }
407
408 return mpReferenceDevice;
409}
410
412{
413 return _rStyle.GetLabelFont();
414}
415
417{
418 return _rStyle.GetLabelTextColor();
419}
420
422{
423 const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
424
425 ApplyControlFont(rRenderContext, GetCanonicalFont(rStyleSettings));
426
427 ApplyControlForeground(rRenderContext, GetCanonicalTextColor(rStyleSettings));
428 rRenderContext.SetTextFillColor();
429}
430
432{
433 ApplySettings(*GetOutDev());
434}
435
436tools::Rectangle Control::DrawControlText( OutputDevice& _rTargetDevice, const tools::Rectangle& rRect, const OUString& _rStr,
437 DrawTextFlags _nStyle, std::vector< tools::Rectangle >* _pVector, OUString* _pDisplayText, const Size* i_pDeviceSize ) const
438{
439 OUString rPStr = _rStr;
440 DrawTextFlags nPStyle = _nStyle;
441
442 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
443
444 if (autoacc && !mbShowAccelerator)
445 {
446 rPStr = removeMnemonicFromString( _rStr );
447 nPStyle &= ~DrawTextFlags::HideMnemonic;
448 }
449
450 if( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
451 {
452 const tools::Rectangle aRet = _rTargetDevice.GetTextRect(rRect, rPStr, nPStyle);
453 _rTargetDevice.DrawText(aRet, rPStr, nPStyle, _pVector, _pDisplayText);
454 return aRet;
455 }
456
457 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
458 return aRenderer.DrawText(rRect, rPStr, nPStyle, _pVector, _pDisplayText, i_pDeviceSize);
459}
460
462 const OUString& _rStr, DrawTextFlags _nStyle, Size* o_pDeviceSize ) const
463{
464 OUString rPStr = _rStr;
465 DrawTextFlags nPStyle = _nStyle;
466
467 bool autoacc = ImplGetSVData()->maNWFData.mbAutoAccel;
468
469 if (autoacc && !mbShowAccelerator)
470 {
471 rPStr = removeMnemonicFromString( _rStr );
472 nPStyle &= ~DrawTextFlags::HideMnemonic;
473 }
474
475 if ( !GetReferenceDevice() || ( GetReferenceDevice() == &_rTargetDevice ) )
476 {
477 tools::Rectangle aRet = _rTargetDevice.GetTextRect( rRect, rPStr, nPStyle );
478 if (o_pDeviceSize)
479 {
480 *o_pDeviceSize = aRet.GetSize();
481 }
482 return aRet;
483 }
484
485 ControlTextRenderer aRenderer( *this, _rTargetDevice, *GetReferenceDevice() );
486 return aRenderer.GetTextRect(rRect, rPStr, nPStyle, o_pDeviceSize);
487}
488
489Font
491{
492 Font aFont(GetCanonicalFont(GetSettings().GetStyleSettings()));
493 if (IsControlFont())
494 aFont.Merge(GetControlFont());
495 return aFont;
496}
497
499{
500 VclPtr<vcl::Window> pParent = GetParentWithLOKNotifier();
501 if (!pParent || !dynamic_cast<vcl::DocWindow*>(GetParent()))
502 {
503 // if control doesn't belong to a DocWindow, the overridden base class
504 // method has to be invoked
505 Window::LogicInvalidate(pRectangle);
506 return;
507 }
508
509 // avoid endless paint/invalidate loop in Impress
511 return;
512
513 tools::Rectangle aResultRectangle;
514 if (!pRectangle)
515 {
516 // we have to invalidate the whole control area not the whole document
517 aResultRectangle = tools::Rectangle(GetPosPixel(), GetSizePixel());
518 }
519 else
520 {
521 aResultRectangle = *pRectangle;
522 }
523
524 aResultRectangle = PixelToLogic(aResultRectangle, MapMode(MapUnit::MapTwip));
525 pParent->GetLOKNotifier()->notifyInvalidation(&aResultRectangle);
526}
527
528/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
DrawTextFlags
const StyleSettings & GetStyleSettings() const
void SetStyleSettings(const StyleSettings &rSet)
static vcl::Window * GetFocusWindow()
Get the currently focused window.
Definition: svapp.cxx:1055
Definition: ctrl.hxx:82
OutputDevice * GetReferenceDevice() const
Definition: ctrl.cxx:392
virtual void ApplySettings(vcl::RenderContext &rRenderContext) override
Definition: ctrl.cxx:421
std::optional< vcl::ControlLayoutData > mxLayoutData
Definition: ctrl.hxx:84
void CreateLayoutData() const
creates the mpData->mpLayoutData structure
Definition: ctrl.cxx:87
vcl::Font GetUnzoomedControlPointFont() const
Definition: ctrl.cxx:490
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:137
VclPtr< OutputDevice > mpReferenceDevice
Definition: ctrl.hxx:85
SAL_DLLPRIVATE void ImplClearLayoutData() const
Definition: ctrl.cxx:334
tools::Rectangle DrawControlText(OutputDevice &_rTargetDevice, const tools::Rectangle &_rRect, const OUString &_rStr, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize=nullptr) const
draws the given text onto the given device
Definition: ctrl.cxx:436
virtual void LogicInvalidate(const tools::Rectangle *pRectangle) override
Notify the LOK client about an invalidated area.
Definition: ctrl.cxx:498
virtual void FillLayoutData() const
Definition: ctrl.cxx:83
Control(const Control &)=delete
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:214
bool mbHasControlFocus
Definition: ctrl.hxx:88
virtual const Color & GetCanonicalTextColor(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:416
bool ImplCallEventListenersAndHandler(VclEventId nEvent, std::function< void()> const &callHandler)
this calls both our event listeners, and a specified handler
Definition: ctrl.cxx:309
Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:175
void SetLayoutDataParent(const Control *pParent) const
Definition: ctrl.cxx:328
virtual bool EventNotify(NotifyEvent &rNEvt) override
Definition: ctrl.cxx:233
tools::Rectangle GetControlTextRect(OutputDevice &_rTargetDevice, const tools::Rectangle &rRect, const OUString &_rStr, DrawTextFlags _nStyle, Size *o_pDeviceSize=nullptr) const
Definition: ctrl.cxx:461
virtual void StateChanged(StateChangedType nStateChange) override
Definition: ctrl.cxx:264
SAL_DLLPRIVATE void ImplInitControlData()
Definition: ctrl.cxx:37
virtual void Resize() override
Definition: ctrl.cxx:77
virtual ~Control() override
Definition: ctrl.cxx:56
virtual void EnableRTL(bool bEnable=true) override
Definition: ctrl.cxx:68
bool HasLayoutData() const
determines whether we currently have layout data
Definition: ctrl.cxx:93
bool mbShowAccelerator
Definition: ctrl.hxx:89
void SetReferenceDevice(OutputDevice *_referenceDevice)
sets a reference device used for rendering control text
Definition: ctrl.cxx:383
virtual void SetText(const OUString &rStr) override
Definition: ctrl.cxx:98
virtual OUString GetDisplayText() const override
Definition: ctrl.cxx:221
virtual Size GetOptimalSize() const override
Definition: ctrl.cxx:377
void AppendLayoutData(const Control &rSubControl) const
Definition: ctrl.cxx:277
SAL_DLLPRIVATE void ImplDrawFrame(OutputDevice *pDev, tools::Rectangle &rRect)
draws a frame around the give rectangle, onto the given device
Definition: ctrl.cxx:339
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: ctrl.cxx:301
void ImplInitSettings()
Definition: ctrl.cxx:431
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:113
virtual const vcl::Font & GetCanonicalFont(const StyleSettings &_rStyle) const
Definition: ctrl.cxx:411
void SetShowAccelerator(bool val)
Definition: ctrl.cxx:366
virtual void dispose() override
This is intended to be used to clear any locally held references to other Window-subclass objects.
Definition: ctrl.cxx:61
virtual bool FocusWindowBelongsToControl(const vcl::Window *pFocusWin) const
Definition: ctrl.cxx:228
void DrawFrame(const tools::Rectangle &rRect, const Color &rLeftTopColor, const Color &rRightBottomColor)
Definition: decoview.cxx:811
NotifyEventType GetType() const
Definition: event.hxx:308
Some things multiple-inherit from VclAbstractDialog and OutputDevice, so we need to use virtual inher...
Definition: outdev.hxx:170
tools::Rectangle GetTextRect(const tools::Rectangle &rRect, const OUString &rStr, DrawTextFlags nStyle=DrawTextFlags::WordBreak, TextRectInfo *pInfo=nullptr, const vcl::ITextLayout *_pTextLayout=nullptr) const
Definition: text.cxx:1894
void SetTextFillColor()
Definition: text.cxx:734
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
Definition: text.cxx:797
void SetLayoutMode(vcl::text::ComplexTextLayoutFlags nTextLayoutMode)
Definition: text.cxx:60
const AllSettings & GetSettings() const
Definition: outdev.hxx:288
tools::Long A() const
tools::Long B() const
StyleSettingsOptions GetOptions() const
const Color & GetLabelTextColor() const
const vcl::Font & GetLabelFont() const
void SetMonoColor(const Color &rColor)
void SetOptions(StyleSettingsOptions nOptions)
void logAction(VclPtr< Control > const &xUIElement, VclEventId nEvent)
Definition: logger.cxx:147
static UITestLogger & getInstance()
Definition: logger.cxx:611
void clear()
Definition: vclptr.hxx:190
bool isDisposed() const
constexpr tools::Long Top() const
constexpr Size GetSize() const
void Move(tools::Long nHorzMoveDelta, tools::Long nVertMoveDelta)
constexpr tools::Long Left() const
a class which allows rendering text of a Control onto a device, by taking into account the metrics of...
Definition: textlayout.hxx:88
tools::Rectangle DrawText(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, std::vector< tools::Rectangle > *_pVector, OUString *_pDisplayText, const Size *i_pDeviceSize)
Definition: textlayout.cxx:336
tools::Rectangle GetTextRect(const tools::Rectangle &_rRect, const OUString &_rText, DrawTextFlags _nStyle, Size *o_pDeviceSize)
Definition: textlayout.cxx:342
void Merge(const Font &rFont)
Definition: font/font.cxx:358
virtual void notifyInvalidation(tools::Rectangle const *) const =0
Emits a LOK_CALLBACK_INVALIDATE_TILES.
virtual void StateChanged(StateChangedType nStateChange)
Definition: window.cxx:1943
::OutputDevice const * GetOutDev() const
Definition: window.cxx:567
const vcl::ILibreOfficeKitNotifier * GetLOKNotifier() const
Definition: window.cxx:3252
virtual void LogicInvalidate(const tools::Rectangle *pRectangle)
Notification about some rectangle of the output device got invalidated.Used for the main document win...
Definition: paint.cxx:1190
tools::Rectangle GetWindowExtentsRelative(const vcl::Window *pRelativeWindow) const
Definition: window.cxx:2916
void CallEventListeners(VclEventId nEvent, void *pData=nullptr)
Definition: event.cxx:219
virtual bool EventNotify(NotifyEvent &rNEvt)
Definition: event.cxx:104
SAL_DLLPRIVATE void ImplInit(vcl::Window *pParent, WinBits nStyle, SystemParentData *pSystemParentData)
Definition: window.cxx:941
SAL_DLLPRIVATE void CompatStateChanged(StateChangedType nStateChange)
Definition: window.cxx:3904
sal_Int32 nIndex
sal_Int64 n
#define SAL_WARN_IF(condition, area, stream)
std::unique_ptr< sal_Int32[]> pData
int i
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
long Long
QPRO_FUNC_TYPE nType
ImplSVNWFData maNWFData
Definition: svdata.hxx:405
bool mbAutoAccel
Definition: svdata.hxx:341
::Pair GetLineStartEnd(tools::Long nLine) const
Definition: ctrl.cxx:152
tools::Long ToRelativeLineIndex(tools::Long nIndex) const
ToRelativeLineIndex changes a layout data index to a count relative to its line.
Definition: ctrl.cxx:182
tools::Long GetIndexForPoint(const Point &rPoint) const
Definition: ctrl.cxx:120
tools::Rectangle GetCharacterBounds(tools::Long nIndex) const
Definition: ctrl.cxx:108
std::vector< tools::Rectangle > m_aUnicodeBoundRects
Definition: ctrl.hxx:46
std::vector< tools::Long > m_aLineIndices
Definition: ctrl.hxx:48
VclPtr< const Control > m_pParent
Definition: ctrl.hxx:50
tools::Long GetLineCount() const
Definition: ctrl.cxx:144
OUString m_aDisplayText
Definition: ctrl.hxx:43
ImplSVData * ImplGetSVData()
Definition: svdata.cxx:77
OUString removeMnemonicFromString(OUString const &rStr)
VclEventId
Definition: vclevent.hxx:38
StateChangedType
Definition: window.hxx:291
sal_Int64 WinBits
Definition: wintypes.hxx:109
WindowType
Definition: wintypes.hxx:27