Kaydet (Commit) aec29756 authored tarafından Mikhail Voitenko's avatar Mikhail Voitenko

#112923# ole implementation related changes

üst 5ea5c0af
...@@ -2,4 +2,5 @@ es embeddedobj : offuh sal cppu cppuhelper NULL ...@@ -2,4 +2,5 @@ es embeddedobj : offuh sal cppu cppuhelper NULL
es embeddedobj usr1 - all eo_mkout NULL es embeddedobj usr1 - all eo_mkout NULL
es embeddedobj\source\commonembedding nmake - all eo_commonembed NULL es embeddedobj\source\commonembedding nmake - all eo_commonembed NULL
es embeddedobj\source\general nmake - all eo_general 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
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: embedobj.cxx,v $ * $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 * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -181,6 +181,9 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState ) ...@@ -181,6 +181,9 @@ void OCommonEmbeddedObject::SwitchStateTo_Impl( sal_Int32 nNextState )
if ( !xModif.is() ) if ( !xModif.is() )
throw uno::RuntimeException(); throw uno::RuntimeException();
if ( !m_xClientSite.is() )
throw embed::WrongStateException(); //TODO: client site is not set!
// store document if it is modified // store document if it is modified
if ( xModif->isModified() ) if ( xModif->isModified() )
{ {
...@@ -324,7 +327,7 @@ void SAL_CALL OCommonEmbeddedObject::doVerb( sal_Int32 nVerbID ) ...@@ -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, throw ( embed::WrongStateException,
uno::RuntimeException ) uno::RuntimeException )
{ {
...@@ -336,7 +339,7 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() ...@@ -336,7 +339,7 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs()
throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "The object has no persistence!\n" ), throw embed::WrongStateException( ::rtl::OUString::createFromAscii( "The object has no persistence!\n" ),
uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ) ); uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ) );
uno::Sequence< sal_Int32 > aResult; uno::Sequence< embed::VerbDescr > aResult;
sal_Int32 nResLen = 0; sal_Int32 nResLen = 0;
// verbs list will be set on initialization depending from document type // verbs list will be set on initialization depending from document type
...@@ -345,7 +348,8 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs() ...@@ -345,7 +348,8 @@ uno::Sequence< sal_Int32 > SAL_CALL OCommonEmbeddedObject::getSupportedVerbs()
if ( m_aVerbTable[nVerbInd][1] == m_aAcceptedStates[nStatesInd] ) if ( m_aVerbTable[nVerbInd][1] == m_aAcceptedStates[nStatesInd] )
{ {
aResult.realloc( ++nResLen ); 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; return aResult;
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: persistence.cxx,v $ * $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 * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -499,7 +499,7 @@ uno::Reference< frame::XModel > OCommonEmbeddedObject::CreateTempDocFromLink_Imp ...@@ -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 uno::Reference< embed::XStorage >& xStorage,
const ::rtl::OUString& sEntName, const ::rtl::OUString& sEntName,
sal_Int32 nEntryConnectionMode, sal_Int32 nEntryConnectionMode,
...@@ -547,6 +547,10 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( ...@@ -547,6 +547,10 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry(
::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ), ::rtl::OUString::createFromAscii( "The object waits for saveCompleted() call!\n" ),
uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ) ); 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 ); uno::Reference< container::XNameAccess > xNameAccess( xStorage, uno::UNO_QUERY );
if ( !xNameAccess.is() ) if ( !xNameAccess.is() )
throw uno::RuntimeException(); //TODO throw uno::RuntimeException(); //TODO
...@@ -565,10 +569,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( ...@@ -565,10 +569,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry(
m_xParentStorage = xStorage; m_xParentStorage = xStorage;
m_aEntryName = sEntName; 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 ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_DEFAULT_INIT )
{ {
if ( bElExists ) if ( bElExists )
...@@ -593,9 +593,8 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( ...@@ -593,9 +593,8 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry(
if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_NO_INIT ) if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_NO_INIT )
{ {
// the document just already changed its storage to store to // the document just already changed its storage to store to
// the links to OOo documents will ignore this call and return false // the links to OOo documents for now ignore this call
if ( m_bIsLink ) // TODO: OOo links will have persistence so it will be switched here
return sal_False;
} }
else if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_TRUNCATE_INIT ) else if ( nEntryConnectionMode == embed::EntryInitModes::ENTRY_TRUNCATE_INIT )
{ {
...@@ -621,8 +620,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry( ...@@ -621,8 +620,6 @@ sal_Bool SAL_CALL OCommonEmbeddedObject::setPersistentEntry(
uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ), uno::Reference< uno::XInterface >( reinterpret_cast< ::cppu::OWeakObject* >(this) ),
3 ); 3 );
} }
return sal_True;
} }
//------------------------------------------------------ //------------------------------------------------------
...@@ -986,10 +983,6 @@ void SAL_CALL OCommonEmbeddedObject::breakLink( const uno::Reference< embed::XSt ...@@ -986,10 +983,6 @@ void SAL_CALL OCommonEmbeddedObject::breakLink( const uno::Reference< embed::XSt
m_xParentStorage = xStorage; m_xParentStorage = xStorage;
m_aEntryName = sEntName; 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 // for linked object it means that it becomes embedded object
// the document must switch it's persistence also // the document must switch it's persistence also
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: commonembobj.hxx,v $ * $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 * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -275,7 +275,7 @@ public: ...@@ -275,7 +275,7 @@ public:
::com::sun::star::uno::Exception, ::com::sun::star::uno::Exception,
::com::sun::star::uno::RuntimeException ); ::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, throw ( ::com::sun::star::embed::WrongStateException,
::com::sun::star::uno::RuntimeException ); ::com::sun::star::uno::RuntimeException );
...@@ -326,7 +326,7 @@ public: ...@@ -326,7 +326,7 @@ public:
// XEmbedPersist // 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 ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
const ::rtl::OUString& sEntName, const ::rtl::OUString& sEntName,
sal_Int32 nEntryConnectionMode, sal_Int32 nEntryConnectionMode,
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: olecomponent.cxx,v $ * $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 * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -312,9 +312,15 @@ OleComponent::OleComponent( const uno::Reference< lang::XMultiServiceFactory >& ...@@ -312,9 +312,15 @@ OleComponent::OleComponent( const uno::Reference< lang::XMultiServiceFactory >&
, m_nAdvConn( 0 ) , m_nAdvConn( 0 )
, m_nSupportedFormat( 0 ) , m_nSupportedFormat( 0 )
, m_nSupportedMedium( 0 ) , m_nSupportedMedium( 0 )
, m_bOleInitialized( sal_False )
{ {
OSL_ENSURE( m_pUnoOleObject, "No owner object is provided!" ); 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 = new OleWrapperClientSite( (OleComponent*)this );
m_pOleWrapClientSite->AddRef(); m_pOleWrapClientSite->AddRef();
...@@ -352,6 +358,9 @@ OleComponent::~OleComponent() ...@@ -352,6 +358,9 @@ OleComponent::~OleComponent()
delete m_pInterfaceContainer; delete m_pInterfaceContainer;
m_pInterfaceContainer = NULL; m_pInterfaceContainer = NULL;
} }
if ( m_bOleInitialized )
OleUninitialize();
} }
//---------------------------------------------- //----------------------------------------------
...@@ -654,8 +663,6 @@ uno::Sequence< embed::VerbDescr > OleComponent::GetVerbList() ...@@ -654,8 +663,6 @@ uno::Sequence< embed::VerbDescr > OleComponent::GetVerbList()
if( !m_aVerbList.getLength() ) if( !m_aVerbList.getLength() )
{ {
// InitOle(); // TODO: makes sence to do in a central place
CComPtr< IEnumOLEVERB > pEnum; CComPtr< IEnumOLEVERB > pEnum;
if( SUCCEEDED( m_pOleObject->EnumVerbs( &pEnum ) ) ) if( SUCCEEDED( m_pOleObject->EnumVerbs( &pEnum ) ) )
{ {
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* *
* $RCSfile: olecomponent.hxx,v $ * $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 * The Contents of this file are made available subject to the terms of
* either of the following licenses * either of the following licenses
...@@ -146,6 +146,7 @@ class OleComponent : public ::cppu::WeakImplHelper2< ::com::sun::star::util::XCl ...@@ -146,6 +146,7 @@ class OleComponent : public ::cppu::WeakImplHelper2< ::com::sun::star::util::XCl
sal_uInt16 m_nSupportedFormat; sal_uInt16 m_nSupportedFormat;
sal_uInt32 m_nSupportedMedium; sal_uInt32 m_nSupportedMedium;
sal_Bool m_bOleInitialized;
sal_Bool InitializeObject_Impl( sal_uInt32 nIconHandle ); sal_Bool InitializeObject_Impl( sal_uInt32 nIconHandle );
......
...@@ -5,6 +5,7 @@ import java.net.*; ...@@ -5,6 +5,7 @@ import java.net.*;
import java.io.*; import java.io.*;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.Timer;
import com.sun.star.lang.XMultiServiceFactory; import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.lang.XSingleServiceFactory; import com.sun.star.lang.XSingleServiceFactory;
...@@ -30,7 +31,7 @@ import com.sun.star.io.XTruncate; ...@@ -30,7 +31,7 @@ import com.sun.star.io.XTruncate;
import com.sun.star.embed.*; 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; private XMultiServiceFactory m_xServiceFactory;
...@@ -48,6 +49,24 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -48,6 +49,24 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
private boolean m_bLinkObj = false; private boolean m_bLinkObj = false;
private String m_aLinkURI; 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 ) public EmbedContApp( Frame aFrame, XMultiServiceFactory xServiceFactory )
{ {
m_aFrame = aFrame; m_aFrame = aFrame;
...@@ -61,6 +80,12 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -61,6 +80,12 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
m_aToolkit = Toolkit.getDefaultToolkit(); 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. // Get a menu bar.
MenuBar aMenuBar = m_aFrame.getMenuBar(); MenuBar aMenuBar = m_aFrame.getMenuBar();
if( aMenuBar == null ) if( aMenuBar == null )
...@@ -108,6 +133,401 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -108,6 +133,401 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
addMouseListener( this ); 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 ) public void update( Graphics g )
{ {
paint( g ); paint( g );
...@@ -186,17 +606,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -186,17 +606,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
{ {
if( e.getModifiers() == InputEvent.BUTTON1_MASK ) if( e.getModifiers() == InputEvent.BUTTON1_MASK )
{ {
// activate object if exists and not active actionRegister( MOUSE_CLICKED );
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 );
}
}
} }
} }
...@@ -247,10 +657,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -247,10 +657,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// clear everything actionRegister( NEW_DOCUMENT );
clearObjectAndStorage();
repaint();
} }
} }
...@@ -264,40 +671,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -264,40 +671,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// open SaveAs dialog and store actionRegister( SAVE_AS );
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 );
} }
} }
...@@ -311,42 +685,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -311,42 +685,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// clear everything actionRegister( OPEN_FILE );
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();
} }
} }
...@@ -360,73 +699,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -360,73 +699,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// if has persistance store there actionRegister( SAVE );
// 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 );
} }
} }
...@@ -440,51 +713,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -440,51 +713,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// remove current object an init a new one actionRegister( NEW_OBJECT );
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();
} }
} }
...@@ -498,43 +727,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -498,43 +727,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// first remove current object actionRegister( OBJECT_FROM_FILE );
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();
} }
} }
...@@ -548,46 +741,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -548,46 +741,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
// first remove current object actionRegister( LINK_FROM_FILE );
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();
} }
} }
...@@ -601,45 +755,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -601,45 +755,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
public void actionPerformed( ActionEvent e ) public void actionPerformed( ActionEvent e )
{ {
if ( !m_bLinkObj ) actionRegister( CONVERT_LINK_TO_OBJECT );
{
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 );
}
}
}
} }
} }
...@@ -698,6 +814,13 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -698,6 +814,13 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
for ( int ind = 0; ind < 16; ind++ ) for ( int ind = 0; ind < 16; ind++ )
pClassID[ind] = (byte)pTempClassID[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 ) if ( pClassID != null )
{ {
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
# #
# $RCSfile: makefile.mk,v $ # $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 # The Contents of this file are made available subject to the terms of
# either of the following licenses # either of the following licenses
...@@ -88,12 +88,27 @@ SHL1OBJS= \ ...@@ -88,12 +88,27 @@ SHL1OBJS= \
$(SLO)$/closepreventer.obj\ $(SLO)$/closepreventer.obj\
$(SLO)$/intercept.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=\ SHL1STDLIBS=\
$(SALLIB)\ $(SALLIB)\
$(CPPULIB)\ $(CPPULIB)\
$(CPPUHELPERLIB) $(CPPUHELPERLIB)
SHL1STDLIBS +=\
ole32.lib\
gdi32.lib\
uuid.lib\
oleaut32.lib
SHL1DEF= $(MISC)$/$(SHL1TARGET).def SHL1DEF= $(MISC)$/$(SHL1TARGET).def
DEF1NAME= $(SHL1TARGET) DEF1NAME= $(SHL1TARGET)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment