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