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.
180 lines
5.4 KiB
180 lines
5.4 KiB
//
|
|
// C++ Implementation: previewwidget
|
|
//
|
|
// Description:
|
|
//
|
|
// Author: Mathias Soeken <msoeken@informatik.uni-bremen.de>, (C) 2006
|
|
// (orginal version of this preview)
|
|
//
|
|
// dani/2006:
|
|
// - signal/slot communication
|
|
// - user defined resolution of the png image
|
|
// - add '%res' to the dictionary of KileTools
|
|
// - install three possible conversion methods: dvipng, dvips/convert for documents
|
|
// with postscript source and convert for source, which needs the pdftex driver
|
|
// - preview configuration dialog
|
|
//
|
|
// Copyright: See COPYING file that comes with this distribution
|
|
//
|
|
//
|
|
|
|
#include "previewwidget.h"
|
|
|
|
#include <tqimage.h>
|
|
#include <tqpainter.h>
|
|
#include <tqpalette.h>
|
|
#include <tqwidget.h>
|
|
|
|
#include <klocale.h>
|
|
#include <kate/view.h>
|
|
#include <kate/document.h>
|
|
|
|
#include "kileconfig.h"
|
|
#include "kileedit.h"
|
|
#include "kileinfo.h"
|
|
#include "kileviewmanager.h"
|
|
#include "kilelogwidget.h"
|
|
#include "kiletool.h"
|
|
#include "kiletool_enums.h"
|
|
#include "quickpreview.h"
|
|
|
|
namespace KileWidget
|
|
{
|
|
|
|
PreviewWidget::PreviewWidget(KileInfo *info, TQWidget *parent, const char *name)
|
|
: TQWidget(parent,name), m_info(info), m_previewImage(0L), m_running(false)
|
|
{
|
|
setPalette( TQPalette(TQColor(0xff,0xff,0xff)) );
|
|
}
|
|
|
|
|
|
PreviewWidget::~PreviewWidget()
|
|
{
|
|
delete m_previewImage;
|
|
}
|
|
|
|
void PreviewWidget::paintEvent(TQPaintEvent*)
|
|
{
|
|
TQPainter p(this);
|
|
if ( m_previewImage )
|
|
p.drawImage(3,3,*m_previewImage);
|
|
}
|
|
|
|
void PreviewWidget::showActivePreview(const TQString &text,const TQString &textfilename,int startrow,int previewtype)
|
|
{
|
|
KILE_DEBUG() << "==PreviewWidget::showActivePreview()==========================" << endl;
|
|
m_info->logWidget()->clear();
|
|
if ( m_running || m_info->quickPreview()->isRunning() )
|
|
{
|
|
showError( i18n("There is already a preview running, which you have to finish to run this one.") );
|
|
return;
|
|
}
|
|
|
|
// determine the type of conversion
|
|
int conversiontype;
|
|
switch ( previewtype )
|
|
{
|
|
case KileTool::qpSelection: conversiontype = KileConfig::selPreviewTool(); break;
|
|
case KileTool::qpEnvironment: conversiontype = KileConfig::envPreviewTool(); break;
|
|
default: conversiontype = pwDvipng; break;
|
|
}
|
|
|
|
|
|
// set parameter for these tools
|
|
TQString tastdelist,tool,toolcfg,extension;
|
|
if (conversiontype == pwConvert )
|
|
{
|
|
m_conversionTool = "convert";
|
|
tastdelist = "PreviewPDFLaTeX,,,,,png";
|
|
tool = "Convert";
|
|
toolcfg = "pdf2png";
|
|
extension = "pdf";
|
|
}
|
|
else if (conversiontype == pwDvipsConvert )
|
|
{
|
|
m_conversionTool = "dvips/convert";
|
|
tastdelist = "PreviewLaTeX,DVItoPS,dvi2eps,,,png";
|
|
tool = "Convert";
|
|
toolcfg = "eps2png";
|
|
extension = "eps";
|
|
}
|
|
else
|
|
{
|
|
m_conversionTool = "dvipng";
|
|
tastdelist = "PreviewLaTeX,,,,,png";
|
|
tool = "DVItoPNG";
|
|
toolcfg = TQString();
|
|
extension = "dvi";
|
|
}
|
|
|
|
if ( ! m_info->quickPreview()->run(text, textfilename, startrow, tastdelist) )
|
|
return;
|
|
|
|
KileTool::Base *pngConverter = m_info->toolFactory()->create(tool);
|
|
if ( ! pngConverter )
|
|
{
|
|
showError( TQString(i18n("Could not run '%1' for QuickPreview.").arg(tool)) );
|
|
return;
|
|
}
|
|
pngConverter->setSource(m_info->quickPreview()->getPreviewFile(extension));
|
|
|
|
// First, we have to disconnect the old done() signal, because this is
|
|
// passed immediately to the toolmanager, whichs destroys the tool. This
|
|
// means, that all connections, which are done later, will never been called.
|
|
disconnect(pngConverter, TQT_SIGNAL(done(Base*,int)), m_info->toolManager(), TQT_SLOT(done(Base*,int)));
|
|
|
|
// Now we make some new connections, which are called in this sequence:
|
|
// 1) when the tool is finished, the preview will be shown
|
|
// 2) then the done() signal can be passed to the toolmanager,
|
|
// which destroys the tool
|
|
connect(pngConverter, TQT_SIGNAL(done (Base*,int)), this, TQT_SLOT(drawImage()));
|
|
connect(pngConverter, TQT_SIGNAL(done(Base*,int)), m_info->toolManager(), TQT_SLOT(done(Base*,int)));
|
|
|
|
// Finally we will send a signal, which will pass the focus from the log window
|
|
// to the formula preview (dvipng --> toolmanager --> kile)
|
|
//
|
|
// Remark:
|
|
// It's also possible to use only (!) the destroyed() signal. This must be sent
|
|
// to the toolmanager, which passes it over to the kile object. This object can
|
|
// call drawImage() and after it, we have to set the focus to the preview widget.
|
|
// This can only be done from the kile object, which explains this indirect way.
|
|
//
|
|
// But i (dani) prefer the chosen way above, because
|
|
// - we can distinguish between drawImage() and focusPreview(), which may be
|
|
// important some time
|
|
// - it is more complicated
|
|
connect(pngConverter, TQT_SIGNAL(destroyed()), m_info->toolManager(), TQT_SIGNAL(previewDone()));
|
|
connect(pngConverter, TQT_SIGNAL(destroyed()), this, TQT_SLOT(toolDestroyed()));
|
|
|
|
// Now we are ready to start the process...
|
|
if ( m_info->toolManager()->run(pngConverter,toolcfg) == KileTool::Running )
|
|
m_running = true;
|
|
}
|
|
|
|
void PreviewWidget::drawImage()
|
|
{
|
|
KILE_DEBUG() << "\tconversion tool '" << m_conversionTool << "' done, processing file (by dani)" << endl;
|
|
if ( ! m_previewImage )
|
|
delete m_previewImage;
|
|
|
|
m_previewImage = new TQImage (m_info->quickPreview()->getPreviewFile ("png"));
|
|
setFixedSize( m_previewImage->width()+6,m_previewImage->height()+6 );
|
|
|
|
repaint ();
|
|
}
|
|
|
|
void PreviewWidget::toolDestroyed()
|
|
{
|
|
KILE_DEBUG() << "\tQuickPreview: tool destroyed" << endl;
|
|
m_running = false;
|
|
}
|
|
|
|
void PreviewWidget::showError(const TQString &text)
|
|
{
|
|
m_info->logWidget()->printMsg( KileTool::Error, text, i18n("QuickPreview") );
|
|
}
|
|
|
|
}
|
|
|
|
#include "previewwidget.moc"
|