Subversion Repositories Scribus

Rev

Rev 83 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          vruler.cpp  -  description
3
                             -------------------
4
    begin                : Wed Apr 11 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include "vruler.h"
19
#include "vruler.moc"
20
#include "page.h"
21
#include <qcursor.h>
83 Franz 22
#include <qcolor.h>
23
#include <qrect.h>
24
#include <qpointarray.h>
3 paul 25
Vruler::Vruler(QScrollView *pa, ScribusDoc *doc) : QWidget(pa)
26
{
27
        setEraseColor(QColor(255,255,255));
28
        doku = doc;
29
        offs = -12;
30
        Markp = 0;
31
        oldMark = 0;
32
        Mpressed = false;
33
}
34
 
35
void Vruler::mousePressEvent(QMouseEvent *)
36
{
37
        Mpressed = true;
38
        qApp->setOverrideCursor(QCursor(SplitVCursor), true);
39
}
40
 
41
void Vruler::mouseReleaseEvent(QMouseEvent *m)
42
{
43
        Mpressed = false;
44
        doku->ActPage->DrVX = -1;
45
        doku->ActPage->SetXGuide(m);
46
        qApp->setOverrideCursor(QCursor(ArrowCursor), true);
47
}
48
 
49
void Vruler::mouseMoveEvent(QMouseEvent *m)
50
{
51
        if ((Mpressed) && (m->pos().x() > width()))
52
                doku->ActPage->FromVRuler(m);
53
}
54
 
55
void Vruler::paintEvent(QPaintEvent *)
56
{
57
        int xx, pc;
80 Franz 58
        double of, xl, iter, iter2;
59
        double sc = doku->Scale;
182 Franz 60
        int cor = 1;
61
        if (sc > 1)
62
                cor = 2;
63
        if (sc > 4)
64
                cor = 10;
3 paul 65
        switch (doku->Einheit)
182 Franz 66
        {
3 paul 67
                case 0:
182 Franz 68
                        if (sc > 1)
69
                                cor = 2;
70
                        if (sc > 4)
71
                                cor = 10;
72
                        iter = 10.0 / cor;
73
                        iter2 = iter * 10.0;
3 paul 74
                        break;
75
                case 1:
182 Franz 76
                        if (sc > 1)
77
                                cor = 10;
78
                        iter = ((10.0 / 25.4) * 72.0) / cor;
79
                        iter2 = iter * 10.0;
3 paul 80
                        break;
81
                case 2:
82
                        iter = 18.0;
83
                        iter2 = 72.0;
182 Franz 84
                        if (sc > 1)
85
                                {
86
                                cor = 2;
87
                                iter = 9.0;
88
                                iter2 = 36.0;
89
                                }
90
                        if (sc > 4)
91
                                {
92
                                iter = 9.0;
93
                                iter2 = 18.0;
94
                                cor = 4;
95
                                }
3 paul 96
                        break;
97
                case 3:
98
                        iter = 12.0;
99
                        iter2 = 120.0;
182 Franz 100
                        if (sc > 1)
101
                                {
102
                                cor = 1;
103
                                iter = 12.0;
104
                                iter2 = 60.0;
105
                                }
106
                        if (sc > 4)
107
                                {
108
                                cor = 2;
109
                                iter = 6.0;
110
                                iter2 = 12.0;
111
                                }
3 paul 112
                        break;
182 Franz 113
        }
3 paul 114
        QPainter p;
115
        p.begin(this);
116
        p.drawLine(24, 0, 24, height());
117
        p.translate(0, -offs);
118
        p.setBrush(black);
119
        p.setPen(black);
83 Franz 120
        p.setFont(font());
3 paul 121
        if ((doku->PageFP) && (doku->PagesSbS))
182 Franz 122
        {
123
                if (doku->FirstPageLeft)
3 paul 124
                {
125
                        if (doku->PageC % 2 == 0)
126
                                pc = doku->PageC / 2;
127
                        else
128
                                pc = (doku->PageC+1) / 2;
182 Franz 129
                }
3 paul 130
                else
182 Franz 131
                {
3 paul 132
                        if (doku->PageC % 2 == 0)
133
                                pc = doku->PageC / 2 + 1;
134
                        else
135
                                pc = doku->PageC / 2 + 1;
136
                }
182 Franz 137
        }
3 paul 138
        else
139
                pc = doku->PageC;
140
        for (xx = 0; xx < pc; ++xx)
182 Franz 141
        {
3 paul 142
                of = xx * (doku->PageH+30.0);
143
                for (xl = 0; xl < doku->PageH; xl += iter)
182 Franz 144
                        p.drawLine(18, qRound((xl+of)*sc), 24, qRound((xl+of)*sc));
3 paul 145
                for (xl = 0; xl < doku->PageH+(iter2/2); xl += iter2)
182 Franz 146
                {
147
                        p.drawLine(11, qRound((xl+of)*sc), 24, qRound((xl+of)*sc));
148
                        switch (doku->Einheit)
3 paul 149
                        {
150
                                case 2:
182 Franz 151
                                        p.drawText(9, qRound((xl+of+10/sc) * sc), QString::number(xl / iter2 / cor));
3 paul 152
                                        break;
153
                                case 3:
182 Franz 154
                                        p.drawText(9, qRound((xl+of+10/sc) * sc), QString::number(xl / iter / cor));
3 paul 155
                                        break;
156
                                default:
182 Franz 157
                                        p.drawText(9, qRound((xl+of+10/sc) * sc), QString::number(xl / iter * 10 / cor));
3 paul 158
                                        break;
159
                        }
160
                }
182 Franz 161
        }
3 paul 162
        p.end();
163
}
164
/** Zeichnet den Pfeil */
165
void Vruler::Draw(int wo)
166
{
167
        Markp = wo-qRound(10*doku->Scale);
168
        QPainter p;
169
        p.begin(this);
170
        p.translate(0, -offs);
171
        p.setPen(white);
172
        p.setBrush(white);
173
        p.drawRect(0, oldMark-3, 10, 6);
174
        p.setPen(red);
175
        p.setBrush(red);
176
        QPointArray cr;
177
        cr.setPoints(3, 9, Markp, 0, Markp+2, 0, Markp-2);
178
        p.drawPolygon(cr);
179
        p.end();
180
        oldMark = Markp;
181
}