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();
};