From ef39d019aca3f69678b846f595ae230532f40da6 Mon Sep 17 00:00:00 2001 From: stojce Date: Sun, 26 Jan 2014 16:28:21 +0100 Subject: [PATCH 1/3] Voxel import fix --- interface/src/ImportDialog.cpp | 77 ++++++++++++++++----------------- interface/src/VoxelImporter.cpp | 17 +++++++- 2 files changed, 54 insertions(+), 40 deletions(-) diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index c3f499b038..ec64b84e63 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -20,38 +19,38 @@ const QString IMPORT_BUTTON_NAME = QObject::tr("Import"); const QString IMPORT_INFO = QObject::tr("Import %1 as voxels"); const QString CANCEL_BUTTON_NAME = QObject::tr("Cancel"); const QString INFO_LABEL_TEXT = QObject::tr("
" - "This will load the selected file into Hifi and allow you
" - "to place it with %1-V; you must be in select or
" - "add mode (S or V keys will toggle mode) to place.
"); + "This will load the selected file into Hifi and allow you
" + "to place it with %1-V; you must be in select or
" + "add mode (S or V keys will toggle mode) to place."); const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); const int SHORT_FILE_EXTENSION = 4; const int SECOND_INDEX_LETTER = 1; QIcon HiFiIconProvider::icon(QFileIconProvider::IconType type) const { - + switchToResourcesParentIfRequired(); - + // types // Computer, Desktop, Trashcan, Network, Drive, Folder, File QString typeString; - + switch (type) { case QFileIconProvider::Computer: typeString = "computer"; break; - + case QFileIconProvider::Desktop: typeString = "desktop"; break; - + case QFileIconProvider::Trashcan: case QFileIconProvider::Network: case QFileIconProvider::Drive: case QFileIconProvider::Folder: typeString = "folder"; break; - + default: typeString = "file"; break; @@ -63,7 +62,7 @@ QIcon HiFiIconProvider::icon(QFileIconProvider::IconType type) const { QIcon HiFiIconProvider::icon(const QFileInfo &info) const { switchToResourcesParentIfRequired(); const QString ext = info.suffix().toLower(); - + if (info.isDir()) { if (info.absoluteFilePath() == QDir::homePath()) { return QIcon("resources/icons/home.svg"); @@ -74,12 +73,12 @@ QIcon HiFiIconProvider::icon(const QFileInfo &info) const { } return QIcon("resources/icons/folder.svg"); } - + QFileInfo iconFile("resources/icons/" + iconsMap[ext]); if (iconFile.exists() && iconFile.isFile()) { return QIcon(iconFile.filePath()); } - + return QIcon("resources/icons/file.svg"); } @@ -99,7 +98,7 @@ ImportDialog::ImportDialog(QWidget* parent) : QFileDialog(parent, WINDOW_NAME, DESKTOP_LOCATION, NULL), _importButton(IMPORT_BUTTON_NAME, this), _cancelButton(CANCEL_BUTTON_NAME, this) { - + setOption(QFileDialog::DontUseNativeDialog, true); setFileMode(QFileDialog::ExistingFile); setViewMode(QFileDialog::Detail); @@ -111,16 +110,18 @@ ImportDialog::ImportDialog(QWidget* parent) : #endif QLabel* infoLabel = new QLabel(QString(INFO_LABEL_TEXT).arg(cmdString)); infoLabel->setObjectName("infoLabel"); - + QGridLayout* gridLayout = (QGridLayout*) layout(); gridLayout->addWidget(infoLabel, 2, 0, 2, 1); gridLayout->addWidget(&_cancelButton, 2, 1, 2, 1); gridLayout->addWidget(&_importButton, 2, 2, 2, 1); - + setImportTypes(); setLayout(); connect(&_importButton, SIGNAL(pressed()), SLOT(import())); + connect(this, SIGNAL(currentChanged(QString)), SLOT(saveCurrentFile(QString))); + connect(&_cancelButton, SIGNAL(pressed()), SLOT(close())); connect(this, SIGNAL(currentChanged(QString)), SLOT(saveCurrentFile(QString))); } @@ -131,7 +132,6 @@ ImportDialog::~ImportDialog() { void ImportDialog::import() { emit accepted(); - close(); } void ImportDialog::accept() { @@ -163,72 +163,72 @@ void ImportDialog::saveCurrentFile(QString filename) { } void ImportDialog::setLayout() { - + // set ObjectName used in qss for styling _importButton.setObjectName("importButton"); _cancelButton.setObjectName("cancelButton"); - + // set fixed size _importButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); _cancelButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - + // hide unused embedded widgets in QFileDialog QWidget* widget = findChild("lookInCombo"); widget->hide(); - + widget = findChild("backButton"); widget->hide(); - + widget = findChild("forwardButton"); widget->hide(); - + widget = findChild("toParentButton"); widget->hide(); - + widget = findChild("newFolderButton"); widget->hide(); - + widget = findChild("listModeButton"); widget->hide(); - + widget = findChild("detailModeButton"); widget->hide(); - + widget = findChild("fileNameEdit"); widget->hide(); - + widget = findChild("fileTypeCombo"); widget->hide(); - + widget = findChild("fileTypeLabel"); widget->hide(); - + widget = findChild("fileNameLabel"); widget->hide(); - + widget = findChild("buttonBox"); widget->hide(); - + QSplitter* splitter = findChild("splitter"); splitter->setHandleWidth(0); - + // remove blue outline on Mac widget = findChild("sidebar"); widget->setAttribute(Qt::WA_MacShowFocusRect, false); - + widget = findChild("treeView"); widget->setAttribute(Qt::WA_MacShowFocusRect, false); - + // remove reference to treeView widget = NULL; widget->deleteLater(); - + switchToResourcesParentIfRequired(); QFile styleSheet("resources/styles/import_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { setStyleSheet(styleSheet.readAll()); } - + } void ImportDialog::setImportTypes() { @@ -251,7 +251,6 @@ void ImportDialog::setImportTypes() { QJsonObject fileFormatObject = fileFormat.toObject(); QString ext(fileFormatObject["extension"].toString()); - QString description(fileFormatObject.value("description").toString()); QString icon(fileFormatObject.value("icon").toString()); if (formatsCounter > 0) { @@ -273,7 +272,7 @@ void ImportDialog::setImportTypes() { // set custom file icons setIconProvider(new HiFiIconProvider(iconsMap)); setNameFilter(importFormatsFilterList); - + #ifdef Q_OS_MAC QString cmdString = ("Command"); #else diff --git a/interface/src/VoxelImporter.cpp b/interface/src/VoxelImporter.cpp index 49b28c850f..0011b0abb7 100644 --- a/interface/src/VoxelImporter.cpp +++ b/interface/src/VoxelImporter.cpp @@ -102,7 +102,22 @@ int VoxelImporter::preImport() { if (!QFileInfo(filename).isFile()) { return 0; } - + + _filename = filename; + + if (_nextTask) { + delete _nextTask; + } + + _nextTask = new ImportTask(_filename); + connect(_nextTask, SIGNAL(destroyed()), SLOT(launchTask())); + + if (_currentTask != NULL) { + _voxelTree.cancelImport(); + } else { + launchTask(); + } + return 1; } From dcdbf729c9656d17469bbc2d56ea35b55b2fcfea Mon Sep 17 00:00:00 2001 From: stojce Date: Sun, 26 Jan 2014 17:57:21 +0100 Subject: [PATCH 2/3] importing file w/ double click --- interface/src/ImportDialog.cpp | 11 +++++++++-- interface/src/ImportDialog.h | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index ec64b84e63..b992b216bc 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -97,7 +97,8 @@ QString HiFiIconProvider::type(const QFileInfo &info) const { ImportDialog::ImportDialog(QWidget* parent) : QFileDialog(parent, WINDOW_NAME, DESKTOP_LOCATION, NULL), _importButton(IMPORT_BUTTON_NAME, this), - _cancelButton(CANCEL_BUTTON_NAME, this) { + _cancelButton(CANCEL_BUTTON_NAME, this), + fileAccepted(false) { setOption(QFileDialog::DontUseNativeDialog, true); setFileMode(QFileDialog::ExistingFile); @@ -131,11 +132,17 @@ ImportDialog::~ImportDialog() { } void ImportDialog::import() { + fileAccepted = true; emit accepted(); } void ImportDialog::accept() { - QFileDialog::accept(); + if (!fileAccepted) { + fileAccepted = true; + emit accepted(); + } else { + QFileDialog::accept(); + } } void ImportDialog::reject() { diff --git a/interface/src/ImportDialog.h b/interface/src/ImportDialog.h index f66321c209..5cfc49e51e 100644 --- a/interface/src/ImportDialog.h +++ b/interface/src/ImportDialog.h @@ -56,6 +56,7 @@ private: void setLayout(); void setImportTypes(); + bool fileAccepted; }; #endif /* defined(__hifi__ImportDialog__) */ From 3fde4078c516a2400a3ed690adf7cd8a2d7080d6 Mon Sep 17 00:00:00 2001 From: stojce Date: Mon, 27 Jan 2014 21:48:26 +0100 Subject: [PATCH 3/3] ignore double-click on disabled items --- interface/src/ImportDialog.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index b992b216bc..28e39f1abd 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -137,6 +137,11 @@ void ImportDialog::import() { } void ImportDialog::accept() { + // do nothing if import is not enable + if (!_importButton.isEnabled()) { + return; + } + if (!fileAccepted) { fileAccepted = true; emit accepted();