diff options
Diffstat (limited to 'xparts/src/tde/xparthost_kpart.cpp')
-rw-r--r-- | xparts/src/tde/xparthost_kpart.cpp | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/xparts/src/tde/xparthost_kpart.cpp b/xparts/src/tde/xparthost_kpart.cpp new file mode 100644 index 00000000..54bcb804 --- /dev/null +++ b/xparts/src/tde/xparthost_kpart.cpp @@ -0,0 +1,150 @@ +#include "xparthost_kpart.h" +#include "kbrowsersignals.h" +#include "xpart_stub.h" + +#include <dcopclient.h> +#include <tdeapplication.h> + +#include <assert.h> + +#include <qxembed.h> + +#include <tqdom.h> +#include <tdeaction.h> + +#include <kdebug.h> + +XPartHost_KPart::XPartHost_KPart( TQWidget *parentWidget, const char *widgetName, + TQObject *parent, const char *name ) + : KParts::ReadOnlyPart( parent, name ), + XPartHost("parthost") +{ + m_stub = 0; + be = 0; + embed = new QXEmbed(parentWidget, widgetName); + setWidget(embed); +} + +XPartHost_KPart::~XPartHost_KPart() +{ + delete m_stub; +} + +DCOPRef XPartHost_KPart::part() +{ + return m_part; +} + +DCOPRef XPartHost_KPart::registerXPart( const DCOPRef &part ) +{ + m_part = part; + + assert( m_stub == 0 ); + + m_stub = new XPart_stub( part.app(), part.object() ); + m_stub->show(); + + kdDebug() << "embedding window " << m_stub->windowId() << endl; + embed->embed( static_cast<WId>( m_stub->windowId() ) ); + + embed->show(); + DCOPRef ref = m_stub->queryExtension("browserextension"); + if( !ref.isNull() ) { + tqDebug(" found browser extension "); + be = new KBrowserSignals( this, ref ); + } + return DCOPRef( kapp->dcopClient()->appId(), objId() ); +} + + +void XPartHost_KPart::createActions( const TQCString &xmlActions ) +{ + tqDebug("--> createActions"); + // creates a set of actions and adds them to the actionCollection + TQDomDocument d; + d.setContent( xmlActions ); + + TQDomElement docElem = d.documentElement(); + + kdDebug() << "docElement is " << docElem.tagName() << endl; + + TQDomNode n = docElem.firstChild(); + while( !n.isNull() ) { + TQDomElement e = n.toElement(); + if( !e.isNull() ) { + if ( e.tagName() == "Action") { + TQString name = e.attribute("name"); + TQString type = e.attribute("type"); + + if(type.isEmpty()) + new TDEAction( name, 0, this, TQT_SLOT( actionActivated() ), actionCollection(), name.latin1() ); + else if( type == "toggle" ) + new TDEToggleAction( name, 0, this, TQT_SLOT( actionActivated() ), actionCollection(), name.latin1() ); + kdDebug() << "action=" << name << " type=" << type << endl; + } else if ( e.tagName() == "XMLFile" ) { + TQString location = e.attribute("location"); + setXMLFile(location); + } + } + n = n.nextSibling(); + } + emit actionsInitialized(); +} + + +void XPartHost_KPart::setWindowCaption( const TQString &caption ) +{ + emit KParts::ReadOnlyPart::setWindowCaption( caption ); +} + +void XPartHost_KPart::setStatusBarText( const TQString &text ) +{ + emit KParts::ReadOnlyPart::setStatusBarText( text ); +} + +void XPartHost_KPart::started() +{ + emit KParts::ReadOnlyPart::started( 0 ); +} + +void XPartHost_KPart::completed() +{ + emit KParts::ReadOnlyPart::completed(); +} + +void XPartHost_KPart::canceled( const TQString &errMsg ) +{ + emit KParts::ReadOnlyPart::canceled( errMsg ); +} + +bool XPartHost_KPart::openURL( const KURL &url ) +{ + tqDebug("XPartHost_KPart::openUrl()"); + return m_stub->openURL( url.url().latin1() ); +} + +bool XPartHost_KPart::closeURL() +{ + return m_stub->closeURL(); +} + + +void XPartHost_KPart::actionActivated() +{ + const TQObject *o = sender(); + + if( !o->inherits("TDEAction") ) return; + + const TDEAction *action = static_cast<const TDEAction *>(o); + TQString name = action->text(); + int state = 0; + + if(action->inherits("TDEToggleAction")) { + const TDEToggleAction *t = static_cast<const TDEToggleAction *>(action); + state = t->isChecked(); + } + + m_stub->activateAction(name, state); +} + +#include "xparthost_kpart.moc" |