00001 #include <QDir> 00002 #include <QFileInfo> 00003 00004 #include "qsedataset.h" 00005 #include "qsedataexport.h" 00006 00007 QseDataSet::QseDataSet(const QString &name, QObject *parent) 00008 : QObject(parent), 00009 m_Mutex(QMutex::Recursive) 00010 { 00011 setObjectName(name); 00012 } 00013 00014 QseDataSet::~QseDataSet() 00015 { 00016 QMutexLocker lock(&m_Mutex); 00017 00018 QseScan *scan; 00019 00020 foreach (scan, m_Scans) { 00021 delete scan; 00022 } 00023 00024 foreach (scan, m_SpareScans) { 00025 delete scan; 00026 } 00027 } 00028 00029 int QseDataSet::scanCount() const 00030 { 00031 QMutexLocker lock(&m_Mutex); 00032 00033 return m_Scans.size(); 00034 } 00035 00036 void QseDataSet::emitOperationCompleted() 00037 { 00038 // printf("QseDataSet::emitOperationCompleted()\n"); 00039 00040 emit operationCompleted(); 00041 } 00042 00043 void QseDataSet::emitDataChanged() 00044 { 00045 printf("QseDataSet::emitDataChanged()\n"); 00046 00047 emit dataChanged(); 00048 } 00049 00050 void QseDataSet::clear() 00051 { 00052 int sz = scanCount(); 00053 00054 { 00055 QMutexLocker lock(&m_Mutex); 00056 00057 for (int i = sz-1; i>=0; i--) { 00058 m_SpareScans.append(m_Scans.takeLast()); 00059 } 00060 00061 m_Header.clear(); 00062 } 00063 00064 emit dataCleared(); 00065 emit dataChanged(); 00066 } 00067 00068 QseScan *QseDataSet::scan(int n) const 00069 { 00070 int ns = scanCount(); 00071 00072 if (n >= 0 && n < ns) { 00073 QMutexLocker lock(&m_Mutex); 00074 return m_Scans.at(n); 00075 } else { 00076 return NULL; 00077 } 00078 } 00079 00080 int QseDataSet::maxColumnCount() const 00081 { 00082 QMutexLocker lock(&m_Mutex); 00083 00084 int max=0; 00085 QseScan* scan; 00086 00087 foreach (scan, m_Scans) { 00088 if (scan) { 00089 if (scan->columnCount()>max) { 00090 max = scan->columnCount(); 00091 } 00092 } 00093 } 00094 00095 return max; 00096 } 00097 00098 QseScan *QseDataSet::appendScan() 00099 { 00100 QseScan *scan = NULL; 00101 00102 { 00103 QMutexLocker lock(&m_Mutex); 00104 00105 if (m_SpareScans.size()) { 00106 scan = m_SpareScans.takeLast(); 00107 scan -> clear(); 00108 } else { 00109 scan = new QseScan(""); 00110 } 00111 00112 m_Scans.append(scan); 00113 } 00114 00115 // printf("%s: Append scan %d\n", qPrintable(objectName()), scanCount()-1); 00116 00117 emit scanAdded(scanCount()-1); 00118 emit dataChanged(); 00119 00120 return scan; 00121 } 00122 00123 QStringList QseDataSet::header() const 00124 { 00125 QMutexLocker lock(&m_Mutex); 00126 00127 return m_Header; 00128 } 00129 00130 void QseDataSet::setHeader(const QStringList& hdr) 00131 { 00132 m_Header = hdr; 00133 } 00134 00135 void QseDataSet::appendHeader(const QString &l) 00136 { 00137 QMutexLocker lock(&m_Mutex); 00138 00139 m_Header.push_back(l); 00140 } 00141 00142 void QseDataSet::writeScans(const QString &name) 00143 { 00144 for (int i=0; i<scanCount(); i++) { 00145 writeScan(i, name); 00146 } 00147 } 00148 00149 void QseDataSet::writeScan(int i, const QString &name) 00150 { 00151 QFileInfo fileInfo(name); 00152 00153 QDir dir = fileInfo.dir(); 00154 QString base = fileInfo.completeBaseName(); 00155 QString extn = fileInfo.suffix(); 00156 00157 QFileInfo ofile(dir, base+"-"+QString().setNum(i)+"."+extn); 00158 00159 QseScan *s = scan(i); 00160 00161 if (s) { 00162 s -> writeScan(ofile.filePath()); 00163 00164 emit message (QString("Scan %1 saved as %2").arg(i).arg(ofile.filePath())); 00165 } 00166 } 00167 00168 void QseDataSet::removeScan(int i) 00169 { 00170 if (i >= 0 && i < scanCount()) { 00171 { 00172 QMutexLocker lock(&m_Mutex); 00173 QseScan *s = m_Scans.takeAt(i); 00174 00175 if (s) { 00176 m_SpareScans.append(s); 00177 } 00178 } 00179 00180 emit dataChanged(); 00181 } 00182 } 00183 00184 QString QseDataSet::fileName() const 00185 { 00186 return m_FileName; 00187 } 00188 00189 void QseDataSet::setFileName(const QString &nam) 00190 { 00191 m_FileName = nam; 00192 }
1.5.6