floatplacement.C
iconpalette.C
lengthcombo.C
+ InsertTableWidget.C
panelstack.C
QAboutDialog.C
QBibitemDialog.C
--- /dev/null
+/**\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, FuncRequest const & func, QWidget * parent)\r
+ : QWidget(parent, Qt::Popup), colwidth_(20), rowheight_(12), lyxView_(lyxView), func_(func)\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
+\r
+ QString status = QString("%1x%2").arg(bottom_).arg(right_);\r
+ QToolTip::showText(event->globalPos(), status , this); \r
+}\r
+\r
+\r
+bool InsertTableWidget::event(QEvent * event)\r
+{\r
+ if (event->type() == QEvent::MouseMove) {\r
+ QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);\r
+ mouseMoveEvent(me);\r
+ return true;\r
+ } else if (event->type() == QEvent::MouseButtonRelease) {\r
+ QMouseEvent * me = dynamic_cast<QMouseEvent *>(event);\r
+ mouseReleaseEvent(me);\r
+ return true;\r
+ } else if (event->type() == QEvent::MouseButtonPress) {\r
+ // swallow this one...\r
+ return true;\r
+ } else if (event->type() == QEvent::Leave) {\r
+ bottom_ = 0;\r
+ right_ = 0;\r
+ update();\r
+ return true;\r
+ }\r
+ return QWidget::event(event);\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
+ FuncStatus const status = lyxView_.getLyXFunc().getStatus(func_);\r
+ parentWidget()->setEnabled(status.enabled());\r
+}\r
+\r
+\r
+} // namespace frontend\r
+} // namespace lyx\r
+\r
+#include "InsertTableWidget_moc.cpp"\r
--- /dev/null
+// -*- C++ -*-\r
+/**\r
+ * \file InsertTableWidget.h\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
+\r
+#ifndef INSERTTABLEWIDGET_H\r
+#define INSERTTABLEWIDGET_H\r
+\r
+#include "frontends/LyXView.h"\r
+#include <QWidget>\r
+\r
+class QSize;\r
+\r
+namespace lyx {\r
+namespace frontend {\r
+\r
+\r
+class InsertTableWidget : public QWidget {\r
+ Q_OBJECT\r
+public:\r
+\r
+ InsertTableWidget(LyXView &, FuncRequest const &, QWidget *);\r
+\r
+signals:\r
+ //! widget is visible\r
+ void visible(bool);\r
+\r
+public slots:\r
+ //! show the widget\r
+ void show(bool);\r
+ //! enable/disable parent\r
+ void updateParent();\r
+\r
+protected slots:\r
+ bool event(QEvent *);\r
+ void mouseMoveEvent(QMouseEvent *);\r
+ void mouseReleaseEvent(QMouseEvent *);\r
+ void paintEvent(QPaintEvent *);\r
+ \r
+private:\r
+ //! update the geometry\r
+ void resetGeometry();\r
+ //! initialize parameters to default values\r
+ void init();\r
+ //! draw the grid\r
+ void drawGrid(int rows, int cols, Qt::GlobalColor color);\r
+\r
+ //! colwidth in pixels\r
+ int colwidth_;\r
+ //! rowheight in pixels\r
+ int rowheight_;\r
+ //! total rows\r
+ int rows_;\r
+ //! total cols\r
+ int cols_;\r
+ //! row of pointer\r
+ int bottom_;\r
+ //! column of pointer\r
+ int right_; \r
+ //! the tabular_insert funcrequest\r
+ FuncRequest const & func_ ;\r
+ //! the lyxview we need to dispatch the funcrequest\r
+ LyXView & lyxView_;\r
+ //! widget under mouse\r
+ bool underMouse_;\r
+};\r
+\r
+} // namespace frontend\r
+} // namespace lyx\r
+\r
+#endif // INSERTTABLEWIDGET_H\r
FileDialog_private.C FileDialog_private.h \
floatplacement.C floatplacement.h \
iconpalette.C iconpalette.h \
+ InsertTableWidget.C InsertTableWidget.h \
lengthcombo.C lengthcombo.h \
panelstack.C panelstack.h \
QAboutDialog.C QAboutDialog.h \
#include "QLToolbar.h"
#include "QLAction.h"
#include "qt_helpers.h"
+#include "InsertTableWidget.h"
#include <QComboBox>
#include <QToolBar>
#include <QToolButton>
#include <QAction>
-//Added by qt3to4:
#include <QPixmap>
using std::endl;
/// \todo find a Qt4 equivalent to setHorizontalStretchable(true);
//toolbar_->setHorizontalStretchable(true);
break;
+ case LFUN_TABULAR_INSERT: {
+ QToolButton * tb = new QToolButton;
+ tb->setCheckable(true);
+ tb->setIcon(QPixmap(toqstr(toolbarbackend.getIcon(func))));
+ tb->setToolTip(toqstr(tooltip));
+ tb->setFocusPolicy(Qt::NoFocus);
+ InsertTableWidget * iv = new InsertTableWidget(owner_, func, tb);
+ connect(tb, SIGNAL(toggled(bool)), iv, SLOT(show(bool)));
+ connect(iv, SIGNAL(visible(bool)), tb, SLOT(setChecked(bool)));
+ connect(this, SIGNAL(updated()), iv, SLOT(updateParent()));
+ toolbar_->addWidget(tb);
+ break;
+ }
default: {
if (owner_.getLyXFunc().getStatus(func).unknown())
break;
QLAction * action = new QLAction(owner_, toolbarbackend.getIcon(func), "", func, tooltip);
toolbar_->addAction(action);
ActionVector.push_back(action);
-
break;
- }
+ }
}
}
{
for (size_t i=0; i<ActionVector.size(); ++i)
ActionVector[i]->update();
+
+ emit updated();
}
void update();
LayoutBox * layout() const { return layout_.get(); }
+signals:
+ void updated();
+
private:
std::vector<QLAction *> ActionVector;
{
setupUi(this);
- table->setMinimumSize(100,100);
rowsSB->setValue(5);
columnsSB->setValue(5);
form_, SLOT(slotOK()));
connect(closePB, SIGNAL(clicked()),
form_, SLOT(slotClose()));
-
- connect( table, SIGNAL( rowsChanged(int) ), rowsSB, SLOT( setValue(int) ) );
- connect( table, SIGNAL( colsChanged(int) ), columnsSB, SLOT( setValue(int) ) );
- connect( rowsSB, SIGNAL( valueChanged(int) ), table, SLOT( setNumberRows(int) ) );
- connect( columnsSB, SIGNAL( valueChanged(int) ), table, SLOT( setNumberColumns(int) ) );
- connect( rowsSB, SIGNAL( valueChanged(int) ), this, SLOT( rowsChanged(int) ) );
- connect( columnsSB, SIGNAL( valueChanged(int) ), this, SLOT( columnsChanged(int) ) );
+ connect(rowsSB, SIGNAL(valueChanged(int)),
+ this, SLOT( rowsChanged(int)));
+ connect(columnsSB, SIGNAL(valueChanged(int)),
+ this, SLOT(columnsChanged(int)));
}
<rect>
<x>0</x>
<y>0</y>
- <width>272</width>
- <height>243</height>
+ <width>198</width>
+ <height>125</height>
</rect>
</property>
<property name="windowTitle" >
<property name="sizeGripEnabled" >
<bool>true</bool>
</property>
- <layout class="QVBoxLayout" >
+ <layout class="QGridLayout" >
<property name="margin" >
- <number>11</number>
+ <number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
- <item>
- <layout class="QHBoxLayout" >
- <property name="margin" >
- <number>0</number>
+ <item row="2" column="1" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Vertical</enum>
</property>
- <property name="spacing" >
- <number>6</number>
+ <property name="sizeHint" >
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
</property>
- <item>
- <widget class="QLabel" name="rowsL" >
- <property name="toolTip" >
- <string>Number of rows</string>
- </property>
- <property name="text" >
- <string>&Rows:</string>
- </property>
- <property name="buddy" >
- <cstring>rowsSB</cstring>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="rowsSB" >
- <property name="toolTip" >
- <string>Number of rows</string>
- </property>
- <property name="buttonSymbols" >
- <enum>QAbstractSpinBox::PlusMinus</enum>
- </property>
- <property name="maximum" >
- <number>511</number>
- </property>
- <property name="minimum" >
- <number>1</number>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="columnsL" >
- <property name="toolTip" >
- <string>Number of columns</string>
- </property>
- <property name="text" >
- <string>&Columns:</string>
- </property>
- <property name="buddy" >
- <cstring>columnsSB</cstring>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="columnsSB" >
- <property name="toolTip" >
- <string>Number of columns</string>
- </property>
- <property name="buttonSymbols" >
- <enum>QAbstractSpinBox::PlusMinus</enum>
- </property>
- <property name="maximum" >
- <number>511</number>
- </property>
- <property name="minimum" >
- <number>1</number>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QGridLayout" >
- <property name="margin" >
- <number>0</number>
- </property>
- <property name="spacing" >
- <number>6</number>
- </property>
- <item row="0" column="1" >
- <spacer>
- <property name="orientation" >
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="0" >
- <spacer>
- <property name="orientation" >
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
- </property>
- <property name="sizeHint" >
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="0" column="0" >
- <widget class="EmptyTable" name="table" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>5</hsizetype>
- <vsizetype>5</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize" >
- <size>
- <width>100</width>
- <height>100</height>
- </size>
- </property>
- <property name="maximumSize" >
- <size>
- <width>600</width>
- <height>600</height>
- </size>
- </property>
- <property name="focusPolicy" >
- <enum>Qt::NoFocus</enum>
- </property>
- <property name="toolTip" >
- <string>Resize this to the correct table dimensions</string>
- </property>
- </widget>
- </item>
- </layout>
+ </spacer>
</item>
- <item>
+ <item row="3" column="0" colspan="3" >
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</item>
</layout>
</item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="rowsL" >
+ <property name="toolTip" >
+ <string>Number of rows</string>
+ </property>
+ <property name="text" >
+ <string>&Rows:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>rowsSB</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>58</width>
+ <height>22</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="columnsL" >
+ <property name="toolTip" >
+ <string>Number of columns</string>
+ </property>
+ <property name="text" >
+ <string>&Columns:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>columnsSB</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QSpinBox" name="rowsSB" >
+ <property name="toolTip" >
+ <string>Number of rows</string>
+ </property>
+ <property name="buttonSymbols" >
+ <enum>QAbstractSpinBox::PlusMinus</enum>
+ </property>
+ <property name="maximum" >
+ <number>511</number>
+ </property>
+ <property name="minimum" >
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QSpinBox" name="columnsSB" >
+ <property name="toolTip" >
+ <string>Number of columns</string>
+ </property>
+ <property name="buttonSymbols" >
+ <enum>QAbstractSpinBox::PlusMinus</enum>
+ </property>
+ <property name="maximum" >
+ <number>511</number>
+ </property>
+ <property name="minimum" >
+ <number>1</number>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<pixmapfunction></pixmapfunction>
- <customwidgets>
- <customwidget>
- <class>EmptyTable</class>
- <extends></extends>
- <header>emptytable.h</header>
- <container>0</container>
- <pixmap></pixmap>
- </customwidget>
- </customwidgets>
<tabstops>
<tabstop>rowsSB</tabstop>
<tabstop>columnsSB</tabstop>
- <tabstop>table</tabstop>
<tabstop>okPB</tabstop>
<tabstop>closePB</tabstop>
</tabstops>