From 8eba6e7f033617f3e7ea3bd9913105df0de74ae2 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 31 Jul 2010 16:26:10 +0200 Subject: Implement FilePropertiesDialog Implemented a dialog for file properties. When the mime type says it's a video, fork ffprobe to read the properties of all streams and show them in a QTreeView powered by a SmTreeModel. If the mime type is image, use QImage to read some properties and show them in the same dialog. This commit introduces the new class FilePropertiesDialog. I also had to implement a copy constructor for SmTreeItem. It obsoletes classes ActorWidget, ActorModel and MoviePropertiesDialog. --- filepropertiesdialog.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 filepropertiesdialog.cpp (limited to 'filepropertiesdialog.cpp') diff --git a/filepropertiesdialog.cpp b/filepropertiesdialog.cpp new file mode 100644 index 0000000..969eac4 --- /dev/null +++ b/filepropertiesdialog.cpp @@ -0,0 +1,99 @@ +/* + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version + 2 of the License, or (at your option) any later version. +*/ + +#include +#include +#include +#include +#include + +#include "filepropertiesdialog.h" +#include "smtreemodel.h" +#include "smtreeitem.h" +#include "helper.h" + +FilePropertiesDialog::FilePropertiesDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ + //main layout + QVBoxLayout *mainLayout = new QVBoxLayout; + + //description + mDescriptionLabel = new QLabel(tr("Properties for [none]")); + mainLayout->addWidget(mDescriptionLabel); + + //the view + model + mModel = new SmTreeModel((QStringList() << QString() << QString()), this); + mView = new QTreeView; + mView->setHeaderHidden(true); + mView->setEditTriggers(QAbstractItemView::NoEditTriggers); + mView->setModel(mModel); + mainLayout->addWidget(mView); + + //ok button + QHBoxLayout *buttonLayout = new QHBoxLayout; + mClose = new QPushButton(tr("Close")); + connect(mClose, SIGNAL(clicked()), this, SLOT(accept())); + buttonLayout->setAlignment(Qt::AlignCenter); + buttonLayout->addWidget(mClose); + mainLayout->addLayout(buttonLayout); + + setLayout(mainLayout); + setMinimumWidth(450); +} + +void FilePropertiesDialog::setFileName(const QString &fileName){ + QString text = QString(tr("Properties for %1")).arg(fileName); + mDescriptionLabel->setText(text); + setWindowTitle(text); +} + +void FilePropertiesDialog::setStreamData(const QList > &streamData){ + SmTreeItem *root = new SmTreeItem(2); + for(int i = 0; i < streamData.size(); ++i){ + QList titleData; + QString title = QString(tr("Stream %1")).arg(QString::number(i)); + titleData << title << QVariant(); + SmTreeItem *titleItem = new SmTreeItem(titleData, root); + root->appendChild(titleItem); + QMap::const_iterator it = streamData.at(i).constBegin(); + while(it != streamData.at(i).constEnd()){ + QList itemData; + if(it.key() == "duration" && it.value() != "N/A"){ + qint64 duration = it.value().toFloat(); + itemData << it.key() << Helper::durationFromSecs(duration); + }else{ + itemData << it.key() << it.value(); + } + SmTreeItem *item = new SmTreeItem(itemData, titleItem); + titleItem->appendChild(item); + ++it; + } + } + mModel->setRoot(root); + mView->expandAll(); + mView->resizeColumnToContents(0); + mView->resizeColumnToContents(1); +} + +void FilePropertiesDialog::addData(const QString &caption, const QMap &data){ + SmTreeItem *root = new SmTreeItem(*mModel->root()); + QList titleData; + titleData << caption << QVariant(); + SmTreeItem *titleItem = new SmTreeItem(titleData, root); + root->appendChild(titleItem); + QMap::const_iterator it = data.constBegin(); + while(it != data.constEnd()){ + QList itemData; + itemData << it.key() << it.value(); + SmTreeItem *item = new SmTreeItem(itemData, titleItem); + titleItem->appendChild(item); + ++it; + } + mModel->setRoot(root); + mView->expandAll(); + mView->resizeColumnToContents(0); + mView->resizeColumnToContents(1); +} -- cgit v1.2.3-70-g09d2