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.
tdewebdev/quanta/parts/preview/whtmlpart.cpp

190 lines
5.9 KiB

/***************************************************************************
whtmlpart.cpp - description
-------------------
begin : Fri Aug 18 2000
copyright : (C) 2000 by Dmitry Poplavsky & Alexander Yakovlev & Eric Laffoon <pdima@users.sourceforge.net,yshurik@linuxfan.com,sequitur@easystreet.com>
(C) 2002, 2004, 2005 Andras Mantia <amantia@kde.org>
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
//qt includes
#include <tqfileinfo.h>
#include <tqtextcodec.h>
//kde includes
#include <kconfig.h>
#include <kdebug.h>
#include <kdeversion.h>
#include <khtml_settings.h>
#include <khtmlview.h>
#include <klocale.h>
#include <kpopupmenu.h>
#include <ktempfile.h>
//app includes
#include "whtmlpart.h"
#include "resource.h"
WHTMLPart::WHTMLPart(TQWidget *parentWidget, const char *widgetName, bool enableViewSource,
TQObject *parent, const char *name, GUIProfile prof)
: KHTMLPart(parentWidget, widgetName, parent, name, prof), m_contextMenu(0)
{
//kdDebug(24000) << "WHTMLPart: " << parentWidget << " " << widgetName << " " << parent << " " << name << this << endl;
hpos = 0;
// get settings from konq.
KConfig konqConfig("konquerorrc");
konqConfig.setGroup("HTML Settings");
const KHTMLSettings * set = settings();
const_cast<KHTMLSettings*>(set)->init( &konqConfig, false );
view()->installEventFilter(this);
m_enableViewSource = enableViewSource;
if (m_enableViewSource)
{
m_contextMenu = new KPopupMenu(parentWidget);
m_contextMenu->insertItem(i18n("View &Document Source"), this, TQT_SLOT(slotViewSource()));
connect(this, TQT_SIGNAL(popupMenu(const TQString&, const TQPoint&)), TQT_SLOT(popupMenu(const TQString&, const TQPoint&)));
}
connect(browserExtension(), TQT_SIGNAL(openURLRequest (const KURL &, const KParts::URLArgs &)), this, TQT_SLOT(openURL(const KURL&)));
// setCharset( konqConfig.readEntry("DefaultEncoding") );
// setEncoding( konqConfig.readEntry("DefaultEncoding") );
// setStandardFont( konqConfig.readEntry("StandardFont") );
// setFixedFont( konqConfig.readEntry("FixedFont") );
// updateFontSize( konqConfig.readNumEntry("FontSize"));
}
WHTMLPart::~WHTMLPart()
{
}
void WHTMLPart::setPreviewedURL(const KURL &url)
{
m_previewedURL = url;
}
bool WHTMLPart::openURL(const KURL& url)
{
if (url == m_previewedURL)
{
KURL previewURL = url;
previewURL.setFileName("preview-" + url.fileName());
return KHTMLPart::openURL(previewURL);
} else
return KHTMLPart::openURL(url);
}
void WHTMLPart::urlSelected ( const TQString &url, int button, int state, const TQString &target, KParts::URLArgs args)
{
KHTMLPart::urlSelected (url, button, state, target, args);
KURL cURL = completeURL( url );
// alternative not tested but used in kdevelop !
// KURL cURL=KURL(baseURL(),url);
if (target.isEmpty() || (target == "_self") || (target == "_top") || (target == "_blank") || (target == "_parent") )
openURL( cURL ) ;
addToHistory( cURL.url() );
}
void WHTMLPart::forward()
{
if ( forwardEnable() ) {
hpos++;
openURL( KURL( history.at(hpos) ) );
emit updateStatus( backEnable() , forwardEnable() );
}
}
void WHTMLPart::back()
{
if (backEnable())
{
hpos--;
openURL(KURL(history.at(hpos)));
emit updateStatus(backEnable(), forwardEnable());
}
}
void WHTMLPart::addToHistory(const TQString &url)
{
if ( history.count() > 0 )
while ( hpos < history.count()-1 )
history.removeLast();
if ( !history.isEmpty() ) hpos++;
history.append(url.ascii());
hpos = history.count()-1;
emit updateStatus( backEnable() , forwardEnable() );
}
bool WHTMLPart::backEnable()
{
return hpos > 0;
}
bool WHTMLPart::forwardEnable()
{
return hpos < history.count()-1;
}
KParts::ReadOnlyPart *WHTMLPart::createPart( TQWidget * parentWidget, const char *widgetName,
TQObject *parent, const char *name,
const TQString &, TQString &,
TQStringList &, const TQStringList &)
{
//kdDebug(24000) << "Create WHTMLPart: " << parentWidget << " " << widgetName << " " << parent << " " << name << endl;
return new WHTMLPart(parentWidget, widgetName, m_enableViewSource, parent, name);
}
bool WHTMLPart::eventFilter(TQObject *watched, TQEvent *e)
{
if (watched == view() && e->type() == TQEvent::FocusOut && (!m_contextMenu || !m_contextMenu->hasFocus()))
emit previewHasFocus(false);
else
if (watched == view() && e->type() == TQEvent::FocusIn)
emit previewHasFocus(true);
return false;
}
void WHTMLPart::popupMenu(const TQString &/*url*/, const TQPoint &point)
{
m_contextMenu->popup(point);
}
void WHTMLPart::slotViewSource()
{
KTempFile *tmpFile = new KTempFile(tmpDir + "-preview-", ".html");
TQString tempFileName = TQFileInfo(*(tmpFile->file())).filePath();
tmpFile->setAutoDelete(true);
tmpFile->textStream()->setCodec(TQTextCodec::codecForName("utf8"));
*(tmpFile->textStream()) << documentSource();
tmpFile->close();
tempFileList.append(tmpFile);
emit showPreview(false);
emit openFile(KURL::fromPathOrURL(tmpFile->name()), "utf8", true);
}
#include "whtmlpart.moc"