]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/InsertTableWidget.C
enable Font cache only for MacOSX and inline width() for other platform.
[lyx.git] / src / frontends / qt4 / InsertTableWidget.C
index 270bf3820e833cc586d13d25f744376e51689124..424b5dbb1f57bbd62607b27cf7b9f50b264993ca 100644 (file)
-/**\r
- * \file InsertTableWidget.C\r
- *\r
- * This file is part of LyX, the document processor.\r
- * Licence details can be found in the file COPYING.\r
- *\r
- * \author Edwin Leuven\r
- *\r
- * Full author contact details are available in file CREDITS.\r
- */\r
-\r
-#include <config.h>\r
-\r
-#include "BufferView.h"        // needed for lyxfunc\r
-#include "lyxfunc.h"\r
-#include "FuncStatus.h"\r
-#include "funcrequest.h"\r
-#include "LyXView.h"\r
-#include "debug.h"\r
-\r
-#include "qt_helpers.h"\r
-\r
-#include "InsertTableWidget.h"\r
-#include <QMouseEvent>\r
-#include <QString>\r
-#include <QToolTip>\r
-#include <QPainter>\r
-#include <QCoreApplication>\r
-\r
-\r
-namespace lyx {\r
-namespace frontend {\r
-\r
-InsertTableWidget::InsertTableWidget(LyXView & lyxView, QWidget * parent)\r
-       : QWidget(parent, Qt::Popup), colwidth_(20), rowheight_(12), lyxView_(lyxView)\r
-{\r
-       init();\r
-       setMouseTracking(true);\r
-}\r
-\r
-\r
-void InsertTableWidget::init()\r
-{\r
-       rows_ = 5;\r
-       cols_ = 5;\r
-       bottom_ = 0;\r
-       right_ = 0;\r
-       underMouse_ = false;\r
-}\r
-\r
-\r
-void InsertTableWidget::show(bool show)\r
-{\r
-       if (!show)\r
-               return;\r
-\r
-       init();\r
-       resetGeometry();\r
-       setVisible(true);\r
-       emit visible(true);\r
-}\r
-\r
-\r
-void InsertTableWidget::resetGeometry()\r
-{\r
-       QPoint p = parentWidget()->mapToGlobal(parentWidget()->geometry().bottomLeft());\r
-       setGeometry(p.x() - parentWidget()->pos().x(), \r
-                               p.y() - parentWidget()->pos().y(),\r
-                               cols_ * colwidth_ + 1, rows_ * rowheight_ + 1);\r
-}\r
-\r
-\r
-void InsertTableWidget::mouseMoveEvent(QMouseEvent * event)\r
-{\r
-       // do this ourselves because when the mouse leaves the app\r
-       // we get an enter event (ie underMouse() is true)!!\r
-       underMouse_ = geometry().contains(event->globalPos());\r
-       if (!underMouse_)\r
-               return;\r
-\r
-       int const r0 = right_;\r
-       int const b0 = bottom_;\r
-       right_ = event->x()/colwidth_ + 1;\r
-       bottom_ = event->y()/rowheight_ + 1;\r
-\r
-       if (bottom_ == rows_) {\r
-               ++rows_;\r
-               resetGeometry();\r
-       }\r
-\r
-       if (right_ == cols_) {\r
-               ++cols_;\r
-               resetGeometry();\r
-       }\r
-\r
-       if (bottom_ != b0 || right_ != r0) {\r
-               update();\r
-               QString status = QString("%1x%2").arg(bottom_).arg(right_);\r
-               QToolTip::showText(event->globalPos(), status , this);\r
-       }\r
-}\r
-\r
-\r
-bool InsertTableWidget::event(QEvent * event)\r
-{\r
-       switch (event->type()) {\r
-       case QEvent::MouseMove: {\r
-               QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);\r
-               mouseMoveEvent(me);\r
-               return true;\r
-               }\r
-       case QEvent::MouseButtonRelease: {\r
-               QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);\r
-               mouseReleaseEvent(me);\r
-               return true;\r
-               }\r
-       case QEvent::MouseButtonPress: {\r
-               // swallow this one...\r
-               return true;\r
-               }\r
-       case QEvent::Leave: {\r
-               bottom_ = 0;\r
-               right_ = 0;\r
-               update();\r
-               return true;\r
-               }\r
-       default:\r
-               return QWidget::event(event);\r
-       }\r
-}\r
-\r
-\r
-void InsertTableWidget::mouseReleaseEvent(QMouseEvent * event)\r
-{\r
-       if (underMouse_) {\r
-               QString const data = QString("%1 %2").arg(bottom_).arg(right_);\r
-               lyxView_.getLyXFunc().dispatch(FuncRequest(LFUN_TABULAR_INSERT, fromqstr(data)));\r
-       }\r
-       emit visible(false);\r
-       close();\r
-}\r
-\r
-\r
-void InsertTableWidget::paintEvent(QPaintEvent * event)\r
-{\r
-       drawGrid(rows_, cols_, Qt::white);\r
-       if (underMouse_)\r
-               drawGrid(bottom_, right_, Qt::darkBlue);\r
-}\r
-\r
-\r
-void InsertTableWidget::drawGrid(int const rows, int const cols, Qt::GlobalColor const color)\r
-{\r
-       QPainter painter(this);\r
-       painter.setPen(Qt::darkGray);\r
-       painter.setBrush(color);\r
-\r
-       for (int r = 0 ; r < rows ; ++r ) {\r
-               for (int c = 0 ; c < cols ; ++c ) {\r
-                       QRect rectangle(c * colwidth_, r * rowheight_, colwidth_, rowheight_);\r
-                       painter.drawRect(rectangle);\r
-               }\r
-       }\r
-}\r
-\r
-\r
-void InsertTableWidget::updateParent()\r
-{\r
-       bool status = lyxView_.getLyXFunc().getStatus(FuncRequest(LFUN_TABULAR_INSERT)).enabled();\r
-       parentWidget()->setEnabled(status);\r
-}\r
-\r
-\r
-} // namespace frontend\r
-} // namespace lyx\r
-\r
-#include "InsertTableWidget_moc.cpp"\r
+/**
+ * \file InsertTableWidget.C
+ *
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Edwin Leuven
+ *
+ * Full author contact details are available in file CREDITS.
+ */
+
+#include <config.h>
+
+#include "BufferView.h"        // needed for lyxfunc
+#include "lyxfunc.h"
+#include "FuncStatus.h"
+#include "funcrequest.h"
+#include "LyXView.h"
+
+#include "qt_helpers.h"
+
+#include "InsertTableWidget.h"
+#include <QMouseEvent>
+#include <QString>
+#include <QToolTip>
+#include <QPainter>
+
+
+namespace lyx {
+namespace frontend {
+
+InsertTableWidget::InsertTableWidget(LyXView & lyxView, QWidget * parent)
+       : QWidget(parent, Qt::Popup), colwidth_(20), rowheight_(12), lyxView_(lyxView)
+{
+       init();
+       setMouseTracking(true);
+}
+
+
+void InsertTableWidget::init()
+{
+       rows_ = 5;
+       cols_ = 5;
+       bottom_ = 0;
+       right_ = 0;
+       underMouse_ = false;
+}
+
+
+void InsertTableWidget::show(bool show)
+{
+       if (!show)
+               return;
+
+       init();
+       resetGeometry();
+       setVisible(true);
+       // emit signal
+       visible(true);
+}
+
+
+void InsertTableWidget::resetGeometry()
+{
+       QPoint p = parentWidget()->mapToGlobal(parentWidget()->geometry().bottomLeft());
+       setGeometry(p.x() - parentWidget()->pos().x(),
+                               p.y() - parentWidget()->pos().y(),
+                               cols_ * colwidth_ + 1, rows_ * rowheight_ + 1);
+}
+
+
+void InsertTableWidget::mouseMoveEvent(QMouseEvent * event)
+{
+       // do this ourselves because when the mouse leaves the app
+       // we get an enter event (ie underMouse() is true)!!
+       underMouse_ = geometry().contains(event->globalPos());
+       if (!underMouse_) {
+               bottom_ = 0;
+               right_ = 0;
+               update();
+               return;
+       }
+
+       int const r0 = right_;
+       int const b0 = bottom_;
+       right_ = event->x() / colwidth_ + 1;
+       bottom_ = event->y() / rowheight_ + 1;
+
+       if (bottom_ == rows_) {
+               ++rows_;
+               resetGeometry();
+       }
+
+       if (right_ == cols_) {
+               ++cols_;
+               resetGeometry();
+       }
+
+       if (bottom_ != b0 || right_ != r0) {
+               update();
+               QString const status = QString("%1x%2").arg(bottom_).arg(right_);
+               QToolTip::showText(event->globalPos(), status , this);
+       }
+}
+
+
+void InsertTableWidget::mouseReleaseEvent(QMouseEvent * /*event*/)
+{
+       if (underMouse_) {
+               QString const data = QString("%1 %2").arg(bottom_).arg(right_);
+               lyxView_.getLyXFunc().dispatch(FuncRequest(LFUN_TABULAR_INSERT, fromqstr(data)));
+       }
+       // emit signal
+       visible(false);
+       close();
+}
+
+
+void InsertTableWidget::mousePressEvent(QMouseEvent * /*event*/)
+{
+       // swallow this one
+}
+
+
+void InsertTableWidget::paintEvent(QPaintEvent * /*event*/)
+{
+       drawGrid(rows_, cols_, Qt::white);
+       if (underMouse_)
+               drawGrid(bottom_, right_, Qt::darkBlue);
+}
+
+
+void InsertTableWidget::drawGrid(int const rows, int const cols, Qt::GlobalColor const color)
+{
+       QPainter painter(this);
+       painter.setPen(Qt::darkGray);
+       painter.setBrush(color);
+
+       for (int r = 0 ; r < rows ; ++r ) {
+               for (int c = 0 ; c < cols ; ++c ) {
+                       QRect rectangle(c * colwidth_, r * rowheight_, colwidth_, rowheight_);
+                       painter.drawRect(rectangle);
+               }
+       }
+}
+
+
+void InsertTableWidget::updateParent()
+{
+       bool status = lyxView_.getLyXFunc().getStatus(FuncRequest(LFUN_TABULAR_INSERT)).enabled();
+       parentWidget()->setEnabled(status);
+}
+
+
+} // namespace frontend
+} // namespace lyx
+
+#include "InsertTableWidget_moc.cpp"