Rev 202 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
#include "mymodel.h"
MyModel::MyModel(QObject *parent) :
QSqlTableModel(parent)
{
setEditStrategy(QSqlTableModel::OnManualSubmit);
icon_index = -1;
}
Qt::ItemFlags MyModel::flags(
const QModelIndex &index) const {
Qt::ItemFlags flags = QSqlTableModel::flags(index);
/***********************************************
if ((index.column() != 3) && (index.column() != 0))
flags |= Qt::ItemIsEditable;
//if (index.column() == 4)
// flags |= Qt::ItemIsUserCheckable;
else
{
if ((index.column() == 3) || (index.column() == 0)) flags &= ~Qt::ItemIsEditable; // çàïðåùàåì ðåäàêòèðîâàíèå òðåòüåãî ñòîëáöà
}
*************************************************/
if (bolleans_list.indexOf(index.column()) != -1)
{
flags |= Qt::ItemIsUserCheckable; // åñëè â ñòîëáöå òèï "BOOL", äåëàåì åãî âèáèðàåìûì
//flags |= Qt::ItemIsEnabled;
flags &= ~Qt::ItemIsEditable;
}
return flags; // òåêóùèé ñòîëáåö
}
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
bool lResult = false;
if (bolleans_list.indexOf(index.column()) != -1) {
lResult = QSqlTableModel::setData(index, value, Qt::EditRole);
MyModel::submitAll();
}
else
{
lResult = QSqlTableModel::setData(index, value, role);
if (lResult) {
QModelIndex newindex;
QSqlRecord rec = record(index.row());
if (value.isNull()) {
rec.setNull(index.column());
}
else rec.setValue(index.column(), value);
rec.setGenerated(index.column(), true);
lResult = updateRowInTable(index.row(), rec);
}
if (value.isNull()) {
select();
emit dataChanged(index, index);
}
}
return lResult;
}
QVariant MyModel::data(const QModelIndex &index, int role) const {
QHash<int, bool> check;
QVariant value = QSqlTableModel::data(index, role);
QList <int> keys;
QStringList values;
QList <int> files_keys;
QStringList files_values;
keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
values = pointers_map.values(); // ñïèñîê òàáëèö-õðàíèëèù îáúåêòîâ ðîäèòåëüñêèõ êëàññîâ
files_keys = files_map.keys(); // ñïèñîê íîìåðîâ ñòîëáöîâ, õðàíÿùèõ ôàéëû
files_values = files_map.values(); // ñïèñîê èìåò ñòîëáöîâ, õðàíÿùèõ ôàéëû
switch (role) {
case Qt::DisplayRole:
{
//if (check.contains(index.column()) && check.value(index.column()))
// return value.toInt() != 0 ? tr("Yes") : tr("No");
if (bolleans_list.indexOf(index.column()) != -1)
{
return value.toInt() != 0 ? tr("Äà") : tr("Íåò"); // äëÿ êîëîíîê ñ òèïîì "BOOL"
}
int index_of_list;
index_of_list = keys.indexOf(index.column());
if (index_of_list == -1){ // ñòîëáåö íå ÿâëÿåòñÿ óêàçàòåëåì, ïðîâåðèì, ìîæåò îí õðàíèò ôàéë
index_of_list = files_keys.indexOf(index.column());
if (index_of_list == -1) return value; // íåò, ñòîëáåö íå õðàíèò ôàéë
QString file_name;
QByteArray data_tmp;
data_tmp = value.toByteArray();
if (data_tmp.isEmpty() || data_tmp.isNull()) return value;
else {
QDataStream out (&data_tmp,QIODevice::ReadOnly);
out >> file_name;
return file_name;
}
}
else {
QString parentInctance;
QSqlQuery q;
QString sql_str;
bool ok;
parentInctance = values.at(index_of_list);
sql_str = tr("select * from `");
sql_str.append(parentInctance);
sql_str.append(tr("` "));
sql_str.append(tr("where `ID` = "));
sql_str.append(value.toString());
q.prepare(sql_str);
ok = q.exec();
if (ok) {
while(q.next()){
QString object_name = q.value(1).toString();
if (!object_name.isEmpty()) return object_name;
}
}
int ii;
ii++;
}
return value;
}
// if (index.column() == 1)
// return value.toString().prepend(tr("¹ "));
case Qt::EditRole:
if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö
else {
return value.toInt() != 0 ? tr("Äà") : tr("Íåò");
}
///return value;
// if (index.column() == 1)
// return value.toString().prepend(tr("¹ "));
case Qt::TextColorRole:
if(index.column() == 1)
return qVariantFromValue(QColor(Qt::blue));
else
return value;
case Qt::TextAlignmentRole: return value;
case Qt::FontRole:
if(index.column() == 1) {
QFont font = QFont("Helvetica", 16, QFont::Bold);
return qVariantFromValue(font);
}else
return value;
case Qt::BackgroundColorRole: {
int a = (index.row() % 2) ? 14 : 0;
if(index.column() == 2)
return qVariantFromValue(QColor(220,240-a,230-a));
else if(index.column() == 4)
return qVariantFromValue(QColor(200,220-a,255-a));
else
return value;
}
case Qt::CheckStateRole:
{
if (bolleans_list.indexOf(index.column()) == -1) return value; // òåêóùèé ñòîëáåö
else
{
return (QSqlQueryModel::data(index).toInt() != 0) ? Qt::Checked : Qt::Unchecked;
}
}
case Qt::SizeHintRole:
{
int height = value.toSize().height();
int widht = value.toSize().width();
if(index.column() == icon_index) {
QVariant currentImage = QSqlTableModel::data(index, 0);
QByteArray bytes = currentImage.toByteArray();
QPixmap pxmp;
if (currentImage.isValid()) {
pxmp.loadFromData(bytes);
if (height < pxmp.height()) height = pxmp.height() +10;
if (widht < pxmp.width()) widht = pxmp.width() +10;
return QVariant(QSize(widht, height));
}
else return value;
}
return value;
}
}
return value;
}