]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/qsetborder.C
better selection and scrolling behaviour
[lyx.git] / src / frontends / qt2 / qsetborder.C
index e8a5556354e6c2959455660c8aa00415e43c9d59..8d3d6f6fda5bb90a57279c79a87fb098c0cfcb3d 100644 (file)
@@ -4,6 +4,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Edwin Leuven
+ * \author John Levon
  *
  * Full author contact details are available in file CREDITS
  */
@@ -15,8 +16,7 @@
 
 
 QSetBorder::QSetBorder(QWidget * parent, char const * name, WFlags fl)
-       : QWidget(parent, name, fl),
-         left_(false), right_(false), top_(false), bottom_(false), buffer(75,75)
+       : QWidget(parent, name, fl), buffer(75, 75)
 {
        /* length of corner line */
        l = buffer.width() / 10;
@@ -31,7 +31,7 @@ QSetBorder::QSetBorder(QWidget * parent, char const * name, WFlags fl)
        setMinimumSize(w,h);
        setMaximumSize(w,h);
 }
+
 
 void QSetBorder::paintEvent(QPaintEvent * e)
 {
@@ -46,7 +46,9 @@ void QSetBorder::init()
        QPainter paint;
        paint.begin(&buffer);
        paint.setPen(Qt::black);
-       
+
+       // FIXME: wow, readable !! :)
+
        paint.drawLine(m + l , m, m + l, m + l);
        paint.drawLine(w - (m + l), m, w - (m + l), m + l);
 
@@ -62,119 +64,172 @@ void QSetBorder::init()
        paint.end();
 }
 
+
 void QSetBorder::mousePressEvent(QMouseEvent * e)
 {
        if (e->y() > e->x()) {
                if (e->y() < height() - e->x()) {
-                       drawLeft(!left_);
-                       left_ = !left_;
-                       emit leftSet(left_);
+                       if (left_.enabled) {
+                               setLeft(!left_.set);
+                               emit leftSet(left_.set);
+                       }
                } else {
-                       drawBottom(!bottom_);
-                       bottom_ = !bottom_;
-                       emit bottomSet(bottom_);
+                       if (bottom_.enabled) {
+                               setBottom(!bottom_.set);
+                               emit bottomSet(bottom_.set);
+                       }
                }
        } else {
                if (e->y() < height() - e->x()) {
-                       drawTop(!top_);
-                       top_ = !top_;
-                       emit topSet(top_);
+                       if (top_.enabled) {
+                               setTop(!top_.set);
+                               emit topSet(top_.set);
+                       }
                } else {
-                       drawRight(!right_);
-                       right_ = !right_;
-                       emit rightSet(right_);
+                       if (right_.enabled) {
+                               setRight(!right_.set);
+                               emit rightSet(right_.set);
+                       }
                }
        }
        update();
+       emit clicked();
 }
 
 
-void QSetBorder::drawLeft(bool draw)
+void QSetBorder::drawLine(QColor const & col, int x, int y, int x2, int y2)
 {
        QPainter paint;
        paint.begin(&buffer);
        QPen p = paint.pen();
        p.setWidth(2);
-       p.setColor(draw ? Qt::black : Qt::white);
+       p.setColor(col);
        paint.setPen(p);
-       paint.drawLine(m + l, m + l + 2, m + l, h - m - l - 1);
+       paint.drawLine(x, y, x2, y2);
        paint.end();
 }
+
+
+void QSetBorder::drawLeft(bool draw)
+{
+       QColor col(draw ? Qt::black : Qt::white);
+       if (!left_.enabled)
+               col = QColor("grey");
+       drawLine(col, m + l, m + l + 2, m + l, h - m - l - 1);
+}
+
 
 void QSetBorder::drawRight(bool draw)
 {
-       QPainter paint;
-       paint.begin(&buffer);
-       QPen p = paint.pen();
-       p.setWidth(2);
-       p.setColor(draw ? Qt::black : Qt::white);
-       paint.setPen(p);
-       paint.drawLine(h - m - l + 1, m + l + 2, h - m - l + 1, h - m - l - 1);
-       paint.end();
+       QColor col(draw ? Qt::black : Qt::white);
+       if (!right_.enabled)
+               col = QColor("grey");
+       drawLine(col, h - m - l + 1, m + l + 2, h - m - l + 1, h - m - l - 1);
 }
 
+
 void QSetBorder::drawTop(bool draw)
 {
-       QPainter paint;
-       paint.begin(&buffer);
-       QPen p = paint.pen();
-       p.setWidth(2);
-       p.setColor(draw ? Qt::black : Qt::white);
-       paint.setPen(p);
-       paint.drawLine(m + l + 2, m + l, w - m - l - 1, m + l);
-       paint.end();
+       QColor col(draw ? Qt::black : Qt::white);
+       if (!top_.enabled)
+               col = QColor("grey");
+       drawLine(col, m + l + 2, m + l, w - m - l - 1, m + l);
 }
 
+
 void QSetBorder::drawBottom(bool draw)
 {
-       QPainter paint;
-       paint.begin(&buffer);
-       QPen p = paint.pen();
-       p.setWidth(2);
-       p.setColor(draw ? Qt::black : Qt::white);
-       paint.setPen(p);
-       paint.drawLine(m + l + 2, w - m - l + 1, w - m - l - 1, w - m - l + 1);
-       paint.end();
+       QColor col(draw ? Qt::black : Qt::white);
+       if (!bottom_.enabled)
+               col = QColor("grey");
+       drawLine(col, m + l + 2, w - m - l + 1, w - m - l - 1, w - m - l + 1);
+}
+
+
+void QSetBorder::setLeftEnabled(bool border)
+{
+       left_.enabled = border;
+       drawLeft(border);
 }
 
+
+void QSetBorder::setRightEnabled(bool border)
+{
+       right_.enabled = border;
+       drawRight(border);
+}
+
+
+void QSetBorder::setTopEnabled(bool border)
+{
+       top_.enabled = border;
+       drawTop(border);
+}
+
+
+void QSetBorder::setBottomEnabled(bool border)
+{
+       bottom_.enabled = border;
+       drawBottom(border);
+}
+
+
 void QSetBorder::setLeft(bool border)
 {
-       left_ = border;
+       left_.set = border;
+       drawLeft(border);
 }
 
+
 void QSetBorder::setRight(bool border)
 {
-       right_ = border;
+       right_.set = border;
+       drawRight(border);
 }
 
+
 void QSetBorder::setTop(bool border)
 {
-       top_ = border;
+       top_.set = border;
+       drawTop(border);
 }
 
+
 void QSetBorder::setBottom(bool border)
 {
-       bottom_ = border;
+       bottom_.set = border;
+       drawBottom(border);
+}
+
+
+void QSetBorder::setAll(bool border)
+{
+       setLeft(border);
+       setRight(border);
+       setTop(border);
+       setBottom(border);
 }
 
+
 bool QSetBorder::getLeft()
 {
-       return left_;
+       return left_.set;
 }
 
+
 bool QSetBorder::getRight()
 {
-       return right_;
+       return right_.set;
 }
 
+
 bool QSetBorder::getTop()
 {
-       return top_;
+       return top_.set;
 }
 
+
 bool QSetBorder::getBottom()
 {
-       return bottom_;
+       return bottom_.set;
 }