afutrainer/questionmodel.cpp

178 lines
5.0 KiB
C++

/***************************************************************************
* Copyright (C) 2003-2007 by Oliver Saal *
* osaal@gmx.de *
* http://www.oliver-saal.de/software/afutrainer/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "chapter.h"
#include "questionmodel.h"
#include <qtextdocument.h>
CQuestionModel::CQuestionModel(QObject *pParent) : QAbstractItemModel (pParent)
{
m_pChapter=0;
}
CQuestionModel::~CQuestionModel()
{
}
void CQuestionModel::onLanguageChanged()
{
headerDataChanged(Qt::Horizontal, 0, columnCount()-1);
}
void CQuestionModel::clear()
{
beginResetModel();
m_pChapter=0;
endResetModel();
}
void CQuestionModel::setModelData (CChapter *pChapter)
{
beginResetModel();
m_pChapter = pChapter;
endResetModel();
}
int CQuestionModel::columnCount (const QModelIndex & parent) const
{
Q_UNUSED(parent)
return 7;
}
QVariant CQuestionModel::data (const QModelIndex & index, int role) const
{
CQuestion *p;
QTextDocument t;
if (!index.isValid()) return QVariant();
p = (CQuestion*) index.internalPointer();
if (p == 0) return QVariant();
if (role == Qt::DisplayRole)
{
if (index.column() == 0)
return p->id();
else if (index.column() == 1)
return p->firstTextLine();
//return p->text();
else if (index.column() == 2)
return p->clickedCorrect();
else if (index.column() == 3)
return p->clickedWrong();
else if (index.column() == 4)
return p->levelText();
else if (index.column() == 5)
{
t.setHtml(p->lastClickedText());
return t.toPlainText();
}
else if (index.column() == 6)
{
t.setHtml(p->repeatDateText());
return t.toPlainText();
}
}
else if (role == Qt::DecorationRole)
{
if (index.column() == 4)
//return QIcon (QString(":/icons/16x16/level%1.png").arg(p->level()));
return p->levelIcon();
}
else if (role == Qt::ToolTipRole)
{
if (index.column() == 5)
return p->lastClickedTextExtended();
else if (index.column() == 6)
return p->repeatDateTextExtended();
/* if (index.column() == 4)
return "<img src='" + p->levelIconName() + "'> " + p->levelText();
*/ }
/* else if (role == Qt::WhatsThisRole)
{
if (index.column() == 4)
return QString("Was ist das?");
}
*/
return QVariant();
}
bool CQuestionModel::hasChildren (const QModelIndex & parent) const
{
if (parent.isValid()) return false;
return (m_pChapter != 0);
}
QVariant CQuestionModel::headerData (int section, Qt::Orientation orientation, int role) const
{
if (orientation == Qt::Vertical) return QVariant();
if (role == Qt::DisplayRole)
{
if (section == 0)
return tr("Kennung");
else if (section == 1)
return tr("Frage");
else if (section == 2)
return tr("R");
else if (section == 3)
return tr("F");
else if (section == 4)
return tr("Lernfortschritt");
else if (section == 5)
return tr("letzte Abfrage");
else if (section == 6)
return tr("Wiederholung");
}
/* else if (role == Qt::DecorationRole)
{
if (section == m_iColBookmarkFlag)
return QIcon (":/icons/16x16/bookmark.png");
}*/
else if (role == Qt::ToolTipRole)
{
if (section == 2)
return tr("Anzahl der richtigen Antworten");
else if (section == 3)
return tr("Anzahl der falschen Antworten");
}
return QVariant();
}
QModelIndex CQuestionModel::index (int row, int column, const QModelIndex & parent) const
{
CQuestion *p=0;
if (m_pChapter == 0 || parent.isValid() || row >= m_pChapter->countQuestion()) return QModelIndex();
p = m_pChapter->questionAt (row);
return createIndex (row, column, (void*)p);
}
QModelIndex CQuestionModel::parent (const QModelIndex & index) const
{
return QModelIndex();
}
int CQuestionModel::rowCount (const QModelIndex & parent) const
{
if (m_pChapter == 0 || parent.isValid()) return 0;
return m_pChapter->countQuestion();
}