From 2114a3dbf0cbbe6e93e13dd003286dd96c76b4e0 Mon Sep 17 00:00:00 2001 From: lordmulder Date: Wed, 17 Nov 2010 20:39:10 +0100 Subject: [PATCH] Implemented progress model. --- LameXP.vcproj | 8 +++ res/Icons.qrc | 3 + src/Config.h | 2 +- src/Model_Progress.cpp | 142 +++++++++++++++++++++++++++++++++++++++++ src/Model_Progress.h | 66 +++++++++++++++++++ 5 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 src/Model_Progress.cpp create mode 100644 src/Model_Progress.h diff --git a/LameXP.vcproj b/LameXP.vcproj index d77459c7..3a1fb594 100644 --- a/LameXP.vcproj +++ b/LameXP.vcproj @@ -350,6 +350,10 @@ RelativePath=".\src\Model_MetaInfo.cpp" > + + @@ -706,6 +710,10 @@ /> + + diff --git a/res/Icons.qrc b/res/Icons.qrc index 01ca2f92..6d14a856 100644 --- a/res/Icons.qrc +++ b/res/Icons.qrc @@ -22,11 +22,13 @@ icons/compress.png icons/computer.png icons/controller.png + icons/control_pause_blue.png icons/cross.png icons/date.png icons/delete.png icons/door_out.png icons/drive_cd.png + icons/exclamation.png icons/feed.png icons/folder_add.png icons/folder_go.png @@ -40,6 +42,7 @@ icons/page_white_add.png icons/page_white_cd.png icons/play.png + icons/resultset_next.png icons/script_edit.png icons/sound.png icons/star.png diff --git a/src/Config.h b/src/Config.h index ee5ea289..0cc442aa 100644 --- a/src/Config.h +++ b/src/Config.h @@ -25,7 +25,7 @@ #define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 0 -#define VER_LAMEXP_BUILD 33 +#define VER_LAMEXP_BUILD 34 #define VER_LAMEXP_SUFFIX TechPreview /* diff --git a/src/Model_Progress.cpp b/src/Model_Progress.cpp new file mode 100644 index 00000000..d2fada1e --- /dev/null +++ b/src/Model_Progress.cpp @@ -0,0 +1,142 @@ +/////////////////////////////////////////////////////////////////////////////// +// LameXP - Audio Encoder Front-End +// Copyright (C) 2004-2010 LoRd_MuldeR +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#include "Model_Progress.h" + +ProgressModel::ProgressModel(void) : + m_iconRunning(":/icons/resultset_next.png"), + m_iconPaused(":/icons/control_pause_blue.png"), + m_iconComplete(":/icons/accept.png"), + m_iconFailed(":/icons/exclamation.png") +{ +} + +ProgressModel::~ProgressModel(void) +{ +} + +int ProgressModel::columnCount(const QModelIndex &parent) const +{ + return 2; +} + +int ProgressModel::rowCount(const QModelIndex &parent) const +{ + return m_jobList.count(); +} + +QVariant ProgressModel::data(const QModelIndex &index, int role) const +{ + if(index.row() >= 0 && index.row() < m_jobList.count()) + { + if(role == Qt::DisplayRole) + { + switch(index.column()) + { + case 0: + return m_jobName.value(m_jobList.at(index.row())); + break; + case 1: + return m_jobStatus.value(m_jobList.at(index.row())); + break; + default: + return QVariant(); + break; + } + } + else if(role == Qt::DecorationRole && index.column() == 0) + { + switch(m_jobState.value(m_jobList.at(index.row()))) + { + case JobRunning: + break; + case JobPaused: + break; + case JobComplete: + break; + default: + break; + } + } + } + + return QVariant(); +} + +QVariant ProgressModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if(role == Qt::DisplayRole) + { + if(orientation == Qt::Horizontal) + { + switch(section) + { + case 0: + return "Job"; + break; + case 1: + return "Status"; + break; + default: + return QVariant(); + break; + } + } + if(orientation == Qt::Vertical) + { + return QString::number(section + 1); + } + } + + return QVariant(); +} + +void ProgressModel::addJob(const QString &jobId, const QString &jobName, const QString &jobInitialStatus, int jobInitialState) +{ + if(m_jobList.contains(jobId, Qt::CaseInsensitive)) + { + return; + } + + QString id = jobId.toLower(); + + beginResetModel(); + m_jobList.append(id); + m_jobName.insert(id, jobName); + m_jobStatus.insert(id, jobInitialStatus); + m_jobState.insert(id, jobInitialState); + endResetModel(); +} + +void ProgressModel::updateJob(const QString &jobId, const QString &newStatus, int newState) +{ + if(!m_jobList.contains(jobId, Qt::CaseInsensitive)) + { + return; + } + + QString id = jobId.toLower(); + + beginResetModel(); + if(!newStatus.isEmpty()) m_jobStatus.insert(id, newStatus); + if(newState >= 0) m_jobState.insert(id, newState); + endResetModel(); +} diff --git a/src/Model_Progress.h b/src/Model_Progress.h new file mode 100644 index 00000000..14759c4c --- /dev/null +++ b/src/Model_Progress.h @@ -0,0 +1,66 @@ +/////////////////////////////////////////////////////////////////////////////// +// LameXP - Audio Encoder Front-End +// Copyright (C) 2004-2010 LoRd_MuldeR +// +// 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., +// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +// +// http://www.gnu.org/licenses/gpl-2.0.txt +/////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include + +#include +#include +#include +#include + +class ProgressModel : public QAbstractTableModel +{ +public: + ProgressModel(void); + ~ProgressModel(void); + + //Enums + enum JobState + { + JobRunning = 0, + JobPaused = 1, + JobComplete = 2, + JobFailed = 3 + }; + + //Model functions + int columnCount(const QModelIndex &parent = QModelIndex()) const; + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + +public slots: + void addJob(const QString &jobId, const QString &jobName, const QString &jobInitialStatus = QString("Initializing..."), int jobInitialState = JobRunning); + void updateJob(const QString &jobId, const QString &newStatus, int newState); + +private: + QStringList m_jobList; + QMap m_jobName; + QMap m_jobStatus; + QMap m_jobState; + + const QIcon m_iconRunning; + const QIcon m_iconPaused; + const QIcon m_iconComplete; + const QIcon m_iconFailed; +};