2 * \file InsertTableWidget.cpp
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
9 * Full author contact details are available in file CREDITS.
14 #include "InsertTableWidget.h"
17 #include "qt_helpers.h"
19 // DispatchResult.h is needed by the windows compiler because lyx::dispatch
20 // returns a DispatchResult const reference. Gcc does not complain. Weird...
21 #include "DispatchResult.h"
22 #include "FuncStatus.h"
23 #include "FuncRequest.h"
26 #include <QMouseEvent>
35 InsertTableWidget::InsertTableWidget(QWidget * parent)
36 : QWidget(parent, Qt::Popup), colwidth_(15), rowheight_(15), minrows_(5), mincols_(5)
39 setMouseTracking(true);
43 void InsertTableWidget::init()
53 void InsertTableWidget::show(bool show)
66 void InsertTableWidget::hideEvent(QHideEvent * event)
68 QWidget::hideEvent(event);
73 void InsertTableWidget::resetGeometry()
75 QPoint p = parentWidget()->mapToGlobal(parentWidget()->geometry().bottomLeft());
76 setGeometry(p.x() - parentWidget()->pos().x(),
77 p.y() - parentWidget()->pos().y(),
78 cols_ * colwidth_ + 1, rows_ * rowheight_ + 1);
82 void InsertTableWidget::mouseMoveEvent(QMouseEvent * event)
84 // do this ourselves because when the mouse leaves the app
85 // we get an enter event (ie underMouse() is true)!!
86 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
87 underMouse_ = geometry().contains(event->globalPosition().toPoint());
89 underMouse_ = geometry().contains(event->globalPos());
98 int const r0 = right_;
99 int const b0 = bottom_;
100 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
101 right_ = event->position().x() / colwidth_ + 1;
102 bottom_ = event->position().y() / rowheight_ + 1;
104 right_ = event->x() / colwidth_ + 1;
105 bottom_ = event->y() / rowheight_ + 1;
108 int const newrows = std::max(minrows_, bottom_ + 1);
109 if (rows_ != newrows) {
114 int const newcols = std::max(mincols_, right_ + 1);
115 if (cols_ != newcols) {
120 if (bottom_ != b0 || right_ != r0) {
122 QString const status = QString("%1x%2").arg(bottom_).arg(right_);
123 #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
124 QToolTip::showText(event->globalPosition().toPoint(), status , this);
126 QToolTip::showText(event->globalPos(), status , this);
132 void InsertTableWidget::mouseReleaseEvent(QMouseEvent * /*event*/)
135 QString const qdata = QString("%1 %2").arg(bottom_).arg(right_);
136 lyx::dispatch(FuncRequest(LFUN_TABULAR_INSERT, fromqstr(qdata)));
144 void InsertTableWidget::mousePressEvent(QMouseEvent * /*event*/)
150 void InsertTableWidget::paintEvent(QPaintEvent * /*event*/)
152 QPalette const palette = this->palette();
153 drawGrid(rows_, cols_, palette.base(), palette.text().color());
155 drawGrid(bottom_, right_, palette.highlight(),
156 palette.highlightedText().color());
160 void InsertTableWidget::drawGrid(int const rows, int const cols,
161 QBrush const fillBrush, QColor lineColor)
163 QPainter painter(this);
164 painter.setPen(lineColor);
165 painter.setBrush(fillBrush);
167 for (int r = 0 ; r < rows ; ++r ) {
168 for (int c = 0 ; c < cols ; ++c ) {
169 QRect rectangle(c * colwidth_, r * rowheight_, colwidth_, rowheight_);
170 painter.drawRect(rectangle);
176 void InsertTableWidget::updateParent()
178 bool status = getStatus(FuncRequest(LFUN_TABULAR_INSERT)).enabled();
179 parentWidget()->setEnabled(status);
183 } // namespace frontend
186 #include "moc_InsertTableWidget.cpp"