///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2012 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2015 LoRd_MuldeR <MuldeR2@GMX.de>
//
// 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.
+// (at your option) any later version, but always including the *additional*
+// restrictions defined in the "License.txt" file.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include <QUuid>
-#define MAX_DISPLAY_ITEMS 32
+#define MAX_DISPLAY_ITEMS 48
ProgressModel::ProgressModel(void)
:
m_iconFailed(":/icons/exclamation.png"),
m_iconSystem(":/icons/computer.png"),
m_iconWarning(":/icons/error.png"),
- m_iconPerformance(":/icons/clock.png")
+ m_iconPerformance(":/icons/clock.png"),
+ m_iconSkipped(":/icons/step_over.png"),
+ m_iconUndefined(":/icons/report.png"),
+ m_emptyUuid(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00),
+ m_emptyList("Oups, no data available!")
{
}
}
else if(role == Qt::DecorationRole && index.column() == 0)
{
- switch(m_jobState.value(m_jobList.at(index.row())))
- {
- case JobRunning:
- return m_iconRunning;
- break;
- case JobPaused:
- return m_iconPaused;
- break;
- case JobComplete:
- return m_iconComplete;
- break;
- case JobSystem:
- return m_iconSystem;
- break;
- case JobWarning:
- return m_iconWarning;
- break;
- case JobPerformance:
- return m_iconPerformance;
- break;
- default:
- return m_iconFailed;
- break;
- }
+ const int currentState = m_jobState.value(m_jobList.at(index.row()));
+ return getIcon(static_cast<const JobState>(currentState));
}
else if(role == Qt::TextAlignmentRole)
{
void ProgressModel::addJob(const QUuid &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState)
{
- if(m_jobList.contains(jobId) || m_jobListHidden.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
return;
}
{
beginRemoveRows(QModelIndex(), 0, 0);
m_jobListHidden.append(m_jobList.takeFirst());
+ m_jobIndexCache.clear();
endRemoveRows();
}
m_jobStatus.insert(jobId, jobInitialStatus);
m_jobState.insert(jobId, jobInitialState);
m_jobLogFile.insert(jobId, QStringList());
+ m_jobIdentifiers.insert(jobId);
endInsertRows();
}
void ProgressModel::updateJob(const QUuid &jobId, const QString &newStatus, int newState)
{
- int row = m_jobList.indexOf(jobId);
-
- if(row < 0)
+ if(!m_jobIdentifiers.contains(jobId))
{
- if(m_jobListHidden.indexOf(jobId) >= 0)
- {
- if(!newStatus.isEmpty()) m_jobStatus.insert(jobId, newStatus);
- if(newState >= 0) m_jobState.insert(jobId, newState);
- }
return;
}
-
+
if(!newStatus.isEmpty()) m_jobStatus.insert(jobId, newStatus);
if(newState >= 0) m_jobState.insert(jobId, newState);
-
- emit dataChanged(index(row, 0), index(row, 1));
+
+ const int row = m_jobIndexCache.value(jobId, -1);
+
+ if(row >= 0)
+ {
+ emit dataChanged(index(row, 0), index(row, 1));
+ }
+ else
+ {
+ const int tmp = m_jobList.indexOf(jobId);
+ if(tmp >= 0)
+ {
+ m_jobIndexCache.insert(jobId, tmp);
+ emit dataChanged(index(tmp, 0), index(tmp, 1));
+ }
+ }
}
void ProgressModel::appendToLog(const QUuid &jobId, const QString &line)
{
- if(m_jobList.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
m_jobLogFile[jobId].append(line.split('\n'));
}
}
-const QStringList &ProgressModel::getLogFile(const QModelIndex &index)
+const QStringList &ProgressModel::getLogFile(const QModelIndex &index) const
{
if(index.row() < m_jobList.count())
{
QUuid id = m_jobList.at(index.row());
- return m_jobLogFile[id];
+ QHash<QUuid,QStringList>::const_iterator iter = m_jobLogFile.constFind(id);
+ if(iter != m_jobLogFile.constEnd()) { return iter.value(); }
}
- return *(reinterpret_cast<QStringList*>(NULL));
+ return m_emptyList;
}
-const QUuid &ProgressModel::getJobId(const QModelIndex &index)
+const QUuid &ProgressModel::getJobId(const QModelIndex &index) const
{
if(index.row() < m_jobList.count())
{
return m_jobList.at(index.row());
}
- return *(reinterpret_cast<QUuid*>(NULL));
+ return m_emptyUuid;
+}
+
+const ProgressModel::JobState ProgressModel::getJobState(const QModelIndex &index) const
+{
+ if(index.row() < m_jobList.count())
+ {
+ return static_cast<JobState>(m_jobState.value(m_jobList.at(index.row()), -1));
+ }
+
+ return static_cast<JobState>(-1);
}
void ProgressModel::addSystemMessage(const QString &text, int type)
{
const QUuid &jobId = QUuid::createUuid();
- if(m_jobList.contains(jobId))
+ if(m_jobIdentifiers.contains(jobId))
{
return;
}
{
beginRemoveRows(QModelIndex(), 0, 0);
m_jobListHidden.append(m_jobList.takeFirst());
+ m_jobIndexCache.clear();
endRemoveRows();
}
m_jobStatus.insert(jobId, QString());
m_jobState.insert(jobId, jobState);
m_jobLogFile.insert(jobId, QStringList());
+ m_jobIdentifiers.insert(jobId);
endInsertRows();
}
{
m_jobList.prepend(m_jobListHidden.takeLast());
}
+ m_jobIndexCache.clear();
endResetModel();
}
}
+
+const QIcon &ProgressModel::getIcon(ProgressModel::JobState state) const
+{
+ switch(state)
+ {
+ case JobRunning:
+ return m_iconRunning;
+ break;
+ case JobPaused:
+ return m_iconPaused;
+ break;
+ case JobComplete:
+ return m_iconComplete;
+ break;
+ case JobSystem:
+ return m_iconSystem;
+ break;
+ case JobWarning:
+ return m_iconWarning;
+ break;
+ case JobPerformance:
+ return m_iconPerformance;
+ break;
+ case JobSkipped:
+ return m_iconSkipped;
+ break;
+ default:
+ return (state < 0) ? m_iconUndefined : m_iconFailed;
+ break;
+ }
+}