summaryrefslogtreecommitdiff
path: root/sdext/source/minimizer/optimizerdialog.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sdext/source/minimizer/optimizerdialog.cxx')
-rw-r--r--sdext/source/minimizer/optimizerdialog.cxx840
1 files changed, 840 insertions, 0 deletions
diff --git a/sdext/source/minimizer/optimizerdialog.cxx b/sdext/source/minimizer/optimizerdialog.cxx
new file mode 100644
index 000000000000..3d60123496fd
--- /dev/null
+++ b/sdext/source/minimizer/optimizerdialog.cxx
@@ -0,0 +1,840 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+ /*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sdext.hxx"
+
+#include "optimizerdialog.hxx"
+#include "fileopendialog.hxx"
+#include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/util/XCloseBroadcaster.hpp>
+#include <com/sun/star/frame/XComponentLoader.hpp>
+#include <com/sun/star/frame/XLayoutManager.hpp>
+#include <sal/macros.h>
+#include <osl/time.h>
+
+// -------------------
+// - OPTIMIZERDIALOG -
+// -------------------
+
+using namespace ::rtl;
+using namespace ::com::sun::star::io;
+using namespace ::com::sun::star::ui;
+using namespace ::com::sun::star::awt;
+using namespace ::com::sun::star::ucb;
+using namespace ::com::sun::star::uno;
+using namespace ::com::sun::star::util;
+using namespace ::com::sun::star::lang;
+using namespace ::com::sun::star::frame;
+using namespace ::com::sun::star::beans;
+using namespace ::com::sun::star::script;
+using namespace ::com::sun::star::container;
+
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::InitDialog()
+{
+ // setting the dialog properties
+ OUString pNames[] = {
+ TKGet( TK_Closeable ),
+ TKGet( TK_Height ),
+ TKGet( TK_Moveable ),
+ TKGet( TK_PositionX ),
+ TKGet( TK_PositionY ),
+ TKGet( TK_Title ),
+ TKGet( TK_Width ) };
+
+ Any pValues[] = {
+ Any( sal_True ),
+ Any( sal_Int32( DIALOG_HEIGHT ) ),
+ Any( sal_True ),
+ Any( sal_Int32( 200 ) ),
+ Any( sal_Int32( 52 ) ),
+ Any( getString( STR_SUN_OPTIMIZATION_WIZARD2 ) ),
+ Any( sal_Int32( OD_DIALOG_WIDTH ) ) };
+
+ sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
+
+ Sequence< rtl::OUString > aNames( pNames, nCount );
+ Sequence< Any > aValues( pValues, nCount );
+
+ mxDialogModelMultiPropertySet->setPropertyValues( aNames, aValues );
+}
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::InitRoadmap()
+{
+ try
+ {
+ OUString pNames[] = {
+ TKGet( TK_Height ),
+ TKGet( TK_PositionX ),
+ TKGet( TK_PositionY ),
+ TKGet( TK_Step ),
+ TKGet( TK_TabIndex ),
+ TKGet( TK_Width ) };
+
+ Any pValues[] = {
+ Any( sal_Int32( DIALOG_HEIGHT - 26 ) ),
+ Any( sal_Int32( 0 ) ),
+ Any( sal_Int32( 0 ) ),
+ Any( sal_Int32( 0 ) ),
+ Any( mnTabIndex++ ),
+ Any( sal_Int32( 85 ) ) };
+
+ sal_Int32 nCount = SAL_N_ELEMENTS( pNames );
+
+ Sequence< rtl::OUString > aNames( pNames, nCount );
+ Sequence< Any > aValues( pValues, nCount );
+
+ mxRoadmapControlModel = insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlRoadmapModel" ) ),
+ TKGet( TK_rdmNavi ), aNames, aValues );
+
+ Reference< XPropertySet > xPropertySet( mxRoadmapControlModel, UNO_QUERY_THROW );
+ xPropertySet->setPropertyValue( TKGet( TK_Name ), Any( TKGet( TK_rdmNavi ) ) );
+ mxRoadmapControl = mxDialogControlContainer->getControl( TKGet( TK_rdmNavi ) );
+ InsertRoadmapItem( 0, sal_True, getString( STR_INTRODUCTION ), ITEM_ID_INTRODUCTION );
+ InsertRoadmapItem( 1, sal_True, getString( STR_SLIDES ), ITEM_ID_SLIDES );
+ InsertRoadmapItem( 2, sal_True, getString( STR_IMAGE_OPTIMIZATION ), ITEM_ID_GRAPHIC_OPTIMIZATION );
+ InsertRoadmapItem( 3, sal_True, getString( STR_OLE_OBJECTS ), ITEM_ID_OLE_OPTIMIZATION );
+ InsertRoadmapItem( 4, sal_True, getString( STR_SUMMARY ), ITEM_ID_SUMMARY );
+
+ rtl::OUString sBitmapPath( getPath( TK_BitmapPath ) );
+ rtl::OUString sBitmap( RTL_CONSTASCII_USTRINGPARAM("/minimizepresi_80.png") );
+ rtl::OUString sURL( sBitmapPath += sBitmap );
+
+ xPropertySet->setPropertyValue( TKGet( TK_ImageURL ), Any( sURL ) );
+ xPropertySet->setPropertyValue( TKGet( TK_Activated ), Any( (sal_Bool)sal_True ) );
+ xPropertySet->setPropertyValue( TKGet( TK_Complete ), Any( (sal_Bool)sal_True ) );
+ xPropertySet->setPropertyValue( TKGet( TK_CurrentItemID ), Any( (sal_Int16)ITEM_ID_INTRODUCTION ) );
+ xPropertySet->setPropertyValue( TKGet( TK_Text ), Any( getString( STR_STEPS ) ) );
+ }
+ catch( Exception& )
+ {
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::InsertRoadmapItem( const sal_Int32 nIndex, const sal_Bool bEnabled, const rtl::OUString& rLabel, const sal_Int32 nItemID )
+{
+ try
+ {
+ Reference< XSingleServiceFactory > xSFRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
+ Reference< XIndexContainer > aIndexContainerRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
+ Reference< XInterface > xRoadmapItem( xSFRoadmap->createInstance(), UNO_QUERY_THROW );
+ Reference< XPropertySet > xPropertySet( xRoadmapItem, UNO_QUERY_THROW );
+ xPropertySet->setPropertyValue( TKGet( TK_Label ), Any( rLabel ) );
+ xPropertySet->setPropertyValue( TKGet( TK_Enabled ), Any( bEnabled ) );
+ xPropertySet->setPropertyValue( TKGet( TK_ID ), Any( nItemID ) );
+ aIndexContainerRoadmap->insertByIndex( nIndex, Any( xRoadmapItem ) );
+ }
+ catch( Exception& )
+ {
+
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::UpdateConfiguration()
+{
+ sal_Int16 nInt16 = 0;
+ OUString aString;
+ Any aAny;
+
+ Sequence< sal_Int16 > aSelectedItems;
+ Sequence< OUString > aStringItemList;
+
+ // page0
+ aAny = getControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_SelectedItems ) );
+ if ( aAny >>= aSelectedItems )
+ {
+ if ( aSelectedItems.getLength() )
+ {
+ sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
+ aAny = getControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_StringItemList ) );
+ if ( aAny >>= aStringItemList )
+ {
+ if ( aStringItemList.getLength() > nSelectedItem )
+ SetConfigProperty( TK_Name, Any( aStringItemList[ nSelectedItem ] ) );
+ }
+ }
+ }
+
+ aAny = getControlProperty( TKGet( TK_CheckBox3Pg3 ), TKGet( TK_State ) );
+ if ( aAny >>= nInt16 )
+ {
+ if ( nInt16 )
+ {
+ aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_SelectedItems ) );
+ if ( aAny >>= aSelectedItems )
+ {
+ if ( aSelectedItems.getLength() )
+ {
+ sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
+ aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_StringItemList ) );
+ if ( aAny >>= aStringItemList )
+ {
+ if ( aStringItemList.getLength() > nSelectedItem )
+ SetConfigProperty( TK_CustomShowName, Any( aStringItemList[ nSelectedItem ] ) );
+ }
+ }
+ }
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+OptimizerDialog::OptimizerDialog( const Reference< XComponentContext > &rxMSF, Reference< XFrame >& rxFrame, Reference< XDispatch > rxStatusDispatcher ) :
+ UnoDialog( rxMSF, rxFrame ),
+ ConfigurationAccess( rxMSF, NULL ),
+ mnCurrentStep( 0 ),
+ mnTabIndex( 0 ),
+ mxMSF( rxMSF ),
+ mxFrame( rxFrame ),
+ mxItemListener( new ItemListener( *this ) ),
+ mxActionListener( new ActionListener( *this ) ),
+ mxActionListenerListBox0Pg0( new ActionListenerListBox0Pg0( *this ) ),
+ mxTextListenerFormattedField0Pg1( new TextListenerFormattedField0Pg1( *this ) ),
+ mxTextListenerComboBox0Pg1( new TextListenerComboBox0Pg1( *this ) ),
+ mxSpinListenerFormattedField0Pg1( new SpinListenerFormattedField0Pg1( *this ) ),
+ mxStatusDispatcher( rxStatusDispatcher )
+{
+ Reference< XStorable > xStorable( mxController->getModel(), UNO_QUERY_THROW );
+ mbIsReadonly = xStorable->isReadonly();
+
+ InitDialog();
+ InitRoadmap();
+ InitNavigationBar();
+ InitPage0();
+ InitPage1();
+ InitPage2();
+ InitPage3();
+ InitPage4();
+ ActivatePage( 0 );
+
+ OptimizationStats aStats;
+ aStats.InitializeStatusValuesFromDocument( mxController->getModel() );
+ Sequence< PropertyValue > aStatusSequence( aStats.GetStatusSequence() );
+ UpdateStatus( aStatusSequence );
+}
+
+// -----------------------------------------------------------------------------
+
+OptimizerDialog::~OptimizerDialog()
+{
+ // not saving configuration if the dialog has been finished via cancel or close window
+ if ( mbStatus )
+ SaveConfiguration();
+}
+
+// -----------------------------------------------------------------------------
+
+sal_Bool OptimizerDialog::execute()
+{
+ Reference< XItemEventBroadcaster > maRoadmapBroadcaster( mxRoadmapControl, UNO_QUERY_THROW );
+ maRoadmapBroadcaster->addItemListener( mxItemListener );
+ UnoDialog::execute();
+ UpdateConfiguration(); // taking actual control settings for the configuration
+ maRoadmapBroadcaster->removeItemListener( mxItemListener );
+ return mbStatus;
+}
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::SwitchPage( sal_Int16 nNewStep )
+{
+ if ( ( nNewStep != mnCurrentStep ) && ( ( nNewStep <= MAX_STEP ) || ( nNewStep >= 0 ) ) )
+ {
+ sal_Int16 nOldStep = mnCurrentStep;
+ if ( nNewStep == 0 )
+ disableControl( TKGet( TK_btnNavBack ) );
+ else if ( nOldStep == 0 )
+ enableControl( TKGet( TK_btnNavBack ) );
+
+ if ( nNewStep == MAX_STEP )
+ disableControl( TKGet( TK_btnNavNext ) );
+ else if ( nOldStep == MAX_STEP )
+ enableControl( TKGet( TK_btnNavNext ) );
+
+ setControlProperty( TKGet( TK_rdmNavi ), TKGet( TK_CurrentItemID ), Any( nNewStep ) );
+
+ DeactivatePage( nOldStep );
+ UpdateControlStates( nNewStep );
+
+ ActivatePage( nNewStep );
+ mnCurrentStep = nNewStep;
+ }
+}
+
+void OptimizerDialog::UpdateControlStates( sal_Int16 nPage )
+{
+ switch( nPage )
+ {
+ case 0 : UpdateControlStatesPage0(); break;
+ case 1 : UpdateControlStatesPage1(); break;
+ case 2 : UpdateControlStatesPage2(); break;
+ case 3 : UpdateControlStatesPage3(); break;
+ case 4 : UpdateControlStatesPage4(); break;
+ default:
+ {
+ UpdateControlStatesPage0();
+ UpdateControlStatesPage1();
+ UpdateControlStatesPage2();
+ UpdateControlStatesPage3();
+ UpdateControlStatesPage4();
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+rtl::OUString OptimizerDialog::GetSelectedString( const PPPOptimizerTokenEnum eToken )
+{
+ OUString aSelectedItem;
+ Sequence< sal_Int16 > sSelectedItems;
+ Sequence< OUString > sItemList;
+
+ if ( ( getControlProperty( TKGet( eToken ), TKGet( TK_SelectedItems ) ) >>= sSelectedItems ) &&
+ ( getControlProperty( TKGet( eToken ), TKGet( TK_StringItemList ) ) >>= sItemList ) )
+ {
+ if ( sSelectedItems.getLength() == 1 )
+ {
+ sal_Int16 nSelectedItem = sSelectedItems[ 0 ];
+ if ( nSelectedItem < sItemList.getLength() )
+ aSelectedItem = sItemList[ nSelectedItem ];
+ }
+ }
+ return aSelectedItem;
+}
+
+// -----------------------------------------------------------------------------
+
+void OptimizerDialog::UpdateStatus( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rStatus )
+{
+ if ( mxReschedule.is() )
+ {
+ maStats.InitializeStatusValues( rStatus );
+ const Any* pVal( maStats.GetStatusValue( TK_Status ) );
+ if ( pVal )
+ {
+ rtl::OUString sStatus;
+ if ( *pVal >>= sStatus )
+ {
+ setControlProperty( TKGet( TK_FixedText1Pg4 ), TKGet( TK_Enabled ), Any( sal_True ) );
+ setControlProperty( TKGet( TK_FixedText1Pg4 ), TKGet( TK_Label ), Any( getString( TKGet( sStatus ) ) ) );
+ }
+ }
+ pVal = maStats.GetStatusValue( TK_Progress );
+ if ( pVal )
+ {
+ sal_Int32 nProgress = 0;
+ if ( *pVal >>= nProgress )
+ setControlProperty( TKGet( TK_Progress ), TKGet( TK_ProgressValue ), Any( nProgress ) );
+ }
+ pVal = maStats.GetStatusValue( TK_OpenNewDocument );
+ if ( pVal )
+ SetConfigProperty( TK_OpenNewDocument, *pVal );
+
+ mxReschedule->reschedule();
+ }
+}
+
+// -----------------------------------------------------------------------------
+
+void ItemListener::itemStateChanged( const ItemEvent& Event )
+ throw ( RuntimeException )
+{
+ try
+ {
+ sal_Int16 nState;
+ OUString aControlName;
+ Reference< XControl > xControl;
+ Any aSource( Event.Source );
+ if ( aSource >>= xControl )
+ {
+ Reference< XPropertySet > xPropertySet( xControl->getModel(), UNO_QUERY_THROW );
+ xPropertySet->getPropertyValue( TKGet( TK_Name ) ) >>= aControlName;
+ PPPOptimizerTokenEnum eControl( TKGet( aControlName ) );
+ switch( eControl )
+ {
+ case TK_rdmNavi :
+ {
+ mrOptimizerDialog.SwitchPage( static_cast< sal_Int16 >( Event.ItemId ) );
+ }
+ break;
+ case TK_CheckBox1Pg1 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_RemoveCropArea, Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox2Pg1 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_EmbedLinkedGraphics, Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox0Pg2 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ {
+ mrOptimizerDialog.SetConfigProperty( TK_OLEOptimization, Any( nState != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_RadioButton0Pg2 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_RadioButton1Pg2 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ }
+ }
+ break;
+ case TK_RadioButton0Pg1 :
+ {
+ sal_Int16 nInt16 = 0;
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nInt16 )
+ {
+ nInt16 ^= 1;
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGCompression, Any( nInt16 != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FixedText1Pg1 ), TKGet( TK_Enabled ), Any( nInt16 != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_Enabled ), Any( nInt16 != 0 ) );
+ }
+ }
+ break;
+ case TK_RadioButton1Pg1 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ {
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGCompression, Any( nState != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FixedText1Pg1 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ }
+ }
+ break;
+ case TK_RadioButton0Pg2 :
+ {
+ sal_Int16 nInt16;
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nInt16 )
+ {
+ nInt16 ^= 1;
+ mrOptimizerDialog.SetConfigProperty( TK_OLEOptimizationType, Any( nInt16 ) );
+ }
+ }
+ break;
+ case TK_RadioButton1Pg2 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_OLEOptimizationType, Any( nState ) );
+ }
+ break;
+ case TK_CheckBox0Pg3 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_DeleteUnusedMasterPages, Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox1Pg3 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_DeleteNotesPages, Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox2Pg3 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_DeleteHiddenSlides, Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox3Pg3 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.setControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ }
+ break;
+ case TK_CheckBox1Pg4 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
+ }
+ break;
+ case TK_RadioButton0Pg4 :
+ case TK_RadioButton1Pg4 :
+ {
+ if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
+ mrOptimizerDialog.SetConfigProperty( TK_SaveAs, Any( eControl == TK_RadioButton1Pg4 ? nState != 0 : nState == 0 ) );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ catch ( Exception& )
+ {
+
+ }
+}
+void ItemListener::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void ActionListener::actionPerformed( const ActionEvent& rEvent )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ switch( TKGet( rEvent.ActionCommand ) )
+ {
+ case TK_btnNavHelp :
+ {
+ try
+ {
+ static Reference< XFrame > xHelpFrame;
+ if ( !xHelpFrame.is() )
+ {
+ rtl::OUString sHelpFile( mrOptimizerDialog.getPath( TK_HelpFile ) );
+ Reference< XDesktop > desktop( mrOptimizerDialog.GetComponentContext()->getServiceManager()->createInstanceWithContext(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")), mrOptimizerDialog.GetComponentContext() ), UNO_QUERY_THROW );
+ Reference< XSimpleFileAccess > xSimpleFileAccess( mrOptimizerDialog.GetComponentContext()->getServiceManager()->createInstanceWithContext(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess")), mrOptimizerDialog.GetComponentContext() ), UNO_QUERY_THROW );
+ Reference< XInputStream > xInputStream( xSimpleFileAccess->openFileRead( sHelpFile ) );
+ Reference< XDesktop > xDesktop( mrOptimizerDialog.GetComponentContext()->getServiceManager()->createInstanceWithContext(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.frame.Desktop")), mrOptimizerDialog.GetComponentContext() ), UNO_QUERY_THROW );
+ Reference< XFrame > xDesktopFrame( xDesktop, UNO_QUERY_THROW );
+ xHelpFrame = Reference< XFrame >( xDesktopFrame->findFrame( TKGet( TK__blank ), 0 ) );
+ Reference< XCloseBroadcaster > xCloseBroadcaster( xHelpFrame, UNO_QUERY_THROW );
+ xCloseBroadcaster->addCloseListener( new HelpCloseListener( xHelpFrame ) );
+ Reference< XComponentLoader > xLoader( xHelpFrame, UNO_QUERY_THROW );
+
+ Sequence< PropertyValue > aLoadProps( 2 );
+ aLoadProps[ 0 ].Name = TKGet( TK_ReadOnly );
+ aLoadProps[ 0 ].Value <<= (sal_Bool)( sal_True );
+ aLoadProps[ 1 ].Name = TKGet( TK_InputStream );
+ aLoadProps[ 1 ].Value <<= xInputStream;
+
+ Reference< XComponent >( xLoader->loadComponentFromURL( OUString(RTL_CONSTASCII_USTRINGPARAM("private:stream")),
+ TKGet( TK__self ), 0, aLoadProps ) );
+
+ Reference< XPropertySet > xPropSet( xHelpFrame, UNO_QUERY_THROW );
+ Reference< XLayoutManager > xLayoutManager;
+ if ( xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("LayoutManager")) ) >>= xLayoutManager )
+ {
+ xLayoutManager->setVisible( sal_False );
+ xLayoutManager->hideElement( OUString(RTL_CONSTASCII_USTRINGPARAM("private:resource/menubar/menubar")) );
+ xLayoutManager->destroyElement( OUString(RTL_CONSTASCII_USTRINGPARAM("private:resource/statusbar/statusbar")) );
+ }
+ }
+ }
+ catch( Exception& )
+ {
+
+ }
+ }
+ break;
+ case TK_btnNavBack : mrOptimizerDialog.SwitchPage( mrOptimizerDialog.mnCurrentStep - 1 ); break;
+ case TK_btnNavNext : mrOptimizerDialog.SwitchPage( mrOptimizerDialog.mnCurrentStep + 1 ); break;
+ case TK_btnNavFinish :
+ {
+ mrOptimizerDialog.UpdateConfiguration();
+
+ mrOptimizerDialog.SwitchPage( ITEM_ID_SUMMARY );
+ mrOptimizerDialog.DisablePage( ITEM_ID_SUMMARY );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavHelp ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavBack ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavNext ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavFinish ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavCancel ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FixedText0Pg4 ), TKGet( TK_Enabled ), Any( sal_True ) );
+
+ // check if we have to open the FileDialog
+ sal_Bool bSuccessfullyExecuted = sal_True;
+ sal_Int16 nInt16 = 0;
+ mrOptimizerDialog.getControlProperty( TKGet( TK_RadioButton1Pg4 ), TKGet( TK_State ) ) >>= nInt16;
+ if ( nInt16 )
+ {
+ rtl::OUString aSaveAsURL;
+ FileOpenDialog aFileOpenDialog( ((UnoDialog&)mrOptimizerDialog).mxMSF );
+
+ // generating default file name
+ Reference< XStorable > xStorable( mrOptimizerDialog.mxController->getModel(), UNO_QUERY );
+ if ( xStorable.is() && xStorable->hasLocation() )
+ {
+ rtl::OUString aLocation( xStorable->getLocation() );
+ if ( aLocation.getLength() )
+ {
+ sal_Int32 nIndex = aLocation.lastIndexOf( '/', aLocation.getLength() - 1 );
+ if ( nIndex >= 0 )
+ {
+ if ( nIndex < aLocation.getLength() - 1 )
+ aLocation = aLocation.copy( nIndex + 1 );
+
+ // remove extension
+ nIndex = aLocation.lastIndexOf( '.', aLocation.getLength() - 1 );
+ if ( nIndex >= 0 )
+ aLocation = aLocation.copy( 0, nIndex );
+
+ // adding .mini
+ aLocation = aLocation.concat( OUString(RTL_CONSTASCII_USTRINGPARAM(".mini")) );
+ aFileOpenDialog.setDefaultName( aLocation );
+ }
+ }
+ }
+ sal_Bool bDialogExecuted = aFileOpenDialog.execute() == dialogs::ExecutableDialogResults::OK;
+ if ( bDialogExecuted )
+ {
+ aSaveAsURL = aFileOpenDialog.getURL();
+ mrOptimizerDialog.SetConfigProperty( TK_SaveAsURL, Any( aSaveAsURL ) );
+ mrOptimizerDialog.SetConfigProperty( TK_FilterName, Any( aFileOpenDialog.getFilterName() ) );
+ }
+ if ( !aSaveAsURL.getLength() )
+ {
+ // something goes wrong...
+ bSuccessfullyExecuted = sal_False;
+ }
+
+ // waiting for 500ms
+ if ( mrOptimizerDialog.mxReschedule.is() )
+ {
+ mrOptimizerDialog.mxReschedule->reschedule();
+ for ( sal_uInt32 i = osl_getGlobalTimer(); ( i + 500 ) > ( osl_getGlobalTimer() ); )
+ mrOptimizerDialog.mxReschedule->reschedule();
+ }
+ }
+ if ( bSuccessfullyExecuted )
+ { // now check if we have to store a session template
+ nInt16 = 0;
+ OUString aSettingsName;
+ mrOptimizerDialog.getControlProperty( TKGet( TK_CheckBox1Pg4 ), TKGet( TK_State ) ) >>= nInt16;
+ mrOptimizerDialog.getControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Text ) ) >>= aSettingsName;
+ if ( nInt16 && aSettingsName.getLength() )
+ {
+ std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( aSettingsName ) );
+ std::vector< OptimizerSettings >& rSettings( mrOptimizerDialog.GetOptimizerSettings() );
+ OptimizerSettings aNewSettings( rSettings[ 0 ] );
+ aNewSettings.maName = aSettingsName;
+ if ( aIter == rSettings.end() )
+ rSettings.push_back( aNewSettings );
+ else
+ *aIter = aNewSettings;
+ }
+ }
+ if ( bSuccessfullyExecuted )
+ {
+ Sequence< Any > aArgs( 1 );
+ aArgs[ 0 ] <<= mrOptimizerDialog.GetFrame();
+
+ Reference < XDispatch > xDispatch( mrOptimizerDialog.GetComponentContext()->getServiceManager()->createInstanceWithArgumentsAndContext(
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.PPPOptimizer")), aArgs, mrOptimizerDialog.GetComponentContext() ), UNO_QUERY );
+
+ URL aURL;
+ aURL.Protocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.com.sun.star.comp.PPPOptimizer:" ) );
+ aURL.Path = OUString( RTL_CONSTASCII_USTRINGPARAM( "optimize" ) );
+
+ Sequence< PropertyValue > lArguments( 3 );
+ lArguments[ 0 ].Name = TKGet( TK_Settings );
+ lArguments[ 0 ].Value <<= mrOptimizerDialog.GetConfigurationSequence();
+ lArguments[ 1 ].Name = TKGet( TK_StatusDispatcher );
+ lArguments[ 1 ].Value <<= mrOptimizerDialog.GetStatusDispatcher();
+ lArguments[ 2 ].Name = TKGet( TK_InformationDialog );
+ lArguments[ 2 ].Value <<= mrOptimizerDialog.GetFrame();
+
+ if( xDispatch.is() )
+ xDispatch->dispatch( aURL, lArguments );
+
+ mrOptimizerDialog.endExecute( bSuccessfullyExecuted );
+ }
+ else
+ {
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavHelp ), TKGet( TK_Enabled ), Any( sal_True ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavBack ), TKGet( TK_Enabled ), Any( sal_True ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavNext ), TKGet( TK_Enabled ), Any( sal_False ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavFinish ), TKGet( TK_Enabled ), Any( sal_True ) );
+ mrOptimizerDialog.setControlProperty( TKGet( TK_btnNavCancel ), TKGet( TK_Enabled ), Any( sal_True ) );
+ mrOptimizerDialog.EnablePage( ITEM_ID_SUMMARY );
+ }
+ }
+ break;
+ case TK_btnNavCancel : mrOptimizerDialog.endExecute( sal_False ); break;
+ case TK_Button0Pg0 : // delete configuration
+ {
+ OUString aSelectedItem( mrOptimizerDialog.GetSelectedString( TK_ListBox0Pg0 ) );
+ if ( aSelectedItem.getLength() )
+ {
+ std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( aSelectedItem ) );
+ std::vector< OptimizerSettings >& rList( mrOptimizerDialog.GetOptimizerSettings() );
+ if ( aIter != rList.end() )
+ {
+ rList.erase( aIter );
+ mrOptimizerDialog.UpdateControlStates();
+ }
+ }
+ }
+ break;
+ default: break;
+ }
+}
+void ActionListener::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void ActionListenerListBox0Pg0::actionPerformed( const ActionEvent& rEvent )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ if ( rEvent.ActionCommand.getLength() )
+ {
+ std::vector< OptimizerSettings >::iterator aIter( mrOptimizerDialog.GetOptimizerSettingsByName( rEvent.ActionCommand ) );
+ std::vector< OptimizerSettings >& rList( mrOptimizerDialog.GetOptimizerSettings() );
+ if ( aIter != rList.end() )
+ rList[ 0 ] = *aIter;
+ }
+ mrOptimizerDialog.UpdateControlStates();
+}
+void ActionListenerListBox0Pg0::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void TextListenerFormattedField0Pg1::textChanged( const TextEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ double fDouble = 0;
+ Any aAny = mrOptimizerDialog.getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
+ if ( aAny >>= fDouble )
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
+}
+void TextListenerFormattedField0Pg1::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void TextListenerComboBox0Pg1::textChanged( const TextEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ rtl::OUString aString;
+ Any aAny = mrOptimizerDialog.getControlProperty( TKGet( TK_ComboBox0Pg1 ), TKGet( TK_Text ) );
+ if ( aAny >>= aString )
+ {
+ sal_Int32 nI0, nI1, nI2, nI3, nI4;
+ nI0 = nI1 = nI2 = nI3 = nI4 = 0;
+
+ if ( mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_0 ).getToken( 1, ';', nI0 ) == aString )
+ aString = mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_0 ).getToken( 0, ';', nI4 );
+ else if ( mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_1 ).getToken( 1, ';', nI1 ) == aString )
+ aString = mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_1 ).getToken( 0, ';', nI4 );
+ else if ( mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_2 ).getToken( 1, ';', nI2 ) == aString )
+ aString = mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_2 ).getToken( 0, ';', nI4 );
+ else if ( mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_3 ).getToken( 1, ';', nI3 ) == aString )
+ aString = mrOptimizerDialog.getString( STR_IMAGE_RESOLUTION_3 ).getToken( 0, ';', nI4 );
+
+ mrOptimizerDialog.SetConfigProperty( TK_ImageResolution, Any( aString.toInt32() ) );
+ }
+}
+void TextListenerComboBox0Pg1::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void SpinListenerFormattedField0Pg1::up( const SpinEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ double fDouble;
+ Any aAny = mrOptimizerDialog.getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
+ if ( aAny >>= fDouble )
+ {
+ fDouble += 9;
+ if ( fDouble > 100 )
+ fDouble = 100;
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( fDouble ) );
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
+ }
+}
+void SpinListenerFormattedField0Pg1::down( const SpinEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ double fDouble;
+ Any aAny = mrOptimizerDialog.getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
+ if ( aAny >>= fDouble )
+ {
+ fDouble -= 9;
+ if ( fDouble < 0 )
+ fDouble = 0;
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( fDouble ) );
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
+ }
+}
+void SpinListenerFormattedField0Pg1::first( const SpinEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( static_cast< double >( 0 ) ) );
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)0 ) );
+}
+void SpinListenerFormattedField0Pg1::last( const SpinEvent& /* rEvent */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+ mrOptimizerDialog.setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( static_cast< double >( 100 ) ) );
+ mrOptimizerDialog.SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)100 ) );
+}
+void SpinListenerFormattedField0Pg1::disposing( const ::com::sun::star::lang::EventObject& /* Source */ )
+ throw ( com::sun::star::uno::RuntimeException )
+{
+}
+
+// -----------------------------------------------------------------------------
+
+void HelpCloseListener::addCloseListener( const Reference < XCloseListener >& ) throw( RuntimeException )
+{
+}
+void HelpCloseListener::removeCloseListener( const Reference < XCloseListener >& ) throw( RuntimeException )
+{
+}
+void HelpCloseListener::queryClosing( const EventObject&, sal_Bool /* bDeliverOwnership */ )
+ throw ( RuntimeException, CloseVetoException )
+{
+}
+void HelpCloseListener::notifyClosing( const EventObject& )
+ throw ( RuntimeException )
+{
+}
+void HelpCloseListener::disposing( const EventObject& ) throw ( RuntimeException )
+{
+ mrXFrame = NULL;
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */