From 96a160bade8b46a99f9dbd5deb8d90f6b26ea10b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Mon, 17 Feb 2014 12:35:42 -0800 Subject: [PATCH 1/8] Moved some code in ImportDialog.cpp for consistency --- interface/src/ImportDialog.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index ac7853629c..c276a4da6b 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -104,19 +104,6 @@ ImportDialog::ImportDialog(QWidget* parent) : setFileMode(QFileDialog::ExistingFile); setViewMode(QFileDialog::Detail); -#ifdef Q_OS_MAC - QString cmdString = ("Command"); -#else - QString cmdString = ("Control"); -#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(); @@ -175,6 +162,19 @@ void ImportDialog::saveCurrentFile(QString filename) { } void ImportDialog::setLayout() { + +#ifdef Q_OS_MAC + QString cmdString = ("Command"); +#else + QString cmdString = ("Control"); +#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); // set ObjectName used in qss for styling _importButton.setObjectName("importButton"); From 64031701e1bf07f9940be817191ef2fa9851439e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 12:33:05 -0800 Subject: [PATCH 2/8] Added icons for import dialog buttons --- interface/resources/icons/backButton.svg | 18 ++++++++++++++++++ interface/resources/icons/forwardButton.svg | 19 +++++++++++++++++++ interface/resources/icons/toParentButton.svg | 18 ++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 interface/resources/icons/backButton.svg create mode 100644 interface/resources/icons/forwardButton.svg create mode 100644 interface/resources/icons/toParentButton.svg diff --git a/interface/resources/icons/backButton.svg b/interface/resources/icons/backButton.svg new file mode 100644 index 0000000000..0c9fceccc4 --- /dev/null +++ b/interface/resources/icons/backButton.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/interface/resources/icons/forwardButton.svg b/interface/resources/icons/forwardButton.svg new file mode 100644 index 0000000000..73e6439f11 --- /dev/null +++ b/interface/resources/icons/forwardButton.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/interface/resources/icons/toParentButton.svg b/interface/resources/icons/toParentButton.svg new file mode 100644 index 0000000000..cfbe054234 --- /dev/null +++ b/interface/resources/icons/toParentButton.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + From f24cd0ceba270f83d63c8797fa51ffed45c27f7b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 12:34:38 -0800 Subject: [PATCH 3/8] Added switch to pasteMode after successful import. --- interface/src/Application.cpp | 41 +++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b316548ad4..6495b17633 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -309,8 +309,13 @@ Application::~Application() { delete idleTimer; Menu::getInstance()->saveSettings(); - _rearMirrorTools->saveSettings(_settings); + + _sharedVoxelSystem.changeTree(new VoxelTree); + if (_voxelImporter) { + _voxelImporter->saveSettings(_settings); + delete _voxelImporter; + } _settings->sync(); // let the avatar mixer know we're out @@ -331,7 +336,6 @@ Application::~Application() { storeSizeAndPosition(); saveScripts(); - _sharedVoxelSystem.changeTree(new VoxelTree); VoxelTreeElement::removeDeleteHook(&_voxels); // we don't need to do this processing on shutdown Menu::getInstance()->deleteLater(); @@ -1296,8 +1300,14 @@ void Application::mousePressEvent(QMouseEvent* event) { pasteVoxels(); } - } else if (event->button() == Qt::RightButton && Menu::getInstance()->isVoxelModeActionChecked()) { - deleteVoxelUnderCursor(); + } else if (event->button() == Qt::RightButton) { + if (Menu::getInstance()->isVoxelModeActionChecked()) { + deleteVoxelUnderCursor(); + } + if (_pasteMode) { + _pasteMode = false; + } + } } } @@ -1707,13 +1717,19 @@ void Application::exportVoxels() { void Application::importVoxels() { if (!_voxelImporter) { _voxelImporter = new VoxelImporter(_window); - _voxelImporter->init(_settings); + _voxelImporter->loadSettings(_settings); } - if (_voxelImporter->exec()) { - qDebug("[DEBUG] Import succeeded."); + if (!_voxelImporter->exec()) { + qDebug() << "[DEBUG] Import succeeded." << endl; + Menu::getInstance()->setIsOptionChecked(MenuOption::VoxelSelectMode, true); + _pasteMode = true; } else { - qDebug("[DEBUG] Import failed."); + qDebug() << "[DEBUG] Import failed." << endl; + if (_sharedVoxelSystem.getTree() == _voxelImporter->getVoxelTree()) { + _sharedVoxelSystem.killLocalVoxels(); + _sharedVoxelSystem.changeTree(&_clipboard); + } } // restore the main window's active state @@ -1770,10 +1786,11 @@ void Application::pasteVoxels() { } pasteVoxelsToOctalCode(octalCodeDestination); - + if (calculatedOctCode) { delete[] calculatedOctCode; } + _pasteMode = false; } void Application::findAxisAlignment() { @@ -1845,6 +1862,7 @@ void Application::init() { VoxelTreeElement::removeUpdateHook(&_sharedVoxelSystem); + // Cleanup of the original shared tree _sharedVoxelSystem.init(); VoxelTree* tmpTree = _sharedVoxelSystem.getTree(); _sharedVoxelSystem.changeTree(&_clipboard); @@ -1936,12 +1954,11 @@ void Application::init() { _audio.init(_glWidget); _rearMirrorTools = new RearMirrorTools(_glWidget, _mirrorViewRect, _settings); + connect(_rearMirrorTools, SIGNAL(closeView()), SLOT(closeMirrorView())); connect(_rearMirrorTools, SIGNAL(restoreView()), SLOT(restoreMirrorView())); connect(_rearMirrorTools, SIGNAL(shrinkView()), SLOT(shrinkMirrorView())); connect(_rearMirrorTools, SIGNAL(resetView()), SLOT(resetSensors())); - - } void Application::closeMirrorView() { @@ -2090,7 +2107,7 @@ void Application::updateMouseVoxels(float deltaTime, float& distance, BoxFace& f PerformanceWarning warn(showWarnings, "Application::updateMouseVoxels()"); _mouseVoxel.s = 0.0f; - bool wasInitialized = _mouseVoxelScaleInitialized; + bool wasInitialized = _mouseVoxelScaleInitialized ; if (Menu::getInstance()->isVoxelModeActionChecked() && (fabs(_myAvatar->getVelocity().x) + fabs(_myAvatar->getVelocity().y) + From 7bce649080064fdbea4638b4c91fc7e971c8a528 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 12:35:45 -0800 Subject: [PATCH 4/8] Fix for voxelImporter --- interface/src/VoxelImporter.cpp | 192 +++++++++++++------------------- interface/src/VoxelImporter.h | 17 ++- 2 files changed, 85 insertions(+), 124 deletions(-) diff --git a/interface/src/VoxelImporter.cpp b/interface/src/VoxelImporter.cpp index 653d04cee4..3949ee96d2 100644 --- a/interface/src/VoxelImporter.cpp +++ b/interface/src/VoxelImporter.cpp @@ -12,6 +12,9 @@ #include #include +const QString SETTINGS_GROUP_NAME = "VoxelImport"; +const QString IMPORT_DIALOG_SETTINGS_KEY = "ImportDialogSettings"; + class ImportTask : public QObject, public QRunnable { public: ImportTask(const QString &filename); @@ -21,18 +24,16 @@ private: QString _filename; }; -const QString SETTINGS_GROUP_NAME = "VoxelImport"; -const QString IMPORT_DIALOG_SETTINGS_KEY = "ImportDialogSettings"; - VoxelImporter::VoxelImporter(QWidget* parent) : QObject(parent), _voxelTree(true), _importDialog(parent), - _currentTask(NULL), - _nextTask(NULL) + _task(NULL), + _didImport(false) { - connect(&_importDialog, &QFileDialog::currentChanged, this, &VoxelImporter::preImport); - connect(&_importDialog, &QFileDialog::accepted, this, &VoxelImporter::import); + connect(&_voxelTree, SIGNAL(importProgress(int)), &_importDialog, SLOT(setProgressBarValue(int))); + connect(&_importDialog, SIGNAL(canceled()), this, SLOT(cancel())); + connect(&_importDialog, SIGNAL(accepted()), this, SLOT(import())); } void VoxelImporter::saveSettings(QSettings* settings) { @@ -41,145 +42,106 @@ void VoxelImporter::saveSettings(QSettings* settings) { settings->endGroup(); } -void VoxelImporter::init(QSettings* settings) { +void VoxelImporter::loadSettings(QSettings* settings) { settings->beginGroup(SETTINGS_GROUP_NAME); _importDialog.restoreState(settings->value(IMPORT_DIALOG_SETTINGS_KEY).toByteArray()); settings->endGroup(); } VoxelImporter::~VoxelImporter() { - if (_nextTask) { - delete _nextTask; - _nextTask = NULL; - } - - if (_currentTask) { - disconnect(_currentTask, 0, 0, 0); - _voxelTree.cancelImport(); - _currentTask = NULL; - } + cleanupTask(); } void VoxelImporter::reset() { _voxelTree.eraseAllOctreeElements(); _importDialog.reset(); - _filename = ""; - if (_nextTask) { - delete _nextTask; - _nextTask = NULL; - } - - if (_currentTask) { - _voxelTree.cancelImport(); - } + cleanupTask(); } int VoxelImporter::exec() { reset(); - - int ret = _importDialog.exec(); - - if (!ret) { - reset(); - } else { - _importDialog.reset(); - - VoxelSystem* voxelSystem = Application::getInstance()->getSharedVoxelSystem(); - - voxelSystem->copySubTreeIntoNewTree(voxelSystem->getTree()->getRoot(), - Application::getInstance()->getClipboard(), - true); - voxelSystem->changeTree(Application::getInstance()->getClipboard()); - } - - return ret; -} - -int VoxelImporter::preImport() { - QString filename = _importDialog.getCurrentFile(); - - if (!QFileInfo(filename).isFile()) { - return 0; - } + _importDialog.exec(); - _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; -} - -int VoxelImporter::import() { - QString filename = _importDialog.getCurrentFile(); - - if (!QFileInfo(filename).isFile()) { - _importDialog.reject(); - return 0; - } - - if (_filename == filename) { - if (_currentTask) { - connect(_currentTask, SIGNAL(destroyed()), &_importDialog, SLOT(accept())); - } else { - _importDialog.accept(); - } + if (!_didImport) { + // if the import is rejected, we make sure to cleanup before leaving + cleanupTask(); return 1; - } - - _filename = filename; - - if (_nextTask) { - delete _nextTask; - } - - _nextTask = new ImportTask(_filename); - connect(_nextTask, SIGNAL(destroyed()), SLOT(launchTask())); - connect(_nextTask, SIGNAL(destroyed()), &_importDialog, SLOT(accept())); - - if (_currentTask != NULL) { - _voxelTree.cancelImport(); } else { - launchTask(); + _didImport = false; + return 0; } - - return 1; } -void VoxelImporter::launchTask() { - if (_nextTask != NULL) { - _currentTask = _nextTask; - _nextTask = NULL; +void VoxelImporter::import() { + switch (_importDialog.getMode()) { + case loadingMode: + _importDialog.setMode(placeMode); + return; + case placeMode: + // Means the user chose to import + _didImport = true; + _importDialog.close(); + return; + case importMode: + default: + QString filename = _importDialog.getCurrentFile(); + // if it's not a file, we ignore the call + if (!QFileInfo(filename).isFile()) { + return; + } + + // Let's prepare the dialog window for import + _importDialog.setMode(loadingMode); + + // If not already done, we switch to the local tree + if (Application::getInstance()->getSharedVoxelSystem()->getTree() != &_voxelTree) { + Application::getInstance()->getSharedVoxelSystem()->changeTree(&_voxelTree); + } + + // Creation and launch of the import task on the thread pool + _task = new ImportTask(filename); + connect(_task, SIGNAL(destroyed()), SLOT(import())); + QThreadPool::globalInstance()->start(_task); + break; + } +} - if (Application::getInstance()->getSharedVoxelSystem()->getTree() != &_voxelTree) { - Application::getInstance()->getSharedVoxelSystem()->changeTree(&_voxelTree); - } +void VoxelImporter::cancel() { + switch (_importDialog.getMode()) { + case loadingMode: + disconnect(_task, 0, 0, 0); + cleanupTask(); + case placeMode: + _importDialog.setMode(importMode); + break; + case importMode: + default: + _importDialog.close(); + break; + } +} - QThreadPool::globalInstance()->start(_currentTask); - } else { - _currentTask = NULL; +void VoxelImporter::cleanupTask() { + // If a task is running, we cancel it and put the pointer to null + if (_task) { + _task = NULL; + _voxelTree.cancelImport(); } } ImportTask::ImportTask(const QString &filename) - : _filename(filename) { + : _filename(filename) +{ + setAutoDelete(true); } void ImportTask::run() { VoxelSystem* voxelSystem = Application::getInstance()->getSharedVoxelSystem(); + // We start by cleaning up the shared voxel system just in case voxelSystem->killLocalVoxels(); + // Then we call the righ method for the job if (_filename.endsWith(".png", Qt::CaseInsensitive)) { voxelSystem->readFromSquareARGB32Pixels(_filename.toLocal8Bit().data()); } else if (_filename.endsWith(".svo", Qt::CaseInsensitive)) { @@ -187,8 +149,10 @@ void ImportTask::run() { } else if (_filename.endsWith(".schematic", Qt::CaseInsensitive)) { voxelSystem->readFromSchematicFile(_filename.toLocal8Bit().data()); } else { - qDebug("[ERROR] Invalid file extension."); + // We should never get here. + qDebug() << "[ERROR] Invalid file extension." << endl; } - + + // Here we reaverage the tree so that he is ready for preview voxelSystem->getTree()->reaverageOctreeElements(); } diff --git a/interface/src/VoxelImporter.h b/interface/src/VoxelImporter.h index 43a3835e68..e77abaf18d 100644 --- a/interface/src/VoxelImporter.h +++ b/interface/src/VoxelImporter.h @@ -23,28 +23,25 @@ public: VoxelImporter(QWidget* parent = NULL); ~VoxelImporter(); - void init(QSettings* settings); void reset(); + void loadSettings(QSettings* settings); void saveSettings(QSettings* settings); VoxelTree* getVoxelTree() { return &_voxelTree; } public slots: int exec(); - int preImport(); - int import(); - -private slots: - void launchTask(); + void import(); + void cancel(); private: VoxelTree _voxelTree; ImportDialog _importDialog; - QString _filename; - - ImportTask* _currentTask; - ImportTask* _nextTask; + ImportTask* _task; + bool _didImport; + + void cleanupTask(); }; #endif /* defined(__hifi__VoxelImporter__) */ From 0ed7b959d770fc0e90af2a5361c3e5e0ca5add06 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 12:36:27 -0800 Subject: [PATCH 5/8] Changed import dialog UI --- interface/src/ImportDialog.cpp | 158 ++++++++++++++++----------------- interface/src/ImportDialog.h | 32 ++++--- 2 files changed, 97 insertions(+), 93 deletions(-) diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index c276a4da6b..192e7fbf86 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -16,14 +16,13 @@ const QString WINDOW_NAME = QObject::tr("Import Voxels"); const QString IMPORT_BUTTON_NAME = QObject::tr("Import"); +const QString LOADING_BUTTON_NAME = QObject::tr("Loading ..."); +const QString PLACE_BUTTON_NAME = QObject::tr("Place voxels"); 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.
"); -const QString DESKTOP_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); + +const QString DOWNLOAD_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); const int SHORT_FILE_EXTENSION = 4; const int SECOND_INDEX_LETTER = 1; @@ -66,7 +65,7 @@ QIcon HiFiIconProvider::icon(const QFileInfo &info) const { if (info.isDir()) { if (info.absoluteFilePath() == QDir::homePath()) { return QIcon("resources/icons/home.svg"); - } else if (info.absoluteFilePath() == DESKTOP_LOCATION) { + } else if (info.absoluteFilePath() == QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)) { return QIcon("resources/icons/desktop.svg"); } else if (info.absoluteFilePath() == QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)) { return QIcon("resources/icons/documents.svg"); @@ -95,10 +94,11 @@ QString HiFiIconProvider::type(const QFileInfo &info) const { } ImportDialog::ImportDialog(QWidget* parent) : - QFileDialog(parent, WINDOW_NAME, DESKTOP_LOCATION, NULL), + QFileDialog(parent, WINDOW_NAME, DOWNLOAD_LOCATION, NULL), + _progressBar(this), _importButton(IMPORT_BUTTON_NAME, this), _cancelButton(CANCEL_BUTTON_NAME, this), - fileAccepted(false) { + _mode(importMode) { setOption(QFileDialog::DontUseNativeDialog, true); setFileMode(QFileDialog::ExistingFile); @@ -107,96 +107,89 @@ ImportDialog::ImportDialog(QWidget* parent) : 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))); -} - -ImportDialog::~ImportDialog() { - deleteLater(); -} - -void ImportDialog::import() { - fileAccepted = true; - emit accepted(); -} - -void ImportDialog::accept() { - // do nothing if import is not enable - if (!_importButton.isEnabled()) { - return; - } + _progressBar.setRange(0, 100); - if (!fileAccepted) { - fileAccepted = true; - emit accepted(); - } else { - QFileDialog::accept(); - } -} - -void ImportDialog::reject() { - QFileDialog::reject(); -} - -int ImportDialog::exec() { - // deselect selected file - selectFile(" "); - return QFileDialog::exec(); + connect(&_importButton, SIGNAL(pressed()), SLOT(accept())); + connect(&_cancelButton, SIGNAL(pressed()), SIGNAL(canceled())); + connect(this, SIGNAL(currentChanged(QString)), SLOT(saveCurrentFile(QString))); } void ImportDialog::reset() { - _importButton.setEnabled(false); + setMode(importMode); + _progressBar.setValue(0); } -void ImportDialog::saveCurrentFile(QString filename) { - if (!filename.isEmpty() && QFileInfo(filename).isFile()) { - _currentFile = filename; - _importButton.setEnabled(true); - } else { - _currentFile.clear(); - _importButton.setEnabled(false); +void ImportDialog::setMode(dialogMode mode) { + _mode = mode; + + switch (_mode) { + case loadingMode: + _importButton.setEnabled(false); + _importButton.setText(LOADING_BUTTON_NAME); + findChild("sidebar")->setEnabled(false); + findChild("treeView")->setEnabled(false); + findChild("backButton")->setEnabled(false); + findChild("forwardButton")->setEnabled(false); + findChild("toParentButton")->setEnabled(false); + break; + case placeMode: + _progressBar.setValue(100); + _importButton.setEnabled(true); + _importButton.setText(PLACE_BUTTON_NAME); + findChild("sidebar")->setEnabled(false); + findChild("treeView")->setEnabled(false); + findChild("backButton")->setEnabled(false); + findChild("forwardButton")->setEnabled(false); + findChild("toParentButton")->setEnabled(false); + break; + case importMode: + default: + _progressBar.setValue(0); + _importButton.setEnabled(true); + _importButton.setText(IMPORT_BUTTON_NAME); + findChild("sidebar")->setEnabled(true); + findChild("treeView")->setEnabled(true); + findChild("backButton")->setEnabled(true); + findChild("forwardButton")->setEnabled(true); + findChild("toParentButton")->setEnabled(true); + break; } } +void ImportDialog::setProgressBarValue(int value) { + _progressBar.setValue(value); +} + +void ImportDialog::accept() { + emit accepted(); +} + +void ImportDialog::saveCurrentFile(QString filename) { + _currentFile = QFileInfo(filename).isFile() ? filename : ""; +} +#include void ImportDialog::setLayout() { - -#ifdef Q_OS_MAC - QString cmdString = ("Command"); -#else - QString cmdString = ("Control"); -#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(&_progressBar, 2, 0, 2, 1); gridLayout->addWidget(&_cancelButton, 2, 1, 2, 1); gridLayout->addWidget(&_importButton, 2, 2, 2, 1); - + // set ObjectName used in qss for styling + _progressBar.setObjectName("progressBar"); _importButton.setObjectName("importButton"); _cancelButton.setObjectName("cancelButton"); // set fixed size _importButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); _cancelButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + + _progressBar.setFixedHeight(7); + _progressBar.setTextVisible(false); // 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(); @@ -230,8 +223,18 @@ void ImportDialog::setLayout() { widget = findChild("treeView"); widget->setAttribute(Qt::WA_MacShowFocusRect, false); - + switchToResourcesParentIfRequired(); + + QIcon icon = QIcon("resources/icons/backButton.svg"); + QPushButton* button = (QPushButton*) findChild("backButton"); + //button->setIcon(icon); + + button = (QPushButton*) findChild("forwardButton"); + button = (QPushButton*) findChild("toParentButton"); + + + QFile styleSheet("resources/styles/import_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { setStyleSheet(styleSheet.readAll()); @@ -281,11 +284,6 @@ void ImportDialog::setImportTypes() { setIconProvider(new HiFiIconProvider(iconsMap)); setNameFilter(importFormatsFilterList); -#ifdef Q_OS_MAC - QString cmdString = ("Command"); -#else - QString cmdString = ("Control"); -#endif setLabelText(QFileDialog::LookIn, QString(IMPORT_INFO).arg(importFormatsInfo)); } } diff --git a/interface/src/ImportDialog.h b/interface/src/ImportDialog.h index 5cfc49e51e..910cd8f789 100644 --- a/interface/src/ImportDialog.h +++ b/interface/src/ImportDialog.h @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -26,37 +27,42 @@ public: QHash iconsMap; }; +enum dialogMode { + importMode, + loadingMode, + placeMode +}; + class ImportDialog : public QFileDialog { Q_OBJECT public: ImportDialog(QWidget* parent = NULL); - ~ImportDialog(); - void reset(); - + QString getCurrentFile() const { return _currentFile; } - + dialogMode getMode() const { return _mode; } + void setMode(dialogMode mode); + signals: - void accepted(); - + void canceled(); + public slots: - int exec(); - void import(); - void accept(); - void reject(); + void setProgressBarValue(int value); private slots: - void saveCurrentFile(QString); + void accept(); + void saveCurrentFile(QString filename); private: QString _currentFile; + QProgressBar _progressBar; QPushButton _importButton; QPushButton _cancelButton; - + dialogMode _mode; + void setLayout(); void setImportTypes(); - bool fileAccepted; }; #endif /* defined(__hifi__ImportDialog__) */ From a732cbf3005b7f2b4c2b406211fc64aa0b800054 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 12:37:08 -0800 Subject: [PATCH 6/8] Modified QSS for new UI (QProgressBar) --- interface/resources/styles/import_dialog.qss | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/interface/resources/styles/import_dialog.qss b/interface/resources/styles/import_dialog.qss index dd9761b7ed..e5046f8b77 100644 --- a/interface/resources/styles/import_dialog.qss +++ b/interface/resources/styles/import_dialog.qss @@ -20,12 +20,23 @@ QLabel#infoLabel { color: #666666; } +QProgressBar { + border: 0px; + border-radius: 0px; + background-color: #BFE4E4; + margin-right: 60px; +} + +QProgressBar::chunk { + background-color: #000000; +} + QPushButton { border-width: 0; border-radius: 9px; font-size: 18px; padding: 17px 0px 15px; - width: 107px; + width: 120px; margin-top: 20px; margin-bottom: 18px; } From 406768bf120cfda1ca689073f385d86e6d57002d Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 13:13:17 -0800 Subject: [PATCH 7/8] Code style fixes --- interface/src/Application.cpp | 2 +- interface/src/ImportDialog.cpp | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3e30d5bfb4..bdffcd1dec 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2128,7 +2128,7 @@ void Application::updateMouseVoxels(float deltaTime, float& distance, BoxFace& f PerformanceWarning warn(showWarnings, "Application::updateMouseVoxels()"); _mouseVoxel.s = 0.0f; - bool wasInitialized = _mouseVoxelScaleInitialized ; + bool wasInitialized = _mouseVoxelScaleInitialized; if (Menu::getInstance()->isVoxelModeActionChecked() && (fabs(_myAvatar->getVelocity().x) + fabs(_myAvatar->getVelocity().y) + diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index 192e7fbf86..0911f7c184 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -21,7 +21,6 @@ const QString PLACE_BUTTON_NAME = QObject::tr("Place voxels"); const QString IMPORT_INFO = QObject::tr("Import %1 as voxels"); const QString CANCEL_BUTTON_NAME = QObject::tr("Cancel"); - const QString DOWNLOAD_LOCATION = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); const int SHORT_FILE_EXTENSION = 4; const int SECOND_INDEX_LETTER = 1; @@ -167,7 +166,7 @@ void ImportDialog::accept() { void ImportDialog::saveCurrentFile(QString filename) { _currentFile = QFileInfo(filename).isFile() ? filename : ""; } -#include + void ImportDialog::setLayout() { QGridLayout* gridLayout = (QGridLayout*) layout(); gridLayout->addWidget(&_progressBar, 2, 0, 2, 1); @@ -225,7 +224,6 @@ void ImportDialog::setLayout() { widget->setAttribute(Qt::WA_MacShowFocusRect, false); switchToResourcesParentIfRequired(); - QIcon icon = QIcon("resources/icons/backButton.svg"); QPushButton* button = (QPushButton*) findChild("backButton"); //button->setIcon(icon); @@ -233,8 +231,6 @@ void ImportDialog::setLayout() { button = (QPushButton*) findChild("forwardButton"); button = (QPushButton*) findChild("toParentButton"); - - QFile styleSheet("resources/styles/import_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { setStyleSheet(styleSheet.readAll()); From af3e19e6402c643b998e88d5c784dd4f65d2861b Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Wed, 19 Feb 2014 16:01:14 -0800 Subject: [PATCH 8/8] Added style and pngs for the buttons --- interface/resources/styles/import_dialog.qss | 15 +++++++++++++ interface/src/ImportDialog.cpp | 23 ++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/interface/resources/styles/import_dialog.qss b/interface/resources/styles/import_dialog.qss index e5046f8b77..d7d661399d 100644 --- a/interface/resources/styles/import_dialog.qss +++ b/interface/resources/styles/import_dialog.qss @@ -62,6 +62,21 @@ QPushButton#cancelButton { margin-right: 11px; } +#backButton { + background-image: url(resources/icons/backButton.svg); + border-radius: 0px; +} + +#forwardButton { + background-image: url(resources/icons/forwardButton.svg); + border-radius: 0px; +} + +#toParentButton { + background-image: url(resources/icons/toParentButton.svg); + border-radius: 0px; +} + QSidebar, QTreeView { border: 1px solid #C5C5C5; font-size: 14px; diff --git a/interface/src/ImportDialog.cpp b/interface/src/ImportDialog.cpp index 0911f7c184..2e0173fb9f 100644 --- a/interface/src/ImportDialog.cpp +++ b/interface/src/ImportDialog.cpp @@ -181,9 +181,21 @@ void ImportDialog::setLayout() { // set fixed size _importButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); _cancelButton.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - - _progressBar.setFixedHeight(7); + _cancelButton.setFlat(true); + int progressBarHeight = 7; + _progressBar.setFixedHeight(progressBarHeight); _progressBar.setTextVisible(false); + + QSize BUTTON_SIZE = QSize(43, 33); + QPushButton* button = (QPushButton*) findChild("backButton"); + button->setIcon(QIcon()); + button->setFixedSize(BUTTON_SIZE); + button = (QPushButton*) findChild("forwardButton"); + button->setIcon(QIcon()); + button->setFixedSize(BUTTON_SIZE); + button = (QPushButton*) findChild("toParentButton"); + button->setIcon(QIcon()); + button->setFixedSize(BUTTON_SIZE); // hide unused embedded widgets in QFileDialog QWidget* widget = findChild("lookInCombo"); @@ -224,13 +236,6 @@ void ImportDialog::setLayout() { widget->setAttribute(Qt::WA_MacShowFocusRect, false); switchToResourcesParentIfRequired(); - QIcon icon = QIcon("resources/icons/backButton.svg"); - QPushButton* button = (QPushButton*) findChild("backButton"); - //button->setIcon(icon); - - button = (QPushButton*) findChild("forwardButton"); - button = (QPushButton*) findChild("toParentButton"); - QFile styleSheet("resources/styles/import_dialog.qss"); if (styleSheet.open(QIODevice::ReadOnly)) { setStyleSheet(styleSheet.readAll());