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,83 +133,20 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -108,83 +133,20 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
addMouseListener( this ); addMouseListener( this );
} }
public void update( Graphics g ) public void actionPerformed( ActionEvent evt )
{
paint( g );
}
public void paint( Graphics g )
{
super.paint( g );
if ( m_xEmbedObj != null )
{ {
synchronized( this ) synchronized( this )
{ {
if ( m_aImage != null ) for( int nInd = 0; nInd < m_nActionsNumber; nInd++ )
g.drawImage( m_aImage, 0, 0, EmbedContApp.this );
}
}
}
public void generateNewImage()
{
if ( m_xEmbedObj != null )
{
try {
int nOldState = m_xEmbedObj.getCurrentState();
int nState = nOldState;
if ( nOldState == EmbedStates.EMBED_LOADED )
{
m_xEmbedObj.changeState( EmbedStates.EMBED_RUNNING );
nState = EmbedStates.EMBED_RUNNING;
}
if ( nState == EmbedStates.EMBED_ACTIVE || nState == EmbedStates.EMBED_RUNNING )
{
XComponentSupplier xCompProv = (XComponentSupplier)UnoRuntime.queryInterface(
XComponentSupplier.class,
m_xEmbedObj );
if ( xCompProv != null )
{
XComponent xComp = xCompProv.getComponent();
XTransferable xTransfer = (XTransferable)UnoRuntime.queryInterface(
XTransferable.class,
xComp );
if ( xTransfer != null )
{
DataFlavor aFlavor = new DataFlavor();
aFlavor.MimeType = "image/png";
aFlavor.HumanPresentableName = "Portable Network Graphics";
aFlavor.DataType = new Type( byte[].class );
byte[] aPNGData = (byte[])AnyConverter.toArray( xTransfer.getTransferData( aFlavor ) );
if ( aPNGData != null && aPNGData.length != 0 )
{
synchronized( this )
{ {
m_aImage = m_aToolkit.createImage( aPNGData ); // TODO: execute m_pActionsList[ nInd ] operation
} if ( m_pActionsList[ nInd ] == DESTROY )
}
}
else
System.out.println( "paint() : can not get XTransferable for the component!\n" );
}
else
System.out.println( "paint() : XComponentSupplier is not implemented!\n" );
}
}
catch( com.sun.star.uno.Exception e )
{ {
// dialogs should not be used in paint() // free all resources
System.out.println( "Exception in paint(): " + e ); clearObjectAndStorage();
} m_bDestroyed = true;
}
} }
else if ( m_pActionsList[ nInd ] == MOUSE_CLICKED )
public void mouseClicked( MouseEvent e )
{
if( e.getModifiers() == InputEvent.BUTTON1_MASK )
{ {
// activate object if exists and not active // activate object if exists and not active
if ( m_xEmbedObj != null ) if ( m_xEmbedObj != null )
...@@ -198,71 +160,14 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -198,71 +160,14 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
} }
} }
} }
} else if ( m_pActionsList[ nInd ] == NEW_DOCUMENT )
public void mousePressed( MouseEvent e ){};
public void mouseEntered( MouseEvent e ){};
public void mouseExited( MouseEvent e ){};
public void mouseReleased( MouseEvent e ){};
// XEmbeddedClient
public void saveObject()
throws com.sun.star.uno.Exception
{
if ( m_xEmbedObj != null )
{
try {
XEmbedPersist xPersist = (XEmbedPersist)UnoRuntime.queryInterface( XEmbedPersist.class, m_xEmbedObj );
if ( xPersist != null )
{
xPersist.storeOwn();
generateNewImage();
}
else
JOptionPane.showMessageDialog( m_aFrame, "No XEmbedPersist!", "Error:", JOptionPane.ERROR_MESSAGE );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( m_aFrame, e, "Exception in saveObject:", JOptionPane.ERROR_MESSAGE );
}
}
generateNewImage();
repaint();
}
public void onShowWindow( boolean bVisible )
{
// for now nothing to do
}
// classes
class NewMenuItem extends MenuItem implements ActionListener // Menu New
{
public NewMenuItem()
{
super( "New", new MenuShortcut( KeyEvent.VK_A ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// clear everything // clear everything
clearObjectAndStorage(); clearObjectAndStorage();
repaint(); repaint();
} }
} else if ( m_pActionsList[ nInd ] == SAVE_AS )
class SaveAsMenuItem extends MenuItem implements ActionListener // Menu SaveAs...
{
public SaveAsMenuItem()
{
super( "SaveAs..." );
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// open SaveAs dialog and store // open SaveAs dialog and store
...@@ -299,17 +204,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -299,17 +204,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
else else
JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE );
} }
} else if ( m_pActionsList[ nInd ] == OPEN_FILE )
class OpenFileMenuItem extends MenuItem implements ActionListener // Menu Open
{
public OpenFileMenuItem()
{
super( "Open", new MenuShortcut( KeyEvent.VK_C ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// clear everything // clear everything
clearObjectAndStorage(); clearObjectAndStorage();
...@@ -348,17 +243,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -348,17 +243,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
generateNewImage(); generateNewImage();
repaint(); repaint();
} }
} else if ( m_pActionsList[ nInd ] == SAVE )
class SaveMenuItem extends MenuItem implements ActionListener // Menu Save
{
public SaveMenuItem()
{
super( "Save", new MenuShortcut( KeyEvent.VK_D ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// if has persistance store there // if has persistance store there
// if not open SaveAs dialog and store // if not open SaveAs dialog and store
...@@ -428,17 +313,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -428,17 +313,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
else else
JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE ); JOptionPane.showMessageDialog( m_aFrame, "No document is embedded!", "Error:", JOptionPane.ERROR_MESSAGE );
} }
} else if ( m_pActionsList[ nInd ] == NEW_OBJECT )
class NewObjectMenuItem extends MenuItem implements ActionListener // Menu NewObject
{
public NewObjectMenuItem()
{
super( "Create", new MenuShortcut( KeyEvent.VK_N ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// remove current object an init a new one // remove current object an init a new one
clearObjectAndStorage(); clearObjectAndStorage();
...@@ -449,7 +324,8 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -449,7 +324,8 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
"com.sun.star.comp.Calc.SpreadsheetDocument", "com.sun.star.comp.Calc.SpreadsheetDocument",
"com.sun.star.comp.Draw.PresentationDocument", "com.sun.star.comp.Draw.PresentationDocument",
"com.sun.star.comp.Draw.DrawingDocument", "com.sun.star.comp.Draw.DrawingDocument",
"com.sun.star.comp.Math.FormulaDocument" }; "com.sun.star.comp.Math.FormulaDocument",
"BitmapImage" };
String selectedValue = (String)JOptionPane.showInputDialog( null, "DocumentType", "Select", String selectedValue = (String)JOptionPane.showInputDialog( null, "DocumentType", "Select",
JOptionPane.INFORMATION_MESSAGE, null, JOptionPane.INFORMATION_MESSAGE, null,
...@@ -486,17 +362,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -486,17 +362,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
generateNewImage(); generateNewImage();
repaint(); repaint();
} }
} else if ( m_pActionsList[ nInd ] == OBJECT_FROM_FILE )
class LoadObjectMenuItem extends MenuItem implements ActionListener // Menu LoadObject
{
public LoadObjectMenuItem()
{
super( "Load from file", new MenuShortcut( KeyEvent.VK_L ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// first remove current object // first remove current object
clearObjectAndStorage(); clearObjectAndStorage();
...@@ -536,17 +402,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -536,17 +402,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
generateNewImage(); generateNewImage();
repaint(); repaint();
} }
} else if ( m_pActionsList[ nInd ] == LINK_FROM_FILE )
class LinkObjectMenuItem extends MenuItem implements ActionListener // Menu LinkObject
{
public LinkObjectMenuItem()
{
super( "Create link", new MenuShortcut( KeyEvent.VK_M ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
// first remove current object // first remove current object
clearObjectAndStorage(); clearObjectAndStorage();
...@@ -589,17 +445,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -589,17 +445,7 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
generateNewImage(); generateNewImage();
repaint(); repaint();
} }
} else if ( m_pActionsList[ nInd ] == CONVERT_LINK_TO_OBJECT )
class ConvertLinkToEmbedMenuItem extends MenuItem implements ActionListener // Menu LinkObject
{
public ConvertLinkToEmbedMenuItem()
{
super( "Convert link to embed", new MenuShortcut( KeyEvent.VK_M ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{ {
if ( !m_bLinkObj ) if ( !m_bLinkObj )
{ {
...@@ -641,6 +487,276 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie ...@@ -641,6 +487,276 @@ public class EmbedContApp extends Applet implements MouseListener, XEmbeddedClie
} }
} }
} }
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 );
}
public void paint( Graphics g )
{
super.paint( g );
if ( m_xEmbedObj != null )
{
synchronized( this )
{
if ( m_aImage != null )
g.drawImage( m_aImage, 0, 0, EmbedContApp.this );
}
}
}
public void generateNewImage()
{
if ( m_xEmbedObj != null )
{
try {
int nOldState = m_xEmbedObj.getCurrentState();
int nState = nOldState;
if ( nOldState == EmbedStates.EMBED_LOADED )
{
m_xEmbedObj.changeState( EmbedStates.EMBED_RUNNING );
nState = EmbedStates.EMBED_RUNNING;
}
if ( nState == EmbedStates.EMBED_ACTIVE || nState == EmbedStates.EMBED_RUNNING )
{
XComponentSupplier xCompProv = (XComponentSupplier)UnoRuntime.queryInterface(
XComponentSupplier.class,
m_xEmbedObj );
if ( xCompProv != null )
{
XComponent xComp = xCompProv.getComponent();
XTransferable xTransfer = (XTransferable)UnoRuntime.queryInterface(
XTransferable.class,
xComp );
if ( xTransfer != null )
{
DataFlavor aFlavor = new DataFlavor();
aFlavor.MimeType = "image/png";
aFlavor.HumanPresentableName = "Portable Network Graphics";
aFlavor.DataType = new Type( byte[].class );
byte[] aPNGData = (byte[])AnyConverter.toArray( xTransfer.getTransferData( aFlavor ) );
if ( aPNGData != null && aPNGData.length != 0 )
{
synchronized( this )
{
m_aImage = m_aToolkit.createImage( aPNGData );
}
}
}
else
System.out.println( "paint() : can not get XTransferable for the component!\n" );
}
else
System.out.println( "paint() : XComponentSupplier is not implemented!\n" );
}
}
catch( com.sun.star.uno.Exception e )
{
// dialogs should not be used in paint()
System.out.println( "Exception in paint(): " + e );
}
}
}
public void mouseClicked( MouseEvent e )
{
if( e.getModifiers() == InputEvent.BUTTON1_MASK )
{
actionRegister( MOUSE_CLICKED );
}
}
public void mousePressed( MouseEvent e ){};
public void mouseEntered( MouseEvent e ){};
public void mouseExited( MouseEvent e ){};
public void mouseReleased( MouseEvent e ){};
// XEmbeddedClient
public void saveObject()
throws com.sun.star.uno.Exception
{
if ( m_xEmbedObj != null )
{
try {
XEmbedPersist xPersist = (XEmbedPersist)UnoRuntime.queryInterface( XEmbedPersist.class, m_xEmbedObj );
if ( xPersist != null )
{
xPersist.storeOwn();
generateNewImage();
}
else
JOptionPane.showMessageDialog( m_aFrame, "No XEmbedPersist!", "Error:", JOptionPane.ERROR_MESSAGE );
}
catch( Exception e )
{
JOptionPane.showMessageDialog( m_aFrame, e, "Exception in saveObject:", JOptionPane.ERROR_MESSAGE );
}
}
generateNewImage();
repaint();
}
public void onShowWindow( boolean bVisible )
{
// for now nothing to do
}
// classes
class NewMenuItem extends MenuItem implements ActionListener // Menu New
{
public NewMenuItem()
{
super( "New", new MenuShortcut( KeyEvent.VK_A ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( NEW_DOCUMENT );
}
}
class SaveAsMenuItem extends MenuItem implements ActionListener // Menu SaveAs...
{
public SaveAsMenuItem()
{
super( "SaveAs..." );
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( SAVE_AS );
}
}
class OpenFileMenuItem extends MenuItem implements ActionListener // Menu Open
{
public OpenFileMenuItem()
{
super( "Open", new MenuShortcut( KeyEvent.VK_C ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( OPEN_FILE );
}
}
class SaveMenuItem extends MenuItem implements ActionListener // Menu Save
{
public SaveMenuItem()
{
super( "Save", new MenuShortcut( KeyEvent.VK_D ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( SAVE );
}
}
class NewObjectMenuItem extends MenuItem implements ActionListener // Menu NewObject
{
public NewObjectMenuItem()
{
super( "Create", new MenuShortcut( KeyEvent.VK_N ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( NEW_OBJECT );
}
}
class LoadObjectMenuItem extends MenuItem implements ActionListener // Menu LoadObject
{
public LoadObjectMenuItem()
{
super( "Load from file", new MenuShortcut( KeyEvent.VK_L ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( OBJECT_FROM_FILE );
}
}
class LinkObjectMenuItem extends MenuItem implements ActionListener // Menu LinkObject
{
public LinkObjectMenuItem()
{
super( "Create link", new MenuShortcut( KeyEvent.VK_M ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( LINK_FROM_FILE );
}
}
class ConvertLinkToEmbedMenuItem extends MenuItem implements ActionListener // Menu LinkObject
{
public ConvertLinkToEmbedMenuItem()
{
super( "Convert link to embed", new MenuShortcut( KeyEvent.VK_M ));
addActionListener( this );
}
public void actionPerformed( ActionEvent e )
{
actionRegister( CONVERT_LINK_TO_OBJECT );
}
} }
// Helper methods // Helper methods
...@@ -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