summaryrefslogtreecommitdiff
path: root/cui/source/tabpages/swpossizetabpage.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/tabpages/swpossizetabpage.cxx')
-rw-r--r--cui/source/tabpages/swpossizetabpage.cxx1971
1 files changed, 1971 insertions, 0 deletions
diff --git a/cui/source/tabpages/swpossizetabpage.cxx b/cui/source/tabpages/swpossizetabpage.cxx
new file mode 100644
index 000000000000..a498a439c524
--- /dev/null
+++ b/cui/source/tabpages/swpossizetabpage.cxx
@@ -0,0 +1,1971 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_cui.hxx"
+
+#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 <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;
+ ULONG nLBRelations;
+};
+
+struct RelationMap
+{
+ SvxSwFramePosString::StringId eStrId;
+ SvxSwFramePosString::StringId eMirrorStrId;
+ 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
+
+// OD 10.11.2003 #i22305#
+#define LB_FLY_VERT_FRAME 0x00100000L // vertical entire frame
+#define LB_FLY_VERT_PRTAREA 0x00200000L // vertical frame text area
+
+// OD 11.11.2003 #i22341#
+#define LB_VERT_LINE 0x00400000L // vertical text line
+
+static RelationMap __FAR_DATA 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},
+
+ // OD 10.11.2003 #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},
+
+ // OD 11.11.2003 #i22341#
+ {SwFPos::REL_LINE, SwFPos::REL_LINE, LB_VERT_LINE, RelOrientation::TEXT_LINE}
+};
+
+static RelationMap __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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}
+};
+
+// OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects
+// OD 10.11.2003 #i22305#
+#define VERT_FRAME_REL (LB_VERT_FRAME|LB_FLY_VERT_PRTAREA)
+
+static FrmMap __FAR_DATA 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 __FAR_DATA aVFlyHtmlMap[] =
+{
+ {SwFPos::TOP, SwFPos::TOP, VertOrientation::TOP, LB_FLY_VERT_FRAME},
+ {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, LB_FLY_VERT_FRAME}
+};
+
+static FrmMap __FAR_DATA aVMultiSelectionMap[] =
+{
+ {SwFPos::FROMTOP, SwFPos::FROMTOP, VertOrientation::NONE, 0}
+};
+static FrmMap __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA aHParaHtmlMap[] =
+{
+ {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_PARA_REL},
+ {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_PARA_REL}
+};
+
+static FrmMap __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA aHCharHtmlMap[] =
+{
+ {SwFPos::LEFT, SwFPos::LEFT, HoriOrientation::LEFT, HTML_HORI_CHAR_REL},
+ {SwFPos::RIGHT, SwFPos::RIGHT, HoriOrientation::RIGHT, HTML_HORI_CHAR_REL}
+};
+
+static FrmMap __FAR_DATA 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}
+};
+
+// OD 19.09.2003 #i18732# - allow vertical alignment at page areas
+// OD 12.11.2003 #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 __FAR_DATA aVCharMap[] =
+{
+ // OD 11.11.2003 #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 __FAR_DATA aVCharHtmlMap[] =
+{
+ {SwFPos::BELOW, SwFPos::BELOW, VertOrientation::CHAR_BOTTOM, LB_REL_CHAR}
+};
+
+static FrmMap __FAR_DATA 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 __FAR_DATA 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 __FAR_DATA 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}
+};
+/*-- 05.03.2004 15:52:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+std::size_t lcl_GetFrmMapCount(const FrmMap* pMap)
+{
+ if ( pMap )
+ {
+ std::size_t aSizeOf = sizeof(FrmMap);
+ if( pMap == aVParaHtmlMap)
+ return sizeof(aVParaHtmlMap) / aSizeOf;
+ if( pMap == aVAsCharHtmlMap)
+ return sizeof(aVAsCharHtmlMap) / aSizeOf;
+ if( pMap == aHParaHtmlMap)
+ return sizeof(aHParaHtmlMap) / aSizeOf;
+ if( pMap == aHParaHtmlAbsMap)
+ return sizeof(aHParaHtmlAbsMap) / aSizeOf;
+ if ( pMap == aVPageMap )
+ return sizeof(aVPageMap) / aSizeOf;
+ if ( pMap == aVPageHtmlMap )
+ return sizeof(aVPageHtmlMap) / aSizeOf;
+ if ( pMap == aVAsCharMap )
+ return sizeof(aVAsCharMap) / aSizeOf;
+ if ( pMap == aVParaMap )
+ return sizeof(aVParaMap) / aSizeOf;
+ if ( pMap == aHParaMap )
+ return sizeof(aHParaMap) / aSizeOf;
+ if ( pMap == aHFrameMap )
+ return sizeof(aHFrameMap) / aSizeOf;
+ // OD 19.09.2003 #i18732# - own vertical alignment map for to frame anchored objects
+ if ( pMap == aVFrameMap )
+ return sizeof(aVFrameMap) / aSizeOf;
+ if ( pMap == aHCharMap )
+ return sizeof(aHCharMap) / aSizeOf;
+ if ( pMap == aHCharHtmlMap )
+ return sizeof(aHCharHtmlMap) / aSizeOf;
+ if ( pMap == aHCharHtmlAbsMap )
+ return sizeof(aHCharHtmlAbsMap) / aSizeOf;
+ if ( pMap == aVCharMap )
+ return sizeof(aVCharMap) / aSizeOf;
+ if ( pMap == aVCharHtmlMap )
+ return sizeof(aVCharHtmlMap) / aSizeOf;
+ if ( pMap == aVCharHtmlAbsMap )
+ return sizeof(aVCharHtmlAbsMap) / aSizeOf;
+ if ( pMap == aHPageHtmlMap )
+ return sizeof(aHPageHtmlMap) / aSizeOf;
+ if ( pMap == aHFlyHtmlMap )
+ return sizeof(aHFlyHtmlMap) / aSizeOf;
+ if ( pMap == aVFlyHtmlMap )
+ return sizeof(aVFlyHtmlMap) / aSizeOf;
+ if( pMap == aVMultiSelectionMap)
+ return sizeof(aVMultiSelectionMap) / aSizeOf;
+ if( pMap == aHMultiSelectionMap)
+ return sizeof(aHMultiSelectionMap) / aSizeOf;
+ return sizeof(aHPageMap) / aSizeOf;
+ }
+ return 0;
+}
+/*-- 03.03.2004 12:21:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SvxSwFramePosString::StringId lcl_ChangeResIdToVerticalOrRTL(
+ SvxSwFramePosString::StringId eStringId, BOOL bVertical, 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 }
+ };
+ USHORT nIndex;
+ for(nIndex = 0; nIndex < sizeof(aHoriIds) / sizeof(StringIdPair_Impl); ++nIndex)
+ {
+ if(aHoriIds[nIndex].eHori == eStringId)
+ {
+ eStringId = aHoriIds[nIndex].eVert;
+ return eStringId;
+ }
+ }
+ nIndex = 0;
+ for(nIndex = 0; nIndex < sizeof(aVertIds) / sizeof(StringIdPair_Impl); ++nIndex)
+ {
+ if(aVertIds[nIndex].eHori == eStringId)
+ {
+ eStringId = aVertIds[nIndex].eVert;
+ break;
+ }
+ }
+ }
+ return eStringId;
+}
+// OD 12.11.2003 #i22341# - helper method in order to determine all possible
+// listbox relations in a relation map for a given relation
+ULONG lcl_GetLBRelationsForRelations( const USHORT _nRel )
+{
+ ULONG nLBRelations = 0L;
+
+ sal_uInt16 nRelMapSize = sizeof(aRelationMap) / sizeof(RelationMap);
+ for ( sal_uInt16 nRelMapPos = 0; nRelMapPos < nRelMapSize; ++nRelMapPos )
+ {
+ if ( aRelationMap[nRelMapPos].nRelation == _nRel )
+ {
+ nLBRelations |= aRelationMap[nRelMapPos].nLBRelation;
+ }
+ }
+
+ return nLBRelations;
+}
+
+// OD 14.11.2003 #i22341# - helper method on order to determine all possible
+// listbox relations in a relation map for a given string ID
+ULONG lcl_GetLBRelationsForStrID( const FrmMap* _pMap,
+ const SvxSwFramePosString::StringId _eStrId,
+ const bool _bUseMirrorStr )
+{
+ 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;
+}
+/*-- 03.03.2004 12:21:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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, TRUE );
+ SetFieldUnit( m_aVertByMF, eDlgUnit, TRUE );
+ SetFieldUnit( m_aWidthMF , eDlgUnit, TRUE );
+ SetFieldUnit( m_aHeightMF, eDlgUnit, 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));
+}
+/*-- 03.03.2004 12:21:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SvxSwPosSizeTabPage::~SvxSwPosSizeTabPage()
+{
+}
+/*-- 03.03.2004 12:21:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SfxTabPage* SvxSwPosSizeTabPage::Create( Window* pParent, const SfxItemSet& rSet)
+{
+ return new SvxSwPosSizeTabPage(pParent, rSet);
+}
+/*-- 05.03.2004 17:27:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+USHORT* SvxSwPosSizeTabPage::GetRanges()
+{
+ static USHORT 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;
+}
+/*-- 03.03.2004 12:21:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BOOL SvxSwPosSizeTabPage::FillItemSet( SfxItemSet& rSet)
+{
+ bool bAnchorChanged = false;
+ short nAnchor = GetAnchorType(&bAnchorChanged);
+ BOOL bModified = FALSE;
+ if(bAnchorChanged)
+ {
+ rSet.Put(SfxInt16Item(SID_ATTR_TRANSFORM_ANCHOR, nAnchor));
+ bModified |= 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 ? TRUE : FALSE ) );
+ bModified |= 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 ? TRUE : FALSE ) );
+ bModified |= 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 |= 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)) ;
+
+ USHORT 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 |= 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));
+
+ USHORT nMapPos = GetMapPos(m_pVMap, m_aVertLB);
+ short nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
+ short nRel = GetRelation(m_pVMap, m_aVertToLB);
+ // --> OD 2004-10-21 #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 |= TRUE;
+ }
+ }
+
+ // OD 19.09.2003 #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 ),
+ (UINT32) nWidth ) );
+ rSet.Put( SfxUInt32Item( GetWhich( SID_ATTR_TRANSFORM_HEIGHT ),
+ (UINT32) nHeight ) );
+ //this item is required by SdrEditView::SetGeoAttrToMarked()
+ rSet.Put( SfxAllEnumItem( GetWhich( SID_ATTR_TRANSFORM_SIZE_POINT ), RP_LT ) );
+
+ bModified |= TRUE;
+ }
+
+ return bModified;
+}
+/*-- 03.03.2004 12:21:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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( FALSE );
+ m_aToParaRB.Enable( FALSE );
+ m_aToCharRB.Enable( FALSE );
+ m_aAsCharRB.Enable( FALSE );
+ m_aToFrameRB.Enable( 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( 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( 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( FALSE );
+ m_aHeightMF .Enable( FALSE );
+ }
+ if( 0 == (m_nHtmlMode & HTMLMODE_SOME_ABS_POS))
+ {
+ if(GetAnchorType() == TextContentAnchorType_AT_PAGE)
+ {
+ m_aToParaRB.Check();
+ }
+ m_aToPageRB.Enable(FALSE);
+ }
+ m_aHoriMirrorCB.Show(FALSE);
+ m_aKeepRatioCB.Enable(FALSE);
+ // OD 19.09.2003 #i18732# - hide checkbox in HTML mode
+ m_aFollowCB.Show(FALSE);
+ }
+ else
+ {
+ // OD 06.11.2003 #i18732# correct enable/disable of check box 'Mirror on..'
+ m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection);
+
+ // OD 06.11.2003 #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, (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, (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();
+ // OD 19.09.2003 #i18732#
+ m_aFollowCB.SaveValue();
+
+ RangeModifyHdl(&m_aWidthMF); // initially set maximum values
+ }
+}
+/*-- 03.03.2004 12:21:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+int SvxSwPosSizeTabPage::DeactivatePage( SfxItemSet* _pSet )
+{
+ if( _pSet )
+ FillItemSet( *_pSet );
+ return( LEAVE_PAGE );
+}
+/*-- 04.03.2004 09:14:41---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SvxSwPosSizeTabPage::EnableAnchorTypes(USHORT nAnchorEnable)
+{
+ if((nAnchorEnable & SVX_OBJ_AT_FLY))
+ m_aToFrameRB.Show();
+ if(!(nAnchorEnable & SVX_OBJ_PAGE))
+ m_aToPageRB.Enable(FALSE);
+}
+/*-- 04.03.2004 09:33:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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;
+}
+/*-- 05.03.2004 10:43:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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();
+ // OD 18.09.2003 #i18732#
+ aVal.bFollowTextFlow = m_aFollowCB.IsChecked();
+
+ if ( m_pHMap )
+ {
+ // Ausrichtung Horizontal
+ USHORT nMapPos = GetMapPos(m_pHMap, m_aHoriToLB);
+ USHORT nAlign = GetAlignment(m_pHMap, nMapPos, m_aHoriLB, m_aHoriToLB);
+ USHORT nRel = GetRelation(m_pHMap, m_aHoriToLB);
+
+ aVal.nHoriOrient = (short)nAlign;
+ aVal.nHRelOrient = (short)nRel;
+ }
+ else
+ aVal.nHoriOrient = HoriOrientation::NONE;
+
+ if ( m_pVMap )
+ {
+ // Ausrichtung Vertikal
+ USHORT nMapPos = GetMapPos(m_pVMap, m_aVertLB);
+ USHORT nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
+ USHORT 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;
+}
+/*-- 05.03.2004 11:12:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SvxSwPosSizeTabPage, AnchorTypeHdl, RadioButton *, EMPTYARG )
+{
+ m_aHoriMirrorCB.Enable(!m_aAsCharRB.IsChecked() && !m_bIsMultiSelection);
+
+ // OD 06.11.2003 #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;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SvxSwPosSizeTabPage, MirrorHdl, CheckBox *, EMPTYARG )
+{
+ short nId = GetAnchorType();
+ InitPos( nId, USHRT_MAX, 0, USHRT_MAX, 0, LONG_MAX, LONG_MAX);
+
+ return 0;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SvxSwPosSizeTabPage, RelHdl, ListBox *, pLB )
+{
+ BOOL bHori = pLB == &m_aHoriToLB;
+
+ UpdateExample();
+
+ if (bHori)
+ m_bAtHoriPosModified = TRUE;
+ else
+ m_bAtVertPosModified = TRUE;
+
+ // OD 12.11.2003 #i22341# - following special handling no longer needed
+ /*
+ if (!bHori && m_pVMap == aVCharMap)
+ {
+ // Ausrichtung Vertikal
+ String sEntry;
+ USHORT nMapPos = GetMapPos(m_pVMap, m_aVertLB);
+ USHORT nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
+ USHORT nRel = GetRelation(m_pVMap, m_aVertToLB);
+
+ if (nRel == SwFPos::REL_CHAR)
+ sEntry = m_aFramePosString.GetString(SwFPos::FROMBOTTOM);
+ else
+ sEntry = m_aFramePosString.GetString(SwFPos::FROMTOP);
+
+ USHORT nOldPos = m_aVertLB.GetSelectEntryPos();
+
+ String sName = m_aVertLB.GetEntry(m_aVertLB.GetEntryCount() - 1);
+ if (sName != sEntry)
+ {
+ m_aVertLB.RemoveEntry(m_aVertLB.GetEntryCount() - 1);
+ m_aVertLB.InsertEntry(sEntry);
+ m_aVertLB.SelectEntryPos(nOldPos);
+ }
+ }
+ */
+ if(m_bHtmlMode && TextContentAnchorType_AT_CHARACTER == GetAnchorType()) // wieder Sonderbehandlung
+ {
+ if(bHori)
+ {
+ USHORT 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;
+
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SvxSwPosSizeTabPage, PosHdl, ListBox *, pLB )
+{
+ 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;
+
+
+ USHORT nMapPos = GetMapPos(pMap, *pLB);
+ USHORT nAlign = GetAlignment(pMap, nMapPos, *pLB, *pRelLB);
+
+ if (bHori)
+ {
+ BOOL bEnable = HoriOrientation::NONE == nAlign;
+ m_aHoriByMF.Enable( bEnable );
+ m_aHoriByFT.Enable( bEnable );
+ }
+ else
+ {
+ 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 = TRUE;
+ else
+ m_bAtVertPosModified = TRUE;
+
+ // Sonderbehandlung fuer HTML-Mode mit horz-vert-Abhaengigkeiten
+ if(m_bHtmlMode && m_nHtmlMode & HTMLMODE_SOME_ABS_POS &&
+ TextContentAnchorType_AT_CHARACTER == GetAnchorType())
+ {
+ BOOL bSet = 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 = TRUE;
+ }
+ else if(HoriOrientation::LEFT == nAlign && 1 == m_aVertLB.GetSelectEntryPos())
+ {
+ m_aVertLB.SelectEntryPos(0);
+ bSet = TRUE;
+ }
+ else if(HoriOrientation::NONE == nAlign && 1 == m_aVertLB.GetSelectEntryPos())
+ {
+ m_aVertLB.SelectEntryPos(0);
+ bSet = TRUE;
+ }
+ if(bSet)
+ PosHdl(&m_aVertLB);
+ }
+ else
+ {
+ if(VertOrientation::TOP == nAlign)
+ {
+ if(1 == m_aHoriLB.GetSelectEntryPos())
+ {
+ m_aHoriLB.SelectEntryPos(0);
+ bSet = TRUE;
+ }
+ m_aHoriToLB.SelectEntryPos(1);
+ }
+ else if(VertOrientation::CHAR_BOTTOM == nAlign)
+ {
+ if(2 == m_aHoriLB.GetSelectEntryPos())
+ {
+ m_aHoriLB.SelectEntryPos(0);
+ bSet = TRUE;
+ }
+ m_aHoriToLB.SelectEntryPos(0) ;
+ }
+ if(bSet)
+ PosHdl(&m_aHoriLB);
+ }
+
+ }
+ return 0;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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;
+}
+/*-- 11.03.2004 15:40:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+IMPL_LINK( SvxSwPosSizeTabPage, ProtectHdl, TriStateBox *, EMPTYARG)
+{
+ m_aSizeCB.Enable(m_aPositionCB.IsEnabled() && !m_aPositionCB.IsChecked());
+ return 0;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+short SvxSwPosSizeTabPage::GetRelation(FrmMap *, ListBox &rRelationLB)
+{
+ short nRel = 0;
+ USHORT nPos = rRelationLB.GetSelectEntryPos();
+
+ if (nPos != LISTBOX_ENTRY_NOTFOUND)
+ {
+ RelationMap *pEntry = (RelationMap *)rRelationLB.GetEntryData(nPos);
+ nRel = pEntry->nRelation;
+ }
+
+ return nRel;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+short SvxSwPosSizeTabPage::GetAlignment(FrmMap *pMap, USHORT nMapPos, ListBox &/*rAlignLB*/, ListBox &rRelationLB)
+{
+ short nAlign = 0;
+
+ // OD 14.11.2003 #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)
+ {
+ 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)
+ {
+ ULONG nLBRelations = pMap[i].nLBRelations;
+ if (nLBRelations & nRel)
+ {
+ nAlign = pMap[i].nAlign;
+ break;
+ }
+ }
+ }
+ }
+ }
+ else if (pMap)
+ nAlign = pMap[nMapPos].nAlign;
+
+ return nAlign;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+USHORT SvxSwPosSizeTabPage::GetMapPos(FrmMap *pMap, ListBox &rAlignLB)
+{
+ USHORT nMapPos = 0;
+ USHORT 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< USHORT >(i);
+ break;
+ }
+ }
+ }
+ else
+ nMapPos = nLBSelPos;
+ }
+
+ return nMapPos;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SvxSwPosSizeTabPage::InitPos(short nAnchor,
+ USHORT nH,
+ USHORT nHRel,
+ USHORT nV,
+ USHORT nVRel,
+ long nX,
+ long nY)
+{
+ USHORT 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;
+ }
+
+ BOOL bEnable = 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 )
+ {
+ // OD 19.09.2003 #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 = FALSE;
+ }
+ m_aHoriLB.Enable( bEnable );
+ m_aHoriFT.Enable( bEnable );
+
+ // aktuelle Pos selektieren
+ // Horizontal
+ if ( nH == USHRT_MAX )
+ {
+ nH = m_nOldH;
+ nHRel = m_nOldHRel;
+ }
+ // OD 12.11.2003 #i22341# - pass <nHRel> as 3rd parameter to method <FillPosLB>
+ USHORT 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;
+ }
+ // OD 12.11.2003 #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();
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SvxSwPosSizeTabPage::UpdateExample()
+{
+ USHORT nPos = m_aHoriLB.GetSelectEntryPos();
+ if ( m_pHMap && nPos != LISTBOX_ENTRY_NOTFOUND )
+ {
+ USHORT 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 )
+ {
+ USHORT nMapPos = GetMapPos(m_pVMap, m_aVertLB);
+ USHORT nAlign = GetAlignment(m_pVMap, nMapPos, m_aVertLB, m_aVertToLB);
+ USHORT 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();
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ULONG SvxSwPosSizeTabPage::FillRelLB(FrmMap *pMap, USHORT nMapPos, USHORT nAlign,
+ USHORT nRel, ListBox &rLB, FixedText &rFT)
+{
+ String sSelEntry;
+ ULONG nLBRelations = 0;
+ std::size_t nMapCount = ::lcl_GetFrmMapCount(pMap);
+
+ rLB.Clear();
+
+ if (nMapPos < nMapCount)
+ {
+ if (pMap == aVAsCharHtmlMap || pMap == aVAsCharMap)
+ {
+ String sOldEntry(rLB.GetSelectEntry());
+ USHORT nRelCount = sizeof(aAsCharRelationMap) / sizeof(RelationMap);
+ 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 (USHORT 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);
+ USHORT 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 (USHORT i = 0; i < rLB.GetEntryCount(); i++)
+ {
+ RelationMap *pEntry = (RelationMap *)rLB.GetEntryData(i);
+ if (pEntry->nLBRelation == LB_REL_CHAR) // Default
+ {
+ rLB.SelectEntryPos(i);
+ break;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ USHORT nRelCount = sizeof(aRelationMap) / sizeof(RelationMap);
+
+ // OD 14.11.2003 #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 (ULONG nBit = 1; nBit < 0x80000000; nBit <<= 1)
+ {
+ if (nLBRelations & nBit)
+ {
+ for (USHORT 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);
+ USHORT 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 (USHORT 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;
+}
+/*-- 05.03.2004 14:20:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+USHORT SvxSwPosSizeTabPage::FillPosLB(FrmMap *_pMap,
+ USHORT _nAlign,
+ const USHORT _nRel,
+ ListBox &_rLB)
+{
+ String sSelEntry, sOldEntry;
+ sOldEntry = _rLB.GetSelectEntry();
+
+ _rLB.Clear();
+
+ // OD 12.11.2003 #i22341# - determine all possible listbox relations for
+ // given relation for map <aVCharMap>
+ const 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);
+ }
+ // OD 12.11.2003 #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);
+}
+/*-- 09.03.2004 15:37:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SvxSwPosSizeTabPage::SetView( const SdrView* pSdrView )
+{
+ m_pSdrView = pSdrView;
+ if(!m_pSdrView)
+ {
+ DBG_ERROR("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( USHORT i = 1; i < rMarkList.GetMarkCount(); i++ )
+ {
+ pObj = rMarkList.GetMark( i )->GetMarkedSdrObj();
+ if( m_aAnchorPos != pObj->GetAnchorPos() )
+ {
+ // different anchor positions -> disable positioning
+ m_aPositionFL.Enable(FALSE);
+ m_aHoriFT.Enable(FALSE);
+ m_aHoriLB.Enable(FALSE);
+ m_aHoriByFT.Enable(FALSE);
+ m_aHoriByMF.Enable(FALSE);
+ m_aHoriToFT.Enable(FALSE);
+ m_aHoriToLB.Enable(FALSE);
+ m_aHoriMirrorCB.Enable(FALSE);
+ m_aVertFT.Enable(FALSE);
+ m_aVertLB.Enable(FALSE);
+ m_aVertByFT.Enable(FALSE);
+ m_aVertByMF.Enable(FALSE);
+ m_aVertToFT.Enable(FALSE);
+ m_aVertToLB.Enable(FALSE);
+ m_aFollowCB.Enable(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 )
+ {
+ 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() )
+ {
+ DBG_ERROR("AutoWidth/AutoHeight should be enabled");
+ }
+ }
+ else
+ m_bIsMultiSelection = true;
+
+ // use page offset and recalculate
+ Point aPt( m_pSdrView->GetSdrPageView()->GetPageOrigin() );
+
+ // Massstab
+ Fraction aUIScale = m_pSdrView->GetModel()->GetUIScale();
+
+// lcl_ScaleRect( m_aWorkArea, aUIScale );
+// lcl_ScaleRect( m_aRect, aUIScale );
+// lcl_ScalePoint( aPt, aUIScale );
+
+ // Metrik konvertieren
+// int nDigits = maMtrPosX.GetDecimalDigits();
+
+// aPt = lcl_ConvertPoint( aPt, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
+// m_aWorkArea = lcl_ConvertRect( m_aWorkArea, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
+// m_aRect = lcl_ConvertRect( m_aRect, nDigits, (MapUnit) mePoolUnit, meDlgUnit );
+
+ // use page offset
+// aPt *= -1;
+// aPt += m_aWorkArea.TopLeft();
+// m_aWorkArea.SetPos( aPt );
+
+ //SetMinMaxPosition();
+}
+