]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/qsetborder.C
enable Font cache only for MacOSX and inline width() for other platform.
[lyx.git] / src / frontends / qt4 / qsetborder.C
1 /**
2  * \file qsetborder.C
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Edwin Leuven
7  * \author John Levon
8  *
9  * Full author contact details are available in file CREDITS.
10  */
11
12 #include <config.h>
13
14 #include "qsetborder.h"
15
16 #include <QPainter>
17
18 //Added by qt3to4:
19 #include <QMouseEvent>
20 #include <QPaintEvent>
21
22
23 QSetBorder::QSetBorder(QWidget * parent, Qt::WFlags fl)
24         : QWidget(parent, fl), buffer(75, 75)
25 {
26         /* length of corner line */
27         l = buffer.width() / 10;
28         /* margin */
29         m = buffer.height() / 10;
30
31         w = buffer.width();
32         h = buffer.height();
33
34         init();
35
36         setMinimumSize(w,h);
37         setMaximumSize(w,h);
38 }
39
40
41 void QSetBorder::paintEvent(QPaintEvent * e)
42 {
43         QWidget::paintEvent(e);
44         QPainter painter(this);
45         painter.drawPixmap(0, 0, buffer);
46 }
47
48
49 void QSetBorder::init()
50 {
51         buffer.fill();
52         QPainter paint(&buffer);
53
54         paint.setPen(Qt::black);
55
56         // FIXME: wow, readable !! :)
57
58         paint.drawLine(m + l , m, m + l, m + l);
59         paint.drawLine(w - (m + l), m, w - (m + l), m + l);
60
61         paint.drawLine(m, m + l , m + l, m + l);
62         paint.drawLine(m, h - (m + l), m + l, h - (m + l));
63
64         paint.drawLine(m + l ,h - m, m + l ,h - (m + l));
65         paint.drawLine(w - (m + l), h - m, w - (m + l), h - (m + l));
66
67         paint.drawLine(h - m, m+l, h - (m + l), m + l);
68         paint.drawLine(h - m, h - (m + l), h - (m + l),h - (m + l));
69 }
70
71
72 void QSetBorder::mousePressEvent(QMouseEvent * e)
73 {
74         if (e->y() > e->x()) {
75                 if (e->y() < height() - e->x()) {
76                         if (left_.enabled) {
77                                 setLeft(!left_.set);
78                                 // emit signal
79                                 leftSet(left_.set);
80                         }
81                 } else {
82                         if (bottom_.enabled) {
83                                 setBottom(!bottom_.set);
84                                 // emit signal
85                                 bottomSet(bottom_.set);
86                         }
87                 }
88         } else {
89                 if (e->y() < height() - e->x()) {
90                         if (top_.enabled) {
91                                 setTop(!top_.set);
92                                 // emit signal
93                                 topSet(top_.set);
94                         }
95                 } else {
96                         if (right_.enabled) {
97                                 setRight(!right_.set);
98                                 // emit signal
99                                 rightSet(right_.set);
100                         }
101                 }
102         }
103         update();
104         // emit signal
105         clicked();
106 }
107
108
109 void QSetBorder::drawLine(QColor const & col, int x, int y, int x2, int y2)
110 {
111         QPainter paint(&buffer);
112         QPen p = paint.pen();
113         p.setWidth(2);
114         p.setColor(col);
115         paint.setPen(p);
116         paint.drawLine(x, y, x2, y2);
117 }
118
119
120 void QSetBorder::drawLeft(bool draw)
121 {
122         QColor col(draw ? Qt::black : Qt::white);
123         if (!left_.enabled)
124                 col = QColor("grey");
125         drawLine(col, m + l, m + l + 2, m + l, h - m - l - 1);
126 }
127
128
129 void QSetBorder::drawRight(bool draw)
130 {
131         QColor col(draw ? Qt::black : Qt::white);
132         if (!right_.enabled)
133                 col = QColor("grey");
134         drawLine(col, h - m - l + 1, m + l + 2, h - m - l + 1, h - m - l - 1);
135 }
136
137
138 void QSetBorder::drawTop(bool draw)
139 {
140         QColor col(draw ? Qt::black : Qt::white);
141         if (!top_.enabled)
142                 col = QColor("grey");
143         drawLine(col, m + l + 2, m + l, w - m - l - 1, m + l);
144 }
145
146
147 void QSetBorder::drawBottom(bool draw)
148 {
149         QColor col(draw ? Qt::black : Qt::white);
150         if (!bottom_.enabled)
151                 col = QColor("grey");
152         drawLine(col, m + l + 2, w - m - l + 1, w - m - l - 1, w - m - l + 1);
153 }
154
155
156 void QSetBorder::setLeftEnabled(bool border)
157 {
158         left_.enabled = border;
159         drawLeft(border);
160 }
161
162
163 void QSetBorder::setRightEnabled(bool border)
164 {
165         right_.enabled = border;
166         drawRight(border);
167 }
168
169
170 void QSetBorder::setTopEnabled(bool border)
171 {
172         top_.enabled = border;
173         drawTop(border);
174 }
175
176
177 void QSetBorder::setBottomEnabled(bool border)
178 {
179         bottom_.enabled = border;
180         drawBottom(border);
181 }
182
183
184 void QSetBorder::setLeft(bool border)
185 {
186         left_.set = border;
187         drawLeft(border);
188 }
189
190
191 void QSetBorder::setRight(bool border)
192 {
193         right_.set = border;
194         drawRight(border);
195 }
196
197
198 void QSetBorder::setTop(bool border)
199 {
200         top_.set = border;
201         drawTop(border);
202 }
203
204
205 void QSetBorder::setBottom(bool border)
206 {
207         bottom_.set = border;
208         drawBottom(border);
209 }
210
211
212 void QSetBorder::setAll(bool border)
213 {
214         setLeft(border);
215         setRight(border);
216         setTop(border);
217         setBottom(border);
218 }
219
220
221 bool QSetBorder::getLeft()
222 {
223         return left_.set;
224 }
225
226
227 bool QSetBorder::getRight()
228 {
229         return right_.set;
230 }
231
232
233 bool QSetBorder::getTop()
234 {
235         return top_.set;
236 }
237
238
239 bool QSetBorder::getBottom()
240 {
241         return bottom_.set;
242 }
243
244 #include "qsetborder_moc.cpp"