X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fqt-console%2Frestore%2Frestoretree.cpp;h=1dc8c5cb16e0737d126732c1de749ba47adf4a43;hb=00be6ada3459eedda80fd138f28d30783c7e2623;hp=37a78a1f4861b7364ed0e0b70ef0364b9dc2c03f;hpb=09873a50163af9e2ae7c724d213d5f737ec69c8c;p=bacula%2Fbacula diff --git a/bacula/src/qt-console/restore/restoretree.cpp b/bacula/src/qt-console/restore/restoretree.cpp index 37a78a1f48..1dc8c5cb16 100644 --- a/bacula/src/qt-console/restore/restoretree.cpp +++ b/bacula/src/qt-console/restore/restoretree.cpp @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2007-2008 Free Software Foundation Europe e.V. + Copyright (C) 2007-2009 Free Software Foundation Europe e.V. The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. @@ -50,7 +50,6 @@ restoreTree::restoreTree() m_closeable = true; m_populated = false; - dockPage(); m_debugCnt = 0; m_debugTrap = true; @@ -64,8 +63,9 @@ restoreTree::restoreTree() area->setObjectName(QString::fromUtf8("area")); area->setWidget(widget); area->setWidgetResizable(true); - m_splitter->addWidget(splitter); m_splitter->addWidget(area); + m_splitter->addWidget(splitter); + splitter->setChildrenCollapsible(false); gridLayout->addWidget(m_splitter, 0, 0, 1, 1); @@ -152,6 +152,8 @@ void restoreTree::updateRefresh() */ void restoreTree::populateDirectoryTree() { + m_debugTrap = true; + m_debugCnt = 0; m_slashTrap = false; m_dirPaths.clear(); directoryTree->clear(); @@ -349,10 +351,11 @@ void restoreTree::parseDirectory(QString &dir_in) .arg(dir_in.length()).arg(index).arg(path).arg(direct); Pmsg0(000, msg.toUtf8().data()); } - if (addDirectory(path, direct)) done = true; + if (addDirectory(path, direct)) { done = true; } else { - if ((mainWin->m_miscDebug) && (m_debugTrap)) + if ((mainWin->m_miscDebug) && (m_debugTrap)) { Pmsg0(000, "Saving for later\n"); + } pathAfter.prepend(path); dirAfter.prepend(direct); } @@ -406,6 +409,7 @@ bool restoreTree::addDirectory(QString &m_cwd, QString &newdirr) /* no need to check for windows drive if unix */ if (isWin32Path(m_cwd)) { if (!m_dirPaths.contains(m_cwd)) { + if (m_cwd.count('/') > 1) { return false; } /* this is a windows drive add the base widget */ QTreeWidgetItem *item = new QTreeWidgetItem(directoryTree); item->setText(0, m_cwd); @@ -612,7 +616,7 @@ void restoreTree::fileCurrentItemChanged(QTableWidgetItem *currentFileTableItem, QBrush blackBrush(Qt::black); QStringList headerlist = (QStringList() - << tr("Job Id") << tr("Type") << tr("End Time") << tr("Hash") << tr("FileId")); + << tr("Job Id") << tr("Type") << tr("End Time") << tr("Hash") << tr("FileId") << tr("Job Type") << tr("First Volume")); versionTable->clear(); versionTable->setColumnCount(headerlist.size()); versionTable->setHorizontalHeaderLabels(headerlist); @@ -621,7 +625,10 @@ void restoreTree::fileCurrentItemChanged(QTableWidgetItem *currentFileTableItem, int pathid = m_directoryPathIdHash.value(directory, -1); if ((pathid != -1) && (fileNameId != -1)) { QString cmd = - "SELECT Job.JobId AS JobId,Job.Level AS Type,Job.EndTime AS EndTime,File.MD5 AS MD5,File.FileId AS FileId" + "SELECT Job.JobId AS JobId, Job.Level AS Type," + " Job.EndTime AS EndTime, File.MD5 AS MD5," + " File.FileId AS FileId, Job.Type AS JobType," + " (SELECT Media.VolumeName FROM JobMedia JOIN Media ON JobMedia.MediaId=Media.MediaId WHERE JobMedia.JobId=Job.JobId ORDER BY JobMediaId LIMIT 1) AS FirstVolume" " FROM File" " INNER JOIN Filename on (Filename.FilenameId=File.FilenameId)" " INNER JOIN Path ON (Path.PathId=File.PathId)" @@ -652,6 +659,12 @@ void restoreTree::fileCurrentItemChanged(QTableWidgetItem *currentFileTableItem, /* Iterate through fields in the record */ foreach (field, fieldlist) { field = field.trimmed(); /* strip leading & trailing spaces */ + if (column == 5 ) { + QByteArray jtype(field.trimmed().toAscii()); + if (jtype.size()) { + field = job_type_to_str(jtype[0]); + } + } tableItem = new QTableWidgetItem(field, 1); tableItem->setFlags(0); tableItem->setForeground(blackBrush); @@ -689,7 +702,8 @@ void restoreTree::writeSettings() { QSettings settings(m_console->m_dir->name(), "bat"); settings.beginGroup(m_groupText); - settings.setValue(m_splitText, m_splitter->saveState()); + settings.setValue(m_splitText1, m_splitter->saveState()); + settings.setValue(m_splitText2, splitter->saveState()); settings.endGroup(); } @@ -699,10 +713,12 @@ void restoreTree::writeSettings() void restoreTree::readSettings() { m_groupText = tr("RestoreTreePage"); - m_splitText = "splitterSizes_1"; + m_splitText1 = "splitterSizes1_3"; + m_splitText2 = "splitterSizes2_3"; QSettings settings(m_console->m_dir->name(), "bat"); settings.beginGroup(m_groupText); - m_splitter->restoreState(settings.value(m_splitText).toByteArray()); + if (settings.contains(m_splitText1)) { m_splitter->restoreState(settings.value(m_splitText1).toByteArray()); } + if (settings.contains(m_splitText2)) { splitter->restoreState(settings.value(m_splitText2).toByteArray()); } settings.endGroup(); } @@ -731,17 +747,19 @@ void restoreTree::populateJobTable() if (mainWin->m_rtPopDirDebug) Pmsg0(000, "Repopulating the Job Table\n"); QStringList headerlist = (QStringList() - << tr("Job Id") << tr("End Time") << tr("Level") + << tr("Job Id") << tr("End Time") << tr("Level") << tr("Type") << tr("Name") << tr("Purged") << tr("TU") << tr("TD")); m_toggleUpIndex = headerlist.indexOf(tr("TU")); m_toggleDownIndex = headerlist.indexOf(tr("TD")); int purgedIndex = headerlist.indexOf(tr("Purged")); + int typeIndex = headerlist.indexOf(tr("Type")); jobTable->clear(); jobTable->setColumnCount(headerlist.size()); jobTable->setHorizontalHeaderLabels(headerlist); QString jobQuery = - "SELECT Job.Jobid AS Id,Job.EndTime AS EndTime,Job.Level AS Level," - "Job.Name AS JobName,Job.purgedfiles AS Purged" + "SELECT Job.Jobid AS Id, Job.EndTime AS EndTime," + " Job.Level AS Level, Job.Type AS Type," + " Job.Name AS JobName, Job.purgedfiles AS Purged" " FROM Job" /* INNER JOIN FileSet eliminates all restore jobs */ " INNER JOIN Client ON (Job.ClientId=Client.ClientId)" @@ -790,6 +808,12 @@ void restoreTree::populateJobTable() foreach (field, fieldlist) { field = field.trimmed(); /* strip leading & trailing spaces */ if (field != "") { + if (column == typeIndex) { + QByteArray jtype(field.trimmed().toAscii()); + if (jtype.size()) { + field = job_type_to_str(jtype[0]); + } + } tableItem = new QTableWidgetItem(field, 1); tableItem->setFlags(0); tableItem->setForeground(blackBrush); @@ -1198,6 +1222,7 @@ void restoreTree::updateFileTableChecks() int rcnt = fileTable->rowCount(); for (int row=0; rowitem(row, 0); + if (!item) { return; } Qt::CheckState curState = item->checkState(); Qt::CheckState newState = Qt::PartiallyChecked; @@ -1239,6 +1264,7 @@ void restoreTree::updateVersionTableChecks() /* deterimine the default state from the state of the file */ QTableWidgetItem *fileTableItem = fileTable->item(fileTable->currentRow(), 0); + if (!fileTableItem) { return; } Qt::CheckState fileState = fileTableItem->checkState(); QString file = fileTableItem->text(); QString fullPath = dirName + file; @@ -1248,6 +1274,7 @@ void restoreTree::updateVersionTableChecks() int cnt = versionTable->rowCount(); for (int row=0; rowitem(row, 0); + if (!item) { break; } Qt::CheckState curState = item->checkState(); Qt::CheckState newState = Qt::Unchecked; @@ -1548,7 +1575,6 @@ void restoreTree::restoreButtonPushed() " INNER JOIN Job ON (Job.JobId=File.JobId)" " WHERE File.PathId=" + QString("%1").arg(pathid) + " AND Job.Jobid IN (" + m_checkedJobs + ")" - " AND File.FilenameId!=" + QString("%1").arg(m_nullFileNameId) + " GROUP BY File.FilenameId" ") t1, File " " INNER JOIN Filename on (Filename.FilenameId=File.FilenameId)" @@ -1830,3 +1856,9 @@ int restoreTree::queryFileIndex(QString &fullPath, int jobId) } /* if (index != -1) */ return qfileIndex; } + + +void restoreTree::PgSeltreeWidgetClicked() +{ + dockPage(); +}