⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 browserextension.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
字号:
/* This file is part of the KDE project   Copyright (C) 1999 Simon Hausmann <hausmann@kde.org>             (C) 1999 David Faure <faure@kde.org>   This library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public   License as published by the Free Software Foundation; either   version 2 of the License, or (at your option) any later version.   This library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public License   along with this library; see the file COPYING.LIB.  If not, write to   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.*/#include "browserextension.h"#include <qtimer.h>#include <qobjectlist.h>#include <qmetaobject.h>#include <qstrlist.h>#include <kdebug.h>#include <kstaticdeleter.h>#include <assert.h>using namespace KParts;const char *OpenURLEvent::s_strOpenURLEvent = "KParts/BrowserExtension/OpenURLevent";class OpenURLEvent::OpenURLEventPrivate{public:  OpenURLEventPrivate()  {  }  ~OpenURLEventPrivate()  {  }};OpenURLEvent::OpenURLEvent( ReadOnlyPart *part, const KURL &url, const URLArgs &args ): Event( s_strOpenURLEvent ), m_part( part ), m_url( url ), m_args( args ){//  d = new OpenURLEventPrivate();}OpenURLEvent::~OpenURLEvent(){//  delete d;}namespace KParts{struct URLArgsPrivate{    URLArgsPrivate() {      doPost = false;      lockHistory = false;    }    QString contentType; // for POST    QMap<QString, QString> metaData;    bool doPost;    bool lockHistory;};};URLArgs::URLArgs(){  reload = false;  xOffset = 0;  yOffset = 0;  trustedSource = false;  d = 0L; // Let's build it on demand for now}URLArgs::URLArgs( bool _reload, int _xOffset, int _yOffset, const QString &_serviceType ){  reload = _reload;  xOffset = _xOffset;  yOffset = _yOffset;  serviceType = _serviceType;  d = 0L; // Let's build it on demand for now}URLArgs::URLArgs( const URLArgs &args ){  d = 0L;  (*this) = args;}URLArgs &URLArgs::operator=(const URLArgs &args){  if (this == &args) return *this;  delete d; d= 0;  reload = args.reload;  xOffset = args.xOffset;  yOffset = args.yOffset;  serviceType = args.serviceType;  postData = args.postData;  frameName = args.frameName;  docState = args.docState;  trustedSource = args.trustedSource;  if ( args.d )     d = new URLArgsPrivate( * args.d );  return *this;}URLArgs::~URLArgs(){  delete d; d = 0;}void URLArgs::setContentType( const QString & contentType ){  if (!d)    d = new URLArgsPrivate;  d->contentType = contentType;}QString URLArgs::contentType() const{  return d ? d->contentType : QString::null;}QMap<QString, QString> &URLArgs::metaData(){  if (!d)     d = new URLArgsPrivate;  return d->metaData;}void URLArgs::setDoPost( bool enable ){    if ( !d )        d = new URLArgsPrivate;    d->doPost = enable;}bool URLArgs::doPost() const{    return d ? d->doPost : false;}void URLArgs::setLockHistory( bool lock ){  if (!d)     d = new URLArgsPrivate;  d->lockHistory = lock;}bool URLArgs::lockHistory() const{    return d ? d->lockHistory : false;}namespace KParts{struct WindowArgsPrivate{};};WindowArgs::WindowArgs(){    x = y = width = height = -1;    fullscreen = false;    menuBarVisible = true;    toolBarsVisible = true;    statusBarVisible = true;    resizable = true;    lowerWindow = false;    d = 0;}WindowArgs::WindowArgs( const WindowArgs &args ){    d = 0;    (*this) = args;}WindowArgs &WindowArgs::operator=( const WindowArgs &args ){    if ( this == &args ) return *this;    delete d; d = 0;    x = args.x;    y = args.y;    width = args.width;    height = args.height;    fullscreen = args.fullscreen;    menuBarVisible = args.menuBarVisible;    toolBarsVisible = args.toolBarsVisible;    statusBarVisible = args.statusBarVisible;    resizable = args.resizable;    lowerWindow = args.lowerWindow;    /*    if ( args.d )    {      [ ... ]    }    */    return *this;}WindowArgs::WindowArgs( const QRect &_geometry, bool _fullscreen, bool _menuBarVisible,                        bool _toolBarsVisible, bool _statusBarVisible, bool _resizable ){    d = 0;    x = _geometry.x();    y = _geometry.y();    width = _geometry.width();    height = _geometry.height();    fullscreen = _fullscreen;    menuBarVisible = _menuBarVisible;    toolBarsVisible = _toolBarsVisible;    statusBarVisible = _statusBarVisible;    resizable = _resizable;    lowerWindow = false;}WindowArgs::WindowArgs( int _x, int _y, int _width, int _height, bool _fullscreen,                        bool _menuBarVisible, bool _toolBarsVisible,                        bool _statusBarVisible, bool _resizable ){    d = 0;    x = _x;    y = _y;    width = _width;    height = _height;    fullscreen = _fullscreen;    menuBarVisible = _menuBarVisible;    toolBarsVisible = _toolBarsVisible;    statusBarVisible = _statusBarVisible;    resizable = _resizable;    lowerWindow = false;}namespace KParts{// Internal class, use to store the status of the actionsclass KBitArray{public:    int val;    KBitArray() { val = 0; }    bool operator [](int index) { return (val & (1 << index)) ? true : false; }    void setBit(int index, bool value) {        if (value) val = val | (1 << index);        else val = val & ~(1 << index);    }};class BrowserExtensionPrivate{public:  BrowserExtensionPrivate()  {      m_browserInterface = 0;  }  ~BrowserExtensionPrivate()  {  }  KURL m_delayedURL;  KParts::URLArgs m_delayedArgs;  bool m_urlDropHandlingEnabled;  KBitArray m_actionStatus;  BrowserInterface *m_browserInterface;};};BrowserExtension::ActionSlotMap * BrowserExtension::s_actionSlotMap = 0L;KStaticDeleter<BrowserExtension::ActionSlotMap> actionSlotMapsd;BrowserExtension::ActionNumberMap * BrowserExtension::s_actionNumberMap = 0L;KStaticDeleter<BrowserExtension::ActionNumberMap> actionNumberMapsd;BrowserExtension::BrowserExtension( KParts::ReadOnlyPart *parent,                                    const char *name ): QObject( parent, name), m_part( parent ){  d = new BrowserExtensionPrivate;  d->m_urlDropHandlingEnabled = false;  if ( !s_actionSlotMap )      // Create the action-slot map      createActionSlotMap();  // 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 ) ) );}BrowserExtension::~BrowserExtension(){  delete d;}void BrowserExtension::setURLArgs( const URLArgs &args ){  m_args = args;}URLArgs BrowserExtension::urlArgs(){  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::slotOpenURLRequest( const KURL &url, const KParts::URLArgs &args ){    d->m_delayedURL = url;    d->m_delayedArgs = args;    QTimer::singleShot( 0, this, SLOT( slotEmitOpenURLRequestDelayed() ) );}void BrowserExtension::slotEmitOpenURLRequestDelayed(){    if (d->m_delayedURL.isEmpty()) return;    KURL u = d->m_delayedURL;    KParts::URLArgs args = d->m_delayedArgs;    d->m_delayedURL = KURL();    d->m_delayedArgs = URLArgs();    emit openURLRequestDelayed( u, args );    // 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 ];}// 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 = new ActionSlotMap;    actionSlotMapsd.setObject( s_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( "shred", SLOT( shred() ) );    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 = new ActionNumberMap;    actionNumberMapsd.setObject( s_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 QList<KParts::ReadOnlyPart> BrowserHostExtension::frames() const{  return QList<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;}#include "browserextension.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -