diff options
Diffstat (limited to 'khtml/khtml_ext.cpp')
-rw-r--r-- | khtml/khtml_ext.cpp | 1032 |
1 files changed, 0 insertions, 1032 deletions
diff --git a/khtml/khtml_ext.cpp b/khtml/khtml_ext.cpp deleted file mode 100644 index 2e4660f2d..000000000 --- a/khtml/khtml_ext.cpp +++ /dev/null @@ -1,1032 +0,0 @@ -// -*- c-basic-offset: 2 -*- -/* This file is part of the KDE project - * - * Copyright (C) 2000-2003 Simon Hausmann <[email protected]> - * 2001-2003 George Staikos <[email protected]> - * 2001-2003 Laurent Montel <[email protected]> - * 2001-2003 Dirk Mueller <[email protected]> - * 2001-2003 Waldo Bastian <[email protected]> - * 2001-2003 David Faure <[email protected]> - * 2001-2003 Daniel Naber <[email protected]> - * - * 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., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include <assert.h> -#include "khtml_ext.h" -#include "khtmlview.h" -#include "khtml_pagecache.h" -#include "rendering/render_form.h" -#include "rendering/render_image.h" -#include "html/html_imageimpl.h" -#include "misc/loader.h" -#include "dom/html_form.h" -#include "dom/html_image.h" -#include <tqclipboard.h> -#include <tqfileinfo.h> -#include <tqpopupmenu.h> -#include <tqurl.h> -#include <tqmetaobject.h> -#include <tqucomextra_p.h> -#include <tqdragobject.h> - -#include <kdebug.h> -#include <klocale.h> -#include <kfiledialog.h> -#include <kio/job.h> -#include <kprocess.h> -#include <ktoolbarbutton.h> -#include <ktoolbar.h> -#include <ksavefile.h> -#include <kurldrag.h> -#include <kstringhandler.h> -#include <kapplication.h> -#include <kmessagebox.h> -#include <kstandarddirs.h> -#include <krun.h> -#include <kurifilter.h> -#include <kiconloader.h> -#include <kdesktopfile.h> -#include <kmultipledrag.h> -#include <kinputdialog.h> - -#include "khtml_factory.h" - -#include "dom/dom_element.h" -#include "misc/htmltags.h" - -#include "khtmlpart_p.h" - -KHTMLPartBrowserExtension::KHTMLPartBrowserExtension( KHTMLPart *parent, const char *name ) -: KParts::BrowserExtension( parent, name ) -{ - m_part = parent; - setURLDropHandlingEnabled( true ); - - enableAction( "cut", false ); - enableAction( "copy", false ); - enableAction( "paste", false ); - - m_connectedToClipboard = false; -} - -int KHTMLPartBrowserExtension::xOffset() -{ - return m_part->view()->contentsX(); -} - -int KHTMLPartBrowserExtension::yOffset() -{ - return m_part->view()->contentsY(); -} - -void KHTMLPartBrowserExtension::saveState( TQDataStream &stream ) -{ - //kdDebug( 6050 ) << "saveState!" << endl; - m_part->saveState( stream ); -} - -void KHTMLPartBrowserExtension::restoreState( TQDataStream &stream ) -{ - //kdDebug( 6050 ) << "restoreState!" << endl; - m_part->restoreState( stream ); -} - -void KHTMLPartBrowserExtension::editableWidgetFocused( TQWidget *widget ) -{ - m_editableFormWidget = widget; - updateEditActions(); - - if ( !m_connectedToClipboard && m_editableFormWidget ) - { - connect( TQApplication::clipboard(), TQT_SIGNAL( dataChanged() ), - this, TQT_SLOT( updateEditActions() ) ); - - if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) || m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) ) - connect( m_editableFormWidget, TQT_SIGNAL( selectionChanged() ), - this, TQT_SLOT( updateEditActions() ) ); - - m_connectedToClipboard = true; - } - editableWidgetFocused(); -} - -void KHTMLPartBrowserExtension::editableWidgetBlurred( TQWidget * /*widget*/ ) -{ - TQWidget *oldWidget = m_editableFormWidget; - - m_editableFormWidget = 0; - enableAction( "cut", false ); - enableAction( "paste", false ); - m_part->emitSelectionChanged(); - - if ( m_connectedToClipboard ) - { - disconnect( TQApplication::clipboard(), TQT_SIGNAL( dataChanged() ), - this, TQT_SLOT( updateEditActions() ) ); - - if ( oldWidget ) - { - if ( oldWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) || oldWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) ) - disconnect( oldWidget, TQT_SIGNAL( selectionChanged() ), - this, TQT_SLOT( updateEditActions() ) ); - } - - m_connectedToClipboard = false; - } - editableWidgetBlurred(); -} - -void KHTMLPartBrowserExtension::setExtensionProxy( KParts::BrowserExtension *proxy ) -{ - if ( m_extensionProxy ) - { - disconnect( m_extensionProxy, TQT_SIGNAL( enableAction( const char *, bool ) ), - this, TQT_SLOT( extensionProxyActionEnabled( const char *, bool ) ) ); - if ( m_extensionProxy->inherits( "KHTMLPartBrowserExtension" ) ) - { - disconnect( m_extensionProxy, TQT_SIGNAL( editableWidgetFocused() ), - this, TQT_SLOT( extensionProxyEditableWidgetFocused() ) ); - disconnect( m_extensionProxy, TQT_SIGNAL( editableWidgetBlurred() ), - this, TQT_SLOT( extensionProxyEditableWidgetBlurred() ) ); - } - } - - m_extensionProxy = proxy; - - if ( m_extensionProxy ) - { - connect( m_extensionProxy, TQT_SIGNAL( enableAction( const char *, bool ) ), - this, TQT_SLOT( extensionProxyActionEnabled( const char *, bool ) ) ); - if ( m_extensionProxy->inherits( "KHTMLPartBrowserExtension" ) ) - { - connect( m_extensionProxy, TQT_SIGNAL( editableWidgetFocused() ), - this, TQT_SLOT( extensionProxyEditableWidgetFocused() ) ); - connect( m_extensionProxy, TQT_SIGNAL( editableWidgetBlurred() ), - this, TQT_SLOT( extensionProxyEditableWidgetBlurred() ) ); - } - - enableAction( "cut", m_extensionProxy->isActionEnabled( "cut" ) ); - enableAction( "copy", m_extensionProxy->isActionEnabled( "copy" ) ); - enableAction( "paste", m_extensionProxy->isActionEnabled( "paste" ) ); - } - else - { - updateEditActions(); - enableAction( "copy", false ); // ### re-check this - } -} - -void KHTMLPartBrowserExtension::cut() -{ - if ( m_extensionProxy ) - { - callExtensionProxyMethod( "cut()" ); - return; - } - - if ( !m_editableFormWidget ) - return; - - if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->cut(); - else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->cut(); -} - -void KHTMLPartBrowserExtension::copy() -{ - if ( m_extensionProxy ) - { - callExtensionProxyMethod( "copy()" ); - return; - } - - kdDebug( 6050 ) << "************! KHTMLPartBrowserExtension::copy()" << endl; - if ( !m_editableFormWidget ) - { - // get selected text and paste to the clipboard - TQString text= m_part->selectedText(); - text.replace( TQChar( 0xa0 ), ' ' ); - - - TQClipboard *cb = TQApplication::clipboard(); - disconnect( cb, TQT_SIGNAL( selectionChanged() ), m_part, TQT_SLOT( slotClearSelection() ) ); -#ifndef QT_NO_MIMECLIPBOARD - TQString htmltext; - /* - * When selectionModeEnabled, that means the user has just selected - * the text, not ctrl+c to copy it. The selection clipboard - * doesn't seem to support mime type, so to save time, don't calculate - * the selected text as html. - * optomisation disabled for now until everything else works. - */ - //if(!cb->selectionModeEnabled()) - htmltext = m_part->selectedTextAsHTML(); - TQTextDrag *textdrag = new TQTextDrag(text, 0L); - KMultipleDrag *drag = new KMultipleDrag( m_editableFormWidget ); - drag->addDragObject( textdrag ); - if(!htmltext.isEmpty()) { - htmltext.replace( TQChar( 0xa0 ), ' ' ); - TQTextDrag *htmltextdrag = new TQTextDrag(htmltext, 0L); - htmltextdrag->setSubtype("html"); - drag->addDragObject( htmltextdrag ); - } - cb->setData(drag); -#else - cb->setText(text); -#endif - - connect( cb, TQT_SIGNAL( selectionChanged() ), m_part, TQT_SLOT( slotClearSelection() ) ); - } - else - { - if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->copy(); - else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->copy(); - } -} - -void KHTMLPartBrowserExtension::searchProvider() -{ - // action name is of form "previewProvider[<searchproviderprefix>:]" - const TQString searchProviderPrefix = TQString( TQT_TQOBJECT_CONST(sender())->name() ).mid( 14 ); - - KURIFilterData data; - TQStringList list; - data.setData( searchProviderPrefix + m_part->selectedText() ); - list << "kurisearchfilter" << "kuriikwsfilter"; - - if( !KURIFilter::self()->filterURI(data, list) ) - { - KDesktopFile file("searchproviders/google.desktop", true, "services"); - TQString encodedSearchTerm = m_part->selectedText(); - TQUrl::encode(encodedSearchTerm); - data.setData(file.readEntry("Query").replace("\\{@}", encodedSearchTerm)); - } - - KParts::URLArgs args; - args.frameName = "_blank"; - - emit m_part->browserExtension()->openURLRequest( data.uri(), args ); -} - -void KHTMLPartBrowserExtension::openSelection() -{ - KParts::URLArgs args; - args.frameName = "_blank"; - - emit m_part->browserExtension()->openURLRequest( m_part->selectedText(), args ); -} - -void KHTMLPartBrowserExtension::paste() -{ - if ( m_extensionProxy ) - { - callExtensionProxyMethod( "paste()" ); - return; - } - - if ( !m_editableFormWidget ) - return; - - if ( m_editableFormWidget->inherits( TQLINEEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->paste(); - else if ( m_editableFormWidget->inherits( TQTEXTEDIT_OBJECT_NAME_STRING ) ) - static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->paste(); -} - -void KHTMLPartBrowserExtension::callExtensionProxyMethod( const char *method ) -{ - if ( !m_extensionProxy ) - return; - - int slot = m_extensionProxy->metaObject()->findSlot( method ); - if ( slot == -1 ) - return; - - TQUObject o[ 1 ]; - m_extensionProxy->tqt_invoke( slot, o ); -} - -void KHTMLPartBrowserExtension::updateEditActions() -{ - if ( !m_editableFormWidget ) - { - enableAction( "cut", false ); - enableAction( "copy", false ); - enableAction( "paste", false ); - return; - } - - // ### duplicated from KonqMainWindow::slotClipboardDataChanged -#ifndef QT_NO_MIMECLIPBOARD // Handle minimalized versions of Qt Embedded - TQMimeSource *data = TQApplication::clipboard()->data(); - enableAction( "paste", data->provides( "text/plain" ) ); -#else - TQString data=TQApplication::clipboard()->text(); - enableAction( "paste", data.contains("://")); -#endif - bool hasSelection = false; - - if( m_editableFormWidget) { - if ( ::tqqt_cast<TQLineEdit*>(m_editableFormWidget)) - hasSelection = static_cast<TQLineEdit *>( &(*m_editableFormWidget) )->hasSelectedText(); - else if(::tqqt_cast<TQTextEdit*>(m_editableFormWidget)) - hasSelection = static_cast<TQTextEdit *>( &(*m_editableFormWidget) )->hasSelectedText(); - } - - enableAction( "copy", hasSelection ); - enableAction( "cut", hasSelection ); -} - -void KHTMLPartBrowserExtension::extensionProxyEditableWidgetFocused() { - editableWidgetFocused(); -} - -void KHTMLPartBrowserExtension::extensionProxyEditableWidgetBlurred() { - editableWidgetBlurred(); -} - -void KHTMLPartBrowserExtension::extensionProxyActionEnabled( const char *action, bool enable ) -{ - // only forward enableAction calls for actions we actually do forward - if ( strcmp( action, "cut" ) == 0 || - strcmp( action, "copy" ) == 0 || - strcmp( action, "paste" ) == 0 ) { - enableAction( action, enable ); - } -} - -void KHTMLPartBrowserExtension::reparseConfiguration() -{ - m_part->reparseConfiguration(); -} - -void KHTMLPartBrowserExtension::print() -{ - m_part->view()->print(); -} - -void KHTMLPartBrowserExtension::disableScrolling() -{ - TQScrollView *scrollView = m_part->view(); - if (scrollView) { - scrollView->setVScrollBarMode(TQScrollView::AlwaysOff); - scrollView->setHScrollBarMode(TQScrollView::AlwaysOff); - } -} - -class KHTMLPopupGUIClient::KHTMLPopupGUIClientPrivate -{ -public: - KHTMLPart *m_khtml; - KURL m_url; - KURL m_imageURL; - TQPixmap m_pixmap; - TQString m_suggestedFilename; -}; - - -KHTMLPopupGUIClient::KHTMLPopupGUIClient( KHTMLPart *khtml, const TQString &doc, const KURL &url ) - : TQObject( khtml ) -{ - d = new KHTMLPopupGUIClientPrivate; - d->m_khtml = khtml; - d->m_url = url; - bool isImage = false; - bool hasSelection = khtml->hasSelection(); - setInstance( khtml->instance() ); - - DOM::Element e; - e = khtml->nodeUnderMouse(); - - if ( !e.isNull() && (e.elementId() == ID_IMG || - (e.elementId() == ID_INPUT && !static_cast<DOM::HTMLInputElement>(e).src().isEmpty()))) - { - if (e.elementId() == ID_IMG) { - DOM::HTMLImageElementImpl *ie = static_cast<DOM::HTMLImageElementImpl*>(e.handle()); - khtml::RenderImage *ri = dynamic_cast<khtml::RenderImage*>(ie->renderer()); - if (ri && ri->contentObject()) { - d->m_suggestedFilename = static_cast<khtml::CachedImage*>(ri->contentObject())->suggestedFilename(); - } - } - isImage=true; - } - - if (hasSelection) - { - KAction* copyAction = KStdAction::copy( d->m_khtml->browserExtension(), TQT_SLOT( copy() ), actionCollection(), "copy" ); - copyAction->setText(i18n("&Copy Text")); - copyAction->setEnabled(d->m_khtml->browserExtension()->isActionEnabled( "copy" )); - actionCollection()->insert( khtml->actionCollection()->action( "selectAll" ) ); - - - // Fill search provider entries - TDEConfig config("kuriikwsfilterrc"); - config.setGroup("General"); - const TQString defaultEngine = config.readEntry("DefaultSearchEngine", "google"); - const char keywordDelimiter = config.readNumEntry("KeywordDelimiter", ':'); - - // search text - TQString selectedText = khtml->selectedText(); - selectedText.replace("&", "&&"); - if ( selectedText.length()>18 ) { - selectedText.truncate(15); - selectedText+="..."; - } - - // default search provider - KService::Ptr service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(defaultEngine)); - - // search provider icon - TQPixmap icon; - KURIFilterData data; - TQStringList list; - data.setData( TQString("some keyword") ); - list << "kurisearchfilter" << "kuriikwsfilter"; - - TQString name; - if ( KURIFilter::self()->filterURI(data, list) ) - { - TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png"); - if ( iconPath.isEmpty() ) - icon = SmallIcon("find"); - else - icon = TQPixmap( iconPath ); - name = service->name(); - } - else - { - icon = SmallIcon("google"); - name = "Google"; - } - - // using .arg(foo, bar) instead of .arg(foo).arg(bar), as foo can contain %x - new KAction( i18n( "Search for '%1' with %2" ).arg( selectedText, name ), icon, 0, d->m_khtml->browserExtension(), - TQT_SLOT( searchProvider() ), actionCollection(), "searchProvider" ); - - // favorite search providers - TQStringList favoriteEngines; - favoriteEngines << "google" << "google_groups" << "google_news" << "webster" << "dmoz" << "wikipedia"; - favoriteEngines = config.readListEntry("FavoriteSearchEngines", favoriteEngines); - - if ( !favoriteEngines.isEmpty()) { - KActionMenu* providerList = new KActionMenu( i18n( "Search for '%1' with" ).arg( selectedText ), actionCollection(), "searchProviderList" ); - - TQStringList::ConstIterator it = favoriteEngines.begin(); - for ( ; it != favoriteEngines.end(); ++it ) { - if (*it==defaultEngine) - continue; - service = KService::serviceByDesktopPath(TQString("searchproviders/%1.desktop").arg(*it)); - if (!service) - continue; - const TQString searchProviderPrefix = *(service->property("Keys").toStringList().begin()) + keywordDelimiter; - data.setData( searchProviderPrefix + "some keyword" ); - - if ( KURIFilter::self()->filterURI(data, list) ) - { - TQString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png"); - if ( iconPath.isEmpty() ) - icon = SmallIcon("find"); - else - icon = TQPixmap( iconPath ); - name = service->name(); - - providerList->insert( new KAction( name, icon, 0, d->m_khtml->browserExtension(), - TQT_SLOT( searchProvider() ), actionCollection(), TQString( "searchProvider" + searchProviderPrefix ).latin1() ) ); - } - } - } - - - if ( selectedText.contains("://") && KURL(selectedText).isValid() ) - new KAction( i18n( "Open '%1'" ).arg( selectedText ), "window_new", 0, - d->m_khtml->browserExtension(), TQT_SLOT( openSelection() ), actionCollection(), "openSelection" ); - } - else if ( url.isEmpty() && !isImage ) - { - actionCollection()->insert( khtml->actionCollection()->action( "security" ) ); - actionCollection()->insert( khtml->actionCollection()->action( "setEncoding" ) ); - new KAction( i18n( "Stop Animations" ), 0, this, TQT_SLOT( slotStopAnimations() ), - actionCollection(), "stopanimations" ); - } - - if ( !url.isEmpty() ) - { - if (url.protocol() == "mailto") - { - new KAction( i18n( "Copy Email Address" ), 0, this, TQT_SLOT( slotCopyLinkLocation() ), - actionCollection(), "copylinklocation" ); - } - else - { - new KAction( i18n( "&Save Link As..." ), 0, this, TQT_SLOT( slotSaveLinkAs() ), - actionCollection(), "savelinkas" ); - new KAction( i18n( "Copy &Link Address" ), 0, this, TQT_SLOT( slotCopyLinkLocation() ), - actionCollection(), "copylinklocation" ); - } - } - - // frameset? -> add "Reload Frame" etc. - if (!hasSelection) - { - if ( khtml->parentPart() ) - { - new KAction( i18n( "Open in New &Window" ), "window_new", 0, this, TQT_SLOT( slotFrameInWindow() ), - actionCollection(), "frameinwindow" ); - new KAction( i18n( "Open in &This Window" ), 0, this, TQT_SLOT( slotFrameInTop() ), - actionCollection(), "frameintop" ); - new KAction( i18n( "Open in &New Tab" ), "tab_new", 0, this, TQT_SLOT( slotFrameInTab() ), - actionCollection(), "frameintab" ); - new KAction( i18n( "Reload Frame" ), 0, this, TQT_SLOT( slotReloadFrame() ), - actionCollection(), "reloadframe" ); - - if ( KHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled() ) { - if ( khtml->d->m_frame->m_type == khtml::ChildFrame::IFrame ) - new KAction( i18n( "Block IFrame..." ), 0, this, TQT_SLOT( slotBlockIFrame() ), actionCollection(), "blockiframe" ); - } - - new KAction( i18n( "View Frame Source" ), 0, d->m_khtml, TQT_SLOT( slotViewDocumentSource() ), - actionCollection(), "viewFrameSource" ); - new KAction( i18n( "View Frame Information" ), 0, d->m_khtml, TQT_SLOT( slotViewPageInfo() ), actionCollection(), "viewFrameInfo" ); - // This one isn't in khtml_popupmenu.rc anymore, because Print isn't either, - // and because print frame is already in the toolbar and the menu. - // But leave this here, so that it's easy to read it. - new KAction( i18n( "Print Frame..." ), "frameprint", 0, d->m_khtml->browserExtension(), TQT_SLOT( print() ), actionCollection(), "printFrame" ); - new KAction( i18n( "Save &Frame As..." ), 0, d->m_khtml, TQT_SLOT( slotSaveFrame() ), actionCollection(), "saveFrame" ); - - actionCollection()->insert( khtml->parentPart()->actionCollection()->action( "viewDocumentSource" ) ); - actionCollection()->insert( khtml->parentPart()->actionCollection()->action( "viewPageInfo" ) ); - } else { - actionCollection()->insert( khtml->actionCollection()->action( "viewDocumentSource" ) ); - actionCollection()->insert( khtml->actionCollection()->action( "viewPageInfo" ) ); - } - } else if (isImage || !url.isEmpty()) { - actionCollection()->insert( khtml->actionCollection()->action( "viewDocumentSource" ) ); - actionCollection()->insert( khtml->actionCollection()->action( "viewPageInfo" ) ); - new KAction( i18n( "Stop Animations" ), 0, this, TQT_SLOT( slotStopAnimations() ), - actionCollection(), "stopanimations" ); - } - - if (isImage) - { - if ( e.elementId() == ID_IMG ) { - d->m_imageURL = KURL( static_cast<DOM::HTMLImageElement>( e ).src().string() ); - DOM::HTMLImageElementImpl *imageimpl = static_cast<DOM::HTMLImageElementImpl *>( e.handle() ); - Q_ASSERT(imageimpl); - if(imageimpl) // should be true always. right? - { - if(imageimpl->complete()) { - d->m_pixmap = imageimpl->currentPixmap(); - } - } - } - else - d->m_imageURL = KURL( static_cast<DOM::HTMLInputElement>( e ).src().string() ); - new KAction( i18n( "Save Image As..." ), 0, this, TQT_SLOT( slotSaveImageAs() ), - actionCollection(), "saveimageas" ); - new KAction( i18n( "Send Image..." ), 0, this, TQT_SLOT( slotSendImage() ), - actionCollection(), "sendimage" ); - - -#ifndef QT_NO_MIMECLIPBOARD - (new KAction( i18n( "Copy Image" ), 0, this, TQT_SLOT( slotCopyImage() ), - actionCollection(), "copyimage" ))->setEnabled(!d->m_pixmap.isNull()); -#endif - - if(d->m_pixmap.isNull()) { //fallback to image location if still loading the image. this will always be true if ifdef QT_NO_MIMECLIPBOARD - new KAction( i18n( "Copy Image Location" ), 0, this, TQT_SLOT( slotCopyImageLocation() ), - actionCollection(), "copyimagelocation" ); - } - - TQString name = KStringHandler::csqueeze(d->m_imageURL.fileName()+d->m_imageURL.query(), 25); - new KAction( i18n( "View Image (%1)" ).arg(d->m_suggestedFilename.isEmpty() ? name.replace("&", "&&") : d->m_suggestedFilename.replace("&", "&&")), 0, this, TQT_SLOT( slotViewImage() ), - actionCollection(), "viewimage" ); - - if (KHTMLFactory::defaultHTMLSettings()->isAdFilterEnabled()) - { - new KAction( i18n( "Block Image..." ), 0, this, TQT_SLOT( slotBlockImage() ), - actionCollection(), "blockimage" ); - - if (!d->m_imageURL.host().isEmpty() && - !d->m_imageURL.protocol().isEmpty()) - { - new KAction( i18n( "Block Images From %1" ).arg(d->m_imageURL.host()), 0, this, TQT_SLOT( slotBlockHost() ), - actionCollection(), "blockhost" ); - } - } - } - - setXML( doc ); - setDOMDocument( TQDomDocument(), true ); // ### HACK - - TQDomElement menu = domDocument().documentElement().namedItem( "Menu" ).toElement(); - - if ( actionCollection()->count() > 0 ) - menu.insertBefore( domDocument().createElement( "separator" ), menu.firstChild() ); -} - -KHTMLPopupGUIClient::~KHTMLPopupGUIClient() -{ - delete d; -} - -void KHTMLPopupGUIClient::slotSaveLinkAs() -{ - TDEIO::MetaData metaData; - metaData["referrer"] = d->m_khtml->referrer(); - saveURL( d->m_khtml->widget(), i18n( "Save Link As" ), d->m_url, metaData ); -} - -void KHTMLPopupGUIClient::slotSendImage() -{ - TQStringList urls; - urls.append( d->m_imageURL.url()); - TQString subject = d->m_imageURL.url(); - kapp->invokeMailer(TQString::null, TQString::null, TQString::null, subject, - TQString::null, //body - TQString::null, - urls); // attachments - - -} - -void KHTMLPopupGUIClient::slotSaveImageAs() -{ - TDEIO::MetaData metaData; - metaData["referrer"] = d->m_khtml->referrer(); - saveURL( d->m_khtml->widget(), i18n( "Save Image As" ), d->m_imageURL, metaData, TQString::null, 0, d->m_suggestedFilename ); -} - -void KHTMLPopupGUIClient::slotBlockHost() -{ - TQString name=d->m_imageURL.protocol()+"://"+d->m_imageURL.host()+"/*"; - KHTMLFactory::defaultHTMLSettings()->addAdFilter( name ); - d->m_khtml->reparseConfiguration(); -} - -void KHTMLPopupGUIClient::slotBlockImage() -{ - bool ok = false; - - TQString url = KInputDialog::getText( i18n("Add URL to Filter"), - i18n("Enter the URL:"), - d->m_imageURL.url(), - &ok); - if ( ok ) { - KHTMLFactory::defaultHTMLSettings()->addAdFilter( url ); - d->m_khtml->reparseConfiguration(); - } -} - -void KHTMLPopupGUIClient::slotBlockIFrame() -{ - bool ok = false; - TQString url = KInputDialog::getText( i18n( "Add URL to Filter"), - i18n("Enter the URL:"), - d->m_khtml->url().url(), - &ok ); - if ( ok ) { - KHTMLFactory::defaultHTMLSettings()->addAdFilter( url ); - d->m_khtml->reparseConfiguration(); - } -} - -void KHTMLPopupGUIClient::slotCopyLinkLocation() -{ - KURL safeURL(d->m_url); - safeURL.setPass(TQString::null); -#ifndef QT_NO_MIMECLIPBOARD - // Set it in both the mouse selection and in the clipboard - KURL::List lst; - lst.append( safeURL ); - TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard ); - TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection ); -#else - TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries -#endif -} - -void KHTMLPopupGUIClient::slotStopAnimations() -{ - d->m_khtml->stopAnimations(); -} - -void KHTMLPopupGUIClient::slotCopyImage() -{ -#ifndef QT_NO_MIMECLIPBOARD - KURL safeURL(d->m_imageURL); - safeURL.setPass(TQString::null); - - KURL::List lst; - lst.append( safeURL ); - KMultipleDrag *drag = new KMultipleDrag(d->m_khtml->view(), "Image"); - - drag->addDragObject( new TQImageDrag(d->m_pixmap.convertToImage()) ); - drag->addDragObject( new KURLDrag(lst, d->m_khtml->view(), "Image URL") ); - - // Set it in both the mouse selection and in the clipboard - TQApplication::clipboard()->setData( drag, TQClipboard::Clipboard ); - TQApplication::clipboard()->setData( new KURLDrag(lst), TQClipboard::Selection ); -#else - kdDebug() << "slotCopyImage called when the clipboard does not support this. This should not be possible." << endl; -#endif -} - -void KHTMLPopupGUIClient::slotCopyImageLocation() -{ - KURL safeURL(d->m_imageURL); - safeURL.setPass(TQString::null); -#ifndef QT_NO_MIMECLIPBOARD - // Set it in both the mouse selection and in the clipboard - KURL::List lst; - lst.append( safeURL ); - TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Clipboard ); - TQApplication::clipboard()->setData( new KURLDrag( lst ), TQClipboard::Selection ); -#else - TQApplication::clipboard()->setText( safeURL.url() ); //FIXME(E): Handle multiple entries -#endif -} - -void KHTMLPopupGUIClient::slotViewImage() -{ - d->m_khtml->browserExtension()->createNewWindow(d->m_imageURL); -} - -void KHTMLPopupGUIClient::slotReloadFrame() -{ - KParts::URLArgs args( d->m_khtml->browserExtension()->urlArgs() ); - args.reload = true; - args.metaData()["referrer"] = d->m_khtml->pageReferrer(); - // reload document - d->m_khtml->closeURL(); - d->m_khtml->browserExtension()->setURLArgs( args ); - d->m_khtml->openURL( d->m_khtml->url() ); -} - -void KHTMLPopupGUIClient::slotFrameInWindow() -{ - KParts::URLArgs args( d->m_khtml->browserExtension()->urlArgs() ); - args.metaData()["referrer"] = d->m_khtml->pageReferrer(); - args.metaData()["forcenewwindow"] = "true"; - emit d->m_khtml->browserExtension()->createNewWindow( d->m_khtml->url(), args ); -} - -void KHTMLPopupGUIClient::slotFrameInTop() -{ - KParts::URLArgs args( d->m_khtml->browserExtension()->urlArgs() ); - args.metaData()["referrer"] = d->m_khtml->pageReferrer(); - args.frameName = "_top"; - emit d->m_khtml->browserExtension()->openURLRequest( d->m_khtml->url(), args ); -} - -void KHTMLPopupGUIClient::slotFrameInTab() -{ - KParts::URLArgs args( d->m_khtml->browserExtension()->urlArgs() ); - args.metaData()["referrer"] = d->m_khtml->pageReferrer(); - args.setNewTab(true); - emit d->m_khtml->browserExtension()->createNewWindow( d->m_khtml->url(), args ); -} - -void KHTMLPopupGUIClient::saveURL( TQWidget *parent, const TQString &caption, - const KURL &url, - const TQMap<TQString, TQString> &metadata, - const TQString &filter, long cacheId, - const TQString & suggestedFilename ) -{ - TQString name = TQString::fromLatin1( "index.html" ); - if ( !suggestedFilename.isEmpty() ) - name = suggestedFilename; - else if ( !url.fileName().isEmpty() ) - name = url.fileName(); - - KURL destURL; - int query; - do { - query = KMessageBox::Yes; - destURL = KFileDialog::getSaveURL( name, filter, parent, caption ); - if( destURL.isLocalFile() ) - { - TQFileInfo info( destURL.path() ); - if( info.exists() ) { - // TODO: use TDEIO::RenameDlg (shows more information) - query = KMessageBox::warningContinueCancel( parent, i18n( "A file named \"%1\" already exists. " "Are you sure you want to overwrite it?" ).arg( info.fileName() ), i18n( "Overwrite File?" ), i18n( "Overwrite" ) ); - } - } - } while ( query == KMessageBox::Cancel ); - - if ( destURL.isValid() ) - saveURL(url, destURL, metadata, cacheId); -} - -void KHTMLPopupGUIClient::saveURL( const KURL &url, const KURL &destURL, - const TQMap<TQString, TQString> &metadata, - long cacheId ) -{ - if ( destURL.isValid() ) - { - bool saved = false; - if (KHTMLPageCache::self()->isComplete(cacheId)) - { - if (destURL.isLocalFile()) - { - KSaveFile destFile(destURL.path()); - if (destFile.status() == 0) - { - KHTMLPageCache::self()->saveData(cacheId, destFile.dataStream()); - saved = true; - } - } - else - { - // save to temp file, then move to final destination. - KTempFile destFile; - if (destFile.status() == 0) - { - KHTMLPageCache::self()->saveData(cacheId, destFile.dataStream()); - destFile.close(); - KURL url2 = KURL(); - url2.setPath(destFile.name()); - TDEIO::file_move(url2, destURL, -1, true /*overwrite*/); - saved = true; - } - } - } - if(!saved) - { - // DownloadManager <-> konqueror integration - // find if the integration is enabled - // the empty key means no integration - // only use download manager for non-local urls! - bool downloadViaKIO = true; - if ( !url.isLocalFile() ) - { - TDEConfig cfg("konquerorrc", false, false); - cfg.setGroup("HTML Settings"); - TQString downloadManger = cfg.readPathEntry("DownloadManager"); - if (!downloadManger.isEmpty()) - { - // then find the download manager location - kdDebug(1000) << "Using: "<<downloadManger <<" as Download Manager" <<endl; - TQString cmd = KStandardDirs::findExe(downloadManger); - if (cmd.isEmpty()) - { - TQString errMsg=i18n("The Download Manager (%1) could not be found in your $PATH ").arg(downloadManger); - TQString errMsgEx= i18n("Try to reinstall it \n\nThe integration with Konqueror will be disabled!"); - KMessageBox::detailedSorry(0,errMsg,errMsgEx); - cfg.writePathEntry("DownloadManager",TQString::null); - cfg.sync (); - } - else - { - downloadViaKIO = false; - KURL cleanDest = destURL; - cleanDest.setPass( TQString::null ); // don't put password into commandline - cmd += " " + TDEProcess::quote(url.url()) + " " + - TDEProcess::quote(cleanDest.url()); - kdDebug(1000) << "Calling command "<<cmd<<endl; - KRun::runCommand(cmd); - } - } - } - - if ( downloadViaKIO ) - { - TDEIO::Job *job = TDEIO::file_copy( url, destURL, -1, true /*overwrite*/ ); - job->setMetaData(metadata); - job->addMetaData("MaxCacheSize", "0"); // Don't store in http cache. - job->addMetaData("cache", "cache"); // Use entry from cache if available. - job->setAutoErrorHandlingEnabled( true ); - } - } //end if(!saved) - } -} - -KHTMLPartBrowserHostExtension::KHTMLPartBrowserHostExtension( KHTMLPart *part ) -: KParts::BrowserHostExtension( part ) -{ - m_part = part; -} - -KHTMLPartBrowserHostExtension::~KHTMLPartBrowserHostExtension() -{ -} - -TQStringList KHTMLPartBrowserHostExtension::frameNames() const -{ - return m_part->frameNames(); -} - -const TQPtrList<KParts::ReadOnlyPart> KHTMLPartBrowserHostExtension::frames() const -{ - return m_part->frames(); -} - -bool KHTMLPartBrowserHostExtension::openURLInFrame( const KURL &url, const KParts::URLArgs &urlArgs ) -{ - return m_part->openURLInFrame( url, urlArgs ); -} - -void KHTMLPartBrowserHostExtension::virtual_hook( int id, void *data ) -{ - if (id == VIRTUAL_FIND_FRAME_PARENT) - { - FindFrameParentParams *param = static_cast<FindFrameParentParams*>(data); - KHTMLPart *parentPart = m_part->findFrameParent(param->callingPart, param->frame); - if (parentPart) - param->parent = parentPart->browserHostExtension(); - return; - } - BrowserHostExtension::virtual_hook( id, data ); -} - - -// defined in khtml_part.cpp -extern const int KDE_NO_EXPORT fastZoomSizes[]; -extern const int KDE_NO_EXPORT fastZoomSizeCount; - -// BCI: remove in KDE 4 -KHTMLZoomFactorAction::KHTMLZoomFactorAction( KHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const TQObject *receiver, const char *slot, TQObject *parent, const char *name ) - : KAction( text, icon, 0, receiver, slot, parent, name ) -{ - init(part, direction); -} - -KHTMLZoomFactorAction::KHTMLZoomFactorAction( KHTMLPart *part, bool direction, const TQString &text, const TQString &icon, const KShortcut &cut, const TQObject *receiver, const char *slot, TQObject *parent, const char *name ) - : KAction( text, icon, cut, receiver, slot, parent, name ) -{ - init(part, direction); -} - -void KHTMLZoomFactorAction::init(KHTMLPart *part, bool direction) -{ - m_direction = direction; - m_part = part; - - m_popup = new TQPopupMenu; - // xgettext: no-c-format - m_popup->insertItem( i18n( "Default Font Size (100%)" ) ); - - int m = m_direction ? 1 : -1; - int ofs = fastZoomSizeCount / 2; // take index of 100% - - // this only works if there is an odd number of elements in fastZoomSizes[] - for ( int i = m; i != m*(ofs+1); i += m ) - { - int num = i * m; - TQString numStr = TQString::number( num ); - if ( num > 0 ) numStr.prepend( '+' ); - - // xgettext: no-c-format - m_popup->insertItem( i18n( "%1%" ).arg( fastZoomSizes[ofs + i] ) ); - } - - connect( m_popup, TQT_SIGNAL( activated( int ) ), this, TQT_SLOT( slotActivated( int ) ) ); -} - -KHTMLZoomFactorAction::~KHTMLZoomFactorAction() -{ - delete m_popup; -} - -int KHTMLZoomFactorAction::plug( TQWidget *w, int index ) -{ - int containerId = KAction::plug( w, index ); - if ( containerId == -1 || !w->inherits( "KToolBar" ) ) - return containerId; - - KToolBarButton *button = static_cast<KToolBar *>( w )->getButton( itemId( containerId ) ); - if ( !button ) - return containerId; - - button->setDelayedPopup( m_popup ); - return containerId; -} - -void KHTMLZoomFactorAction::slotActivated( int id ) -{ - int idx = m_popup->indexOf( id ); - - if (idx == 0) - m_part->setZoomFactor(100); - else - m_part->setZoomFactor(fastZoomSizes[fastZoomSizeCount/2 + (m_direction ? 1 : -1)*idx]); -} - -#include "khtml_ext.moc" - |