]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/InsertTableWidget.C
delete some emits that I missed, add comments about emitting signals
[lyx.git] / src / frontends / qt4 / InsertTableWidget.C
1 /**\r
2  * \file InsertTableWidget.C\r
3  *\r
4  * This file is part of LyX, the document processor.\r
5  * Licence details can be found in the file COPYING.\r
6  *\r
7  * \author Edwin Leuven\r
8  *\r
9  * Full author contact details are available in file CREDITS.\r
10  */\r
11 \r
12 #include <config.h>\r
13 \r
14 #include "BufferView.h" // needed for lyxfunc\r
15 #include "lyxfunc.h"\r
16 #include "FuncStatus.h"\r
17 #include "funcrequest.h"\r
18 #include "LyXView.h"\r
19 \r
20 #include "qt_helpers.h"\r
21 \r
22 #include "InsertTableWidget.h"\r
23 #include <QMouseEvent>\r
24 #include <QString>\r
25 #include <QToolTip>\r
26 #include <QPainter>\r
27 \r
28 \r
29 namespace lyx {\r
30 namespace frontend {\r
31 \r
32 InsertTableWidget::InsertTableWidget(LyXView & lyxView, QWidget * parent)\r
33         : QWidget(parent, Qt::Popup), colwidth_(20), rowheight_(12), lyxView_(lyxView)\r
34 {\r
35         init();\r
36         setMouseTracking(true);\r
37 }\r
38 \r
39 \r
40 void InsertTableWidget::init()\r
41 {\r
42         rows_ = 5;\r
43         cols_ = 5;\r
44         bottom_ = 0;\r
45         right_ = 0;\r
46         underMouse_ = false;\r
47 }\r
48 \r
49 \r
50 void InsertTableWidget::show(bool show)\r
51 {\r
52         if (!show)\r
53                 return;\r
54 \r
55         init();\r
56         resetGeometry();\r
57         setVisible(true);\r
58         // emit signal\r
59         visible(true);\r
60 }\r
61 \r
62 \r
63 void InsertTableWidget::resetGeometry()\r
64 {\r
65         QPoint p = parentWidget()->mapToGlobal(parentWidget()->geometry().bottomLeft());\r
66         setGeometry(p.x() - parentWidget()->pos().x(), \r
67                                 p.y() - parentWidget()->pos().y(),\r
68                                 cols_ * colwidth_ + 1, rows_ * rowheight_ + 1);\r
69 }\r
70 \r
71 \r
72 void InsertTableWidget::mouseMoveEvent(QMouseEvent * event)\r
73 {\r
74         // do this ourselves because when the mouse leaves the app\r
75         // we get an enter event (ie underMouse() is true)!!\r
76         underMouse_ = geometry().contains(event->globalPos());\r
77         if (!underMouse_) {\r
78                 bottom_ = 0;\r
79                 right_ = 0;\r
80                 update();\r
81                 return;\r
82         }\r
83 \r
84         int const r0 = right_;\r
85         int const b0 = bottom_;\r
86         right_ = event->x() / colwidth_ + 1;\r
87         bottom_ = event->y() / rowheight_ + 1;\r
88 \r
89         if (bottom_ == rows_) {\r
90                 ++rows_;\r
91                 resetGeometry();\r
92         }\r
93 \r
94         if (right_ == cols_) {\r
95                 ++cols_;\r
96                 resetGeometry();\r
97         }\r
98 \r
99         if (bottom_ != b0 || right_ != r0) {\r
100                 update();\r
101                 QString const status = QString("%1x%2").arg(bottom_).arg(right_);\r
102                 QToolTip::showText(event->globalPos(), status , this);\r
103         }\r
104 }\r
105 \r
106 \r
107 void InsertTableWidget::mouseReleaseEvent(QMouseEvent * event)\r
108 {\r
109         if (underMouse_) {\r
110                 QString const data = QString("%1 %2").arg(bottom_).arg(right_);\r
111                 lyxView_.getLyXFunc().dispatch(FuncRequest(LFUN_TABULAR_INSERT, fromqstr(data)));\r
112         }\r
113         // emit signal\r
114         visible(false);\r
115         close();\r
116 }\r
117 \r
118 \r
119 void InsertTableWidget::mousePressEvent(QMouseEvent * event)\r
120 {\r
121         // swallow this one\r
122 }\r
123 \r
124 \r
125 void InsertTableWidget::paintEvent(QPaintEvent * event)\r
126 {\r
127         drawGrid(rows_, cols_, Qt::white);\r
128         if (underMouse_)\r
129                 drawGrid(bottom_, right_, Qt::darkBlue);\r
130 }\r
131 \r
132 \r
133 void InsertTableWidget::drawGrid(int const rows, int const cols, Qt::GlobalColor const color)\r
134 {\r
135         QPainter painter(this);\r
136         painter.setPen(Qt::darkGray);\r
137         painter.setBrush(color);\r
138 \r
139         for (int r = 0 ; r < rows ; ++r ) {\r
140                 for (int c = 0 ; c < cols ; ++c ) {\r
141                         QRect rectangle(c * colwidth_, r * rowheight_, colwidth_, rowheight_);\r
142                         painter.drawRect(rectangle);\r
143                 }\r
144         }\r
145 }\r
146 \r
147 \r
148 void InsertTableWidget::updateParent()\r
149 {\r
150         bool status = lyxView_.getLyXFunc().getStatus(FuncRequest(LFUN_TABULAR_INSERT)).enabled();\r
151         parentWidget()->setEnabled(status);\r
152 }\r
153 \r
154 \r
155 } // namespace frontend\r
156 } // namespace lyx\r
157 \r
158 #include "InsertTableWidget_moc.cpp"\r