2 * \file InsertTableWidget.C
\r
4 * This file is part of LyX, the document processor.
\r
5 * Licence details can be found in the file COPYING.
\r
7 * \author Edwin Leuven
\r
9 * Full author contact details are available in file CREDITS.
\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
21 #include "qt_helpers.h"
\r
23 #include "InsertTableWidget.h"
\r
24 #include <QMouseEvent>
\r
28 #include <QCoreApplication>
\r
32 namespace frontend {
\r
34 InsertTableWidget::InsertTableWidget(LyXView & lyxView, FuncRequest const & func, QWidget * parent)
\r
35 : QWidget(parent, Qt::Popup), colwidth_(20), rowheight_(12), lyxView_(lyxView), func_(func)
\r
38 setMouseTracking(true);
\r
42 void InsertTableWidget::init()
\r
48 underMouse_ = false;
\r
52 void InsertTableWidget::show(bool show)
\r
64 void InsertTableWidget::resetGeometry()
\r
66 QPoint p = parentWidget()->mapToGlobal(parentWidget()->geometry().bottomLeft());
\r
67 setGeometry(p.x() - parentWidget()->pos().x(),
\r
68 p.y() - parentWidget()->pos().y(),
\r
69 cols_ * colwidth_ + 1, rows_ * rowheight_ + 1);
\r
73 void InsertTableWidget::mouseMoveEvent(QMouseEvent * event)
\r
75 // do this ourselves because when the mouse leaves the app
\r
76 // we get an enter event (ie underMouse() is true)!!
\r
77 underMouse_ = geometry().contains(event->globalPos());
\r
81 int const r0 = right_;
\r
82 int const b0 = bottom_;
\r
83 right_ = event->x()/colwidth_ + 1;
\r
84 bottom_ = event->y()/rowheight_ + 1;
\r
86 if (bottom_ == rows_) {
\r
91 if (right_ == cols_) {
\r
96 if (bottom_ != b0 || right_ != r0)
\r
99 QString status = QString("%1x%2").arg(bottom_).arg(right_);
\r
100 QToolTip::showText(event->globalPos(), status , this);
\r
104 bool InsertTableWidget::event(QEvent * event)
\r
106 if (event->type() == QEvent::MouseMove) {
\r
107 QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);
\r
108 mouseMoveEvent(me);
\r
110 } else if (event->type() == QEvent::MouseButtonRelease) {
\r
111 QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);
\r
112 mouseReleaseEvent(me);
\r
114 } else if (event->type() == QEvent::MouseButtonPress) {
\r
115 // swallow this one...
\r
117 } else if (event->type() == QEvent::Leave) {
\r
123 return QWidget::event(event);
\r
127 void InsertTableWidget::mouseReleaseEvent(QMouseEvent * event)
\r
130 QString const data = QString("%1 %2").arg(bottom_).arg(right_);
\r
131 lyxView_.getLyXFunc().dispatch(FuncRequest(LFUN_TABULAR_INSERT, fromqstr(data)));
\r
133 emit visible(false);
\r
138 void InsertTableWidget::paintEvent(QPaintEvent * event)
\r
140 drawGrid(rows_, cols_, Qt::white);
\r
142 drawGrid(bottom_, right_, Qt::darkBlue);
\r
146 void InsertTableWidget::drawGrid(int const rows, int const cols, Qt::GlobalColor const color)
\r
148 QPainter painter(this);
\r
149 painter.setPen(Qt::darkGray);
\r
150 painter.setBrush(color);
\r
152 for (int r = 0 ; r < rows ; ++r ) {
\r
153 for (int c = 0 ; c < cols ; ++c ) {
\r
154 QRect rectangle(c * colwidth_, r * rowheight_, colwidth_, rowheight_);
\r
155 painter.drawRect(rectangle);
\r
161 void InsertTableWidget::updateParent()
\r
163 FuncStatus const status = lyxView_.getLyXFunc().getStatus(func_);
\r
164 parentWidget()->setEnabled(status.enabled());
\r
168 } // namespace frontend
\r
171 #include "InsertTableWidget_moc.cpp"
\r