Hi Carsten,
I have fixed finally the issue83555, the attachment is the source changes.
And I have submitted the it to the issue83555. Please, review it.
During I did the work, Carsten helped me enormously with advice on how
to fix it.

Thank you for your helps.

Kind Regards

Shi zhoubo
diff -urNpw svx_old/source/dialog/cfg.cxx svx/source/dialog/cfg.cxx
--- svx_old/source/dialog/cfg.cxx       2007-11-20 01:20:20.000000000 +0800
+++ svx/source/dialog/cfg.cxx   2008-01-22 17:14:36.000000000 +0800
@@ -51,11 +51,6 @@
 #ifndef _SV_SCRBAR_HXX
 #include <vcl/scrbar.hxx>
 #endif
-//added for issue73355
-//#ifndef _SV_SVDATA_HXX
-//#include <vcl/svdata.hxx>
-//#endif
-//issue73355 ends
 
 #include <sfx2/app.hxx>
 #include <sfx2/sfxdlg.hxx>
@@ -5759,10 +5754,21 @@ bool SvxIconSelectorDialog::ReplaceGraph
        uno::Sequence< beans::PropertyValue > aMediaProps( 1 );
        aMediaProps[0].Name = ::rtl::OUString::createFromAscii("URL");
        aMediaProps[0].Value <<= aURL;
-
+    com::sun::star::awt::Size aSize;
+    bool bOK = FALSE;
     try
        {
         xGraphic = m_xGraphProvider->queryGraphic( aMediaProps );
+
+               uno::Reference< beans::XPropertySet > props =
+                       m_xGraphProvider->queryGraphicDescriptor( aMediaProps );
+               uno::Any a = props->getPropertyValue(
+                       OUString::createFromAscii("SizePixel") );
+               a >>= aSize;
+               if (0 == aSize.Width || 0 == aSize.Height)
+                       return FALSE;
+               else
+                       bOK = TRUE;
     }
     catch ( uno::Exception& )
     {
@@ -5787,8 +5793,16 @@ bool SvxIconSelectorDialog::ReplaceGraph
 
                        aTbSymbol.RemoveItem( aTbSymbol.GetItemPos( nId ) );
                        aMediaProps[0].Value <<= aURL;
-                       aTbSymbol.InsertItem( nId, Image( xGraphic ), aURL, 0, 
0 );
-               
+                               Image aImage( xGraphic );
+                               if ( bOK && ((aSize.Width != m_nExpectedSize) 
|| (aSize.Height != m_nExpectedSize)) )
+                               {
+                                       BitmapEx aBitmap = aImage.GetBitmapEx();
+                                       BitmapEx aBitmapex = 
AutoScaleBitmap(aBitmap, m_nExpectedSize);
+                                       aBitmap.Clear();
+                                       aImage = Image( aBitmapex);
+                                       aBitmapex.Clear();
+                               }
+                               aTbSymbol.InsertItem( nId,aImage, aURL, 0, 0 ); 
                 bResult = true;
                 break;
             }
@@ -5891,23 +5905,18 @@ void SvxIconSelectorDialog::ImportGraphi
 
        if ( rejectedCount != 0 )
        {
-               OUString message = String( SVX_RES( 
RID_SVXSTR_IMPORT_ICON_ERROR ) );
-               if ( m_nExpectedSize != 16 )
-               {
-                       message = replaceSixteen( message, m_nExpectedSize );
-               }
-
+               OUString message =OUString::createFromAscii("");
                OUString newLine = OUString::createFromAscii("\n");
-               message += newLine;
-               message += newLine;
-
+               rtl::OUString fPath = OUString::createFromAscii("");
+               if (rejectedCount > 1)
+                       fPath = rPaths[0].copy(8) + 
::rtl::OUString::createFromAscii( "/" );
                for ( sal_Int32 i = 0; i < rejectedCount; i++ )
                {
-                       message += rejected[i];
+                       message += fPath + rejected[i];
                        message += newLine;
                }
-
-               InfoBox( this, message ).Execute();
+               SvxIconChangeDialog * pDialog = new SvxIconChangeDialog(this, 
message);
+               pDialog->Execute();
        }
 }
 
@@ -5923,9 +5932,8 @@ bool SvxIconSelectorDialog::ImportGraphi
 
        uno::Reference< graphic::XGraphic > xGraphic;
        com::sun::star::awt::Size aSize;
-
+    bool bOK = TRUE;
        aMediaProps[0].Value <<= aURL;
-
        try
        {
                uno::Reference< beans::XPropertySet > props =
@@ -5934,30 +5942,34 @@ bool SvxIconSelectorDialog::ImportGraphi
                uno::Any a = props->getPropertyValue(
                        OUString::createFromAscii("SizePixel") );
 
-               if ( ( a >>= aSize ) && aSize.Width == m_nExpectedSize &&
-                               aSize.Height == m_nExpectedSize )
-               {
                        xGraphic = m_xGraphProvider->queryGraphic( aMediaProps 
);
-
                        if ( xGraphic.is() )
                        {
+                               a >>= aSize;
+                               if ( 0 == aSize.Width || 0 == aSize.Height )
+                                       bOK = FALSE;
                                Image aImage( xGraphic );
-
-                               if ( !!aImage )
+                               if ( bOK && ((aSize.Width != m_nExpectedSize) 
|| (aSize.Height != m_nExpectedSize)) )
+                               {
+                                       BitmapEx aBitmap = aImage.GetBitmapEx();
+                                       BitmapEx aBitmapex = 
AutoScaleBitmap(aBitmap, m_nExpectedSize);
+                                       aBitmap.Clear();
+                                       aImage = Image( aBitmapex);
+                                       aBitmapex.Clear();
+                               }
+                               if ( bOK && !!aImage )
                                {
                                        aTbSymbol.InsertItem( nId, aImage, 
aURL, 0, 0 ); 
-
+                    xGraphic = aImage.GetXGraphic();
                                        xGraphic->acquire();
 
                                        aTbSymbol.SetItemData(
                                                nId, static_cast< void * > ( 
xGraphic.get() ) );
-
                                        uno::Sequence< OUString > aImportURL( 1 
);
                                        aImportURL[ 0 ] = aURL;
                                        uno::Sequence< 
uno::Reference<graphic::XGraphic > > aImportGraph( 1 );
                                        aImportGraph[ 0 ] = xGraphic;
                                        m_xImportedImageManager->insertImages( 
GetImageType(), aImportURL, aImportGraph );
-                                       
                                        uno::Reference< 
css::ui::XUIConfigurationPersistence > 
                                        xConfigPersistence( 
m_xImportedImageManager, uno::UNO_QUERY );
                                        
@@ -5978,7 +5990,6 @@ bool SvxIconSelectorDialog::ImportGraphi
                                OSL_TRACE("could not get query XGraphic");
                        }
                }
-       }
        catch( uno::Exception& e )
        {
                OSL_TRACE("Caught exception importing XGraphic: %s", 
PRTSTR(e.Message));
@@ -6034,3 +6045,74 @@ USHORT SvxIconReplacementDialog :: ShowD
        this->Execute();
        return ( this->GetCurButtonId() );
 }
+
+SvxIconChangeDialog::SvxIconChangeDialog(
+       Window *pWindow, const rtl::OUString& aMessage)
+       :
+       ModalDialog                ( pWindow, SVX_RES( MD_ICONCHANGE ) ),
+       aFImageInfo            (this, SVX_RES( FI_INFO ) ),
+       aDescriptionLabel      (this, SVX_RES(FTCHGE_DESCRIPTION)),
+       aBtnOK                 (this, SVX_RES(MD_BTN_OK)),
+       aLineEditDescription   (this, SVX_RES(EDT_ADDR))
+{
+       FreeResource();
+       aFImageInfo.SetImage(InfoBox::GetStandardImage());
+       aLineEditDescription.SetControlBackground( 
GetSettings().GetStyleSettings().GetDialogColor() );
+       aLineEditDescription.SetAutoScroll( TRUE );
+       aLineEditDescription.EnableCursor( FALSE );
+       aLineEditDescription.SetText(aMessage); 
+}
+
+BitmapEx SvxIconSelectorDialog::AutoScaleBitmap(BitmapEx & aBitmap, const long 
aStandardSize)
+{
+
+       Point aEmptyPoint(0,0);
+       sal_Int32 imgNewWidth = 0;
+       sal_Int32 imgNewHeight = 0;
+       double imgposX = 0;
+       double imgposY = 0;
+    BitmapEx  aRet = aBitmap;
+       double imgOldWidth = aRet.GetSizePixel().Width();
+       double imgOldHeight =aRet.GetSizePixel().Height();
+
+       if (imgOldWidth >= aStandardSize || imgOldHeight >= aStandardSize)
+       {
+               if (imgOldWidth >= imgOldHeight)
+               { 
+                       imgNewWidth = aStandardSize;
+                       imgNewHeight = sal_Int32(imgOldHeight / (imgOldWidth / 
aStandardSize) + 0.5); 
+                       imgposX = 0;
+                       imgposY = (aStandardSize - (imgOldHeight / (imgOldWidth 
/ aStandardSize) + 0.5)) / 2 + 0.5; 
+               } 
+               else 
+               {
+                       imgNewHeight = aStandardSize;
+                       imgNewWidth = sal_Int32(imgOldWidth / (imgOldHeight / 
aStandardSize) + 0.5); 
+                       imgposY = 0;
+                       imgposX = (aStandardSize - (imgOldWidth / (imgOldHeight 
/ aStandardSize) + 0.5)) / 2 + 0.5;
+               }
+               
+               aRet.Scale(Size( imgNewWidth, imgNewHeight ), 
BMP_SCALE_INTERPOLATE);
+
+       }
+       else
+       {
+               imgposX = (aStandardSize - imgOldWidth) / 2 + 0.5;
+               imgposY = (aStandardSize - imgOldHeight) / 2 + 0.5;
+       }
+
+       Size aStdSize( aStandardSize, aStandardSize );
+       Rectangle aRect(aEmptyPoint, aStdSize );
+
+       VirtualDevice aVirDevice( *Application::GetDefaultDevice(),0,1);
+       aVirDevice.SetOutputSizePixel( aStdSize );
+       aVirDevice.SetFillColor( COL_TRANSPARENT );
+       aVirDevice.SetLineColor( COL_TRANSPARENT );
+
+       aVirDevice.DrawRect( aRect );
+       Point aPointPixel( (long)imgposX, (long)imgposY );
+       aVirDevice.DrawBitmapEx( aPointPixel, aRet );
+       aRet = aVirDevice.GetBitmapEx( aEmptyPoint, aStdSize );
+
+       return aRet;
+}
\ No newline at end of file
diff -urNpw svx_old/source/dialog/cfg.hrc svx/source/dialog/cfg.hrc
--- svx_old/source/dialog/cfg.hrc       2007-11-20 01:20:34.000000000 +0800
+++ svx/source/dialog/cfg.hrc   2008-01-22 17:10:08.000000000 +0800
@@ -105,3 +105,9 @@
 
 #define FL_SEPARATOR (108 + CFG_OFFSET)
 #define BTN_DELETE (109 + CFG_OFFSET)
+
+#define MD_ICONCHANGE (119 + CFG_OFFSET)
+#define FTCHGE_DESCRIPTION (120 + CFG_OFFSET)
+#define EDT_ADDR (121 + CFG_OFFSET)  
+#define MD_BTN_OK (122 + CFG_OFFSET)
+#define FI_INFO (123 + CFG_OFFSET)
\ No newline at end of file
diff -urNpw svx_old/source/dialog/cfg.hxx svx/source/dialog/cfg.hxx
--- svx_old/source/dialog/cfg.hxx       2007-11-20 01:20:48.000000000 +0800
+++ svx/source/dialog/cfg.hxx   2008-01-22 17:12:40.000000000 +0800
@@ -60,7 +60,6 @@
 #ifndef _SVTOOLS_SVMEDIT2_HXX
 #include <svtools/svmedit2.hxx>
 #endif
-
 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
 #include <com/sun/star/beans/XPropertySet.hpp>
 #endif
@@ -834,6 +833,8 @@ private:
        void ImportGraphics(
                const com::sun::star::uno::Sequence< rtl::OUString >& aURLs );
 
+    BitmapEx AutoScaleBitmap(BitmapEx & aBitmap, const long aStandardSize);
+
 public:
 
        SvxIconSelectorDialog(
@@ -869,4 +870,14 @@ public:
        rtl::OUString ReplaceIconName( const rtl::OUString& );
        USHORT ShowDialog();
 };
+class SvxIconChangeDialog : public ModalDialog
+{
+private:
+       FixedImage              aFImageInfo;
+       OKButton                aBtnOK;
+       FixedText         aDescriptionLabel;
+       SvxDescriptionEdit aLineEditDescription;
+public:
+       SvxIconChangeDialog(Window *pWindow, const rtl::OUString& aMessage);
+};
 #endif // _SVXCFG_HXX
diff -urNpw svx_old/source/dialog/cfg.src svx/source/dialog/cfg.src
--- svx_old/source/dialog/cfg.src       2007-11-20 01:21:02.000000000 +0800
+++ svx/source/dialog/cfg.src   2008-01-22 17:10:44.000000000 +0800
@@ -678,9 +678,9 @@ ModalDialog MD_ICONSELECTOR
        FixedText FT_NOTE
        {
                Pos = MAP_APPFONT ( 12 , 95 ) ; 
-               Size = MAP_APPFONT ( 172 , 24 ) ;
+               Size = MAP_APPFONT ( 200 , 24 ) ;
                Text [ de ] = "Hinweis:\nBitte beachten Sie das für einen 
erfolgreichen Import die Symbole eine Größe  von 16x16 Pixel haben müssen." ;
-               Text [ en-US ] = "Note:\nThe size of the icons must be 16x16 
pixels for them to be successfully imported." ;
+               Text [ en-US ] = "Note:\nThe size of an icon should be 16x16 
pixel to achieve best quality. Different sized icons will be scaled 
automatically." ;
                Left = TRUE ;
                WordBreak = TRUE;
        };
@@ -697,11 +697,53 @@ ModalDialog MD_ICONSELECTOR
        };
 };
 
