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