diff options
-rw-r--r-- | embeddedobj/prj/build.lst | 3 | ||||
-rw-r--r-- | embeddedobj/source/commonembedding/embedobj.cxx | 14 | ||||
-rw-r--r-- | embeddedobj/source/commonembedding/persistence.cxx | 25 | ||||
-rw-r--r-- | embeddedobj/source/inc/commonembobj.hxx | 8 | ||||
-rw-r--r-- | embeddedobj/source/msole/olecomponent.cxx | 15 | ||||
-rw-r--r-- | embeddedobj/source/msole/olecomponent.hxx | 5 | ||||
-rw-r--r-- | embeddedobj/test/Container1/EmbedContApp.java | 751 | ||||
-rw-r--r-- | embeddedobj/util/makefile.mk | 19 |
8 files changed, 492 insertions, 348 deletions
diff --git a/embeddedobj/prj/build.lst b/embeddedobj/prj/build.lst index 4c80b5bd3df4..d9db1c2e25f2 100644 --- a/embeddedobj/prj/build.lst +++ b/embeddedobj/prj/build.lst @@ -2,4 +2,5 @@ es embeddedobj : offuh sal cppu cppuhelper NULL es embeddedobj usr1 - all eo_mkout NULL es embeddedobj\source\commonembedding nmake - all eo_commonembed NULL es embeddedobj\source\general nmake - all eo_general NULL -es embeddedobj\util nmake - all eo_util eo_commonembed eo_general NULL +es embeddedobj\source\msole nmake - all eo_msole NULL +es embeddedobj\util nmake - all eo_util eo_commonembed eo_general eo_msole NULL diff --git a/embeddedobj/source/commonembedding/embedobj.cxx b/embeddedobj/source/commonembedding/embedobj.cxx index aa980a59024c..aebcc37fdb71 100644 --- a/embeddedobj/source/commonembedding/embedobj.cxx +++ b/embeddedobj/source/commonembedding/embedobj.cxx @@ -2,9 +2,9 @@ * * $RCSfile: embedobj.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: mav $ $Date: 2003-10-27 12:57:28 $ + * last change: $Author: mav $ $Date: 2003-11-14 15:24:24 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -181,6 +181,9 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState ) if ( !xModif.is() ) throw uno::RuntimeException(); + if ( !m_xClientSite.is() ) + throw embed::WrongStateException(); //TODO: client site is not set! + // store document if it is modified if ( xModif->isModified() ) { @@ -324,7 +327,7 @@ void SAL_CALL OCommonEmbeddedObject::doVerb( sal_Int32 nVerbID ) } //---------------------------------------------- -uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() +uno::Sequence< embed::VerbDescr > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() throw ( embed::WrongStateException, uno::RuntimeException ) { @@ -336,7 +339,7 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "The object has no persistence!\n" ), uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ) ); - uno::Sequence< sal_Int32 > aResult; + uno::Sequence< embed::VerbDescr > aResult; sal_Int32 nResLen = 0; // verbs list will be set on initialization depending from document type @@ -345,7 +348,8 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() if ( m_aVerbTable[nVerbInd][1] == m_aAcceptedStates[nStatesInd] ) { aResult.realloc( ++nResLen ); - aResult[nResLen-1] = m_aVerbTable[nVerbInd][0]; + // TODO: fill the whole structure + aResult[nResLen-1].VerbID = m_aVerbTable[nVerbInd][0]; } return aResult; diff --git a/embeddedobj/source/commonembedding/persistence.cxx b/embeddedobj/source/commonembedding/persistence.cxx index 24bbea1f3e19..3e21ad47ea4c 100644 --- a/embeddedobj/source/commonembedding/persistence.cxx +++ b/embeddedobj/source/commonembedding/persistence.cxx @@ -2,9 +2,9 @@ * * $RCSfile: persistence.cxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: mav $ $Date: 2003-11-04 14:30:19 $ + * last change: $Author: mav $ $Date: 2003-11-14 15:24:24 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -499,7 +499,7 @@ uno::Reference< frame::XModel > OCommonEmbeddedObject::CreateTempDocFromLink_Imp } //------------------------------------------------------ -sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( +void SAL_CALL OCommonEmbeddedObject::setPersistentEntry( const uno::Reference< embed::XStorage >& xStorage, const ::rtl::OUString& sEntName, sal_Int32 nEntryConnectionMode, @@ -547,6 +547,10 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ) ); + // TODO: the OOo link will have persistence + if ( m_bIsLink ) + return; + uno::Reference< container::XNameAccess > xNameAccess( xStorage, uno::UNO_QUERY ); if ( !xNameAccess.is() ) throw uno::RuntimeException(); //TODO @@ -565,10 +569,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( m_xParentStorage = xStorage; m_aEntryName = sEntName; - // the object should be based on the storage ??? TODO - if ( bElExists && !xStorage->isStorageElement( sEntName ) ) - throw io::IOException(); // TODO access denied - if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_DEFAULT_INIT ) { if ( bElExists ) @@ -593,9 +593,8 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_NO_INIT ) { // the document just already changed its storage to store to - // the links to OOo documents will ignore this call and return false - if ( m_bIsLink ) - return sal_False; + // the links to OOo documents for now ignore this call + // TODO: OOo links will have persistence so it will be switched here } else if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_TRUNCATE_INIT ) { @@ -621,8 +620,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ), 3 ); } - - return sal_True; } //------------------------------------------------------ @@ -986,10 +983,6 @@ void SAL_CALL OCommonEmbeddedObject::breakLink( const uno::Reference< embed::XSt m_xParentStorage = xStorage; m_aEntryName = sEntName; - // the object should be based on the storage ??? TODO - if ( bElExists && !xStorage->isStorageElement( sEntName ) ) - throw io::IOException(); // TODO access denied - // for linked object it means that it becomes embedded object // the document must switch it's persistence also diff --git a/embeddedobj/source/inc/commonembobj.hxx b/embeddedobj/source/inc/commonembobj.hxx index c0046f60e039..86db331f5bb8 100644 --- a/embeddedobj/source/inc/commonembobj.hxx +++ b/embeddedobj/source/inc/commonembobj.hxx @@ -2,9 +2,9 @@ * * $RCSfile: commonembobj.hxx,v $ * - * $Revision: 1.2 $ + * $Revision: 1.3 $ * - * last change: $Author: mav $ $Date: 2003-11-04 14:30:20 $ + * last change: $Author: mav $ $Date: 2003-11-14 15:24:26 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -275,7 +275,7 @@ public: ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ); - virtual ::com::sun::star::uno::Sequence< sal_Int32 > SAL_CALL getSupportedVerbs() + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::embed::VerbDescr > SAL_CALL getSupportedVerbs() throw ( ::com::sun::star::embed::WrongStateException, ::com::sun::star::uno::RuntimeException ); @@ -326,7 +326,7 @@ public: // XEmbedPersist - virtual sal_Bool SAL_CALL setPersistentEntry( + virtual void SAL_CALL setPersistentEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage, const ::rtl::OUString& sEntName, sal_Int32 nEntryConnectionMode, diff --git a/embeddedobj/source/msole/olecomponent.cxx b/embeddedobj/source/msole/olecomponent.cxx index 8ca0b7292fd1..80a4cd55f8e5 100644 --- a/embeddedobj/source/msole/olecomponent.cxx +++ b/embeddedobj/source/msole/olecomponent.cxx @@ -2,9 +2,9 @@ * * $RCSfile: olecomponent.cxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: mav $ $Date: 2003-11-13 17:01:13 $ + * last change: $Author: mav $ $Date: 2003-11-14 15:24:27 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -312,9 +312,15 @@ OleComponent::OleComponent( const uno::Reference< lang::XMultiServiceFactory >& , m_nAdvConn( 0 ) , m_nSupportedFormat( 0 ) , m_nSupportedMedium( 0 ) +, m_bOleInitialized( sal_False ) { OSL_ENSURE( m_pUnoOleObject, "No owner object is provided!" ); + HRESULT hr = OleInitialize( NULL ); + OSL_ENSURE( hr == S_OK || hr == S_FALSE, "The ole can not be successfuly initialized\n" ); + if ( hr == S_OK || hr == S_FALSE ) + m_bOleInitialized = sal_True; + m_pOleWrapClientSite = new OleWrapperClientSite( (OleComponent*)this ); m_pOleWrapClientSite->AddRef(); @@ -352,6 +358,9 @@ OleComponent::~OleComponent() delete m_pInterfaceContainer; m_pInterfaceContainer = NULL; } + + if ( m_bOleInitialized ) + OleUninitialize(); } //---------------------------------------------- @@ -654,8 +663,6 @@ uno::Sequence< embed::VerbDescr > OleComponent::GetVerbList() if( !m_aVerbList.getLength() ) { - // InitOle(); // TODO: makes sence to do in a central place - CComPtr< IEnumOLEVERB > pEnum; if( SUCCEEDED( m_pOleObject->EnumVerbs( &pEnum ) ) ) { diff --git a/embeddedobj/source/msole/olecomponent.hxx b/embeddedobj/source/msole/olecomponent.hxx index 4bc5da963a2b..d199ebd4a406 100644 --- a/embeddedobj/source/msole/olecomponent.hxx +++ b/embeddedobj/source/msole/olecomponent.hxx @@ -2,9 +2,9 @@ * * $RCSfile: olecomponent.hxx,v $ * - * $Revision: 1.1 $ + * $Revision: 1.2 $ * - * last change: $Author: mav $ $Date: 2003-11-13 17:01:32 $ + * last change: $Author: mav $ $Date: 2003-11-14 15:24:27 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -146,6 +146,7 @@ class OleComponent : public ::cppu::WeakImplHelper2< ::com::sun::star::util::XCl sal_uInt16 m_nSupportedFormat; sal_uInt32 m_nSupportedMedium; + sal_Bool m_bOleInitialized; sal_Bool InitializeObject_Impl( sal_uInt32 nIconHandle ); diff --git a/embeddedobj/test/Container1/EmbedContApp.java b/embeddedobj/test/Container1/EmbedContApp.java index e8e1084dc987..8712fc9b3f3e 100644 --- a/embeddedobj/test/Container1/EmbedContApp.java +++ b/embeddedobj/test/Container1/EmbedContApp.java @@ -5,6 +5,7 @@ import java.net.*; import java.io.*; import javax.swing.JOptionPane; +import javax.swing.Timer; import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XSingleServiceFactory; @@ -30,7 +31,7 @@ import com.sun.star.io.XTruncate; import com.sun.star.embed.*; -public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClient +public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClient, ActionListener { private XMultiServiceFactory m_xServiceFactory; @@ -48,6 +49,24 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie private boolean m_bLinkObj = false; private String m_aLinkURI; + private byte[] m_pActionsList; + private int m_nActionsNumber; + private Timer m_aTimer; + private boolean m_bDestroyed = false; + +// Constants + private final byte DESTROY = 1; + private final byte MOUSE_CLICKED = 2; + private final byte NEW_DOCUMENT = 3; + private final byte SAVE_AS = 4; + private final byte OPEN_FILE = 5; + private final byte SAVE = 6; + private final byte NEW_OBJECT = 7; + private final byte OBJECT_FROM_FILE = 8; + private final byte LINK_FROM_FILE = 9; + private final byte CONVERT_LINK_TO_OBJECT = 10; + +// Methods public EmbedContApp( Frame aFrame, XMultiServiceFactory xServiceFactory ) { m_aFrame = aFrame; @@ -61,6 +80,12 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie m_aToolkit = Toolkit.getDefaultToolkit(); + m_pActionsList = new byte[200]; + m_nActionsNumber = 0; + + m_aTimer = new Timer( 100, this ); + m_aTimer.start(); + // Get a menu bar. MenuBar aMenuBar = m_aFrame.getMenuBar(); if( aMenuBar == null ) @@ -108,6 +133,401 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie addMouseListener( this ); } + public void actionPerformed( ActionEvent evt ) + { + synchronized( this ) + { + for( int nInd = 0; nInd < m_nActionsNumber; nInd++ ) + { + // TODO: execute m_pActionsList[ nInd ] operation + if ( m_pActionsList[ nInd ] == DESTROY ) + { + // free all resources + clearObjectAndStorage(); + m_bDestroyed = true; + } + else if ( m_pActionsList[ nInd ] == MOUSE_CLICKED ) + { + // activate object if exists and not active + if ( m_xEmbedObj != null ) + { + try { + m_xEmbedObj.changeState( EmbedStates.EMBED_ACTIVE ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, ex, "Exception on mouse click", JOptionPane.ERROR_MESSAGE ); + } + } + } + else if ( m_pActionsList[ nInd ] == NEW_DOCUMENT ) + { + // clear everything + clearObjectAndStorage(); + + repaint(); + } + else if ( m_pActionsList[ nInd ] == SAVE_AS ) + { + // open SaveAs dialog and store + + if ( m_xStorage != null && m_xEmbedObj != null ) + { + FileDialog aFileDialog = new FileDialog( m_aFrame, "SaveAs", FileDialog.SAVE ); + aFileDialog.show(); + if ( aFileDialog.getFile() != null ) + { + String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); + File aFile = new File( aFileName ); + if ( aFile != null ) + { + // create object from specified file + String aFileURI = aFile.toURI().toASCIIString(); + try { + saveObject(); + + if ( m_bLinkObj ) + storeLinkToStorage(); + + saveStorageAsFileURI( aFileURI ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception in SaveAsMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + else + JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); + } + else if ( m_pActionsList[ nInd ] == OPEN_FILE ) + { + // clear everything + clearObjectAndStorage(); + + // open OpenFile dialog and load doc + FileDialog aFileDialog = new FileDialog( m_aFrame, "Open" ); + aFileDialog.show(); + if ( aFileDialog.getFile() != null ) + { + String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); + File aFile = new File( aFileName ); + if ( aFile != null ) + { + // create object from specified file + String aFileURI = aFile.toURI().toASCIIString(); + + // load from specified file + loadFileURI( aFileURI ); + + if ( m_xEmbedObj != null ) + { + try { + m_xEmbedObj.setClientSite( EmbedContApp.this ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception in OpenFileMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + + generateNewImage(); + repaint(); + } + else if ( m_pActionsList[ nInd ] == SAVE ) + { + // if has persistance store there + // if not open SaveAs dialog and store + if ( m_xStorage != null && m_xEmbedObj != null ) + { + if ( m_bOwnFile ) + { + if ( m_xStorage == null ) + { + JOptionPane.showMessageDialog( m_aFrame, + "No storage for oned file!", + "Error:", + JOptionPane.ERROR_MESSAGE ); + return; + } + + try { + saveObject(); + + if ( m_bLinkObj ) + storeLinkToStorage(); + + XTransactedObject xTransact = (XTransactedObject)UnoRuntime.queryInterface( XTransactedObject.class, + m_xStorage ); + if ( xTransact != null ) + xTransact.commit(); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception during save operation in SaveMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + else + { + FileDialog aFileDialog = new FileDialog( m_aFrame, "SaveAs", FileDialog.SAVE ); + aFileDialog.show(); + if ( aFileDialog.getFile() != null ) + { + String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); + File aFile = new File( aFileName ); + if ( aFile != null ) + { + // create object from specified file + String aFileURI = aFile.toURI().toASCIIString(); + try { + saveObject(); + + if ( m_bLinkObj ) + storeLinkToStorage(); + + saveStorageAsFileURI( aFileURI ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception during 'save as' operation in SaveMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + } + else + JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); + } + else if ( m_pActionsList[ nInd ] == NEW_OBJECT ) + { + // remove current object an init a new one + clearObjectAndStorage(); + + Object[] possibleValues = { "com.sun.star.comp.Writer.TextDocument", + "com.sun.star.comp.Writer.GlobalDocument", + "com.sun.star.comp.Writer.WebDocument", + "com.sun.star.comp.Calc.SpreadsheetDocument", + "com.sun.star.comp.Draw.PresentationDocument", + "com.sun.star.comp.Draw.DrawingDocument", + "com.sun.star.comp.Math.FormulaDocument", + "BitmapImage" }; + + String selectedValue = (String)JOptionPane.showInputDialog( null, "DocumentType", "Select", + JOptionPane.INFORMATION_MESSAGE, null, + possibleValues, possibleValues[0] ); + + if ( selectedValue != null ) + { + m_xStorage = createTempStorage(); + + if ( m_xStorage != null ) + m_xEmbedObj = createEmbedObject( selectedValue ); + else + JOptionPane.showMessageDialog( m_aFrame, + "Can't create temporary storage!", + "Error:", + JOptionPane.ERROR_MESSAGE ); + + + if ( m_xEmbedObj != null ) + { + try { + m_xEmbedObj.setClientSite( EmbedContApp.this ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception in NewObjectMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + + generateNewImage(); + repaint(); + } + else if ( m_pActionsList[ nInd ] == OBJECT_FROM_FILE ) + { + // first remove current object + clearObjectAndStorage(); + + // open OpenFile dialog and load doc + FileDialog aFileDialog = new FileDialog( m_aFrame, "Select sources to use for object init" ); + aFileDialog.show(); + if ( aFileDialog.getFile() != null ) + { + String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); + File aFile = new File( aFileName ); + if ( aFile != null ) + { + // create object from specified file + String aFileURI = aFile.toURI().toASCIIString(); + m_xStorage = createTempStorage(); + + if ( m_xStorage != null ) + m_xEmbedObj = loadEmbedObject( aFileURI ); + + if ( m_xEmbedObj != null ) + { + try { + m_xEmbedObj.setClientSite( EmbedContApp.this ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception in LoadObjectMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + + generateNewImage(); + repaint(); + } + else if ( m_pActionsList[ nInd ] == LINK_FROM_FILE ) + { + // first remove current object + clearObjectAndStorage(); + + // open OpenFile dialog and load doc + FileDialog aFileDialog = new FileDialog( m_aFrame, "Select sources to use for object init" ); + aFileDialog.show(); + if ( aFileDialog.getFile() != null ) + { + m_xStorage = createTempStorage(); + + String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); + File aFile = new File( aFileName ); + if ( aFile != null ) + { + // create object from specified file + String aFileURI = aFile.toURI().toASCIIString(); + + m_xEmbedObj = createLinkObject( aFileURI ); + + if ( m_xEmbedObj != null ) + { + m_aLinkURI = aFileURI; + m_bLinkObj = true; + + try { + m_xEmbedObj.setClientSite( EmbedContApp.this ); + } + catch( Exception ex ) + { + JOptionPane.showMessageDialog( m_aFrame, + ex, + "Exception in LinkObjectMenuItem:", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + + generateNewImage(); + repaint(); + } + else if ( m_pActionsList[ nInd ] == CONVERT_LINK_TO_OBJECT ) + { + if ( !m_bLinkObj ) + { + JOptionPane.showMessageDialog( m_aFrame, "The object is not a link!", "Error:", JOptionPane.ERROR_MESSAGE ); + return; + } + + if ( m_xEmbedObj != null ) + { + if ( m_xStorage != null ) + { + try { + XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface( XNameAccess.class, + m_xStorage ); + if ( xNameAccess != null && xNameAccess.hasByName( "LinkName" ) ) + m_xStorage.removeElement( "LinkName" ); + + XLinkageSupport xLinkage = (XLinkageSupport)UnoRuntime.queryInterface( XLinkageSupport.class, + m_xEmbedObj ); + if ( xLinkage != null ) + { + xLinkage.breakLink( m_xStorage, "EmbedSub" ); + m_bLinkObj = false; + m_aLinkURI = null; + } + else + JOptionPane.showMessageDialog( m_aFrame, + "No XLinkageSupport in ConvertLink... !", + "Error:", + JOptionPane.ERROR_MESSAGE ); + } + catch( Exception e1 ) + { + JOptionPane.showMessageDialog( m_aFrame, + e1, + "Exception in ConvertLinkToEmbed:try 1 :", + JOptionPane.ERROR_MESSAGE ); + } + } + } + } + else + { + System.out.println( "Unknoun action is requested: " + m_pActionsList[nInd] + "\n" ); + } + } + + m_nActionsNumber = 0; + } + } + + public void actionRegister( byte nActionID ) + { + synchronized( this ) + { + if ( m_nActionsNumber < 199 + && ( m_nActionsNumber == 0 || m_pActionsList[ m_nActionsNumber - 1 ] != DESTROY ) ) + m_pActionsList[ m_nActionsNumber++ ] = nActionID; + } + } + + public void destroy() + { + // redirect the call through the timer and call super.destroy(); + actionRegister( DESTROY ); + + for ( int i = 0; i < 3 && !m_bDestroyed; i++ ) + { + try { + Thread.sleep( 200 ); + } catch ( Exception e ) + {} + } + + if ( !m_bDestroyed ) + System.out.println( "The object application can not exit correctly!" ); + + m_aTimer.stop(); + + super.destroy(); + } + public void update( Graphics g ) { paint( g ); @@ -186,17 +606,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie { if( e.getModifiers() == InputEvent.BUTTON1_MASK ) { - // activate object if exists and not active - if ( m_xEmbedObj != null ) - { - try { - m_xEmbedObj.changeState( EmbedStates.EMBED_ACTIVE ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, ex, "Exception on mouse click", JOptionPane.ERROR_MESSAGE ); - } - } + actionRegister( MOUSE_CLICKED ); } } @@ -247,10 +657,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // clear everything - clearObjectAndStorage(); - - repaint(); + actionRegister( NEW_DOCUMENT ); } } @@ -264,40 +671,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // open SaveAs dialog and store - - if ( m_xStorage != null && m_xEmbedObj != null ) - { - FileDialog aFileDialog = new FileDialog( m_aFrame, "SaveAs", FileDialog.SAVE ); - aFileDialog.show(); - if ( aFileDialog.getFile() != null ) - { - String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); - File aFile = new File( aFileName ); - if ( aFile != null ) - { - // create object from specified file - String aFileURI = aFile.toURI().toASCIIString(); - try { - saveObject(); - - if ( m_bLinkObj ) - storeLinkToStorage(); - - saveStorageAsFileURI( aFileURI ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception in SaveAsMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - } - else - JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); + actionRegister( SAVE_AS ); } } @@ -311,42 +685,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // clear everything - clearObjectAndStorage(); - - // open OpenFile dialog and load doc - FileDialog aFileDialog = new FileDialog( m_aFrame, "Open" ); - aFileDialog.show(); - if ( aFileDialog.getFile() != null ) - { - String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); - File aFile = new File( aFileName ); - if ( aFile != null ) - { - // create object from specified file - String aFileURI = aFile.toURI().toASCIIString(); - - // load from specified file - loadFileURI( aFileURI ); - - if ( m_xEmbedObj != null ) - { - try { - m_xEmbedObj.setClientSite( EmbedContApp.this ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception in OpenFileMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - } - - generateNewImage(); - repaint(); + actionRegister( OPEN_FILE ); } } @@ -360,73 +699,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // if has persistance store there - // if not open SaveAs dialog and store - if ( m_xStorage != null && m_xEmbedObj != null ) - { - if ( m_bOwnFile ) - { - if ( m_xStorage == null ) - { - JOptionPane.showMessageDialog( m_aFrame, - "No storage for oned file!", - "Error:", - JOptionPane.ERROR_MESSAGE ); - return; - } - - try { - saveObject(); - - if ( m_bLinkObj ) - storeLinkToStorage(); - - XTransactedObject xTransact = (XTransactedObject)UnoRuntime.queryInterface( XTransactedObject.class, - m_xStorage ); - if ( xTransact != null ) - xTransact.commit(); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception during save operation in SaveMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - else - { - FileDialog aFileDialog = new FileDialog( m_aFrame, "SaveAs", FileDialog.SAVE ); - aFileDialog.show(); - if ( aFileDialog.getFile() != null ) - { - String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); - File aFile = new File( aFileName ); - if ( aFile != null ) - { - // create object from specified file - String aFileURI = aFile.toURI().toASCIIString(); - try { - saveObject(); - - if ( m_bLinkObj ) - storeLinkToStorage(); - - saveStorageAsFileURI( aFileURI ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception during 'save as' operation in SaveMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - } - } - else - JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); + actionRegister( SAVE ); } } @@ -440,51 +713,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // remove current object an init a new one - clearObjectAndStorage(); - - Object[] possibleValues = { "com.sun.star.comp.Writer.TextDocument", - "com.sun.star.comp.Writer.GlobalDocument", - "com.sun.star.comp.Writer.WebDocument", - "com.sun.star.comp.Calc.SpreadsheetDocument", - "com.sun.star.comp.Draw.PresentationDocument", - "com.sun.star.comp.Draw.DrawingDocument", - "com.sun.star.comp.Math.FormulaDocument" }; - - String selectedValue = (String)JOptionPane.showInputDialog( null, "DocumentType", "Select", - JOptionPane.INFORMATION_MESSAGE, null, - possibleValues, possibleValues[0] ); - - if ( selectedValue != null ) - { - m_xStorage = createTempStorage(); - - if ( m_xStorage != null ) - m_xEmbedObj = createEmbedObject( selectedValue ); - else - JOptionPane.showMessageDialog( m_aFrame, - "Can't create temporary storage!", - "Error:", - JOptionPane.ERROR_MESSAGE ); - - - if ( m_xEmbedObj != null ) - { - try { - m_xEmbedObj.setClientSite( EmbedContApp.this ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception in NewObjectMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - - generateNewImage(); - repaint(); + actionRegister( NEW_OBJECT ); } } @@ -498,43 +727,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // first remove current object - clearObjectAndStorage(); - - // open OpenFile dialog and load doc - FileDialog aFileDialog = new FileDialog( m_aFrame, "Select sources to use for object init" ); - aFileDialog.show(); - if ( aFileDialog.getFile() != null ) - { - String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); - File aFile = new File( aFileName ); - if ( aFile != null ) - { - // create object from specified file - String aFileURI = aFile.toURI().toASCIIString(); - m_xStorage = createTempStorage(); - - if ( m_xStorage != null ) - m_xEmbedObj = loadEmbedObject( aFileURI ); - - if ( m_xEmbedObj != null ) - { - try { - m_xEmbedObj.setClientSite( EmbedContApp.this ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception in LoadObjectMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - } - - generateNewImage(); - repaint(); + actionRegister( OBJECT_FROM_FILE ); } } @@ -548,46 +741,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - // first remove current object - clearObjectAndStorage(); - - // open OpenFile dialog and load doc - FileDialog aFileDialog = new FileDialog( m_aFrame, "Select sources to use for object init" ); - aFileDialog.show(); - if ( aFileDialog.getFile() != null ) - { - m_xStorage = createTempStorage(); - - String aFileName = aFileDialog.getDirectory() + aFileDialog.getFile(); - File aFile = new File( aFileName ); - if ( aFile != null ) - { - // create object from specified file - String aFileURI = aFile.toURI().toASCIIString(); - - m_xEmbedObj = createLinkObject( aFileURI ); - - if ( m_xEmbedObj != null ) - { - m_aLinkURI = aFileURI; - m_bLinkObj = true; - - try { - m_xEmbedObj.setClientSite( EmbedContApp.this ); - } - catch( Exception ex ) - { - JOptionPane.showMessageDialog( m_aFrame, - ex, - "Exception in LinkObjectMenuItem:", - JOptionPane.ERROR_MESSAGE ); - } - } - } - } - - generateNewImage(); - repaint(); + actionRegister( LINK_FROM_FILE ); } } @@ -601,45 +755,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie public void actionPerformed( ActionEvent e ) { - if ( !m_bLinkObj ) - { - JOptionPane.showMessageDialog( m_aFrame, "The object is not a link!", "Error:", JOptionPane.ERROR_MESSAGE ); - return; - } - - if ( m_xEmbedObj != null ) - { - if ( m_xStorage != null ) - { - try { - XNameAccess xNameAccess = (XNameAccess)UnoRuntime.queryInterface( XNameAccess.class, - m_xStorage ); - if ( xNameAccess != null && xNameAccess.hasByName( "LinkName" ) ) - m_xStorage.removeElement( "LinkName" ); - - XLinkageSupport xLinkage = (XLinkageSupport)UnoRuntime.queryInterface( XLinkageSupport.class, - m_xEmbedObj ); - if ( xLinkage != null ) - { - xLinkage.breakLink( m_xStorage, "EmbedSub" ); - m_bLinkObj = false; - m_aLinkURI = null; - } - else - JOptionPane.showMessageDialog( m_aFrame, - "No XLinkageSupport in ConvertLink... !", - "Error:", - JOptionPane.ERROR_MESSAGE ); - } - catch( Exception e1 ) - { - JOptionPane.showMessageDialog( m_aFrame, - e1, - "Exception in ConvertLinkToEmbed:try 1 :", - JOptionPane.ERROR_MESSAGE ); - } - } - } + actionRegister( CONVERT_LINK_TO_OBJECT ); } } @@ -698,6 +814,13 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie for ( int ind = 0; ind < 16; ind++ ) pClassID[ind] = (byte)pTempClassID[ind]; } + else if ( aServiceName.equals( "BitmapImage" ) ) + { + int[] pTempClassID = { 0xD3, 0xE3, 0x4B, 0x21, 0x9D, 0x75, 0x10, 0x1A, + 0x8C, 0x3D, 0x00, 0xAA, 0x00, 0x1A, 0x16, 0x52 }; + for ( int ind = 0; ind < 16; ind++ ) + pClassID[ind] = (byte)pTempClassID[ind]; + } if ( pClassID != null ) { diff --git a/embeddedobj/util/makefile.mk b/embeddedobj/util/makefile.mk index ed1f6c9af70a..93e5aceda317 100644 --- a/embeddedobj/util/makefile.mk +++ b/embeddedobj/util/makefile.mk @@ -2,9 +2,9 @@ # # $RCSfile: makefile.mk,v $ # -# $Revision: 1.2 $ +# $Revision: 1.3 $ # -# last change: $Author: mav $ $Date: 2003-10-29 08:32:00 $ +# last change: $Author: mav $ $Date: 2003-11-14 15:24:28 $ # # The Contents of this file are made available subject to the terms of # either of the following licenses @@ -88,12 +88,27 @@ SHL1OBJS= \ $(SLO)$/closepreventer.obj\ $(SLO)$/intercept.obj +SHL1OBJS+= \ + $(SLO)$/olecomponent.obj\ + $(SLO)$/olepersist.obj\ + $(SLO)$/oleembed.obj\ + $(SLO)$/olevisual.obj\ + $(SLO)$/olemisc.obj\ + $(SLO)$/olewrapclient.obj\ + $(SLO)$/advisesink.obj + SHL1STDLIBS=\ $(SALLIB)\ $(CPPULIB)\ $(CPPUHELPERLIB) +SHL1STDLIBS +=\ + ole32.lib\ + gdi32.lib\ + uuid.lib\ + oleaut32.lib + SHL1DEF= $(MISC)$/$(SHL1TARGET).def DEF1NAME= $(SHL1TARGET) |