#include "backupappfinder.h" #include <QTreeWidget> #include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QDir> #include <QFileInfo> #include <QHeaderView> #include <QDateTime> #include <QCloseEvent> const char backupdir[32] = "last"; BackupAppFinder::BackupAppFinder(QWidget *parent) : QDialog(parent) { setCursor(Qt::ArrowCursor); QGridLayout *lo = new QGridLayout(this); QTreeWidget *tw = new QTreeWidget(this); QPushButton *pb = new QPushButton("Start", this); QLabel *lab = new QLabel("Double click an item or select one and click \"Start\"", this); tw->setColumnCount(2); tw->setHeaderLabels(QStringList() << "Backup application" << "Created on"); tw->header()->setSectionResizeMode(QHeaderView::ResizeToContents); connect(pb, SIGNAL(clicked()), this, SLOT(accept())); pb->setDisabled(true); lo->addWidget(tw, 0, 0, 4, 6); lo->addWidget(pb, 4, 5, 1, 1); lo->addWidget(lab, 4, 0, 1, 5); connect(tw, SIGNAL(itemSelectionChanged()), this, SLOT(itemSelected())); connect(tw, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), this, SLOT(accept())); } QString BackupAppFinder::exename() const { return m_exename; } QString BackupAppFinder::exe_path() const { QString epa(m_exe_path); if(!epa.endsWith('/')) epa += "/"; return epa; } void BackupAppFinder::exec(const QString &exenam, const QString &envpath) { QTreeWidget *tw = findChild<QTreeWidget *>(); tw->clear(); QString bkdir; envpath.endsWith('/') ? bkdir = envpath + QString(backupdir) : bkdir = envpath + "/" + QString(backupdir); if(!bkdir.endsWith('/')) bkdir += "/"; QDir backupDir(bkdir); QFileInfoList fil; if(backupDir.exists()) { QString filter = exenam + "+*"; fil = backupDir.entryInfoList(QStringList() << filter, QDir::Executable|QDir::Files, QDir::Time); foreach (QFileInfo fi, fil) { QTreeWidgetItem *it = new QTreeWidgetItem(tw, QStringList() << fi.fileName() << fi.created().toString()); it->setData(0, Qt::UserRole, bkdir); } } QDialog::exec(); } void BackupAppFinder::closeEvent(QCloseEvent *e) { hide(); e->ignore(); } void BackupAppFinder::itemSelected() { findChild<QPushButton *>()->setEnabled(true); } void BackupAppFinder::accept() { QTreeWidget *tw = findChild<QTreeWidget *>(); QList<QTreeWidgetItem*> selected = tw->selectedItems(); if(selected.size() == 1) { m_exename = selected.first()->text(0); m_exe_path = selected.first()->data(0, Qt::UserRole).toString(); } hide(); }