You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
8.1 KiB
306 lines
8.1 KiB
/***************************************************************************
|
|
* Copyright (C) 2004 by Teemu Rytilahti *
|
|
* teemu.rytilahti@kde-fi.org *
|
|
* *
|
|
* Licensed under GPL. *
|
|
***************************************************************************/
|
|
|
|
#include <tdeaction.h>
|
|
#include <tdeapplication.h>
|
|
#include <tdehtmlview.h>
|
|
#include <kiconloader.h>
|
|
#include <tdelocale.h>
|
|
#include <tdepopupmenu.h>
|
|
|
|
#include <tqclipboard.h>
|
|
#include <tqfile.h>
|
|
#include <tqpaintdevicemetrics.h>
|
|
|
|
#include "viewer.h"
|
|
#include "klamav_run.h"
|
|
//#include "akregatorconfig.h"
|
|
|
|
using namespace KlamAV;
|
|
|
|
Viewer::Viewer(TQWidget *parent, const char *name)
|
|
: TDEHTMLPart(parent, name), m_url(0)
|
|
{
|
|
setZoomFactor(100);
|
|
setJScriptEnabled(true);
|
|
setJavaEnabled(true);
|
|
setMetaRefreshEnabled(true);
|
|
setPluginsEnabled(true);
|
|
setDNDEnabled(true);
|
|
setAutoloadImages(true);
|
|
setStatusMessagesEnabled(true);
|
|
|
|
// change the cursor when loading stuff...
|
|
connect( this, SIGNAL(started(TDEIO::Job *)),
|
|
this, SLOT(slotStarted(TDEIO::Job *)));
|
|
connect( this, SIGNAL(completed()),
|
|
this, SLOT(slotCompleted()));
|
|
|
|
connect( browserExtension(), SIGNAL(openURLRequestDelayed(const KURL&, const KParts::URLArgs&)), this, SLOT(slotOpenURLRequest(const KURL&, const KParts::URLArgs& )) );
|
|
|
|
connect( browserExtension(),
|
|
|
|
SIGNAL(popupMenu (KXMLGUIClient*, const TQPoint&, const KURL&, const
|
|
KParts::URLArgs&, KParts::BrowserExtension::PopupFlags, mode_t)), this, SLOT(slotPopupMenu(KXMLGUIClient*, const TQPoint&, const KURL&, const
|
|
KParts::URLArgs&, KParts::BrowserExtension::PopupFlags, mode_t)));
|
|
|
|
KStdAction::print(this, SLOT(slotPrint()), actionCollection(), "viewer_print");
|
|
KStdAction::copy(this, SLOT(slotCopy()), actionCollection(), "viewer_copy");
|
|
|
|
new TDEAction( i18n("&Increase Font Sizes"), "viewmag+", "Ctrl+Plus", this, SLOT(slotZoomIn()), actionCollection(), "incFontSizes" );
|
|
new TDEAction( i18n("&Decrease Font Sizes"), "viewmag-", "Ctrl+Minus", this, SLOT(slotZoomOut()), actionCollection(), "decFontSizes" );
|
|
|
|
connect(this, SIGNAL(selectionChanged()), this, SLOT(slotSelectionChanged()));
|
|
|
|
new TDEAction(i18n("Copy &Link Address"), "", 0,
|
|
this, SLOT(slotCopyLinkAddress()),
|
|
actionCollection(), "copylinkaddress");
|
|
}
|
|
|
|
bool Viewer::openURL(const KURL &url)
|
|
{
|
|
new KlamAV::BrowserRun(this, (TQWidget*)parent(), this, url, KParts::URLArgs());
|
|
emit started(0);
|
|
return true;
|
|
}
|
|
|
|
/* borrowed from Konqueror */
|
|
TQString Viewer::loadFile( const TQString& file ) {
|
|
TQString res;
|
|
if( file.isEmpty() )
|
|
return res;
|
|
|
|
TQFile f(file);
|
|
|
|
if( !f.open(IO_ReadOnly) )
|
|
return res;
|
|
|
|
TQTextStream t(&f);
|
|
res = t.read();
|
|
|
|
return res;
|
|
}
|
|
|
|
bool Viewer::closeURL()
|
|
{
|
|
emit browserExtension()->loadingProgress(-1);
|
|
emit canceled(TQString::null);
|
|
return TDEHTMLPart::closeURL();
|
|
}
|
|
|
|
int Viewer::pointsToPixel(int pointSize) const
|
|
{
|
|
const TQPaintDeviceMetrics metrics(view());
|
|
return ( pointSize * metrics.logicalDpiY() + 36 ) / 72 ;
|
|
}
|
|
|
|
void Viewer::displayInExternalBrowser(const KURL &url, const TQString &mimetype)
|
|
{
|
|
if (!url.isValid()) return;
|
|
/* if (Settings::externalBrowserUseKdeDefault())
|
|
{*/
|
|
if (mimetype.isEmpty())
|
|
kapp->invokeBrowser(url.url(), "0");
|
|
else
|
|
KRun::runURL(url, mimetype, false, false);
|
|
/* }
|
|
else
|
|
{
|
|
TQString cmd = Settings::externalBrowserCustomCommand();
|
|
TQString urlStr = url.url();
|
|
cmd.replace(TQRegExp("%u"), urlStr);
|
|
TDEProcess *proc = new TDEProcess;
|
|
TQStringList cmdAndArgs = KShell::splitArgs(cmd);
|
|
*proc << cmdAndArgs;
|
|
proc->start(TDEProcess::DontCare);
|
|
delete proc;
|
|
}*/
|
|
}
|
|
|
|
|
|
void Viewer::slotOpenURLRequest(const KURL& url, const KParts::URLArgs& args)
|
|
{
|
|
m_url = url;
|
|
if (args.frameName == "_blank") // apparently this indicates that the MMB was pressed...
|
|
{
|
|
/* switch (Settings::mMBBehaviour())
|
|
{
|
|
case Settings::EnumMMBBehaviour::OpenInExternalBrowser:
|
|
slotOpenLinkInBrowser();
|
|
break;
|
|
case Settings::EnumMMBBehaviour::OpenInBackground:
|
|
slotOpenLinkInBackgroundTab();
|
|
break;
|
|
default:*/
|
|
slotOpenLinkInForegroundTab();
|
|
/* break;
|
|
}*/
|
|
}
|
|
else // LMB:
|
|
{
|
|
/* switch (Settings::lMBBehaviour())
|
|
{
|
|
case Settings::EnumLMBBehaviour::OpenInExternalBrowser:
|
|
slotOpenLinkInBrowser();
|
|
break;
|
|
case Settings::EnumLMBBehaviour::OpenInBackground:
|
|
slotOpenLinkInBackgroundTab();
|
|
break;
|
|
default:*/
|
|
slotOpenLinkInForegroundTab();
|
|
/* break;
|
|
}*/
|
|
}
|
|
}
|
|
|
|
void Viewer::slotPopupMenu(KXMLGUIClient*, const TQPoint& p, const KURL& kurl, const KParts::URLArgs&, KParts::BrowserExtension::PopupFlags, mode_t)
|
|
{
|
|
TQString url = kurl.url();
|
|
if(this->url() == url) return;
|
|
m_url = url;
|
|
TDEPopupMenu popup;
|
|
|
|
if (!url.isEmpty())
|
|
{
|
|
popup.insertItem(SmallIcon("tab_new"), i18n("Open Link in New &Tab"), this, SLOT(slotOpenLinkInForegroundTab()));
|
|
popup.insertItem(SmallIcon("window-new"), i18n("Open Link in External &Browser"), this, SLOT(slotOpenLinkInBrowser()));
|
|
action("copylinkaddress")->plug(&popup);
|
|
}
|
|
else
|
|
{
|
|
action("viewer_copy")->plug(&popup);
|
|
popup.insertSeparator();
|
|
action("viewer_print")->plug(&popup);
|
|
TDEAction *ac = action("setEncoding");
|
|
if (ac)
|
|
ac->plug(&popup);
|
|
}
|
|
popup.exec(p);
|
|
}
|
|
|
|
// taken from KDevelop
|
|
void Viewer::slotCopy()
|
|
{
|
|
TQString text = selectedText();
|
|
text.replace( TQChar( 0xa0 ), ' ' );
|
|
TQClipboard *cb = TQApplication::clipboard();
|
|
disconnect( cb, SIGNAL( selectionChanged() ), this, SLOT( slotClearSelection() ) );
|
|
cb->setText(text);
|
|
connect( cb, SIGNAL( selectionChanged() ), this, SLOT( slotClearSelection() ) );
|
|
}
|
|
|
|
void Viewer::slotCopyLinkAddress()
|
|
{
|
|
if(m_url.isEmpty()) return;
|
|
TQClipboard *cb = TQApplication::clipboard();
|
|
cb->setText(m_url.prettyURL(), TQClipboard::Clipboard);
|
|
cb->setText(m_url.prettyURL(), TQClipboard::Selection);
|
|
}
|
|
|
|
void Viewer::slotSelectionChanged()
|
|
{
|
|
action("viewer_copy")->setEnabled(!selectedText().isEmpty());
|
|
}
|
|
|
|
void Viewer::slotOpenLinkInternal()
|
|
{
|
|
openURL(m_url);
|
|
}
|
|
|
|
void Viewer::slotOpenLinkInForegroundTab()
|
|
{
|
|
emit urlClicked(m_url, false);
|
|
}
|
|
|
|
void Viewer::slotOpenLinkInBackgroundTab()
|
|
{
|
|
emit urlClicked(m_url, true);
|
|
}
|
|
|
|
void Viewer::slotOpenLinkInBrowser()
|
|
{
|
|
kdDebug() << "display external" << endl;
|
|
displayInExternalBrowser(m_url, TQString::null);
|
|
}
|
|
|
|
void Viewer::slotStarted(TDEIO::Job *)
|
|
{
|
|
widget()->setCursor( waitCursor );
|
|
}
|
|
|
|
void Viewer::slotCompleted()
|
|
{
|
|
widget()->unsetCursor();
|
|
}
|
|
|
|
void Viewer::slotScrollUp()
|
|
{
|
|
view()->scrollBy(0,-10);
|
|
}
|
|
|
|
void Viewer::slotScrollDown()
|
|
{
|
|
view()->scrollBy(0,10);
|
|
}
|
|
|
|
void Viewer::slotZoomIn()
|
|
{
|
|
int zf = zoomFactor();
|
|
if (zf < 100)
|
|
{
|
|
zf = zf - (zf % 20) + 20;
|
|
setZoomFactor(zf);
|
|
}
|
|
else
|
|
{
|
|
zf = zf - (zf % 50) + 50;
|
|
setZoomFactor(zf < 300 ? zf : 300);
|
|
}
|
|
}
|
|
|
|
void Viewer::slotZoomOut()
|
|
{
|
|
int zf = zoomFactor();
|
|
if (zf <= 100)
|
|
{
|
|
zf = zf - (zf % 20) - 20;
|
|
setZoomFactor(zf > 20 ? zf : 20);
|
|
}
|
|
else
|
|
{
|
|
zf = zf - (zf % 50) - 50;
|
|
setZoomFactor(zf);
|
|
}
|
|
}
|
|
|
|
void Viewer::slotSetZoomFactor(int percent)
|
|
{
|
|
setZoomFactor(percent);
|
|
}
|
|
|
|
// some code taken from KDevelop (lib/widgets/kdevhtmlpart.cpp)
|
|
void Viewer::slotPrint( )
|
|
{
|
|
view()->print();
|
|
}
|
|
|
|
|
|
void Viewer::setSafeMode()
|
|
{
|
|
setJScriptEnabled(false);
|
|
setJavaEnabled(false);
|
|
setMetaRefreshEnabled(false);
|
|
setPluginsEnabled(false);
|
|
setDNDEnabled(true);
|
|
setAutoloadImages(true);
|
|
setStatusMessagesEnabled(false);
|
|
}
|
|
|
|
|
|
// vim: set et ts=4 sts=4 sw=4:
|
|
#include "viewer.moc"
|