summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r--filestreewidget.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp
index 2aa32d2..d44e561 100644
--- a/filestreewidget.cpp
+++ b/filestreewidget.cpp
@@ -250,6 +250,43 @@ void FilesTreeWidget::edit(int column){
}
}
+void FilesTreeWidget::suggest(){
+ QModelIndexList currentSel = mView->selectionModel()->selectedRows();
+ if(currentSel.isEmpty()){
+ return;
+ }
+ qint64 size = 0;
+ foreach(QModelIndex curIdx, currentSel){
+ qint64 curSize = curIdx.data(FilesTreeModel::SizeRole).value<qint64>();
+ size += curSize;
+ }
+ qint64 dvdSize = SmGlobals::instance()->dvdSize();
+ if(size > dvdSize){
+ QMessageBox::critical(this, tr("Error"), tr("File too big for a single DVD"));
+ return;
+ }
+ qint64 neededSize = dvdSize - size;
+ QModelIndexList possibleFiles = mModel->fileSizeLessThan(neededSize);
+ if(possibleFiles.isEmpty()){
+ QLocale l;
+ float mb = size / 1024 / 1024;
+ QString message = QString(tr("No file smaller than %1 MiB found")).arg(l.toString(mb, 'f', 2));
+ QMessageBox::critical(this, tr("Error"), message);
+ return;
+ }
+ QModelIndex last;
+ QStringList selectedFiles;
+ foreach(QModelIndex sIdx, possibleFiles){
+ QModelIndex vIdx = mProxy->mapFromSource(sIdx);
+ last = vIdx;
+ mView->selectionModel()->select(vIdx, QItemSelectionModel::Select | QItemSelectionModel::Rows);
+ selectedFiles << sIdx.data(FilesTreeModel::FileNameRole).toString();
+ }
+ QString message = QString(tr("Selected %1 items: %2")).arg(QString::number(selectedFiles.count())).arg(selectedFiles.join(", "));
+ emit statusMessage(message);
+ mView->scrollTo(last, QAbstractItemView::PositionAtCenter);
+}
+
void FilesTreeWidget::fileSelectionChanged(const QModelIndex &current, const QModelIndex &previous){
Q_UNUSED(previous);
int seriesPartId = current.data(FilesTreeModel::SeriesPartIdRole).toInt();