CString CDlgVidSeek::GetDuration() { if (m_seek == NULL) return "00:00/00:00"; LONGLONG cur, stop; m_seek->GetPositions (&cur, &stop); ULONG nTotalMS = (ULONG) (cur / 10000); int nSeconds = nTotalMS / 1000; nSeconds %= 60; CString str1, str2; BOOL bH = FALSE; str2 = DurationToString (m_llDuration, &bH); str1 = DurationToString (cur, &bH); CString strDuration; strDuration.Format ("%s/%s", str1, str2); return strDuration; }
void CDurationComboBox::SetVal(double Val) { CString s(DurationToString(Val)); int iItem = FindStringExact(0, s); if (iItem >= 0) SetCurSel(iItem); else SetWindowText(s); // order matters m_Duration = Val; }
void StatisticWindow::saveToCSV(const QVector<sStatisticItem*> &items, const QString& FileName) { QFile outputFile(FileName); outputFile.open(QIODevice::WriteOnly); if(!outputFile.isOpen()){ qDebug() << "Error: unable to open" << FileName << "for output"; return; } QTextStream outStream(&outputFile); for (int i = 0; i<items.size(); i++) outStream << items[i]->Name << "," << items[i]->TotalTime << "," << DurationToString(items[i]->TotalTime) << "," << QString::number(items[i]->NormalValue*100,'f',2) << "\r\n"; outputFile.close(); }
void StatisticWindow::rebuild(QDate from, QDate to) { QDateTime statStart(from); QDateTime statEnd(to.addDays(1)); //prepare containers m_Uncategorized.TotalTime = 0; m_Uncategorized.NormalValue = 0; m_Uncategorized.Name = tr("Uncategorized"); m_Uncategorized.Color = Qt::gray; m_Categories.resize(m_DataManager->categoriesCount()); for (int i = 0; i<m_Categories.size(); i++){ m_Categories[i].TotalTime = 0; m_Categories[i].NormalValue = 0; m_Categories[i].Name = m_DataManager->categories(i)->name; m_Categories[i].Color = m_DataManager->categories(i)->color; } m_Applications.resize(m_DataManager->applicationsCount()); for (int i = 0; i<m_Applications.size(); i++){ sAppInfo* app = m_DataManager->applications(i); m_Applications[i].TotalTime = 0; m_Applications[i].NormalValue = 0; m_Applications[i].Name = app->activities[0].name; m_Applications[i].Color = Qt::white; m_Applications[i].childs.resize(app->activities.size()); for (int j = 0; j<m_Applications[i].childs.size(); j++){ m_Applications[i].childs[j].TotalTime = 0; m_Applications[i].childs[j].NormalValue = 0; m_Applications[i].childs[j].Name = app->activities[j].name; m_Applications[i].childs[j].Color = Qt::white; } } //calculation int TotalTime = 0; for (int i = 0; i<m_Applications.size(); i++){ const sAppInfo* app = m_DataManager->applications(i); for (int activity = 0; activity<app->activities.size(); activity++){ const sActivityInfo* ainfo = &app->activities[activity]; for (int j = 0; j<ainfo->periods.size(); j++){ QDateTime start = ainfo->periods[j].start; QDateTime end = ainfo->periods[j].start.addSecs(ainfo->periods[j].length); if (end>statStart && start<statEnd){ if (start<statStart) start = statStart; if (end>statEnd) end = statEnd; int duration = start.secsTo(end); TotalTime+=duration; m_Applications[i].TotalTime+=duration; m_Applications[i].childs[activity].TotalTime+=duration; int cat = ainfo->categories[ainfo->periods[j].profileIndex].category; if (cat==-1) m_Uncategorized.TotalTime+=duration; else m_Categories[cat].TotalTime+=duration; } if (start>statEnd || end>statEnd) break; } } } //calculate normalized values if (TotalTime>0){ m_Uncategorized.NormalValue = (float)m_Uncategorized.TotalTime/TotalTime; for (int i = 0; i<m_Categories.size(); i++) m_Categories[i].NormalValue = (float)m_Categories[i].TotalTime/TotalTime; for (int i = 0; i<m_Applications.size(); i++){ m_Applications[i].NormalValue = (float)m_Applications[i].TotalTime/TotalTime; for (int j = 0; j<m_Applications[i].childs.size(); j++) m_Applications[i].childs[j].NormalValue = (float)m_Applications[i].childs[j].TotalTime/TotalTime; } } qSort( m_Categories.begin(), m_Categories.end(), lessThan ); ui->widgetDiagram->setTotalTime(TotalTime); ui->widgetDiagram->update(); //fill applications widget ui->treeWidgetApplications->setSortingEnabled(false); ui->treeWidgetApplications->clear(); for (int i = 0; i<m_Applications.size(); i++){ if (m_Applications[i].TotalTime>0){ QTreeWidgetItem* item = new QTreeWidgetItem(); item->setText(0,m_Applications[i].Name); item->setData(0,Qt::UserRole,i); item->setText(1,DurationToString(m_Applications[i].TotalTime)); item->setText(2,fixSize(QString::number(m_Applications[i].NormalValue*100,'f',2),5)+"%"); ui->treeWidgetApplications->addTopLevelItem(item); for (int j = 0; j<m_Applications[i].childs.size(); j++){ if (m_Applications[i].childs[j].TotalTime>0){ QTreeWidgetItem* aitem = new QTreeWidgetItem(); QString childName = m_Applications[i].childs[j].Name; if (j==0) childName+=tr("(default)"); aitem->setText(0,childName); aitem->setData(0,Qt::UserRole,i); aitem->setData(0,Qt::UserRole+1,j); aitem->setText(1,DurationToString(m_Applications[i].childs[j].TotalTime)); aitem->setText(2,fixSize(QString::number(m_Applications[i].childs[j].NormalValue*100,'f',2),5)+"%"); item->addChild(aitem); } } } } ui->treeWidgetApplications->setSortingEnabled(true); }
void cStatisticDiagramWidget::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter( this ); painter.setPen( QPen( Qt::black, 1 ) ); if (m_TotalTime==0 || m_Categories==NULL || m_Uncategorized==NULL){ painter.drawText(0,0,this->width(),this->height(),Qt::AlignCenter | Qt::TextSingleLine,tr("NO DATA")); } else{ float secondsInPixel = (float)m_TotalTime/height(); int miscTotal = 0; int shift = 0; if (m_Uncategorized->TotalTime>0 && m_Uncategorized->TotalTime<secondsInPixel) miscTotal=m_Uncategorized->TotalTime; for (int i = 0; i<m_Categories->size(); i++){ const sStatisticItem& item = m_Categories->at(i); if (item.TotalTime>0){ if ((float)item.TotalTime/secondsInPixel<2){ miscTotal+=item.TotalTime; } else{ int catHeight = (float)item.TotalTime/secondsInPixel; painter.setBrush(QBrush(item.Color)); QRectF r(0,shift,width()-1,catHeight); painter.drawRect(r); if (catHeight>20){ painter.drawText(r,Qt::AlignCenter | Qt::TextSingleLine,item.Name+"["+DurationToString(item.TotalTime)+"]["+QString::number(item.NormalValue*100,'f',2)+"%]"); } shift+=catHeight; } } } if (m_Uncategorized->TotalTime>0 && m_Uncategorized->TotalTime>=secondsInPixel){ int catHeight = (float)m_Uncategorized->TotalTime/secondsInPixel; painter.setBrush(QBrush(m_Uncategorized->Color)); QRectF r(0,shift,width()-1,catHeight); painter.drawRect(r); if (catHeight>20){ painter.drawText(r,Qt::AlignCenter | Qt::TextSingleLine,m_Uncategorized->Name+"["+DurationToString(m_Uncategorized->TotalTime)+"]["+QString::number(m_Uncategorized->NormalValue*100,'f',2)+"%]"); } shift+=catHeight; } int catHeight = height()-1-miscTotal; if (catHeight>1){ painter.setBrush(QBrush(Qt::white)); QRectF r(0,shift,width()-1,catHeight); painter.drawRect(r); if (catHeight>20){ painter.drawText(r,Qt::AlignCenter | Qt::TextSingleLine,tr("Other categories")+"["+DurationToString(miscTotal)+"]"); } } } }