summaryrefslogtreecommitdiffstats
path: root/filepropertiesdialog.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-28 07:46:16 +0200
committerArno <am@disconnect.de>2013-07-28 07:46:16 +0200
commitd6b178b1fdcdac519ded25e3f253d9eeffa84053 (patch)
treeba9a03e041fa72ccde37367ef07864884f0ced7b /filepropertiesdialog.cpp
parent5cfaa2c755c52c2ccbdd88ea3239dafb120a179b (diff)
downloadSheMov-d6b178b1fdcdac519ded25e3f253d9eeffa84053.tar.gz
SheMov-d6b178b1fdcdac519ded25e3f253d9eeffa84053.tar.bz2
SheMov-d6b178b1fdcdac519ded25e3f253d9eeffa84053.zip
Implement file properties dialog
Show file properties in Filemanager and Archive, if the file is available. Also get rid of the palette stuff in SmGlobals. Just call setPalette() early enough and set it in SmTreeView.
Diffstat (limited to 'filepropertiesdialog.cpp')
-rw-r--r--filepropertiesdialog.cpp214
1 files changed, 115 insertions, 99 deletions
diff --git a/filepropertiesdialog.cpp b/filepropertiesdialog.cpp
index a22076c..f130b0b 100644
--- a/filepropertiesdialog.cpp
+++ b/filepropertiesdialog.cpp
@@ -5,121 +5,137 @@
2 of the License, or (at your option) any later version.
*/
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QSettings>
-#include <QApplication>
+#include <QPushButton>
+#include <QJsonDocument>
+#include <QJsonArray>
+#include <QJsonObject>
+#include <QLabel>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QTabWidget>
+#include <QStackedWidget>
+#include <QImage>
#include "filepropertiesdialog.h"
-#include "seriesmetadatamodel.h"
+#include "smtreemodel.h"
#include "smtreeitem.h"
#include "smtreeview.h"
#include "helper.h"
-FilePropertiesDialog::FilePropertiesDialog(/*int seriesPartId, */QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f){
- //tab
- mTab = new QTabWidget;
+FilePropertiesDialog::FilePropertiesDialog(const QString &file, QWidget *parent, Qt::WindowFlags f) : SmDialog(parent, f), mFile(file){
+ mStack = new QStackedWidget;
+ mTab = new QTabWidget;
+ QString lText = QString(tr("<b>Properties - %1</b>")).arg(mFile);
+ QLabel *l = new QLabel(lText);
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(l);
- //stream data widget
- QVBoxLayout *streamDataLayout = new QVBoxLayout;
- QWidget *streamData = new QWidget;
+ QWidget *formatWidget = new QWidget;
+ mFormatView = new SmTreeView;
+ mFormatModel = new SmTreeModel(QStringList() << tr("Key") << tr("Value"), this);
+ mFormatView->setModel(mFormatModel);
+ QHBoxLayout *formatLayout = new QHBoxLayout;
+ formatLayout->addWidget(mFormatView);
+ formatWidget->setLayout(formatLayout);
+ mTab->addTab(formatWidget, tr("Format"));
- //description
- mDescriptionLabel = new QLabel(tr("Properties for [none]"));
- mDescriptionLabel->setAutoFillBackground(true);
- mDescriptionLabel->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
- streamDataLayout->addWidget(mDescriptionLabel);
- QSettings s;
- QVariant varColor = s.value("ui/alternatecolor");
- QColor labelColor = varColor.value<QColor>();
- QPalette labelPalette = mDescriptionLabel->palette();
- labelPalette.setColor(QPalette::Window, labelColor);
- mDescriptionLabel->setPalette(labelPalette);
+ QWidget *streamWidget = new QWidget;
+ mStreamView = new SmTreeView;
+ mStreamModel = new SmTreeModel(QStringList() << tr("Key") << tr("Value"), this);
+ mStreamView->setModel(mStreamModel);
+ QHBoxLayout *streamLayout = new QHBoxLayout;
+ streamLayout->addWidget(mStreamView);
+ streamWidget->setLayout(streamLayout);
+ mTab->addTab(streamWidget, tr("Streams"));
+ mStack->addWidget(mTab);
- //the view + model
- mModel = new SmTreeModel((QStringList() << QString() << QString()), this);
- mView = new SmTreeView;
- mView->setHeaderHidden(true);
- mView->setEditTriggers(QAbstractItemView::NoEditTriggers);
- mView->setModel(mModel);
- streamDataLayout->addWidget(mView);
- streamData->setLayout(streamDataLayout);
- mTab->addTab(streamData, tr("Stream data"));
+ QWidget *picWidget = new QWidget;
+ mPicView = new SmTreeView;
+ mPicModel = new SmTreeModel(QStringList() << tr("Key") << tr("Value"), this);
+ mPicView->setModel(mPicModel);
+ QHBoxLayout *picLayout = new QHBoxLayout;
+ picLayout->addWidget(mPicView);
+ picWidget->setLayout(picLayout);
+ mStack->addWidget(picWidget);
- //metadata widget
- mMetadata = new MetadataWidget;
- mTab->addTab(mMetadata, tr("Metadata"));
+ mainLayout->addWidget(mStack);
+ mOk = new QPushButton(tr("Ok"));
+ connect(mOk, SIGNAL(clicked()), this, SLOT(accept()));
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ buttonLayout->addWidget(mOk);
+ buttonLayout->addStretch();
+ mainLayout->addLayout(buttonLayout);
+ setLayout(mainLayout);
- //buttons
- QHBoxLayout *buttonLayout = new QHBoxLayout;
- mOk = new QPushButton(tr("Ok"));
- connect(mOk, SIGNAL(clicked()), this, SLOT(accept()));
- connect(mOk, SIGNAL(clicked()), mMetadata, SLOT(accept()));
- mCancel = new QPushButton(tr("Cancel"));
- connect(mCancel, SIGNAL(clicked()), this, SLOT(reject()));
- buttonLayout->setAlignment(Qt::AlignRight);
- buttonLayout->addWidget(mOk);
- buttonLayout->addWidget(mCancel);
+ QString mimeType = Helper::mimeType(mFile);
+ if(mimeType.startsWith("video")){
+ mStack->setCurrentIndex(0);
+ movieData();
+ }else if(mimeType.startsWith("image")){
+ mStack->setCurrentIndex(1);
+ pictureData();
+ }
+}
- //main layout
- QVBoxLayout *mainLayout = new QVBoxLayout;
- mainLayout->addWidget(mTab);
- mainLayout->addLayout(buttonLayout);
- setLayout(mainLayout);
- setMinimumWidth(450);
+void FilePropertiesDialog::movieData(){
+ QJsonDocument jsDoc = Helper::streamData(mFile);
+ if(jsDoc.isNull()){
+ return;
+ }
+ QJsonObject obj = jsDoc.object();
+ SmTreeItem *formatItem = new SmTreeItem(2);
+ movieDataRecursive(obj.value("format"), formatItem);
+ mFormatModel->setRoot(formatItem);
+ mFormatView->expandAll();
+ SmTreeItem *streamItem = new SmTreeItem(2);
+ QJsonArray streamA = obj.value("streams").toArray();
+ for(int i = 0; i < streamA.size(); ++i){
+ QString itemName = QString(tr("Stream %1 [%2]")).arg(QString::number(i + 1)).arg(streamA.at(i).toObject().value("codec_type").toString());
+ SmTreeItem *item = new SmTreeItem(QList<QVariant>() << itemName << QVariant(), streamItem);
+ streamItem->appendChild(item);
+ movieDataRecursive(streamA.at(i), item);
+ }
+ mStreamModel->setRoot(streamItem);
+ mStreamView->expandAll();
}
-void FilePropertiesDialog::setFileName(const QString &fileName){
- QString text = QString(tr("Properties for %1")).arg(fileName);
- mDescriptionLabel->setText(text);
- setWindowTitle(text);
+void FilePropertiesDialog::movieDataRecursive(QJsonValue start, SmTreeItem *appendTo){
+ QJsonObject sObject = start.toObject();
+ QJsonObject::const_iterator it;
+ for(it = sObject.constBegin(); it != sObject.constEnd(); ++it){
+ QList<QVariant> data = QList<QVariant>() << it.key() << it.value().toVariant();
+ if(it.key() == "duration"){
+ qint64 seconds = it.value().toString().toDouble();
+ Helper::Duration dur(seconds);
+ data[1] = dur.toString();
+ }
+ if(it.key() == "bit_rate"){
+ qint64 br = it.value().toString().toInt() / 1000;
+ data[1] = QString("%1 kb/s").arg(QString::number(br));
+ }
+ SmTreeItem *newItem = new SmTreeItem(data, appendTo);
+ appendTo->appendChild(newItem);
+ movieDataRecursive(*it, newItem);
+ }
}
-void FilePropertiesDialog::setStreamData(const QList<QMap<QString, QString> > &streamData){
- SmTreeItem *root = new SmTreeItem(2);
- for(int i = 0; i < streamData.size(); ++i){
- QList<QVariant> titleData;
- QString title = QString(tr("Stream %1")).arg(QString::number(i));
- titleData << title << QVariant();
- SmTreeItem *titleItem = new SmTreeItem(titleData, root);
- root->appendChild(titleItem);
- QMap<QString, QString>::const_iterator it = streamData.at(i).constBegin();
- while(it != streamData.at(i).constEnd()){
- QList<QVariant> 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::pictureData(){
+ QImage img = QImage(mFile);
+ if(img.isNull()){
+ return;
+ }
+ SmTreeItem *rootItem = new SmTreeItem(2);
+ appendItem(QList<QVariant>() << tr("width") << img.width(), rootItem);
+ appendItem(QList<QVariant>() << tr("height") << img.height(), rootItem);
+ appendItem(QList<QVariant>() << tr("depth") << img.depth(), rootItem);
+ appendItem(QList<QVariant>() << tr("alpha channel") << (img.hasAlphaChannel() ? tr("yes") : tr("no")), rootItem);
+ appendItem(QList<QVariant>() << tr("qt format") << img.format(), rootItem);
+ appendItem(QList<QVariant>() << tr("byte count") << img.byteCount(), rootItem);
+ mPicModel->setRoot(rootItem);
}
-void FilePropertiesDialog::addData(const QString &caption, const QMap<QString, QString> &data){
- SmTreeItem *root = new SmTreeItem(*mModel->root());
- QList<QVariant> titleData;
- titleData << caption << QVariant();
- SmTreeItem *titleItem = new SmTreeItem(titleData, root);
- root->appendChild(titleItem);
- QMap<QString, QString>::const_iterator it = data.constBegin();
- while(it != data.constEnd()){
- QList<QVariant> 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);
+void FilePropertiesDialog::appendItem(const QList<QVariant> &data, SmTreeItem *parent){
+ SmTreeItem *item = new SmTreeItem(data, parent);
+ parent->appendChild(item);
}