+ModalDialog MD_ICONCHANGE
+{
+       OutputSize = TRUE ;
+       SVLook = TRUE ;
+       Size = MAP_APPFONT ( 200 , 150 ) ;
+       Text [ en-US ] = "%PRODUCTNAME %PRODUCTVERSION" ;
+       Moveable = TRUE ;
+       FixedImage FI_INFO
+       {
+               Pos = MAP_APPFONT ( 6 , 6 ) ;
+               Size = MAP_APPFONT ( 24 , 24 ) ;
+               Fixed = Image
+               {
+               
+               };
+       };
+       FixedText FTCHGE_DESCRIPTION
+    {
+        Pos = MAP_APPFONT ( 30 ,15 ) ;
+        Size = MAP_APPFONT ( 200 , 50 ) ;
+        Text [ en-US ] = "The files listed below could not be imported.\nThe 
file format could not be interpreted." ;
+    };
+    
+       MultiLineEdit EDT_ADDR
+       {
+               Pos = MAP_APPFONT ( 30 , 38) ;
+        Size = MAP_APPFONT ( 140 , 83 ) ;
+        Border = TRUE;
+        VScroll = TRUE;
+        IgnoreTab = TRUE;
+        ReadOnly = TRUE;
+       };
+       OKButton MD_BTN_OK
+       {
+               Pos = MAP_APPFONT ( 68 , 131 ) ; 
+               Size = MAP_APPFONT ( 50 , 14 ) ;
+               TabStop = TRUE ;
+               DefButton = TRUE ;
+       };
+
+};
+
 // Strings ---------------------------------------------------------------
 String RID_SVXSTR_IMPORT_ICON_ERROR
 {
        Text [ de ] = "Die aufgelisteten Dateien konnten nicht importiert 
werden. Die Symbole entsprechen nicht der Größe von 16x16 Pixel." ;
-       Text [ en-US ] = "The files listed here could not be imported. The 
icons are not the required 16x16 pixels in size." ;
+       Text [ en-US ] = "The files listed below could not be imported. The 
file format could not be interpreted." ;
 };
 
 String RID_SVXSTR_DELETE_ICON_CONFIRM  //added for issue73355
@@ -836,4 +878,3 @@ String RID_SVXSTR_RENAME_TOOLBAR
 };
 
 
-
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to