2000-05-15 04:53:53 +00:00
|
|
|
#include <qobject.h>
|
|
|
|
#include <qlabel.h>
|
|
|
|
#include <qscrollview.h>
|
2000-05-16 14:13:41 +00:00
|
|
|
#include <qimage.h>
|
|
|
|
#include <qpixmap.h>
|
2000-05-15 04:53:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
#include <kinstance.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kdebug.h>
|
2000-05-16 14:13:41 +00:00
|
|
|
#include <kimageeffect.h>
|
2000-05-17 10:09:01 +00:00
|
|
|
#include <kglobal.h>
|
|
|
|
#include <kconfig.h>
|
2000-05-15 04:53:53 +00:00
|
|
|
|
|
|
|
|
2000-05-18 10:51:08 +00:00
|
|
|
#include "print.h"
|
2000-05-17 10:09:01 +00:00
|
|
|
#include "optiondialog.h"
|
2000-05-15 04:53:53 +00:00
|
|
|
#include "kdvi_multipage.moc"
|
|
|
|
|
|
|
|
|
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
void *init_libkdvi()
|
|
|
|
{
|
|
|
|
return new KDVIMultiPageFactory;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
KInstance *KDVIMultiPageFactory::s_instance = 0L;
|
|
|
|
|
|
|
|
|
|
|
|
KDVIMultiPageFactory::KDVIMultiPageFactory()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KDVIMultiPageFactory::~KDVIMultiPageFactory()
|
|
|
|
{
|
|
|
|
if (s_instance)
|
|
|
|
delete s_instance;
|
|
|
|
|
|
|
|
s_instance = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QObject *KDVIMultiPageFactory::create(QObject *parent, const char *name , const char*, const QStringList & )
|
|
|
|
{
|
|
|
|
QObject *obj = new KDVIMultiPage((QWidget *)parent, name);
|
|
|
|
emit objectCreated(obj);
|
|
|
|
return obj;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KInstance *KDVIMultiPageFactory::instance()
|
|
|
|
{
|
|
|
|
if (!s_instance)
|
|
|
|
s_instance = new KInstance("kdvi");
|
|
|
|
return s_instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KDVIMultiPage::KDVIMultiPage(QWidget *parent, const char *name)
|
2000-05-17 10:09:01 +00:00
|
|
|
: KMultiPage(parent, name), window(0), options(0)
|
2000-05-15 04:53:53 +00:00
|
|
|
{
|
|
|
|
setInstance(KDVIMultiPageFactory::instance());
|
|
|
|
|
2000-05-16 11:18:25 +00:00
|
|
|
window = new dviWindow(300, 1.0, "cx", 0, scrollView());
|
2000-05-17 10:09:01 +00:00
|
|
|
preferencesChanged();
|
|
|
|
|
|
|
|
new KAction(i18n("&DVI Options"), 0, this,
|
|
|
|
SLOT(doSettings()), actionCollection(),
|
|
|
|
"settings_dvi");
|
|
|
|
|
|
|
|
setXMLFile("kdvi_part.rc");
|
2000-05-15 04:53:53 +00:00
|
|
|
|
|
|
|
scrollView()->addChild(window);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KDVIMultiPage::~KDVIMultiPage()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool KDVIMultiPage::openFile()
|
|
|
|
{
|
|
|
|
window->setFile(m_file);
|
|
|
|
|
|
|
|
emit numberOfPages(window->totalPages());
|
|
|
|
scrollView()->resizeContents(window->width(), window->height());
|
2000-05-15 14:53:59 +00:00
|
|
|
|
|
|
|
return true;
|
2000-05-15 04:53:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-17 08:50:57 +00:00
|
|
|
bool KDVIMultiPage::closeURL()
|
|
|
|
{
|
|
|
|
window->setFile("");
|
|
|
|
scrollView()->resizeContents(0, 0);
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-15 04:53:53 +00:00
|
|
|
// test code
|
|
|
|
QStringList KDVIMultiPage::fileFormats()
|
|
|
|
{
|
|
|
|
QStringList r;
|
|
|
|
r << "*.dvi|DVI files (*dvi)";
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool KDVIMultiPage::gotoPage(int page)
|
|
|
|
{
|
2000-05-17 08:50:57 +00:00
|
|
|
window->gotoPage(page+1);
|
2000-05-15 04:53:53 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void KDVIMultiPage::setZoom(double zoom)
|
|
|
|
{
|
2000-05-15 14:53:59 +00:00
|
|
|
window->setZoom(zoom);
|
2000-05-15 04:53:53 +00:00
|
|
|
scrollView()->resizeContents(window->width(), window->height());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2000-05-15 14:53:59 +00:00
|
|
|
extern unsigned int page_w, page_h;
|
|
|
|
|
2000-05-15 04:53:53 +00:00
|
|
|
double KDVIMultiPage::zoomForHeight(int height)
|
|
|
|
{
|
2000-05-15 14:53:59 +00:00
|
|
|
return (window->zoom() * (double)height)/(double)page_h;
|
2000-05-15 04:53:53 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
double KDVIMultiPage::zoomForWidth(int width)
|
|
|
|
{
|
2000-05-15 14:53:59 +00:00
|
|
|
return (window->zoom() * (double)width)/(double)page_w;
|
2000-05-15 04:53:53 +00:00
|
|
|
}
|
2000-05-16 11:18:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
void KDVIMultiPage::setPaperSize(double w, double h)
|
|
|
|
{
|
|
|
|
window->setPaper(w, h);
|
|
|
|
}
|
2000-05-16 14:13:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
bool KDVIMultiPage::preview(QPainter *p, int w, int h)
|
|
|
|
{
|
2000-05-17 08:50:57 +00:00
|
|
|
QPixmap *map = window->pix();
|
|
|
|
|
|
|
|
if (!map)
|
2000-05-16 14:13:41 +00:00
|
|
|
return false;
|
|
|
|
|
2000-05-17 08:50:57 +00:00
|
|
|
|
|
|
|
// TODO: use higher quality preview if anti-aliasing?
|
|
|
|
//p->drawImage(0, 0, window->pix()->convertToImage().smoothScale(w,h));
|
|
|
|
|
|
|
|
p->scale((double)w/(double)map->width(), (double)h/(double)map->height());
|
|
|
|
p->drawPixmap(0, 0, *map);
|
2000-05-16 14:13:41 +00:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
2000-05-17 10:09:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
void KDVIMultiPage::doSettings()
|
|
|
|
{
|
|
|
|
if (options)
|
|
|
|
{
|
|
|
|
options->show();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
options = new OptionDialog(window);
|
|
|
|
connect(options, SIGNAL(preferencesChanged()), this, SLOT(preferencesChanged()));
|
|
|
|
options->show();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void KDVIMultiPage::preferencesChanged()
|
|
|
|
{
|
|
|
|
KConfig *config = KGlobal::config();
|
|
|
|
|
|
|
|
QString s;
|
|
|
|
|
|
|
|
config->setGroup( "kdvi" );
|
|
|
|
|
|
|
|
s = config->readEntry( "FontPath" );
|
|
|
|
if ( !s.isEmpty() && s != window->fontPath() )
|
|
|
|
window->setFontPath( s );
|
|
|
|
|
|
|
|
int basedpi = config->readNumEntry( "BaseResolution" );
|
|
|
|
if ( basedpi <= 0 )
|
|
|
|
config->writeEntry( "BaseResolution", basedpi = 300 );
|
|
|
|
if ( basedpi != window->resolution() )
|
|
|
|
window->setResolution( basedpi );
|
|
|
|
|
|
|
|
QString mfmode = config->readEntry( "MetafontMode" );
|
|
|
|
if ( mfmode.isNull() )
|
|
|
|
config->writeEntry( "MetafontMode", mfmode = "/" );
|
|
|
|
if ( mfmode != window->metafontMode() )
|
|
|
|
window->setMetafontMode( mfmode );
|
|
|
|
|
|
|
|
s = config->readEntry( "Gamma" );
|
|
|
|
if ( !s.isEmpty() && s.toFloat() != window->gamma() )
|
|
|
|
window->setGamma( s.toFloat() );
|
|
|
|
|
|
|
|
int makepk = config->readNumEntry( "MakePK" );
|
|
|
|
if ( makepk != window->makePK() )
|
|
|
|
window->setMakePK( makepk );
|
|
|
|
|
|
|
|
int showPS = config->readNumEntry( "ShowPS" );
|
|
|
|
if (showPS != window->showPS())
|
|
|
|
window->setShowPS(showPS);
|
|
|
|
|
|
|
|
window->setAntiAlias( config->readNumEntry( "PS Anti Alias", 1 ) );
|
|
|
|
}
|
2000-05-18 10:51:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
bool KDVIMultiPage::print(const QStrList &pages, int current)
|
|
|
|
{
|
|
|
|
Print * printdlg = new Print(window, "printdlg");
|
|
|
|
|
|
|
|
printdlg->setFile(m_file);
|
|
|
|
printdlg->setCurrentPage(current, window->totalPages());
|
|
|
|
printdlg->setMarkList(&pages);
|
|
|
|
printdlg->exec();
|
|
|
|
|
|
|
|
delete printdlg;
|
|
|
|
}
|