00001 #include <QtXml/qdom.h> 00002 00003 #include "main.h" 00004 #include "treeitem.h" 00005 #include "treemodel.h" 00006 #include "appconfig.h" 00007 #include "mainwindow.h" 00008 #include "recordtabledata.h" 00009 #include "recordtablemodel.h" 00010 00011 extern appconfig mytetraconfig; 00012 00013 00014 // Конструктор модели. 00015 recordtablemodel::recordtablemodel(QObject *pobj) : QAbstractListModel(pobj) 00016 { 00017 // При создании модели она должна брать данные как минимум из 00018 // пустой таблицы данных 00019 table=new recordtabledata(); 00020 00021 return; 00022 } 00023 00024 00025 // Деструктор модели. 00026 recordtablemodel::~recordtablemodel() 00027 { 00028 return; 00029 } 00030 00031 00032 // Предоставление данных модели 00033 // В таблице конечных записей на экране перечисляются только имена записей 00034 QVariant recordtablemodel::data(const QModelIndex &index, int nRole) const 00035 { 00036 // Если индекс недопустимый, возвращается пустой объект 00037 if(!index.isValid()) return QVariant(); 00038 00039 // Если запрашивается текст строки для отрисовки или для редактирования 00040 if(nRole==Qt::DisplayRole || nRole==Qt::EditRole) 00041 return table->get_field("name",index.row()); 00042 00043 // Во всех остальных случаях 00044 return QVariant(); 00045 } 00046 00047 00048 // Сохранение вводимых данных по указанному индексу 00049 bool recordtablemodel::setData(const QModelIndex &index, const QVariant &value, int nRole) 00050 { 00051 // Если индекс недопустимый, возвращается пустой объект 00052 if(!index.isValid()) return false; 00053 00054 // Если запрашивается редактирование 00055 if(nRole==Qt::EditRole) 00056 { 00057 // Новое значение строки записывается в строковую переменную 00058 QString linename; 00059 linename=value.value<QString>(); 00060 00061 // Изменяется поле в таблице конечных записей 00062 table->set_field("name",linename,index.row()); 00063 00064 emit dataChanged(index,index); // Посылается сигнал что данные были изменены 00065 00066 return true; 00067 } 00068 00069 // Во всех остальных случаях 00070 return false; 00071 } 00072 00073 00074 // Сколько записей в таблице 00075 int recordtablemodel::rowCount(const QModelIndex &parent) const 00076 { 00077 Q_UNUSED(parent); 00078 return table->size(); 00079 } 00080 00081 00082 QAbstractListModel *recordtablemodel::getmodel(void) 00083 { 00084 // Возвращается ссылка на модель таблицы конечных записей 00085 return this; 00086 } 00087 00088 void recordtablemodel::set_tabledata(recordtabledata *rtdata) 00089 { 00090 table=rtdata; 00091 00092 // Модель информирует о том, что данные были кардинально изменены 00093 reset(); 00094 } 00095 00096 recordtabledata *recordtablemodel::get_tabledata(void) 00097 { 00098 // Возвращается ссылка на данные, с которыми в данный момент работает модель 00099 return table; 00100 } 00101 00102 void recordtablemodel::update(void) 00103 { 00104 qDebug() << "Update view"; 00105 00106 // Модель информирует о том, что данные были изменены 00107 // При этом перестроится весь список на экране 00108 reset(); 00109 }