/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 .
*/
static Window* ImplGetLabeledBy(Window* pFrameWindow, WindowType nMyType, const Window* pLabeled)
{
Window* pWindow = nullptr; if (pFrameWindow && nMyType != WindowType::GROUPBOX && nMyType != WindowType::FIXEDLINE)
{ // search for a control that labels this window // a label is considered the last fixed text, fixed line or group box // that comes before this control; with the exception of push buttons // which are labeled only if the fixed text, fixed line or group box // is directly before the control
// get form start and form end and index of this control
sal_uInt16 nIndex, nFormStart, nFormEnd;
Window* pSWindow = ::ImplFindDlgCtrlWindow( pFrameWindow,
pLabeled,
nIndex,
nFormStart,
nFormEnd ); if( pSWindow && nIndex != nFormStart )
{ if( nMyType == WindowType::PUSHBUTTON ||
nMyType == WindowType::HELPBUTTON ||
nMyType == WindowType::OKBUTTON ||
nMyType == WindowType::CANCELBUTTON )
{
nFormStart = nIndex-1;
} for( sal_uInt16 nSearchIndex = nIndex-1; nSearchIndex >= nFormStart; nSearchIndex-- )
{
sal_uInt16 nFoundIndex = 0;
pSWindow = ::ImplGetChildWindow( pFrameWindow,
nSearchIndex,
nFoundIndex, false ); if( pSWindow && isVisibleInLayout(pSWindow) && !(pSWindow->GetStyle() & WB_NOLABEL) )
{
WindowType eType = pSWindow->GetType(); if ( eType == WindowType::FIXEDTEXT ||
eType == WindowType::FIXEDLINE ||
eType == WindowType::GROUPBOX )
{ // a fixed text can't be labelled by a fixed text. if ( ( nMyType != WindowType::FIXEDTEXT ) || ( eType != WindowType::FIXEDTEXT ) )
pWindow = pSWindow; break;
}
} if( nFoundIndex > nSearchIndex || nSearchIndex == 0 ) break;
}
}
} return pWindow;
}
// #i62723#, #104191# checkboxes and radiobuttons are not supposed to have labels if( GetType() == WindowType::CHECKBOX || GetType() == WindowType::RADIOBUTTON ) return nullptr;
// if( ! ( GetType() == WindowType::FIXEDTEXT || // GetType() == WindowType::FIXEDLINE || // GetType() == WindowType::GROUPBOX ) ) // #i100833# MT 2010/02: Group box and fixed lines can also label a fixed text. // See tools/options/print for example.
Window* Window::getLegacyNonLayoutAccessibleRelationMemberOf() const
{
Window* pWindow = nullptr;
Window* pFrameWindow = GetParent(); if ( !pFrameWindow )
{
pFrameWindow = ImplGetFrameWindow();
} // if( ! ( GetType() == WindowType::FIXEDTEXT || if( GetType() != WindowType::FIXEDLINE && GetType() != WindowType::GROUPBOX )
{ // search for a control that makes member of this window // it is considered the last fixed line or group box // that comes before this control; with the exception of push buttons // which are labeled only if the fixed line or group box // is directly before the control // get form start and form end and index of this control
sal_uInt16 nIndex, nFormStart, nFormEnd;
Window* pSWindow
= ::ImplFindDlgCtrlWindow(pFrameWindow, this, nIndex, nFormStart, nFormEnd); if( pSWindow && nIndex != nFormStart )
{ if( GetType() == WindowType::PUSHBUTTON ||
GetType() == WindowType::HELPBUTTON ||
GetType() == WindowType::OKBUTTON ||
GetType() == WindowType::CANCELBUTTON )
{
nFormStart = nIndex-1;
} for( sal_uInt16 nSearchIndex = nIndex-1; nSearchIndex >= nFormStart; nSearchIndex-- )
{
sal_uInt16 nFoundIndex = 0;
pSWindow = ::ImplGetChildWindow( pFrameWindow,
nSearchIndex,
nFoundIndex, false ); if( pSWindow && pSWindow->IsVisible() &&
( pSWindow->GetType() == WindowType::FIXEDLINE ||
pSWindow->GetType() == WindowType::GROUPBOX ) )
{
pWindow = pSWindow; break;
} if( nFoundIndex > nSearchIndex || nSearchIndex == 0 ) break;
}
}
} return pWindow;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.