svcore  1.9
ProgressPrinter.cpp
Go to the documentation of this file.
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
00002 
00003 /*
00004     Sonic Visualiser
00005     An audio file viewer and annotation editor.
00006     Centre for Digital Music, Queen Mary, University of London.
00007     This file copyright 2007 QMUL.
00008     
00009     This program is free software; you can redistribute it and/or
00010     modify it under the terms of the GNU General Public License as
00011     published by the Free Software Foundation; either version 2 of the
00012     License, or (at your option) any later version.  See the file
00013     COPYING included with this distribution for more information.
00014 */
00015 
00016 #include "ProgressPrinter.h"
00017 
00018 #include <iostream>
00019 
00020 #include "Debug.h"
00021 
00022 ProgressPrinter::ProgressPrinter(QString message, QObject *parent) :
00023     ProgressReporter(parent),
00024     m_prefix(message),
00025     m_lastProgress(0),
00026     m_definite(true)
00027 {
00028     if (m_prefix.length() > 70) {
00029         m_prefix = m_prefix.left(70) + "...";
00030     }
00031 }
00032 
00033 ProgressPrinter::~ProgressPrinter()
00034 {
00035     if (m_lastProgress > 0 && m_lastProgress != 100) {
00036         cerr << "\r\n";
00037     }
00038 //    cerr << "(progress printer dtor)" << endl;
00039 }
00040 
00041 bool
00042 ProgressPrinter::isDefinite() const
00043 {
00044     return m_definite;
00045 }
00046 
00047 void
00048 ProgressPrinter::setDefinite(bool definite)
00049 {
00050     m_definite = definite;
00051 }
00052 
00053 void
00054 ProgressPrinter::setMessage(QString message)
00055 {
00056     m_prefix = message;
00057     if (m_prefix.length() > 70) {
00058         m_prefix = m_prefix.left(70) + "...";
00059     }
00060 }
00061 
00062 void
00063 ProgressPrinter::done()
00064 {
00065     cerr << "\r"
00066               << m_prefix 
00067               << (m_prefix == "" ? "" : " ")
00068               << "Done" << endl;
00069 }
00070 
00071 void
00072 ProgressPrinter::setProgress(int progress)
00073 {
00074     if (progress == m_lastProgress) return;
00075     cerr << "\r"
00076               << m_prefix 
00077               << (m_prefix == "" ? "" : " ");
00078     if (m_definite) {
00079         cerr << progress << "%";
00080     } else {
00081         cerr << "|/-\\"[progress % 4];
00082     }
00083     m_lastProgress = progress;
00084 }
00085