]> git.lyx.org Git - features.git/commitdiff
Add new tableinsertwidget
authorEdwin Leuven <e.leuven@gmail.com>
Wed, 31 May 2006 12:53:05 +0000 (12:53 +0000)
committerEdwin Leuven <e.leuven@gmail.com>
Wed, 31 May 2006 12:53:05 +0000 (12:53 +0000)
+ Remove table widget from inserttable dialog

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13972 a592a061-630c-0410-9148-cb99ea01b6c8

development/scons/SConscript
src/frontends/qt4/InsertTableWidget.C [new file with mode: 0644]
src/frontends/qt4/InsertTableWidget.h [new file with mode: 0644]
src/frontends/qt4/Makefile.dialogs
src/frontends/qt4/QLToolbar.C
src/frontends/qt4/QLToolbar.h
src/frontends/qt4/QTabularCreateDialog.C
src/frontends/qt4/ui/QTabularCreateUi.ui

index 3ca70f9130ed4b0c4c06d50f6b6014bec5d5a0a0..fc71962353fddcfd8498a5efbc213e1acddbca4e 100644 (file)
@@ -856,6 +856,7 @@ if build_qt4:
     floatplacement.C
     iconpalette.C
     lengthcombo.C
+       InsertTableWidget.C
     panelstack.C
     QAboutDialog.C
     QBibitemDialog.C
diff --git a/src/frontends/qt4/InsertTableWidget.C b/src/frontends/qt4/InsertTableWidget.C
new file mode 100644 (file)
index 0000000..e28ab2a
--- /dev/null
@@ -0,0 +1,171 @@
+/**\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
diff --git a/src/frontends/qt4/InsertTableWidget.h b/src/frontends/qt4/InsertTableWidget.h
new file mode 100644 (file)
index 0000000..e3fc0f5
--- /dev/null
@@ -0,0 +1,78 @@
+// -*- 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
index 340542f9c6169f369d7e453d25ccec39fd7e1159..2d6dc8ab8d47a004c665f811dd066b5cd1ef90d6 100644 (file)
@@ -77,6 +77,7 @@ MOCFILES = \
        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 \
index 2a24e35c45f73dac0f9a93bac1509ceecee8aec3..945edbe796f2211de0fd4bfd7cd32f679718b446 100644 (file)
 #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;
@@ -235,6 +235,19 @@ void QLToolbar::add(FuncRequest const & func, string const & tooltip)
                /// \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;
@@ -242,9 +255,8 @@ void QLToolbar::add(FuncRequest const & func, string const & tooltip)
                QLAction * action = new QLAction(owner_, toolbarbackend.getIcon(func), "", func, tooltip);
                toolbar_->addAction(action);
                ActionVector.push_back(action);
-
                break;
-       }
+               }
        }
 }
 
@@ -265,6 +277,8 @@ void QLToolbar::update()
 {
        for (size_t i=0; i<ActionVector.size(); ++i)
                ActionVector[i]->update();
+
+       emit updated();
 }
 
 
index fe5dbc0346c611fa0e723487bf598f2f3b15f213..892923ca3e002bd9ae3bed5c423d93deb3fa3295 100644 (file)
@@ -71,6 +71,9 @@ public:
        void update();
        LayoutBox * layout() const { return layout_.get(); }
 
+signals:
+       void updated();
+
 private:
 
        std::vector<QLAction *> ActionVector;
index 173581f9a75c5fad5a01eb35c5868cc2a797b4d6..27e96404dca264193db8834f46adf9defcdee304 100644 (file)
@@ -26,7 +26,6 @@ QTabularCreateDialog::QTabularCreateDialog(QTabularCreate * form)
 {
        setupUi(this);
 
-       table->setMinimumSize(100,100);
        rowsSB->setValue(5);
        columnsSB->setValue(5);
 
@@ -34,13 +33,10 @@ QTabularCreateDialog::QTabularCreateDialog(QTabularCreate * form)
                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)));
 }
 
 
index 2c4366659986215686e99ab402642037d1410cd5..d4a85d2d14972f6968a70282ea9a35365abdb40a 100644 (file)
@@ -8,8 +8,8 @@
    <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>&amp;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>&amp;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>&amp;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>&amp;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>