1 // -*- C++ -*-
2 /**
3  * \file GuiSetBorder.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Edwin Leuven
8  * \author John Levon
9  *
10  * Full author contact details are available in file CREDITS.
11  */
12 
13 #ifndef GUISETBORDER_H
14 #define GUISETBORDER_H
15 
16 #include <QWidget>
17 #include <QPixmap>
18 
19 class QColor;
20 class QMouseEvent;
21 class QPaintEvent;
22 
23 //namespace lyx {
24 
25 class GuiSetBorder : public QWidget
26 {
27 	Q_OBJECT
28 public:
29 	GuiSetBorder(QWidget * parent = 0, Qt::WindowFlags fl = 0);
30 
31 	// We need tristate for multi-cell selection
32 	enum BorderState {
33 		LINE_UNSET,
34 		LINE_SET,
35 		LINE_UNDECIDED,
36 		LINE_UNDEF
37 	};
38 
39 	BorderState getLeft();
40 	BorderState getRight();
41 	BorderState getTop();
42 	BorderState getBottom();
43 
leftLineSet()44 	bool leftLineSet() { return getLeft() ==  LINE_SET; }
rightLineSet()45 	bool rightLineSet() { return getRight() ==  LINE_SET; }
topLineSet()46 	bool topLineSet() { return getTop() ==  LINE_SET; }
bottomLineSet()47 	bool bottomLineSet() { return getBottom() ==  LINE_SET; }
48 
leftLineUnset()49 	bool leftLineUnset() { return getLeft() ==  LINE_UNSET; }
rightLineUnset()50 	bool rightLineUnset() { return getRight() ==  LINE_UNSET; }
topLineUnset()51 	bool topLineUnset() { return getTop() ==  LINE_UNSET; }
bottomLineUnset()52 	bool bottomLineUnset() { return getBottom() ==  LINE_UNSET; }
53 
54 Q_SIGNALS:
55 	void rightSet();
56 	void leftSet();
57 	void topSet();
58 	void bottomSet();
59 	void clicked();
60 
61 public Q_SLOTS:
62 	void setLeftEnabled(bool);
63 	void setRightEnabled(bool);
64 	void setTopEnabled(bool);
65 	void setBottomEnabled(bool);
66 	void setLeft(BorderState);
67 	void setRight(BorderState);
68 	void setTop(BorderState);
69 	void setBottom(BorderState);
70 	void setAll(BorderState);
71 
72 protected:
73 	void mousePressEvent(QMouseEvent * e);
74 	void paintEvent(QPaintEvent * e);
75 
76 private:
77 	void init();
78 
79 	void drawLine(QColor const & col, int x, int y, int x2, int y2);
80 
81 	void drawLeft(BorderState);
82 	void drawRight(BorderState);
83 	void drawTop(BorderState);
84 	void drawBottom(BorderState);
85 
86 	class Border {
87 	public:
Border()88 		Border() : set(LINE_SET), enabled(true) {}
89 		BorderState set;
90 		bool enabled;
91 	};
92 
93 	Border left_;
94 	Border right_;
95 	Border top_;
96 	Border bottom_;
97 
98 	int m;
99 	int l;
100 	int w;
101 	int h;
102 
103 	QPixmap buffer;
104 };
105 
106 
107 //} // namespace lyx
108 
109 #endif // GUISETBORDER_H
110