diff --git a/interface/resources/config/config.json b/interface/resources/config/config.json new file mode 100644 index 0000000000..8f7b3bb327 --- /dev/null +++ b/interface/resources/config/config.json @@ -0,0 +1,19 @@ +{ + "importFormats" : [ + { + "extension": "png", + "description": "Square PNG", + "icon": "raster.svg" + }, + { + "extension": "svo", + "description": "Sparse Voxel Octree Files", + "icon": "voxel.svg" + }, + { + "extension": "schematic", + "description": "Schematic Files", + "icon": "voxel.svg" + } + ] +} diff --git a/interface/resources/icons/png.svg b/interface/resources/icons/png.svg deleted file mode 100644 index 902c530d59..0000000000 --- a/interface/resources/icons/png.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - diff --git a/interface/resources/icons/jpg.svg b/interface/resources/icons/raster.svg similarity index 100% rename from interface/resources/icons/jpg.svg rename to interface/resources/icons/raster.svg diff --git a/interface/resources/icons/svo.svg b/interface/resources/icons/svo.svg deleted file mode 100644 index 16cd6839a3..0000000000 --- a/interface/resources/icons/svo.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - diff --git a/interface/resources/icons/schematic.svg b/interface/resources/icons/voxel.svg similarity index 100% rename from interface/resources/icons/schematic.svg rename to interface/resources/icons/voxel.svg diff --git a/interface/resources/styles/import_dialog.qss b/interface/resources/styles/import_dialog.qss index ac55bd24c3..285ff90aa4 100644 --- a/interface/resources/styles/import_dialog.qss +++ b/interface/resources/styles/import_dialog.qss @@ -42,7 +42,6 @@ QTreeView { QSidebar::item { margin-top: 10px; - padding-top: 5px; padding-bottom: 0; } @@ -68,10 +67,6 @@ QTreeView::item { height: 30px; } -QListView::item::icon { - height: 30px; -} - QListView::item:selected, QListView::item:selected:active, QTreeView::item:selected, diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index dfb4ea69b1..3430b466a9 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -12,16 +12,17 @@ #include #include #include -#include - #include #include #include +#include +#include +#include const QString WINDOW_NAME = QObject::tr("Import Voxels"); const QString IMPORT_BUTTON_NAME = QObject::tr("Import"); -const QString IMPORT_INFO = QObject::tr("Import .svo, .schematic, or .png as voxels"); +const QString IMPORT_INFO = QObject::tr("Import %1 as voxels"); const QString CANCEL_BUTTON_NAME = QObject::tr("Cancel"); const QString IMPORT_FILE_TYPES = QObject::tr("Sparse Voxel Octree Files, " "Square PNG, " @@ -69,10 +70,8 @@ QIcon HiFiIconProvider::icon(QFileIconProvider::IconType type) const { typeString = "file"; break; } - - QIcon ico = QIcon("resources/icons/" + typeString + ".svg"); - ico.pixmap(QSize(50, 50)); - return ico; + + return QIcon ("resources/icons/" + typeString + ".svg"); } QIcon HiFiIconProvider::icon(const QFileInfo &info) const { @@ -90,8 +89,7 @@ QIcon HiFiIconProvider::icon(const QFileInfo &info) const { return QIcon("resources/icons/folder.svg"); } - QFileInfo iconFile = QFileInfo("resources/icons/" + ext + ".svg"); - qDebug() << "Icon type: " << iconFile.filePath(); + QFileInfo iconFile("resources/icons/" + ext + ".svg"); if (iconFile.exists()) { return QIcon(iconFile.filePath()); } @@ -99,31 +97,74 @@ QIcon HiFiIconProvider::icon(const QFileInfo &info) const { return QIcon("resources/icons/file.svg"); } -ImportDialog::ImportDialog(QWidget *parent) : QFileDialog(parent, WINDOW_NAME, DESKTOP_LOCATION, IMPORT_FILE_TYPES), +ImportDialog::ImportDialog(QWidget *parent) : QFileDialog(parent, WINDOW_NAME, DESKTOP_LOCATION, NULL), _importButton(IMPORT_BUTTON_NAME, this), -_cancelButton(CANCEL_BUTTON_NAME, this), -_infoLabel(INFO_LABEL_TEXT) { +_cancelButton(CANCEL_BUTTON_NAME, this) { setOption(QFileDialog::DontUseNativeDialog, true); setFileMode(QFileDialog::ExistingFile); setViewMode(QFileDialog::Detail); + switchToResourcesParentIfRequired(); + QFile config("resources/config/config.json"); + config.open(QFile::ReadOnly | QFile::Text); + QJsonDocument document = QJsonDocument::fromJson(config.readAll()); + if (!document.isNull() && !document.isEmpty()) { + + QString importFormatsInfo; + QStringList importFormatsFilterList; + QHash iconsMap; + + QJsonObject config = document.object(); + if (!config.isEmpty()) { + QJsonArray fileFormats = config["importFormats"].toArray(); + int ff = 0; + foreach (const QJsonValue& fileFormat, fileFormats) { + QJsonObject fileFormatObject = fileFormat.toObject(); + + QString ext(fileFormatObject["extension"].toString()); + QString description(fileFormatObject.value("description").toString()); + QString icon(fileFormatObject.value("icon").toString()); + + if (ff > 0) { + importFormatsInfo.append(","); + } + + if (ff == fileFormats.count() - 1) { + importFormatsInfo.append(" or"); + } + + importFormatsFilterList.append(QString("%1 (*.%2)").arg(description, ext)); + importFormatsInfo.append(" .").append(ext); + iconsMap[ext] = icon; + ff++; + } + } + + // set custom file icons + setIconProvider(new HiFiIconProvider(iconsMap)); + + setNameFilters(importFormatsFilterList); + + setLabelText(QFileDialog::LookIn, QString(IMPORT_INFO).arg(importFormatsInfo)); + setLabelText(QFileDialog::FileName, INFO_LABEL_TEXT); + + } setLayout(); - QLabel* _importLabel = findChild("lookInLabel"); - _importLabel->setText(IMPORT_INFO); QGridLayout* gridLayout = (QGridLayout*) layout(); - gridLayout->addWidget(&_infoLabel, 2, 0); gridLayout->addWidget(&_cancelButton, 2, 1); gridLayout->addWidget(&_importButton, 2, 2); connect(&_importButton, SIGNAL(pressed()), SLOT(import())); connect(this, SIGNAL(currentChanged(QString)), SLOT(saveCurrentFile(QString))); + connect(&_cancelButton, SIGNAL(pressed()), SLOT(close())); + - resize(QSize(790, 477)); } ImportDialog::~ImportDialog() { + deleteLater(); } void ImportDialog::import() { @@ -153,7 +194,7 @@ void ImportDialog::saveCurrentFile(QString filename) { void ImportDialog::setLayout() { - // set ObjectName used in qss + // set ObjectName used in qss for styling _importButton.setObjectName("importButton"); _cancelButton.setObjectName("cancelButton"); @@ -186,9 +227,6 @@ void ImportDialog::setLayout() { widget = findChild("fileNameEdit"); widget->hide(); - widget = findChild("fileNameLabel"); - widget->hide(); - widget = findChild("fileTypeCombo"); widget->hide(); @@ -208,8 +246,9 @@ void ImportDialog::setLayout() { widget = findChild("treeView"); widget->setAttribute(Qt::WA_MacShowFocusRect, false); - // set custom file icons - setIconProvider(new HiFiIconProvider()); + // remove reference to treeView +// widget = NULL; +// widget->deleteLater(); switchToResourcesParentIfRequired(); QFile styleSheet("resources/styles/import_dialog.qss"); diff --git a/interface/src/ImportDialog.h b/interface/src/ImportDialog.h index eb8b6ba20f..b32b104408 100644 --- a/interface/src/ImportDialog.h +++ b/interface/src/ImportDialog.h @@ -13,13 +13,16 @@ #include #include #include +#include #include class HiFiIconProvider : public QFileIconProvider { public: + HiFiIconProvider(const QHash map) { iconsMap = map; }; virtual QIcon icon(IconType type) const; virtual QIcon icon(const QFileInfo &info) const; + QHash iconsMap; }; class ImportDialog : public QFileDialog { @@ -49,7 +52,6 @@ private: QString _currentFile; QPushButton _importButton; QPushButton _cancelButton; - QLabel _infoLabel; void setLayout(); };