Хранилища Subversion OpenInventory

Редакция

Редакция 179 | Редакция 202 | К новейшей редакции | Авторство | Сравнить с предыдущей | Последнее изменение | Открыть журнал | Скачать | RSS

#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) {
  ////  if (index.column()==3) return false; // â òðåòüåé êîëîíêå íå äàåì ïîìåíÿòü çíà÷åíèå
    bool lResult = false;

    /*
    QString str_tmp;
    if (index.column()==1) {                // åñëè ìåíÿåì èìÿ êëàññà
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
        str_tmp.append(tr(" instance"));
      }
      */

/*
    QString str_tmp;
    if (index.column()==0) {                // åñëè ìåíÿåì èìÿ êëàññà
        str_tmp = value.toString();         // òî ïîìåíÿåì è èìÿ òàáëèöû
        str_tmp.append(tr("_instance"));
      }
*/



    // MyModel::record(index.row());



    if (bolleans_list.indexOf(index.column()) != -1) {
      //  QModelIndex newindex;
   //    QSqlRecord rec = record(index.row());
    //   bool chk = (value.toInt()==Qt::Checked);
    //               rec.setValue(index.column(),chk);
//        rec.setValue(index.column(), value);
 //       rec.setGenerated(index.column(), true);

//lResult = QSqlTableModel::setData(index, value, role);

  //      lResult = updateRowInTable(index.row(), rec);
   //    lResult = setRecord(index.row(),rec);  // âåðíåì ðåçóëüòàò îá óñòàíîâêå

/*
        QStandardItem* item = static_cast<QStandardItem*>(index.internalPointer());
                  Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
                  item->setCheckState(state);

*/



        lResult = QSqlTableModel::setData(index, value, Qt::EditRole);

// Qt::CheckState state = (value.toInt() == 2) ? Qt::Checked : Qt::Unchecked;
   //     lResult = QSqlTableModel::setData(index, value.toBool(), Qt::CheckStateRole);

        //  QSqlTableModel::setItemData(index,Qt::CheckStateRole);
   //     lResult = QSqlTableModel::setData(index, value, role);

      //  emit MyModel::dataChanged(index, index);

         //   MyModel::updateRowInTable();
     //  lResult = QSqlTableModel::setData(index, value, Qt::DisplayRole);
       //  QSqlTableModel::setData(index, value, Qt::CheckStateRole);
       MyModel::submitAll();
  ////// //     MyModel::select();
       // MyModel::data(index, Qt::DisplayRole);
          }

else
    {
       lResult = QSqlTableModel::setData(index, value, role);
    }


  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;
     keys = pointers_map.keys(); // ñïèñîê ñòîëáöîâ ñ óêàçàòåëÿìè
     values = pointers_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) return value;
               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;
}