diff options
Diffstat (limited to 'cui/source/tabpages/swpossizetabpage.cxx')
-rw-r--r-- | cui/source/tabpages/swpossizetabpage.cxx | 1867 |
1 files changed, 0 insertions, 1867 deletions
diff --git a/cui/source/tabpages/swpossizetabpage.cxx b/cui/source/tabpages/swpossizetabpage.cxx deleted file mode 100644 index 2d08dede0..000000000 --- a/cui/source/tabpages/swpossizetabpage.cxx +++ /dev/null @@ -1,1867 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * 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. - * - ************************************************************************/ - -#include <cstddef> -#include <swpossizetabpage.hxx> -#include <dialmgr.hxx> -#include <svx/dlgutil.hxx> -#include <svx/anchorid.hxx> -#include <svl/aeitem.hxx> -#include <svx/swframevalidation.hxx> -#include <tools/debug.hxx> -#include <cuires.hrc> -#include <swpossizetabpage.hrc> -#include <svx/htmlmode.hxx> -#include <svx/svdview.hxx> -#include <svx/svdpagv.hxx> -#include <svx/rectenum.hxx> -#include <sal/macros.h> -#include <com/sun/star/text/TextContentAnchorType.hpp> -#include <com/sun/star/text/HoriOrientation.hpp> -#include <com/sun/star/text/VertOrientation.hpp> -#include <com/sun/star/text/RelOrientation.hpp> -#include <svx/dialogs.hrc> - -using namespace ::com::sun::star::text; -#define SwFPos SvxSwFramePosString - -struct FrmMap -{ - SvxSwFramePosString::StringId eStrId; - SvxSwFramePosString::StringId eMirrorStrId; - short nAlign; - sal_uLong nLBRelations; -}; - -struct RelationMap -{ - SvxSwFramePosString::StringId eStrId; - SvxSwFramePosString::StringId eMirrorStrId; - sal_uLong nLBRelation; - short nRelation; -}; -struct StringIdPair_Impl -{ - SvxSwFramePosString::StringId eHori; - SvxSwFramePosString::StringId eVert; -}; - -#define LB_FRAME 0x00000001L // paragraph text area -#define LB_PRTAREA 0x00000002L // paragraph text area + indents -#define LB_VERT_FRAME 0x00000004L // vertical paragraph text area -#define LB_VERT_PRTAREA 0x00000008L // vertical paragraph text area + indents -#define LB_REL_FRM_LEFT 0x00000010L // left paragraph margin -#define LB_REL_FRM_RIGHT 0x00000020L // right paragraph margin - -#define LB_REL_PG_LEFT 0x00000040L // left page margin -#define LB_REL_PG_RIGHT 0x00000080L // right page margin -#define LB_REL_PG_FRAME 0x00000100L // complete page -#define LB_REL_PG_PRTAREA 0x00000200L // text area of page - -#define LB_FLY_REL_PG_LEFT 0x00000400L // left frame margin -#define LB_FLY_REL_PG_RIGHT 0x00000800L // right frame margin -#define LB_FLY_REL_PG_FRAME 0x00001000L // complete frame -#define LB_FLY_REL_PG_PRTAREA 0x00002000L // frame interior - -#define LB_REL_BASE 0x00010000L // as char, relative to baseline -#define LB_REL_CHAR 0x00020000L // as char, relative to character -#define LB_REL_ROW 0x00040000L // as char, relative to line - -// #i22305# -#define LB_FLY_VERT_FRAME 0x00100000L // vertical entire frame -#define LB_FLY_VERT_PRTAREA 0x00200000L // vertical frame text area - -// #i22341# -#define LB_VERT_LINE 0x00400000L // vertical text line - -static RelationMap aRelationMap[] = -{ - {SwFPos::FRAME, SwFPos::FRAME, LB_FRAME, RelOrientation::FRAME}, - {SwFPos::PRTAREA, SwFPos::PRTAREA, LB_PRTAREA, RelOrientation::PRINT_AREA}, - {SwFPos::REL_PG_LEFT, SwFPos::MIR_REL_PG_LEFT, LB_REL_PG_LEFT, RelOrientation::PAGE_LEFT}, - {SwFPos::REL_PG_RIGHT, SwFPos::MIR_REL_PG_RIGHT, LB_REL_PG_RIGHT, RelOrientation::PAGE_RIGHT}, - {SwFPos::REL_FRM_LEFT, SwFPos::MIR_REL_FRM_LEFT, LB_REL_FRM_LEFT, RelOrientation::FRAME_LEFT}, - {SwFPos::REL_FRM_RIGHT, SwFPos::MIR_REL_FRM_RIGHT, LB_REL_FRM_RIGHT, RelOrientation::FRAME_RIGHT}, - {SwFPos::REL_PG_FRAME, SwFPos::REL_PG_FRAME, LB_REL_PG_FRAME, RelOrientation::PAGE_FRAME}, - {SwFPos::REL_PG_PRTAREA,SwFPos::REL_PG_PRTAREA, LB_REL_PG_PRTAREA, RelOrientation::PAGE_PRINT_AREA}, - {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, RelOrientation::CHAR}, - - {SwFPos::FLY_REL_PG_LEFT, SwFPos::FLY_MIR_REL_PG_LEFT, LB_FLY_REL_PG_LEFT, RelOrientation::PAGE_LEFT}, - {SwFPos::FLY_REL_PG_RIGHT, SwFPos::FLY_MIR_REL_PG_RIGHT, LB_FLY_REL_PG_RIGHT, RelOrientation::PAGE_RIGHT}, - {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_REL_PG_FRAME, RelOrientation::PAGE_FRAME}, - {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_REL_PG_PRTAREA, RelOrientation::PAGE_PRINT_AREA}, - - {SwFPos::REL_BORDER, SwFPos::REL_BORDER, LB_VERT_FRAME, RelOrientation::FRAME}, - {SwFPos::REL_PRTAREA, SwFPos::REL_PRTAREA, LB_VERT_PRTAREA, RelOrientation::PRINT_AREA}, - - // #i22305# - {SwFPos::FLY_REL_PG_FRAME, SwFPos::FLY_REL_PG_FRAME, LB_FLY_VERT_FRAME, RelOrientation::FRAME}, - {SwFPos::FLY_REL_PG_PRTAREA, SwFPos::FLY_REL_PG_PRTAREA, LB_FLY_VERT_PRTAREA, RelOrientation::PRINT_AREA}, - - // #i22341# - {SwFPos::REL_LINE, SwFPos::REL_LINE, LB_VERT_LINE, RelOrientation::TEXT_LINE} -}; - -static RelationMap aAsCharRelationMap[] = -{ - {SwFPos::REL_BASE, SwFPos::REL_BASE, LB_REL_BASE, RelOrientation::FRAME}, - {SwFPos::REL_CHAR, SwFPos::REL_CHAR, LB_REL_CHAR, RelOrientation::FRAME}, - {SwFPos::REL_ROW, SwFPos::REL_ROW, LB_REL_ROW, RelOrientation::FRAME} -}; - -/*-------------------------------------------------------------------- - Anchored at page - --------------------------------------------------------------------*/ - -#define HORI_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_PG_LEFT| \ - LB_REL_PG_RIGHT) - -static FrmMap aHPageMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_PAGE_REL}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_PAGE_REL}, - {SwFPos::CENTER_HORI,SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_PAGE_REL}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_PAGE_REL} -}; - -static FrmMap aHPageHtmlMap[] = -{ - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_REL_PG_FRAME} -}; - -#define VERT_PAGE_REL (LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) - -static FrmMap aVPageMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_PAGE_REL}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_PAGE_REL}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_PAGE_REL}, - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_PAGE_REL} -}; - -static FrmMap aVPageHtmlMap[] = -{ - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, LB_REL_PG_FRAME} -}; - -/*-------------------------------------------------------------------- - Anchored at frame - --------------------------------------------------------------------*/ - -#define HORI_FRAME_REL (LB_FLY_REL_PG_FRAME|LB_FLY_REL_PG_PRTAREA| \ - LB_FLY_REL_PG_LEFT|LB_FLY_REL_PG_RIGHT) - -static FrmMap aHFrameMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_FRAME_REL}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_FRAME_REL}, - {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_FRAME_REL}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_FRAME_REL} -}; - -static FrmMap aHFlyHtmlMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, LB_FLY_REL_PG_FRAME}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_FLY_REL_PG_FRAME} -}; - -// #i18732# - own vertical alignment map for to frame anchored objects -// #i22305# -#define VERT_FRAME_REL (LB_VERT_FRAME|LB_FLY_VERT_PRTAREA) - -static FrmMap aVFrameMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_FRAME_REL}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_FRAME_REL}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_FRAME_REL}, - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_FRAME_REL} -}; - -static FrmMap aVFlyHtmlMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_FLY_VERT_FRAME}, - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, LB_FLY_VERT_FRAME} -}; - -static FrmMap aVMultiSelectionMap[] = -{ - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, 0} -}; -static FrmMap aHMultiSelectionMap[] = -{ - {SwFPos::FROMLEFT, SwFPos::FROMLEFT, HoriOrientation::NONE, 0} -}; - -/*-------------------------------------------------------------------- - Anchored at paragraph - --------------------------------------------------------------------*/ - -#define HORI_PARA_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \ - LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \ - LB_REL_FRM_RIGHT) - -static FrmMap aHParaMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_PARA_REL}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_PARA_REL}, - {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_PARA_REL}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_PARA_REL} -}; - -#define HTML_HORI_PARA_REL (LB_FRAME|LB_PRTAREA) - -static FrmMap aHParaHtmlMap[] = -{ - {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_PARA_REL}, - {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_PARA_REL} -}; - -static FrmMap aHParaHtmlAbsMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HTML_HORI_PARA_REL}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HTML_HORI_PARA_REL} -}; - - -#define VERT_PARA_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \ - LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) - -static FrmMap aVParaMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_PARA_REL}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_PARA_REL}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_PARA_REL}, - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_PARA_REL} -}; - -static FrmMap aVParaHtmlMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_VERT_PRTAREA} -}; - -/*-------------------------------------------------------------------- - Anchored at character - --------------------------------------------------------------------*/ - -#define HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_PG_LEFT|LB_REL_PG_RIGHT| \ - LB_REL_PG_FRAME|LB_REL_PG_PRTAREA|LB_REL_FRM_LEFT| \ - LB_REL_FRM_RIGHT|LB_REL_CHAR) - -static FrmMap aHCharMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, HORI_CHAR_REL}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, HORI_CHAR_REL}, - {SwFPos::CENTER_HORI, SwFPos::CENTER_HORI, HoriOrientation::CENTER, HORI_CHAR_REL}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, HORI_CHAR_REL} -}; - -#define HTML_HORI_CHAR_REL (LB_FRAME|LB_PRTAREA|LB_REL_CHAR) - -static FrmMap aHCharHtmlMap[] = -{ - {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_CHAR_REL}, - {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_CHAR_REL} -}; - -static FrmMap aHCharHtmlAbsMap[] = -{ - {SwFPos::LEFT, SwFPos::MIR_LEFT, HoriOrientation::LEFT, LB_PRTAREA|LB_REL_CHAR}, - {SwFPos::RIGHT, SwFPos::MIR_RIGHT, HoriOrientation::RIGHT, LB_PRTAREA}, - {SwFPos::FROMLEFT, SwFPos::MIR_FROMLEFT, HoriOrientation::NONE, LB_REL_PG_FRAME} -}; - -// #i18732# - allow vertical alignment at page areas -// #i22341# - handle <LB_REL_CHAR> on its own -#define VERT_CHAR_REL (LB_VERT_FRAME|LB_VERT_PRTAREA| \ - LB_REL_PG_FRAME|LB_REL_PG_PRTAREA) - -static FrmMap aVCharMap[] = -{ - // #i22341# - // introduce mappings for new vertical alignment at top of line <LB_VERT_LINE> - // and correct mapping for vertical alignment at character for position <FROM_BOTTOM> - // Note: Because of these adjustments the map becomes ambigous in its values - // <eStrId>/<eMirrorStrId> and <nAlign>. These ambiguities are considered - // in the methods <SwFrmPage::FillRelLB(..)>, <SwFrmPage::GetAlignment(..)> - // and <SwFrmPage::FillPosLB(..)> - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, VERT_CHAR_REL|LB_REL_CHAR}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, VERT_CHAR_REL|LB_REL_CHAR}, - {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, VERT_CHAR_REL|LB_REL_CHAR}, - {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, VERT_CHAR_REL}, - {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, VertOrientation::NONE, LB_REL_CHAR|LB_VERT_LINE}, - {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_VERT_LINE}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_VERT_LINE}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_VERT_LINE} -}; - - -static FrmMap aVCharHtmlMap[] = -{ - {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR} -}; - -static FrmMap aVCharHtmlAbsMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_CHAR}, - {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR} -}; -/*-------------------------------------------------------------------- - anchored as character - --------------------------------------------------------------------*/ - -static FrmMap aVAsCharMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_BASE}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::BOTTOM, LB_REL_BASE}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, LB_REL_BASE}, - - {SwFPos::TOP, SwFPos::TOP, VertOrientation::CHAR_TOP, LB_REL_CHAR}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CHAR_CENTER, LB_REL_CHAR}, - - {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_REL_ROW}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_REL_ROW}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_REL_ROW}, - - {SwFPos::FROMBOTTOM, SwFPos::FROMBOTTOM, VertOrientation::NONE, LB_REL_BASE} -}; - -static FrmMap aVAsCharHtmlMap[] = -{ - {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_REL_BASE}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::CENTER, LB_REL_BASE}, - - {SwFPos::TOP, SwFPos::TOP, VertOrientation::CHAR_TOP, LB_REL_CHAR}, - - {SwFPos::TOP, SwFPos::TOP, VertOrientation::LINE_TOP, LB_REL_ROW}, - {SwFPos::BOTTOM, SwFPos::BOTTOM, VertOrientation::LINE_BOTTOM, LB_REL_ROW}, - {SwFPos::CENTER_VERT, SwFPos::CENTER_VERT, VertOrientation::LINE_CENTER, LB_REL_ROW} -}; - -std::size_t lcl_GetFrmMapCount(const FrmMap* pMap) -{ - if( pMap ) - { - if( pMap == aVParaHtmlMap ) - return SAL_N_ELEMENTS(aVParaHtmlMap); - if( pMap == aVAsCharHtmlMap ) - return SAL_N_ELEMENTS( aVAsCharHtmlMap ); - if( pMap == aHParaHtmlMap ) - return SAL_N_ELEMENTS( aHParaHtmlMap ); - if( pMap == aHParaHtmlAbsMap ) - return SAL_N_ELEMENTS( aHParaHtmlAbsMap ); - if( pMap == aVPageMap ) - return SAL_N_ELEMENTS( aVPageMap ); - if( pMap == aVPageHtmlMap ) - return SAL_N_ELEMENTS( aVPageHtmlMap ); - if( pMap == aVAsCharMap ) - return SAL_N_ELEMENTS( aVAsCharMap ); - if( pMap == aVParaMap ) - return SAL_N_ELEMENTS( aVParaMap ); - if( pMap == aHParaMap ) - return SAL_N_ELEMENTS( aHParaMap ); - if( pMap == aHFrameMap ) - return SAL_N_ELEMENTS( aHFrameMap ); - if( pMap == aVFrameMap ) - return SAL_N_ELEMENTS( aVFrameMap ); - if( pMap == aHCharMap ) - return SAL_N_ELEMENTS( aHCharMap ); - if( pMap == aHCharHtmlMap ) - return SAL_N_ELEMENTS( aHCharHtmlMap ); - if( pMap == aHCharHtmlAbsMap ) - return SAL_N_ELEMENTS( aHCharHtmlAbsMap ); - if( pMap == aVCharMap ) - return SAL_N_ELEMENTS( aVCharMap ); - if( pMap == aVCharHtmlMap ) - return SAL_N_ELEMENTS( aVCharHtmlMap ); - if( pMap == aVCharHtmlAbsMap ) - return SAL_N_ELEMENTS( aVCharHtmlAbsMap ); - if( pMap == aHPageHtmlMap ) - return SAL_N_ELEMENTS( aHPageHtmlMap ); - if( pMap == aHFlyHtmlMap ) - return SAL_N_ELEMENTS( aHFlyHtmlMap ); - if( pMap == aVFlyHtmlMap ) - return SAL_N_ELEMENTS( aVFlyHtmlMap ); - if( pMap == aVMultiSelectionMap ) - return SAL_N_ELEMENTS( aVMultiSelectionMap ); - if( pMap == aHMultiSelectionMap ) - return SAL_N_ELEMENTS( aHMultiSelectionMap ); - return SAL_N_ELEMENTS(aHPageMap); - } - return 0; -} - -SvxSwFramePosString::StringId lcl_ChangeResIdToVerticalOrRTL( - SvxSwFramePosString::StringId eStringId, sal_Bool bVertical, sal_Bool bRTL) -{ - //special handling of STR_FROMLEFT - if(SwFPos::FROMLEFT == eStringId) - { - eStringId = bVertical ? - bRTL ? SwFPos::FROMBOTTOM : SwFPos::FROMTOP : - bRTL ? SwFPos::FROMRIGHT : SwFPos::FROMLEFT; - return eStringId; - } - if(bVertical) - { - //exchange horizontal strings with vertical strings and vice versa - static const StringIdPair_Impl aHoriIds[] = - { - {SwFPos::LEFT, SwFPos::TOP}, - {SwFPos::RIGHT, SwFPos::BOTTOM}, - {SwFPos::CENTER_HORI, SwFPos::CENTER_VERT}, - {SwFPos::FROMTOP, SwFPos::FROMRIGHT}, - {SwFPos::REL_PG_LEFT, SwFPos::REL_PG_TOP}, - {SwFPos::REL_PG_RIGHT, SwFPos::REL_PG_BOTTOM} , - {SwFPos::REL_FRM_LEFT, SwFPos::REL_FRM_TOP}, - {SwFPos::REL_FRM_RIGHT, SwFPos::REL_FRM_BOTTOM} - }; - static const StringIdPair_Impl aVertIds[] = - { - {SwFPos::TOP, SwFPos::RIGHT}, - {SwFPos::BOTTOM, SwFPos::LEFT }, - {SwFPos::CENTER_VERT, SwFPos::CENTER_HORI}, - {SwFPos::FROMTOP, SwFPos::FROMRIGHT }, - {SwFPos::REL_PG_TOP, SwFPos::REL_PG_LEFT }, - {SwFPos::REL_PG_BOTTOM, SwFPos::REL_PG_RIGHT } , - {SwFPos::REL_FRM_TOP, SwFPos::REL_FRM_LEFT }, - {SwFPos::REL_FRM_BOTTOM, SwFPos::REL_FRM_RIGHT } - }; - sal_uInt16 nIndex; - for(nIndex = 0; nIndex < SAL_N_ELEMENTS(aHoriIds); ++nIndex) - { - if(aHoriIds[nIndex].eHori == eStringId) - { - eStringId = aHoriIds[nIndex].eVert; - return eStringId; - } - } - nIndex = 0; - for(nIndex = 0; nIndex < SAL_N_ELEMENTS(aVertIds); ++nIndex) - { - if(aVertIds[nIndex].eHori == eStringId) - { - eStringId = aVertIds[nIndex].eVert; - break; - } - } - } - return eStringId; -} -// #i22341# - helper method in order to determine all possible -// listbox relations in a relation map for a given relation -sal_uLong lcl_GetLBRelationsForRelations( const sal_uInt16 _nRel ) -{ - sal_uLong nLBRelations = 0L; - - for ( sal_uInt16 nRelMapPos = 0; nRelMapPos < SAL_N_ELEMENTS(aRelationMap); ++nRelMapPos ) - { - if ( aRelationMap[nRelMapPos].nRelation == _nRel ) - { - nLBRelations |= aRelationMap[nRelMapPos].nLBRelation; - } - } - - return nLBRelations; -} - -// #i22341# - helper method on order to determine all possible -// listbox relations in a relation map for a given string ID -sal_uLong lcl_GetLBRelationsForStrID( const FrmMap* _pMap, - const SvxSwFramePosString::StringId _eStrId, - const bool _bUseMirrorStr ) -{ - sal_uLong nLBRelations = 0L; - - std::size_t nRelMapSize = lcl_GetFrmMapCount( _pMap ); - for ( std::size_t nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos ) - { - if ( ( !_bUseMirrorStr && _pMap[nRelMapPos].eStrId == _eStrId ) || - ( _bUseMirrorStr && _pMap[nRelMapPos].eMirrorStrId == _eStrId ) ) - { - nLBRelations |= _pMap[nRelMapPos].nLBRelations; - } - } - - return nLBRelations; -} - -SvxSwPosSizeTabPage::SvxSwPosSizeTabPage( Window* pParent, const SfxItemSet& rInAttrs ) : - SfxTabPage( pParent, CUI_RES( RID_SVXPAGE_SWPOSSIZE ), rInAttrs ), -#ifdef _MSC_VER -#pragma warning (disable : 4355) -#endif - m_aSizeFL( this, CUI_RES( FL_SIZE ) ), - m_aWidthFT( this, CUI_RES( FT_WIDTH ) ), - m_aWidthMF( this, CUI_RES( MF_WIDTH ) ), - m_aHeightFT( this, CUI_RES( FT_HEIGHT ) ), - m_aHeightMF( this, CUI_RES( MF_HEIGHT ) ), - m_aKeepRatioCB(this,CUI_RES( CB_KEEPRATIO) ), - m_aSeparatorFL(this,CUI_RES( FL_SEPARATOR) ), - - m_aAnchorFL( this, CUI_RES( FL_ANCHOR ) ), - m_aToPageRB( this, CUI_RES( RB_TOPAGE ) ), - m_aToParaRB( this, CUI_RES( RB_TOPARA ) ), - m_aToCharRB( this, CUI_RES( RB_TOCHAR ) ), - m_aAsCharRB( this, CUI_RES( RB_ASCHAR ) ), - m_aToFrameRB( this, CUI_RES( RB_TOFRAME) ), - - m_aProtectionFL( this, CUI_RES( FL_PROTECTION ) ), - m_aPositionCB( this, CUI_RES( CB_POSITION ) ), - m_aSizeCB( this, CUI_RES( CB_SIZE ) ), - - m_aPositionFL( this, CUI_RES( FL_POSITION ) ), - m_aHoriFT( this, CUI_RES( FT_HORI ) ), - m_aHoriLB( this, CUI_RES( LB_HORI ) ), - m_aHoriByFT( this, CUI_RES( FT_HORIBY ) ), - m_aHoriByMF( this, CUI_RES( MF_HORIBY ) ), - m_aHoriToFT( this, CUI_RES( FT_HORITO ) ), - m_aHoriToLB( this, CUI_RES( LB_HORITO ) ), - - m_aHoriMirrorCB( this, CUI_RES( CB_HORIMIRROR ) ), - - m_aVertFT( this, CUI_RES( FT_VERT ) ), - m_aVertLB( this, CUI_RES( LB_VERT ) ), - m_aVertByFT( this, CUI_RES( FT_VERTBY ) ), - m_aVertByMF( this, CUI_RES( MF_VERTBY ) ), - m_aVertToFT( this, CUI_RES( FT_VERTTO ) ), - m_aVertToLB( this, CUI_RES( LB_VERTTO ) ), - - m_aFollowCB( this, CUI_RES( CB_FOLLOW ) ), - m_aExampleWN( this, CUI_RES( WN_EXAMPLE ) ), -#ifdef _MSC_VER -#pragma warning (default : 4355) -#endif - m_pVMap( 0 ), - m_pHMap( 0 ), - m_pSdrView( 0 ), - m_nOldH(HoriOrientation::CENTER), - m_nOldHRel(RelOrientation::FRAME), - m_nOldV(VertOrientation::TOP), - m_nOldVRel(RelOrientation::PRINT_AREA), - m_fWidthHeightRatio(1.0), - m_nHtmlMode(0), - m_bHtmlMode(false), - m_bAtHoriPosModified(false), - m_bAtVertPosModified(false), - m_bIsVerticalFrame(false), - m_bPositioningDisabled(false), - m_bIsMultiSelection(false), - m_bIsInRightToLeft(false) -{ - FreeResource(); - FieldUnit eDlgUnit = GetModuleFieldUnit( rInAttrs ); - SetFieldUnit( m_aHoriByMF, eDlgUnit, sal_True ); - SetFieldUnit( m_aVertByMF, eDlgUnit, sal_True ); - SetFieldUnit( m_aWidthMF , eDlgUnit, sal_True ); - SetFieldUnit( m_aHeightMF, eDlgUnit, sal_True ); - - SetExchangeSupport(); - - Link aLk = LINK(this, SvxSwPosSizeTabPage, RangeModifyHdl); - m_aWidthMF. SetLoseFocusHdl( aLk ); - m_aHeightMF. SetLoseFocusHdl( aLk ); - m_aHoriByMF.SetLoseFocusHdl( aLk ); - m_aVertByMF.SetLoseFocusHdl( aLk ); - m_aFollowCB.SetClickHdl( aLk ); - - aLk = LINK(this, SvxSwPosSizeTabPage, ModifyHdl); - m_aWidthMF. SetModifyHdl( aLk ); - m_aHeightMF. SetModifyHdl( aLk ); - m_aHoriByMF.SetModifyHdl( aLk ); - m_aVertByMF.SetModifyHdl( aLk ); - - aLk = LINK(this, SvxSwPosSizeTabPage, AnchorTypeHdl); - m_aToPageRB.SetClickHdl( aLk ); - m_aToParaRB.SetClickHdl( aLk ); - m_aToCharRB.SetClickHdl( aLk ); - m_aAsCharRB.SetClickHdl( aLk ); - m_aToFrameRB.SetClickHdl( aLk ); - - m_aHoriLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, PosHdl)); - m_aVertLB. SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, PosHdl)); - - m_aHoriToLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, RelHdl)); - m_aVertToLB.SetSelectHdl(LINK(this, SvxSwPosSizeTabPage, RelHdl)); - - m_aHoriMirrorCB.SetClickHdl(LINK(this, SvxSwPosSizeTabPage, MirrorHdl)); - m_aPositionCB.SetClickHdl(LINK(this, SvxSwPosSizeTabPage, ProtectHdl)); -} - -SvxSwPosSizeTabPage::~SvxSwPosSizeTabPage() -{ -} - -SfxTabPage* SvxSwPosSizeTabPage::Create( Window* pParent, const SfxItemSet& rSet) -{ - return new SvxSwPosSizeTabPage(pParent, rSet); -} - -sal_uInt16* SvxSwPosSizeTabPage::GetRanges() -{ - static sal_uInt16 pSwPosRanges[] = - { - SID_ATTR_TRANSFORM_POS_X, - SID_ATTR_TRANSFORM_POS_Y, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_ANCHOR, - SID_ATTR_TRANSFORM_VERT_ORIENT, - SID_ATTR_TRANSFORM_WIDTH, - SID_ATTR_TRANSFORM_SIZE_POINT, - SID_ATTR_TRANSFORM_PROTECT_POS, - SID_ATTR_TRANSFORM_INTERN, - SID_ATTR_TRANSFORM_AUTOWIDTH, - SID_ATTR_TRANSFORM_VERT_ORIENT, - SID_HTML_MODE, - SID_HTML_MODE, - SID_SW_FOLLOW_TEXT_FLOW, - SID_SW_FOLLOW_TEXT_FLOW, - SID_ATTR_TRANSFORM_HORI_POSITION, - SID_ATTR_TRANSFORM_VERT_POSITION, - 0 - }; - return pSwPosRanges; -} - -sal_Bool SvxSwPosSizeTabPage::FillItemSet( SfxItemSet& rSet) -{ - bool bAnchorChanged = false; - short nAnchor = GetAnchorType(&bAnchorChanged); - sal_Bool bModified = sal_False; - if(bAnchorChanged) - { - rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_ANCHOR, nAnchor)); - bModified |= sal_True; - } - if ( m_aPositionCB.GetState() != m_aPositionCB.GetSavedValue() ) - { - if( m_aPositionCB.GetState() == STATE_DONTKNOW ) - rSet.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_POS ); - else - rSet.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_POS ), - m_aPositionCB.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - bModified |= sal_True; - } - - if ( m_aSizeCB.GetState() != m_aSizeCB.GetSavedValue() ) - { - if ( m_aSizeCB.GetState() == STATE_DONTKNOW ) - rSet.InvalidateItem( SID_ATTR_TRANSFORM_PROTECT_SIZE ); - else - rSet.Put( - SfxBoolItem( GetWhich( SID_ATTR_TRANSFORM_PROTECT_SIZE ), - m_aSizeCB.GetState() == STATE_CHECK ? sal_True : sal_False ) ); - bModified |= sal_True; - } - - const SfxItemSet& rOldSet = GetItemSet(); - - if(!m_bPositioningDisabled) - { - //on multiple selections the positioning is set via SdrView - if(m_bIsMultiSelection) - { - if( m_aHoriByMF.IsValueModified() || m_aVertByMF.IsValueModified() ) - { - long nHoriByPos = - static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP))); - long nVertByPos = - static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP))); - - // Altes Rechteck mit CoreUnit - m_aRect = m_pSdrView->GetAllMarkedRect(); - m_pSdrView->GetSdrPageView()->LogicToPagePos( m_aRect ); - - nHoriByPos += m_aAnchorPos.X(); - nVertByPos += m_aAnchorPos.Y(); - - rSet.Put( SfxInt32Item( GetWhich( SID_ATTR_TRANSFORM_POS_X ), nHoriByPos ) ); - rSet.Put( SfxInt32Item( GetWhich( SID_ATTR_TRANSFORM_POS_Y ), nVertByPos ) ); - - bModified |= sal_True; - } - } - else - { - if ( m_pHMap ) - { - const SfxInt16Item& rHoriOrient = - static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_ORIENT)); - const SfxInt16Item& rHoriRelation = - static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_RELATION)); - const SfxInt32Item& rHoriPosition = - static_cast<const SfxInt32Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_HORI_POSITION)) ; - - sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriLB); - short nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB); - short nRel = GetRelation(m_pHMap, m_aHoriToLB); - const long nHoriByPos = - static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP))); - if ( - nAlign != rHoriOrient.GetValue() || - nRel != rHoriRelation.GetValue() || - (m_aHoriByMF.IsEnabled() && nHoriByPos != rHoriPosition.GetValue()) - ) - { - rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_HORI_ORIENT, nAlign)); - rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_HORI_RELATION, nRel)); - if(m_aHoriByMF.IsEnabled()) - rSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_HORI_POSITION, nHoriByPos)); - bModified |= sal_True; - } - } - if(m_aHoriMirrorCB.IsEnabled() && m_aHoriMirrorCB.IsChecked() != m_aHoriMirrorCB.GetSavedValue()) - bModified |= 0 != rSet.Put(SfxBoolItem(SID_ATTR_TRANSFORM_HORI_MIRROR, m_aHoriMirrorCB.IsChecked())); - - if ( m_pVMap ) - { - const SfxInt16Item& rVertOrient = - static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_ORIENT)); - const SfxInt16Item& rVertRelation = - static_cast<const SfxInt16Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_RELATION)); - const SfxInt32Item& rVertPosition = - static_cast<const SfxInt32Item&>(rOldSet.Get( SID_ATTR_TRANSFORM_VERT_POSITION)); - - sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB); - short nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB); - short nRel = GetRelation(m_pVMap, m_aVertToLB); - // #i34055# - convert vertical position for - // as-character anchored objects - long nVertByPos = - static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP))); - if ( GetAnchorType() == TextContentAnchorType_AS_CHARACTER ) - { - nVertByPos *= -1; - } - if ( nAlign != rVertOrient.GetValue() || - nRel != rVertRelation.GetValue() || - ( m_aVertByMF.IsEnabled() && - nVertByPos != rVertPosition.GetValue() ) ) - { - rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_VERT_ORIENT, nAlign)); - rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_VERT_RELATION, nRel)); - if(m_aVertByMF.IsEnabled()) - rSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_VERT_POSITION, nVertByPos)); - bModified |= sal_True; - } - } - - // #i18732# - if(m_aFollowCB.IsChecked() != m_aFollowCB.GetSavedValue()) - { - //Writer internal type - based on SfxBoolItem - const SfxPoolItem* pItem = GetItem( rOldSet, SID_SW_FOLLOW_TEXT_FLOW); - if(pItem) - { - SfxBoolItem* pFollow = static_cast<SfxBoolItem*>(pItem->Clone()); - pFollow->SetValue(m_aFollowCB.IsChecked()); - bModified |= 0 != rSet.Put(*pFollow); - delete pFollow; - } - } - } - } - if ( m_aWidthMF.IsValueModified() || m_aHeightMF.IsValueModified() ) - { - sal_uInt32 nWidth = static_cast<sal_uInt32>(m_aWidthMF.Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP))); - sal_uInt32 nHeight = static_cast<sal_uInt32>(m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP))); - rSet.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_WIDTH ), - (sal_uInt32) nWidth ) ); - rSet.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ), - (sal_uInt32) nHeight ) ); - //this item is required by SdrEditView::SetGeoAttrToMarked() - rSet.Put( SfxAllEnumItem( GetWhich( SID_ATTR_TRANSFORM_SIZE_POINT ), RP_LT ) ); - - bModified |= sal_True; - } - - return bModified; -} - -void SvxSwPosSizeTabPage::Reset( const SfxItemSet& rSet) -{ - const SfxPoolItem* pItem = GetItem( rSet, SID_ATTR_TRANSFORM_ANCHOR ); - bool bInvalidateAnchor = false; - short nAnchorType = TextContentAnchorType_AT_PARAGRAPH; - if(pItem) - { - nAnchorType = static_cast<const SfxInt16Item*>(pItem)->GetValue(); - switch(nAnchorType) - { - case TextContentAnchorType_AT_PAGE: m_aToPageRB.Check(); break; - case TextContentAnchorType_AT_PARAGRAPH: m_aToParaRB.Check(); break; - case TextContentAnchorType_AT_CHARACTER: m_aToCharRB.Check(); break; - case TextContentAnchorType_AS_CHARACTER: m_aAsCharRB.Check(); break; - case TextContentAnchorType_AT_FRAME: m_aToFrameRB.Check(); break; - default : bInvalidateAnchor = true; - } - m_aToPageRB.SaveValue(); - m_aToParaRB.SaveValue(); - m_aToCharRB.SaveValue(); - m_aAsCharRB.SaveValue(); - m_aToFrameRB.SaveValue(); - } - if(bInvalidateAnchor) - { - m_aToPageRB.Enable( sal_False ); - m_aToParaRB.Enable( sal_False ); - m_aToCharRB.Enable( sal_False ); - m_aAsCharRB.Enable( sal_False ); - m_aToFrameRB.Enable( sal_False ); - } - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_PROTECT_POS ); - if ( pItem ) - { - sal_Bool bProtected = ( ( const SfxBoolItem* )pItem )->GetValue(); - m_aPositionCB.SetState( bProtected ? STATE_CHECK : STATE_NOCHECK ); - m_aPositionCB.EnableTriState( sal_False ); - m_aSizeCB.Enable( !bProtected ); - } - else - { - m_aPositionCB.SetState( STATE_DONTKNOW ); - } - - m_aPositionCB.SaveValue(); - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_PROTECT_SIZE ); - - if ( pItem ) - { - m_aSizeCB.SetState( ( (const SfxBoolItem*)pItem )->GetValue() - ? STATE_CHECK : STATE_NOCHECK ); - m_aSizeCB.EnableTriState( sal_False ); - } - else - m_aSizeCB.SetState( STATE_DONTKNOW ); - m_aSizeCB.SaveValue(); - - pItem = GetItem( rSet, SID_HTML_MODE ); - if(pItem) - m_nHtmlMode = static_cast<const SfxUInt16Item*>(pItem)->GetValue(); - m_bHtmlMode = 0 != (m_bHtmlMode & HTMLMODE_ON); - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_IN_VERTICAL_TEXT ); - if(pItem && static_cast<const SfxBoolItem*>(pItem)->GetValue()) - { - String sHLabel = m_aHoriFT.GetText(); - m_aHoriFT.SetText(m_aVertFT.GetText()); - m_aVertFT.SetText(sHLabel); - m_bIsVerticalFrame = true; - } - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_IN_RTL_TEXT); - if(pItem) - m_bIsInRightToLeft = static_cast<const SfxBoolItem*>(pItem)->GetValue(); - - pItem = GetItem( rSet, SID_SW_FOLLOW_TEXT_FLOW); - if(pItem) - { - const bool bFollowTextFlow = - static_cast<const SfxBoolItem*>(pItem)->GetValue(); - m_aFollowCB.Check( bFollowTextFlow ); - } - m_aFollowCB.SaveValue(); - - if(m_bHtmlMode) - { - if( 0 == (m_nHtmlMode & HTMLMODE_FULL_ABS_POS)) - { - m_aHeightFT .Enable( sal_False ); - m_aHeightMF .Enable( sal_False ); - } - if( 0 == (m_nHtmlMode & HTMLMODE_SOME_ABS_POS)) - { - if(GetAnchorType() == TextContentAnchorType_AT_PAGE) - { - m_aToParaRB.Check(); - } - m_aToPageRB.Enable(sal_False); - } - m_aHoriMirrorCB.Show(sal_False); - m_aKeepRatioCB.Enable(sal_False); - // #i18732# - hide checkbox in HTML mode - m_aFollowCB.Show(sal_False); - } - else - { - // #i18732# correct enable/disable of check box 'Mirror on..' - m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection); - - // #i18732# - enable/disable check box 'Follow text flow'. - m_aFollowCB.Enable( m_aToParaRB.IsChecked() || - m_aToCharRB.IsChecked() ); - } - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_WIDTH ); - sal_Int32 nWidth = Max( pItem ? ( static_cast<const SfxUInt32Item*>(pItem)->GetValue()) : 0, (sal_uInt32)1 ); - - m_aWidthMF.SetValue(m_aWidthMF.Normalize(nWidth), FUNIT_TWIP); - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HEIGHT ); - sal_Int32 nHeight = Max( pItem ? ( static_cast<const SfxUInt32Item*>(pItem)->GetValue()) : 0, (sal_uInt32)1 ); - m_aHeightMF.SetValue(m_aHeightMF.Normalize(nHeight), FUNIT_TWIP); - m_fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0; - - if(!m_bPositioningDisabled) - { - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_ORIENT); - if(pItem) - { - short nHoriOrientation = static_cast< const SfxInt16Item*>(pItem)->GetValue(); - m_nOldH = nHoriOrientation; - } - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_ORIENT); - if(pItem) - { - short nVertOrientation = static_cast< const SfxInt16Item*>(pItem)->GetValue(); - m_nOldV = nVertOrientation; - } - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_RELATION); - if(pItem) - { - m_nOldHRel = static_cast< const SfxInt16Item*>(pItem)->GetValue(); - } - - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_RELATION); - if(pItem) - { - m_nOldVRel = static_cast< const SfxInt16Item*>(pItem)->GetValue(); - } - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_MIRROR); - if(pItem) - m_aHoriMirrorCB.Check(static_cast<const SfxBoolItem*>(pItem)->GetValue()); - m_aHoriMirrorCB.SaveValue(); - - sal_Int32 nHoriPos = 0; - sal_Int32 nVertPos = 0; - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_HORI_POSITION); - if(pItem) - nHoriPos = static_cast<const SfxInt32Item*>(pItem)->GetValue(); - pItem = GetItem( rSet, SID_ATTR_TRANSFORM_VERT_POSITION); - if(pItem) - nVertPos = static_cast<const SfxInt32Item*>(pItem)->GetValue(); - - InitPos(nAnchorType, m_nOldH, m_nOldHRel, m_nOldV, m_nOldVRel, nHoriPos, nVertPos); - - m_aVertByMF.SaveValue(); - m_aHoriByMF.SaveValue(); - // #i18732# - m_aFollowCB.SaveValue(); - - RangeModifyHdl(&m_aWidthMF); // initially set maximum values - } -} - -int SvxSwPosSizeTabPage::DeactivatePage( SfxItemSet* _pSet ) -{ - if( _pSet ) - FillItemSet( *_pSet ); - return( LEAVE_PAGE ); -} - -void SvxSwPosSizeTabPage::EnableAnchorTypes(sal_uInt16 nAnchorEnable) -{ - if((nAnchorEnable & SVX_OBJ_AT_FLY)) - m_aToFrameRB.Show(); - if(!(nAnchorEnable & SVX_OBJ_PAGE)) - m_aToPageRB.Enable(sal_False); -} - -short SvxSwPosSizeTabPage::GetAnchorType(bool* pbHasChanged) -{ - short nRet = -1; - RadioButton* pCheckedButton = 0; - if(m_aToParaRB.IsEnabled()) - { - if(m_aToPageRB.IsChecked()) - { - nRet = TextContentAnchorType_AT_PAGE; - pCheckedButton = &m_aToPageRB; - } - else if(m_aToParaRB.IsChecked()) - { - nRet = TextContentAnchorType_AT_PARAGRAPH; - pCheckedButton = &m_aToParaRB; - } - else if(m_aToCharRB.IsChecked()) - { - nRet = TextContentAnchorType_AT_CHARACTER; - pCheckedButton = &m_aToCharRB; - } - else if(m_aAsCharRB.IsChecked()) - { - nRet = TextContentAnchorType_AS_CHARACTER; - pCheckedButton = &m_aAsCharRB; - } - else if(m_aToFrameRB.IsChecked()) - { - nRet = TextContentAnchorType_AT_FRAME; - pCheckedButton = &m_aToFrameRB; - } - } - if(pbHasChanged) - { - if(pCheckedButton) - *pbHasChanged = pCheckedButton->IsChecked() != pCheckedButton->GetSavedValue(); - else - *pbHasChanged = false; - } - return nRet; -} - -IMPL_LINK( SvxSwPosSizeTabPage, RangeModifyHdl, Edit *, EMPTYARG ) -{ - if(m_bPositioningDisabled) - return 0; - SvxSwFrameValidation aVal; - - aVal.nAnchorType = GetAnchorType(); - aVal.bAutoHeight = false; - aVal.bAutoWidth = false; - aVal.bMirror = m_aHoriMirrorCB.IsChecked(); - // #i18732# - aVal.bFollowTextFlow = m_aFollowCB.IsChecked(); - - if ( m_pHMap ) - { - // Ausrichtung Horizontal - sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriToLB); - sal_uInt16 nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB); - sal_uInt16 nRel = GetRelation(m_pHMap, m_aHoriToLB); - - aVal.nHoriOrient = (short)nAlign; - aVal.nHRelOrient = (short)nRel; - } - else - aVal.nHoriOrient = HoriOrientation::NONE; - - if ( m_pVMap ) - { - // Ausrichtung Vertikal - sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB); - sal_uInt16 nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB); - sal_uInt16 nRel = GetRelation(m_pVMap, m_aVertToLB); - - aVal.nVertOrient = (short)nAlign; - aVal.nVRelOrient = (short)nRel; - } - else - aVal.nVertOrient = VertOrientation::NONE; - - const long nAtHorzPosVal = - static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP))); - const long nAtVertPosVal = - static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP))); - - aVal.nHPos = nAtHorzPosVal; - aVal.nVPos = nAtVertPosVal; - - sal_Int32 nWidth = static_cast<sal_uInt32>(m_aWidthMF. Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP))); - sal_Int32 nHeight = static_cast<sal_uInt32>(m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP))); - aVal.nWidth = nWidth; - aVal.nHeight = nHeight; - - if(m_aValidateLink.IsSet()) - m_aValidateLink.Call(&aVal); - - nWidth = aVal.nWidth; - nHeight = aVal.nHeight; - - // Mindestbreite auch fuer Vorlage - m_aHeightMF.SetMin(m_aHeightMF.Normalize(aVal.nMinHeight), FUNIT_TWIP); - m_aWidthMF. SetMin(m_aWidthMF.Normalize(aVal.nMinWidth), FUNIT_TWIP); - - sal_Int32 nMaxWidth(aVal.nMaxWidth); - sal_Int32 nMaxHeight(aVal.nMaxHeight); - - sal_Int64 nTmp = m_aHeightMF.Normalize(nMaxHeight); - m_aHeightMF.SetMax(nTmp, FUNIT_TWIP); - - nTmp = m_aWidthMF.Normalize(nMaxWidth); - m_aWidthMF.SetMax(nTmp, FUNIT_TWIP); - - m_aHoriByMF.SetMin(m_aHoriByMF.Normalize(aVal.nMinHPos), FUNIT_TWIP); - m_aHoriByMF.SetMax(m_aHoriByMF.Normalize(aVal.nMaxHPos), FUNIT_TWIP); - if ( aVal.nHPos != nAtHorzPosVal ) - m_aHoriByMF.SetValue(m_aHoriByMF.Normalize(aVal.nHPos), FUNIT_TWIP); - - m_aVertByMF.SetMin(m_aVertByMF.Normalize(aVal.nMinVPos ), FUNIT_TWIP); - m_aVertByMF.SetMax(m_aVertByMF.Normalize(aVal.nMaxVPos), FUNIT_TWIP); - if ( aVal.nVPos != nAtVertPosVal ) - m_aVertByMF.SetValue(m_aVertByMF.Normalize(aVal.nVPos), FUNIT_TWIP); - - return 0; -} - -IMPL_LINK( SvxSwPosSizeTabPage, AnchorTypeHdl, RadioButton *, EMPTYARG ) -{ - m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection); - - // #i18732# - enable check box 'Follow text flow' for anchor - // type to-paragraph' and to-character - m_aFollowCB.Enable( m_aToParaRB.IsChecked() || m_aToCharRB.IsChecked() ); - - short nId = GetAnchorType(); - - InitPos( nId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX); - RangeModifyHdl(0); - - if(m_bHtmlMode) - { - PosHdl(&m_aHoriLB); - PosHdl(&m_aVertLB); - } - return 0; -} - -IMPL_LINK( SvxSwPosSizeTabPage, MirrorHdl, CheckBox *, EMPTYARG ) -{ - short nId = GetAnchorType(); - InitPos( nId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX); - - return 0; -} - -IMPL_LINK( SvxSwPosSizeTabPage, RelHdl, ListBox *, pLB ) -{ - sal_Bool bHori = pLB == &m_aHoriToLB; - - UpdateExample(); - - if (bHori) - m_bAtHoriPosModified = sal_True; - else - m_bAtVertPosModified = sal_True; - - if(m_bHtmlMode && TextContentAnchorType_AT_CHARACTER == GetAnchorType()) // wieder Sonderbehandlung - { - if(bHori) - { - sal_uInt16 nRel = GetRelation(m_pHMap, m_aHoriToLB); - if(RelOrientation::PRINT_AREA == nRel && 0 == m_aVertLB.GetSelectEntryPos()) - { - m_aVertLB.SelectEntryPos(1); - } - else if(RelOrientation::CHAR == nRel && 1 == m_aVertLB.GetSelectEntryPos()) - { - m_aVertLB.SelectEntryPos(0); - } - } - } - if (pLB) // Nur wenn Handler durch Aenderung des Controllers gerufen wurde - RangeModifyHdl(0); - - return 0; - -} - -IMPL_LINK( SvxSwPosSizeTabPage, PosHdl, ListBox *, pLB ) -{ - sal_Bool bHori = pLB == &m_aHoriLB; - ListBox *pRelLB = bHori ? &m_aHoriToLB : &m_aVertToLB; - FixedText *pRelFT = bHori ? &m_aHoriToFT : &m_aVertToFT; - FrmMap *pMap = bHori ? m_pHMap : m_pVMap; - - - sal_uInt16 nMapPos = GetMapPos(pMap, *pLB); - sal_uInt16 nAlign = GetAlignment(pMap, nMapPos, *pLB, *pRelLB); - - if (bHori) - { - sal_Bool bEnable = HoriOrientation::NONE == nAlign; - m_aHoriByMF.Enable( bEnable ); - m_aHoriByFT.Enable( bEnable ); - } - else - { - sal_Bool bEnable = VertOrientation::NONE == nAlign; - m_aVertByMF.Enable( bEnable ); - m_aVertByFT.Enable( bEnable ); - } - - if (pLB) // Nur wenn Handler durch Aenderung des Controllers gerufen wurde - RangeModifyHdl( 0 ); - - short nRel = 0; - if (pLB->GetSelectEntryCount()) - { - - if (pRelLB->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND) - nRel = ((RelationMap *)pRelLB->GetEntryData(pRelLB->GetSelectEntryPos()))->nRelation; - - FillRelLB(pMap, nMapPos, nAlign, nRel, *pRelLB, *pRelFT); - } - else - pRelLB->Clear(); - - UpdateExample(); - - if (bHori) - m_bAtHoriPosModified = sal_True; - else - m_bAtVertPosModified = sal_True; - - // Sonderbehandlung fuer HTML-Mode mit horz-vert-Abhaengigkeiten - if(m_bHtmlMode && m_nHtmlMode & HTMLMODE_SOME_ABS_POS && - TextContentAnchorType_AT_CHARACTER == GetAnchorType()) - { - sal_Bool bSet = sal_False; - if(bHori) - { - // rechts ist nur unterhalb erlaubt - von links nur oben - // von links am Zeichen -> unterhalb - if((HoriOrientation::LEFT == nAlign || HoriOrientation::RIGHT == nAlign) && - 0 == m_aVertLB.GetSelectEntryPos()) - { - if(RelOrientation::FRAME == nRel) - m_aVertLB.SelectEntryPos(1); - else - m_aVertLB.SelectEntryPos(0); - bSet = sal_True; - } - else if(HoriOrientation::LEFT == nAlign && 1 == m_aVertLB.GetSelectEntryPos()) - { - m_aVertLB.SelectEntryPos(0); - bSet = sal_True; - } - else if(HoriOrientation::NONE == nAlign && 1 == m_aVertLB.GetSelectEntryPos()) - { - m_aVertLB.SelectEntryPos(0); - bSet = sal_True; - } - if(bSet) - PosHdl(&m_aVertLB); - } - else - { - if(VertOrientation::TOP == nAlign) - { - if(1 == m_aHoriLB.GetSelectEntryPos()) - { - m_aHoriLB.SelectEntryPos(0); - bSet = sal_True; - } - m_aHoriToLB.SelectEntryPos(1); - } - else if(VertOrientation::CHAR_BOTTOM == nAlign) - { - if(2 == m_aHoriLB.GetSelectEntryPos()) - { - m_aHoriLB.SelectEntryPos(0); - bSet = sal_True; - } - m_aHoriToLB.SelectEntryPos(0) ; - } - if(bSet) - PosHdl(&m_aHoriLB); - } - - } - return 0; -} - -IMPL_LINK( SvxSwPosSizeTabPage, ModifyHdl, Edit *, pEdit ) -{ - sal_Int64 nWidth = m_aWidthMF.Denormalize(m_aWidthMF.GetValue(FUNIT_TWIP)); - sal_Int64 nHeight = m_aHeightMF.Denormalize(m_aHeightMF.GetValue(FUNIT_TWIP)); - if ( m_aKeepRatioCB.IsChecked() ) - { - if ( pEdit == &m_aWidthMF ) - { - nHeight = sal_Int64((double)nWidth / m_fWidthHeightRatio); - m_aHeightMF.SetValue(m_aHeightMF.Normalize(nHeight), FUNIT_TWIP); - } - else if(pEdit == &m_aHeightMF) - { - nWidth = sal_Int64((double)nHeight * m_fWidthHeightRatio); - m_aWidthMF.SetValue(m_aWidthMF.Normalize(nWidth), FUNIT_TWIP); - } - } - m_fWidthHeightRatio = nHeight ? double(nWidth) / double(nHeight) : 1.0; - UpdateExample(); - return 0; -} - -IMPL_LINK( SvxSwPosSizeTabPage, ProtectHdl, TriStateBox *, EMPTYARG) -{ - m_aSizeCB.Enable(m_aPositionCB.IsEnabled() && !m_aPositionCB.IsChecked()); - return 0; -} - -short SvxSwPosSizeTabPage::GetRelation(FrmMap *, ListBox &rRelationLB) -{ - short nRel = 0; - sal_uInt16 nPos = rRelationLB.GetSelectEntryPos(); - - if (nPos != LISTBOX_ENTRY_NOTFOUND) - { - RelationMap *pEntry = (RelationMap *)rRelationLB.GetEntryData(nPos); - nRel = pEntry->nRelation; - } - - return nRel; -} - -short SvxSwPosSizeTabPage::GetAlignment(FrmMap *pMap, sal_uInt16 nMapPos, ListBox &/*rAlignLB*/, ListBox &rRelationLB) -{ - short nAlign = 0; - - // #i22341# - special handling also for map <aVCharMap>, - // because it contains ambigous items for alignment - if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap || - pMap == aVCharMap ) - { - if (rRelationLB.GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND) - { - sal_uLong nRel = ((RelationMap *)rRelationLB.GetEntryData(rRelationLB.GetSelectEntryPos()))->nLBRelation; - std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap); - SvxSwFramePosString::StringId eStrId = pMap[nMapPos].eStrId; - - for (std::size_t i = 0; i < nMapCount; i++) - { - if (pMap[i].eStrId == eStrId) - { - sal_uLong nLBRelations = pMap[i].nLBRelations; - if (nLBRelations & nRel) - { - nAlign = pMap[i].nAlign; - break; - } - } - } - } - } - else if (pMap) - nAlign = pMap[nMapPos].nAlign; - - return nAlign; -} - -sal_uInt16 SvxSwPosSizeTabPage::GetMapPos(FrmMap *pMap, ListBox &rAlignLB) -{ - sal_uInt16 nMapPos = 0; - sal_uInt16 nLBSelPos = rAlignLB.GetSelectEntryPos(); - - if (nLBSelPos != LISTBOX_ENTRY_NOTFOUND) - { - if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap) - { - std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap); - String sSelEntry(rAlignLB.GetSelectEntry()); - - for (std::size_t i = 0; i < nMapCount; i++) - { - SvxSwFramePosString::StringId eResId = pMap[i].eStrId; - - String sEntry = m_aFramePosString.GetString(eResId); - - if (sEntry == sSelEntry) - { - nMapPos = sal::static_int_cast< sal_uInt16 >(i); - break; - } - } - } - else - nMapPos = nLBSelPos; - } - - return nMapPos; -} - -void SvxSwPosSizeTabPage::InitPos(short nAnchor, - sal_uInt16 nH, - sal_uInt16 nHRel, - sal_uInt16 nV, - sal_uInt16 nVRel, - long nX, - long nY) -{ - sal_uInt16 nPos = m_aVertLB.GetSelectEntryPos(); - if ( nPos != LISTBOX_ENTRY_NOTFOUND && m_pVMap ) - { - m_nOldV = m_pVMap[nPos].nAlign; - nPos = m_aVertToLB.GetSelectEntryPos(); - if (nPos != LISTBOX_ENTRY_NOTFOUND) - m_nOldVRel = ((RelationMap *)m_aVertToLB.GetEntryData(nPos))->nRelation; - } - - nPos = m_aHoriLB.GetSelectEntryPos(); - if ( nPos != LISTBOX_ENTRY_NOTFOUND && m_pHMap ) - { - m_nOldH = m_pHMap[nPos].nAlign; - - nPos = m_aHoriToLB.GetSelectEntryPos(); - if (nPos != LISTBOX_ENTRY_NOTFOUND) - m_nOldHRel = ((RelationMap *)m_aHoriToLB.GetEntryData(nPos))->nRelation; - } - - sal_Bool bEnable = sal_True; - if( m_bIsMultiSelection ) - { - m_pVMap = aVMultiSelectionMap; - m_pHMap = aHMultiSelectionMap; - } - else if( nAnchor == TextContentAnchorType_AT_PAGE ) - { - m_pVMap = m_bHtmlMode ? aVPageHtmlMap : aVPageMap; - m_pHMap = m_bHtmlMode ? aHPageHtmlMap : aHPageMap; - } - else if ( nAnchor == TextContentAnchorType_AT_FRAME ) - { - // #i18732# - own vertical alignment map for to frame - // anchored objects. - m_pVMap = m_bHtmlMode ? aVFlyHtmlMap : aVFrameMap; - m_pHMap = m_bHtmlMode ? aHFlyHtmlMap : aHFrameMap; - } - else if ( nAnchor == TextContentAnchorType_AT_PARAGRAPH ) - { - if(m_bHtmlMode) - { - m_pVMap = aVParaHtmlMap; - m_pHMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aHParaHtmlAbsMap : aHParaHtmlMap; - } - else - { - m_pVMap = aVParaMap; - m_pHMap = aHParaMap; - } - } - else if ( nAnchor == TextContentAnchorType_AT_CHARACTER ) - { - if(m_bHtmlMode) - { - m_pVMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aVCharHtmlAbsMap : aVCharHtmlMap; - m_pHMap = m_nHtmlMode & HTMLMODE_SOME_ABS_POS ? aHCharHtmlAbsMap : aHCharHtmlMap; - } - else - { - m_pVMap = aVCharMap; - m_pHMap = aHCharMap; - } - } - else if ( nAnchor == TextContentAnchorType_AS_CHARACTER ) - { - m_pVMap = m_bHtmlMode ? aVAsCharHtmlMap : aVAsCharMap; - m_pHMap = 0; - bEnable = sal_False; - } - m_aHoriLB.Enable( bEnable ); - m_aHoriFT.Enable( bEnable ); - - // aktuelle Pos selektieren - // Horizontal - if ( nH == USHRT_MAX ) - { - nH = m_nOldH; - nHRel = m_nOldHRel; - } - // #i22341# - pass <nHRel> as 3rd parameter to method <FillPosLB> - sal_uInt16 nMapPos = FillPosLB(m_pHMap, nH, nHRel, m_aHoriLB); - FillRelLB(m_pHMap, nMapPos, nH, nHRel, m_aHoriToLB, m_aHoriToFT); - - // Vertikal - if ( nV == USHRT_MAX ) - { - nV = m_nOldV; - nVRel = m_nOldVRel; - } - // #i22341# - pass <nVRel> as 3rd parameter to method <FillPosLB> - nMapPos = FillPosLB(m_pVMap, nV, nVRel, m_aVertLB); - FillRelLB(m_pVMap, nMapPos, nV, nVRel, m_aVertToLB, m_aVertToFT); - - // Edits init - bEnable = nH == HoriOrientation::NONE && - nAnchor != TextContentAnchorType_AS_CHARACTER;//#61359# warum nicht in Formaten&& !bFormat; - if (!bEnable) - { - m_aHoriByMF.SetValue( 0, FUNIT_TWIP ); - if (nX != LONG_MAX && m_bHtmlMode) - m_aHoriByMF.SetModifyFlag(); - } - else if(m_bIsMultiSelection) - { - m_aHoriByMF.SetValue( m_aHoriByMF.Normalize(m_aRect.Left()), FUNIT_TWIP ); - } - else - { - if (nX != LONG_MAX) - m_aHoriByMF.SetValue( m_aHoriByMF.Normalize(nX), FUNIT_TWIP ); - } - m_aHoriByFT.Enable( bEnable ); - m_aHoriByMF.Enable( bEnable ); - - bEnable = nV == VertOrientation::NONE; - if ( !bEnable ) - { - m_aVertByMF.SetValue( 0, FUNIT_TWIP ); - if(nY != LONG_MAX && m_bHtmlMode) - m_aVertByMF.SetModifyFlag(); - } - else if(m_bIsMultiSelection) - { - m_aVertByMF.SetValue( m_aVertByMF.Normalize(m_aRect.Top()), FUNIT_TWIP ); - } - else - { - if ( nAnchor == TextContentAnchorType_AS_CHARACTER ) - { - if ( nY == LONG_MAX ) - nY = 0; - else - nY *= -1; - } - if ( nY != LONG_MAX ) - m_aVertByMF.SetValue( m_aVertByMF.Normalize(nY), FUNIT_TWIP ); - } - m_aVertByFT.Enable( bEnable ); - m_aVertByMF.Enable( bEnable ); - UpdateExample(); -} - -void SvxSwPosSizeTabPage::UpdateExample() -{ - sal_uInt16 nPos = m_aHoriLB.GetSelectEntryPos(); - if ( m_pHMap && nPos != LISTBOX_ENTRY_NOTFOUND ) - { - sal_uInt16 nMapPos = GetMapPos(m_pHMap, m_aHoriLB); - short nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB); - short nRel = GetRelation(m_pHMap, m_aHoriToLB); - - m_aExampleWN.SetHAlign(nAlign); - m_aExampleWN.SetHoriRel(nRel); - } - - nPos = m_aVertLB.GetSelectEntryPos(); - if ( m_pVMap && nPos != LISTBOX_ENTRY_NOTFOUND ) - { - sal_uInt16 nMapPos = GetMapPos(m_pVMap, m_aVertLB); - sal_uInt16 nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB); - sal_uInt16 nRel = GetRelation(m_pVMap, m_aVertToLB); - - m_aExampleWN.SetVAlign(nAlign); - m_aExampleWN.SetVertRel(nRel); - } - - // Size - long nXPos = static_cast<long>(m_aHoriByMF.Denormalize(m_aHoriByMF.GetValue(FUNIT_TWIP))); - long nYPos = static_cast<long>(m_aVertByMF.Denormalize(m_aVertByMF.GetValue(FUNIT_TWIP))); - m_aExampleWN.SetRelPos(Point(nXPos, nYPos)); - - m_aExampleWN.SetAnchor( GetAnchorType() ); - m_aExampleWN.Invalidate(); -} - -sal_uLong SvxSwPosSizeTabPage::FillRelLB(FrmMap *pMap, sal_uInt16 nMapPos, sal_uInt16 nAlign, - sal_uInt16 nRel, ListBox &rLB, FixedText &rFT) -{ - String sSelEntry; - sal_uLong nLBRelations = 0; - std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap); - - rLB.Clear(); - - if (nMapPos < nMapCount) - { - if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap) - { - String sOldEntry(rLB.GetSelectEntry()); - sal_uInt16 nRelCount = SAL_N_ELEMENTS(aAsCharRelationMap); - SvxSwFramePosString::StringId eStrId = pMap[nMapPos].eStrId; - - for (std::size_t _nMapPos = 0; _nMapPos < nMapCount; _nMapPos++) - { - if (pMap[_nMapPos].eStrId == eStrId) - { - nLBRelations = pMap[_nMapPos].nLBRelations; - for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++) - { - if (nLBRelations & aAsCharRelationMap[nRelPos].nLBRelation) - { - SvxSwFramePosString::StringId sStrId1 = aAsCharRelationMap[nRelPos].eStrId; - - sStrId1 = lcl_ChangeResIdToVerticalOrRTL(sStrId1, m_bIsVerticalFrame, m_bIsInRightToLeft); - String sEntry = m_aFramePosString.GetString(sStrId1); - sal_uInt16 nPos = rLB.InsertEntry(sEntry); - rLB.SetEntryData(nPos, &aAsCharRelationMap[nRelPos]); - if (pMap[_nMapPos].nAlign == nAlign) - sSelEntry = sEntry; - break; - } - } - } - } - if (sSelEntry.Len()) - rLB.SelectEntry(sSelEntry); - else - { - rLB.SelectEntry(sOldEntry); - - if (!rLB.GetSelectEntryCount()) - { - for (sal_uInt16 i = 0; i < rLB.GetEntryCount(); i++) - { - RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(i); - if (pEntry->nLBRelation == LB_REL_CHAR) // Default - { - rLB.SelectEntryPos(i); - break; - } - } - } - } - } - else - { - sal_uInt16 nRelCount = SAL_N_ELEMENTS(aRelationMap); - - // #i22341# - special handling for map <aVCharMap>, - // because its ambigous in its <eStrId>/<eMirrorStrId>. - if ( pMap == aVCharMap ) - { - nLBRelations = ::lcl_GetLBRelationsForStrID( pMap, - ( m_aHoriMirrorCB.IsChecked() - ? pMap[nMapPos].eMirrorStrId - : pMap[nMapPos].eStrId ), - m_aHoriMirrorCB.IsChecked() ); - } - else - { - nLBRelations = pMap[nMapPos].nLBRelations; - } - - for (sal_uLong nBit = 1; nBit < 0x80000000; nBit <<= 1) - { - if (nLBRelations & nBit) - { - for (sal_uInt16 nRelPos = 0; nRelPos < nRelCount; nRelPos++) - { - if (aRelationMap[nRelPos].nLBRelation == nBit) - { - SvxSwFramePosString::StringId sStrId1 = m_aHoriMirrorCB.IsChecked() ? aRelationMap[nRelPos].eMirrorStrId : aRelationMap[nRelPos].eStrId; - sStrId1 = lcl_ChangeResIdToVerticalOrRTL(sStrId1, m_bIsVerticalFrame, m_bIsInRightToLeft); - String sEntry = m_aFramePosString.GetString(sStrId1); - sal_uInt16 nPos = rLB.InsertEntry(sEntry); - rLB.SetEntryData(nPos, &aRelationMap[nRelPos]); - if (!sSelEntry.Len() && aRelationMap[nRelPos].nRelation == nRel) - sSelEntry = sEntry; - } - } - } - } - if (sSelEntry.Len()) - rLB.SelectEntry(sSelEntry); - else - { - // Warscheinlich Ankerwechsel. Daher aehnliche Relation suchen - switch (nRel) - { - case RelOrientation::FRAME: nRel = RelOrientation::PAGE_FRAME; break; - case RelOrientation::PRINT_AREA: nRel = RelOrientation::PAGE_PRINT_AREA; break; - case RelOrientation::PAGE_LEFT: nRel = RelOrientation::FRAME_LEFT; break; - case RelOrientation::PAGE_RIGHT: nRel = RelOrientation::FRAME_RIGHT; break; - case RelOrientation::FRAME_LEFT: nRel = RelOrientation::PAGE_LEFT; break; - case RelOrientation::FRAME_RIGHT: nRel = RelOrientation::PAGE_RIGHT; break; - case RelOrientation::PAGE_FRAME: nRel = RelOrientation::FRAME; break; - case RelOrientation::PAGE_PRINT_AREA: nRel = RelOrientation::PRINT_AREA; break; - - default: - if (rLB.GetEntryCount()) - { - RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(rLB.GetEntryCount() - 1); - nRel = pEntry->nRelation; - } - break; - } - - for (sal_uInt16 i = 0; i < rLB.GetEntryCount(); i++) - { - RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(i); - if (pEntry->nRelation == nRel) - { - rLB.SelectEntryPos(i); - break; - } - } - - if (!rLB.GetSelectEntryCount()) - rLB.SelectEntryPos(0); - } - } - } - - rLB.Enable(rLB.GetEntryCount() != 0); - rFT.Enable(rLB.GetEntryCount() != 0); - - RelHdl(&rLB); - - return nLBRelations; -} - -sal_uInt16 SvxSwPosSizeTabPage::FillPosLB(FrmMap *_pMap, - sal_uInt16 _nAlign, - const sal_uInt16 _nRel, - ListBox &_rLB) -{ - String sSelEntry, sOldEntry; - sOldEntry = _rLB.GetSelectEntry(); - - _rLB.Clear(); - - // #i22341# - determine all possible listbox relations for - // given relation for map <aVCharMap> - const sal_uLong nLBRelations = (_pMap != aVCharMap) - ? 0L - : ::lcl_GetLBRelationsForRelations( _nRel ); - - // Listbox fuellen - std::size_t nCount = ::lcl_GetFrmMapCount(_pMap); - for (std::size_t i = 0; _pMap && i < nCount; ++i) - { -// #61359# Warum nicht von links/von innen bzw. von oben? -// if (!bFormat || (pMap[i].eStrId != SwFPos::FROMLEFT && pMap[i].eStrId != SwFPos::FROMTOP)) - { - SvxSwFramePosString::StringId eStrId = m_aHoriMirrorCB.IsChecked() ? _pMap[i].eMirrorStrId : _pMap[i].eStrId; - eStrId = lcl_ChangeResIdToVerticalOrRTL(eStrId, m_bIsVerticalFrame, m_bIsInRightToLeft); - String sEntry(m_aFramePosString.GetString(eStrId)); - if (_rLB.GetEntryPos(sEntry) == LISTBOX_ENTRY_NOTFOUND) - { - // bei zeichengebundenen Rahmen keine doppelten Eintraege einfuegen - _rLB.InsertEntry(sEntry); - } - // #i22341# - add condition to handle map <aVCharMap> - // that is ambigous in the alignment. - if ( _pMap[i].nAlign == _nAlign && - ( !(_pMap == aVCharMap) || _pMap[i].nLBRelations & nLBRelations ) ) - { - sSelEntry = sEntry; - } - } - } - - _rLB.SelectEntry(sSelEntry); - if (!_rLB.GetSelectEntryCount()) - _rLB.SelectEntry(sOldEntry); - - if (!_rLB.GetSelectEntryCount()) - _rLB.SelectEntryPos(0); - - PosHdl(&_rLB); - - return GetMapPos(_pMap, _rLB); -} - -void SvxSwPosSizeTabPage::SetView( const SdrView* pSdrView ) -{ - m_pSdrView = pSdrView; - if(!m_pSdrView) - { - OSL_FAIL("No SdrView* set"); - return; - } - - // Setzen des Rechtecks und der Workingarea - m_aRect = m_pSdrView->GetAllMarkedRect(); - m_pSdrView->GetSdrPageView()->LogicToPagePos( m_aRect ); - - // get WorkArea - m_aWorkArea = m_pSdrView->GetWorkArea(); - - // Beruecksichtigung Ankerposition (bei Writer) - const SdrMarkList& rMarkList = m_pSdrView->GetMarkedObjectList(); - if( rMarkList.GetMarkCount() >= 1 ) - { - const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); - m_aAnchorPos = pObj->GetAnchorPos(); - - if( m_aAnchorPos != Point(0,0) ) // -> Writer - { - for( sal_uInt16 i = 1; i < rMarkList.GetMarkCount(); i++ ) - { - pObj = rMarkList.GetMark( i )->GetMarkedSdrObj(); - if( m_aAnchorPos != pObj->GetAnchorPos() ) - { - // different anchor positions -> disable positioning - m_aPositionFL.Enable(sal_False); - m_aHoriFT.Enable(sal_False); - m_aHoriLB.Enable(sal_False); - m_aHoriByFT.Enable(sal_False); - m_aHoriByMF.Enable(sal_False); - m_aHoriToFT.Enable(sal_False); - m_aHoriToLB.Enable(sal_False); - m_aHoriMirrorCB.Enable(sal_False); - m_aVertFT.Enable(sal_False); - m_aVertLB.Enable(sal_False); - m_aVertByFT.Enable(sal_False); - m_aVertByMF.Enable(sal_False); - m_aVertToFT.Enable(sal_False); - m_aVertToLB.Enable(sal_False); - m_aFollowCB.Enable(sal_False); - m_aHoriByMF.SetText(String()); - m_aVertByMF.SetText(String()); - - m_bPositioningDisabled = true; - return; - } - } - } - Point aPt = m_aAnchorPos * -1; - Point aPt2 = aPt; - - aPt += m_aWorkArea.TopLeft(); - m_aWorkArea.SetPos( aPt ); - - aPt2 += m_aRect.TopLeft(); - m_aRect.SetPos( aPt2 ); - } - - // this should happen via SID_ATTR_TRANSFORM_AUTOSIZE - if( rMarkList.GetMarkCount() != 1 ) - m_bIsMultiSelection = true; -#if OSL_DEBUG_LEVEL > 1 - else - { - const SdrObject* pObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj(); - SdrObjKind eKind = (SdrObjKind) pObj->GetObjIdentifier(); - if( ( pObj->GetObjInventor() == SdrInventor ) && - ( eKind==OBJ_TEXT || eKind==OBJ_TITLETEXT || eKind==OBJ_OUTLINETEXT) && - ( (SdrTextObj*) pObj )->HasText() ) - { - OSL_FAIL("AutoWidth/AutoHeight should be enabled"); - } - } -#endif -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |