[Libreoffice-commits] core.git: filter/source include/filter sc/source

Noel Power noel.power at suse.com
Fri Jun 7 08:45:55 PDT 2013


 filter/source/msfilter/util.cxx       |  121 ++++++++++++++++++++++++++++++++
 include/filter/msfilter/util.hxx      |   15 +++
 sc/source/filter/oox/pagesettings.cxx |   94 +-----------------------
 sc/source/ui/vba/vbapagesetup.cxx     |  128 ++--------------------------------
 4 files changed, 148 insertions(+), 210 deletions(-)

New commits:
commit c76974576aa5eec6b86af39eaaadc8e382f214bd
Author: Noel Power <noel.power at suse.com>
Date:   Fri Jun 7 16:34:30 2013 +0100

    share spPaperSizeTable ( and associated access code ) in msfilter
    
    PageSetup.PaperSize implementation more or less copy&pasted the
    papersize conversion code from oox, this is a followup to remove
    the duplication. ( Probably the binary filter could be converted
    to use this also saving yet another nearly similar implementation )
    
    Change-Id: I479f0322163161f7819c5d650a9511910ac2e781

diff --git a/filter/source/msfilter/util.cxx b/filter/source/msfilter/util.cxx
index 45310f9..bf612c3 100644
--- a/filter/source/msfilter/util.cxx
+++ b/filter/source/msfilter/util.cxx
@@ -306,6 +306,127 @@ OString ConvertColor( const Color &rColor )
     }
     return color;
 }
+
+
+#define IN2MM100( v )    static_cast< sal_Int32 >( (v) * 2540.0 + 0.5 )
+#define MM2MM100( v )    static_cast< sal_Int32 >( (v) * 100.0 + 0.5 )
+
+static const ApiPaperSize spPaperSizeTable[] =
+{
+    { 0, 0 },                                                //  0 - (undefined)
+    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  1 - Letter paper
+    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  2 - Letter small paper
+    { IN2MM100( 11 ),        IN2MM100( 17 )      },          //  3 - Tabloid paper
+    { IN2MM100( 17 ),        IN2MM100( 11 )      },          //  4 - Ledger paper
+    { IN2MM100( 8.5 ),       IN2MM100( 14 )      },          //  5 - Legal paper
+    { IN2MM100( 5.5 ),       IN2MM100( 8.5 )     },          //  6 - Statement paper
+    { IN2MM100( 7.25 ),      IN2MM100( 10.5 )    },          //  7 - Executive paper
+    { MM2MM100( 297 ),       MM2MM100( 420 )     },          //  8 - A3 paper
+    { MM2MM100( 210 ),       MM2MM100( 297 )     },          //  9 - A4 paper
+    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 10 - A4 small paper
+    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 11 - A5 paper
+    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 12 - B4 paper
+    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 13 - B5 paper
+    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 14 - Folio paper
+    { MM2MM100( 215 ),       MM2MM100( 275 )     },          // 15 - Quarto paper
+    { IN2MM100( 10 ),        IN2MM100( 14 )      },          // 16 - Standard paper
+    { IN2MM100( 11 ),        IN2MM100( 17 )      },          // 17 - Standard paper
+    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          // 18 - Note paper
+    { IN2MM100( 3.875 ),     IN2MM100( 8.875 )   },          // 19 - #9 envelope
+    { IN2MM100( 4.125 ),     IN2MM100( 9.5 )     },          // 20 - #10 envelope
+    { IN2MM100( 4.5 ),       IN2MM100( 10.375 )  },          // 21 - #11 envelope
+    { IN2MM100( 4.75 ),      IN2MM100( 11 )      },          // 22 - #12 envelope
+    { IN2MM100( 5 ),         IN2MM100( 11.5 )    },          // 23 - #14 envelope
+    { IN2MM100( 17 ),        IN2MM100( 22 )      },          // 24 - C paper
+    { IN2MM100( 22 ),        IN2MM100( 34 )      },          // 25 - D paper
+    { IN2MM100( 34 ),        IN2MM100( 44 )      },          // 26 - E paper
+    { MM2MM100( 110 ),       MM2MM100( 220 )     },          // 27 - DL envelope
+    { MM2MM100( 162 ),       MM2MM100( 229 )     },          // 28 - C5 envelope
+    { MM2MM100( 324 ),       MM2MM100( 458 )     },          // 29 - C3 envelope
+    { MM2MM100( 229 ),       MM2MM100( 324 )     },          // 30 - C4 envelope
+    { MM2MM100( 114 ),       MM2MM100( 162 )     },          // 31 - C6 envelope
+    { MM2MM100( 114 ),       MM2MM100( 229 )     },          // 32 - C65 envelope
+    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 33 - B4 envelope
+    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 34 - B5 envelope
+    { MM2MM100( 176 ),       MM2MM100( 125 )     },          // 35 - B6 envelope
+    { MM2MM100( 110 ),       MM2MM100( 230 )     },          // 36 - Italy envelope
+    { IN2MM100( 3.875 ),     IN2MM100( 7.5 )     },          // 37 - Monarch envelope
+    { IN2MM100( 3.625 ),     IN2MM100( 6.5 )     },          // 38 - 6 3/4 envelope
+    { IN2MM100( 14.875 ),    IN2MM100( 11 )      },          // 39 - US standard fanfold
+    { IN2MM100( 8.5 ),       IN2MM100( 12 )      },          // 40 - German standard fanfold
+    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 41 - German legal fanfold
+    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 42 - ISO B4
+    { MM2MM100( 200 ),       MM2MM100( 148 )     },          // 43 - Japanese double postcard
+    { IN2MM100( 9 ),         IN2MM100( 11 )      },          // 44 - Standard paper
+    { IN2MM100( 10 ),        IN2MM100( 11 )      },          // 45 - Standard paper
+    { IN2MM100( 15 ),        IN2MM100( 11 )      },          // 46 - Standard paper
+    { MM2MM100( 220 ),       MM2MM100( 220 )     },          // 47 - Invite envelope
+    { 0, 0 },                                                // 48 - (undefined)
+    { 0, 0 },                                                // 49 - (undefined)
+    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 50 - Letter extra paper
+    { IN2MM100( 9.275 ),     IN2MM100( 15 )      },          // 51 - Legal extra paper
+    { IN2MM100( 11.69 ),     IN2MM100( 18 )      },          // 52 - Tabloid extra paper
+    { MM2MM100( 236 ),       MM2MM100( 322 )     },          // 53 - A4 extra paper
+    { IN2MM100( 8.275 ),     IN2MM100( 11 )      },          // 54 - Letter transverse paper
+    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 55 - A4 transverse paper
+    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 56 - Letter extra transverse paper
+    { MM2MM100( 227 ),       MM2MM100( 356 )     },          // 57 - SuperA/SuperA/A4 paper
+    { MM2MM100( 305 ),       MM2MM100( 487 )     },          // 58 - SuperB/SuperB/A3 paper
+    { IN2MM100( 8.5 ),       IN2MM100( 12.69 )   },          // 59 - Letter plus paper
+    { MM2MM100( 210 ),       MM2MM100( 330 )     },          // 60 - A4 plus paper
+    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 61 - A5 transverse paper
+    { MM2MM100( 182 ),       MM2MM100( 257 )     },          // 62 - JIS B5 transverse paper
+    { MM2MM100( 322 ),       MM2MM100( 445 )     },          // 63 - A3 extra paper
+    { MM2MM100( 174 ),       MM2MM100( 235 )     },          // 64 - A5 extra paper
+    { MM2MM100( 201 ),       MM2MM100( 276 )     },          // 65 - ISO B5 extra paper
+    { MM2MM100( 420 ),       MM2MM100( 594 )     },          // 66 - A2 paper
+    { MM2MM100( 297 ),       MM2MM100( 420 )     },          // 67 - A3 transverse paper
+    { MM2MM100( 322 ),       MM2MM100( 445 )     }           // 68 - A3 extra transverse paper
+};
+
+sal_Int32 PaperSizeConv::getMSPaperSizeIndex( const com::sun::star::awt::Size& rSize )
+{
+    sal_Int32 nElems = SAL_N_ELEMENTS( spPaperSizeTable );
+    // Need to find the best match for current size
+    sal_Int32 nDeltaWidth = 0;
+    sal_Int32 nDeltaHeight = 0;
+
+    sal_Int32 nPaperSizeIndex = 0; // Undefined
+    const ApiPaperSize* pItem = spPaperSizeTable;
+    const ApiPaperSize* pEnd =  spPaperSizeTable + nElems;
+    for ( ; pItem != pEnd; ++pItem )
+    {
+        sal_Int32 nCurDeltaHeight = std::abs( pItem->mnHeight - rSize.Height );
+        sal_Int32 nCurDeltaWidth = std::abs( pItem->mnWidth - rSize.Width );
+        if ( pItem == spPaperSizeTable ) // initialise delta with first item
+        {
+            nDeltaWidth = nCurDeltaWidth;
+            nDeltaHeight = nCurDeltaHeight;
+        }
+        else
+        {
+            if ( nCurDeltaWidth < nDeltaWidth && nCurDeltaHeight < nDeltaHeight )
+            {
+                nDeltaWidth = nCurDeltaWidth;
+                nDeltaHeight = nCurDeltaHeight;
+                nPaperSizeIndex = (pItem - spPaperSizeTable);
+            }
+        }
+    }
+    sal_Int32 nTol = 10; // hmm not sure is this the best way
+    if ( nDeltaWidth <= nTol && nDeltaHeight <= nTol )
+        return nPaperSizeIndex;
+    return 0;
+}
+
+const ApiPaperSize& PaperSizeConv::getApiSizeForMSPaperSizeIndex( sal_Int32 nMSOPaperIndex )
+{
+    sal_Int32 nElems = SAL_N_ELEMENTS( spPaperSizeTable );
+    if ( nMSOPaperIndex  < 0 || nMSOPaperIndex > nElems - 1 )
+        return spPaperSizeTable[ 0 ];
+    return spPaperSizeTable[ nMSOPaperIndex ];
+}
+
 }
 }
 
diff --git a/include/filter/msfilter/util.hxx b/include/filter/msfilter/util.hxx
index f50e4d1..e134199 100644
--- a/include/filter/msfilter/util.hxx
+++ b/include/filter/msfilter/util.hxx
@@ -15,6 +15,7 @@
 #include <tools/color.hxx>
 #include <com/sun/star/lang/Locale.hpp>
 #include "filter/msfilter/msfilterdllapi.h"
+#include <com/sun/star/awt/Size.hpp>
 
 namespace msfilter {
 namespace util {
@@ -73,6 +74,20 @@ MSFILTER_DLLPUBLIC TextCategory categorizeCodePoint(sal_uInt32 codePoint, const
 /// Converts tools Color to HTML color (without leading hashmark).
 MSFILTER_DLLPUBLIC OString ConvertColor( const Color &rColor );
 
+
+/** Paper size in 1/100 millimeters. */
+struct MSFILTER_DLLPUBLIC ApiPaperSize
+{
+    sal_Int32           mnWidth;
+    sal_Int32           mnHeight;
+};
+
+class MSFILTER_DLLPUBLIC PaperSizeConv
+{
+public:
+    static sal_Int32 getMSPaperSizeIndex( const com::sun::star::awt::Size& rSize );
+    static const ApiPaperSize& getApiSizeForMSPaperSizeIndex( sal_Int32 nMSOPaperIndex );
+};
 }
 }
 
diff --git a/sc/source/filter/oox/pagesettings.cxx b/sc/source/filter/oox/pagesettings.cxx
index 00b5d5a..28553dc 100644
--- a/sc/source/filter/oox/pagesettings.cxx
+++ b/sc/source/filter/oox/pagesettings.cxx
@@ -42,6 +42,7 @@
 #include "stylesbuffer.hxx"
 #include "unitconverter.hxx"
 #include "document.hxx"
+#include <filter/msfilter/util.hxx>
 
 namespace oox {
 namespace xls {
@@ -892,93 +893,6 @@ void HeaderFooterParser::setNewPortion( HFPortionId ePortion )
 
 // ============================================================================
 
-namespace {
-
-/** Paper size in 1/100 millimeters. */
-struct ApiPaperSize
-{
-    sal_Int32           mnWidth;
-    sal_Int32           mnHeight;
-};
-
-#define IN2MM100( v )    static_cast< sal_Int32 >( (v) * 2540.0 + 0.5 )
-#define MM2MM100( v )    static_cast< sal_Int32 >( (v) * 100.0 + 0.5 )
-
-static const ApiPaperSize spPaperSizeTable[] =
-{
-    { 0, 0 },                                                //  0 - (undefined)
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  1 - Letter paper
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  2 - Letter small paper
-    { IN2MM100( 11 ),        IN2MM100( 17 )      },          //  3 - Tabloid paper
-    { IN2MM100( 17 ),        IN2MM100( 11 )      },          //  4 - Ledger paper
-    { IN2MM100( 8.5 ),       IN2MM100( 14 )      },          //  5 - Legal paper
-    { IN2MM100( 5.5 ),       IN2MM100( 8.5 )     },          //  6 - Statement paper
-    { IN2MM100( 7.25 ),      IN2MM100( 10.5 )    },          //  7 - Executive paper
-    { MM2MM100( 297 ),       MM2MM100( 420 )     },          //  8 - A3 paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          //  9 - A4 paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 10 - A4 small paper
-    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 11 - A5 paper
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 12 - B4 paper
-    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 13 - B5 paper
-    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 14 - Folio paper
-    { MM2MM100( 215 ),       MM2MM100( 275 )     },          // 15 - Quarto paper
-    { IN2MM100( 10 ),        IN2MM100( 14 )      },          // 16 - Standard paper
-    { IN2MM100( 11 ),        IN2MM100( 17 )      },          // 17 - Standard paper
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          // 18 - Note paper
-    { IN2MM100( 3.875 ),     IN2MM100( 8.875 )   },          // 19 - #9 envelope
-    { IN2MM100( 4.125 ),     IN2MM100( 9.5 )     },          // 20 - #10 envelope
-    { IN2MM100( 4.5 ),       IN2MM100( 10.375 )  },          // 21 - #11 envelope
-    { IN2MM100( 4.75 ),      IN2MM100( 11 )      },          // 22 - #12 envelope
-    { IN2MM100( 5 ),         IN2MM100( 11.5 )    },          // 23 - #14 envelope
-    { IN2MM100( 17 ),        IN2MM100( 22 )      },          // 24 - C paper
-    { IN2MM100( 22 ),        IN2MM100( 34 )      },          // 25 - D paper
-    { IN2MM100( 34 ),        IN2MM100( 44 )      },          // 26 - E paper
-    { MM2MM100( 110 ),       MM2MM100( 220 )     },          // 27 - DL envelope
-    { MM2MM100( 162 ),       MM2MM100( 229 )     },          // 28 - C5 envelope
-    { MM2MM100( 324 ),       MM2MM100( 458 )     },          // 29 - C3 envelope
-    { MM2MM100( 229 ),       MM2MM100( 324 )     },          // 30 - C4 envelope
-    { MM2MM100( 114 ),       MM2MM100( 162 )     },          // 31 - C6 envelope
-    { MM2MM100( 114 ),       MM2MM100( 229 )     },          // 32 - C65 envelope
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 33 - B4 envelope
-    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 34 - B5 envelope
-    { MM2MM100( 176 ),       MM2MM100( 125 )     },          // 35 - B6 envelope
-    { MM2MM100( 110 ),       MM2MM100( 230 )     },          // 36 - Italy envelope
-    { IN2MM100( 3.875 ),     IN2MM100( 7.5 )     },          // 37 - Monarch envelope
-    { IN2MM100( 3.625 ),     IN2MM100( 6.5 )     },          // 38 - 6 3/4 envelope
-    { IN2MM100( 14.875 ),    IN2MM100( 11 )      },          // 39 - US standard fanfold
-    { IN2MM100( 8.5 ),       IN2MM100( 12 )      },          // 40 - German standard fanfold
-    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 41 - German legal fanfold
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 42 - ISO B4
-    { MM2MM100( 200 ),       MM2MM100( 148 )     },          // 43 - Japanese double postcard
-    { IN2MM100( 9 ),         IN2MM100( 11 )      },          // 44 - Standard paper
-    { IN2MM100( 10 ),        IN2MM100( 11 )      },          // 45 - Standard paper
-    { IN2MM100( 15 ),        IN2MM100( 11 )      },          // 46 - Standard paper
-    { MM2MM100( 220 ),       MM2MM100( 220 )     },          // 47 - Invite envelope
-    { 0, 0 },                                                // 48 - (undefined)
-    { 0, 0 },                                                // 49 - (undefined)
-    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 50 - Letter extra paper
-    { IN2MM100( 9.275 ),     IN2MM100( 15 )      },          // 51 - Legal extra paper
-    { IN2MM100( 11.69 ),     IN2MM100( 18 )      },          // 52 - Tabloid extra paper
-    { MM2MM100( 236 ),       MM2MM100( 322 )     },          // 53 - A4 extra paper
-    { IN2MM100( 8.275 ),     IN2MM100( 11 )      },          // 54 - Letter transverse paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 55 - A4 transverse paper
-    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 56 - Letter extra transverse paper
-    { MM2MM100( 227 ),       MM2MM100( 356 )     },          // 57 - SuperA/SuperA/A4 paper
-    { MM2MM100( 305 ),       MM2MM100( 487 )     },          // 58 - SuperB/SuperB/A3 paper
-    { IN2MM100( 8.5 ),       IN2MM100( 12.69 )   },          // 59 - Letter plus paper
-    { MM2MM100( 210 ),       MM2MM100( 330 )     },          // 60 - A4 plus paper
-    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 61 - A5 transverse paper
-    { MM2MM100( 182 ),       MM2MM100( 257 )     },          // 62 - JIS B5 transverse paper
-    { MM2MM100( 322 ),       MM2MM100( 445 )     },          // 63 - A3 extra paper
-    { MM2MM100( 174 ),       MM2MM100( 235 )     },          // 64 - A5 extra paper
-    { MM2MM100( 201 ),       MM2MM100( 276 )     },          // 65 - ISO B5 extra paper
-    { MM2MM100( 420 ),       MM2MM100( 594 )     },          // 66 - A2 paper
-    { MM2MM100( 297 ),       MM2MM100( 420 )     },          // 67 - A3 transverse paper
-    { MM2MM100( 322 ),       MM2MM100( 445 )     }           // 68 - A3 extra transverse paper
-};
-
-} // namespace
-
 // ----------------------------------------------------------------------------
 
 PageSettingsConverter::HFHelperData::HFHelperData( sal_Int32 nLeftPropId, sal_Int32 nRightPropId ) :
@@ -1043,11 +957,11 @@ void PageSettingsConverter::writePageSettingsProperties(
         awt::Size aSize;
         bool bValid = false;
 
-        if( (0 < rModel.mnPaperSize) && (rModel.mnPaperSize < static_cast< sal_Int32 >( STATIC_ARRAY_SIZE( spPaperSizeTable ) )) )
+        if( (0 < rModel.mnPaperSize) )
         {
-            const ApiPaperSize& rPaperSize = spPaperSizeTable[ rModel.mnPaperSize ];
+            const msfilter::util::ApiPaperSize& rPaperSize = msfilter::util::PaperSizeConv::getApiSizeForMSPaperSizeIndex(  rModel.mnPaperSize );
             aSize = awt::Size( rPaperSize.mnWidth, rPaperSize.mnHeight );
-            bValid = true;
+            bValid = ( rPaperSize.mnWidth != 0 && rPaperSize.mnHeight != 0 );
         }
         if( rModel.mnPaperWidth > 0 && rModel.mnPaperHeight > 0 )
         {
diff --git a/sc/source/ui/vba/vbapagesetup.cxx b/sc/source/ui/vba/vbapagesetup.cxx
index 0f6c82e..465467d 100644
--- a/sc/source/ui/vba/vbapagesetup.cxx
+++ b/sc/source/ui/vba/vbapagesetup.cxx
@@ -32,6 +32,7 @@
 #include <i18nutil/paper.hxx>
 #include <sal/macros.h>
 #include <algorithm>
+#include <filter/msfilter/util.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::ooo::vba;
@@ -626,141 +627,28 @@ OUString SAL_CALL ScVbaPageSetup::getPrintTitleColumns() throw (uno::RuntimeExce
 void SAL_CALL ScVbaPageSetup::setPrintTitleColumns( const OUString& /*_printtitlecolumns*/ ) throw (uno::RuntimeException)
 {
 }
-/** Paper size in 1/100 millimeters. */
-struct ApiPaperSize
-{
-    sal_Int32           mnWidth;
-    sal_Int32           mnHeight;
-};
-
-// #FIXME ( this is cut'n'pasted from oox, we need to share it somewhere, msfilter ? )
-
-#define IN2MM100( v )    static_cast< sal_Int32 >( (v) * 2540.0 + 0.5 )
-#define MM2MM100( v )    static_cast< sal_Int32 >( (v) * 100.0 + 0.5 )
-
-static const ApiPaperSize spPaperSizeTable[] =
-{
-    { 0, 0 },                                                //  0 - (undefined)
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  1 - Letter paper
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          //  2 - Letter small paper
-    { IN2MM100( 11 ),        IN2MM100( 17 )      },          //  3 - Tabloid paper
-    { IN2MM100( 17 ),        IN2MM100( 11 )      },          //  4 - Ledger paper
-    { IN2MM100( 8.5 ),       IN2MM100( 14 )      },          //  5 - Legal paper
-    { IN2MM100( 5.5 ),       IN2MM100( 8.5 )     },          //  6 - Statement paper
-    { IN2MM100( 7.25 ),      IN2MM100( 10.5 )    },          //  7 - Executive paper
-    { MM2MM100( 297 ),       MM2MM100( 420 )     },          //  8 - A3 paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          //  9 - A4 paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 10 - A4 small paper
-    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 11 - A5 paper
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 12 - B4 paper
-    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 13 - B5 paper
-    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 14 - Folio paper
-    { MM2MM100( 215 ),       MM2MM100( 275 )     },          // 15 - Quarto paper
-    { IN2MM100( 10 ),        IN2MM100( 14 )      },          // 16 - Standard paper
-    { IN2MM100( 11 ),        IN2MM100( 17 )      },          // 17 - Standard paper
-    { IN2MM100( 8.5 ),       IN2MM100( 11 )      },          // 18 - Note paper
-    { IN2MM100( 3.875 ),     IN2MM100( 8.875 )   },          // 19 - #9 envelope
-    { IN2MM100( 4.125 ),     IN2MM100( 9.5 )     },          // 20 - #10 envelope
-    { IN2MM100( 4.5 ),       IN2MM100( 10.375 )  },          // 21 - #11 envelope
-    { IN2MM100( 4.75 ),      IN2MM100( 11 )      },          // 22 - #12 envelope
-    { IN2MM100( 5 ),         IN2MM100( 11.5 )    },          // 23 - #14 envelope
-    { IN2MM100( 17 ),        IN2MM100( 22 )      },          // 24 - C paper
-    { IN2MM100( 22 ),        IN2MM100( 34 )      },          // 25 - D paper
-    { IN2MM100( 34 ),        IN2MM100( 44 )      },          // 26 - E paper
-    { MM2MM100( 110 ),       MM2MM100( 220 )     },          // 27 - DL envelope
-    { MM2MM100( 162 ),       MM2MM100( 229 )     },          // 28 - C5 envelope
-    { MM2MM100( 324 ),       MM2MM100( 458 )     },          // 29 - C3 envelope
-    { MM2MM100( 229 ),       MM2MM100( 324 )     },          // 30 - C4 envelope
-    { MM2MM100( 114 ),       MM2MM100( 162 )     },          // 31 - C6 envelope
-    { MM2MM100( 114 ),       MM2MM100( 229 )     },          // 32 - C65 envelope
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 33 - B4 envelope
-    { MM2MM100( 176 ),       MM2MM100( 250 )     },          // 34 - B5 envelope
-    { MM2MM100( 176 ),       MM2MM100( 125 )     },          // 35 - B6 envelope
-    { MM2MM100( 110 ),       MM2MM100( 230 )     },          // 36 - Italy envelope
-    { IN2MM100( 3.875 ),     IN2MM100( 7.5 )     },          // 37 - Monarch envelope
-    { IN2MM100( 3.625 ),     IN2MM100( 6.5 )     },          // 38 - 6 3/4 envelope
-    { IN2MM100( 14.875 ),    IN2MM100( 11 )      },          // 39 - US standard fanfold
-    { IN2MM100( 8.5 ),       IN2MM100( 12 )      },          // 40 - German standard fanfold
-    { IN2MM100( 8.5 ),       IN2MM100( 13 )      },          // 41 - German legal fanfold
-    { MM2MM100( 250 ),       MM2MM100( 353 )     },          // 42 - ISO B4
-    { MM2MM100( 200 ),       MM2MM100( 148 )     },          // 43 - Japanese double postcard
-    { IN2MM100( 9 ),         IN2MM100( 11 )      },          // 44 - Standard paper
-    { IN2MM100( 10 ),        IN2MM100( 11 )      },          // 45 - Standard paper
-    { IN2MM100( 15 ),        IN2MM100( 11 )      },          // 46 - Standard paper
-    { MM2MM100( 220 ),       MM2MM100( 220 )     },          // 47 - Invite envelope
-    { 0, 0 },                                                // 48 - (undefined)
-    { 0, 0 },                                                // 49 - (undefined)
-    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 50 - Letter extra paper
-    { IN2MM100( 9.275 ),     IN2MM100( 15 )      },          // 51 - Legal extra paper
-    { IN2MM100( 11.69 ),     IN2MM100( 18 )      },          // 52 - Tabloid extra paper
-    { MM2MM100( 236 ),       MM2MM100( 322 )     },          // 53 - A4 extra paper
-    { IN2MM100( 8.275 ),     IN2MM100( 11 )      },          // 54 - Letter transverse paper
-    { MM2MM100( 210 ),       MM2MM100( 297 )     },          // 55 - A4 transverse paper
-    { IN2MM100( 9.275 ),     IN2MM100( 12 )      },          // 56 - Letter extra transverse paper
-    { MM2MM100( 227 ),       MM2MM100( 356 )     },          // 57 - SuperA/SuperA/A4 paper
-    { MM2MM100( 305 ),       MM2MM100( 487 )     },          // 58 - SuperB/SuperB/A3 paper
-    { IN2MM100( 8.5 ),       IN2MM100( 12.69 )   },          // 59 - Letter plus paper
-    { MM2MM100( 210 ),       MM2MM100( 330 )     },          // 60 - A4 plus paper
-    { MM2MM100( 148 ),       MM2MM100( 210 )     },          // 61 - A5 transverse paper
-    { MM2MM100( 182 ),       MM2MM100( 257 )     },          // 62 - JIS B5 transverse paper
-    { MM2MM100( 322 ),       MM2MM100( 445 )     },          // 63 - A3 extra paper
-    { MM2MM100( 174 ),       MM2MM100( 235 )     },          // 64 - A5 extra paper
-    { MM2MM100( 201 ),       MM2MM100( 276 )     },          // 65 - ISO B5 extra paper
-    { MM2MM100( 420 ),       MM2MM100( 594 )     },          // 66 - A2 paper
-    { MM2MM100( 297 ),       MM2MM100( 420 )     },          // 67 - A3 transverse paper
-    { MM2MM100( 322 ),       MM2MM100( 445 )     }           // 68 - A3 extra transverse paper
-};
 
 sal_Int32 SAL_CALL ScVbaPageSetup::getPaperSize() throw (uno::RuntimeException)
 {
-    sal_Int32 nElems = SAL_N_ELEMENTS( spPaperSizeTable );
-    // Need to find the best match for current size
-    sal_Int32 nDeltaWidth = 0;
-    sal_Int32 nDeltaHeight = 0;
     awt::Size aSize; // current papersize
     mxPageProps->getPropertyValue( "Size" ) >>= aSize;
     if ( mbIsLandscape )
         ::std::swap( aSize.Width, aSize.Height );
 
-    sal_Int32 nPaperSizeIndex = 0; // Undefined
-    const ApiPaperSize* pItem = spPaperSizeTable;
-    const ApiPaperSize* pEnd =  spPaperSizeTable + nElems;
-    for ( ; pItem != pEnd; ++pItem )
-    {
-        const ApiPaperSize& rSize = *pItem;
-        sal_Int32 nCurDeltaHeight = std::abs( rSize.mnHeight - aSize.Height );
-        sal_Int32 nCurDeltaWidth = std::abs( rSize.mnWidth - aSize.Width );
-        if ( pItem == spPaperSizeTable ) // initialise delta with first item
-        {
-            nDeltaWidth = nCurDeltaWidth;
-            nDeltaHeight = nCurDeltaHeight;
-        }
-        else
-        {
-            if ( nCurDeltaWidth < nDeltaWidth && nCurDeltaHeight < nDeltaHeight )
-            {
-                nDeltaWidth = nCurDeltaWidth;
-                nDeltaHeight = nCurDeltaHeight;
-                nPaperSizeIndex = (pItem - spPaperSizeTable);
-            }
-        }
-    }
-    sal_Int32 nTol = 10; // hmm not sure is this the best way
-    if ( nDeltaWidth <= nTol && nDeltaHeight <= nTol )
-        return nPaperSizeIndex;
-    return excel::XlPaperSize::xlPaperUser;
+    sal_Int32 nPaperSizeIndex = msfilter::util::PaperSizeConv::getMSPaperSizeIndex( aSize );
+    if ( nPaperSizeIndex == 0 )
+        nPaperSizeIndex = excel::XlPaperSize::xlPaperUser;
+    return nPaperSizeIndex;
 }
 
 void SAL_CALL ScVbaPageSetup::setPaperSize( sal_Int32 papersize ) throw (uno::RuntimeException)
 {
-    sal_Int32 nElems = SAL_N_ELEMENTS( spPaperSizeTable );
     if ( papersize != excel::XlPaperSize::xlPaperUser )
     {
-        if ( papersize < 0 || papersize > nElems - 1 )
-            throw uno::RuntimeException();
         awt::Size aPaperSize;
-        aPaperSize.Height = spPaperSizeTable[ papersize ].mnHeight;
-        aPaperSize.Width = spPaperSizeTable[ papersize ].mnWidth;
+        const msfilter::util::ApiPaperSize& rConvertedSize = msfilter::util::PaperSizeConv::getApiSizeForMSPaperSizeIndex( papersize );
+        aPaperSize.Height = rConvertedSize.mnHeight;
+        aPaperSize.Width = rConvertedSize.mnWidth;
         if ( mbIsLandscape )
             ::std::swap( aPaperSize.Width, aPaperSize.Height );
         mxPageProps->setPropertyValue( "Size", uno::makeAny( aPaperSize ) );


More information about the Libreoffice-commits mailing list