22 #include <QtGui/QApplication>
23 #include <QtGui/QClipboard>
24 #include <QtCore/QTimer>
25 #include <QtCore/QObject>
26 #include <QtCore/QMap>
27 #include <QtCore/QMetaEnum>
28 #include <QtCore/QRegExp>
29 #include <QtGui/QTextDocument>
37 using namespace KParts;
40 class OpenUrlEvent::OpenUrlEventPrivate
50 , m_browserArgs(browserArgs)
53 ~OpenUrlEventPrivate()
56 static const char *s_strOpenUrlEvent;
63 const char *OpenUrlEvent::OpenUrlEventPrivate::s_strOpenUrlEvent =
64 "KParts/BrowserExtension/OpenURLevent";
69 :
Event( OpenUrlEventPrivate::s_strOpenUrlEvent )
70 , d( new OpenUrlEventPrivate(part, url, args, browserArgs) )
96 return d->m_browserArgs;
101 return Event::test( event, OpenUrlEventPrivate::s_strOpenUrlEvent );
107 struct BrowserArgumentsPrivate
109 BrowserArgumentsPrivate() {
111 redirectedRequest =
false;
114 forcesNewWindow =
false;
118 bool redirectedRequest;
121 bool forcesNewWindow;
141 if (
this == &args)
return *
this;
152 d =
new BrowserArgumentsPrivate( * args.d );
166 d =
new BrowserArgumentsPrivate;
173 d =
new BrowserArgumentsPrivate;
174 d->redirectedRequest = redirected;
179 return d ? d->redirectedRequest :
false;
184 return d ? d->contentType :
QString();
190 d =
new BrowserArgumentsPrivate;
196 return d ? d->doPost :
false;
202 d =
new BrowserArgumentsPrivate;
203 d->lockHistory = lock;
208 return d ? d->lockHistory :
false;
214 d =
new BrowserArgumentsPrivate;
220 return d ? d->newTab :
false;
226 d =
new BrowserArgumentsPrivate;
232 return d ? d->forcesNewWindow :
false;
242 : x(-1), y(-1), width(-1), height(-1),
244 menuBarVisible(true),
245 toolBarsVisible(true),
246 statusBarVisible(true),
249 scrollBarsVisible(true)
261 bool toolBarsVisible;
262 bool statusBarVisible;
266 bool scrollBarsVisible;
272 : d(new WindowArgsPrivate)
287 if (
this == &args )
return *
this;
294 bool _toolBarsVisible,
bool _statusBarVisible,
bool _resizable )
295 : d(new WindowArgsPrivate)
297 d->x = _geometry.x();
298 d->y = _geometry.y();
299 d->width = _geometry.width();
300 d->height = _geometry.height();
301 d->fullscreen = _fullscreen;
302 d->menuBarVisible = _menuBarVisible;
303 d->toolBarsVisible = _toolBarsVisible;
304 d->statusBarVisible = _statusBarVisible;
305 d->resizable = _resizable;
306 d->lowerWindow =
false;
310 bool _menuBarVisible,
bool _toolBarsVisible,
311 bool _statusBarVisible,
bool _resizable )
312 : d(new WindowArgsPrivate)
318 d->fullscreen = _fullscreen;
319 d->menuBarVisible = _menuBarVisible;
320 d->toolBarsVisible = _toolBarsVisible;
321 d->statusBarVisible = _statusBarVisible;
322 d->resizable = _resizable;
323 d->lowerWindow =
false;
373 return d->fullscreen;
378 d->menuBarVisible = visible;
383 return d->menuBarVisible;
388 d->toolBarsVisible = visible;
393 return d->toolBarsVisible;
398 d->statusBarVisible = visible;
403 return d->statusBarVisible;
408 d->resizable = resizable;
418 d->lowerWindow = lower;
423 return d->lowerWindow;
428 d->scrollBarsVisible = visible;
433 return d->scrollBarsVisible;
444 KBitArray() { val = 0; }
445 bool operator [](
int index) {
return (val & (1 << index)) ?
true :
false; }
446 void setBit(
int index,
bool value) {
447 if (value) val = val | (1 << index);
448 else val = val & ~(1 << index);
452 class BrowserExtension::BrowserExtensionPrivate
456 : m_urlDropHandlingEnabled(false),
457 m_browserInterface(0),
461 struct DelayedRequest {
467 QList<DelayedRequest> m_requests;
468 bool m_urlDropHandlingEnabled;
469 KBitArray m_actionStatus;
473 static void createActionSlotMap();
485 s_actionSlotMap->insert(
"cut", SLOT(
cut()) );
486 s_actionSlotMap->insert(
"copy", SLOT(
copy()) );
487 s_actionSlotMap->insert(
"paste", SLOT(
paste()) );
488 s_actionSlotMap->insert(
"print", SLOT(
print()) );
495 ActionSlotMap::ConstIterator it = s_actionSlotMap->constBegin();
496 ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->constEnd();
497 for (
int i=0 ; it != itEnd ; ++it, ++i )
500 s_actionNumberMap->insert( it.key(), i );
507 :
QObject( parent ), d( new BrowserExtensionPrivate(parent) )
511 if (s_actionSlotMap->isEmpty())
513 BrowserExtensionPrivate::createActionSlotMap();
516 QList<QByteArray> slotNames;
517 int methodCount = metaObject()->methodCount();
518 int methodOffset = metaObject()->methodOffset();
519 for (
int i=0 ; i < methodCount; ++i )
521 QMetaMethod method = metaObject()->method( methodOffset + i );
522 if ( method.methodType() == QMetaMethod::Slot )
523 slotNames.append( method.signature() );
528 ActionSlotMap::ConstIterator it = s_actionSlotMap->constBegin();
529 ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->constEnd();
530 for (
int i=0 ; it != itEnd ; ++it, ++i )
534 d->m_actionStatus.setBit( i, slotNames.contains( it.key()+
"()" ) );
537 connect( d->m_part, SIGNAL(completed()),
538 this, SLOT(slotCompleted()) );
542 this, SLOT(slotEnableAction(
const char*,
bool)) );
544 this, SLOT(slotSetActionText(
const char*,
QString)) );
555 d->m_browserArgs = args;
560 return d->m_browserArgs;
583 stream >> u >> xOfs >> yOfs;
589 d->m_part->setArguments(args);
590 d->m_part->openUrl(u);
595 return d->m_urlDropHandlingEnabled;
600 d->m_urlDropHandlingEnabled = enable;
603 void BrowserExtension::slotCompleted()
612 QString url = QApplication::clipboard()->text(plain, QClipboard::Selection).trimmed();
614 url.remove(QRegExp(
"[\\ ]*\\n+[\\ ]*"));
618 filters.removeAll(
"kuriikwsfilter" );
619 filters.removeAll(
"localdomainurifilter" );
625 switch ( filterData.
uriType() )
630 slotOpenUrlRequest( filterData.
uri() );
640 QStringList( QLatin1String(
"kuriikwsfilter" ) ) ) &&
644 i18n(
"<qt>Do you want to search the Internet for <b>%1</b>?</qt>" , Qt::escape(url) ),
647 slotOpenUrlRequest( filterData.
uri() );
654 BrowserExtensionPrivate::DelayedRequest req;
655 req.m_delayedURL = url;
656 req.m_delayedArgs = args;
657 req.m_delayedBrowserArgs = browserArgs;
658 d->m_requests.append( req );
659 QTimer::singleShot( 0,
this, SLOT(slotEmitOpenUrlRequestDelayed()) );
662 void BrowserExtension::slotEmitOpenUrlRequestDelayed()
664 if (d->m_requests.isEmpty())
return;
665 BrowserExtensionPrivate::DelayedRequest req = d->m_requests.front();
666 d->m_requests.pop_front();
673 d->m_browserInterface = impl;
678 return d->m_browserInterface;
681 void BrowserExtension::slotEnableAction(
const char * name,
bool enabled )
684 ActionNumberMap::ConstIterator it = s_actionNumberMap->constFind( name );
685 if ( it != s_actionNumberMap->constEnd() )
687 d->m_actionStatus.setBit( it.value(), enabled );
691 kWarning() <<
"BrowserExtension::slotEnableAction unknown action " << name;
696 int actionNumber = (*s_actionNumberMap)[ name ];
697 return d->m_actionStatus[ actionNumber ];
700 void BrowserExtension::slotSetActionText(
const char * name,
const QString& text )
703 ActionNumberMap::ConstIterator it = s_actionNumberMap->constFind( name );
704 if ( it != s_actionNumberMap->constEnd() )
706 d->m_actionText[ it.value() ] = text;
709 kWarning() <<
"BrowserExtension::slotSetActionText unknown action " << name;
714 int actionNumber = (*s_actionNumberMap)[ name ];
716 if ( it != d->m_actionText.constEnd() )
729 if (s_actionSlotMap->isEmpty())
730 BrowserExtensionPrivate::createActionSlotMap();
731 return s_actionSlotMap;
736 return KGlobal::findDirectChild<KParts::BrowserExtension *>(obj);
742 class BrowserHostExtension::BrowserHostExtensionPrivate
745 BrowserHostExtensionPrivate()
748 ~BrowserHostExtensionPrivate()
758 :
QObject( parent ), d( new BrowserHostExtensionPrivate )
775 return QList<KParts::ReadOnlyPart*>();
787 return KGlobal::findDirectChild<KParts::BrowserHostExtension *>(obj);
793 Q_UNUSED(callingPart);
819 return KGlobal::findDirectChild<KParts::LiveConnectExtension *>(obj);
822 #include "browserextension.moc"