📄 browserextension.cpp
字号:
// Set the initial status of the actions depending on whether // they're supported or not ActionSlotMap::ConstIterator it = s_actionSlotMap->begin(); ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->end(); QStrList slotNames = metaObject()->slotNames(); for ( int i=0 ; it != itEnd ; ++it, ++i ) { // Does the extension have a slot with the name of this action ? d->m_actionStatus.setBit( i, slotNames.contains( it.key()+"()" ) ); } connect( m_part, SIGNAL( completed() ), this, SLOT( slotCompleted() ) ); connect( this, SIGNAL( openURLRequest( const KURL &, const KParts::URLArgs & ) ), this, SLOT( slotOpenURLRequest( const KURL &, const KParts::URLArgs & ) ) ); connect( this, SIGNAL( enableAction( const char *, bool ) ), this, SLOT( slotEnableAction( const char *, bool ) ) ); connect( this, SIGNAL( setActionText( const char *, const QString& ) ), this, SLOT( slotSetActionText( const char *, const QString& ) ) );}BrowserExtension::~BrowserExtension(){ //kdDebug() << "BrowserExtension::~BrowserExtension() " << this << endl; delete d;}void BrowserExtension::setURLArgs( const URLArgs &args ){ m_args = args;}URLArgs BrowserExtension::urlArgs() const{ return m_args;}int BrowserExtension::xOffset(){ return 0;}int BrowserExtension::yOffset(){ return 0;}void BrowserExtension::saveState( QDataStream &stream ){ stream << m_part->url() << (Q_INT32)xOffset() << (Q_INT32)yOffset();}void BrowserExtension::restoreState( QDataStream &stream ){ KURL u; Q_INT32 xOfs, yOfs; stream >> u >> xOfs >> yOfs; URLArgs args( urlArgs() ); args.xOffset = xOfs; args.yOffset = yOfs; setURLArgs( args ); m_part->openURL( u );}bool BrowserExtension::isURLDropHandlingEnabled() const{ return d->m_urlDropHandlingEnabled;}void BrowserExtension::setURLDropHandlingEnabled( bool enable ){ d->m_urlDropHandlingEnabled = enable;}void BrowserExtension::slotCompleted(){ //empty the argument stuff, to avoid bogus/invalid values when opening a new url setURLArgs( URLArgs() );}void BrowserExtension::pasteRequest(){#ifndef QT_NO_CLIPBOARD QCString plain( "plain" ); QString url = QApplication::clipboard()->text(plain, QClipboard::Selection).stripWhiteSpace(); // Remove linefeeds and any whitespace surrounding it. url.remove(QRegExp("[\\ ]*\\n+[\\ ]*")); // Check if it's a URL QStringList filters = KURIFilter::self()->pluginNames(); filters.remove( "kuriikwsfilter" ); filters.remove( "localdomainurifilter" ); KURIFilterData filterData; filterData.setData( url ); filterData.setCheckForExecutables( false ); if ( KURIFilter::self()->filterURI( filterData, filters ) ) { switch ( filterData.uriType() ) { case KURIFilterData::LOCAL_FILE: case KURIFilterData::LOCAL_DIR: case KURIFilterData::NET_PROTOCOL: slotOpenURLRequest( filterData.uri(), KParts::URLArgs() ); break; case KURIFilterData::ERROR: KMessageBox::sorry( m_part->widget(), filterData.errorMsg() ); break; default: break; } } else if ( KURIFilter::self()->filterURI( filterData, "kuriikwsfilter" ) && url.length() < 250 ) { if ( KMessageBox::questionYesNo( m_part->widget(), i18n( "<qt>Do you want to search the Internet for <b>%1</b>?" ).arg( QStyleSheet::escape(url) ), i18n( "Internet Search" ), KGuiItem( i18n( "&Search" ), "find"), KStdGuiItem::cancel(), "MiddleClickSearch" ) == KMessageBox::Yes) slotOpenURLRequest( filterData.uri(), KParts::URLArgs() ); }#endif // QT_NO_CLIPBOARD}void BrowserExtension::slotOpenURLRequest( const KURL &url, const KParts::URLArgs &args ){ //kdDebug() << this << " BrowserExtension::slotOpenURLRequest(): url=" << url.url() << endl; BrowserExtensionPrivate::DelayedRequest req; req.m_delayedURL = url; req.m_delayedArgs = args; d->m_requests.append( req ); QTimer::singleShot( 0, this, SLOT( slotEmitOpenURLRequestDelayed() ) );}void BrowserExtension::slotEmitOpenURLRequestDelayed(){ if (d->m_requests.isEmpty()) return; BrowserExtensionPrivate::DelayedRequest req = d->m_requests.front(); d->m_requests.pop_front(); emit openURLRequestDelayed( req.m_delayedURL, req.m_delayedArgs ); // tricky: do not do anything here! (no access to member variables, etc.)}void BrowserExtension::setBrowserInterface( BrowserInterface *impl ){ d->m_browserInterface = impl;}BrowserInterface *BrowserExtension::browserInterface() const{ return d->m_browserInterface;}void BrowserExtension::slotEnableAction( const char * name, bool enabled ){ //kdDebug() << "BrowserExtension::slotEnableAction " << name << " " << enabled << endl; ActionNumberMap::ConstIterator it = s_actionNumberMap->find( name ); if ( it != s_actionNumberMap->end() ) { d->m_actionStatus.setBit( it.data(), enabled ); //kdDebug() << "BrowserExtension::slotEnableAction setting bit " << it.data() << " to " << enabled << endl; } else kdWarning() << "BrowserExtension::slotEnableAction unknown action " << name << endl;}bool BrowserExtension::isActionEnabled( const char * name ) const{ int actionNumber = (*s_actionNumberMap)[ name ]; return d->m_actionStatus[ actionNumber ];}void BrowserExtension::slotSetActionText( const char * name, const QString& text ){ kdDebug() << "BrowserExtension::slotSetActionText " << name << " " << text << endl; ActionNumberMap::ConstIterator it = s_actionNumberMap->find( name ); if ( it != s_actionNumberMap->end() ) { d->m_actionText[ it.data() ] = text; } else kdWarning() << "BrowserExtension::slotSetActionText unknown action " << name << endl;}QString BrowserExtension::actionText( const char * name ) const{ int actionNumber = (*s_actionNumberMap)[ name ]; QMap<int, QString>::ConstIterator it = d->m_actionText.find( actionNumber ); if ( it != d->m_actionText.end() ) return *it; return QString::null;}// for compatibilityBrowserExtension::ActionSlotMap BrowserExtension::actionSlotMap(){ return *actionSlotMapPtr();}BrowserExtension::ActionSlotMap * BrowserExtension::actionSlotMapPtr(){ if (!s_actionSlotMap) createActionSlotMap(); return s_actionSlotMap;}void BrowserExtension::createActionSlotMap(){ assert(!s_actionSlotMap); s_actionSlotMap = actionSlotMapsd.setObject( s_actionSlotMap, new ActionSlotMap ); s_actionSlotMap->insert( "cut", SLOT( cut() ) ); s_actionSlotMap->insert( "copy", SLOT( copy() ) ); s_actionSlotMap->insert( "paste", SLOT( paste() ) ); s_actionSlotMap->insert( "rename", SLOT( rename() ) ); s_actionSlotMap->insert( "trash", SLOT( trash() ) ); s_actionSlotMap->insert( "del", SLOT( del() ) ); s_actionSlotMap->insert( "properties", SLOT( properties() ) ); s_actionSlotMap->insert( "editMimeType", SLOT( editMimeType() ) ); s_actionSlotMap->insert( "print", SLOT( print() ) ); // Tricky. Those aren't actions in fact, but simply methods that a browserextension // can have or not. No need to return them here. //s_actionSlotMap->insert( "reparseConfiguration", SLOT( reparseConfiguration() ) ); //s_actionSlotMap->insert( "refreshMimeTypes", SLOT( refreshMimeTypes() ) ); // nothing for setSaveViewPropertiesLocally either // Create the action-number map assert(!s_actionNumberMap); s_actionNumberMap = actionNumberMapsd.setObject( s_actionNumberMap, new ActionNumberMap ); ActionSlotMap::ConstIterator it = s_actionSlotMap->begin(); ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->end(); for ( int i=0 ; it != itEnd ; ++it, ++i ) { //kdDebug(1202) << " action " << it.key() << " number " << i << endl; s_actionNumberMap->insert( it.key(), i ); }}BrowserExtension *BrowserExtension::childObject( QObject *obj ){ if ( !obj || !obj->children() ) return 0L; // we try to do it on our own, in hope that we are faster than // queryList, which looks kind of big :-) const QObjectList *children = obj->children(); QObjectListIt it( *children ); for (; it.current(); ++it ) if ( it.current()->inherits( "KParts::BrowserExtension" ) ) return static_cast<KParts::BrowserExtension *>( it.current() ); return 0L;}namespace KParts{class BrowserHostExtension::BrowserHostExtensionPrivate{public: BrowserHostExtensionPrivate() { } ~BrowserHostExtensionPrivate() { } KParts::ReadOnlyPart *m_part;};}BrowserHostExtension::BrowserHostExtension( KParts::ReadOnlyPart *parent, const char *name ) : QObject( parent, name ){ d = new BrowserHostExtensionPrivate; d->m_part = parent;}BrowserHostExtension::~BrowserHostExtension(){ delete d;}QStringList BrowserHostExtension::frameNames() const{ return QStringList();}const QPtrList<KParts::ReadOnlyPart> BrowserHostExtension::frames() const{ return QPtrList<KParts::ReadOnlyPart>();}bool BrowserHostExtension::openURLInFrame( const KURL &, const KParts::URLArgs & ){ return false;}BrowserHostExtension *BrowserHostExtension::childObject( QObject *obj ){ if ( !obj || !obj->children() ) return 0L; // we try to do it on our own, in hope that we are faster than // queryList, which looks kind of big :-) const QObjectList *children = obj->children(); QObjectListIt it( *children ); for (; it.current(); ++it ) if ( it.current()->inherits( "KParts::BrowserHostExtension" ) ) return static_cast<KParts::BrowserHostExtension *>( it.current() ); return 0L;}void BrowserExtension::virtual_hook( int, void* ){ /*BASE::virtual_hook( id, data );*/ }BrowserHostExtension *BrowserHostExtension::findFrameParent(KParts::ReadOnlyPart *callingPart, const QString &frame){ FindFrameParentParams param; param.parent = 0; param.callingPart = callingPart; param.frame = frame; virtual_hook(VIRTUAL_FIND_FRAME_PARENT, ¶m); return param.parent;}void BrowserHostExtension::virtual_hook( int, void* ){ /*BASE::virtual_hook( id, data );*/ }LiveConnectExtension::LiveConnectExtension( KParts::ReadOnlyPart *parent, const char *name ) : QObject( parent, name) {}bool LiveConnectExtension::get( const unsigned long, const QString &, Type &, unsigned long &, QString & ) { return false;}bool LiveConnectExtension::put( const unsigned long, const QString &, const QString & ) { return false;}bool LiveConnectExtension::call( const unsigned long, const QString &, const QStringList &, Type &, unsigned long &, QString & ) { return false;}void LiveConnectExtension::unregister( const unsigned long ) {}LiveConnectExtension *LiveConnectExtension::childObject( QObject *obj ){ if ( !obj || !obj->children() ) return 0L; // we try to do it on our own, in hope that we are faster than // queryList, which looks kind of big :-) const QObjectList *children = obj->children(); QObjectListIt it( *children ); for (; it.current(); ++it ) if ( it.current()->inherits( "KParts::LiveConnectExtension" ) ) return static_cast<KParts::LiveConnectExtension *>( it.current() ); return 0L;}#include "browserextension.moc"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -