20 #include "browserextension.h"
22 #include <tqapplication.h>
23 #include <tqclipboard.h>
25 #include <tqobjectlist.h>
26 #include <tqmetaobject.h>
28 #include <tqstrlist.h>
29 #include <tqstylesheet.h>
33 #include <tdemessagebox.h>
34 #include <kstaticdeleter.h>
35 #include <kurifilter.h>
38 using namespace KParts;
40 const char *OpenURLEvent::s_strOpenURLEvent =
"KParts/BrowserExtension/OpenURLevent";
42 class OpenURLEvent::OpenURLEventPrivate
48 ~OpenURLEventPrivate()
54 :
Event( s_strOpenURLEvent ), m_part( part ), m_url( url ), m_args( args )
59 OpenURLEvent::~OpenURLEvent()
71 redirectedRequest =
false;
74 forcesNewWindow =
false;
77 TQMap<TQString, TQString> metaData;
79 bool redirectedRequest;
97 URLArgs::URLArgs(
bool _reload,
int _xOffset,
int _yOffset,
const TQString &_serviceType )
106 URLArgs::URLArgs(
const URLArgs &args )
114 if (
this == &args)
return *
this;
128 d =
new URLArgsPrivate( * args.d );
142 d =
new URLArgsPrivate;
149 d =
new URLArgsPrivate;
150 d->redirectedRequest = redirected;
155 return d ? d->redirectedRequest :
false;
160 return d ? d->contentType : TQString::null;
166 d =
new URLArgsPrivate;
173 d =
new URLArgsPrivate;
179 return d ? d->doPost :
false;
185 d =
new URLArgsPrivate;
186 d->lockHistory = lock;
189 bool URLArgs::lockHistory()
const
191 return d ? d->lockHistory :
false;
197 d =
new URLArgsPrivate;
201 bool URLArgs::newTab()
const
203 return d ? d->newTab :
false;
209 d =
new URLArgsPrivate;
215 return d ? d->forcesNewWindow :
false;
221 struct WindowArgsPrivate
227 WindowArgs::WindowArgs()
229 x = y = width = height = -1;
231 menuBarVisible =
true;
232 toolBarsVisible =
true;
233 statusBarVisible =
true;
234 scrollBarsVisible =
true;
240 WindowArgs::WindowArgs(
const WindowArgs &args )
246 WindowArgs::~WindowArgs()
253 if (
this == &args )
return *
this;
260 height = args.height;
261 fullscreen = args.fullscreen;
262 menuBarVisible = args.menuBarVisible;
263 toolBarsVisible = args.toolBarsVisible;
264 statusBarVisible = args.statusBarVisible;
265 scrollBarsVisible = args.scrollBarsVisible;
266 resizable = args.resizable;
267 lowerWindow = args.lowerWindow;
279 WindowArgs::WindowArgs(
const TQRect &_geometry,
bool _fullscreen,
bool _menuBarVisible,
280 bool _toolBarsVisible,
bool _statusBarVisible,
bool _resizable )
285 width = _geometry.width();
286 height = _geometry.height();
287 fullscreen = _fullscreen;
288 menuBarVisible = _menuBarVisible;
289 toolBarsVisible = _toolBarsVisible;
290 statusBarVisible = _statusBarVisible;
291 resizable = _resizable;
295 WindowArgs::WindowArgs(
int _x,
int _y,
int _width,
int _height,
bool _fullscreen,
296 bool _menuBarVisible,
bool _toolBarsVisible,
297 bool _statusBarVisible,
bool _resizable )
304 fullscreen = _fullscreen;
305 menuBarVisible = _menuBarVisible;
306 toolBarsVisible = _toolBarsVisible;
307 statusBarVisible = _statusBarVisible;
308 resizable = _resizable;
320 KBitArray() { val = 0; }
321 bool operator [](
int index) {
return (val & (1 << index)) ?
true :
false; }
322 void setBit(
int index,
bool value) {
323 if (value) val = val | (1 << index);
324 else val = val & ~(1 << index);
328 class BrowserExtensionPrivate
331 BrowserExtensionPrivate()
333 m_browserInterface = 0;
335 ~BrowserExtensionPrivate()
339 struct DelayedRequest {
343 TQValueList<DelayedRequest> m_requests;
344 bool m_urlDropHandlingEnabled;
345 KBitArray m_actionStatus;
346 TQMap<int, TQString> m_actionText;
352 BrowserExtension::ActionSlotMap * BrowserExtension::s_actionSlotMap = 0L;
354 BrowserExtension::ActionNumberMap * BrowserExtension::s_actionNumberMap = 0L;
359 : TQObject( parent, name), m_part( parent )
362 d =
new BrowserExtensionPrivate;
363 d->m_urlDropHandlingEnabled =
false;
365 if ( !s_actionSlotMap )
367 createActionSlotMap();
371 ActionSlotMap::ConstIterator it = s_actionSlotMap->begin();
372 ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->end();
373 TQStrList slotNames = metaObject()->slotNames();
374 for (
int i=0 ; it != itEnd ; ++it, ++i )
377 d->m_actionStatus.setBit( i, slotNames.contains( it.key()+
"()" ) );
380 connect( m_part, TQT_SIGNAL( completed() ),
381 this, TQT_SLOT( slotCompleted() ) );
384 connect(
this, TQT_SIGNAL(
enableAction(
const char *,
bool ) ),
385 this, TQT_SLOT( slotEnableAction(
const char *,
bool ) ) );
386 connect(
this, TQT_SIGNAL(
setActionText(
const char *,
const TQString& ) ),
387 this, TQT_SLOT( slotSetActionText(
const char *,
const TQString& ) ) );
390 BrowserExtension::~BrowserExtension()
425 stream >> u >> xOfs >> yOfs;
438 return d->m_urlDropHandlingEnabled;
443 d->m_urlDropHandlingEnabled = enable;
446 void BrowserExtension::slotCompleted()
454 TQCString plain(
"plain" );
455 TQString url = TQApplication::clipboard()->text(plain, TQClipboard::Selection).stripWhiteSpace();
457 url.remove(TQRegExp(
"[\\ ]*\\n+[\\ ]*"));
460 TQStringList filters = KURIFilter::self()->pluginNames();
461 filters.remove(
"kuriikwsfilter" );
462 filters.remove(
"localdomainurifilter" );
463 KURIFilterData filterData;
464 filterData.setData( url );
465 filterData.setCheckForExecutables(
false );
466 if ( KURIFilter::self()->filterURI( filterData, filters ) )
468 switch ( filterData.uriType() )
470 case KURIFilterData::LOCAL_FILE:
471 case KURIFilterData::LOCAL_DIR:
472 case KURIFilterData::NET_PROTOCOL:
475 case KURIFilterData::ERROR:
482 else if ( KURIFilter::self()->filterURI( filterData,
"kuriikwsfilter" ) && url.length() < 250 )
485 i18n(
"<qt>Do you want to search the Internet for <b>%1</b>?" ).arg( TQStyleSheet::escape(url) ),
486 i18n(
"Internet Search" ),
KGuiItem( i18n(
"&Search" ),
"edit-find"),
495 BrowserExtensionPrivate::DelayedRequest req;
496 req.m_delayedURL = url;
497 req.m_delayedArgs = args;
498 d->m_requests.append( req );
499 TQTimer::singleShot( 0,
this, TQT_SLOT( slotEmitOpenURLRequestDelayed() ) );
502 void BrowserExtension::slotEmitOpenURLRequestDelayed()
504 if (d->m_requests.isEmpty())
return;
505 BrowserExtensionPrivate::DelayedRequest req = d->m_requests.front();
506 d->m_requests.pop_front();
513 d->m_browserInterface = impl;
518 return d->m_browserInterface;
521 void BrowserExtension::slotEnableAction(
const char * name,
bool enabled )
524 ActionNumberMap::ConstIterator it = s_actionNumberMap->find( name );
525 if ( it != s_actionNumberMap->end() )
527 d->m_actionStatus.setBit( it.data(), enabled );
531 kdWarning() <<
"BrowserExtension::slotEnableAction unknown action " << name <<
endl;
536 int actionNumber = (*s_actionNumberMap)[ name ];
537 return d->m_actionStatus[ actionNumber ];
540 void BrowserExtension::slotSetActionText(
const char * name,
const TQString& text )
542 kdDebug() <<
"BrowserExtension::slotSetActionText " << name <<
" " << text <<
endl;
543 ActionNumberMap::ConstIterator it = s_actionNumberMap->find( name );
544 if ( it != s_actionNumberMap->end() )
546 d->m_actionText[ it.data() ] = text;
549 kdWarning() <<
"BrowserExtension::slotSetActionText unknown action " << name <<
endl;
554 int actionNumber = (*s_actionNumberMap)[ name ];
555 TQMap<int, TQString>::ConstIterator it = d->m_actionText.find( actionNumber );
556 if ( it != d->m_actionText.end() )
558 return TQString::null;
569 if (!s_actionSlotMap)
570 createActionSlotMap();
571 return s_actionSlotMap;
574 void BrowserExtension::createActionSlotMap()
576 assert(!s_actionSlotMap);
577 s_actionSlotMap = actionSlotMapsd.setObject( s_actionSlotMap,
new ActionSlotMap );
579 s_actionSlotMap->insert(
"cut", TQT_SLOT( cut() ) );
580 s_actionSlotMap->insert(
"copy", TQT_SLOT( copy() ) );
581 s_actionSlotMap->insert(
"paste", TQT_SLOT( paste() ) );
582 s_actionSlotMap->insert(
"rename", TQT_SLOT( rename() ) );
583 s_actionSlotMap->insert(
"trash", TQT_SLOT( trash() ) );
584 s_actionSlotMap->insert(
"del", TQT_SLOT( del() ) );
585 s_actionSlotMap->insert(
"properties", TQT_SLOT( properties() ) );
586 s_actionSlotMap->insert(
"editMimeType", TQT_SLOT( editMimeType() ) );
587 s_actionSlotMap->insert(
"print", TQT_SLOT( print() ) );
595 assert(!s_actionNumberMap);
596 s_actionNumberMap = actionNumberMapsd.setObject( s_actionNumberMap,
new ActionNumberMap );
597 ActionSlotMap::ConstIterator it = s_actionSlotMap->begin();
598 ActionSlotMap::ConstIterator itEnd = s_actionSlotMap->end();
599 for (
int i=0 ; it != itEnd ; ++it, ++i )
602 s_actionNumberMap->insert( it.key(), i );
608 if ( !obj || obj->childrenListObject().isEmpty() )
613 const TQObjectList children = obj->childrenListObject();
614 TQObjectListIt it( children );
615 for (; it.current(); ++it )
616 if ( it.current()->inherits(
"KParts::BrowserExtension" ) )
617 return static_cast<KParts::BrowserExtension *>( it.current() );
625 class BrowserHostExtension::BrowserHostExtensionPrivate
628 BrowserHostExtensionPrivate()
631 ~BrowserHostExtensionPrivate()
641 : TQObject( parent, name )
643 d =
new BrowserHostExtensionPrivate;
647 BrowserHostExtension::~BrowserHostExtension()
654 return TQStringList();
659 return TQPtrList<KParts::ReadOnlyPart>();
669 if ( !obj || obj->childrenListObject().isEmpty() )
674 const TQObjectList children = obj->childrenListObject();
675 TQObjectListIt it( children );
676 for (; it.current(); ++it )
677 if ( it.current()->inherits(
"KParts::BrowserHostExtension" ) )
678 return static_cast<KParts::BrowserHostExtension *>( it.current() );
683 void BrowserExtension::virtual_hook(
int,
void* )
689 FindFrameParentParams param;
691 param.callingPart = callingPart;
693 virtual_hook(VIRTUAL_FIND_FRAME_PARENT, ¶m);
697 void BrowserHostExtension::virtual_hook(
int,
void* )
700 LiveConnectExtension::LiveConnectExtension(
KParts::ReadOnlyPart *parent,
const char *name ) : TQObject( parent, name) {}
718 if ( !obj || obj->childrenListObject().isEmpty() )
723 const TQObjectList children = obj->childrenListObject();
724 TQObjectListIt it( children );
725 for (; it.current(); ++it )
726 if ( it.current()->inherits(
"KParts::LiveConnectExtension" ) )
727 return static_cast<KParts::LiveConnectExtension *>( it.current() );
732 #include "browserextension.moc"