summaryrefslogtreecommitdiffstats
path: root/scribus/sctablewidget.cpp
diff options
context:
space:
mode:
authorcraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
committercraig <craig@11d20701-8431-0410-a711-e3c959e3b870>2012-01-01 11:40:09 +0000
commit7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch)
tree4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/sctablewidget.cpp
downloadscribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz
scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/sctablewidget.cpp')
-rw-r--r--scribus/sctablewidget.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/scribus/sctablewidget.cpp b/scribus/sctablewidget.cpp
new file mode 100644
index 0000000..1edfac8
--- /dev/null
+++ b/scribus/sctablewidget.cpp
@@ -0,0 +1,96 @@
+/*
+For general Scribus (>=1.3.2) copyright and licensing information please refer
+to the COPYING file provided with the program. Following this notice may exist
+a copyright and/or license notice that predates the release of Scribus 1.3.2
+for which a new license (GPL+exception) is in place.
+*/
+#include "sctablewidget.h"
+
+//Widgets supported
+#include <QComboBox>
+#include <QCheckBox>
+//Other includes
+
+ScTableWidget::ScTableWidget(QWidget *parent) : QTableWidget(parent)
+{
+}
+
+ScTableWidget::ScTableWidget( int rows, int columns, QWidget *parent) : QTableWidget(rows, columns, parent)
+{
+}
+
+ScTableWidget::~ScTableWidget()
+{
+}
+
+bool ScTableWidget::eventFilter(QObject *obj, QEvent *event)
+{
+ if (event->type() == QEvent::FocusIn && obj->isWidgetType())
+ {
+ QWidget* widget = qobject_cast<QWidget*>(obj);
+ if (widget)
+ {
+ QTableWidgetItem* item = itemAt(widget->pos());
+ if (item)
+ {
+ setCurrentItem(item);
+ }
+ }
+ }
+ //emulation of cellChanged event from QTableWidget
+ if (event->type() == QEvent::FocusOut && obj->isWidgetType())
+ {
+ int r=-1, c=-1;
+ QComboBox* combobox = qobject_cast<QComboBox*>(obj);
+ if (combobox)
+ {
+ if (widgetPositions.contains(combobox))
+ {
+ r=widgetPositions.value(combobox).first;
+ c=widgetPositions.value(combobox).second;
+ }
+ }
+ else
+ {
+ QCheckBox* checkbox = qobject_cast<QCheckBox*>(obj);
+ if (checkbox)
+ {
+ if (widgetPositions.contains(checkbox))
+ {
+ r=widgetPositions.value(checkbox).first;
+ c=widgetPositions.value(checkbox).second;
+ }
+ }
+ }
+ if (r!=-1 && c!=-1)
+ emit cellChanged(r,c);
+ }
+ return QTableWidget::eventFilter(obj, event);
+}
+
+void ScTableWidget::setCellWidget(int row, int column, QWidget * widget)
+{
+ widget->installEventFilter(this);
+ QTableWidget::setCellWidget(row, column, widget);
+ widgetPositions.insert(widget, QPair<int, int>(row, column));
+}
+
+#if QT_VERSION >= 0x040300
+void ScTableWidget::removeCellWidget ( int row, int column )
+{
+ QTableWidget::removeCellWidget(row, column);
+ QHash<QWidget*, QPair<int, int> >::const_iterator i = widgetPositions.constBegin();
+ QWidget* t=NULL;
+ while (i != widgetPositions.constEnd())
+ {
+ if (i.value().first==row && i.value().second==column)
+ {
+ t=i.key();
+ break;
+ }
+ ++i;
+ }
+ if (t!=NULL)
+ widgetPositions.remove(t);
+}
+#endif