2 * \file GuiSetBorder.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * \author Jürgen Spitzmüller
10 * Full author contact details are available in file CREDITS.
15 #include "GuiSetBorder.h"
17 #include "support/debug.h"
20 #include <QMouseEvent>
21 #include <QPaintEvent>
24 GuiSetBorder::GuiSetBorder(QWidget * parent, Qt::WindowFlags fl)
25 : QWidget(parent, fl), buffer(75, 75), bottom_drawn_wide_(false),
26 top_drawn_wide_(false)
28 /* length of corner line */
29 corner_length = buffer.width() / 10;
31 margin = buffer.height() / 10;
33 bwidth = buffer.width();
34 bheight = buffer.height();
38 setMinimumSize(bwidth, bheight);
39 setMaximumSize(bwidth, bheight);
43 void GuiSetBorder::paintEvent(QPaintEvent * e)
45 QWidget::paintEvent(e);
46 QPainter painter(this);
47 painter.drawPixmap(0, 0, buffer);
51 void GuiSetBorder::init()
54 QPainter paint(&buffer);
56 paint.setPen(Qt::black);
58 // Draw the corner marks
59 paint.drawLine(margin + corner_length, margin,
60 margin + corner_length, margin + corner_length);
61 paint.drawLine(bwidth - (margin + corner_length), margin,
62 bwidth - (margin + corner_length), margin + corner_length);
64 paint.drawLine(margin, margin + corner_length,
65 margin + corner_length, margin + corner_length);
66 paint.drawLine(margin, bheight - (margin + corner_length),
67 margin + corner_length, bheight - (margin + corner_length));
69 paint.drawLine(margin + corner_length ,bheight - margin,
70 margin + corner_length ,bheight - (margin + corner_length));
71 paint.drawLine(bwidth - (margin + corner_length), bheight - margin,
72 bwidth - (margin + corner_length), bheight - (margin + corner_length));
74 paint.drawLine(bheight - margin, margin+corner_length,
75 bheight - (margin + corner_length), margin + corner_length);
76 paint.drawLine(bheight - margin, bheight - (margin + corner_length),
77 bheight - (margin + corner_length),bheight - (margin + corner_length));
81 void GuiSetBorder::mousePressEvent(QMouseEvent * e)
83 if (e->y() > e->x()) {
84 if (e->y() < height() - e->x()) {
86 setLeft(left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
91 if (bottom_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
92 setBottomLeftTrim(bottom_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
95 } else if (bottom_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
96 setBottomRightTrim(bottom_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
99 } else if (bottom_.enabled) {
100 setBottom(bottom_.set == LINE_SET ? LINE_UNSET : LINE_SET);
106 if (e->y() < height() - e->x()) {
107 if (top_trim_left_.enabled && e->x() < margin + 4 + 2 * corner_length) {
108 setTopLeftTrim(top_trim_left_.set == LINE_SET ? LINE_UNSET : LINE_SET);
111 } else if (top_trim_right_.enabled && e->x() > bwidth - margin - 2 * corner_length - 4) {
112 setTopRightTrim(top_trim_right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
115 } else if (top_.enabled) {
116 setTop(top_.set == LINE_SET ? LINE_UNSET : LINE_SET);
121 if (right_.enabled) {
122 setRight(right_.set == LINE_SET ? LINE_UNSET : LINE_SET);
134 void GuiSetBorder::drawLine(QColor const & col, int x, int y, int x2, int y2)
136 QPainter paint(&buffer);
137 QPen p = paint.pen();
141 paint.drawLine(x, y, x2, y2);
145 void GuiSetBorder::drawLeft(BorderState draw)
161 col = QColor(Qt::lightGray);
162 drawLine(col, margin + corner_length, margin + corner_length + 2,
163 margin + corner_length, bheight - margin - corner_length - 1);
167 void GuiSetBorder::drawRight(BorderState draw)
183 col = QColor(Qt::lightGray);
184 drawLine(col, bheight - margin - corner_length + 1, margin + corner_length + 2,
185 bheight - margin - corner_length + 1, bheight - margin - corner_length - 1);
189 void GuiSetBorder::drawTop(BorderState draw)
195 top_drawn_wide_ = true;
199 top_drawn_wide_ = false;
204 top_drawn_wide_ = true;
208 col = QColor(Qt::lightGray);
209 int const lt = (top_trim_left_.enabled) ? corner_length + 4 : 0;
210 int const rt = (top_trim_right_.enabled) ? corner_length + 4 : 0;
211 drawLine(col, margin + corner_length + 2 + lt, margin + corner_length,
212 bwidth - margin - corner_length - 1 - rt, margin + corner_length);
216 void GuiSetBorder::undrawWideTopLine(bool const right)
218 if (!top_drawn_wide_ && !right)
221 // Overpaint previous lines white
223 drawLine(Qt::white, margin + 2 * (corner_length + 2), margin + corner_length,
224 bwidth - margin - corner_length - 1, margin + corner_length);
226 drawLine(Qt::white, margin + corner_length + 2, margin + corner_length,
227 bwidth - margin - corner_length - 1, margin + corner_length);
228 top_drawn_wide_ = false;
232 void GuiSetBorder::drawTopLeftTrim(BorderState draw)
247 if (!top_trim_left_.enabled)
248 col = QColor(Qt::white);
249 int const lt = corner_length;
250 if (top_trim_left_.enabled)
251 drawLine(col, margin + corner_length + 2, margin + corner_length,
252 margin + corner_length + 2 + lt, margin + corner_length);
256 void GuiSetBorder::drawTopRightTrim(BorderState draw)
271 if (!top_trim_right_.enabled)
272 col = QColor(Qt::white);
273 int const rt = corner_length;
274 if (top_trim_right_.enabled)
275 drawLine(col, bwidth - margin - corner_length - 1 - rt, margin + corner_length,
276 bwidth - margin - corner_length - 1, margin + corner_length);
280 void GuiSetBorder::drawBottom(BorderState draw)
286 bottom_drawn_wide_ = true;
290 bottom_drawn_wide_ = false;
295 bottom_drawn_wide_ = true;
298 if (!bottom_.enabled)
299 col = QColor(Qt::lightGray);
300 int const lt = (bottom_trim_left_.enabled) ? corner_length + 4 : 0;
301 int const rt = (bottom_trim_right_.enabled) ? corner_length + 4 : 0;
302 drawLine(col, margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1,
303 bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1);
307 void GuiSetBorder::undrawWideBottomLine(bool const right)
309 if (!bottom_drawn_wide_ && !right)
312 // Overpaint previous lines white
314 drawLine(Qt::white, margin + 2 * (corner_length + 2), bwidth - margin - corner_length + 1,
315 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
317 drawLine(Qt::white, margin + corner_length + 2, bwidth - margin - corner_length + 1,
318 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
319 bottom_drawn_wide_ = false;
323 void GuiSetBorder::drawBottomLeftTrim(BorderState draw)
338 if (!bottom_trim_left_.enabled)
339 col = QColor(Qt::white);
340 int const lt = corner_length;
341 if (bottom_trim_left_.enabled)
342 drawLine(col, margin + corner_length + 2, bwidth - margin - corner_length + 1,
343 margin + corner_length + 2 + lt, bwidth - margin - corner_length + 1);
347 void GuiSetBorder::drawBottomRightTrim(BorderState draw)
362 if (!bottom_trim_right_.enabled)
363 col = QColor(Qt::white);
364 int const rt = corner_length;
365 if (bottom_trim_right_.enabled)
366 drawLine(col, bwidth - margin - corner_length - 1 - rt, bwidth - margin - corner_length + 1,
367 bwidth - margin - corner_length - 1, bwidth - margin - corner_length + 1);
371 void GuiSetBorder::setLeftEnabled(bool enabled)
373 left_.enabled = enabled;
378 void GuiSetBorder::setRightEnabled(bool enabled)
380 right_.enabled = enabled;
381 drawRight(right_.set);
385 void GuiSetBorder::setTopEnabled(bool enabled)
387 top_.enabled = enabled;
392 void GuiSetBorder::setBottomEnabled(bool enabled)
394 bottom_.enabled = enabled;
395 drawBottom(bottom_.set);
399 void GuiSetBorder::setTopLeftTrimEnabled(bool enabled)
401 top_trim_left_.enabled = enabled;
403 drawTopLeftTrim(top_trim_left_.set);
405 top_drawn_wide_ = !enabled;
409 void GuiSetBorder::setTopRightTrimEnabled(bool enabled)
411 top_trim_right_.enabled = enabled;
412 undrawWideTopLine(enabled);
413 drawTopRightTrim(top_trim_right_.set);
415 top_drawn_wide_ = !enabled;
419 void GuiSetBorder::setBottomLeftTrimEnabled(bool enabled)
421 bottom_trim_left_.enabled = enabled;
422 undrawWideBottomLine();
423 drawBottomLeftTrim(bottom_trim_left_.set);
424 drawBottom(bottom_.set);
425 bottom_drawn_wide_ = !enabled;
429 void GuiSetBorder::setBottomRightTrimEnabled(bool enabled)
431 bottom_trim_right_.enabled = enabled;
432 undrawWideBottomLine(enabled);
433 drawBottomRightTrim(bottom_trim_right_.set);
434 drawBottom(bottom_.set);
435 bottom_drawn_wide_ = !enabled;
439 void GuiSetBorder::setLeft(BorderState border)
446 void GuiSetBorder::setRight(BorderState border)
453 void GuiSetBorder::setTop(BorderState border)
460 void GuiSetBorder::setBottom(BorderState border)
462 bottom_.set = border;
467 void GuiSetBorder::setTopLeftTrim(BorderState border)
469 top_trim_left_.set = border;
470 drawTopLeftTrim(border);
474 void GuiSetBorder::setTopRightTrim(BorderState border)
476 top_trim_right_.set = border;
477 drawTopRightTrim(border);
481 void GuiSetBorder::setBottomLeftTrim(BorderState border)
483 bottom_trim_left_.set = border;
484 drawBottomLeftTrim(border);
487 void GuiSetBorder::setBottomRightTrim(BorderState border)
489 bottom_trim_right_.set = border;
490 drawBottomRightTrim(border);
494 void GuiSetBorder::setAll(BorderState border)
500 setTopLeftTrim(border);
501 setTopRightTrim(border);
502 setBottomLeftTrim(border);
503 setBottomRightTrim(border);
507 GuiSetBorder::BorderState GuiSetBorder::getLeft()
513 GuiSetBorder::BorderState GuiSetBorder::getRight()
519 GuiSetBorder::BorderState GuiSetBorder::getTop()
525 GuiSetBorder::BorderState GuiSetBorder::getBottom()
531 GuiSetBorder::BorderState GuiSetBorder::getTopLeftTrim()
533 return top_trim_left_.set;
537 GuiSetBorder::BorderState GuiSetBorder::getTopRightTrim()
539 return top_trim_right_.set;
543 GuiSetBorder::BorderState GuiSetBorder::getBottomLeftTrim()
545 return bottom_trim_left_.set;
549 GuiSetBorder::BorderState GuiSetBorder::getBottomRightTrim()
551 return bottom_trim_right_.set;
554 #include "moc_GuiSetBorder.cpp"