]> git.lyx.org Git - lyx.git/blob - src/frontends/qt2/qsetborder.C
some fixes
[lyx.git] / src / frontends / qt2 / 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  *
8  * Full author contact details are available in file CREDITS
9  */
10
11 #include <qpainter.h>
12 #include <qpixmap.h>
13 #include <qimage.h>
14 #include "qsetborder.h"
15
16
17 QSetBorder::QSetBorder(QWidget * parent, char const * name, WFlags fl)
18         : QWidget(parent, name, fl),
19           left_(true), right_(true), top_(true), bottom_(true),
20           buffer(75, 75)
21 {
22         /* length of corner line */
23         l = buffer.width() / 10;
24         /* margin */
25         m = buffer.height() / 10;
26
27         w = buffer.width();
28         h = buffer.height();
29
30         init();
31
32         setMinimumSize(w,h);
33         setMaximumSize(w,h);
34 }
35  
36
37 void QSetBorder::paintEvent(QPaintEvent * e)
38 {
39         QWidget::paintEvent(e);
40         bitBlt(this, 0, 0, &buffer, 0, 0, width(), height());
41 }
42
43
44 void QSetBorder::init()
45 {
46         buffer.fill();
47         QPainter paint;
48         paint.begin(&buffer);
49         paint.setPen(Qt::black);
50         
51         // FIXME: wow, readable !! :)
52  
53         paint.drawLine(m + l , m, m + l, m + l);
54         paint.drawLine(w - (m + l), m, w - (m + l), m + l);
55
56         paint.drawLine(m, m + l , m + l, m + l);
57         paint.drawLine(m, h - (m + l), m + l, h - (m + l));
58
59         paint.drawLine(m + l ,h - m, m + l ,h - (m + l));
60         paint.drawLine(w - (m + l), h - m, w - (m + l), h - (m + l));
61
62         paint.drawLine(h - m, m+l, h - (m + l), m + l);
63         paint.drawLine(h - m, h - (m + l), h - (m + l),h - (m + l));
64
65         paint.end();
66 }
67
68  
69 void QSetBorder::mousePressEvent(QMouseEvent * e)
70 {
71         if (e->y() > e->x()) {
72                 if (e->y() < height() - e->x()) {
73                         setLeft(!left_);
74                         emit leftSet(left_);
75                 } else {
76                         setBottom(!bottom_);
77                         emit bottomSet(bottom_);
78                 }
79         } else {
80                 if (e->y() < height() - e->x()) {
81                         setTop(!top_);
82                         emit topSet(top_);
83                 } else {
84                         setRight(!right_);
85                         emit rightSet(right_);
86                 }
87         }
88         update();
89         emit clicked();
90 }
91
92
93 void QSetBorder::drawLine(bool draw, int x, int y, int x2, int y2)
94 {
95         QPainter paint;
96         paint.begin(&buffer);
97         QPen p = paint.pen();
98         p.setWidth(2);
99         p.setColor(draw ? Qt::black : Qt::white);
100         paint.setPen(p);
101         paint.drawLine(x, y, x2, y2);
102         paint.end();
103 }
104
105
106 void QSetBorder::drawLeft(bool draw)
107 {
108         drawLine(draw, m + l, m + l + 2, m + l, h - m - l - 1);
109 }
110  
111
112 void QSetBorder::drawRight(bool draw)
113 {
114         drawLine(draw, h - m - l + 1, m + l + 2, h - m - l + 1, h - m - l - 1);
115 }
116
117  
118 void QSetBorder::drawTop(bool draw)
119 {
120         drawLine(draw, m + l + 2, m + l, w - m - l - 1, m + l);
121 }
122
123
124 void QSetBorder::drawBottom(bool draw)
125 {
126         drawLine(draw, m + l + 2, w - m - l + 1, w - m - l - 1, w - m - l + 1);
127 }
128
129  
130 void QSetBorder::setLeft(bool border)
131 {
132         left_ = border;
133         drawLeft(border);
134 }
135
136
137 void QSetBorder::setRight(bool border)
138 {
139         right_ = border;
140         drawRight(border);
141 }
142  
143
144 void QSetBorder::setTop(bool border)
145 {
146         top_ = border;
147         drawTop(border);
148 }
149  
150
151 void QSetBorder::setBottom(bool border)
152 {
153         bottom_ = border;
154         drawBottom(border);
155 }
156
157
158 void QSetBorder::setAll(bool border)
159 {
160         setLeft(border);
161         setRight(border);
162         setTop(border);
163         setBottom(border);
164 }
165
166
167 bool QSetBorder::getLeft()
168 {
169         return left_;
170 }
171
172
173 bool QSetBorder::getRight()
174 {
175         return right_;
176 }
177
178
179 bool QSetBorder::getTop()
180 {
181         return top_;
182 }
183
184
185 bool QSetBorder::getBottom()
186 {
187         return bottom_;
188 }