Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <qheaderview.h>
00025 #include "FEUITable.h"
00026
00027 FEUITableDelegate::FEUITableDelegate(QObject *parent)
00028 : QItemDelegate(parent) {}
00029
00030 QWidget *FEUITableDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem&,
00031 const QModelIndex &index) const
00032 {
00033 QLineEdit *editor = new QLineEdit(parent);
00034 editor->setReadOnly(true);
00035
00036 connect(editor, SIGNAL(editingFinished()), this, SLOT(commitAndCloseEditor()));
00037 return editor;
00038 }
00039
00040 void FEUITableDelegate::commitAndCloseEditor()
00041 {
00042 QLineEdit *editor = qobject_cast<QLineEdit *>(sender());
00043 emit commitData(editor);
00044 emit closeEditor(editor);
00045 }
00046
00047 void FEUITableDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
00048 {
00049 QLineEdit *edit = qobject_cast<QLineEdit *>(editor);
00050 if (edit)
00051 {
00052 edit->setText(index.model()->data(index, Qt::EditRole).toString());
00053 }
00054 }
00055
00056 void FEUITableDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
00057 const QModelIndex &index) const
00058 {
00059 QLineEdit *edit = qobject_cast<QLineEdit *>(editor);
00060 if (edit)
00061 {
00062 model->setData(index, edit->text());
00063 }
00064 }
00065
00066 FEUITableItem::FEUITableItem()
00067 : QTableWidgetItem() {}
00068
00069 FEUITableItem::FEUITableItem(const QString &text)
00070 : QTableWidgetItem(text) {}
00071
00072 QTableWidgetItem *FEUITableItem::clone() const
00073 {
00074 FEUITableItem *item = new FEUITableItem();
00075 *item = *this;
00076 return item;
00077 }
00078
00079 QVariant FEUITableItem::data(int role) const
00080 {
00081 if (role == Qt::DisplayRole)
00082 return display();
00083
00084 QString t = display().toString();
00085 bool isNumber = false;
00086 int number = t.toInt(&isNumber);
00087
00088 if (role == Qt::TextColorRole) {
00089 if (!isNumber)
00090 return qVariantFromValue(QColor(Qt::black));
00091 else if (number < 0)
00092 return qVariantFromValue(QColor(Qt::red));
00093 return qVariantFromValue(QColor(Qt::blue));
00094 }
00095
00096 if (role == Qt::TextAlignmentRole)
00097 if (!t.isEmpty() && (t.at(0).isNumber() || t.at(0) == '-'))
00098 return (int)(Qt::AlignRight | Qt::AlignVCenter);
00099
00100 return QTableWidgetItem::data(role);
00101 }
00102
00103 void FEUITableItem::setData(int role, const QVariant &value)
00104 {
00105 QTableWidgetItem::setData(role, value);
00106 if (tableWidget())
00107 tableWidget()->viewport()->update();
00108 }
00109
00110 QVariant FEUITableItem::display() const
00111 {
00112 return QVariant();
00113 }
00114
00115 void FEUITable::newRow()
00116 {
00117
00118 int cnt = this->rowCount();
00119 cnt++;
00120 this->setRowCount(cnt);
00121 }
00122
00123 int FEUITable::edit(int row, QString colByName, QString text)
00124 {
00125 int col = -1;
00126
00127 if (row > this->rowCount()-1)
00128 return -1;
00129
00130
00131 for (int i = 0; i < m_colList.size(); i++)
00132 {
00133 if (colByName == m_colList[i])
00134 {
00135 col = i;
00136 break;
00137 }
00138 }
00139
00140 if (col >= 0)
00141 {
00142
00143 QTableWidgetItem *item = this->item(row, col);
00144 if (!item)
00145 this->setItem(row, col, new QTableWidgetItem(text));
00146 else
00147 item->setText(text);
00148 return 0;
00149 }
00150 else
00151 return -1;
00152 }
00153
00154
00155 FEUITable::FEUITable(QStringList columns, QWidget *parent)
00156 : QTableWidget(parent)
00157 {
00158
00159 m_colList = columns;
00160 int cols = columns.size();
00161
00162 QFont fnt;
00163 fnt.setFixedPitch(true);
00164 fnt.setStyleHint(QFont::System);
00165
00166 fnt.setFamily("Misc Fixed");
00167 setFont(fnt);
00168
00169 for (int c = 0; c < cols; ++c)
00170 {
00171 this->insertColumn(c);
00172 QString colName;
00173 colName = columns[c];
00174 this->setHorizontalHeaderItem(c, new QTableWidgetItem(colName));
00175 }
00176
00177 this->setItemPrototype(item(1, 1));
00178 this->setItemDelegate(new FEUITableDelegate());
00179 #if !defined(QT_NO_DBUS) && defined(Q_OS_UNIX)
00180 new FEUITableAdaptor(this);
00181 #endif
00182
00183 QHeaderView *h = this->verticalHeader();
00184 h->hide();
00185
00186 h = this->horizontalHeader();
00187 h->stretchLastSection();
00188
00189 h->setResizeMode(QHeaderView::Stretch);
00190 createActions();
00191 setupContextMenu();
00192 }
00193
00194 FEUITable::~FEUITable()
00195 {
00196
00197 }
00198
00199 void FEUITable::createActions()
00200 {
00201 clearAction = new QAction(tr("Clear"), this);
00202 clearAction->setShortcut(Qt::Key_Delete);
00203 connect(clearAction, SIGNAL(triggered()), this, SLOT(clear()));
00204 }
00205
00206 void FEUITable::clear()
00207 {
00208 clearContents();
00209 setRowCount(0);
00210 }
00211
00212 void FEUITable::setupContextMenu()
00213 {
00214 addAction(clearAction);
00215 setContextMenuPolicy(Qt::ActionsContextMenu);
00216 }
00217
00218 void FEUITable::resizeEvent(QResizeEvent *event)
00219 {
00220
00221
00222
00223 QHeaderView *h = horizontalHeader();
00224 h->stretchLastSection();
00225 }