xref: /trunk/main/sdext/source/minimizer/pppoptimizerdialog.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir  /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sdext.hxx"
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #include "pppoptimizerdialog.hxx"
32*cdf0e10cSrcweir #include "optimizerdialog.hxx"
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir using namespace ::rtl;
35*cdf0e10cSrcweir using namespace ::com::sun::star::uno;
36*cdf0e10cSrcweir using namespace ::com::sun::star::util;
37*cdf0e10cSrcweir using namespace ::com::sun::star::lang;
38*cdf0e10cSrcweir using namespace ::com::sun::star::frame;
39*cdf0e10cSrcweir using namespace ::com::sun::star::beans;
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir #define SERVICE_NAME "com.sun.star.comp.SunPresentationMinimizer"
42*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir // ----------------------
45*cdf0e10cSrcweir // - PPPOptimizerDialog -
46*cdf0e10cSrcweir // ----------------------
47*cdf0e10cSrcweir 
48*cdf0e10cSrcweir PPPOptimizerDialog::PPPOptimizerDialog( const Reference< XComponentContext > &rxMSF ) :
49*cdf0e10cSrcweir     mxMSF( rxMSF ),
50*cdf0e10cSrcweir     mpOptimizerDialog( NULL )
51*cdf0e10cSrcweir {
52*cdf0e10cSrcweir }
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir // -----------------------------------------------------------------------------
55*cdf0e10cSrcweir 
56*cdf0e10cSrcweir PPPOptimizerDialog::~PPPOptimizerDialog()
57*cdf0e10cSrcweir {
58*cdf0e10cSrcweir }
59*cdf0e10cSrcweir 
60*cdf0e10cSrcweir // -----------------------------------------------------------------------------
61*cdf0e10cSrcweir // XInitialization
62*cdf0e10cSrcweir // -----------------------------------------------------------------------------
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir void SAL_CALL PPPOptimizerDialog::initialize( const Sequence< Any >& aArguments )
65*cdf0e10cSrcweir     throw ( Exception, RuntimeException )
66*cdf0e10cSrcweir {
67*cdf0e10cSrcweir     if( aArguments.getLength() != 1 )
68*cdf0e10cSrcweir         throw IllegalArgumentException();
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir     aArguments[ 0 ] >>= mxFrame;
71*cdf0e10cSrcweir     if ( mxFrame.is() )
72*cdf0e10cSrcweir         mxController = mxFrame->getController();
73*cdf0e10cSrcweir }
74*cdf0e10cSrcweir 
75*cdf0e10cSrcweir // -----------------------------------------------------------------------------
76*cdf0e10cSrcweir // XServiceInfo
77*cdf0e10cSrcweir // -----------------------------------------------------------------------------
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir OUString SAL_CALL PPPOptimizerDialog::getImplementationName()
80*cdf0e10cSrcweir     throw (RuntimeException)
81*cdf0e10cSrcweir {
82*cdf0e10cSrcweir     return PPPOptimizerDialog_getImplementationName();
83*cdf0e10cSrcweir }
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir sal_Bool SAL_CALL PPPOptimizerDialog::supportsService( const OUString& ServiceName )
86*cdf0e10cSrcweir     throw ( RuntimeException )
87*cdf0e10cSrcweir {
88*cdf0e10cSrcweir     return ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( SERVICE_NAME ) );
89*cdf0e10cSrcweir }
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir Sequence< OUString > SAL_CALL PPPOptimizerDialog::getSupportedServiceNames()
92*cdf0e10cSrcweir     throw (RuntimeException)
93*cdf0e10cSrcweir {
94*cdf0e10cSrcweir     return PPPOptimizerDialog_getSupportedServiceNames();
95*cdf0e10cSrcweir }
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir // -----------------------------------------------------------------------------
98*cdf0e10cSrcweir // XDispatchProvider
99*cdf0e10cSrcweir // -----------------------------------------------------------------------------
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir Reference< com::sun::star::frame::XDispatch > SAL_CALL PPPOptimizerDialog::queryDispatch(
102*cdf0e10cSrcweir     const URL& aURL, const ::rtl::OUString& /* aTargetFrameName */, sal_Int32 /* nSearchFlags */ ) throw( RuntimeException )
103*cdf0e10cSrcweir {
104*cdf0e10cSrcweir     Reference < XDispatch > xRet;
105*cdf0e10cSrcweir     if ( aURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.SunPresentationMinimizer:" ) == 0 )
106*cdf0e10cSrcweir         xRet = this;
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir     return xRet;
109*cdf0e10cSrcweir }
110*cdf0e10cSrcweir 
111*cdf0e10cSrcweir //------------------------------------------------------------------------------
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir Sequence< Reference< com::sun::star::frame::XDispatch > > SAL_CALL PPPOptimizerDialog::queryDispatches(
114*cdf0e10cSrcweir     const Sequence< com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw( RuntimeException )
115*cdf0e10cSrcweir {
116*cdf0e10cSrcweir     Sequence< Reference< com::sun::star::frame::XDispatch> > aReturn( aDescripts.getLength() );
117*cdf0e10cSrcweir     Reference< com::sun::star::frame::XDispatch>* pReturn = aReturn.getArray();
118*cdf0e10cSrcweir     const com::sun::star::frame::DispatchDescriptor* pDescripts = aDescripts.getConstArray();
119*cdf0e10cSrcweir     for (sal_Int16 i = 0; i < aDescripts.getLength(); ++i, ++pReturn, ++pDescripts )
120*cdf0e10cSrcweir     {
121*cdf0e10cSrcweir         *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags );
122*cdf0e10cSrcweir     }
123*cdf0e10cSrcweir     return aReturn;
124*cdf0e10cSrcweir }
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir // -----------------------------------------------------------------------------
127*cdf0e10cSrcweir // XDispatch
128*cdf0e10cSrcweir // -----------------------------------------------------------------------------
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir void SAL_CALL PPPOptimizerDialog::dispatch( const URL& rURL,
131*cdf0e10cSrcweir                                             const Sequence< PropertyValue >& rArguments )
132*cdf0e10cSrcweir     throw( RuntimeException )
133*cdf0e10cSrcweir {
134*cdf0e10cSrcweir     sal_Int64 nFileSizeSource = 0;
135*cdf0e10cSrcweir     sal_Int64 nFileSizeDest = 0;
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir     if ( mxController.is() && ( rURL.Protocol.compareToAscii( "vnd.com.sun.star.comp.SunPresentationMinimizer:" ) == 0 ) )
138*cdf0e10cSrcweir     {
139*cdf0e10cSrcweir         if ( rURL.Path.compareToAscii( "execute" ) == 0 )
140*cdf0e10cSrcweir         {
141*cdf0e10cSrcweir             sal_Bool bDialogExecuted = sal_False;
142*cdf0e10cSrcweir 
143*cdf0e10cSrcweir             try
144*cdf0e10cSrcweir             {
145*cdf0e10cSrcweir                 mpOptimizerDialog = new OptimizerDialog( mxMSF, mxFrame, this );
146*cdf0e10cSrcweir                 bDialogExecuted = mpOptimizerDialog->execute();
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir                 const Any* pVal( mpOptimizerDialog->maStats.GetStatusValue( TK_FileSizeSource ) );
149*cdf0e10cSrcweir                 if ( pVal )
150*cdf0e10cSrcweir                     *pVal >>= nFileSizeSource;
151*cdf0e10cSrcweir                 pVal = mpOptimizerDialog->maStats.GetStatusValue( TK_FileSizeDestination );
152*cdf0e10cSrcweir                 if ( pVal )
153*cdf0e10cSrcweir                     *pVal >>= nFileSizeDest;
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir                 if ( nFileSizeSource && nFileSizeDest )
156*cdf0e10cSrcweir                 {
157*cdf0e10cSrcweir                     rtl::OUStringBuffer sBuf( rtl::OUString::createFromAscii( "Your Presentation has been minimized from:" ) );
158*cdf0e10cSrcweir                     sBuf.append( rtl::OUString::valueOf( nFileSizeSource >> 10 ) );
159*cdf0e10cSrcweir                     sBuf.append( rtl::OUString::createFromAscii( "KB to " ) );
160*cdf0e10cSrcweir                     sBuf.append( rtl::OUString::valueOf( nFileSizeDest >> 10 ) );
161*cdf0e10cSrcweir                     sBuf.append( rtl::OUString::createFromAscii( "KB." ) );
162*cdf0e10cSrcweir                     OUString sResult( sBuf.makeStringAndClear() );
163*cdf0e10cSrcweir //                  mpOptimizerDialog->showMessageBox( sResult, sResult, sal_False );
164*cdf0e10cSrcweir                 }
165*cdf0e10cSrcweir                 delete mpOptimizerDialog, mpOptimizerDialog = NULL;
166*cdf0e10cSrcweir             }
167*cdf0e10cSrcweir             catch( ... )
168*cdf0e10cSrcweir             {
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir             }
171*cdf0e10cSrcweir         }
172*cdf0e10cSrcweir         else if ( rURL.Path.compareToAscii( "statusupdate" ) == 0 )
173*cdf0e10cSrcweir         {
174*cdf0e10cSrcweir             if ( mpOptimizerDialog )
175*cdf0e10cSrcweir                 mpOptimizerDialog->UpdateStatus( rArguments );
176*cdf0e10cSrcweir         }
177*cdf0e10cSrcweir     }
178*cdf0e10cSrcweir }
179*cdf0e10cSrcweir 
180*cdf0e10cSrcweir //===============================================
181*cdf0e10cSrcweir void SAL_CALL PPPOptimizerDialog::addStatusListener( const Reference< XStatusListener >&, const URL& )
182*cdf0e10cSrcweir     throw( RuntimeException )
183*cdf0e10cSrcweir {
184*cdf0e10cSrcweir     // TODO
185*cdf0e10cSrcweir     // OSL_ENSURE( sal_False, "PPPOptimizerDialog::addStatusListener()\nNot implemented yet!" );
186*cdf0e10cSrcweir }
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir //===============================================
189*cdf0e10cSrcweir void SAL_CALL PPPOptimizerDialog::removeStatusListener( const Reference< XStatusListener >&, const URL& )
190*cdf0e10cSrcweir     throw( RuntimeException )
191*cdf0e10cSrcweir {
192*cdf0e10cSrcweir     // TODO
193*cdf0e10cSrcweir     // OSL_ENSURE( sal_False, "PPPOptimizerDialog::removeStatusListener()\nNot implemented yet!" );
194*cdf0e10cSrcweir }
195*cdf0e10cSrcweir 
196*cdf0e10cSrcweir // -----------------------------------------------------------------------------
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir OUString PPPOptimizerDialog_getImplementationName()
199*cdf0e10cSrcweir {
200*cdf0e10cSrcweir     return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.SunPresentationMinimizerImp" ) );
201*cdf0e10cSrcweir }
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir Sequence< OUString > PPPOptimizerDialog_getSupportedServiceNames()
204*cdf0e10cSrcweir {
205*cdf0e10cSrcweir     Sequence < OUString > aRet(1);
206*cdf0e10cSrcweir     OUString* pArray = aRet.getArray();
207*cdf0e10cSrcweir     pArray[0] =  OUString ( RTL_CONSTASCII_USTRINGPARAM( SERVICE_NAME ) );
208*cdf0e10cSrcweir     return aRet;
209*cdf0e10cSrcweir }
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir Reference< XInterface > PPPOptimizerDialog_createInstance( const Reference< XComponentContext > & rSMgr)
212*cdf0e10cSrcweir     throw( Exception )
213*cdf0e10cSrcweir {
214*cdf0e10cSrcweir     return (cppu::OWeakObject*) new PPPOptimizerDialog( rSMgr );
215*cdf0e10cSrcweir }
216*cdf0e10cSrcweir 
217*cdf0e10cSrcweir // -----------------------------------------------------------------------------
218