Rev 740 |
Rev 838 |
Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/***************************************************************************
vruler.cpp - description
-------------------
begin : Wed Apr 11 2001
copyright : (C) 2001 by Franz Schmid
email : Franz.Schmid@altmuehlnet.de
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "vruler.h"
#include "vruler.moc"
#include "page.h"
#include <qcursor.h>
#include <qcolor.h>
#include <qrect.h>
#include <qpointarray.h>
#include "scribus.h"
#if QT_VERSION > 0x030102
#define SPLITVC SplitHCursor
#else
#define SPLITVC SplitVCursor
#endif
extern ScribusApp* ScApp;
Vruler::Vruler(ScribusView *pa, ScribusDoc *doc) : QWidget(pa)
{
setEraseColor(QColor(255,255,255));
doku = doc;
view = pa;
offs = -12;
Markp = 0;
oldMark = 0;
Mpressed = false;
}
void Vruler::mousePressEvent(QMouseEvent *m)
{
Mpressed = true;
if (ScApp->Prefs.GuidesShown)
{
QPoint py = view->viewport()->mapFromGlobal(m->globalPos());
view->DrVX = py.x();
qApp->setOverrideCursor(QCursor(SPLITVC), true);
}
}
void Vruler::mouseReleaseEvent(QMouseEvent *m)
{
if ((Mpressed) && (m->pos().x() > width()))
{
view->DrVX = -1;
view->SetXGuide(m);
}
qApp->setOverrideCursor(QCursor(ArrowCursor), true);
Mpressed = false;
}
void Vruler::mouseMoveEvent(QMouseEvent *m)
{
if ((Mpressed) && (m->pos().x() > width()))
view->FromVRuler(m);
}
void Vruler::paintEvent(QPaintEvent *)
{
int xx, pc;
double of, xl, iter, iter2;
double sc = view->Scale;
int cor = 1;
QFont ff = font();
ff.setPointSize(8);
setFont(ff);
switch (doku->Einheit)
{
case 0:
if (sc > 1)
cor = 2;
if (sc > 4)
cor = 10;
iter = 10.0 / cor;
iter2 = iter * 10.0;
break;
case 1:
if (sc > 1)
cor = 10;
iter = ((10.0 / 25.4) * 72.0) / cor;
iter2 = iter * 10.0;
break;
case 2:
iter = 18.0;
iter2 = 72.0;
if (sc > 1)
{
cor = 2;
iter = 9.0;
iter2 = 36.0;
}
if (sc > 4)
{
iter = 9.0;
iter2 = 18.0;
cor = 4;
}
break;
case 3:
iter = 12.0;
iter2 = 120.0;
if (sc > 1)
{
cor = 1;
iter = 12.0;
iter2 = 60.0;
}
if (sc > 4)
{
cor = 2;
iter = 6.0;
iter2 = 12.0;
}
break;
default:
if (sc > 1)
cor = 2;
if (sc > 4)
cor = 10;
iter = 10.0 / cor;
iter2 = iter * 10.0;
break;
}
QPainter p;
p.begin(this);
p.drawLine(24, 0, 24, height());
p.translate(0, -offs);
p.setBrush(black);
p.setPen(black);
p.setFont(font());
if (doku->PageFP)
{
if (doku->FirstPageLeft)
{
if (doku->PageC % 2 == 0)
pc = doku->PageC / 2;
else
pc = (doku->PageC+1) / 2;
}
else
{
if (doku->PageC % 2 == 0)
pc = doku->PageC / 2 + 1;
else
pc = doku->PageC / 2 + 1;
}
}
else
pc = doku->PageC;
for (xx = 0; xx < pc; ++xx)
{
of = xx * (doku->PageH+doku->ScratchBottom+doku->ScratchTop);
for (xl = 0; xl < doku->PageH; xl += iter)
{
if ((qRound((xl+of)*sc) > offs) && (qRound((xl+of)*sc) < offs+height()))
p.drawLine(18, qRound((xl+of)*sc), 24, qRound((xl+of)*sc));
}
for (xl = 0; xl < doku->PageH+(iter2/2); xl += iter2)
{
if ((qRound((xl+of)*sc) > offs) && (qRound((xl+of)*sc) < offs+height()))
{
p.drawLine(11, qRound((xl+of)*sc), 24, qRound((xl+of)*sc));
switch (doku->Einheit)
{
case 2:
{
QString tx = "";
int num1 = static_cast<int>(xl / iter2 / cor);
if (num1 != 0)
tx = QString::number(num1);
double frac = (xl / iter2 / cor) - num1;
if ((frac > 0.24) && (frac < 0.26))
tx += QChar(0xBC);
if ((frac > 0.49) && (frac < 0.51))
tx += QChar(0xBD);
if ((frac > 0.74) && (frac < 0.76))
tx += QChar(0xBE);
p.drawText(9, qRound((xl+of+10/sc) * sc), tx);
break;
}
case 3:
p.drawText(9, qRound((xl+of+10/sc) * sc), QString::number(xl / iter / cor));
break;
default:
p.drawText(9, qRound((xl+of+10/sc) * sc), QString::number(xl / iter * 10 / cor));
break;
}
}
}
}
p.end();
}
/** Zeichnet den Pfeil */
void Vruler::Draw(int wo)
{
Markp = wo-qRound(doku->ScratchTop*view->Scale);
QPainter p;
p.begin(this);
p.translate(0, -offs);
p.setPen(white);
p.setBrush(white);
p.drawRect(0, oldMark-3, 10, 6);
p.setPen(red);
p.setBrush(red);
QPointArray cr;
cr.setPoints(3, 9, Markp, 0, Markp+2, 0, Markp-2);
p.drawPolygon(cr);
p.end();
oldMark = Markp;
}