#include "loggermodewidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct LoggerModeWidgetData { QLabel *progressLabel; QLabel *hoursWorkedLabel; QLabel *dateLabel; QLabel *descriptionLabel; QCalendarWidget *calendar; QComboBox *progressComboBox; QLineEdit *hoursWorkedLineEdit; QPushButton *startTimerButton; QPushButton *stopTimerButton; QPushButton *saveButton; QTimer *timer; QTextEdit *textEdit; QString projectName; int totalTime; }; LoggerModeWidget::LoggerModeWidget(const QString projectName, QWidget* parent) :QWidget(parent) { d = new LoggerModeWidgetData; d->projectName = projectName; d->totalTime = 0; /* // Catch hold of the plugin-manager ExtensionSystem::PluginManager* pm = ExtensionSystem::PluginManager::instance(); // Look for the ProjectExplorerPlugin object ProjectExplorer::ProjectExplorerPlugin* projectExplorerPlugin = pm->getObject(); // Fetch a list of all open projects QList projects =projectExplorerPlugin->session()->projects(); Q_FOREACH(ProjectExplorer::Project* project, projects) d->projectExplorerCombo->addItem( project->name()); */ QStringList percentList; percentList <<"10%" <<"20%" <<"30%" <<"40%" <<"50%" <<"60%" <<"70%" <<"80%" <<"90%" <<"100%" ; d->progressLabel = new QLabel("Progress:"); d->hoursWorkedLabel = new QLabel("Hours Worked:"); d->dateLabel = new QLabel("Date:"); d->descriptionLabel = new QLabel("Description :"); d->hoursWorkedLineEdit = new QLineEdit; d->hoursWorkedLineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); d->progressComboBox = new QComboBox; d->progressComboBox->addItems(percentList); d->progressComboBox->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); d->startTimerButton = new QPushButton(tr("Start Timer")); d->startTimerButton->setFixedWidth(80); d->stopTimerButton = new QPushButton(tr("Pause Timer")); d->stopTimerButton->setFixedWidth(80); d->stopTimerButton->setCheckable(true); d->textEdit = new QTextEdit(this); d->textEdit->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); d->calendar = new QCalendarWidget; d->saveButton = new QPushButton(tr("Save To File")); d->saveButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); QGroupBox *timeLoggerBox = new QGroupBox(tr("Time Logger")); QGridLayout *gLayout = new QGridLayout; gLayout->addWidget(d->dateLabel, 0, 0, 1, 1); gLayout->addWidget(d->calendar, 1, 0, 1, 3); gLayout->addWidget(d->progressLabel, 2, 0, 1, 1); gLayout->addWidget(d->progressComboBox, 2, 1, 1, 1); gLayout->addWidget(d->hoursWorkedLabel, 3, 0, 1, 1); gLayout->addWidget(d->hoursWorkedLineEdit, 3, 1, 1, 1); gLayout->addWidget(d->startTimerButton, 4, 1, 1, 1); gLayout->addWidget(d->stopTimerButton, 4, 2, 1, 1); timeLoggerBox->setLayout(gLayout); d->timer = new QTimer(this); //d->time.setHMS(0,0,0); // connection of SIGNALS and SLOTS connect(d->timer, SIGNAL(timeout()), this, SLOT(updateTime())); connect(d->startTimerButton,SIGNAL(clicked()),this,SLOT(startTimeLog())); connect(d->stopTimerButton,SIGNAL(clicked()),this,SLOT(endTimeLog())); connect(d->saveButton, SIGNAL(clicked()), this, SLOT(saveToFile())); QVBoxLayout *vLayout = new QVBoxLayout; vLayout->addWidget(d->descriptionLabel); vLayout->addWidget(d->textEdit); QHBoxLayout * hLayout = new QHBoxLayout; hLayout->addWidget(timeLoggerBox); hLayout->addLayout(vLayout); QHBoxLayout *bLayout = new QHBoxLayout; bLayout->addStretch(1); bLayout->addWidget(d->saveButton); QVBoxLayout *mainLayout = new QVBoxLayout(this); mainLayout->addLayout(hLayout); mainLayout->addLayout(bLayout); mainLayout->addStretch(1); } LoggerModeWidget::~LoggerModeWidget() { delete d; } bool LoggerModeWidget::saveToFile() { QString fileName = QFileDialog::getSaveFileName(this); if (fileName.isEmpty()) return false; QFile file(fileName); if (!file.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::critical(this, tr("Application"), tr("Unable to open file %1 for writing :\n%2.") .arg(fileName) .arg(file.errorString())); return false; } QTextStream out(&file); #ifndef QT_NO_CURSOR QApplication::setOverrideCursor(Qt::WaitCursor); #endif out << "Project name : " << d->projectName << "\n"; out << "Date : " << d->calendar->selectedDate().toString() << "\n"; out << "Progress : " << d->progressComboBox->currentText() << "\n"; out << "Duration : " << d->hoursWorkedLineEdit->text() << "\n\n"; out << "Description : " << d->textEdit->toPlainText(); #ifndef QT_NO_CURSOR QApplication::restoreOverrideCursor(); #endif return true; } void LoggerModeWidget::startTimeLog() { d->totalTime = 0; d->timer->start(1000); } void LoggerModeWidget::endTimeLog() { if(d->stopTimerButton->isChecked()) { d->stopTimerButton->setText("Continue Timer"); d->timer->stop(); } else { d->stopTimerButton->setText("Pause Timer"); d->timer->start(1000); } } void LoggerModeWidget::updateTime() { d->totalTime++; QTime time(0,0,0); time = time.addSecs(d->totalTime); d->hoursWorkedLineEdit->setText(time.toString()); } /* void LoggerModeWidget::setProjectName(QString name) { d->projectName = name; } */